/* Human homepage: author: ' */ var Human=(()=>{var nle=Object.create;var N1=Object.defineProperty;var rle=Object.getOwnPropertyDescriptor;var sle=Object.getOwnPropertyNames;var ole=Object.getPrototypeOf,ale=Object.prototype.hasOwnProperty;var ile=(e,t,n)=>t in e?N1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var aP=e=>N1(e,"__esModule",{value:!0});var _c=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof require!="undefined"?require:t)[n]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var Gr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),dn=(e,t)=>{aP(e);for(var n in t)N1(e,n,{get:t[n],enumerable:!0})},lle=(e,t,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of sle(t))!ale.call(e,r)&&r!=="default"&&N1(e,r,{get:()=>t[r],enumerable:!(n=rle(t,r))||n.enumerable});return e},T1=e=>lle(aP(N1(e!=null?nle(ole(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var nt=(e,t,n)=>(ile(e,typeof t!="symbol"?t+"":t,n),n),iP=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var _1=(e,t,n)=>(iP(e,t,"read from private field"),n?n.call(e):t.get(e)),E1=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},R1=(e,t,n,r)=>(iP(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);var jj=Gr((ltt,Uj)=>{Uj.exports=jn;var Ga=null;try{Ga=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function jn(e,t,n){this.low=e|0,this.high=t|0,this.unsigned=!!n}jn.prototype.__isLong__;Object.defineProperty(jn.prototype,"__isLong__",{value:!0});function Qo(e){return(e&&e.__isLong__)===!0}jn.isLong=Qo;var Oj={},Pj={};function Ph(e,t){var n,r,s;return t?(e>>>=0,(s=0<=e&&e<256)&&(r=Pj[e],r)?r:(n=Hn(e,(e|0)<0?-1:0,!0),s&&(Pj[e]=n),n)):(e|=0,(s=-128<=e&&e<128)&&(r=Oj[e],r)?r:(n=Hn(e,e<0?-1:0,!1),s&&(Oj[e]=n),n))}jn.fromInt=Ph;function Ua(e,t){if(isNaN(e))return t?Mh:ja;if(t){if(e<0)return Mh;if(e>=zj)return Gj}else{if(e<=-Lj)return ea;if(e+1>=Lj)return Wj}return e<0?Ua(-e,t).neg():Hn(e%fy|0,e/fy|0,t)}jn.fromNumber=Ua;function Hn(e,t,n){return new jn(e,t,n)}jn.fromBits=Hn;var x3=Math.pow;function z7(e,t,n){if(e.length===0)throw Error("empty string");if(e==="NaN"||e==="Infinity"||e==="+Infinity"||e==="-Infinity")return ja;if(typeof t=="number"?(n=t,t=!1):t=!!t,n=n||10,n<2||360)throw Error("interior hyphen");if(r===0)return z7(e.substring(1),t,n).neg();for(var s=Ua(x3(n,8)),o=ja,a=0;a>>0:this.low};Ue.toNumber=function(){return this.unsigned?(this.high>>>0)*fy+(this.low>>>0):this.high*fy+(this.low>>>0)};Ue.toString=function(t){if(t=t||10,t<2||36>>0,c=u.toString(t);if(a=l,a.isZero())return c+i;for(;c.length<6;)c="0"+c;i=""+c+i}};Ue.getHighBits=function(){return this.high};Ue.getHighBitsUnsigned=function(){return this.high>>>0};Ue.getLowBits=function(){return this.low};Ue.getLowBitsUnsigned=function(){return this.low>>>0};Ue.getNumBitsAbs=function(){if(this.isNegative())return this.eq(ea)?64:this.neg().getNumBitsAbs();for(var t=this.high!=0?this.high:this.low,n=31;n>0&&(t&1<=0};Ue.isOdd=function(){return(this.low&1)==1};Ue.isEven=function(){return(this.low&1)==0};Ue.equals=function(t){return Qo(t)||(t=Di(t)),this.unsigned!==t.unsigned&&this.high>>>31==1&&t.high>>>31==1?!1:this.high===t.high&&this.low===t.low};Ue.eq=Ue.equals;Ue.notEquals=function(t){return!this.eq(t)};Ue.neq=Ue.notEquals;Ue.ne=Ue.notEquals;Ue.lessThan=function(t){return this.comp(t)<0};Ue.lt=Ue.lessThan;Ue.lessThanOrEqual=function(t){return this.comp(t)<=0};Ue.lte=Ue.lessThanOrEqual;Ue.le=Ue.lessThanOrEqual;Ue.greaterThan=function(t){return this.comp(t)>0};Ue.gt=Ue.greaterThan;Ue.greaterThanOrEqual=function(t){return this.comp(t)>=0};Ue.gte=Ue.greaterThanOrEqual;Ue.ge=Ue.greaterThanOrEqual;Ue.compare=function(t){if(Qo(t)||(t=Di(t)),this.eq(t))return 0;var n=this.isNegative(),r=t.isNegative();return n&&!r?-1:!n&&r?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1};Ue.comp=Ue.compare;Ue.negate=function(){return!this.unsigned&&this.eq(ea)?ea:this.not().add(hy)};Ue.neg=Ue.negate;Ue.add=function(t){Qo(t)||(t=Di(t));var n=this.high>>>16,r=this.high&65535,s=this.low>>>16,o=this.low&65535,a=t.high>>>16,i=t.high&65535,l=t.low>>>16,u=t.low&65535,c=0,p=0,d=0,f=0;return f+=o+u,d+=f>>>16,f&=65535,d+=s+l,p+=d>>>16,d&=65535,p+=r+i,c+=p>>>16,p&=65535,c+=n+a,c&=65535,Hn(d<<16|f,c<<16|p,this.unsigned)};Ue.subtract=function(t){return Qo(t)||(t=Di(t)),this.add(t.neg())};Ue.sub=Ue.subtract;Ue.multiply=function(t){if(this.isZero())return ja;if(Qo(t)||(t=Di(t)),Ga){var n=Ga.mul(this.low,this.high,t.low,t.high);return Hn(n,Ga.get_high(),this.unsigned)}if(t.isZero())return ja;if(this.eq(ea))return t.isOdd()?ea:ja;if(t.eq(ea))return this.isOdd()?ea:ja;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(Bj)&&t.lt(Bj))return Ua(this.toNumber()*t.toNumber(),this.unsigned);var r=this.high>>>16,s=this.high&65535,o=this.low>>>16,a=this.low&65535,i=t.high>>>16,l=t.high&65535,u=t.low>>>16,c=t.low&65535,p=0,d=0,f=0,h=0;return h+=a*c,f+=h>>>16,h&=65535,f+=o*c,d+=f>>>16,f&=65535,f+=a*u,d+=f>>>16,f&=65535,d+=s*c,p+=d>>>16,d&=65535,d+=o*u,p+=d>>>16,d&=65535,d+=a*l,p+=d>>>16,d&=65535,p+=r*c+s*u+o*l+a*i,p&=65535,Hn(f<<16|h,p<<16|d,this.unsigned)};Ue.mul=Ue.multiply;Ue.divide=function(t){if(Qo(t)||(t=Di(t)),t.isZero())throw Error("division by zero");if(Ga){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var n=(this.unsigned?Ga.div_u:Ga.div_s)(this.low,this.high,t.low,t.high);return Hn(n,Ga.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Mh:ja;var r,s,o;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Mh;if(t.gt(this.shru(1)))return Vj;o=Mh}else{if(this.eq(ea)){if(t.eq(hy)||t.eq(L7))return ea;if(t.eq(ea))return hy;var a=this.shr(1);return r=a.div(t).shl(1),r.eq(ja)?t.isNegative()?hy:L7:(s=this.sub(t.mul(r)),o=r.add(s.div(t)),o)}else if(t.eq(ea))return this.unsigned?Mh:ja;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();o=ja}for(s=this;s.gte(t);){r=Math.max(1,Math.floor(s.toNumber()/t.toNumber()));for(var i=Math.ceil(Math.log(r)/Math.LN2),l=i<=48?1:x3(2,i-48),u=Ua(r),c=u.mul(t);c.isNegative()||c.gt(s);)r-=l,u=Ua(r,this.unsigned),c=u.mul(t);u.isZero()&&(u=hy),o=o.add(u),s=s.sub(c)}return o};Ue.div=Ue.divide;Ue.modulo=function(t){if(Qo(t)||(t=Di(t)),Ga){var n=(this.unsigned?Ga.rem_u:Ga.rem_s)(this.low,this.high,t.low,t.high);return Hn(n,Ga.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};Ue.mod=Ue.modulo;Ue.rem=Ue.modulo;Ue.not=function(){return Hn(~this.low,~this.high,this.unsigned)};Ue.and=function(t){return Qo(t)||(t=Di(t)),Hn(this.low&t.low,this.high&t.high,this.unsigned)};Ue.or=function(t){return Qo(t)||(t=Di(t)),Hn(this.low|t.low,this.high|t.high,this.unsigned)};Ue.xor=function(t){return Qo(t)||(t=Di(t)),Hn(this.low^t.low,this.high^t.high,this.unsigned)};Ue.shiftLeft=function(t){return Qo(t)&&(t=t.toInt()),(t&=63)==0?this:t<32?Hn(this.low<>>32-t,this.unsigned):Hn(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):Hn(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};Ue.shr=Ue.shiftRight;Ue.shiftRightUnsigned=function(t){if(Qo(t)&&(t=t.toInt()),t&=63,t===0)return this;var n=this.high;if(t<32){var r=this.low;return Hn(r>>>t|n<<32-t,n>>>t,this.unsigned)}else return t===32?Hn(n,0,this.unsigned):Hn(n>>>t-32,0,this.unsigned)};Ue.shru=Ue.shiftRightUnsigned;Ue.shr_u=Ue.shiftRightUnsigned;Ue.toSigned=function(){return this.unsigned?Hn(this.low,this.high,!1):this};Ue.toUnsigned=function(){return this.unsigned?this:Hn(this.low,this.high,!0)};Ue.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()};Ue.toBytesLE=function(){var t=this.high,n=this.low;return[n&255,n>>>8&255,n>>>16&255,n>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};Ue.toBytesBE=function(){var t=this.high,n=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,n>>>24,n>>>16&255,n>>>8&255,n&255]};jn.fromBytes=function(t,n,r){return r?jn.fromBytesLE(t,n):jn.fromBytesBE(t,n)};jn.fromBytesLE=function(t,n){return new jn(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,n)};jn.fromBytesBE=function(t,n){return new jn(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],n)}});var TH=Gr(()=>{});var iq=Gr((aq,PD)=>{(function(e,t,n){function r(i){var l=this,u=a();l.next=function(){var c=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=c-(l.c=c|0)},l.c=1,l.s0=u(" "),l.s1=u(" "),l.s2=u(" "),l.s0-=u(i),l.s0<0&&(l.s0+=1),l.s1-=u(i),l.s1<0&&(l.s1+=1),l.s2-=u(i),l.s2<0&&(l.s2+=1),u=null}function s(i,l){return l.c=i.c,l.s0=i.s0,l.s1=i.s1,l.s2=i.s2,l}function o(i,l){var u=new r(i),c=l&&l.state,p=u.next;return p.int32=function(){return u.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c=="object"&&s(c,u),p.state=function(){return s(u,{})}),p}function a(){var i=4022871197,l=function(u){u=u.toString();for(var c=0;c>>0,p-=i,p*=i,i=p>>>0,p-=i,i+=p*4294967296}return(i>>>0)*23283064365386963e-26};return l}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.alea=o})(aq,typeof PD=="object"&&PD,typeof define=="function"&&define)});var uq=Gr((lq,MD)=>{(function(e,t,n){function r(a){var i=this,l="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xor128=o})(lq,typeof MD=="object"&&MD,typeof define=="function"&&define)});var pq=Gr((cq,zD)=>{(function(e,t,n){function r(a){var i=this,l="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:l+=a;for(var u=0;u>>4),i.next()}function s(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function o(a,i){var l=new r(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xorwow=o})(cq,typeof zD=="object"&&zD,typeof define=="function"&&define)});var fq=Gr((dq,LD)=>{(function(e,t,n){function r(a){var i=this;i.next=function(){var u=i.x,c=i.i,p,d,f;return p=u[c],p^=p>>>7,d=p^p<<24,p=u[c+1&7],d^=p^p>>>10,p=u[c+3&7],d^=p^p>>>3,p=u[c+4&7],d^=p^p<<7,p=u[c+7&7],p=p^p<<13,d^=p^p<<9,u[c]=d,i.i=c+1&7,d};function l(u,c){var p,d,f=[];if(c===(c|0))d=f[0]=c;else for(c=""+c,p=0;p0;--p)u.next()}l(i,a)}function s(a,i){return i.x=a.x.slice(),i.i=a.i,i}function o(a,i){a==null&&(a=+new Date);var l=new r(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.x&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xorshift7=o})(dq,typeof LD=="object"&&LD,typeof define=="function"&&define)});var mq=Gr((hq,BD)=>{(function(e,t,n){function r(a){var i=this;i.next=function(){var u=i.w,c=i.X,p=i.i,d,f;return i.w=u=u+1640531527|0,f=c[p+34&127],d=c[p=p+1&127],f^=f<<13,d^=d<<17,f^=f>>>15,d^=d>>>12,f=c[p]=f^d,i.i=p,f+(u^u>>>16)|0};function l(u,c){var p,d,f,h,m,g=[],x=128;for(c===(c|0)?(d=c,c=null):(c=c+"\0",d=0,x=Math.max(x,c.length)),f=0,h=-32;h>>15,d^=d<<4,d^=d>>>13,h>=0&&(m=m+1640531527|0,p=g[h&127]^=d+m,f=p==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,h=4*128;h>0;--h)d=g[f+34&127],p=g[f=f+1&127],d^=d<<13,p^=p<<17,d^=d>>>15,p^=p>>>12,g[f]=d^p;u.w=m,u.X=g,u.i=f}l(i,a)}function s(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function o(a,i){a==null&&(a=+new Date);var l=new r(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.X&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xor4096=o})(hq,typeof BD=="object"&&BD,typeof define=="function"&&define)});var xq=Gr((gq,VD)=>{(function(e,t,n){function r(a){var i=this,l="";i.next=function(){var c=i.b,p=i.c,d=i.d,f=i.a;return c=c<<25^c>>>7^p,p=p-d|0,d=d<<24^d>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^p,i.c=p=p-d|0,i.d=d<<16^p>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=2654435769|0,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.tychei=o})(gq,typeof VD=="object"&&VD,typeof define=="function"&&define)});var WD=Gr(()=>{});var yq=Gr((t0t,F3)=>{(function(e,t){var n=this,r=256,s=6,o=52,a="random",i=t.pow(r,s),l=t.pow(2,o),u=l*2,c=r-1,p;function d(b,A,v){var w=[];A=A==!0?{entropy:!0}:A||{};var k=g(m(A.entropy?[b,y(e)]:b==null?x():b,3),w),I=new f(w),N=function(){for(var T=I.g(s),_=i,R=0;T=u;)T/=2,_/=2,R>>>=1;return(T+R)/_};return N.int32=function(){return I.g(4)|0},N.quick=function(){return I.g(4)/4294967296},N.double=N,g(y(I.S),e),(A.pass||v||function(T,_,R,S){return S&&(S.S&&h(S,I),T.state=function(){return h(I,{})}),R?(t[a]=T,_):T})(N,k,"global"in A?A.global:this==t,A.state)}t["seed"+a]=d;function f(b){var A,v=b.length,w=this,k=0,I=w.i=w.j=0,N=w.S=[];for(v||(b=[v++]);k{var bBe=iq(),ABe=uq(),vBe=pq(),wBe=fq(),kBe=mq(),IBe=xq(),am=yq();am.alea=bBe;am.xor128=ABe;am.xorwow=vBe;am.xorshift7=wBe;am.xor4096=kBe;am.tychei=IBe;bq.exports=am});var CY=Gr((IY,N6)=>{(function(e,t,n){function r(i){var l=this,u=a();l.next=function(){var c=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=c-(l.c=c|0)},l.c=1,l.s0=u(" "),l.s1=u(" "),l.s2=u(" "),l.s0-=u(i),l.s0<0&&(l.s0+=1),l.s1-=u(i),l.s1<0&&(l.s1+=1),l.s2-=u(i),l.s2<0&&(l.s2+=1),u=null}function s(i,l){return l.c=i.c,l.s0=i.s0,l.s1=i.s1,l.s2=i.s2,l}function o(i,l){var u=new r(i),c=l&&l.state,p=u.next;return p.int32=function(){return u.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c=="object"&&s(c,u),p.state=function(){return s(u,{})}),p}function a(){var i=4022871197,l=function(u){u=String(u);for(var c=0;c>>0,p-=i,p*=i,i=p>>>0,p-=i,i+=p*4294967296}return(i>>>0)*23283064365386963e-26};return l}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.alea=o})(IY,typeof N6=="object"&&N6,typeof define=="function"&&define)});var NY=Gr((SY,T6)=>{(function(e,t,n){function r(a){var i=this,l="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xor128=o})(SY,typeof T6=="object"&&T6,typeof define=="function"&&define)});var _Y=Gr((TY,_6)=>{(function(e,t,n){function r(a){var i=this,l="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:l+=a;for(var u=0;u>>4),i.next()}function s(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function o(a,i){var l=new r(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xorwow=o})(TY,typeof _6=="object"&&_6,typeof define=="function"&&define)});var RY=Gr((EY,E6)=>{(function(e,t,n){function r(a){var i=this;i.next=function(){var u=i.x,c=i.i,p,d,f;return p=u[c],p^=p>>>7,d=p^p<<24,p=u[c+1&7],d^=p^p>>>10,p=u[c+3&7],d^=p^p>>>3,p=u[c+4&7],d^=p^p<<7,p=u[c+7&7],p=p^p<<13,d^=p^p<<9,u[c]=d,i.i=c+1&7,d};function l(u,c){var p,d,f=[];if(c===(c|0))d=f[0]=c;else for(c=""+c,p=0;p0;--p)u.next()}l(i,a)}function s(a,i){return i.x=a.x.slice(),i.i=a.i,i}function o(a,i){a==null&&(a=+new Date);var l=new r(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.x&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xorshift7=o})(EY,typeof E6=="object"&&E6,typeof define=="function"&&define)});var $Y=Gr((DY,R6)=>{(function(e,t,n){function r(a){var i=this;i.next=function(){var u=i.w,c=i.X,p=i.i,d,f;return i.w=u=u+1640531527|0,f=c[p+34&127],d=c[p=p+1&127],f^=f<<13,d^=d<<17,f^=f>>>15,d^=d>>>12,f=c[p]=f^d,i.i=p,f+(u^u>>>16)|0};function l(u,c){var p,d,f,h,m,g=[],x=128;for(c===(c|0)?(d=c,c=null):(c=c+"\0",d=0,x=Math.max(x,c.length)),f=0,h=-32;h>>15,d^=d<<4,d^=d>>>13,h>=0&&(m=m+1640531527|0,p=g[h&127]^=d+m,f=p==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,h=4*128;h>0;--h)d=g[f+34&127],p=g[f=f+1&127],d^=d<<13,p^=p<<17,d^=d>>>15,p^=p>>>12,g[f]=d^p;u.w=m,u.X=g,u.i=f}l(i,a)}function s(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function o(a,i){a==null&&(a=+new Date);var l=new r(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.X&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.xor4096=o})(DY,typeof R6=="object"&&R6,typeof define=="function"&&define)});var OY=Gr((FY,D6)=>{(function(e,t,n){function r(a){var i=this,l="";i.next=function(){var c=i.b,p=i.c,d=i.d,f=i.a;return c=c<<25^c>>>7^p,p=p-d|0,d=d<<24^d>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^p,i.c=p=p-d|0,i.d=d<<16^p>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=2654435769|0,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,d=(l.next()>>>0)/4294967296,f=(p+d)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&s(u,l),c.state=function(){return s(l,{})}),c}t&&t.exports?t.exports=o:n&&n.amd?n(function(){return o}):this.tychei=o})(FY,typeof D6=="object"&&D6,typeof define=="function"&&define)});var MY=Gr((PY,XC)=>{(function(e,t,n){var r=256,s=6,o=52,a="random",i=n.pow(r,s),l=n.pow(2,o),u=l*2,c=r-1,p;function d(b,A,v){var w=[];A=A==!0?{entropy:!0}:A||{};var k=g(m(A.entropy?[b,y(t)]:b==null?x():b,3),w),I=new f(w),N=function(){for(var T=I.g(s),_=i,R=0;T=u;)T/=2,_/=2,R>>>=1;return(T+R)/_};return N.int32=function(){return I.g(4)|0},N.quick=function(){return I.g(4)/4294967296},N.double=N,g(y(I.S),t),(A.pass||v||function(T,_,R,S){return S&&(S.S&&h(S,I),T.state=function(){return h(I,{})}),R?(n[a]=T,_):T})(N,k,"global"in A?A.global:this==n,A.state)}function f(b){var A,v=b.length,w=this,k=0,I=w.i=w.j=0,N=w.S=[];for(v||(b=[v++]);k{var EUe=CY(),RUe=NY(),DUe=_Y(),$Ue=RY(),FUe=$Y(),OUe=OY(),Fm=MY();Fm.alea=EUe;Fm.xor128=RUe;Fm.xorwow=DUe;Fm.xorshift7=$Ue;Fm.xor4096=FUe;Fm.tychei=OUe;zY.exports=Fm});var LY=Gr(()=>{});var uQe={};dn(uQe,{Human:()=>fie,Models:()=>wv,default:()=>fie,defaults:()=>Ec,env:()=>Ee});function an(e,t){let n=e.endsWith("/")?"":"/",s=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!s.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: ${s} expecting json file`);return s}function Ce(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}var en=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function kT(e,t,n="config",r=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")kT(e[s],t[s],s,r);else{let o=e&&typeof e[s]!="undefined";o||r.push({reason:"unknown property",where:`${n}.${s} = ${t[s]}`});let a=e&&typeof e[s]==typeof t[s];o&&!a&&r.push({reason:"property type mismatch",where:`${n}.${s} = ${t[s]}`,expected:typeof e[s]})}return t.debug&&n==="config"&&r.length>0&&Ce("invalid configuration",r),r}function os(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,r)=>(Object.keys(r||{}).forEach(s=>{let o=n[s],a=r[s];Array.isArray(o)&&Array.isArray(a)?n[s]=o.concat(...a):t(o)&&t(a)?n[s]=os(o,a):n[s]=a}),n),{})}var Ec={backend:"",modelBasePath:"",wasmPath:"",debug:!0,async:!0,warmup:"full",cacheSensitivity:.75,skipFrame:!1,filter:{enabled:!0,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:11,minConfidence:.2,iouThreshold:.1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:12,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:13,minConfidence:.1}},body:{enabled:!0,modelPath:"movenet-lightning.json",detector:{modelPath:""},maxDetected:-1,minConfidence:.2,skipFrames:5},hand:{enabled:!0,rotation:!0,skipFrames:14,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handskeleton.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:15},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var bh={};dn(bh,{Abs:()=>cg,Acos:()=>pg,Acosh:()=>dg,AdadeltaOptimizer:()=>_k,AdagradOptimizer:()=>Ek,AdamOptimizer:()=>Rk,AdamaxOptimizer:()=>Dk,Add:()=>$c,AddN:()=>Ld,All:()=>fg,Any:()=>hg,ArgMax:()=>Bd,ArgMin:()=>P1,Asin:()=>mg,Asinh:()=>gg,Atan:()=>xg,Atan2:()=>bg,Atanh:()=>yg,AvgPool:()=>Vd,AvgPool3D:()=>M1,AvgPool3DGrad:()=>tw,AvgPoolGrad:()=>ew,BackendWasm:()=>xU,BatchMatMul:()=>Wd,BatchToSpaceND:()=>Ag,Bincount:()=>nw,BroadcastArgs:()=>ET,BroadcastTo:()=>SP,Callback:()=>hL,CallbackList:()=>az,Cast:()=>Gd,Ceil:()=>Ud,ClipByValue:()=>Fc,Complex:()=>rw,ComplexAbs:()=>z1,Concat:()=>vg,Conv2D:()=>jd,Conv2DBackpropFilter:()=>sw,Conv2DBackpropInput:()=>Hd,Conv3D:()=>L1,Conv3DBackpropFilterV2:()=>ow,Conv3DBackpropInputV2:()=>aw,Cos:()=>qd,Cosh:()=>Kd,CropAndResize:()=>wg,Cumsum:()=>Xd,CustomCallback:()=>lz,DataStorage:()=>Xv,DenseBincount:()=>iw,DepthToSpace:()=>kg,DepthwiseConv2dNative:()=>Zd,DepthwiseConv2dNativeBackpropFilter:()=>lw,DepthwiseConv2dNativeBackpropInput:()=>uw,Diag:()=>cw,Dilation2D:()=>B1,Dilation2DBackpropFilter:()=>dw,Dilation2DBackpropInput:()=>pw,ENV:()=>Da,EarlyStopping:()=>gL,Einsum:()=>fw,Elu:()=>Jd,EluGrad:()=>hw,Environment:()=>IP,Equal:()=>Cg,Erf:()=>Ig,Exp:()=>Qd,ExpandDims:()=>Sg,Expm1:()=>Ng,FFT:()=>mw,Fill:()=>V1,FlipLeftRight:()=>Tg,Floor:()=>ef,FloorDiv:()=>tf,FromPixels:()=>Pw,FusedBatchNorm:()=>nf,FusedConv2D:()=>Mf,FusedDepthwiseConv2D:()=>zf,GPGPUContext:()=>$5,GatherNd:()=>Eg,GatherV2:()=>_g,GraphModel:()=>KL,Greater:()=>Rg,GreaterEqual:()=>rf,History:()=>iz,IFFT:()=>gw,Identity:()=>sf,Imag:()=>xw,InputSpec:()=>Rr,IsFinite:()=>Dg,IsInf:()=>$g,IsNan:()=>Fg,KernelBackend:()=>$1,LRN:()=>U1,LRNGrad:()=>bw,LayerVariable:()=>tz,LayersModel:()=>ql,LeakyRelu:()=>of,Less:()=>Og,LessEqual:()=>Pg,LinSpace:()=>yw,Log:()=>af,Log1p:()=>Mg,LogSoftmax:()=>NP,LogicalAnd:()=>zg,LogicalNot:()=>W1,LogicalOr:()=>G1,MathBackendWebGL:()=>Y0,Max:()=>lf,MaxPool:()=>cf,MaxPool3D:()=>j1,MaxPool3DGrad:()=>vw,MaxPoolGrad:()=>Aw,MaxPoolWithArgmax:()=>ww,Maximum:()=>uf,Mean:()=>pf,Min:()=>df,Minimum:()=>ff,MirrorPad:()=>hf,Mod:()=>Lg,MomentumOptimizer:()=>$k,Multinomial:()=>kw,Multiply:()=>mf,Neg:()=>Bg,NonMaxSuppressionV3:()=>Wg,NonMaxSuppressionV4:()=>Gg,NonMaxSuppressionV5:()=>Ug,NotEqual:()=>Vg,OP_SCOPE_SUFFIX:()=>WP,OneHot:()=>gf,OnesLike:()=>jg,Optimizer:()=>Ul,Pack:()=>Hg,PadV2:()=>xf,Pool:()=>sue,Pow:()=>yf,Prelu:()=>bf,Prod:()=>qg,RMSPropOptimizer:()=>Fk,RNN:()=>fl,Range:()=>H1,Rank:()=>OT,Real:()=>Iw,RealDiv:()=>Yd,Reciprocal:()=>Kg,Reduction:()=>Ws,Relu:()=>Af,Relu6:()=>wf,Reshape:()=>Xg,ResizeBilinear:()=>vf,ResizeBilinearGrad:()=>Sw,ResizeNearestNeighbor:()=>q1,ResizeNearestNeighborGrad:()=>Cw,Reverse:()=>kf,RotateWithOffset:()=>c0,Round:()=>If,Rsqrt:()=>Cf,SGDOptimizer:()=>Cb,ScatterNd:()=>Zg,Select:()=>Yg,Selu:()=>Jg,Sequential:()=>M0,Sigmoid:()=>Nf,Sign:()=>t0,Sin:()=>Sf,Sinh:()=>e0,Slice:()=>Qg,Softmax:()=>Ef,Softplus:()=>n0,SpaceToBatchND:()=>r0,SparseFillEmptyRows:()=>Nw,SparseReshape:()=>Tw,SparseSegmentMean:()=>_w,SparseSegmentSum:()=>Ew,SparseToDense:()=>Rw,SplitV:()=>s0,Sqrt:()=>Tf,Square:()=>K1,SquaredDifference:()=>Rf,Step:()=>Pc,StridedSlice:()=>o0,StringNGrams:()=>Dw,StringSplit:()=>$w,StringToHashBucketFast:()=>Fw,Sub:()=>Df,Sum:()=>_f,SymbolicTensor:()=>Ii,Tan:()=>$f,Tanh:()=>Ff,Tensor:()=>Vt,TensorBuffer:()=>Ur,Tile:()=>Oc,TopK:()=>a0,Transform:()=>i0,Transpose:()=>Of,Unique:()=>Ow,Unpack:()=>l0,UnsortedSegmentSum:()=>X1,Variable:()=>rb,ZerosLike:()=>u0,_FusedMatMul:()=>Pf,abs:()=>Tr,acos:()=>u_,acosh:()=>c_,add:()=>Re,addN:()=>Yw,all:()=>Jw,any:()=>lb,argMax:()=>xi,argMin:()=>p_,asin:()=>d_,asinh:()=>f_,atan:()=>h_,atan2:()=>m_,atanh:()=>g_,avgPool:()=>cb,avgPool3d:()=>b_,backend:()=>sl,backend_util:()=>G,basicLSTMCell:()=>Mpe,batchNorm:()=>qf,batchNorm2d:()=>E9,batchNorm3d:()=>R9,batchNorm4d:()=>D9,batchToSpaceND:()=>pb,bincount:()=>A_,booleanMaskAsync:()=>Uhe,broadcastArgs:()=>$9,broadcastTo:()=>A0,browser:()=>Mo,buffer:()=>Wt,callbacks:()=>s2e,cast:()=>Fe,ceil:()=>v_,clipByValue:()=>yo,clone:()=>mi,complex:()=>Lc,concat:()=>En,concat1d:()=>F9,concat2d:()=>v0,concat3d:()=>O9,concat4d:()=>P9,constraints:()=>FM,conv1d:()=>ek,conv2d:()=>Bl,conv2dTranspose:()=>tk,conv3d:()=>k_,conv3dTranspose:()=>z9,copyRegisteredKernels:()=>iue,cos:()=>db,cosh:()=>nk,cosineWindow:()=>Z_,cumsum:()=>rk,customGrad:()=>al,data:()=>XL,denseBincount:()=>L9,deprecationWarn:()=>i_,depthToSpace:()=>I_,depthwiseConv2d:()=>w0,deregisterOp:()=>a2e,device_util:()=>ob,diag:()=>fde,dilation2d:()=>C_,disableDeprecationWarnings:()=>Qce,dispose:()=>ye,disposeVariables:()=>epe,div:()=>Me,divNoNan:()=>S_,dot:()=>B9,dropout:()=>iM,einsum:()=>V9,elu:()=>k0,enableDebugMode:()=>Jce,enableProdMode:()=>C9,enclosingPowerOfTwo:()=>lM,engine:()=>zo,env:()=>be,equal:()=>Lo,erf:()=>N_,exp:()=>Bo,expandDims:()=>kr,expm1:()=>T_,eye:()=>__,fft:()=>wb,fill:()=>I0,findBackend:()=>l_,findBackendFactory:()=>spe,floor:()=>C0,floorDiv:()=>Zw,forceHalfFloat:()=>wW,fused:()=>Hc,gather:()=>Kf,gatherND:()=>aM,gather_util:()=>e_,getBackend:()=>gi,getGradient:()=>RT,getKernel:()=>Mw,getKernelsForBackend:()=>zl,gpgpu_util:()=>ZV,grad:()=>Gde,grads:()=>Ude,greater:()=>bo,greaterEqual:()=>Uc,ifft:()=>_0,imag:()=>sk,image:()=>ht,inTopKAsync:()=>tme,initializers:()=>VM,input:()=>Rz,io:()=>go,irfft:()=>bk,isFinite:()=>W9,isInf:()=>G9,isNaN:()=>E_,keep:()=>us,kernel_impls:()=>ll,layers:()=>JM,leakyRelu:()=>fb,less:()=>ok,lessEqual:()=>jc,linalg:()=>AM,linspace:()=>U9,loadGraphModel:()=>yn,loadLayersModel:()=>hbe,localResponseNormalization:()=>R_,log:()=>Vo,log1p:()=>hb,logSigmoid:()=>H9,logSoftmax:()=>ik,logSumExp:()=>F_,logicalAnd:()=>Fa,logicalNot:()=>mb,logicalOr:()=>lk,logicalXor:()=>Z9,losses:()=>Mge,matMul:()=>Lt,math:()=>a9,max:()=>Wo,maxPool:()=>gb,maxPool3d:()=>O_,maxPoolWithArgmax:()=>Y9,maximum:()=>il,mean:()=>cr,memory:()=>Kw,meshgrid:()=>dfe,metrics:()=>pL,min:()=>xb,minimum:()=>S0,mirrorPad:()=>P_,mod:()=>M_,model:()=>dbe,models:()=>dL,moments:()=>uk,movingAverage:()=>qhe,mul:()=>te,multiRNNCell:()=>Afe,multinomial:()=>J9,neg:()=>er,nextFrame:()=>Ok,norm:()=>kk,notEqual:()=>Yf,oneHot:()=>g0,ones:()=>Go,onesLike:()=>Uo,op:()=>ae,outerProduct:()=>Cfe,pad:()=>Vl,pad1d:()=>Tfe,pad2d:()=>Efe,pad3d:()=>Dfe,pad4d:()=>Ffe,pool:()=>Q9,pow:()=>Wl,prelu:()=>bb,print:()=>e9,prod:()=>ck,profile:()=>tpe,rand:()=>Gfe,randomGamma:()=>qfe,randomNormal:()=>eM,randomUniform:()=>N0,range:()=>T0,ready:()=>Xw,real:()=>Ab,reciprocal:()=>B_,registerBackend:()=>y0,registerCallbackConstructor:()=>mbe,registerGradient:()=>TP,registerKernel:()=>Mc,registerOp:()=>o2e,regularizers:()=>fL,relu:()=>yi,relu6:()=>pk,removeBackend:()=>rpe,reshape:()=>ie,reverse:()=>jo,reverse1d:()=>nhe,reverse2d:()=>she,reverse3d:()=>ahe,reverse4d:()=>lhe,rfft:()=>kb,round:()=>dk,rsqrt:()=>fk,scalar:()=>at,scatterND:()=>oM,scatter_util:()=>t_,selu:()=>hk,separableConv2d:()=>V_,sequential:()=>fbe,serialization:()=>De,setBackend:()=>S9,setPlatform:()=>ope,setWasmPath:()=>zPe,setWasmPaths:()=>bU,setWebGLContext:()=>I5,setdiff1dAsync:()=>tM,sigmoid:()=>xo,sign:()=>W_,signal:()=>Pge,sin:()=>mk,sinh:()=>gk,slice:()=>gt,slice1d:()=>xk,slice2d:()=>G_,slice3d:()=>yk,slice4d:()=>vb,slice_util:()=>Bs,softmax:()=>Jf,softplus:()=>Xf,spaceToBatchND:()=>yb,sparse:()=>Ib,sparseToDense:()=>X_,spectral:()=>Oge,split:()=>_r,sqrt:()=>As,square:()=>Tn,squaredDifference:()=>Ak,squeeze:()=>ln,stack:()=>vs,step:()=>E0,stridedSlice:()=>U_,string:()=>Tk,sub:()=>Ge,sum:()=>Je,sumOutType:()=>Ww,tan:()=>j_,tanh:()=>Hf,tensor:()=>ls,tensor1d:()=>Er,tensor2d:()=>bi,tensor3d:()=>jw,tensor4d:()=>Fhe,tensor5d:()=>Ohe,tensor6d:()=>Phe,tensor_util:()=>fi,test_util:()=>w9,tidy:()=>ce,tile:()=>da,time:()=>npe,topk:()=>H_,train:()=>eh,transpose:()=>Kt,truncatedNormal:()=>vk,unique:()=>wk,unregisterGradient:()=>aue,unregisterKernel:()=>oue,unsortedSegmentSum:()=>q_,unstack:()=>Vs,upcastType:()=>$a,util:()=>E,valueAndGrad:()=>jde,valueAndGrads:()=>Hde,variable:()=>nM,variableGrads:()=>j9,version:()=>XPe,version_converter:()=>uve,version_core:()=>qw,version_layers:()=>RE,version_wasm:()=>LPe,version_webgl:()=>vTe,webgl:()=>wTe,webgl_util:()=>AV,where:()=>$s,whereAsync:()=>K_,zeros:()=>xr,zerosLike:()=>Xt});var ule=Object.create,Kv=Object.defineProperty,cle=Object.getOwnPropertyDescriptor,ple=Object.getOwnPropertyNames,dle=Object.getPrototypeOf,fle=Object.prototype.hasOwnProperty,lP=e=>Kv(e,"__esModule",{value:!0}),ig=(e=>typeof _c!="undefined"?_c:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof _c!="undefined"?_c:t)[n]}):e)(function(e){if(typeof _c!="undefined")return _c.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}),Qn=(e,t)=>function(){return t||(0,e[Object.keys(e)[0]])((t={exports:{}}).exports,t),t.exports},Rt=(e,t)=>{lP(e);for(var n in t)Kv(e,n,{get:t[n],enumerable:!0})},hle=(e,t,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ple(t))!fle.call(e,r)&&r!=="default"&&Kv(e,r,{get:()=>t[r],enumerable:!(n=cle(t,r))||n.enumerable});return e},Pd=e=>hle(lP(Kv(e!=null?ule(dle(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),mle=Qn({"node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(e,t){t.exports=r;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(R){}function r(R,S,F){this.low=R|0,this.high=S|0,this.unsigned=!!F}r.prototype.__isLong__,Object.defineProperty(r.prototype,"__isLong__",{value:!0});function s(R){return(R&&R.__isLong__)===!0}r.isLong=s;var o={},a={};function i(R,S){var F,B,W;return S?(R>>>=0,(W=0<=R&&R<256)&&(B=a[R],B)?B:(F=u(R,(R|0)<0?-1:0,!0),W&&(a[R]=F),F)):(R|=0,(W=-128<=R&&R<128)&&(B=o[R],B)?B:(F=u(R,R<0?-1:0,!1),W&&(o[R]=F),F))}r.fromInt=i;function l(R,S){if(isNaN(R))return S?A:b;if(S){if(R<0)return A;if(R>=g)return N}else{if(R<=-x)return T;if(R+1>=x)return I}return R<0?l(-R,S).neg():u(R%m|0,R/m|0,S)}r.fromNumber=l;function u(R,S,F){return new r(R,S,F)}r.fromBits=u;var c=Math.pow;function p(R,S,F){if(R.length===0)throw Error("empty string");if(R==="NaN"||R==="Infinity"||R==="+Infinity"||R==="-Infinity")return b;if(typeof S=="number"?(F=S,S=!1):S=!!S,F=F||10,F<2||360)throw Error("interior hyphen");if(B===0)return p(R.substring(1),S,F).neg();for(var W=l(c(F,8)),q=b,K=0;K>>0:this.low},_.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},_.toString=function(S){if(S=S||10,S<2||36>>0,ue=ee.toString(S);if(K=Q,K.isZero())return ue+J;for(;ue.length<6;)ue="0"+ue;J=""+ue+J}},_.getHighBits=function(){return this.high},_.getHighBitsUnsigned=function(){return this.high>>>0},_.getLowBits=function(){return this.low},_.getLowBitsUnsigned=function(){return this.low>>>0},_.getNumBitsAbs=function(){if(this.isNegative())return this.eq(T)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,F=31;F>0&&(S&1<=0},_.isOdd=function(){return(this.low&1)==1},_.isEven=function(){return(this.low&1)==0},_.equals=function(S){return s(S)||(S=d(S)),this.unsigned!==S.unsigned&&this.high>>>31==1&&S.high>>>31==1?!1:this.high===S.high&&this.low===S.low},_.eq=_.equals,_.notEquals=function(S){return!this.eq(S)},_.neq=_.notEquals,_.ne=_.notEquals,_.lessThan=function(S){return this.comp(S)<0},_.lt=_.lessThan,_.lessThanOrEqual=function(S){return this.comp(S)<=0},_.lte=_.lessThanOrEqual,_.le=_.lessThanOrEqual,_.greaterThan=function(S){return this.comp(S)>0},_.gt=_.greaterThan,_.greaterThanOrEqual=function(S){return this.comp(S)>=0},_.gte=_.greaterThanOrEqual,_.ge=_.greaterThanOrEqual,_.compare=function(S){if(s(S)||(S=d(S)),this.eq(S))return 0;var F=this.isNegative(),B=S.isNegative();return F&&!B?-1:!F&&B?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},_.comp=_.compare,_.negate=function(){return!this.unsigned&&this.eq(T)?T:this.not().add(v)},_.neg=_.negate,_.add=function(S){s(S)||(S=d(S));var F=this.high>>>16,B=this.high&65535,W=this.low>>>16,q=this.low&65535,K=S.high>>>16,J=S.high&65535,Q=S.low>>>16,ee=S.low&65535,ue=0,re=0,de=0,fe=0;return fe+=q+ee,de+=fe>>>16,fe&=65535,de+=W+Q,re+=de>>>16,de&=65535,re+=B+J,ue+=re>>>16,re&=65535,ue+=F+K,ue&=65535,u(de<<16|fe,ue<<16|re,this.unsigned)},_.subtract=function(S){return s(S)||(S=d(S)),this.add(S.neg())},_.sub=_.subtract,_.multiply=function(S){if(this.isZero())return b;if(s(S)||(S=d(S)),n){var F=n.mul(this.low,this.high,S.low,S.high);return u(F,n.get_high(),this.unsigned)}if(S.isZero())return b;if(this.eq(T))return S.isOdd()?T:b;if(S.eq(T))return this.isOdd()?T:b;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(y)&&S.lt(y))return l(this.toNumber()*S.toNumber(),this.unsigned);var B=this.high>>>16,W=this.high&65535,q=this.low>>>16,K=this.low&65535,J=S.high>>>16,Q=S.high&65535,ee=S.low>>>16,ue=S.low&65535,re=0,de=0,fe=0,me=0;return me+=K*ue,fe+=me>>>16,me&=65535,fe+=q*ue,de+=fe>>>16,fe&=65535,fe+=K*ee,de+=fe>>>16,fe&=65535,de+=W*ue,re+=de>>>16,de&=65535,de+=q*ee,re+=de>>>16,de&=65535,de+=K*Q,re+=de>>>16,de&=65535,re+=B*ue+W*ee+q*Q+K*J,re&=65535,u(fe<<16|me,re<<16|de,this.unsigned)},_.mul=_.multiply,_.divide=function(S){if(s(S)||(S=d(S)),S.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var F=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,S.low,S.high);return u(F,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?A:b;var B,W,q;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return A;if(S.gt(this.shru(1)))return w;q=A}else{if(this.eq(T)){if(S.eq(v)||S.eq(k))return T;if(S.eq(T))return v;var K=this.shr(1);return B=K.div(S).shl(1),B.eq(b)?S.isNegative()?v:k:(W=this.sub(S.mul(B)),q=B.add(W.div(S)),q)}else if(S.eq(T))return this.unsigned?A:b;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();q=b}for(W=this;W.gte(S);){B=Math.max(1,Math.floor(W.toNumber()/S.toNumber()));for(var J=Math.ceil(Math.log(B)/Math.LN2),Q=J<=48?1:c(2,J-48),ee=l(B),ue=ee.mul(S);ue.isNegative()||ue.gt(W);)B-=Q,ee=l(B,this.unsigned),ue=ee.mul(S);ee.isZero()&&(ee=v),q=q.add(ee),W=W.sub(ue)}return q},_.div=_.divide,_.modulo=function(S){if(s(S)||(S=d(S)),n){var F=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,S.low,S.high);return u(F,n.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},_.mod=_.modulo,_.rem=_.modulo,_.not=function(){return u(~this.low,~this.high,this.unsigned)},_.and=function(S){return s(S)||(S=d(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},_.or=function(S){return s(S)||(S=d(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},_.xor=function(S){return s(S)||(S=d(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},_.shiftLeft=function(S){return s(S)&&(S=S.toInt()),(S&=63)==0?this:S<32?u(this.low<>>32-S,this.unsigned):u(0,this.low<>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},_.shr=_.shiftRight,_.shiftRightUnsigned=function(S){if(s(S)&&(S=S.toInt()),S&=63,S===0)return this;var F=this.high;if(S<32){var B=this.low;return u(B>>>S|F<<32-S,F>>>S,this.unsigned)}else return S===32?u(F,0,this.unsigned):u(F>>>S-32,0,this.unsigned)},_.shru=_.shiftRightUnsigned,_.shr_u=_.shiftRightUnsigned,_.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},_.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},_.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},_.toBytesLE=function(){var S=this.high,F=this.low;return[F&255,F>>>8&255,F>>>16&255,F>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},_.toBytesBE=function(){var S=this.high,F=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,F>>>24,F>>>16&255,F>>>8&255,F&255]},r.fromBytes=function(S,F,B){return B?r.fromBytesLE(S,F):r.fromBytesBE(S,F)},r.fromBytesLE=function(S,F){return new r(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,F)},r.fromBytesBE=function(S,F){return new r(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],F)}}}),gle=Qn({"(disabled):node_modules/.pnpm/node-fetch@2.6.5/node_modules/node-fetch/browser.js"(){}}),xle=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/lib/alea.js"(e,t){(function(n,r,s){function o(u){var c=this,p=l();c.next=function(){var d=2091639*c.s0+c.c*23283064365386963e-26;return c.s0=c.s1,c.s1=c.s2,c.s2=d-(c.c=d|0)},c.c=1,c.s0=p(" "),c.s1=p(" "),c.s2=p(" "),c.s0-=p(u),c.s0<0&&(c.s0+=1),c.s1-=p(u),c.s1<0&&(c.s1+=1),c.s2-=p(u),c.s2<0&&(c.s2+=1),p=null}function a(u,c){return c.c=u.c,c.s0=u.s0,c.s1=u.s1,c.s2=u.s2,c}function i(u,c){var p=new o(u),d=c&&c.state,f=p.next;return f.int32=function(){return p.next()*4294967296|0},f.double=function(){return f()+(f()*2097152|0)*11102230246251565e-32},f.quick=f,d&&(typeof d=="object"&&a(d,p),f.state=function(){return a(p,{})}),f}function l(){var u=4022871197,c=function(p){p=p.toString();for(var d=0;d>>0,f-=u,f*=u,u=f>>>0,f-=u,u+=f*4294967296}return(u>>>0)*23283064365386963e-26};return c}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.alea=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),yle=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/lib/xor128.js"(e,t){(function(n,r,s){function o(l){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xor128=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),ble=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/lib/xorwow.js"(e,t){(function(n,r,s){function o(l){var u=this,c="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:c+=l;for(var p=0;p>>4),u.next()}function a(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function i(l,u){var c=new o(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xorwow=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),Ale=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/lib/xorshift7.js"(e,t){(function(n,r,s){function o(l){var u=this;u.next=function(){var p=u.x,d=u.i,f,h,m;return f=p[d],f^=f>>>7,h=f^f<<24,f=p[d+1&7],h^=f^f>>>10,f=p[d+3&7],h^=f^f>>>3,f=p[d+4&7],h^=f^f<<7,f=p[d+7&7],f=f^f<<13,h^=f^f<<9,p[d]=h,u.i=d+1&7,h};function c(p,d){var f,h,m=[];if(d===(d|0))h=m[0]=d;else for(d=""+d,f=0;f0;--f)p.next()}c(u,l)}function a(l,u){return u.x=l.x.slice(),u.i=l.i,u}function i(l,u){l==null&&(l=+new Date);var c=new o(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.x&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xorshift7=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),vle=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/lib/xor4096.js"(e,t){(function(n,r,s){function o(l){var u=this;u.next=function(){var p=u.w,d=u.X,f=u.i,h,m;return u.w=p=p+1640531527|0,m=d[f+34&127],h=d[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,m=d[f]=m^h,u.i=f,m+(p^p>>>16)|0};function c(p,d){var f,h,m,g,x,y=[],b=128;for(d===(d|0)?(h=d,d=null):(d=d+"\0",h=0,b=Math.max(b,d.length)),m=0,g=-32;g>>15,h^=h<<4,h^=h>>>13,g>=0&&(x=x+1640531527|0,f=y[g&127]^=h+x,m=f==0?m+1:0);for(m>=128&&(y[(d&&d.length||0)&127]=-1),m=127,g=4*128;g>0;--g)h=y[m+34&127],f=y[m=m+1&127],h^=h<<13,f^=f<<17,h^=h>>>15,f^=f>>>12,y[m]=h^f;p.w=x,p.X=y,p.i=m}c(u,l)}function a(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function i(l,u){l==null&&(l=+new Date);var c=new o(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.X&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xor4096=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),wle=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/lib/tychei.js"(e,t){(function(n,r,s){function o(l){var u=this,c="";u.next=function(){var d=u.b,f=u.c,h=u.d,m=u.a;return d=d<<25^d>>>7^f,f=f-h|0,h=h<<24^h>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^f,u.c=f=f-h|0,u.d=h<<16^f>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=2654435769|0,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.tychei=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),uP=Qn({"(disabled):crypto"(){}}),kle=Qn({"node_modules/.pnpm/seedrandom@2.4.3/node_modules/seedrandom/seedrandom.js"(e,t){(function(n,r){var s=this,o=256,a=6,i=52,l="random",u=r.pow(o,a),c=r.pow(2,i),p=c*2,d=o-1,f;function h(v,w,k){var I=[];w=w==!0?{entropy:!0}:w||{};var N=y(x(w.entropy?[v,A(n)]:v==null?b():v,3),I),T=new m(I),_=function(){for(var R=T.g(a),S=u,F=0;R=p;)R/=2,S/=2,F>>>=1;return(R+F)/S};return _.int32=function(){return T.g(4)|0},_.quick=function(){return T.g(4)/4294967296},_.double=_,y(A(T.S),n),(w.pass||k||function(R,S,F,B){return B&&(B.S&&g(B,T),R.state=function(){return g(T,{})}),F?(r[l]=R,S):R})(_,N,"global"in w?w.global:this==r,w.state)}r["seed"+l]=h;function m(v){var w,k=v.length,I=this,N=0,T=I.i=I.j=0,_=I.S=[];for(k||(v=[k++]);N>>0,f-=u,f*=u,u=f>>>0,f-=u,u+=f*4294967296}return(u>>>0)*23283064365386963e-26};return c}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.alea=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),Cle=Qn({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(e,t){(function(n,r,s){function o(l){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xor128=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),Sle=Qn({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(e,t){(function(n,r,s){function o(l){var u=this,c="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:c+=l;for(var p=0;p>>4),u.next()}function a(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function i(l,u){var c=new o(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xorwow=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),Nle=Qn({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(e,t){(function(n,r,s){function o(l){var u=this;u.next=function(){var p=u.x,d=u.i,f,h,m;return f=p[d],f^=f>>>7,h=f^f<<24,f=p[d+1&7],h^=f^f>>>10,f=p[d+3&7],h^=f^f>>>3,f=p[d+4&7],h^=f^f<<7,f=p[d+7&7],f=f^f<<13,h^=f^f<<9,p[d]=h,u.i=d+1&7,h};function c(p,d){var f,h,m=[];if(d===(d|0))h=m[0]=d;else for(d=""+d,f=0;f0;--f)p.next()}c(u,l)}function a(l,u){return u.x=l.x.slice(),u.i=l.i,u}function i(l,u){l==null&&(l=+new Date);var c=new o(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.x&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xorshift7=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),Tle=Qn({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(e,t){(function(n,r,s){function o(l){var u=this;u.next=function(){var p=u.w,d=u.X,f=u.i,h,m;return u.w=p=p+1640531527|0,m=d[f+34&127],h=d[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,m=d[f]=m^h,u.i=f,m+(p^p>>>16)|0};function c(p,d){var f,h,m,g,x,y=[],b=128;for(d===(d|0)?(h=d,d=null):(d=d+"\0",h=0,b=Math.max(b,d.length)),m=0,g=-32;g>>15,h^=h<<4,h^=h>>>13,g>=0&&(x=x+1640531527|0,f=y[g&127]^=h+x,m=f==0?m+1:0);for(m>=128&&(y[(d&&d.length||0)&127]=-1),m=127,g=4*128;g>0;--g)h=y[m+34&127],f=y[m=m+1&127],h^=h<<13,f^=f<<17,h^=h>>>15,f^=f>>>12,y[m]=h^f;p.w=x,p.X=y,p.i=m}c(u,l)}function a(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function i(l,u){l==null&&(l=+new Date);var c=new o(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.X&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xor4096=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),_le=Qn({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(e,t){(function(n,r,s){function o(l){var u=this,c="";u.next=function(){var d=u.b,f=u.c,h=u.d,m=u.a;return d=d<<25^d>>>7^f,f=f-h|0,h=h<<24^h>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^f,u.c=f=f-h|0,u.d=h<<16^f>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=2654435769|0,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var f=c.next()>>>11,h=(c.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&a(p,c),d.state=function(){return a(c,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.tychei=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),Ele=Qn({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(e,t){(function(n,r,s){var o=256,a=6,i=52,l="random",u=s.pow(o,a),c=s.pow(2,i),p=c*2,d=o-1,f;function h(v,w,k){var I=[];w=w==!0?{entropy:!0}:w||{};var N=y(x(w.entropy?[v,A(r)]:v==null?b():v,3),I),T=new m(I),_=function(){for(var R=T.g(a),S=u,F=0;R=p;)R/=2,S/=2,F>>>=1;return(R+F)/S};return _.int32=function(){return T.g(4)|0},_.quick=function(){return T.g(4)/4294967296},_.double=_,y(A(T.S),r),(w.pass||k||function(R,S,F,B){return B&&(B.S&&g(B,T),R.state=function(){return g(T,{})}),F?(s[l]=R,S):R})(_,N,"global"in w?w.global:this==s,w.state)}function m(v){var w,k=v.length,I=this,N=0,T=I.i=I.j=0,_=I.S=[];for(k||(v=[k++]);N1&&(g=process.argv[1].replace(/\\/g,"/")),m=process.argv.slice(2),process.on("uncaughtException",function(P){if(!(P instanceof S1))throw P}),process.on("unhandledRejection",Fl),x=function(P){process.exit(P)},c.inspect=function(){return"[Emscripten Module object]"};var B;try{B=Rle()}catch(P){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),P}global.Worker=B.Worker}else v?(typeof read!="undefined"&&(N=function(j){return read(j)}),_=function(j){var oe;return typeof readbuffer=="function"?new Uint8Array(readbuffer(j)):(oe=read(j,"binary"),xe(typeof oe=="object"),oe)},typeof scriptArgs!="undefined"?m=scriptArgs:typeof arguments!="undefined"&&(m=arguments),typeof quit=="function"&&(x=function(P){quit(P)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(y||b)&&(b?k=self.location.href:typeof document!="undefined"&&document.currentScript&&(k=document.currentScript.src),typeof r!="undefined"&&r&&(k=r),k.indexOf("blob:")!==0?k=k.substr(0,k.lastIndexOf("/")+1):k="",A?(N=function(j,oe){return S||(S=ig("fs")),F||(F=D1()),j=F.normalize(j),S.readFileSync(j,oe?null:"utf8")},_=function(j){var oe=N(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),xe(oe.buffer),oe}):(N=function(P){var j=new XMLHttpRequest;return j.open("GET",P,!1),j.send(null),j.responseText},b&&(_=function(P){var j=new XMLHttpRequest;return j.open("GET",P,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),T=function(P,j,oe){var ge=new XMLHttpRequest;ge.open("GET",P,!0),ge.responseType="arraybuffer",ge.onload=function(){if(ge.status==200||ge.status==0&&ge.response){j(ge.response);return}oe()},ge.onerror=oe,ge.send(null)}),R=function(P){document.title=P});A&&typeof performance=="undefined"&&(global.performance=Dle().performance);var W=c.print||console.log.bind(console),q=c.printErr||console.warn.bind(console);for(h in f)f.hasOwnProperty(h)&&(c[h]=f[h]);f=null,c.arguments&&(m=c.arguments),c.thisProgram&&(g=c.thisProgram),c.quit&&(x=c.quit);var K=Atomics.load,J=Atomics.store,Q=Atomics.compareExchange,ee;c.wasmBinary&&(ee=c.wasmBinary);var ue=c.noExitRuntime||!0;typeof WebAssembly!="object"&&Fl("no native wasm support detected");var re,de,fe=!1,me;function xe(P,j){P||Fl("Assertion failed: "+j)}function Ne(P){var j=c["_"+P];return xe(j,"Cannot call unknown function "+P+", make sure it is exported"),j}function _e(P,j,oe,ge,We){var Le={string:function(Ms){var ag=0;if(Ms!=null&&Ms!==0){var oP=(Ms.length<<2)+1;ag=rg(oP),ft(Ms,ag,oP)}return ag},array:function(Ms){var ag=rg(Ms.length);return ct(Ms,ag),ag}};function Be(Ms){return j==="string"?He(Ms):j==="boolean"?Boolean(Ms):Ms}var tt=Ne(P),xn=[],ss=0;if(ge)for(var Wr=0;Wr=ge);){var Le=P[j++];if(!Le)return We;if(!(Le&128)){We+=String.fromCharCode(Le);continue}var Be=P[j++]&63;if((Le&224)==192){We+=String.fromCharCode((Le&31)<<6|Be);continue}var tt=P[j++]&63;if((Le&240)==224?Le=(Le&15)<<12|Be<<6|tt:Le=(Le&7)<<18|Be<<12|tt<<6|P[j++]&63,Le<65536)We+=String.fromCharCode(Le);else{var xn=Le-65536;We+=String.fromCharCode(55296|xn>>10,56320|xn&1023)}}return We}function He(P,j){return P?Ve(a(),P,j):""}function At(P,j,oe,ge){if(!(ge>0))return 0;for(var We=oe,Le=oe+ge-1,Be=0;Be=55296&&tt<=57343){var xn=P.charCodeAt(++Be);tt=65536+((tt&1023)<<10)|xn&1023}if(tt<=127){if(oe>=Le)break;j[oe++]=tt}else if(tt<=2047){if(oe+1>=Le)break;j[oe++]=192|tt>>6,j[oe++]=128|tt&63}else if(tt<=65535){if(oe+2>=Le)break;j[oe++]=224|tt>>12,j[oe++]=128|tt>>6&63,j[oe++]=128|tt&63}else{if(oe+3>=Le)break;j[oe++]=240|tt>>18,j[oe++]=128|tt>>12&63,j[oe++]=128|tt>>6&63,j[oe++]=128|tt&63}}return j[oe]=0,oe-We}function ft(P,j,oe){return At(P,a(),j,oe)}function dt(P){for(var j=0,oe=0;oe=55296&&ge<=57343&&(ge=65536+((ge&1023)<<10)|P.charCodeAt(++oe)&1023),ge<=127?++j:ge<=2047?j+=2:ge<=65535?j+=3:j+=4}return j}function ct(P,j){o().set(P,j)}function mt(P,j){return P%j>0&&(P+=j-P%j),P}var it,Zn,Dt,Yn,cn,Vr,_n,hr,Ar;function Pn(P){it=P,c.HEAP8=Zn=new Int8Array(P),c.HEAP16=Yn=new Int16Array(P),c.HEAP32=Vr=new Int32Array(P),c.HEAPU8=Dt=new Uint8Array(P),c.HEAPU16=cn=new Uint16Array(P),c.HEAPU32=_n=new Uint32Array(P),c.HEAPF32=hr=new Float32Array(P),c.HEAPF64=Ar=new Float64Array(P)}var vr=c.INITIAL_MEMORY||16777216;if(w)re=c.wasmMemory,it=c.buffer;else if(c.wasmMemory)re=c.wasmMemory;else if(re=new WebAssembly.Memory({initial:vr/65536,maximum:2147483648/65536,shared:!0}),!(re.buffer instanceof SharedArrayBuffer))throw q("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),A&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");re&&(it=re.buffer),vr=it.byteLength,Pn(it);var rs,ys=[],Oo=[],di=[],ca=[],kc=[],_a=!1,Sv=!1;w||Oo.push({func:function(){Vv()}});function YS(){if(!w){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)Tv(c.preRun.shift());Jm(ys)}}function g1(){_a=!0,!w&&Jm(Oo)}function JS(){w||Jm(di)}function Nv(){w||(Sv=!0)}function ho(){if(!w){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)QS(c.postRun.shift());Jm(kc)}}function Tv(P){ys.unshift(P)}function QS(P){kc.unshift(P)}var $l=0,Ic=null,$d=null;function eN(P){xe(!w,"addRunDependency cannot be used in a pthread worker"),$l++,c.monitorRunDependencies&&c.monitorRunDependencies($l)}function tN(P){if($l--,c.monitorRunDependencies&&c.monitorRunDependencies($l),$l==0&&(Ic!==null&&(clearInterval(Ic),Ic=null),$d)){var j=$d;$d=null,j()}}c.preloadedImages={},c.preloadedAudios={};function Fl(P){c.onAbort&&c.onAbort(P),w&&console.error("Pthread aborting at "+new Error().stack),P+="",q(P),fe=!0,me=1,P="abort("+P+"). Build with -s ASSERTIONS=1 for more info.";var j=new WebAssembly.RuntimeError(P);throw d(j),j}function _v(P,j){return String.prototype.startsWith?P.startsWith(j):P.indexOf(j)===0}var Ym="data:application/octet-stream;base64,";function Ev(P){return _v(P,Ym)}var nN="file://";function Rv(P){return _v(P,nN)}var mo="tfjs-backend-wasm-threaded-simd.wasm";Ev(mo)||(mo=I(mo));function Dv(P){try{if(P==mo&&ee)return new Uint8Array(ee);if(_)return _(P);throw"both async and sync fetching of the wasm failed"}catch(j){Fl(j)}}function rN(){if(!ee&&(y||b)){if(typeof fetch=="function"&&!Rv(mo))return fetch(mo,{credentials:"same-origin"}).then(function(P){if(!P.ok)throw"failed to load wasm binary file at '"+mo+"'";return P.arrayBuffer()}).catch(function(){return Dv(mo)});if(T)return new Promise(function(P,j){T(mo,function(oe){P(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return Dv(mo)})}function sN(){var P={a:KN};function j(Be,tt){var xn=Be.exports;if(c.asm=xn,rs=c.asm.F,de=tt,!w){var ss=lt.unusedWorkers.length;lt.unusedWorkers.forEach(function(Wr){lt.loadWasmModuleToWorker(Wr,function(){--ss||tN("wasm-instantiate")})})}}w||eN("wasm-instantiate");function oe(Be){j(Be.instance,Be.module)}function ge(Be){return rN().then(function(tt){return WebAssembly.instantiate(tt,P)}).then(Be,function(tt){q("failed to asynchronously prepare wasm: "+tt),Fl(tt)})}function We(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!Ev(mo)&&!Rv(mo)&&typeof fetch=="function"?fetch(mo,{credentials:"same-origin"}).then(function(Be){var tt=WebAssembly.instantiateStreaming(Be,P);return tt.then(oe,function(xn){return q("wasm streaming compile failed: "+xn),q("falling back to ArrayBuffer instantiation"),ge(oe)})}):ge(oe)}if(c.instantiateWasm)try{var Le=c.instantiateWasm(P,j);return Le}catch(Be){return q("Module.instantiateWasm callback failed with error: "+Be),!1}return We().catch(d),{}}var oN={10024:function(){throw"Canceled!"},10042:function(P,j){setTimeout(function(){QO(P,j)},0)}};function $v(){lt.initRuntime()}function Jm(P){for(;P.length>0;){var j=P.shift();if(typeof j=="function"){j(c);continue}var oe=j.func;typeof oe=="number"?j.arg===void 0?rs.get(oe)():rs.get(oe)(j.arg):oe(j.arg===void 0?null:j.arg)}}function x1(P,j){if(P<=0||P>o().length||P&!0||j<0)return-28;if(j==0)return 0;j>=2147483647&&(j=1/0);var oe=Atomics.load(i(),sg>>2),ge=0;if(oe==P){var We=Atomics.compareExchange(i(),sg>>2,oe,0);if(We==oe&&(--j,ge=1,j<=0))return 1}var Le=Atomics.notify(i(),P>>2,j);if(Le>=0)return Le+ge;throw"Atomics.notify returned an unexpected value "+Le}c._emscripten_futex_wake=x1;function aN(P){if(w)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!P)throw"Internal Error! Null pthread_ptr in killThread!";i()[P+12>>2]=0;var j=lt.pthreads[P];j.worker.terminate(),lt.freeThreadData(j),lt.runningWorkers.splice(lt.runningWorkers.indexOf(j.worker),1),j.worker.pthread=void 0}function iN(P){if(w)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!P)throw"Internal Error! Null pthread_ptr in cancelThread!";var j=lt.pthreads[P];j.worker.postMessage({cmd:"cancel"})}function lN(P){if(w)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!P)throw"Internal Error! Null pthread_ptr in cleanupThread!";var j=lt.pthreads[P];if(j){i()[P+12>>2]=0;var oe=j.worker;lt.returnWorkerToPool(oe)}}var lt={unusedWorkers:[],runningWorkers:[],initMainThreadBlock:function(){for(var P=Math.min(4,Math.max(1,(navigator.hardwareConcurrency||1)/2)),j=0;j>2]=P;var oe=P+152;i()[oe>>2]=oe;for(var ge=Od(512),j=0;j<128;++j)l()[ge/4+j]=0;Atomics.store(l(),P+100>>2,ge),Atomics.store(l(),P+40>>2,P),vT(P,!b,1),JO(P)},initWorker:function(){},pthreads:{},threadExitHandlers:[],setThreadStatus:function(){},runExitHandlers:function(){for(;lt.threadExitHandlers.length>0;)lt.threadExitHandlers.pop()();w&&tg()&&YO()},runExitHandlersAndDeinitThread:function(P,j){Atomics.store(l(),P+56>>2,1),Atomics.store(l(),P+60>>2,0),lt.runExitHandlers(),Atomics.store(l(),P+4>>2,j),Atomics.store(l(),P+0>>2,1),x1(P+0,2147483647),vT(0,0,0)},threadExit:function(P){var j=tg();j&&(lt.runExitHandlersAndDeinitThread(j,P),w&&postMessage({cmd:"exit"}))},threadCancel:function(){lt.runExitHandlersAndDeinitThread(tg(),-1),postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var P in lt.pthreads){var j=lt.pthreads[P];j&&j.worker&<.returnWorkerToPool(j.worker)}lt.pthreads={};for(var oe=0;oe>2];i()[P.threadInfoStruct+100>>2]=0,I1(j),I1(P.threadInfoStruct)}P.threadInfoStruct=0,P.allocatedOwnStack&&P.stackBase&&I1(P.stackBase),P.stackBase=0,P.worker&&(P.worker.pthread=null)}},returnWorkerToPool:function(P){lt.runWithoutMainThreadQueuedCalls(function(){delete lt.pthreads[P.pthread.threadInfoStruct],lt.unusedWorkers.push(P),lt.runningWorkers.splice(lt.runningWorkers.indexOf(P),1),lt.freeThreadData(P.pthread),P.pthread=void 0})},runWithoutMainThreadQueuedCalls:function(P){i()[sP>>2]=0;try{P()}finally{i()[sP>>2]=1}},receiveObjectTransfer:function(P){},loadWasmModuleToWorker:function(P,j){P.onmessage=function(oe){var ge=oe.data,We=ge.cmd;if(P.pthread&&(lt.currentProxiedOperationCallerThread=P.pthread.threadInfoStruct),ge.targetThread&&ge.targetThread!=tg()){var Le=lt.pthreads[ge.targetThread];Le?Le.worker.postMessage(oe.data,ge.transferList):console.error('Internal error! Worker sent a message "'+We+'" to target pthread '+ge.targetThread+", but that thread no longer exists!"),lt.currentProxiedOperationCallerThread=void 0;return}if(We==="processQueuedMainThreadWork")bT();else if(We==="spawnThread")Lv(oe.data);else if(We==="cleanupThread")lN(ge.thread);else if(We==="killThread")aN(ge.thread);else if(We==="cancelThread")iN(ge.thread);else if(We==="loaded")P.loaded=!0,j&&j(P),P.runPthread&&(P.runPthread(),delete P.runPthread);else if(We==="print")W("Thread "+ge.threadId+": "+ge.text);else if(We==="printErr")q("Thread "+ge.threadId+": "+ge.text);else if(We==="alert")alert("Thread "+ge.threadId+": "+ge.text);else if(We==="exit"){var Be=P.pthread&&Atomics.load(l(),P.pthread.threadInfoStruct+64>>2);Be&<.returnWorkerToPool(P)}else if(We==="exitProcess")try{tle(ge.returnCode)}catch(tt){if(tt instanceof S1)return;throw tt}else We==="cancelDone"?lt.returnWorkerToPool(P):We==="objectTransfer"?lt.receiveObjectTransfer(oe.data):oe.data.target==="setimmediate"?P.postMessage(oe.data):q("worker sent an unknown command "+We);lt.currentProxiedOperationCallerThread=void 0},P.onerror=function(oe){q("pthread sent an error! "+oe.filename+":"+oe.lineno+": "+oe.message)},A&&(P.on("message",function(oe){P.onmessage({data:oe})}),P.on("error",function(oe){P.onerror(oe)}),P.on("exit",function(oe){})),P.postMessage({cmd:"load",urlOrBlob:c.mainScriptUrlOrBlob||r,wasmMemory:re,wasmModule:de})},allocateUnusedWorker:function(){var P=I("tfjs-backend-wasm-threaded-simd.worker.js");lt.unusedWorkers.push(new Worker(P))},getNewWorker:function(){return lt.unusedWorkers.length==0&&(lt.allocateUnusedWorker(),lt.loadWasmModuleToWorker(lt.unusedWorkers[0])),lt.unusedWorkers.length>0?lt.unusedWorkers.pop():null},busySpinWait:function(P){for(var j=performance.now()+P;performance.now()>2]=P,P}function mN(P,j){if(w)return Cc(1,1,P,j)}function gN(P,j){if(P==j)postMessage({cmd:"processQueuedMainThreadWork"});else if(w)postMessage({targetThread:P,cmd:"processThreadQueue"});else{var oe=lt.pthreads[P],ge=oe&&oe.worker;if(!ge)return;ge.postMessage({cmd:"processThreadQueue"})}return 1}function xN(){Fl()}function yN(P,j,oe){var ge=kN(j,oe);return oN[P].apply(null,ge)}function bN(P,j){}function AN(P,j,oe){if(P<=0||P>o().length||P&!0)return-28;if(y){if(Atomics.load(i(),P>>2)!=j)return-6;for(var We=performance.now(),Le=We+oe,Be=Atomics.exchange(i(),sg>>2,P);;){if(We=performance.now(),We>Le)return Be=Atomics.exchange(i(),sg>>2,0),-73;if(Be=Atomics.exchange(i(),sg>>2,0),Be==0)break;if(bT(),Atomics.load(i(),P>>2)!=j)return-6;Be=Atomics.exchange(i(),sg>>2,P)}return 0}else{var ge=Atomics.wait(i(),P>>2,j,oe);if(ge==="timed-out")return-73;if(ge==="not-equal")return-6;if(ge==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ge}}function vN(P,j,oe){a().copyWithin(P,j,j+oe)}function wN(){return A?ig("os").cpus().length:navigator.hardwareConcurrency}function Cc(P,j){for(var oe=arguments.length-2,ge=C1(),We=oe,Le=rg(We*8),Be=Le>>3,tt=0;tt>=2;oe=a()[P++];){var ge=oe<105;ge&&j&1&&j++,b1.push(ge?u()[j++>>1]:i()[j]),++j}return b1}function IN(P,j,oe){y1.length=j;for(var ge=oe>>3,We=0;We>>16),Pn(re.buffer),1}catch(j){}}function NN(P){var j=CN();if(P<=j)return!1;var oe=2147483648;if(P>oe)return!1;for(var ge=1;ge<=4;ge*=2){var We=j*(1+.2/ge);We=Math.min(We,P+100663296);var Le=Math.min(oe,mt(Math.max(P,We),65536)),Be=SN(Le);if(Be)return!0}return!1}var zt={inEventHandler:0,removeAllEventListeners:function(){for(var P=zt.eventHandlers.length-1;P>=0;--P)zt._removeHandler(P);zt.eventHandlers=[],zt.deferredCalls=[]},registerRemoveEventListeners:function(){zt.removeEventListenersRegistered||(ca.push(zt.removeAllEventListeners),zt.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(P,j,oe){function ge(Be,tt){if(Be.length!=tt.length)return!1;for(var xn in Be)if(Be[xn]!=tt[xn])return!1;return!0}for(var We in zt.deferredCalls){var Le=zt.deferredCalls[We];if(Le.targetFunction==P&&ge(Le.argsList,oe))return}zt.deferredCalls.push({targetFunction:P,precedence:j,argsList:oe}),zt.deferredCalls.sort(function(Be,tt){return Be.precedence>2]=oe,i()[Be+4>>2]=ge,i()[Be+8>>2]=We,AT(0,P,637534208,j,ge,Be),ng(Le)},getTargetThreadForEventCallback:function(P){switch(P){case 1:return 0;case 2:return lt.currentProxiedOperationCallerThread;default:return P}},getNodeNameForTarget:function(P){return P?P==window?"#window":P==screen?"#screen":P&&P.nodeName?P.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function TN(P){var j=dt(P)+1,oe=Od(j);return ft(P,oe,j),oe}function _N(P,j,oe,ge){var We=C1(),Le=rg(12),Be=0;j&&(Be=TN(j)),i()[Le>>2]=Be,i()[Le+4>>2]=oe,i()[Le+8>>2]=ge,AT(0,P,657457152,0,Be,Le),ng(We)}function EN(P,j,oe,ge){j=j?He(j):"",_N(P,j,oe,ge)}function RN(P){return P>2?He(P):P}var DN=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function $N(P){P=RN(P);var j=DN[P]||(typeof document!="undefined"?document.querySelector(P):void 0);return j}function A1(P){return $N(P)}function Fv(P,j,oe){var ge=A1(P);if(!ge)return-4;if(ge.canvasSharedPtr&&(i()[ge.canvasSharedPtr>>2]=j,i()[ge.canvasSharedPtr+4>>2]=oe),ge.offscreenCanvas||!ge.controlTransferredOffscreen){ge.offscreenCanvas&&(ge=ge.offscreenCanvas);var We=!1;if(ge.GLctxObject&&ge.GLctxObject.GLctx){var Le=ge.GLctxObject.GLctx.getParameter(2978);We=Le[0]===0&&Le[1]===0&&Le[2]===ge.width&&Le[3]===ge.height}ge.width=j,ge.height=oe,We&&ge.GLctxObject.GLctx.viewport(0,0,j,oe)}else if(ge.canvasSharedPtr){var Be=i()[ge.canvasSharedPtr+8>>2];return EN(Be,P,j,oe),1}else return-4;return 0}function Ov(P,j,oe){return w?Cc(2,1,P,j,oe):Fv(P,j,oe)}function FN(P,j,oe){var ge=A1(P);return ge?Fv(P,j,oe):Ov(P,j,oe)}function ON(P){}function PN(P,j){}function MN(P){var j=P.getExtension("ANGLE_instanced_arrays");if(j)return P.vertexAttribDivisor=function(oe,ge){j.vertexAttribDivisorANGLE(oe,ge)},P.drawArraysInstanced=function(oe,ge,We,Le){j.drawArraysInstancedANGLE(oe,ge,We,Le)},P.drawElementsInstanced=function(oe,ge,We,Le,Be){j.drawElementsInstancedANGLE(oe,ge,We,Le,Be)},1}function zN(P){var j=P.getExtension("OES_vertex_array_object");if(j)return P.createVertexArray=function(){return j.createVertexArrayOES()},P.deleteVertexArray=function(oe){j.deleteVertexArrayOES(oe)},P.bindVertexArray=function(oe){j.bindVertexArrayOES(oe)},P.isVertexArray=function(oe){return j.isVertexArrayOES(oe)},1}function LN(P){var j=P.getExtension("WEBGL_draw_buffers");if(j)return P.drawBuffers=function(oe,ge){j.drawBuffersWEBGL(oe,ge)},1}function BN(P){return!!(P.multiDrawWebgl=P.getExtension("WEBGL_multi_draw"))}var pn={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,recordError:function(j){pn.lastError||(pn.lastError=j)},getNewId:function(P){for(var j=pn.counter++,oe=P.length;oe>2]:-1;We+=He(i()[oe+Le*4>>2],Be<0?void 0:Be)}return We},createContext:function(P,j){var oe=P.getContext("webgl",j);if(!oe)return 0;var ge=pn.registerContext(oe,j);return ge},registerContext:function(P,j){var oe=Od(8);i()[oe+4>>2]=tg();var ge={handle:oe,attributes:j,version:j.majorVersion,GLctx:P};return P.canvas&&(P.canvas.GLctxObject=ge),pn.contexts[oe]=ge,(typeof j.enableExtensionsByDefault=="undefined"||j.enableExtensionsByDefault)&&pn.initExtensions(ge),oe},makeContextCurrent:function(P){return pn.currentContext=pn.contexts[P],c.ctx=Sc=pn.currentContext&&pn.currentContext.GLctx,!(P&&!Sc)},getContext:function(P){return pn.contexts[P]},deleteContext:function(P){pn.currentContext===pn.contexts[P]&&(pn.currentContext=null),typeof zt=="object"&&zt.removeAllHandlersOnTarget(pn.contexts[P].GLctx.canvas),pn.contexts[P]&&pn.contexts[P].GLctx.canvas&&(pn.contexts[P].GLctx.canvas.GLctxObject=void 0),I1(pn.contexts[P].handle),pn.contexts[P]=null},initExtensions:function(P){if(P||(P=pn.currentContext),!P.initExtensionsDone){P.initExtensionsDone=!0;var j=P.GLctx;MN(j),zN(j),LN(j),j.disjointTimerQueryExt=j.getExtension("EXT_disjoint_timer_query"),BN(j);var oe=j.getSupportedExtensions()||[];oe.forEach(function(ge){ge.indexOf("lose_context")<0&&ge.indexOf("debug")<0&&j.getExtension(ge)})}},populateUniformTable:function(P){for(var j=pn.programs[P],oe=pn.programInfos[P]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1},ge=oe.uniforms,We=Sc.getProgramParameter(j,35718),Le=0;Le>2,ge=i()[oe+(24>>2)],We={alpha:!!i()[oe+(0>>2)],depth:!!i()[oe+(4>>2)],stencil:!!i()[oe+(8>>2)],antialias:!!i()[oe+(12>>2)],premultipliedAlpha:!!i()[oe+(16>>2)],preserveDrawingBuffer:!!i()[oe+(20>>2)],powerPreference:VN[ge],failIfMajorPerformanceCaveat:!!i()[oe+(28>>2)],majorVersion:i()[oe+(32>>2)],minorVersion:i()[oe+(36>>2)],enableExtensionsByDefault:i()[oe+(40>>2)],explicitSwapControl:i()[oe+(44>>2)],proxyContextToMainThread:i()[oe+(48>>2)],renderViaOffscreenBackBuffer:i()[oe+(52>>2)]},Le=A1(P);if(!Le||We.explicitSwapControl)return 0;var Be=pn.createContext(Le,We);return Be}function GN(P,j){return WN(P,j)}var Qm={mappings:{},buffers:[null,[],[]],printChar:function(P,j){var oe=Qm.buffers[P];j===0||j===10?((P===1?W:q)(Ve(oe,0)),oe.length=0):oe.push(j)},varargs:void 0,get:function(){Qm.varargs+=4;var P=i()[Qm.varargs-4>>2];return P},getStr:function(P){var j=He(P);return j},get64:function(P,j){return P}};function Pv(P){return w?Cc(3,1,P):0}function Mv(P,j,oe,ge,We){if(w)return Cc(4,1,P,j,oe,ge,We)}function zv(P,j,oe,ge){if(w)return Cc(5,1,P,j,oe,ge);for(var We=0,Le=0;Le>2],tt=i()[j+(Le*8+4)>>2],xn=0;xn>2]=We,0}function UN(P){var j=lt.threadExitHandlers.pop();P&&j()}function jN(P,j){lt.threadExitHandlers.push(function(){rs.get(P)(j)})}function Lv(P){if(w)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var j=lt.getNewWorker();if(j.pthread!==void 0)throw"Internal error!";if(!P.pthread_ptr)throw"Internal error, no pthread ptr!";lt.runningWorkers.push(j);for(var oe=Od(128*4),ge=0;ge<128;++ge)i()[oe+ge*4>>2]=0;var We=P.stackBase+P.stackSize,Le=lt.pthreads[P.pthread_ptr]={worker:j,stackBase:P.stackBase,stackSize:P.stackSize,allocatedOwnStack:P.allocatedOwnStack,threadInfoStruct:P.pthread_ptr},Be=Le.threadInfoStruct>>2;Atomics.store(l(),Be+(64>>2),P.detached),Atomics.store(l(),Be+(100>>2),oe),Atomics.store(l(),Be+(40>>2),Le.threadInfoStruct),Atomics.store(l(),Be+(80>>2),P.stackSize),Atomics.store(l(),Be+(76>>2),We),Atomics.store(l(),Be+(104>>2),P.stackSize),Atomics.store(l(),Be+(104+8>>2),We),Atomics.store(l(),Be+(104+12>>2),P.detached);var tt=ZO(),xn=tt+40;Atomics.store(l(),Be+(172>>2),xn),j.pthread=Le;var ss={cmd:"run",start_routine:P.startRoutine,arg:P.arg,threadInfoStruct:P.pthread_ptr,stackBase:P.stackBase,stackSize:P.stackSize};j.runPthread=function(){ss.time=performance.now(),j.postMessage(ss,P.transferList)},j.loaded&&(j.runPthread(),delete j.runPthread)}function HN(P,j,oe,ge){if(typeof SharedArrayBuffer=="undefined")return q("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!P)return q("pthread_create called with a null thread pointer!"),28;var We=[],Le=0;if(w&&(We.length===0||Le))return eP(687865856,P,j,oe,ge);if(Le)return Le;var Be=0,tt=0,xn=0;j&&j!=-1?(Be=i()[j>>2],Be+=81920,tt=i()[j+8>>2],xn=i()[j+12>>2]!==0):Be=2097152;var ss=tt==0;ss?tt=rP(16,Be):(tt-=Be,xe(tt>0));for(var Wr=Od(228),Tc=0;Tc<228>>2;++Tc)l()[(Wr>>2)+Tc]=0;i()[P>>2]=Wr,i()[Wr+12>>2]=Wr;var og=Wr+152;i()[og>>2]=og;var Ms={stackBase:tt,stackSize:Be,allocatedOwnStack:ss,detached:xn,startRoutine:oe,pthread_ptr:Wr,arg:ge,transferList:We};return w?(Ms.cmd="spawnThread",postMessage(Ms,We)):Lv(Ms),0}function Bv(P){if(w)return Cc(6,1,P);switch(P){case 30:return 16384;case 85:var j=2147483648;return j/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return typeof navigator=="object"&&navigator.hardwareConcurrency||1}return hN(28),-1}w||lt.initMainThreadBlock();var Sc,qN=[null,mN,Ov,Pv,Mv,zv,Bv],KN={e:dN,r:fN,x:gN,b:xN,y:yN,j:bN,c:AN,d:x1,f:Fd,p:vN,z:wN,u:IN,q:NN,v:FN,i:ON,t:PN,w:GN,m:Pv,n:Mv,g:zv,o:$v,a:re||c.wasmMemory,k:UN,l:jN,h:HN,s:Bv},KO=sN(),Vv=c.___wasm_call_ctors=function(){return(Vv=c.___wasm_call_ctors=c.asm.A).apply(null,arguments)},XN=c._init=function(){return(XN=c._init=c.asm.B).apply(null,arguments)},ZN=c._register_tensor=function(){return(ZN=c._register_tensor=c.asm.C).apply(null,arguments)},YN=c._dispose_data=function(){return(YN=c._dispose_data=c.asm.D).apply(null,arguments)},JN=c._dispose=function(){return(JN=c._dispose=c.asm.E).apply(null,arguments)},QN=c._Abs=function(){return(QN=c._Abs=c.asm.G).apply(null,arguments)},eT=c._Add=function(){return(eT=c._Add=c.asm.H).apply(null,arguments)},tT=c._AddN=function(){return(tT=c._AddN=c.asm.I).apply(null,arguments)},nT=c._All=function(){return(nT=c._All=c.asm.J).apply(null,arguments)},rT=c._Any=function(){return(rT=c._Any=c.asm.K).apply(null,arguments)},sT=c._ArgMax=function(){return(sT=c._ArgMax=c.asm.L).apply(null,arguments)},oT=c._AvgPool=function(){return(oT=c._AvgPool=c.asm.M).apply(null,arguments)},aT=c._BatchMatMul=function(){return(aT=c._BatchMatMul=c.asm.N).apply(null,arguments)},iT=c._Ceil=function(){return(iT=c._Ceil=c.asm.O).apply(null,arguments)},lT=c._ClipByValue=function(){return(lT=c._ClipByValue=c.asm.P).apply(null,arguments)},uT=c._Conv2D=function(){return(uT=c._Conv2D=c.asm.Q).apply(null,arguments)},cT=c._Conv2DBackpropInput=function(){return(cT=c._Conv2DBackpropInput=c.asm.R).apply(null,arguments)},pT=c._Cos=function(){return(pT=c._Cos=c.asm.S).apply(null,arguments)},dT=c._Cosh=function(){return(dT=c._Cosh=c.asm.T).apply(null,arguments)},fT=c._CropAndResize=function(){return(fT=c._CropAndResize=c.asm.U).apply(null,arguments)},hT=c._Cumsum=function(){return(hT=c._Cumsum=c.asm.V).apply(null,arguments)},mT=c._DepthToSpace=function(){return(mT=c._DepthToSpace=c.asm.W).apply(null,arguments)},gT=c._DepthwiseConv2dNative=function(){return(gT=c._DepthwiseConv2dNative=c.asm.X).apply(null,arguments)},xT=c._Elu=function(){return(xT=c._Elu=c.asm.Y).apply(null,arguments)},Wv=c._Equal=function(){return(Wv=c._Equal=c.asm.Z).apply(null,arguments)},Gv=c._Exp=function(){return(Gv=c._Exp=c.asm._).apply(null,arguments)},Uv=c._FlipLeftRight=function(){return(Uv=c._FlipLeftRight=c.asm.$).apply(null,arguments)},v1=c._Floor=function(){return(v1=c._Floor=c.asm.aa).apply(null,arguments)},eg=c._FloorDiv=function(){return(eg=c._FloorDiv=c.asm.ba).apply(null,arguments)},yT=c._FusedBatchNorm=function(){return(yT=c._FusedBatchNorm=c.asm.ca).apply(null,arguments)},w1=c._FusedConv2D=function(){return(w1=c._FusedConv2D=c.asm.da).apply(null,arguments)},Ae=c._FusedDepthwiseConv2D=function(){return(Ae=c._FusedDepthwiseConv2D=c.asm.ea).apply(null,arguments)},Te=c._Gather=function(){return(Te=c._Gather=c.asm.fa).apply(null,arguments)},Ze=c._GatherNd=function(){return(Ze=c._GatherNd=c.asm.ga).apply(null,arguments)},rn=c._Greater=function(){return(rn=c._Greater=c.asm.ha).apply(null,arguments)},mr=c._GreaterEqual=function(){return(mr=c._GreaterEqual=c.asm.ia).apply(null,arguments)},Jn=c._LeakyRelu=function(){return(Jn=c._LeakyRelu=c.asm.ja).apply(null,arguments)},qt=c._Less=function(){return(qt=c._Less=c.asm.ka).apply(null,arguments)},Zt=c._LessEqual=function(){return(Zt=c._LessEqual=c.asm.la).apply(null,arguments)},bs=c._Log=function(){return(bs=c._Log=c.asm.ma).apply(null,arguments)},Ol=c._LogicalAnd=function(){return(Ol=c._LogicalAnd=c.asm.na).apply(null,arguments)},Pl=c._Max=function(){return(Pl=c._Max=c.asm.oa).apply(null,arguments)},jv=c._MaxPool=function(){return(jv=c._MaxPool=c.asm.pa).apply(null,arguments)},k1=c._Maximum=function(){return(k1=c._Maximum=c.asm.qa).apply(null,arguments)},Po=c._Mean=function(){return(Po=c._Mean=c.asm.ra).apply(null,arguments)},Nc=c._Min=function(){return(Nc=c._Min=c.asm.sa).apply(null,arguments)},Hv=c._Minimum=function(){return(Hv=c._Minimum=c.asm.ta).apply(null,arguments)},hie=c._MirrorPad=function(){return(hie=c._MirrorPad=c.asm.ua).apply(null,arguments)},mie=c._Multiply=function(){return(mie=c._Multiply=c.asm.va).apply(null,arguments)},gie=c._Neg=function(){return(gie=c._Neg=c.asm.wa).apply(null,arguments)},xie=c._NonMaxSuppressionV3=function(){return(xie=c._NonMaxSuppressionV3=c.asm.xa).apply(null,arguments)},yie=c._NonMaxSuppressionV4=function(){return(yie=c._NonMaxSuppressionV4=c.asm.ya).apply(null,arguments)},bie=c._NonMaxSuppressionV5=function(){return(bie=c._NonMaxSuppressionV5=c.asm.za).apply(null,arguments)},Aie=c._NotEqual=function(){return(Aie=c._NotEqual=c.asm.Aa).apply(null,arguments)},vie=c._OneHot=function(){return(vie=c._OneHot=c.asm.Ba).apply(null,arguments)},wie=c._PadV2=function(){return(wie=c._PadV2=c.asm.Ca).apply(null,arguments)},kie=c._Pow=function(){return(kie=c._Pow=c.asm.Da).apply(null,arguments)},Iie=c._Prelu=function(){return(Iie=c._Prelu=c.asm.Ea).apply(null,arguments)},Cie=c._Prod=function(){return(Cie=c._Prod=c.asm.Fa).apply(null,arguments)},Sie=c._RealDiv=function(){return(Sie=c._RealDiv=c.asm.Ga).apply(null,arguments)},Nie=c._Relu=function(){return(Nie=c._Relu=c.asm.Ha).apply(null,arguments)},Tie=c._Relu6=function(){return(Tie=c._Relu6=c.asm.Ia).apply(null,arguments)},_ie=c._ResizeBilinear=function(){return(_ie=c._ResizeBilinear=c.asm.Ja).apply(null,arguments)},Eie=c._Reverse=function(){return(Eie=c._Reverse=c.asm.Ka).apply(null,arguments)},Rie=c._RotateWithOffset=function(){return(Rie=c._RotateWithOffset=c.asm.La).apply(null,arguments)},Die=c._Round=function(){return(Die=c._Round=c.asm.Ma).apply(null,arguments)},$ie=c._Rsqrt=function(){return($ie=c._Rsqrt=c.asm.Na).apply(null,arguments)},Fie=c._ScatterNd=function(){return(Fie=c._ScatterNd=c.asm.Oa).apply(null,arguments)},Oie=c._SelectV2=function(){return(Oie=c._SelectV2=c.asm.Pa).apply(null,arguments)},Pie=c._Sigmoid=function(){return(Pie=c._Sigmoid=c.asm.Qa).apply(null,arguments)},Mie=c._Sin=function(){return(Mie=c._Sin=c.asm.Ra).apply(null,arguments)},zie=c._Softmax=function(){return(zie=c._Softmax=c.asm.Sa).apply(null,arguments)},Lie=c._Sqrt=function(){return(Lie=c._Sqrt=c.asm.Ta).apply(null,arguments)},Bie=c._Square=function(){return(Bie=c._Square=c.asm.Ua).apply(null,arguments)},Vie=c._SquaredDifference=function(){return(Vie=c._SquaredDifference=c.asm.Va).apply(null,arguments)},Wie=c._Step=function(){return(Wie=c._Step=c.asm.Wa).apply(null,arguments)},Gie=c._StridedSlice=function(){return(Gie=c._StridedSlice=c.asm.Xa).apply(null,arguments)},Uie=c._Sub=function(){return(Uie=c._Sub=c.asm.Ya).apply(null,arguments)},jie=c._Sum=function(){return(jie=c._Sum=c.asm.Za).apply(null,arguments)},Hie=c._Tan=function(){return(Hie=c._Tan=c.asm._a).apply(null,arguments)},qie=c._Tanh=function(){return(qie=c._Tanh=c.asm.$a).apply(null,arguments)},Kie=c._Tile=function(){return(Kie=c._Tile=c.asm.ab).apply(null,arguments)},Xie=c._TopK=function(){return(Xie=c._TopK=c.asm.bb).apply(null,arguments)},Zie=c._Transform=function(){return(Zie=c._Transform=c.asm.cb).apply(null,arguments)},Yie=c._Transpose=function(){return(Yie=c._Transpose=c.asm.db).apply(null,arguments)},Jie=c.__FusedMatMul=function(){return(Jie=c.__FusedMatMul=c.asm.eb).apply(null,arguments)},Od=c._malloc=function(){return(Od=c._malloc=c.asm.fb).apply(null,arguments)},I1=c._free=function(){return(I1=c._free=c.asm.gb).apply(null,arguments)},XO=c.___errno_location=function(){return(XO=c.___errno_location=c.asm.hb).apply(null,arguments)},ZO=c._emscripten_get_global_libc=function(){return(ZO=c._emscripten_get_global_libc=c.asm.ib).apply(null,arguments)},tg=c._pthread_self=function(){return(tg=c._pthread_self=c.asm.jb).apply(null,arguments)},YO=c.___pthread_tsd_run_dtors=function(){return(YO=c.___pthread_tsd_run_dtors=c.asm.kb).apply(null,arguments)},bT=c._emscripten_main_thread_process_queued_calls=function(){return(bT=c._emscripten_main_thread_process_queued_calls=c.asm.lb).apply(null,arguments)},Qie=c._emscripten_current_thread_process_queued_calls=function(){return(Qie=c._emscripten_current_thread_process_queued_calls=c.asm.mb).apply(null,arguments)},JO=c._emscripten_register_main_browser_thread_id=function(){return(JO=c._emscripten_register_main_browser_thread_id=c.asm.nb).apply(null,arguments)},QO=c.__emscripten_do_dispatch_to_thread=function(){return(QO=c.__emscripten_do_dispatch_to_thread=c.asm.ob).apply(null,arguments)},eP=c._emscripten_sync_run_in_main_thread_4=function(){return(eP=c._emscripten_sync_run_in_main_thread_4=c.asm.pb).apply(null,arguments)},tP=c._emscripten_run_in_main_runtime_thread_js=function(){return(tP=c._emscripten_run_in_main_runtime_thread_js=c.asm.qb).apply(null,arguments)},AT=c.__emscripten_call_on_thread=function(){return(AT=c.__emscripten_call_on_thread=c.asm.rb).apply(null,arguments)},ele=c._emscripten_tls_init=function(){return(ele=c._emscripten_tls_init=c.asm.sb).apply(null,arguments)},vT=c.__emscripten_thread_init=function(){return(vT=c.__emscripten_thread_init=c.asm.tb).apply(null,arguments)},C1=c.stackSave=function(){return(C1=c.stackSave=c.asm.ub).apply(null,arguments)},ng=c.stackRestore=function(){return(ng=c.stackRestore=c.asm.vb).apply(null,arguments)},rg=c.stackAlloc=function(){return(rg=c.stackAlloc=c.asm.wb).apply(null,arguments)},nP=c._emscripten_stack_set_limits=function(){return(nP=c._emscripten_stack_set_limits=c.asm.xb).apply(null,arguments)},rP=c._memalign=function(){return(rP=c._memalign=c.asm.yb).apply(null,arguments)},sP=c.__emscripten_allow_main_runtime_queued_calls=10016,sg=c.__emscripten_main_thread_futex=11652;c.cwrap=Oe,c.PThread=lt,c.PThread=lt,c.wasmMemory=re,c.ExitStatus=S1;var qv;function S1(P){this.name="ExitStatus",this.message="Program terminated with exit("+P+")",this.status=P}$d=function P(){qv||wT(),qv||($d=P)};function wT(P){if(P=P||m,$l>0)return;if(w){p(c),g1(),postMessage({cmd:"loaded"});return}if(YS(),$l>0)return;function j(){qv||(qv=!0,c.calledRun=!0,!fe&&(g1(),JS(),p(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),ho()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),j()},1)):j()}c.run=wT;function tle(P,j){if(!(j&&ue&&P===0)){if(!j&&w)throw postMessage({cmd:"exitProcess",returnCode:P}),new S1(P);ue||(lt.terminateAllThreads(),me=P,Nv(),c.onExit&&c.onExit(P),fe=!0),x(P,new S1(P))}}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();return w&&(ue=!1,lt.initWorker()),wT(),s.ready}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}}),Fle=Qn({"node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.9.0_@tensorflow+tfjs-core@3.9.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js"(e,t){var n=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(s){s=s||{};var o=typeof s!="undefined"?s:{},a,i;o.ready=new Promise(function(Ae,Te){a=Ae,i=Te});var l={},u;for(u in o)o.hasOwnProperty(u)&&(l[u]=o[u]);var c=[],p="./this.program",d=function(Ae,Te){throw Te},f=!1,h=!1,m=!1,g=!1;f=typeof window=="object",h=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g=!f&&!m&&!h;var x="";function y(Ae){return o.locateFile?o.locateFile(Ae,x):x+Ae}var b,A,v,w,k,I;m?(h?x=D1().dirname(x)+"/":x=__dirname+"/",b=function(Te,Ze){return k||(k=ig("fs")),I||(I=D1()),Te=I.normalize(Te),k.readFileSync(Te,Ze?null:"utf8")},v=function(Te){var Ze=b(Te,!0);return Ze.buffer||(Ze=new Uint8Array(Ze)),W(Ze.buffer),Ze},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),c=process.argv.slice(2),process.on("uncaughtException",function(Ae){if(!(Ae instanceof yT))throw Ae}),process.on("unhandledRejection",_a),d=function(Ae){process.exit(Ae)},o.inspect=function(){return"[Emscripten Module object]"}):g?(typeof read!="undefined"&&(b=function(Te){return read(Te)}),v=function(Te){var Ze;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Te)):(Ze=read(Te,"binary"),W(typeof Ze=="object"),Ze)},typeof scriptArgs!="undefined"?c=scriptArgs:typeof arguments!="undefined"&&(c=arguments),typeof quit=="function"&&(d=function(Ae){quit(Ae)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(f||h)&&(h?x=self.location.href:typeof document!="undefined"&&document.currentScript&&(x=document.currentScript.src),r&&(x=r),x.indexOf("blob:")!==0?x=x.substr(0,x.lastIndexOf("/")+1):x="",b=function(Ae){var Te=new XMLHttpRequest;return Te.open("GET",Ae,!1),Te.send(null),Te.responseText},h&&(v=function(Ae){var Te=new XMLHttpRequest;return Te.open("GET",Ae,!1),Te.responseType="arraybuffer",Te.send(null),new Uint8Array(Te.response)}),A=function(Ae,Te,Ze){var rn=new XMLHttpRequest;rn.open("GET",Ae,!0),rn.responseType="arraybuffer",rn.onload=function(){if(rn.status==200||rn.status==0&&rn.response){Te(rn.response);return}Ze()},rn.onerror=Ze,rn.send(null)},w=function(Ae){document.title=Ae});var N=o.print||console.log.bind(console),T=o.printErr||console.warn.bind(console);for(u in l)l.hasOwnProperty(u)&&(o[u]=l[u]);l=null,o.arguments&&(c=o.arguments),o.thisProgram&&(p=o.thisProgram),o.quit&&(d=o.quit);var _;o.wasmBinary&&(_=o.wasmBinary);var R=o.noExitRuntime||!0;typeof WebAssembly!="object"&&_a("no native wasm support detected");var S,F=!1,B;function W(Ae,Te){Ae||_a("Assertion failed: "+Te)}function q(Ae){var Te=o["_"+Ae];return W(Te,"Cannot call unknown function "+Ae+", make sure it is exported"),Te}function K(Ae,Te,Ze,rn,mr){var Jn={string:function(Po){var Nc=0;if(Po!=null&&Po!==0){var Hv=(Po.length<<2)+1;Nc=v1(Hv),de(Po,Nc,Hv)}return Nc},array:function(Po){var Nc=v1(Po.length);return fe(Po,Nc),Nc}};function qt(Po){return Te==="string"?ue(Po):Te==="boolean"?Boolean(Po):Po}var Zt=q(Ae),bs=[],Ol=0;if(rn)for(var Pl=0;Pl=rn);)++mr;if(mr-Te>16&&Ae.subarray&&Q)return Q.decode(Ae.subarray(Te,mr));for(var Jn="";Te>10,56320|Ol&1023)}}return Jn}function ue(Ae,Te){return Ae?ee(_e,Ae,Te):""}function re(Ae,Te,Ze,rn){if(!(rn>0))return 0;for(var mr=Ze,Jn=Ze+rn-1,qt=0;qt=55296&&Zt<=57343){var bs=Ae.charCodeAt(++qt);Zt=65536+((Zt&1023)<<10)|bs&1023}if(Zt<=127){if(Ze>=Jn)break;Te[Ze++]=Zt}else if(Zt<=2047){if(Ze+1>=Jn)break;Te[Ze++]=192|Zt>>6,Te[Ze++]=128|Zt&63}else if(Zt<=65535){if(Ze+2>=Jn)break;Te[Ze++]=224|Zt>>12,Te[Ze++]=128|Zt>>6&63,Te[Ze++]=128|Zt&63}else{if(Ze+3>=Jn)break;Te[Ze++]=240|Zt>>18,Te[Ze++]=128|Zt>>12&63,Te[Ze++]=128|Zt>>6&63,Te[Ze++]=128|Zt&63}}return Te[Ze]=0,Ze-mr}function de(Ae,Te,Ze){return re(Ae,_e,Te,Ze)}function fe(Ae,Te){Ne.set(Ae,Te)}function me(Ae,Te){return Ae%Te>0&&(Ae+=Te-Ae%Te),Ae}var xe,Ne,_e,Oe,Ve,He,At,ft,dt;function ct(Ae){xe=Ae,o.HEAP8=Ne=new Int8Array(Ae),o.HEAP16=Oe=new Int16Array(Ae),o.HEAP32=He=new Int32Array(Ae),o.HEAPU8=_e=new Uint8Array(Ae),o.HEAPU16=Ve=new Uint16Array(Ae),o.HEAPU32=At=new Uint32Array(Ae),o.HEAPF32=ft=new Float32Array(Ae),o.HEAPF64=dt=new Float64Array(Ae)}var mt=o.INITIAL_MEMORY||16777216,it,Zn=[],Dt=[],Yn=[],cn=[],Vr=!1;Dt.push({func:function(){$v()}});function _n(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)vr(o.preRun.shift());Ic(Zn)}function hr(){Vr=!0,Ic(Dt)}function Ar(){Ic(Yn)}function Pn(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)rs(o.postRun.shift());Ic(cn)}function vr(Ae){Zn.unshift(Ae)}function rs(Ae){cn.unshift(Ae)}var ys=0,Oo=null,di=null;function ca(Ae){ys++,o.monitorRunDependencies&&o.monitorRunDependencies(ys)}function kc(Ae){if(ys--,o.monitorRunDependencies&&o.monitorRunDependencies(ys),ys==0&&(Oo!==null&&(clearInterval(Oo),Oo=null),di)){var Te=di;di=null,Te()}}o.preloadedImages={},o.preloadedAudios={};function _a(Ae){o.onAbort&&o.onAbort(Ae),Ae+="",T(Ae),F=!0,B=1,Ae="abort("+Ae+"). Build with -s ASSERTIONS=1 for more info.";var Te=new WebAssembly.RuntimeError(Ae);throw i(Te),Te}function Sv(Ae,Te){return String.prototype.startsWith?Ae.startsWith(Te):Ae.indexOf(Te)===0}var YS="data:application/octet-stream;base64,";function g1(Ae){return Sv(Ae,YS)}var JS="file://";function Nv(Ae){return Sv(Ae,JS)}var ho="tfjs-backend-wasm.wasm";g1(ho)||(ho=y(ho));function Tv(Ae){try{if(Ae==ho&&_)return new Uint8Array(_);if(v)return v(Ae);throw"both async and sync fetching of the wasm failed"}catch(Te){_a(Te)}}function QS(){if(!_&&(f||h)){if(typeof fetch=="function"&&!Nv(ho))return fetch(ho,{credentials:"same-origin"}).then(function(Ae){if(!Ae.ok)throw"failed to load wasm binary file at '"+ho+"'";return Ae.arrayBuffer()}).catch(function(){return Tv(ho)});if(A)return new Promise(function(Ae,Te){A(ho,function(Ze){Ae(new Uint8Array(Ze))},Te)})}return Promise.resolve().then(function(){return Tv(ho)})}function $l(){var Ae={a:sN};function Te(qt,Zt){var bs=qt.exports;o.asm=bs,S=o.asm.i,ct(S.buffer),it=o.asm.o,kc("wasm-instantiate")}ca("wasm-instantiate");function Ze(qt){Te(qt.instance)}function rn(qt){return QS().then(function(Zt){return WebAssembly.instantiate(Zt,Ae)}).then(qt,function(Zt){T("failed to asynchronously prepare wasm: "+Zt),_a(Zt)})}function mr(){return!_&&typeof WebAssembly.instantiateStreaming=="function"&&!g1(ho)&&!Nv(ho)&&typeof fetch=="function"?fetch(ho,{credentials:"same-origin"}).then(function(qt){var Zt=WebAssembly.instantiateStreaming(qt,Ae);return Zt.then(Ze,function(bs){return T("wasm streaming compile failed: "+bs),T("falling back to ArrayBuffer instantiation"),rn(Ze)})}):rn(Ze)}if(o.instantiateWasm)try{var Jn=o.instantiateWasm(Ae,Te);return Jn}catch(qt){return T("Module.instantiateWasm callback failed with error: "+qt),!1}return mr().catch(i),{}}function Ic(Ae){for(;Ae.length>0;){var Te=Ae.shift();if(typeof Te=="function"){Te(o);continue}var Ze=Te.func;typeof Ze=="number"?Te.arg===void 0?it.get(Ze)():it.get(Ze)(Te.arg):Ze(Te.arg===void 0?null:Te.arg)}}function $d(){_a()}function eN(Ae,Te,Ze){_e.copyWithin(Ae,Te,Te+Ze)}function tN(){return _e.length}function Fl(Ae){try{return S.grow(Ae-xe.byteLength+65535>>>16),ct(S.buffer),1}catch(Te){}}function _v(Ae){var Te=tN(),Ze=2147483648;if(Ae>Ze)return!1;for(var rn=1;rn<=4;rn*=2){var mr=Te*(1+.2/rn);mr=Math.min(mr,Ae+100663296);var Jn=Math.min(Ze,me(Math.max(Ae,mr),65536)),qt=Fl(Jn);if(qt)return!0}return!1}var Ym={mappings:{},buffers:[null,[],[]],printChar:function(Ae,Te){var Ze=Ym.buffers[Ae];Te===0||Te===10?((Ae===1?N:T)(ee(Ze,0)),Ze.length=0):Ze.push(Te)},varargs:void 0,get:function(){Ym.varargs+=4;var Ae=He[Ym.varargs-4>>2];return Ae},getStr:function(Ae){var Te=ue(Ae);return Te},get64:function(Ae,Te){return Ae}};function Ev(Ae){return 0}function nN(Ae,Te,Ze,rn,mr){}function Rv(Ae,Te,Ze,rn){for(var mr=0,Jn=0;Jn>2],Zt=He[Te+(Jn*8+4)>>2],bs=0;bs>2]=mr,0}function mo(){return 6}function Dv(Ae){return He[Wv()>>2]=Ae,Ae}function rN(Ae){switch(Ae){case 30:return 16384;case 85:var Te=2147483648;return Te/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return typeof navigator=="object"&&navigator.hardwareConcurrency||1}return Dv(28),-1}var sN={a:$d,d:eN,e:_v,f:Ev,c:nN,b:Rv,g:mo,h:rN},oN=$l(),$v=o.___wasm_call_ctors=function(){return($v=o.___wasm_call_ctors=o.asm.j).apply(null,arguments)},Jm=o._init=function(){return(Jm=o._init=o.asm.k).apply(null,arguments)},x1=o._register_tensor=function(){return(x1=o._register_tensor=o.asm.l).apply(null,arguments)},aN=o._dispose_data=function(){return(aN=o._dispose_data=o.asm.m).apply(null,arguments)},iN=o._dispose=function(){return(iN=o._dispose=o.asm.n).apply(null,arguments)},lN=o._Abs=function(){return(lN=o._Abs=o.asm.p).apply(null,arguments)},lt=o._Add=function(){return(lt=o._Add=o.asm.q).apply(null,arguments)},uN=o._AddN=function(){return(uN=o._AddN=o.asm.r).apply(null,arguments)},cN=o._All=function(){return(cN=o._All=o.asm.s).apply(null,arguments)},pN=o._Any=function(){return(pN=o._Any=o.asm.t).apply(null,arguments)},dN=o._ArgMax=function(){return(dN=o._ArgMax=o.asm.u).apply(null,arguments)},fN=o._AvgPool=function(){return(fN=o._AvgPool=o.asm.v).apply(null,arguments)},Fd=o._BatchMatMul=function(){return(Fd=o._BatchMatMul=o.asm.w).apply(null,arguments)},hN=o._Ceil=function(){return(hN=o._Ceil=o.asm.x).apply(null,arguments)},mN=o._ClipByValue=function(){return(mN=o._ClipByValue=o.asm.y).apply(null,arguments)},gN=o._Conv2D=function(){return(gN=o._Conv2D=o.asm.z).apply(null,arguments)},xN=o._Conv2DBackpropInput=function(){return(xN=o._Conv2DBackpropInput=o.asm.A).apply(null,arguments)},yN=o._Cos=function(){return(yN=o._Cos=o.asm.B).apply(null,arguments)},bN=o._Cosh=function(){return(bN=o._Cosh=o.asm.C).apply(null,arguments)},AN=o._CropAndResize=function(){return(AN=o._CropAndResize=o.asm.D).apply(null,arguments)},vN=o._Cumsum=function(){return(vN=o._Cumsum=o.asm.E).apply(null,arguments)},wN=o._DepthToSpace=function(){return(wN=o._DepthToSpace=o.asm.F).apply(null,arguments)},Cc=o._DepthwiseConv2dNative=function(){return(Cc=o._DepthwiseConv2dNative=o.asm.G).apply(null,arguments)},y1=o._Elu=function(){return(y1=o._Elu=o.asm.H).apply(null,arguments)},b1=o._Equal=function(){return(b1=o._Equal=o.asm.I).apply(null,arguments)},kN=o._Exp=function(){return(kN=o._Exp=o.asm.J).apply(null,arguments)},IN=o._FlipLeftRight=function(){return(IN=o._FlipLeftRight=o.asm.K).apply(null,arguments)},CN=o._Floor=function(){return(CN=o._Floor=o.asm.L).apply(null,arguments)},SN=o._FloorDiv=function(){return(SN=o._FloorDiv=o.asm.M).apply(null,arguments)},NN=o._FusedBatchNorm=function(){return(NN=o._FusedBatchNorm=o.asm.N).apply(null,arguments)},zt=o._FusedConv2D=function(){return(zt=o._FusedConv2D=o.asm.O).apply(null,arguments)},TN=o._FusedDepthwiseConv2D=function(){return(TN=o._FusedDepthwiseConv2D=o.asm.P).apply(null,arguments)},_N=o._Gather=function(){return(_N=o._Gather=o.asm.Q).apply(null,arguments)},EN=o._GatherNd=function(){return(EN=o._GatherNd=o.asm.R).apply(null,arguments)},RN=o._Greater=function(){return(RN=o._Greater=o.asm.S).apply(null,arguments)},DN=o._GreaterEqual=function(){return(DN=o._GreaterEqual=o.asm.T).apply(null,arguments)},$N=o._LeakyRelu=function(){return($N=o._LeakyRelu=o.asm.U).apply(null,arguments)},A1=o._Less=function(){return(A1=o._Less=o.asm.V).apply(null,arguments)},Fv=o._LessEqual=function(){return(Fv=o._LessEqual=o.asm.W).apply(null,arguments)},Ov=o._Log=function(){return(Ov=o._Log=o.asm.X).apply(null,arguments)},FN=o._LogicalAnd=function(){return(FN=o._LogicalAnd=o.asm.Y).apply(null,arguments)},ON=o._Max=function(){return(ON=o._Max=o.asm.Z).apply(null,arguments)},PN=o._MaxPool=function(){return(PN=o._MaxPool=o.asm._).apply(null,arguments)},MN=o._Maximum=function(){return(MN=o._Maximum=o.asm.$).apply(null,arguments)},zN=o._Mean=function(){return(zN=o._Mean=o.asm.aa).apply(null,arguments)},LN=o._Min=function(){return(LN=o._Min=o.asm.ba).apply(null,arguments)},BN=o._Minimum=function(){return(BN=o._Minimum=o.asm.ca).apply(null,arguments)},pn=o._MirrorPad=function(){return(pn=o._MirrorPad=o.asm.da).apply(null,arguments)},VN=o._Multiply=function(){return(VN=o._Multiply=o.asm.ea).apply(null,arguments)},WN=o._Neg=function(){return(WN=o._Neg=o.asm.fa).apply(null,arguments)},GN=o._NonMaxSuppressionV3=function(){return(GN=o._NonMaxSuppressionV3=o.asm.ga).apply(null,arguments)},Qm=o._NonMaxSuppressionV4=function(){return(Qm=o._NonMaxSuppressionV4=o.asm.ha).apply(null,arguments)},Pv=o._NonMaxSuppressionV5=function(){return(Pv=o._NonMaxSuppressionV5=o.asm.ia).apply(null,arguments)},Mv=o._NotEqual=function(){return(Mv=o._NotEqual=o.asm.ja).apply(null,arguments)},zv=o._OneHot=function(){return(zv=o._OneHot=o.asm.ka).apply(null,arguments)},UN=o._PadV2=function(){return(UN=o._PadV2=o.asm.la).apply(null,arguments)},jN=o._Pow=function(){return(jN=o._Pow=o.asm.ma).apply(null,arguments)},Lv=o._Prelu=function(){return(Lv=o._Prelu=o.asm.na).apply(null,arguments)},HN=o._Prod=function(){return(HN=o._Prod=o.asm.oa).apply(null,arguments)},Bv=o._RealDiv=function(){return(Bv=o._RealDiv=o.asm.pa).apply(null,arguments)},Sc=o._Relu=function(){return(Sc=o._Relu=o.asm.qa).apply(null,arguments)},qN=o._Relu6=function(){return(qN=o._Relu6=o.asm.ra).apply(null,arguments)},KN=o._ResizeBilinear=function(){return(KN=o._ResizeBilinear=o.asm.sa).apply(null,arguments)},KO=o._Reverse=function(){return(KO=o._Reverse=o.asm.ta).apply(null,arguments)},Vv=o._RotateWithOffset=function(){return(Vv=o._RotateWithOffset=o.asm.ua).apply(null,arguments)},XN=o._Round=function(){return(XN=o._Round=o.asm.va).apply(null,arguments)},ZN=o._Rsqrt=function(){return(ZN=o._Rsqrt=o.asm.wa).apply(null,arguments)},YN=o._ScatterNd=function(){return(YN=o._ScatterNd=o.asm.xa).apply(null,arguments)},JN=o._SelectV2=function(){return(JN=o._SelectV2=o.asm.ya).apply(null,arguments)},QN=o._Sigmoid=function(){return(QN=o._Sigmoid=o.asm.za).apply(null,arguments)},eT=o._Sin=function(){return(eT=o._Sin=o.asm.Aa).apply(null,arguments)},tT=o._Softmax=function(){return(tT=o._Softmax=o.asm.Ba).apply(null,arguments)},nT=o._Sqrt=function(){return(nT=o._Sqrt=o.asm.Ca).apply(null,arguments)},rT=o._Square=function(){return(rT=o._Square=o.asm.Da).apply(null,arguments)},sT=o._SquaredDifference=function(){return(sT=o._SquaredDifference=o.asm.Ea).apply(null,arguments)},oT=o._Step=function(){return(oT=o._Step=o.asm.Fa).apply(null,arguments)},aT=o._StridedSlice=function(){return(aT=o._StridedSlice=o.asm.Ga).apply(null,arguments)},iT=o._Sub=function(){return(iT=o._Sub=o.asm.Ha).apply(null,arguments)},lT=o._Sum=function(){return(lT=o._Sum=o.asm.Ia).apply(null,arguments)},uT=o._Tan=function(){return(uT=o._Tan=o.asm.Ja).apply(null,arguments)},cT=o._Tanh=function(){return(cT=o._Tanh=o.asm.Ka).apply(null,arguments)},pT=o._Tile=function(){return(pT=o._Tile=o.asm.La).apply(null,arguments)},dT=o._TopK=function(){return(dT=o._TopK=o.asm.Ma).apply(null,arguments)},fT=o._Transform=function(){return(fT=o._Transform=o.asm.Na).apply(null,arguments)},hT=o._Transpose=function(){return(hT=o._Transpose=o.asm.Oa).apply(null,arguments)},mT=o.__FusedMatMul=function(){return(mT=o.__FusedMatMul=o.asm.Pa).apply(null,arguments)},gT=o._malloc=function(){return(gT=o._malloc=o.asm.Qa).apply(null,arguments)},xT=o._free=function(){return(xT=o._free=o.asm.Ra).apply(null,arguments)},Wv=o.___errno_location=function(){return(Wv=o.___errno_location=o.asm.Sa).apply(null,arguments)},Gv=o.stackSave=function(){return(Gv=o.stackSave=o.asm.Ta).apply(null,arguments)},Uv=o.stackRestore=function(){return(Uv=o.stackRestore=o.asm.Ua).apply(null,arguments)},v1=o.stackAlloc=function(){return(v1=o.stackAlloc=o.asm.Va).apply(null,arguments)};o.cwrap=J;var eg;function yT(Ae){this.name="ExitStatus",this.message="Program terminated with exit("+Ae+")",this.status=Ae}di=function Ae(){eg||w1(),eg||(di=Ae)};function w1(Ae){if(Ae=Ae||c,ys>0||(_n(),ys>0))return;function Te(){eg||(eg=!0,o.calledRun=!0,!F&&(hr(),Ar(),a(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),Pn()))}o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),Te()},1)):Te()}if(o.run=w1,o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return w1(),s.ready}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}}),Ole=1e-7,Ple=1e-4,Xv=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},$1=class{refCount(e){return Ea("refCount")}incRef(e){return Ea("incRef")}timerAvailable(){return!0}time(e){return Ea("time")}read(e){return Ea("read")}readSync(e){return Ea("readSync")}numDataIds(){return Ea("numDataIds")}disposeData(e,t){return Ea("disposeData")}write(e,t,n){return Ea("write")}move(e,t,n,r,s){return Ea("move")}memory(){return Ea("memory")}floatPrecision(){return Ea("floatPrecision")}epsilon(){return this.floatPrecision()===32?Ole:Ple}dispose(){return Ea("dispose")}};function Ea(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function fP(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,Zv(e,t,n)}function Mle(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,r=0;for(;n>0;)r=Math.random()*n|0,n--,Zv(e,n,r),Zv(t,n,r)}function F1(e,t,n){return Math.max(e,Math.min(t,n))}function zle(e){return e%2==0?e:e+1}function Zv(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function Lle(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function Md(e){H(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function zd(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||Ds(e)&&!n)for(let r=0;r0,n){return new Promise((r,s)=>{let o=0,a=()=>{if(e()){r();return}o++;let i=t(o);if(n!=null&&o>=n){s();return}setTimeout(a,i)};a()})}function qle(e,t){let n=1,r=-1;for(let o=0;o=0)n*=e[o];else if(e[o]===-1){if(r!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${o}`);r=o}else if(e[o]<0)throw Error(`Shapes can not be < 0. Found ${e[o]} at dim ${o}`);if(r===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!=0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let s=e.slice();return s[r]=t/n,s}function Ra(e,t){let n=t.length;return e=e==null?t.map((r,s)=>s):[].concat(e),H(e.every(r=>r>=-n&&r`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),H(e.every(r=>as(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function hP(e,t){let n=[],r=[],s=t!=null&&Array.isArray(t)&&t.length===0,o=t==null||s?null:Ra(t,e).sort(),a=0;for(let i=0;ii)&&e[i]===1&&(n.push(e[i]),r.push(i)),o[a]<=i&&a++}e[i]!==1&&(n.push(e[i]),r.push(i))}return{newShape:n,keptDims:r}}function mP(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function gP(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function xP(e,t){for(let n=0;nt+=n.length),t}function Rc(e){return typeof e=="string"||e instanceof String}function AP(e){return typeof e=="boolean"}function vP(e){return typeof e=="number"}function Yv(e){return Array.isArray(e)?Yv(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array?"int32":vP(e)?"float32":Rc(e)?"string":AP(e)?"bool":"float32"}function Dc(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Jv(e,t){for(let n=t;n=0;--r)n[r]=n[r+1]*e[r+1];return n}function wP(e,t,n,r=!1){let s=new Array;if(t.length===1){let o=t[0]*(r?2:1);for(let a=0;al*u)*(r?2:1);for(let l=0;ls*o)*(n?2:1);if(r===0)return[];if(r!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return wP(0,e,t,n)}function CT(e,t){let n=Qv(e,t);for(let r=0;rr*s,1);if(t==null||t==="float32")return ug(e,new Float32Array(n));if(t==="int32")return ug(e,new Int32Array(n));if(t==="bool")return ug(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function ST(e){e.forEach(t=>{H(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function Zle(e,t,n){if(t===0)return 0;if(t===1)return e[0];let r=e[e.length-1];for(let s=0;s{let[r,s]=n.split(":");this.urlFlags[r]=tue(r,s)})}};function Qle(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(eue(t,r[0],r[1]),r.join("="))),t}function eue(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function tue(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function be(){return Da}var Da=null;function nue(e){Da=e}var TT;function CP(){if(TT==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");TT=e}return TT}function rue(){let e=CP();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function _T(e,t){let n=rue();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var cg="Abs",pg="Acos",dg="Acosh",$c="Add",Ld="AddN",fg="All",hg="Any",Bd="ArgMax",P1="ArgMin",mg="Asin",gg="Asinh",xg="Atan",yg="Atanh",bg="Atan2",Vd="AvgPool",ew="AvgPoolGrad",M1="AvgPool3D",tw="AvgPool3DGrad",Wd="BatchMatMul",Ag="BatchToSpaceND",nw="Bincount",SP="BroadcastTo",ET="BroadcastArgs",Gd="Cast",Ud="Ceil",Fc="ClipByValue",rw="Complex",z1="ComplexAbs",vg="Concat",jd="Conv2D",sw="Conv2DBackpropFilter",Hd="Conv2DBackpropInput",L1="Conv3D",ow="Conv3DBackpropFilterV2",aw="Conv3DBackpropInputV2",qd="Cos",Kd="Cosh",Xd="Cumsum",wg="CropAndResize",iw="DenseBincount",kg="DepthToSpace",Zd="DepthwiseConv2dNative",lw="DepthwiseConv2dNativeBackpropFilter",uw="DepthwiseConv2dNativeBackpropInput",cw="Diag",B1="Dilation2D",pw="Dilation2DBackpropInput",dw="Dilation2DBackpropFilter",Yd="RealDiv",fw="Einsum",Jd="Elu",hw="EluGrad",Ig="Erf",Cg="Equal",Qd="Exp",Sg="ExpandDims",Ng="Expm1",mw="FFT",V1="Fill",Tg="FlipLeftRight",ef="Floor",tf="FloorDiv",nf="FusedBatchNorm",_g="GatherV2",Eg="GatherNd",Rg="Greater",rf="GreaterEqual",sf="Identity",gw="IFFT",xw="Imag",Dg="IsFinite",$g="IsInf",Fg="IsNan",of="LeakyRelu",Og="Less",Pg="LessEqual",yw="LinSpace",af="Log",Mg="Log1p",zg="LogicalAnd",W1="LogicalNot",G1="LogicalOr",NP="LogSoftmax",U1="LRN",bw="LRNGrad",lf="Max",uf="Maximum",cf="MaxPool",Aw="MaxPoolGrad",j1="MaxPool3D",vw="MaxPool3DGrad",ww="MaxPoolWithArgmax",pf="Mean",df="Min",ff="Minimum",hf="MirrorPad",Lg="Mod",kw="Multinomial",mf="Multiply",Bg="Neg",Vg="NotEqual",Wg="NonMaxSuppressionV3",Gg="NonMaxSuppressionV4",Ug="NonMaxSuppressionV5",jg="OnesLike",gf="OneHot",Hg="Pack",xf="PadV2",sue="Pool",yf="Pow",bf="Prelu",qg="Prod",H1="Range",Iw="Real",Kg="Reciprocal",Af="Relu",Xg="Reshape",q1="ResizeNearestNeighbor",Cw="ResizeNearestNeighborGrad",vf="ResizeBilinear",Sw="ResizeBilinearGrad",wf="Relu6",kf="Reverse",If="Round",Cf="Rsqrt",Zg="ScatterNd",Yg="Select",Jg="Selu",Qg="Slice",Sf="Sin",e0="Sinh",t0="Sign",Nf="Sigmoid",n0="Softplus",Tf="Sqrt",_f="Sum",r0="SpaceToBatchND",s0="SplitV",Ef="Softmax",Nw="SparseFillEmptyRows",Tw="SparseReshape",_w="SparseSegmentMean",Ew="SparseSegmentSum",Rw="SparseToDense",Rf="SquaredDifference",K1="Square",o0="StridedSlice",Dw="StringNGrams",$w="StringSplit",Fw="StringToHashBucketFast",Df="Sub",$f="Tan",Ff="Tanh",Oc="Tile",a0="TopK",i0="Transform",Of="Transpose",Ow="Unique",l0="Unpack",X1="UnsortedSegmentSum",u0="ZerosLike",Pc="Step",Pw="FromPixels",c0="RotateWithOffset",Pf="_FusedMatMul",Mf="FusedConv2D",zf="FusedDepthwiseConv2D",p0=_T("kernelRegistry",()=>new Map),Z1=_T("gradRegistry",()=>new Map);function Mw(e,t){let n=DT(e,t);return p0.get(n)}function RT(e){return Z1.get(e)}function zl(e){let t=p0.entries(),n=[];for(;;){let{done:r,value:s}=t.next();if(r)break;let[o,a]=s,[i]=o.split("_");i===e&&n.push(a)}return n}function Mc(e){let{kernelName:t,backendName:n}=e,r=DT(t,n);p0.has(r)&&tl(`The kernel '${t}' for backend '${n}' is already registered`),p0.set(r,e)}function TP(e){let{kernelName:t}=e;Z1.has(t)&&be().getBool("DEBUG")&&tl(`Overriding the gradient for '${t}'`),Z1.set(t,e)}function oue(e,t){let n=DT(e,t);if(!p0.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);p0.delete(n)}function aue(e){if(!Z1.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Z1.delete(e)}function iue(e,t){zl(e).forEach(r=>{let s=Object.assign({},r,{backendName:t});Mc(s)})}function DT(e,t){return`${t}_${e}`}var E={};Rt(E,{arraysEqual:()=>Ml,assert:()=>H,assertNonNegativeIntegerDimensions:()=>ST,assertNonNull:()=>Md,assertShapesMatch:()=>zs,bytesFromStringArray:()=>bP,bytesPerElement:()=>IT,checkConversionForErrors:()=>xP,clamp:()=>F1,computeStrides:()=>lg,createScalarValue:()=>fue,createShuffledIndices:()=>jle,decodeString:()=>Bw,distSquared:()=>Vle,encodeString:()=>Q1,fetch:()=>mue,fingerPrint64:()=>due,flatten:()=>zd,getArrayFromDType:()=>gP,getTypedArrayFromDType:()=>mP,hasEncodingLoss:()=>Kle,hexToLong:()=>Y1,indexToLoc:()=>Yle,inferDtype:()=>Yv,inferFromImplicitShape:()=>qle,isBoolean:()=>AP,isFunction:()=>Dc,isInt:()=>as,isNumber:()=>vP,isPromise:()=>NT,isScalarShape:()=>Wle,isString:()=>Rc,isTypedArray:()=>Ds,isValidDtype:()=>yP,locToIndex:()=>Zle,makeOnesTypedArray:()=>CT,makeZerosNestedTypedArray:()=>Xle,makeZerosTypedArray:()=>Qv,nearestDivisor:()=>Jv,nearestLargerEven:()=>zle,now:()=>J1,parseAxisParam:()=>Ra,randUniform:()=>Ble,repeatedTry:()=>Hle,rightPad:()=>O1,shuffle:()=>fP,shuffleCombo:()=>Mle,sizeFromShape:()=>wr,sizeToSquarishShape:()=>Ule,squeezeShape:()=>hP,sum:()=>Lle,swap:()=>Zv,tanh:()=>Gle,toNestedArray:()=>ug,toTypedArray:()=>Lw});var _P=Pd(mle()),Lf=_P.default||_P;function Y1(e){return Lf.fromString(e,!0,16)}var EP=Y1("c3a5c85c97cb3127"),Bf=Y1("b492b66fbe98f273"),Ls=Y1("9ae16a3b2f90404f");function $T(e){return e.xor(e.shru(47))}function RP(e,t,n){let r=e.slice(t,t+n);return Lf.fromBytes(Array.from(r),!0,!0)}function Mn(e,t){return RP(e,t,8)}function DP(e,t){return RP(e,t,4)}function is(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function zc(e,t,n=Y1("9ddfea08eb382d69")){let r=e.xor(t).mul(n);r=r.xor(r.shru(47));let s=t.xor(r).mul(n);return s=s.xor(s.shru(47)),s=s.mul(n),s}function lue(e,t,n,r,s,o){s=s.add(e),o=is(o.add(s).add(r),21);let a=s;return s=s.add(t),s=s.add(n),o=o.add(is(s,44)),[s.add(r),o.add(a)]}function zw(e,t,n,r){return lue(Mn(e,t),Mn(e,t+8),Mn(e,t+16),Mn(e,t+24),n,r)}function uue(e,t=e.length){if(t>=8){let n=Ls.add(t*2),r=Mn(e,0).add(Ls),s=Mn(e,t-8),o=is(s,37).mul(n).add(r),a=is(r,25).add(s).mul(n);return zc(o,a,n)}if(t>=4){let n=Ls.add(t*2),r=DP(e,0);return zc(r.shl(3).add(t),DP(e,t-4),n)}if(t>0){let n=e[0],r=e[t>>1],s=e[t-1],o=n+(r<<8),a=t+(s<<2);return $T(Ls.mul(o).xor(EP.mul(a))).mul(Ls)}return Ls}function cue(e,t=e.length){let n=Ls.add(t*2),r=Mn(e,0).mul(Bf),s=Mn(e,8),o=Mn(e,t-8).mul(n),a=Mn(e,t-16).mul(Ls);return zc(is(r.add(s),43).add(is(o,30)).add(a),r.add(is(s.add(Ls),18)).add(o),n)}function pue(e,t=e.length){let n=Ls.add(t*2),r=Mn(e,0).mul(Ls),s=Mn(e,8),o=Mn(e,t-8).mul(n),a=Mn(e,t-16).mul(Ls),i=is(r.add(s),43).add(is(o,30)).add(a),l=zc(i,r.add(is(s.add(Ls),18)).add(o),n),u=Mn(e,16).mul(n),c=Mn(e,24),p=i.add(Mn(e,t-32)).mul(n),d=l.add(Mn(e,t-24)).mul(n);return zc(is(u.add(c),43).add(is(p,30)).add(d),u.add(is(c.add(r),18)).add(p),n)}function due(e,t=e.length){let n=Lf.fromNumber(81,!0);if(t<=32)return t<=16?uue(e,t):cue(e,t);if(t<=64)return pue(e,t);let r=n,s=n.mul(Bf).add(113),o=$T(s.mul(Ls).add(113)).mul(Ls),a=[Lf.UZERO,Lf.UZERO],i=[Lf.UZERO,Lf.UZERO];r=r.mul(Ls).add(Mn(e,0));let l=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do r=is(r.add(s).add(a[0]).add(Mn(e,l+8)),37).mul(Bf),s=is(s.add(a[1]).add(Mn(e,l+48)),42).mul(Bf),r=r.xor(i[1]),s=s.add(a[0]).add(Mn(e,l+40)),o=is(o.add(i[0]),33).mul(Bf),a=zw(e,l,a[1].mul(Bf),r.add(i[0])),i=zw(e,l+32,o.add(i[1]),s.add(Mn(e,l+16))),[o,r]=[r,o],l+=64;while(l!==u);let p=Bf.add(o.and(255).shl(1));return l=c,i[0]=i[0].add(t-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),r=is(r.add(s).add(a[0]).add(Mn(e,l+8)),37).mul(p),s=is(s.add(a[1]).add(Mn(e,l+48)),42).mul(p),r=r.xor(i[1].mul(9)),s=s.add(a[0].mul(9).add(Mn(e,l+40))),o=is(o.add(i[0]),33).mul(p),a=zw(e,l,a[1].mul(p),r.add(i[0])),i=zw(e,l+32,o.add(i[1]),s.add(Mn(e,l+16))),[o,r]=[r,o],zc(zc(a[0],i[0],p).add($T(s).mul(EP)).add(o),zc(a[1],i[1],p).add(r),p)}function fue(e,t){return t==="string"?Q1(e):Lw([e],t)}function hue(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Lw(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=zd(e)),be().getBool("DEBUG")&&xP(e,t),hue(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let r=0;r{r=n()},o,a=J1();if(this.backendTimer.timerAvailable())o=this.backendTimer.time(s);else{s();for(let l of r)l.dataSync();o=Promise.resolve({kernelMs:J1()-a})}if(be().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let l=0;l{xue(c,u.dtype,e)})}return{kernelName:e,outputs:r,inputs:t,timeMs:o.then(l=>l.kernelMs),extraInfo:o.then(l=>l.getExtraProfileInfo!=null?l.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:r,inputs:s,extraInfo:o}=e;n.forEach(a=>{Promise.all([a.data(),r,o]).then(i=>{this.logger.logKernelProfile(t,a,i[0],i[1],s,i[2])})})}};function xue(e,t,n){if(t!=="float32")return!1;for(let r=0;r0?h:""} `}}console.log(`%c${i} %c${a} %c${l}D ${c} %c${u} %c${p} %c${o}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function bue(e,t,n){let r={},s={};for(let l=0;lr[m.id]=!0),f=!0,s[u.id]=!0;break}if(f)break}}let o={};o[n.id]=!0;let a={};for(let l=e.length-1;l>=0;l--){let u=e[l],c=u.inputs;for(let p=0;p=0;s--){let o=t[s],a=[];if(o.outputs.forEach(l=>{let u=e[l.id];u!=null?a.push(u):a.push(null)}),o.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${o.kernelName}.`);let i=o.gradient(a);for(let l in o.inputs){if(!(l in i))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(i)}.`);let u=n(()=>i[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${o.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let c=o.inputs[l];if(!Ml(u.shape,c.shape))throw new Error(`Error in gradient for op ${o.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(e[c.id]==null)e[c.id]=u;else{let p=e[c.id];e[c.id]=r(p,u),p.dispose()}}}}var $P=20,eb=3,FT=7;function vue(e,t,n,r){let s=lg(t),o=wue(e,t,n,s),a=t.length,i=Vw(e,t,n,s,o),l=["Tensor"];return r&&(l.push(` dtype: ${n}`),l.push(` rank: ${a}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(i.map(u=>" "+u).join(` `)),l.join(` `)}function wue(e,t,n,r){let s=wr(t),o=r[r.length-1],a=new Array(o).fill(0),i=t.length,l=n==="complex64"?nb(e):e;if(i>1)for(let u=0;u$P){let g=eb*a,x=Array.from(e.slice(0,g)),y=Array.from(e.slice((i-eb)*a,i*a));return n==="complex64"&&(x=nb(x),y=nb(y)),["["+x.map((b,A)=>tb(b,s[A],n)).join(", ")+", ..., "+y.map((b,A)=>tb(b,s[i-eb+A],n)).join(", ")+"]"]}let m=n==="complex64"?nb(e):Array.from(e);return["["+m.map((g,x)=>tb(g,s[x],n)).join(", ")+"]"]}let u=t.slice(1),c=r.slice(1),p=r[0]*a,d=[];if(i>$P){for(let m=0;m`Length of values '${r}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||gP(t,this.size),this.strides=lg(e)}set(e,...t){t.length===0&&(t=[0]),H(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let r of e){if(r<0||r>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let n=e[e.length-1];for(let r=0;rBw(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataSync(){this.throwIfDisposed();let e=nl().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Bw(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await nl().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(nl().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return d0.print(this,e)}clone(){return this.throwIfDisposed(),d0.clone(this)}toString(e=!1){let t=this.dataSync();return vue(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),d0.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),nl().makeVariable(this,e,t,n)}};Object.defineProperty(Vt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function ve(){return _T("Tensor",()=>Vt)}ve();var rb=class extends Vt{constructor(e,t,n,r){super(e.shape,e.dtype,e.dataId,r);this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Ml(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);nl().disposeTensor(this),this.dataId=e.dataId,nl().incRef(this,null)}dispose(){nl().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(rb,Symbol.hasInstance,{value:e=>e instanceof Vt&&e.assign!=null&&e.assign instanceof Function});var fi={};Rt(fi,{assertTypesMatch:()=>OP,getTensorsInContainer:()=>BT,isTensorInList:()=>Tue,makeTypesMatch:()=>ur});var OT;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(OT||(OT={}));var PT;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(PT||(PT={}));var MT;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(MT||(MT={}));var zT;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(zT||(zT={}));var LT;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(LT||(LT={}));var Nue={float32:zT,int32:PT,bool:MT,complex64:LT};function $a(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return Nue[e][t]}function Ww(e){return $a(e,"int32")}function ur(e,t){if(e.dtype===t.dtype)return[e,t];let n=$a(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function OP(e,t){H(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function Tue(e,t){return t.some(n=>n.id===e.id)}function BT(e){let t=[],n=new Set;return PP(e,t,n),t}function PP(e,t,n){if(e==null)return;if(e instanceof Vt){t.push(e);return}if(!_ue(e))return;let r=e;for(let s in r){let o=r[s];n.has(o)||(n.add(o),PP(o,t,n))}}function _ue(e){return Array.isArray(e)||typeof e=="object"}function VT(e){return e.kernelName!=null}var MP=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},sb=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new MP}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){zl(e).forEach(n=>{n.disposeFunc!=null&&n.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof $1)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,s=n.then(o=>r(rthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(n),()=>this.endScope(r),()=>(r=t(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(e,t,n){e();try{let r=n();return t(),r}catch(r){throw t(),r}}nextTensorId(){return sb.nextTensorId++}nextVariableId(){return sb.nextVariableId++}clone(e){let t=se.runKernel(sf,{x:e}),n={x:e},r=o=>({x:()=>{let a="float32",i={x:o},l={dtype:a};return se.runKernel(Gd,i,l)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[t],r,s,{}),t}runKernel(e,t,n){if(this.backendName==null&&this.backend,!(Mw(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let r=this.backend.numDataIds(),s=0;n.forEach(i=>{s+=i.dtype==="complex64"?3:1});let o=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],a=r-t-s-o;if(a>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${a} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],r=this.isTapeOn(),s=this.state.numBytes,o=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let a;this.backendName==null&&this.backend;let i,l=VT(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(VT(e)){let{kernelName:f,inputs:h,attrs:m}=e;this.backendName==null&&this.backend;let g=Mw(f,this.backendName);H(g!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),a=()=>{let x=this.backend.numDataIds();i=g.kernelFunc({inputs:h,attrs:m,backend:this.backend});let y=Array.isArray(i)?i:[i];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,x,y);let b=y.map(A=>{if(A.rank!=null)return A;let{dataId:v,shape:w,dtype:k}=A;return this.makeTensorFromDataId(v,w,k)});if(r){let A=this.getTensorsForGradient(f,h,b);n=this.saveTensorsForBackwardMode(A)}return b}}else{let{forwardFunc:f}=e,h=m=>{!r||(n=m.map(g=>this.keep(this.clone(g))))};a=()=>{let m=this.backend.numDataIds();i=this.tidy(()=>f(this.backend,h));let g=Array.isArray(i)?i:[i];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,m,g),g}}let{inputs:u,attrs:c}=e,p=VT(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=a():(d=this.profiler.profileKernel(l,u,()=>a()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),r&&this.addTapeNode(l,u,t,p,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-o,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(f=>u[f]!=null?u[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(i)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(n=>this.keep(this.clone(n)))}getTensorsForGradient(e,t,n){let r=RT(e);if(r!=null){let s=r.inputsToSave||[],o=r.outputsToSave||[],a;r.saveAllInputs?(H(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),a=Object.keys(t).map(l=>t[l])):a=s.map(l=>t[l]);let i=n.filter((l,u)=>o[u]);return a.concat(i)}return[]}makeTensor(e,t,n,r){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let s=e;n==="string"&&Rc(e[0])&&(s=e.map(i=>Q1(i)));let o=r.write(s,t,n),a=new Vt(t,n,o,this.nextTensorId());if(this.trackTensor(a,r),n==="string"){let i=this.state.tensorInfo.get(o),l=bP(s);this.state.numBytes+=l-i.bytes,i.bytes=l}return a}makeTensorFromDataId(e,t,n,r){n=n||"float32";let s=new Vt(t,n,e,this.nextTensorId());return this.trackTensor(s,r),s}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==e.dtype&&(e=e.cast(r));let s=new rb(e,t,n,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*IT(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof rb||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*IT(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(r=>r.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let r of this.state.activeProfile.kernels)r.kernelTimeMs=await r.kernelTimeMs,r.extraInfo=await r.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,r,s,o){let a={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:s},i=RT(e);i!=null&&(r=i.gradFunc),r!=null&&(a.gradient=l=>(l=l.map((u,c)=>{if(u==null){let p=n[c],d=Qv(p.size,p.dtype);return this.makeTensor(d,p.shape,p.dtype)}return u}),r(l.length>1?l:l[0],s,o))),this.state.activeTape.push(a)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=BT(e),n=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===r.id&&this.track(s)})}gradients(e,t,n,r=!1){if(H(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));H(s instanceof Vt,()=>"The result y returned by f() must be a tensor.");let o=bue(this.state.activeTape,t,s);if(!r&&o.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let a={};a[s.id]=n==null?Eue(s.shape):n,Aue(a,o,l=>this.tidy(l),Rue);let i=t.map(l=>a[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:s,grads:i}})}customGrad(e){return H(Dc(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{H(t.every(a=>a instanceof Vt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};t.forEach((a,i)=>{r[i]=a});let s=(a,i)=>(n=e(...t,i),H(n.value instanceof Vt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),H(Dc(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),o=(a,i)=>{let l=n.gradFunc(a,i),u=Array.isArray(l)?l:[l];H(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),H(u.every(p=>p instanceof Vt),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let c={};return u.forEach((p,d)=>{c[d]=()=>p}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:o,inputs:r})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}async time(e){let t=J1(),n=await this.backend.time(e);return n.wallMs=J1()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new MP;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};sb.nextTensorId=0;sb.nextVariableId=0;function Eue(e){let t=CT(wr(e),"float32");return se.makeTensor(t,e,"float32")}function zP(){let e=CP();if(e._tfengine==null){let t=new IP(e);e._tfengine=new sb(t)}return nue(e._tfengine.ENV),Iue(()=>e._tfengine),e._tfengine}var se=zP();function Rue(e,t){let n={a:e,b:t};return se.runKernel($c,n)}var ob={};Rt(ob,{isBrowser:()=>LP,isMobile:()=>$ue});function Due(){return typeof navigator!="undefined"&&navigator!=null}function $ue(e){if(e||Due()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let n=e;return n.userAgentData&&n.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function LP(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var hi=be();hi.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});hi.registerFlag("IS_BROWSER",()=>LP());hi.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");hi.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));hi.registerFlag("PROD",()=>!1);hi.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>hi.getBool("DEBUG"));hi.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);hi.registerFlag("IS_TEST",()=>!1);hi.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);hi.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);function rl(e,t){let n=e;if(Ds(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||Ds(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&be().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&BP(e,r,[]),r}function BP(e,t,n){if(n=n||[],!Array.isArray(e)&&!Ds(e)){H(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}H(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),H(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let r=t.slice(1);for(let s=0;s=0&&(s=r),VP(r,s,t,n),e==null||!Ds(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let l=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${l}'`)}let o=rl(e,s);!Ds(e)&&!Array.isArray(e)&&(e=[e]);let i=s!=="string"?Lw(e,s):zd(e,[],!0);return se.makeTensor(i,o,s)}function ab(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((o,a)=>U(o,`${t}[${a}]`,n,r))}var WP="__op";function ae(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+WP;let s=(...o)=>{se.startScope(n);try{let a=r(...o);return NT(a)&&console.error("Cannot return a Promise inside of tidy."),se.endScope(a),a}catch(a){throw se.endScope(null),a}};return Object.defineProperty(s,"name",{value:n,configurable:!0}),s}function Fue(e,t){let n=U(e,"real","complex"),r=U(t,"imag","complex");zs(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let s={real:n,imag:r};return se.runKernel(rw,s)}var Lc=ae({complex_:Fue});function Bc(e,t,n,r){if(r==null&&(r=Yv(e)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!Ds(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){ST(t);let s=wr(t),o=wr(n);H(s===o,()=>`Based on the provided shape, [${t}], the tensor should have ${s} values but has ${o}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!Ds(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?Lw(e,r):zd(e,[],!0),se.makeTensor(e,t,r)}function ls(e,t,n){let r=rl(e,n);return Bc(e,t,r,n)}var WT={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Gw=4;async function Oue(e,t){let n=[],r=[],s=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);for(let a=0;a{let d=await l.bytes(),f=d.reduce((g,x)=>g+x.length,0)+Gw*d.length,h=new Uint8Array(f),m=0;for(let g=0;g{if(t+=o.byteLength,n.push(o.byteLength===o.buffer.byteLength?o:new o.constructor(o)),!(o instanceof Float32Array||o instanceof Int32Array||o instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${o.constructor.name}`)});let r=new Uint8Array(t),s=0;return n.forEach(o=>{r.set(new Uint8Array(o.buffer),s),s+=o.byteLength}),r.buffer}var GT=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function UP(e){return GT?Buffer.byteLength(e):new Blob([e]).size}function Mue(e){if(GT)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,s=t.length;r{t+=s.byteLength});let n=new Uint8Array(t),r=0;return e.forEach(s=>{n.set(new Uint8Array(s),r),r+=s.byteLength}),n.buffer}function jP(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function HP(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}async function jT(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){let[r,s]=await t(e.weightsManifest);n.weightSpecs=r,n.weightData=s}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),n}function ib(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:UP(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:UP(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function Lue(){let e=n=>{let r=n<<13,s=0;for(;(r&8388608)==0;)s-=8388608,r<<=1;return r&=~8388608,s+=947912704,r|s},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function Bue(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function Vue(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function Wue(){let e=Lue(),t=Bue(),n=Vue();return r=>{let s=new ArrayBuffer(4*r.length),o=new Uint32Array(s);for(let a=0;a>10]+(i&1023)]+t[i>>10];o[a]=l}return new Float32Array(s)}}var gr=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return gr.instance==null&&(gr.instance=new gr),gr.instance}static registerSaveRouter(e){gr.getInstance().saveRouters.push(e)}static registerLoadRouter(e){gr.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return gr.getHandlers(e,"save")}static getLoadHandlers(e,t){return gr.getHandlers(e,"load",t)}static getHandlers(e,t,n){let r=[];return(t==="load"?gr.getInstance().loadRouters:gr.getInstance().saveRouters).forEach(o=>{let a=o(e,n);a!==null&&r.push(a)}),r}},Gue=e=>gr.registerSaveRouter(e),Uue=e=>gr.registerLoadRouter(e),jue=e=>gr.getSaveHandlers(e),Hue=(e,t)=>gr.getLoadHandlers(e,t),HT="tensorflowjs",qT=1,Vf="models_store",Vc="model_info_store";function qP(){if(!be().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function KT(e){let t=e.result;t.createObjectStore(Vf,{keyPath:"modelPath"}),t.createObjectStore(Vc,{keyPath:"modelPath"})}var Wf=class{constructor(e){if(this.indexedDB=qP(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,r)=>{let s=this.indexedDB.open(HT,qT);s.onupgradeneeded=()=>KT(s),s.onsuccess=()=>{let o=s.result;if(t==null){let a=o.transaction(Vf,"readonly"),l=a.objectStore(Vf).get(this.modelPath);l.onsuccess=()=>{if(l.result==null)return o.close(),r(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(l.result.modelArtifacts)},l.onerror=u=>(o.close(),r(l.error)),a.oncomplete=()=>o.close()}else{let a=ib(t),i=o.transaction(Vc,"readwrite"),l=i.objectStore(Vc),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:a}),c;u.onsuccess=()=>{c=o.transaction(Vf,"readwrite");let d=c.objectStore(Vf).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:a});d.onsuccess=()=>n({modelArtifactsInfo:a}),d.onerror=f=>{l=i.objectStore(Vc);let h=l.delete(this.modelPath);h.onsuccess=()=>(o.close(),r(d.error)),h.onerror=m=>(o.close(),r(d.error))}},u.onerror=p=>(o.close(),r(u.error)),i.oncomplete=()=>{c==null?o.close():c.oncomplete=()=>o.close()}}},s.onerror=o=>r(s.error)})}};Wf.URL_SCHEME="indexeddb://";var KP=e=>be().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Wf.URL_SCHEME)?que(e.slice(Wf.URL_SCHEME.length)):null;gr.registerSaveRouter(KP);gr.registerLoadRouter(KP);function que(e){return new Wf(e)}function Kue(e){return e.startsWith(Wf.URL_SCHEME)?e.slice(Wf.URL_SCHEME.length):e}var Xue=class{constructor(){this.indexedDB=qP()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(HT,qT);n.onupgradeneeded=()=>KT(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Vc,"readonly"),a=s.objectStore(Vc).getAll();a.onsuccess=()=>{let i={};for(let l of a.result)i[l.modelPath]=l.modelArtifactsInfo;e(i)},a.onerror=i=>(r.close(),t(a.error)),s.oncomplete=()=>r.close()},n.onerror=r=>t(n.error)})}async removeModel(e){return e=Kue(e),new Promise((t,n)=>{let r=this.indexedDB.open(HT,qT);r.onupgradeneeded=()=>KT(r),r.onsuccess=()=>{let s=r.result,o=s.transaction(Vc,"readwrite"),a=o.objectStore(Vc),i=a.get(e),l;i.onsuccess=()=>{if(i.result==null)return s.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=a.delete(e),c=()=>{l=s.transaction(Vf,"readwrite");let d=l.objectStore(Vf).delete(e);d.onsuccess=()=>t(i.result.modelArtifactsInfo),d.onerror=f=>n(i.error)};u.onsuccess=c,u.onerror=p=>(c(),s.close(),n(i.error))}},i.onerror=u=>(s.close(),n(i.error)),o.oncomplete=()=>{l==null?s.close():l.oncomplete=()=>s.close()}},r.onerror=s=>n(r.error)})}},Ll="/",f0="tensorflowjs_models",XP="info",Zue="model_topology",Yue="weight_specs",Jue="weight_data",Que="model_metadata";function ZP(e){return{info:[f0,e,XP].join(Ll),topology:[f0,e,Zue].join(Ll),weightSpecs:[f0,e,Yue].join(Ll),weightData:[f0,e,Jue].join(Ll),modelMetadata:[f0,e,Que].join(Ll)}}function YP(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function ece(e){let t=e.split(Ll);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Ll)}function tce(e){return e.startsWith(Gf.URL_SCHEME)?e.slice(Gf.URL_SCHEME.length):e}var Gf=class{constructor(e){if(!be().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=ZP(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),r=ib(e);try{this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,Mue(e.weightData));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:r}}catch(s){throw YP(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${r.modelTopologyBytes}, weightSpecsBytes=${r.weightSpecsBytes}, weightDataBytes=${r.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let r=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(r==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=r;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let a=JSON.parse(s);t.format=a.format,t.generatedBy=a.generatedBy,t.convertedBy=a.convertedBy,a.signature!=null&&(t.signature=a.signature),a.userDefinedMetadata!=null&&(t.userDefinedMetadata=a.userDefinedMetadata),a.modelInitializer!=null&&(t.modelInitializer=a.modelInitializer),a.trainingConfig!=null&&(t.trainingConfig=a.trainingConfig)}let o=this.LS.getItem(this.keys.weightData);if(o==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=zue(o),t}};Gf.URL_SCHEME="localstorage://";var JP=e=>be().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Gf.URL_SCHEME)?nce(e.slice(Gf.URL_SCHEME.length)):null;gr.registerSaveRouter(JP);gr.registerLoadRouter(JP);function nce(e){return new Gf(e)}var rce=class{constructor(){H(be().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),H(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=f0+Ll,n=Ll+XP;for(let r=0;r"scheme must not be undefined or null."),e.endsWith(h0)&&(e=e.slice(0,e.indexOf(h0))),H(e.length>0,()=>"scheme must not be an empty string.");let n=pa.getInstance();H(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=this.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}};function Uw(e){if(e.indexOf(h0)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${pa.getSchemes().join(",")}`);return{scheme:e.split(h0)[0],path:e.split(h0)[1]}}async function QP(e,t,n=!1){H(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=gr.getLoadHandlers(e);H(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),H(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let s=r[0],o=gr.getSaveHandlers(t);H(o.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),H(o.length<2,()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`);let a=o[0],i=Uw(e).scheme,l=Uw(e).path,u=i===Uw(e).scheme,c=await s.load();n&&u&&await pa.getManager(i).removeModel(l);let p=await a.save(c);return n&&!u&&await pa.getManager(i).removeModel(l),p.modelArtifactsInfo}async function sce(){let e=pa.getSchemes(),t={};for(let n of e){let r=await pa.getManager(n).listModels();for(let s in r){let o=n+h0+s;t[o]=r[s]}}return t}async function oce(e){let t=Uw(e);return pa.getManager(t.scheme).removeModel(t.path)}async function ace(e,t){return QP(e,t,!1)}async function ice(e,t){return QP(e,t,!0)}var lce=class{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}};if(be().get("IS_BROWSER")){be().setPlatform("browser",new lce);try{pa.registerManager(Gf.URL_SCHEME,new rce)}catch(e){}try{pa.registerManager(Wf.URL_SCHEME,new Xue)}catch(e){}}var uce={importFetch:()=>gle()},XT,cce=class{constructor(){this.util=ig("util"),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return be().global.fetch!=null?be().global.fetch(e,t):(XT==null&&(XT=uce.importFetch()),XT(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};be().get("IS_NODE")&&be().setPlatform("node",new cce);function Wt(e,t="float32",n){return t=t||"float32",ST(e),new Ur(e,t,n)}function pce(e,t){let n=U(e,"x","cast");if(!yP(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let r={x:n},s={dtype:t};return se.runKernel(Gd,r,s)}var Fe=ae({cast_:pce});function dce(e){let n={x:U(e,"x","clone","string_or_numeric")};return se.runKernel(sf,n)}var mi=ae({clone_:dce});function e9(e,t=!1){console.log(e.toString(t))}zP();var fce={buffer:Wt,cast:Fe,clone:mi,print:e9};Cue(fce);var go={};Rt(go,{browserFiles:()=>Ace,browserHTTPRequest:()=>Cce,concatenateArrayBuffers:()=>UT,copyModel:()=>ace,decodeWeights:()=>GP,encodeWeights:()=>Oue,fromMemory:()=>Nce,getLoadHandlers:()=>Hue,getModelArtifactsForJSON:()=>jT,getModelArtifactsInfoForJSON:()=>ib,getSaveHandlers:()=>jue,http:()=>JT,isHTTPScheme:()=>YT,listModels:()=>sce,loadWeights:()=>vce,moveModel:()=>ice,registerLoadRouter:()=>Uue,registerSaveRouter:()=>Gue,removeModel:()=>oce,weightsLoaderFactory:()=>s9,withSaveHandler:()=>Tce});var hce="model",mce=".json",gce=".weights.bin";function t9(e){return new Promise(t=>setTimeout(t)).then(e)}var m0=class{constructor(e){if(!be().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(m0.URL_SCHEME)&&(e=e.slice(m0.URL_SCHEME.length)),(e==null||e.length===0)&&(e=hce),this.modelJsonFileName=e+mce,this.weightDataFileName=e+gce}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],r=HP(e,n),s=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),o=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(o.download=this.modelJsonFileName,o.href=s,await t9(()=>o.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let a=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;a.download=this.weightDataFileName,a.href=t,await t9(()=>a.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:ib(e)}}}};m0.URL_SCHEME="downloads://";var xce=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let n=new FileReader;n.onload=r=>{let s=JSON.parse(r.target.result),o=s.modelTopology;if(o==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:o});return}let i=jT(s,l=>this.loadWeights(l));e(i)},n.onerror=r=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)})}loadWeights(e){let t=[],n=[];for(let o of e)t.push(...o.weights),n.push(...o.paths);let r=this.checkManifestAndWeightFiles(e),s=n.map(o=>this.loadWeightsFile(o,r[o]));return Promise.all(s).then(o=>[t,UT(o)])}loadWeightsFile(e,t){return new Promise((n,r)=>{let s=new FileReader;s.onload=o=>{let a=o.target.result;n(a)},s.onerror=o=>r(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],n=this.weightsFiles.map(s=>jP(s.name)),r={};for(let s of e)s.paths.forEach(o=>{let a=jP(o);if(t.indexOf(a)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${a}'`);if(t.push(a),n.indexOf(a)===-1)throw new Error(`Weight file with basename '${a}' is not provided.`);r[o]=this.weightsFiles[n.indexOf(a)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return r}},yce=e=>be().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(m0.URL_SCHEME)?bce(e.slice(m0.URL_SCHEME.length)):null;gr.registerSaveRouter(yce);function bce(e="model"){return new m0(e)}function Ace(e){return new xce(e)}function n9(e,t,n,r){a(e),n=n==null?0:n,r=r==null?1:r,i(n,r);let s=0,o=l=>(l.then(u=>{let c=n+ ++s/e.length*(r-n);return t(c),u}),l);function a(l){H(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function i(l,u){H(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),H(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),H(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(o))}async function r9(e,t){t==null&&(t={});let n=t.fetchFunc==null?be().platform.fetch:t.fetchFunc,r=e.map(p=>n(p,t.requestInit,{isBinary:!0})),s=0,o=.5,i=(t.onProgress==null?await Promise.all(r):await n9(r,t.onProgress,s,o)).map(p=>p.arrayBuffer()),l=.5,u=1;return t.onProgress==null?await Promise.all(i):await n9(i,t.onProgress,l,u)}async function vce(e,t="",n,r){return s9(a=>r9(a,{requestInit:r}))(e,t,n)}function s9(e){return async(t,n="",r)=>{let s=t.map(()=>!1),o={},a=r!=null?r.map(()=>!1):[],i=[];if(t.forEach((f,h)=>{let m=0;f.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,y=WT[x]*wr(g.shape),b=()=>{s[h]=!0,o[h]==null&&(o[h]=[]),o[h].push({manifestEntry:g,groupOffset:m,sizeBytes:y})};r!=null?r.forEach((A,v)=>{A===g.name&&(b(),a[v]=!0)}):b(),i.push(g.name),m+=y})}),!a.every(f=>f)){let f=r.filter((h,m)=>!a[m]);throw new Error(`Could not find weights in manifest with names: ${f.join(", ")}. Manifest JSON has weights with names: ${i.join(", ")}.`)}let l=s.reduce((f,h,m)=>(h&&f.push(m),f),[]),u=[];l.forEach(f=>{t[f].paths.forEach(h=>{let m=n+(n.endsWith("/")?"":"/")+h;u.push(m)})});let c=await e(u),p={},d=0;return l.forEach(f=>{let h=t[f].paths.length,m=0;for(let A=0;A{let v=g.slice(A.groupOffset,A.groupOffset+A.sizeBytes),w=GP(v,[A.manifestEntry]);for(let k in w)p[k]=w[k]}),d+=h}),p}}var wce="application/octet-stream",kce="application/json",ZT=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(H(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=be().platform.fetch,H(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&H(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r=HP(e,n);t.body.append("model.json",new Blob([JSON.stringify(r)],{type:kce}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:wce}),"model.weights.bin");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:ib(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(s){let o=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?o+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":o+=" Please make sure the server is serving valid JSON for this request.",new Error(o)}let n=t.modelTopology,r=t.weightsManifest;if(n==null&&r==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return jT(t,s=>this.loadWeights(s))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=Ice(t),s=this.weightPathPrefix||n,o=[];for(let u of e)o.push(...u.weights);let a=[],i=[];for(let u of e)for(let c of u.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(c)):a.push(s+c+r);this.weightUrlConverter&&a.push(...await Promise.all(i));let l=await r9(a,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[o,UT(l)]}};ZT.URL_SCHEME_REGEX=/^https?:\/\//;function Ice(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),s=n>t?e.substring(n):"";return[r+"/",s]}function YT(e){return e.match(ZT.URL_SCHEME_REGEX)!=null}var o9=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>YT(r)):n=YT(e),n)return JT(e,t)}return null};gr.registerSaveRouter(o9);gr.registerLoadRouter(o9);function JT(e,t){return new ZT(e,t)}function Cce(e,t){return JT(e,t)}var QT=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},Sce=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function Nce(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new QT(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new QT({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new QT({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function Tce(e){return new Sce(e)}var a9={};Rt(a9,{confusionMatrix:()=>$ce});function _ce(e,t,n=!1,r=!1){let s=U(e,"a","matMul"),o=U(t,"b","matMul");[s,o]=ur(s,o);let a={a:s,b:o},i={transposeA:n,transposeB:r};return se.runKernel(Wd,a,i)}var Lt=ae({matMul_:_ce});function Ece(e,t,n=1,r=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let o={indices:U(e,"indices","oneHot","int32")},a={depth:t,onValue:n,offValue:r};return se.runKernel(gf,o,a)}var g0=ae({oneHot_:Ece});function Rce(e,t){let n=U(e,"x","transpose");if(t==null&&(t=n.shape.map((o,a)=>a).reverse()),H(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(o=>{H(o>=0&&o`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let r={x:n},s={perm:t};return se.runKernel(Of,r,s)}var Kt=ae({transpose_:Rce});function Dce(e,t,n){let r=U(e,"labels","confusionMatrix"),s=U(t,"predictions","confusionMatrix");H(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),H(r.rank===1,()=>`Expected the rank of labels to be 1, but got ${r.rank}`),H(s.rank===1,()=>`Expected the rank of predictions to be 1, but got ${s.rank}`),H(r.shape[0]===s.shape[0],()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${s.shape[0]}. Labels and predictions should have the same number of elements.`),H(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let o=g0(Fe(r,"int32"),n),a=g0(Fe(s,"int32"),n),i=Kt(o),l=Lt(i,a);return Fe(l,"int32")}var $ce=ae({confusionMatrix_:Dce}),Mo={};Rt(Mo,{fromPixels:()=>Bce,fromPixelsAsync:()=>zce,toPixels:()=>Lce});function jw(e,t,n){if(Md(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let r=rl(e,n);if(r.length!==3&&r.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Bc(e,t,r,n)}var x0;function i9(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,r=!1,s=!1,o=!1,a=!1,i=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)r=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)s=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)o=!0;else if(e.getContext!=null)a=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)i=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(s){let h=2;if(s&&e.readyState element.")}if(Mw(Pw,se.backendName)!=null){let h={pixels:e},m={numChannels:t};return se.runKernel(Pw,h,m)}let[u,c]=s?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;a?p=e.getContext("2d").getImageData(0,0,u,c).data:r||n?p=e.data:(o||s||i)&&(x0==null&&(x0=document.createElement("canvas").getContext("2d")),x0.canvas.width=u,x0.canvas.height=c,x0.drawImage(e,0,0,u,c),p=x0.getImageData(0,0,u,c).data);let d;if(t===4)d=new Int32Array(p);else{let h=u*c;d=new Int32Array(h*t);for(let m=0;m4||o===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${o}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let a=await n.data(),i=n.dtype==="float32"?255:1,l=new Uint8ClampedArray(s*r*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${f}.`)}else if(n.dtype==="int32"&&(f<0||f>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${f}.`);o===1?(c[0]=f*i,c[1]=f*i,c[2]=f*i):c[d]=f*i}let p=u*4;l[p+0]=Math.round(c[0]),l[p+1]=Math.round(c[1]),l[p+2]=Math.round(c[2]),l[p+3]=Math.round(c[3])}if(t!=null){t.width=s,t.height=r;let u=t.getContext("2d"),c=new ImageData(l,s,r);u.putImageData(c,0,0)}return n!==e&&n.dispose(),l}var Bce=ae({fromPixels_:i9}),e_={};Rt(e_,{prepareAndValidate:()=>l9});function l9(e,t){let n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(wr(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let s=t.shape,o=s[s.length-1],a=1;for(let p=0;pp/u),1].slice(0,o);return[l,a,u,c]}var t_={};Rt(t_,{calculateShapes:()=>u9,validateInput:()=>r_,validateUpdateShape:()=>n_});function n_(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,s=t.rank>1?t.rank-1:1,o=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${s}.`;if(n.rank1?t.shape[r-1]:1,o=n.length,a=1;for(let p=s;pVce,computeFlatOffset:()=>Gce,computeOutShape:()=>c9,getNormalizedAxes:()=>h9,isSliceContinous:()=>Wce,maskToAxes:()=>Hw,parseSliceParams:()=>A9,sliceInfo:()=>Uce,startForAxis:()=>y9,startIndicesWithElidedDims:()=>m9,stopForAxis:()=>b9,stopIndicesWithElidedDims:()=>g9,stridesForAxis:()=>x9,stridesWithElidedDims:()=>p9});function Vce(e,t,n){let r=e.shape.length;H(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),H(r===n.length,()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`);for(let s=0;s`Error in slice${r}D: begin[${s}] + size[${s}] (${t[s]+n[s]}) would overflow input.shape[${s}] (${e.shape[s]})`)}function Hw(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function c9(e,t,n){let r=[];for(let s=0;s0){let f=t[0],h=n+1;c=m9(a,f,h,r,e),p=g9(i,f,h,s,e),d=p9(o,f,h,e)}else for(let f=0;f-1)o[i]=0;else{let l=d9(t,n,i),u=r[l];e&1<-1)o[i]=Number.MAX_SAFE_INTEGER;else{let l=d9(t,n,i),u=r[l];e&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let l=r[s];return a<0&&(a+=l),a=F1(0,a,l-1),a}function b9(e,t,n,r,s,o){let a=t[s],i=n[s]||1;(e&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let l=r[s];return a<0&&(a+=l),i>0?a=F1(0,a,l):a=F1(-1,a,l-1),a}function Wce(e,t,n){let r=n.length;for(let s=0;s1){r=s;break}for(let s=r+1;s0||n[s]!==e[s])return!1;return!0}function Gce(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r{H(a!==-1,()=>"slice() does not support negative begin indexing.")});let o;return n==null?o=new Array(s).fill(-1):typeof n=="number"?o=[n,...new Array(s-1).fill(-1)]:n.lengtha>=0?a:(H(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),e.shape[i]-r[i])),[r,o]}function Uce(e,t,n,r,s,o,a,i,l){let u=t.slice(),c=n.slice(),p=r;r==null&&(p=new Array(u.length));let d=Hw(a);if(d.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(a!==0&&i!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(a!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=e.length-u.length,h=Hw(i),m=e.slice();h.forEach(k=>{u[k]=0,c[k]=1,m.splice(k,0,1)});let{begin:g,end:x,strides:y}=h9(m,d,f,u,c,p,s,o,a);u=g,c=x,p=y;let b=Hw(l);b.forEach(k=>{c[k]=u[k]+1,p[k]=1});let A=c9(u,c,p),v=A.filter((k,I)=>b.indexOf(I)===-1);return{nonStrided:p.every(k=>k===1),$begin:u,$end:c,$strides:p,size:A,newShape:m,outShape:v}}var De={};Rt(De,{Serializable:()=>v9,SerializationMap:()=>Uf,registerClass:()=>Wc});var v9=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Uf=class{constructor(){this.classNameMap={}}static getMap(){return Uf.instance==null&&(Uf.instance=new Uf),Uf.instance}static register(e){Uf.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Wc(e){H(e.className!=null,()=>"Class being registered does not have the static className property defined."),H(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),H(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Uf.register(e)}var w9={};Rt(w9,{TEST_EPSILON_FLOAT16:()=>k9,encodeStrings:()=>I9,expectArrayBuffersEqual:()=>Yce,expectArraysClose:()=>Hce,expectArraysEqual:()=>Kce,expectNumbersClose:()=>Xce,expectPromiseToFail:()=>qce,expectValuesInRange:()=>Zce,testEpsilon:()=>s_});var jce=.001,k9=.1;function Hce(e,t,n){return n==null&&(n=s_()),o_(e,t,(r,s)=>a_(r,s,n))}function s_(){return se.backend.floatPrecision()===32?jce:k9}function o_(e,t,n){let r=!0;if((Ds(e)||Ds(t))&&(r=!1),Ds(e)&&Ds(t)&&(r=!0),r){let a=e.constructor.name,i=t.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(e)&&Array.isArray(t)){let a=rl(e),i=rl(t);if(!Ml(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let s=Ds(e)?e:zd(e),o=Ds(t)?t:zd(t);if(s.length!==o.length)throw new Error(`Arrays have different lengths actual: ${s.length} vs expected: ${o.length}. Actual: ${s}. Expected: ${o}.`);for(let a=0;at.fail(),()=>t())}function Kce(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Rc(e)||Rc(e[0])||Rc(t)||Rc(t[0])?o_(e,n,(r,s)=>r==s):o_(e,t,(r,s)=>a_(r,s,0))}function Xce(e,t,n){if(n==null&&(n=s_()),!a_(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`)}function a_(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function Zce(e,t,n){for(let r=0;rn)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function Yce(e,t){expect(new Float32Array(e)).toEqual(new Float32Array(t))}function I9(e){for(let t=0;tn.dispose())}function us(e){return se.keep(e)}function npe(e){return se.time(e)}function S9(e){return se.setBackend(e)}function Xw(){return se.ready()}function gi(){return se.backendName}function rpe(e){se.removeBackend(e)}function l_(e){return se.findBackend(e)}function spe(e){return se.findBackendFactory(e)}function y0(e,t,n=1){return se.registerBackend(e,t,n)}function sl(){return se.backend}function ope(e,t){be().setPlatform(e,t)}function ape(e,t){let n=U(e,"a","add"),r=U(t,"b","add");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel($c,s)}var Re=ae({add_:ape});function ipe(e,t){let n=U(e,"a","floorDiv"),r=U(t,"b","floorDiv");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel(tf,s)}var Zw=ae({floorDiv_:ipe});function lpe(e,t){let n=U(e,"a","div"),r=U(t,"b","div");if([n,r]=ur(n,r),n.dtype==="int32"&&r.dtype==="int32")return Zw(n,r);let s={a:n,b:r},o={};return se.runKernel(Yd,s,o)}var Me=ae({div_:lpe});function upe(e,t){let n=U(e,"a","mul"),r=U(t,"b","mul");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel(mf,s)}var te=ae({mul_:upe});function cpe(e){let t=U(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return se.runKernel(z1,n)}else{let n={x:t};return se.runKernel(cg,n)}}var Tr=ae({abs_:cpe});function ppe(e){let n={x:U(e,"x","acos")};return se.runKernel(pg,n)}var u_=ae({acos_:ppe});function dpe(e){let n={x:U(e,"x","acosh")};return se.runKernel(dg,n)}var c_=ae({acosh_:dpe});function fpe(e){H(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),H(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((s,o)=>U(s,`tensors${o}`,"addN")),n=t[0];t.forEach(s=>{if(s.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(s=>{if(!Ml(s.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return se.runKernel(Ld,r)}var Yw=ae({addN_:fpe});function hpe(e,t=null,n=!1){let s={x:U(e,"x","all","bool")},o={axis:t,keepDims:n};return se.runKernel(fg,s,o)}var Jw=ae({all_:hpe});function mpe(e,t=null,n=!1){let s={x:U(e,"x","any","bool")},o={axis:t,keepDims:n};return se.runKernel(hg,s,o)}var lb=ae({any_:mpe});function gpe(e,t=0){let r={x:U(e,"x","argMax")},s={axis:t};return se.runKernel(Bd,r,s)}var xi=ae({argMax_:gpe});function xpe(e,t=0){let r={x:U(e,"x","argMin")},s={axis:t};return se.runKernel(P1,r,s)}var p_=ae({argMin_:xpe});function ype(e){let n={x:U(e,"x","asin")};return se.runKernel(mg,n)}var d_=ae({asin_:ype});function bpe(e){let n={x:U(e,"x","asinh")};return se.runKernel(gg,n)}var f_=ae({asinh_:bpe});function Ape(e){let n={x:U(e,"x","atan")};return se.runKernel(xg,n)}var h_=ae({atan_:Ape});function vpe(e,t){let n=U(e,"a","atan2"),r=U(t,"b","atan2");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel(bg,s)}var m_=ae({atan2_:vpe});function wpe(e){let n={x:U(e,"x","atanh")};return se.runKernel(yg,n)}var g_=ae({atanh_:wpe});function kpe(e,t,n,r,s="NHWC",o){let a=e[3],i=[...t,a],l=_9(s);return ub(e,i,n,o,r,null,null,l)}function N9(e,t,n,r,s,o,a="channelsLast"){let[i,l]=Qw(t),u;if(a==="channelsLast")u=[i,l,e[3],e[3]];else if(a==="channelsFirst")u=[i,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${a}`);return ub(e,u,n,r,s,o,!1,a)}function Ipe(e,t,n,r,s,o,a="NDHWC"){let[i,l,u]=y_(t),c,p;if(a==="NDHWC")p="channelsLast",c=[i,l,u,e[4],e[4]];else if(a==="NCDHW")p="channelsFirst",c=[i,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${a}`);return T9(e,c,n,r,s,!1,p,o)}function ub(e,t,n,r,s,o,a=!1,i="channelsLast"){let[l,u,c,p]=[-1,-1,-1,-1];if(i==="channelsLast")[l,u,c,p]=e;else if(i==="channelsFirst")[l,p,u,c]=e;else throw new Error(`Unknown dataFormat ${i}`);let[d,f,,h]=t,[m,g]=Qw(n),[x,y]=Qw(r),b=b0(d,x),A=b0(f,y),{padInfo:v,outHeight:w,outWidth:k}=Npe(s,u,c,m,g,b,A,o,i),I=a?h*p:h,N;return i==="channelsFirst"?N=[l,I,w,k]:i==="channelsLast"&&(N=[l,w,k,I]),{batchSize:l,dataFormat:i,inHeight:u,inWidth:c,inChannels:p,outHeight:w,outWidth:k,outChannels:I,padInfo:v,strideHeight:m,strideWidth:g,filterHeight:d,filterWidth:f,effectiveFilterHeight:b,effectiveFilterWidth:A,dilationHeight:x,dilationWidth:y,inShape:e,outShape:N,filterShape:t}}function T9(e,t,n,r,s,o=!1,a="channelsLast",i){let[l,u,c,p,d]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[l,u,c,p,d]=e;else if(a==="channelsFirst")[l,d,u,c,p]=e;else throw new Error(`Unknown dataFormat ${a}`);let[f,h,m,,g]=t,[x,y,b]=y_(n),[A,v,w]=y_(r),k=b0(f,A),I=b0(h,v),N=b0(m,w),{padInfo:T,outDepth:_,outHeight:R,outWidth:S}=Tpe(s,u,c,p,x,y,b,k,I,N,i),F=o?g*d:g,B;return a==="channelsFirst"?B=[l,F,_,R,S]:a==="channelsLast"&&(B=[l,_,R,S,F]),{batchSize:l,dataFormat:a,inDepth:u,inHeight:c,inWidth:p,inChannels:d,outDepth:_,outHeight:R,outWidth:S,outChannels:F,padInfo:T,strideDepth:x,strideHeight:y,strideWidth:b,filterDepth:f,filterHeight:h,filterWidth:m,effectiveFilterDepth:k,effectiveFilterHeight:I,effectiveFilterWidth:N,dilationDepth:A,dilationHeight:v,dilationWidth:w,inShape:e,outShape:B,filterShape:t}}function Cpe(e,t,n,r,s){r==null&&(r=x_(e,t,n));let o=e[0],a=e[1],i=jf((o-t+2*r)/n+1,s),l=jf((a-t+2*r)/n+1,s);return[i,l]}function Spe(e,t,n,r,s,o){s==null&&(s=x_(e,t,r));let a=e[0],i=e[1],l=e[2],u=jf((a-t+2*s)/r+1,o),c=jf((i-t+2*s)/r+1,o),p=jf((l-t+2*s)/r+1,o);return[u,c,p,n]}function x_(e,t,n,r=1){let s=b0(t,r);return Math.floor((e[0]*(n-1)-n+s)/2)}function Qw(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function y_(e){return typeof e=="number"?[e,e,e]:e}function b0(e,t){return t<=1?e:e+(e-1)*(t-1)}function Npe(e,t,n,r,s,o,a,i,l){let u,c,p;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let f=Cpe([t,n],o,r,e,i);c=f[0],p=f[1]}else if(e==="same"){c=Math.ceil(t/r),p=Math.ceil(n/s);let d=Math.max(0,(c-1)*r+o-t),f=Math.max(0,(p-1)*s+a-n),h=Math.floor(d/2),m=d-h,g=Math.floor(f/2),x=f-g;u={top:h,bottom:m,left:g,right:x,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((t-o+1)/r),p=Math.ceil((n-a+1)/s);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],f=l==="channelsLast"?e[1][1]:e[2][1],h=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:f,left:h,right:m,type:d===0&&f===0&&h===0&&m===0?"VALID":"EXPLICIT"},c=jf((t-o+d+f)/r+1,i),p=jf((n-a+h+m)/s+1,i)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:c,outWidth:p}}function Tpe(e,t,n,r,s,o,a,i,l,u,c){let p,d,f,h;if(typeof e=="number"){p={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let g=Spe([t,n,r,1],i,1,s,e,c);d=g[0],f=g[1],h=g[2]}else if(e==="same"){d=Math.ceil(t/s),f=Math.ceil(n/o),h=Math.ceil(r/a);let m=(d-1)*s+i-t,g=(f-1)*o+l-n,x=(h-1)*a+u-r,y=Math.floor(m/2),b=m-y,A=Math.floor(g/2),v=g-A,w=Math.floor(x/2),k=x-w;p={top:A,bottom:v,left:w,right:k,front:y,back:b,type:"SAME"}}else if(e==="valid")p={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-i+1)/s),f=Math.ceil((n-l+1)/o),h=Math.ceil((r-u+1)/a);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:p,outDepth:d,outHeight:f,outWidth:h}}function jf(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function Gc(e){let[t,n,r]=Qw(e);return t===1&&n===1&&r===1}function ol(e,t){return Gc(e)||Gc(t)}function _9(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function _pe(e,t){let r={x:U(e,"x","reshape","string_or_numeric")},s={shape:t};return se.runKernel(Xg,r,s)}var ie=ae({reshape_:_pe});function Epe(e,t,n,r,s){let o=U(e,"x","avgPool","float32"),a=1;H(ol(n,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`);let i=o,l=!1;o.rank===3&&(l=!0,i=ie(o,[1,o.shape[0],o.shape[1],o.shape[2]])),H(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),s!=null&&H(as(r),()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=se.runKernel(Vd,u,c);return p=Fe(p,o.dtype),l?ie(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var cb=ae({avgPool_:Epe});function Rpe(e,t,n,r,s,o="NDHWC"){let a=U(e,"x","avgPool3d","float32"),i=a,l=!1;a.rank===4&&(l=!0,i=ie(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),H(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),H(o==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${o}`),s!=null&&H(as(r),()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:o},p=se.runKernel(M1,u,c);return p=Fe(p,i.dtype),l?ie(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var b_=ae({avgPool3d_:Rpe});function Dpe(e,t=0){H(e.length>=1,()=>"Pass at least one tensor to concat");let n=ab(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(o=>{if(o.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${o.dtype}. `)}),n.length===1)return mi(n[0]);let r=n,s={axis:t};return se.runKernel(vg,r,s)}var En=ae({concat_:Dpe});function $pe(e){let n={x:U(e,"x","sigmoid")};return se.runKernel(Nf,n)}var xo=ae({sigmoid_:$pe});function Fpe(e,t,n){let r=U(e,"x","slice","string_or_numeric");if(r.rank===0)throw new Error("Slicing scalar is not possible");let s={x:r},o={begin:t,size:n};return se.runKernel(Qg,s,o)}var gt=ae({slice_:Fpe});function Ope(e){let n={x:U(e,"x","tanh")};return se.runKernel(Ff,n)}var Hf=ae({tanh_:Ope});function Ppe(e,t,n,r,s,o){let a=U(e,"forgetBias","basicLSTMCell"),i=U(t,"lstmKernel","basicLSTMCell"),l=U(n,"lstmBias","basicLSTMCell"),u=U(r,"data","basicLSTMCell"),c=U(s,"c","basicLSTMCell"),p=U(o,"h","basicLSTMCell"),d=En([u,p],1),f=Lt(d,i),h=Re(f,l),m=h.shape[0],g=h.shape[1]/4,x=[m,g],y=gt(h,[0,0],x),b=gt(h,[0,g],x),A=gt(h,[0,g*2],x),v=gt(h,[0,g*3],x),w=Re(te(xo(y),Hf(b)),te(c,xo(Re(a,A)))),k=te(Hf(w),xo(v));return[w,k]}var Mpe=ae({basicLSTMCell_:Ppe});function zpe(e,t,n){let r=U(e,"x","batchToSpaceND"),s=t.reduce((i,l)=>i*l);H(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),H(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),H(r.shape[0]%s==0,()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${s}`);let o={x:r},a={blockShape:t,crops:n};return se.runKernel(Ag,o,a)}var pb=ae({batchToSpaceND_:zpe});function Lpe(e){let t;return e.rank===0||e.rank===1?t=ie(e,[1,1,1,e.size]):e.rank===2?t=ie(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=ie(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function Bpe(e,t,n,r,s,o){o==null&&(o=.001);let a=U(e,"x","batchNorm"),i=U(t,"mean","batchNorm"),l=U(n,"variance","batchNorm"),u;s!=null&&(u=U(s,"scale","batchNorm"));let c;r!=null&&(c=U(r,"offset","batchNorm")),H(i.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),H(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),H(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:Lpe(a),scale:u,offset:c,mean:i,variance:l},f={varianceEpsilon:o},h=se.runKernel(nf,d,f);return ie(h,a.shape)}var qf=ae({batchNorm_:Bpe});function Vpe(e,t,n,r,s,o){let a=U(e,"x","batchNorm"),i=U(t,"mean","batchNorm"),l=U(n,"variance","batchNorm"),u;s!=null&&(u=U(s,"scale","batchNorm"));let c;return r!=null&&(c=U(r,"offset","batchNorm")),H(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),H(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),H(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&H(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&H(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),qf(a,i,l,c,u,o)}var E9=ae({batchNorm2d_:Vpe});function Wpe(e,t,n,r,s,o){let a=U(e,"x","batchNorm"),i=U(t,"mean","batchNorm"),l=U(n,"variance","batchNorm"),u;s!=null&&(u=U(s,"scale","batchNorm"));let c;return r!=null&&(c=U(r,"offset","batchNorm")),H(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),H(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),H(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&H(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&H(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),qf(a,i,l,c,u,o)}var R9=ae({batchNorm3d_:Wpe});function Gpe(e,t,n,r,s,o){let a=U(e,"x","batchNorm"),i=U(t,"mean","batchNorm"),l=U(n,"variance","batchNorm"),u;s!=null&&(u=U(s,"scale","batchNorm"));let c;return r!=null&&(c=U(r,"offset","batchNorm")),H(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),H(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),H(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&H(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&H(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),qf(a,i,l,c,u,o)}var D9=ae({batchNorm4d_:Gpe});function Upe(e,t,n){let r=U(e,"x","bincount"),s=U(t,"weights","bincount");H(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),H(n>=0,()=>`size must be non-negative, but got ${n}.`),H(s.size===r.size||s.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${s.shape}.`);let o={x:r,weights:s},a={size:n};return se.runKernel(nw,o,a)}var A_=ae({bincount_:Upe});function jpe(e,t){let n=U(e,"s0","broadcastArgs","int32"),r=U(t,"s1","broadcastArgs","int32");if(n.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${n.rank}`);if(r.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${r.rank}`);let s={s0:n,s1:r};return se.runKernel(ET,s)}var $9=ae({broadcastArgs_:jpe});function Hpe(e,t){let n=U(e,"broadcastTo","x"),r=n.shape;if(t.some(u=>!(u>0)||u%1!=0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.lengthn.rank){let u=n.shape.slice();for(;u.length=0;u--)if(s[u]===t[u])o[u]=1;else if(n.shape[u]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(o.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return mi(n);let i={x:n},l={reps:o};return se.runKernel(Oc,i,l)}var A0=ae({broadcastTo_:Hpe});function qpe(e){let n={x:U(e,"x","ceil")};return se.runKernel(Ud,n)}var v_=ae({ceil_:qpe});function Kpe(e,t,n){let r=U(e,"x","clipByValue");H(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let s={x:r},o={clipValueMin:t,clipValueMax:n};return se.runKernel(Fc,s,o)}var yo=ae({clipByValue_:Kpe});function Xpe(e){return En(e,0)}var F9=ae({concat1d_:Xpe});function Zpe(e,t){return En(e,t)}var v0=ae({concat2d_:Zpe});function Ype(e,t){return En(e,t)}var O9=ae({concat3d_:Ype});function Jpe(e,t){return En(e,t)}var P9=ae({concat4d_:Jpe});function Qpe(e,t,n,r,s="NHWC",o=[1,1],a){let i=U(e,"x","conv2d"),l=U(t,"filter","conv2d"),u=i,c=!1;i.rank===3&&(c=!0,u=ie(i,[1,i.shape[0],i.shape[1],i.shape[2]])),H(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),H(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),a!=null&&H(as(r),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let p=s==="NHWC"?u.shape[3]:u.shape[1];H(p===l.shape[2],()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${l.shape[2]}.`),H(ol(n,o),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`);let d={x:u,filter:l},f={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a},h=se.runKernel(jd,d,f);return c?ie(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Bl=ae({conv2d_:Qpe});function ede(e,t,n,r,s="NWC",o=1,a){let i=U(e,"x","conv1d"),l=U(t,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=ie(i,[1,i.shape[0],i.shape[1]])),H(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),H(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),a!=null&&H(as(r),()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`),H(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),H(ol(n,o),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${o}'`),H(s==="NWC",()=>`Error in conv1d: got dataFormat of ${s} but only NWC is currently supported.`);let p=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=ie(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=Bl(d,p,[1,n],r,"NHWC",[1,o],a);return c?ie(g,[g.shape[2],g.shape[3]]):ie(g,[g.shape[0],g.shape[2],g.shape[3]])}var ek=ae({conv1d_:ede});function tde(e,t,n,r,s,o="NHWC",a){H(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let i=e,l=t,u=!1;t.rank===3&&(u=!0,l=ie(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,e[0],e[1],e[2]]),H(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),H(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),H(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let c=o==="NHWC"?i[3]:i[1],p=o==="NHWC"?l.shape[3]:l.shape[1];H(c===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${n.shape[2]}.`),H(p===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${n.shape[3]}.`),a!=null&&H(as(s),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`);let d={dy:l,filter:n},f={strides:r,pad:s,dataFormat:o,dimRoundingMode:a,inputShape:i},h=se.runKernel(Hd,d,f);return u?ie(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var w_=ae({conv2DBackpropInput_:tde});function nde(e,t,n,r,s,o){let a=U(e,"x","conv2dTranspose"),i=U(t,"filter","conv2dTranspose");return w_(n,a,i,r,s,"NHWC",o)}var tk=ae({conv2dTranspose_:nde});function rde(e,t,n,r,s="NDHWC",o=[1,1,1]){let a=U(e,"x","conv3d"),i=U(t,"filter","conv3d"),l=a,u=!1;a.rank===4&&(u=!0,l=ie(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),H(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),H(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),H(l.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${i.shape[3]}.`),H(ol(n,o),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),H(s==="NDHWC",()=>`Error in conv3d: got dataFormat of ${s} but only NDHWC is currently supported.`);let c={x:l,filter:i},p={strides:n,pad:r,dataFormat:s,dilations:o},d=se.runKernel(L1,c,p);return u?ie(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var k_=ae({conv3d_:rde});function sde(e,t,n,r,s){H(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,a=t,i=!1;t.rank===4&&(i=!0,a=ie(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),o=[1,e[0],e[1],e[2],e[3]]);let l=o[4],u=a.shape[4];H(o.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${o.length}.`),H(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),H(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),H(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),H(u===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`);let c={dy:a,filter:n},p={pad:s,strides:r,inputShape:o},d=se.runKernel(aw,c,p);return i?ie(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var M9=ae({conv3DBackpropInput_:sde});function ode(e,t,n,r,s){let o=U(e,"x","conv3dTranspose"),a=U(t,"filter","conv3dTranspose");return M9(n,o,a,r,s)}var z9=ae({conv3dTranspose_:ode});function ade(e){let n={x:U(e,"x","cos")};return se.runKernel(qd,n)}var db=ae({cos_:ade});function ide(e){let n={x:U(e,"x","cosh")};return se.runKernel(Kd,n)}var nk=ae({cosh_:ide});function lde(e,t=0,n=!1,r=!1){let o={x:U(e,"x","cumsum")},a={axis:t,exclusive:n,reverse:r};return se.runKernel(Xd,o,a)}var rk=ae({cumsum_:lde});function ude(e,t,n,r=!1){let s=U(e,"x","denseBincount"),o=U(t,"weights","denseBincount");H(s.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${s.dtype}`),H(s.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${s.rank}.`),H(n>=0,()=>`size must be non-negative, but got ${n}.`),H(o.size===s.size||o.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${s.shape}, weights shape: ${o.shape}.`);let a={x:s,weights:o},i={size:n,binaryOutput:r};return se.runKernel(iw,a,i)}var L9=ae({denseBincount_:ude});function cde(e,t,n="NHWC"){let r=U(e,"x","depthToSpace"),s=n==="NHWC"?r.shape[1]:r.shape[2],o=n==="NHWC"?r.shape[2]:r.shape[3],a=n==="NHWC"?r.shape[3]:r.shape[1];H(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape ${r.shape}`),H(o*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${o} and ${t} for depthToSpace with input shape ${r.shape}`),H(a%(t*t)==0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${r.shape}`);let i={x:r},l={blockSize:t,dataFormat:n};return se.runKernel(kg,i,l)}var I_=ae({depthToSpace_:cde});function pde(e,t,n,r,s="NHWC",o=[1,1],a){let i=U(e,"x","depthwiseConv2d"),l=U(t,"filter","depthwiseConv2d"),u=i,c=!1;i.rank===3&&(c=!0,u=ie(i,[1,i.shape[0],i.shape[1],i.shape[2]])),H(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),H(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),H(u.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),a!=null&&H(as(r),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let p={x:u,filter:l},d={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a},f=se.runKernel(Zd,p,d);return c?ie(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var w0=ae({depthwiseConv2d_:pde});function dde(e){let n={x:U(e,"x","diag")};return se.runKernel(cw,n)}var fde=ae({diag_:dde});function hde(e,t,n,r,s=[1,1],o="NHWC"){let a=U(e,"x","dilation2d"),i=U(t,"filter","dilation2d");H(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),H(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),H(o==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${o}`);let l=a,u=!1;a.rank===3&&(l=ie(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:l,filter:i},p={strides:n,pad:r,dilations:s},d=se.runKernel(B1,c,p);return u?ie(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var C_=ae({dilation2d_:hde});function mde(e,t){let n=e.length,r=[];for(let s=0;s1&&a===1&&r.unshift(o)}return r}function jr(e,t){let n=[];for(let r=0;r1)&&n.unshift(o)}return n}function Wn(e,t){let n=[],r=Math.max(e.length,t.length);for(let s=0;s`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);let s=n.rank===1?n.size:n.shape[1],o=r.rank===1?r.size:r.shape[0];if(H(s===o,()=>`Error in dot: inner dimensions of inputs must match, but got ${s} and ${o}.`),n.rank===1&&r.rank===1){let a=ie(n,[1,-1]),i=ie(r,[-1,1]),l=Lt(a,i);return ie(l,[])}else if(n.rank===1&&r.rank===2){let a=ie(n,[1,-1]),i=ie(r,[r.shape[0],r.shape[1]]),l=Lt(a,i);return ie(l,[l.size])}else if(n.rank===2&&r.rank===1){let a=ie(r,[-1,1]),i=Lt(n,a);return ie(i,[i.size])}else{let a=ie(r,[r.shape[0],r.shape[1]]);return Lt(n,a)}}var B9=ae({dot_:Ade});function vde(e,...t){let n=t.map((s,o)=>U(s,`tensors${o}`,"einsum")),r={equation:e};return se.runKernel(fw,n,r)}var V9=ae({einsum_:vde});function wde(e){let n={x:U(e,"x","elu")};return se.runKernel(Jd,n)}var k0=ae({elu_:wde});function kde(e){let t=U(e,"x","erf");H(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=Fe(t,"float32"));let n={x:t};return se.runKernel(Ig,n)}var N_=ae({erf_:kde});function Ide(e){let n={x:U(e,"x","exp")};return se.runKernel(Qd,n)}var Bo=ae({exp_:Ide});function Cde(e,t=0){let n=U(e,"x","expandDims","string_or_numeric");H(t<=n.rank,()=>"Axis must be <= rank of the tensor");let r={input:n},s={dim:t};return se.runKernel(Sg,r,s)}var kr=ae({expandDims_:Cde});function Sde(e){let n={x:U(e,"x","expm1")};return se.runKernel(Ng,n)}var T_=ae({expm1_:Sde});function Nde(e,t){let n=U(e,"x","tile","string_or_numeric");H(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let r={x:n},s={reps:t};return se.runKernel(Oc,r,s)}var da=ae({tile_:Nde});function Tde(e,t,n,r="float32"){t==null&&(t=e);let s=Wt([e,t],r),o=e<=t?e:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got rank ${o.rank}.`),H(as(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let a=o,i=!1;o.rank===3&&(i=!0,a=ie(o,[1,o.shape[0],o.shape[1],o.shape[2]]));let l={x:a},u={depthRadius:t,bias:n,alpha:r,beta:s},c=se.runKernel(U1,l,u);return i?ie(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var R_=ae({localResponseNormalization_:Bde});function Vde(e){let n={x:U(e,"x","log")};return se.runKernel(af,n)}var Vo=ae({log_:Vde});function Wde(e){let n={x:U(e,"x","log1p")};return se.runKernel(Mg,n)}var hb=ae({log1p_:Wde});function Gde(e){return H(Dc(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let r=U(t,"x","tf.grad","string_or_numeric"),s=n!=null?U(n,"dy","tf.grad"):null;return se.tidy(()=>{let{value:o,grads:a}=se.gradients(()=>e(r),[r],s);return s!=null&&zs(o.shape,s.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),ak(a),a[0]})}}function Ude(e){return H(Dc(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{H(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let r=ab(t,"args","tf.grads","string_or_numeric"),s=n!=null?U(n,"dy","tf.grads"):null;return se.tidy(()=>{let{value:o,grads:a}=se.gradients(()=>e(...r),r,s);return s!=null&&zs(o.shape,s.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ak(a),a})}}function jde(e){return H(Dc(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{H(t instanceof Vt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),H(n==null||n instanceof Vt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:r,value:s}=se.gradients(()=>e(t),[t],n);return ak(r),{grad:r[0],value:s}}}function Hde(e){return H(Dc(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{H(Array.isArray(t)&&t.every(s=>s instanceof Vt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),H(n==null||n instanceof Vt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let r=se.gradients(()=>e(...t),t,n);return n!=null&&zs(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ak(r.grads),r}}function j9(e,t){H(Dc(e),()=>"The f passed in variableGrads(f) must be a function"),H(t==null||Array.isArray(t)&&t.every(u=>u instanceof rb),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in se.registeredVariables)t.push(se.registeredVariables[u])}let r=n?t.filter(u=>!u.trainable):null,s=t.length;t=t.filter(u=>u.trainable),H(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${s} variables is trainable.`);let o=!0,{value:a,grads:i}=se.gradients(e,t,null,o);H(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),H(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let l={};return t.forEach((u,c)=>{i[c]!=null&&(l[u.name]=i[c])}),r!=null&&r.forEach(u=>l[u.name]=null),{value:a,grads:l}}function al(e){return se.customGrad(e)}function ak(e){if(e.filter(n=>n==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.`)}function qde(e){let n={x:U(e,"x","neg")};return se.runKernel(Bg,n)}var er=ae({neg_:qde});function Kde(e){let n={x:U(e,"x","softplus")};return se.runKernel(n0,n)}var Xf=ae({softplus_:Kde});function Xde(e){let t=U(e,"x","logSigmoid");return al(r=>({value:er(Xf(er(r))),gradFunc:a=>te(a,xo(er(r)))}))(t)}var H9=ae({logSigmoid_:Xde});function Zde(e,t=null,n=!1){let s={x:U(e,"x","max")},o={reductionIndices:t,keepDims:n};return se.runKernel(lf,s,o)}var Wo=ae({max_:Zde});function Yde(e,t){let n=U(e,"a","sub"),r=U(t,"b","sub");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel(Df,s)}var Ge=ae({sub_:Yde});function Jde(e,t=null,n=!1){let r=U(e,"x","sum");r.dtype==="bool"&&(r=Fe(r,"int32"));let s={x:r},o={axis:t,keepDims:n};return se.runKernel(_f,s,o)}var Je=ae({sum_:Jde});function Qde(e,t=-1){let n=U(e,"logits","logSoftmax");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return al((s,o)=>{let a=!0,i=Wo(s,t,!0),l=Ge(s,i),u=Ge(Fe(l,"float32"),Vo(Je(Bo(l),t,a)));return o([u]),{value:u,gradFunc:(p,d)=>{let[f]=d,h=!0,m=Bo(f);return Ge(p,te(Je(p,t,h),m))}}})(n)}var ik=ae({logSoftmax_:Qde});function D_(e,t){for(let n=0;ne[o]);return[n,s]}function Zf(e,t){let n=t.map(r=>1);return q9(e,n,t)}function efe(e,t,n){H(D_(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function X9(e,t){if(D_(e,t))return null;let n=[];for(let r=0;rn.push(r)),n}function $_(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function tfe(e,t){let n=[];for(let r=t-e;r`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),H(ol(n,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),s!=null&&H(as(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=se.runKernel(cf,u,c);return l?ie(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var gb=ae({maxPool_:ife});function lfe(e,t=[1,1,1],n,r,s,o="NDHWC"){let a=U(e,"x","maxPool3d"),i=a,l=!1;a.rank===4&&(l=!0,i=ie(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),H(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),H(o==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${o}`),s!=null&&H(as(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:o},p=se.runKernel(j1,u,c);return l?ie(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var O_=ae({maxPool3d_:lfe});function ufe(e,t,n,r,s=!1){let a={x:U(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:s},l=se.runKernel(ww,a,i);return{result:l[0],indexes:l[1]}}var Y9=ae({maxPoolWithArgmax_:ufe});function cfe(e,t){let n=U(e,"a","maximum"),r=U(t,"b","maximum");[n,r]=ur(n,r),n.dtype==="bool"&&(n=Fe(n,"int32"),r=Fe(r,"int32")),Wn(n.shape,r.shape);let s={a:n,b:r};return se.runKernel(uf,s)}var il=ae({maximum_:cfe});function pfe(e,t=null,n=!1){let s={x:U(e,"x","mean")},o={axis:t,keepDims:n};return se.runKernel(pf,s,o)}var cr=ae({mean_:pfe});function xr(e,t="float32"){if(t==="complex64"){let r=xr(e,"float32"),s=xr(e,"float32");return Lc(r,s)}let n=Qv(wr(e),t);return se.makeTensor(n,e,t)}function Go(e,t="float32"){if(t==="complex64"){let r=Go(e,"float32"),s=xr(e,"float32");return Lc(r,s)}let n=CT(wr(e),t);return se.makeTensor(n,e,t)}function dfe(e,t,{indexing:n="xy"}={}){if(n!=="xy"&&n!=="ij")throw new TypeError(`${n} is not a valid third argument to meshgrid`);if(e===void 0)return[];let r=U(e,"x","meshgrid",e instanceof Vt?e.dtype:"float32");if(t===void 0)return[r];let s=U(t,"y","meshgrid",t instanceof Vt?t.dtype:"float32"),o=wr(r.shape),a=wr(s.shape);return n==="xy"?(r=ie(r,[1,-1]),s=ie(s,[-1,1]),[Lt(Go([a,1],r.dtype),r),Lt(s,Go([1,o],s.dtype))]):(r=ie(r,[-1,1]),s=ie(s,[1,-1]),[Lt(r,Go([1,a],r.dtype)),Lt(Go([o,1],s.dtype),s)])}function ffe(e,t=null,n=!1){let s={x:U(e,"x","min")},o={axis:t,keepDims:n};return se.runKernel(df,s,o)}var xb=ae({min_:ffe});function hfe(e,t){let n=U(e,"a","minimum"),r=U(t,"b","minimum");[n,r]=ur(n,r),n.dtype==="bool"&&(n=Fe(n,"int32"),r=Fe(r,"int32")),Wn(n.shape,r.shape);let s={a:n,b:r};return se.runKernel(ff,s)}var S0=ae({minimum_:hfe});function mfe(e,t,n){H(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let r=U(e,"x","mirrorPad");if(r.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");H(t.length===r.rank,()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`);let s=n==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),H(t[i][0]>=0&&t[i][0]<=r.shape[i]-s&&t[i][1]>=0&&t[i][1]<=r.shape[i]-s,()=>`Padding in dimension ${i} cannot be greater than or equal to ${r.shape[i]-s} or less than 0 for input of shape ${r.shape}`);let o={paddings:t,mode:n},a={x:r};return se.runKernel(hf,a,o)}var P_=ae({mirrorPad_:mfe});function gfe(e,t){let n=U(e,"a","mod"),r=U(t,"b","mod");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel(Lg,s)}var M_=ae({mod_:gfe});function xfe(e){let t=U(e,"x","square"),n={};return se.runKernel("Square",{x:t},n)}var Tn=ae({square_:xfe});function yfe(e,t=null,n=!1){e=U(e,"x","moments");let r=Ra(t,e.shape),s=cr(e,r,n),o=s.shape;n||(o=Zf(s.shape,r));let a=Tn(Ge(Fe(e,"float32"),ie(s,o))),i=cr(a,r,n);return{mean:s,variance:i}}var uk=ae({moments_:yfe});function bfe(e,t,n,r){let s=U(t,"data","multiRNNCell"),o=ab(n,"c","multiRNNCell"),a=ab(r,"h","multiRNNCell"),i=s,l=[];for(let p=0;p2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);n=n||Math.random();let l={logits:a===1?ie(s,[1,-1]):s},u={numSamples:t,seed:n,normalized:r},c=se.runKernel(kw,l,u);return a===1?ie(c,[c.size]):c}var J9=ae({multinomial_:vfe});function wfe(e,t){let n=U(e,"a","notEqual","string_or_numeric"),r=U(t,"b","notEqual","string_or_numeric");[n,r]=ur(n,r),Wn(n.shape,r.shape);let s={a:n,b:r};return se.runKernel(Vg,s)}var Yf=ae({notEqual_:wfe});function kfe(e){let n={x:U(e,"x","onesLike")};return se.runKernel(jg,n)}var Uo=ae({onesLike_:kfe});function Ife(e,t){let n=U(e,"v1","outerProduct"),r=U(t,"v2","outerProduct");H(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);let s=ie(n,[-1,1]),o=ie(r,[1,-1]);return Lt(s,o)}var Cfe=ae({outerProduct_:Ife});function Sfe(e,t,n=0){let r=U(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let s={paddings:t,constantValue:n},o={x:r};return se.runKernel(xf,o,s)}var Vl=ae({pad_:Sfe});function Nfe(e,t,n=0){return H(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),Vl(e,[t],n)}var Tfe=ae({pad1d_:Nfe});function _fe(e,t,n=0){return H(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Vl(e,t,n)}var Efe=ae({pad2d_:_fe});function Rfe(e,t,n=0){return H(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Vl(e,t,n)}var Dfe=ae({pad3d_:Rfe});function $fe(e,t,n=0){return H(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Vl(e,t,n)}var Ffe=ae({pad4d_:$fe});function Ofe(e,t,n){let r=U(e,"x","spaceToBatchND");H(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),H(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),H(r.shape.reduce((a,i,l)=>l>0&&l<=t.length?a&&(i+n[l-1][0]+n[l-1][1])%t[l-1]==0:a,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let s={x:r},o={blockShape:t,paddings:n};return se.runKernel(r0,s,o)}var yb=ae({spaceToBatchND_:Ofe});function Pfe(e,t,n,r,s,o){s==null&&(s=[1,1]),o==null&&(o=1),r===0&&(r="valid");let a=U(e,"x","maxPool"),i=a,l=!1;a.rank===3&&(l=!0,i=ie(a,[1,a.shape[0],a.shape[1],a.shape[2]])),H(ol(o,s),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${o} and dilations '${s}'`);let u=N9(i.shape,t,o,s,r),c=[u.dilationHeight,u.dilationWidth],p;r==="same"?p=zfe([u.filterHeight,u.filterWidth],c):p=[[0,0],[0,0]];let d=c[0]===1&&c[1]===1,[f,h]=Mfe([u.inHeight,u.inWidth],c,p),m=d?r:"valid",g=d?i:yb(i,c,f),y=(n==="avg"?()=>cb(g,t,o,m):()=>gb(g,t,o,m))(),b=d?y:pb(y,c,h);return l?ie(b,[b.shape[1],b.shape[2],b.shape[3]]):b}function Mfe(e,t,n){let r=n.map(c=>c[0]),s=n.map(c=>c[1]),o=e.concat(r,s),a=t.map((c,p)=>(c-o[p]%c)%c),i=s.map((c,p)=>c+a[p]),l=t.map((c,p)=>[r[p],i[p]]),u=t.map((c,p)=>[0,a[p]]);return[l,u]}function zfe(e,t){let r=e.map((a,i)=>a+(a-1)*(t[i]-1)).map(a=>a-1),s=r.map(a=>Math.floor(a/2)),o=r.map((a,i)=>a-s[i]);return r.map((a,i)=>[s[i],o[i]])}var Q9=ae({pool_:Pfe});function Lfe(e,t){let n=U(e,"base","pow"),r=U(t,"exp","pow");[n,r]=ur(n,r);let s={a:n,b:r};return se.runKernel(yf,s)}var Wl=ae({pow_:Lfe});function Bfe(e,t){let n=U(e,"x","prelu"),r=U(t,"alpha","prelu"),s={x:n,alpha:r};return se.runKernel(bf,s)}var bb=ae({prelu_:Bfe});function Vfe(e,t=null,n=!1){let r=U(e,"x","prod");r.dtype==="bool"&&(r=Fe(r,"int32"));let s={x:r},o={axis:t,keepDims:n};return se.runKernel(qg,s,o)}var ck=ae({prod_:Vfe});function Wfe(e,t,n){let r=wr(e),s=null;if(n==null||n==="float32")s=new Float32Array(r);else if(n==="int32")s=new Int32Array(r);else if(n==="bool")s=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let o=0;o=1||o===0);let a=Math.sqrt(-2*Math.log(o)/o);e=this.mean+this.stdDev*r*a,t=this.mean+this.stdDev*s*a,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},Ufe=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let s=r||Math.random();this.randu=z_.alea(s.toString()),this.randn=new L_(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,s,o;for(;;){do r=this.randn.nextValue(),o=1+this.c*r;while(o<=0);if(o*=o*o,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-o+Math.log(o)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,r==null&&(r=Math.random()),typeof r=="number"&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=z_.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Hfe(e,t,n=1,r="float32",s){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);let o=new Ufe(t,n,r,s),a=Wt(e,r);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),jo(t,0)}var nhe=ae({reverse1d_:the});function rhe(e,t){let n=U(e,"x","reverse");return H(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),jo(n,t)}var she=ae({reverse2d_:rhe});function ohe(e,t){let n=U(e,"x","reverse");return H(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),jo(n,t)}var ahe=ae({reverse3d_:ohe});function ihe(e,t){let n=U(e,"x","reverse");return H(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),jo(n,t)}var lhe=ae({reverse4d_:ihe});function uhe(e){let n={x:U(e,"x","round")};return se.runKernel(If,n)}var dk=ae({round_:uhe});function che(e){let n={x:U(e,"x","rsqrt")};return se.runKernel(Cf,n)}var fk=ae({rsqrt_:che});function at(e,t){if((Ds(e)&&t!=="string"||Array.isArray(e))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&Ds(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Bc(e,[],[],t)}function phe(e){let n={x:U(e,"x","selu")};return se.runKernel(Jg,n)}var hk=ae({selu_:phe});function dhe(e,t,n,r,s,o=[1,1],a="NHWC"){let i=U(e,"x","separableConv2d"),l=U(t,"depthwiseFilter","separableConv2d"),u=U(n,"pointwiseFilter","separableConv2d"),c=i,p=!1;if(i.rank===3&&(p=!0,c=ie(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");H(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),H(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),H(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),H(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),H(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=l.shape[2],f=l.shape[3];H(u.shape[2]===d*f,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*f}, but got ${u.shape[2]}.`);let h=w0(c,l,r,s,a,o),g=Bl(h,u,1,"valid",a);return p?ie(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var V_=ae({separableConv2d_:dhe});async function fhe(e,t){let n=U(e,"x","setdiff1d"),r=U(t,"y","setdiff1d");H(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),H(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),H(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);let s=await n.data(),o=await r.data(),a=new Set(o),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),gt(r,[t],[n])}var xk=ae({slice1d_:xhe});function yhe(e,t,n){let r=U(e,"x","slice2d");return H(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),gt(r,t,n)}var G_=ae({slice2d_:yhe});function bhe(e,t,n){let r=U(e,"x","slice3d");return H(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),gt(r,t,n)}var yk=ae({slice3d_:bhe});function Ahe(e,t,n){let r=U(e,"x","slice4d");return H(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),gt(r,t,n)}var vb=ae({slice4d_:Ahe});function vhe(e,t=-1){let n=U(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let r={logits:n},s={dim:t};return se.runKernel(Ef,r,s)}var Jf=ae({softmax_:vhe});function whe(e){H(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return se.runKernel(mw,t)}var wb=ae({fft_:whe});function khe(e){H(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return se.runKernel(gw,t)}var _0=ae({ifft_:khe});function Ihe(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let s=ie(e,[n,t]);r=_0(s)}else{let s=[n,2*(t-1)],o=ie(Ab(e),[n,t]),a=ie(sk(e),[n,t]),i=jo(gt(o,[0,1],[n,t-2]),1),l=te(jo(gt(a,[0,1],[n,t-2]),1),at(-1)),u=En([o,i],1),c=En([a,l],1),p=ie(Lc(u,c),[s[0],s[1]]);r=_0(p)}if(r=Ab(r),e.rank===3&&e.shape[0]!==0){let s=r,o=e.shape[0];r=ie(r,[o,r.shape[0]/o,r.shape[1]]),s.dispose()}return r}var bk=ae({irfft_:Ihe});function Che(e,t,n=0){let s={x:U(e,"x","split")},o={numOrSizeSplits:t,axis:n};return se.runKernel(s0,s,o)}var _r=ae({split_:Che});function She(e,t){H(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],r=e.size/n,s;if(t!=null&&t0),m=e.shape.map(g=>g);m[e.shape.length-1]=t,s=gt(e,h,m),n=t}else if(t!=null&&t>n){let h=e.shape.map(m=>m);h[e.shape.length-1]=t-n,s=En([e,xr(h)],e.shape.length-1),n=t}else s=e;let o=Xt(s),a=ie(Lc(s,o),[r,n]),i=wb(a),l=Math.floor(n/2)+1,u=Ab(i),c=sk(i),p=_r(u,[l,n-l],u.shape.length-1),d=_r(c,[l,n-l],c.shape.length-1),f=s.shape.slice();return f[s.shape.length-1]=l,ie(Lc(p[0],d[0]),f)}var kb=ae({rfft_:She});function Nhe(e){let n={x:U(e,"x","sqrt")};return se.runKernel(Tf,n)}var As=ae({sqrt_:Nhe});function The(e,t){let n=U(e,"a","squaredDifference"),r=U(t,"b","squaredDifference");[n,r]=ur(n,r),Wn(n.shape,r.shape);let s={a:n,b:r},o={};return se.runKernel(Rf,s,o)}var Ak=ae({squaredDifference_:The});function _he(e,t){let n=U(e,"x","squeeze");return ie(n,hP(n.shape,t).newShape)}var ln=ae({squeeze_:_he});function Ehe(e,t=0){let n=ab(e,"tensors","stack","string_or_numeric");H(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&H(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,s={axis:t};return se.runKernel(Hg,r,s)}var vs=ae({stack_:Ehe});function Rhe(e,t=0){let r={x:U(e,"x","step")},s={alpha:t};return se.runKernel(Pc,r,s)}var E0=ae({step_:Rhe});function Dhe(e,t,n,r,s=0,o=0,a=0,i=0,l=0){let c={x:U(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:n,strides:r,beginMask:s,endMask:o,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:l};return se.runKernel(o0,c,p)}var U_=ae({stridedSlice_:Dhe});function $he(e){let n={x:U(e,"x","tan")};return se.runKernel($f,n)}var j_=ae({tan_:$he});function Er(e,t){Md(e);let n=rl(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Bc(e,null,n,t)}function bi(e,t,n){if(Md(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=rl(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Bc(e,t,r,n)}function Fhe(e,t,n){if(Md(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let r=rl(e,n);if(r.length!==4&&r.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Bc(e,t,r,n)}function Ohe(e,t,n){if(Md(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let r=rl(e,n);if(r.length!==5&&r.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Bc(e,t,r,n)}function Phe(e,t,n){if(Md(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let r=rl(e,n);if(r.length!==6&&r.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||r,Bc(e,t,r,n)}function Mhe(e,t=1,n=!0){let r=U(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let s=r.shape[r.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>s)throw new Error(`'k' passed to topk() must be <= the last dimension (${s}) but got ${t}`);let o={x:r},a={k:t,sorted:n},[i,l]=se.runKernel(a0,o,a);return{values:i,indices:l}}var H_=ae({topk_:Mhe});function zhe(e,t=0,n=1,r,s){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let o=new L_(t,n,r,!0,s),a=Wt(e,r);for(let i=0;i0,()=>"The input tensor must be at least 1D");let r={x:n},s={axis:t},[o,a]=se.runKernel(Ow,r,s);return{values:o,indices:a}}var wk=ae({unique_:Lhe});function Bhe(e,t,n){let r=U(e,"x","unsortedSegmentSum"),s=U(t,"segmentIds","unsortedSegmentSum","int32");H(as(n),()=>"numSegments must be of dtype int");let o={x:r,segmentIds:s},a={numSegments:n};return se.runKernel(X1,o,a)}var q_=ae({unsortedSegmentSum_:Bhe});function Vhe(e,t=0){let n=U(e,"x","unstack","string_or_numeric");H(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},s={axis:t};return se.runKernel(l0,r,s)}var Vs=ae({unstack_:Vhe});function nM(e,t=!0,n,r){return se.makeVariable(e,t,n,r)}function rM(e,t){let n=[];for(let o=0;o0,()=>"mask cannot be scalar"),zs(i.slice(o,o+a),s.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let m=o;m"Shape mismatch in v and x");let l=at(1),u=Ge(l,i),c=te(Ge(a,o),u);if(s){H(r!=null,()=>"When using zeroDebias: true, step is required.");let p=U(r,"step","movingAverage");c=Me(c,Ge(l,Wl(i,p)))}return Re(o,c)}var qhe=ae({movingAverage_:Hhe});function Khe(e,t,n){let r=U(e,"indices","scatterND","int32"),s=U(t,"updates","scatterND");r_(s,r,n);let o={indices:r,updates:s},a={shape:n};return se.runKernel(Zg,o,a)}var oM=ae({scatterND_:Khe});function Xhe(e,t,n,r){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let s=e.rank>0?e.shape[0]:1,o=e.rank>1?e.shape[1]:1;if(n.length!==o)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${o}.`);let a=t.size;if(!(t.rank===0||t.rank===1&&a===s))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${s}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function Zhe(e,t,n,r=0){let s=U(e,"sparseIndices","sparseToDense","int32"),o=U(t,"sparseValues","sparseToDense"),a=U(r,"defaultValue","sparseToDense",o.dtype);Xhe(s,o,n,a);let i={sparseIndices:s,sparseValues:o,defaultValue:a},l={outputShape:n};return se.runKernel(Rw,i,l)}var X_=ae({sparseToDense_:Zhe});function Yhe(e,t){let n=U(t,"indices","gatherND","int32"),s={params:U(e,"x","gatherND","string_or_numeric"),indices:n};return se.runKernel(Eg,s)}var aM=ae({gatherND_:Yhe});function Jhe(e,t){if(t==null)return e.shape.slice();if(Ml(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r`x has to be a floating point tensor since it's going to be scaled, but got a ${s.dtype} tensor instead.`),H(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof Vt?s.clone():s;let o=Jhe(s,n),a=1-t,i=Me(C0(Re(N0(o,0,1,"float32",r),a)),a);return te(s,i)}var iM=ae({dropout_:Qhe});function lM(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Z_(e,t,n){let r=1-e%2,s=new Float32Array(e);for(let o=0;o1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),H(r.rank-1===s.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${s.rank}`),zs(r.shape.slice(0,r.shape.length-1),s.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let o=r.shape[r.shape.length-1];H(n>0&&n<=o,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${o}), but got ${n}`);let a=await r.data(),i=await s.data(),[l,u]=[a.length/o,o],c=mP("bool",l);for(let p=0;pg.value-m.value),c[p]=0;for(let m=0;msme,depthwiseConv2d:()=>lme,matMul:()=>cme});function nme(e,t,n,r,s,o="NHWC",a){let i=e;e.rank===3&&(i=ie(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=ie(t,[1,t.shape[0],t.shape[1],t.shape[2]])),H(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),H(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),H(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let u=o==="NHWC"?i.shape[3]:i.shape[1],c=o==="NHWC"?l.shape[3]:l.shape[1];H(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),H(c===n[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${n[3]}).`),a!=null&&H(as(s),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`);let p={x:i,dy:l},d={strides:r,pad:s,dataFormat:o,dimRoundingMode:a,filterShape:n};return se.runKernel(sw,p,d)}var Y_=ae({conv2DBackpropFilter_:nme});function Ik(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return te(e,E0(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Ck(e,t){let n=t,r=jr(e.shape,t.shape);return r.length>0&&(n=Je(n,r)),ie(n,e.shape)}function Sk(e,t,n,r){if(t==="linear")return e;if(t==="relu")return yi(e);if(t==="elu")return k0(e);if(t==="relu6")return pk(e);if(t==="prelu")return bb(e,n);if(t==="leakyrelu")return fb(e,r);if(t==="sigmoid")return xo(e);throw new Error(`Unknown fused activation ${t}.`)}var Nk=(e,t)=>!(e>0)||t==="linear";function rme({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:o=[1,1],dimRoundingMode:a,bias:i,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(l=l||"linear",Nk(se.state.gradientDepth,l)===!1){let v=Bl(e,t,n,r,s,o,a);return i!=null&&(v=Re(v,i)),Sk(v,l,u,c)}let p=U(e,"x","conv2d"),d=U(t,"filter","conv2d"),f=p,h=!1;p.rank===3&&(h=!0,f=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]])),H(f.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${f.rank}.`),H(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),a!=null&&H(as(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`),H(f.shape[3]===d.shape[2],()=>`Error in conv2d: depth of input (${f.shape[3]}) must match input depth for filter ${d.shape[2]}.`),H(ol(n,o),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),H(s==="NHWC",()=>`Error in conv2d: got dataFormat of ${s} but only NHWC is currently supported.`);let m=ub(f.shape,d.shape,n,o,r,a),g;i!=null&&(g=U(i,"bias","fused conv2d"),[g]=ur(g,p),Wn(m.outShape,g.shape));let x;u!=null&&(x=U(u,"prelu weights","fused conv2d"));let y=(v,w)=>{let[k,I,N,T]=w,_=Ik(v,N,l);H(Gc(o),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${o}'`);let R=w_(I.shape,_,k,n,r),S=Y_(I,_,k.shape,n,r),F=[R,S];if(T!=null){let B=Ck(T,_);F.push(B)}return F},b={x:f,filter:d,bias:g,preluActivationWeights:x},A={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a,activation:l,leakyreluAlpha:c};return i==null?al((w,k,I)=>{let N=se.runKernel(Mf,b,A);return I([k,w,N]),h&&(N=ie(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:y}})(f,d):al((w,k,I,N)=>{let T=se.runKernel(Mf,b,A);return N([k,w,T,I]),h&&(T=ie(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:y}})(f,d,g)}var sme=ae({fusedConv2d_:rme});function ome(e,t,n,r,s,o=[1,1],a){let i=e;e.rank===3&&(i=ie(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=ie(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:l},c={strides:r,pad:s,dimRoundingMode:a,dilations:o,filterShape:n};return se.runKernel(lw,u,c)}var uM=ae({depthwiseConv2dNativeBackpropFilter_:ome});function ame(e,t,n,r,s,o=[1,1],a){let i=t,l=!1;t.rank===3&&(l=!0,i=ie(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:n},c={strides:r,pad:s,dimRoundingMode:a,dilations:o,inputShape:e},p=se.runKernel(uw,u,c);return l?ie(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var cM=ae({depthwiseConv2dNativeBackpropInput_:ame});function ime({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:o=[1,1],dimRoundingMode:a,bias:i,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(Nk(se.state.gradientDepth,l)===!1){let v=w0(e,t,n,r,s,o,a);return i!=null&&(v=Re(v,i)),Sk(v,l,u,c)}let p=U(e,"x","depthwiseConv2d"),d=U(t,"filter","depthwiseConv2d"),f=p,h=!1;p.rank===3&&(h=!0,f=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]])),H(f.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${f.rank}.`),H(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),H(f.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${f.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),o==null&&(o=[1,1]),H(ol(n,o),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),a!=null&&H(as(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`);let m=ub(f.shape,d.shape,n,o,r,a,!0),g;i!=null&&(g=U(i,"bias","fused conv2d"),[g]=ur(g,p),Wn(m.outShape,g.shape));let x;u!=null&&(x=U(u,"prelu weights","fused depthwiseConv2d"));let y=(v,w)=>{H(Gc(o),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[k,I,N,T]=w,_=Ik(v,N,l),R=cM(I.shape,_,k,n,r,o,a),S=uM(I,_,k.shape,n,r,o,a);if(T!=null){let F=Ck(g,_);return[R,S,F]}return[R,S]},b={x:f,filter:d,bias:g,preluActivationWeights:x},A={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a,activation:l,leakyreluAlpha:c};return i==null?al((w,k,I)=>{let N=se.runKernel(zf,b,A);return I([k,w,N]),h&&(N=ie(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:y}})(f,d):al((w,k,I,N)=>{let T=se.runKernel(zf,b,A);return N([k,w,T,I]),h&&(T=ie(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:y}})(f,d,g)}var lme=ae({fusedDepthwiseConv2d_:ime});function ume({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:s,activation:o="linear",preluActivationWeights:a,leakyreluAlpha:i}){if(Nk(se.state.gradientDepth,o)===!1){let T=Lt(e,t,n,r);return s!=null&&(T=Re(T,s)),Sk(T,o,a,i)}let l=U(e,"a","fused matMul"),u=U(t,"b","fused matMul");[l,u]=ur(l,u);let c=n?l.shape[l.rank-2]:l.shape[l.rank-1],p=r?u.shape[u.rank-1]:u.shape[u.rank-2],d=n?l.shape[l.rank-1]:l.shape[l.rank-2],f=r?u.shape[u.rank-2]:u.shape[u.rank-1],h=l.shape.slice(0,-2),m=u.shape.slice(0,-2),g=wr(h),x=wr(m);H(l.rank>=2&&u.rank>=2&&l.rank===u.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${u.rank}.`),H(Ml(h,m),()=>`Error in fused matMul: outer dimensions (${h}) and (${m}) of Tensors with shapes ${l.shape} and ${u.shape} must match.`),H(c===p,()=>`Error in fused matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${r} must match.`);let y=l.shape.slice(0,-2).concat([d,f]),b=n?ie(l,[g,c,d]):ie(l,[g,d,c]),A=r?ie(u,[x,f,p]):ie(u,[x,p,f]),v;s!=null&&(v=U(s,"bias","fused matMul"),[v]=ur(v,l),Wn(y,v.shape));let w;a!=null&&(w=U(a,"prelu weights","fused matMul"));let k=(T,_)=>{let[R,S,F,B]=_,W=Ik(ie(T,F.shape),F,o),q,K;if(!n&&!r?(q=Lt(W,S,!1,!0),K=Lt(R,W,!0,!1)):!n&&r?(q=Lt(W,S,!1,!1),K=Lt(W,R,!0,!1)):n&&!r?(q=Lt(S,W,!1,!0),K=Lt(R,W,!1,!1)):(q=Lt(S,W,!0,!0),K=Lt(W,R,!0,!0)),s!=null){let J=Ck(B,W);return[q,K,J]}else return[q,K]},I={a:b,b:A,bias:v,preluActivationWeights:w},N={transposeA:n,transposeB:r,activation:o,leakyreluAlpha:i};return s==null?al((_,R,S)=>{let F=se.runKernel(Pf,I,N);return S([_,R,F]),{value:ie(F,y),gradFunc:k}})(b,A):al((_,R,S,F)=>{let B=se.runKernel(Pf,I,N);return F([_,R,B,S]),{value:ie(B,y),gradFunc:k}})(b,A,v)}var cme=ae({fusedMatMul_:ume});function pme(e){return Z_(e,.54,.46)}var dme=ae({hammingWindow_:pme});function fme(e){return Z_(e,.5,.5)}var pM=ae({hannWindow_:fme});function hme(e,t,n,r=!1,s=0){let o=0,a=[];for(;o+t<=e.size;)a.push(gt(e,o,t)),o+=n;if(r)for(;o`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),H(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),H(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),H(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),H(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),H(s==="bilinear"||s==="nearest",()=>`method must be bilinear or nearest, but was ${s}`);let c={image:a,boxes:i,boxInd:l},p={method:s,extrapolationValue:o,cropSize:r};return se.runKernel(wg,c,p)}var yme=ae({cropAndResize_:xme});function bme(e){let t=U(e,"image","flipLeftRight","float32");H(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return se.runKernel(Tg,n,{})}var Ame=ae({flipLeftRight_:bme});function vme(e){let t=U(e,"image","grayscaleToRGB"),n=t.rank-1,r=t.shape[n];H(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),H(r===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${r}.`);let s=new Array(t.rank);return s.fill(1,0,n),s[n]=3,da(t,s)}var wme=ae({grayscaleToRGB_:vme});function kme(e,t,n=0,r=.5){let s=U(e,"image","rotateWithOffset","float32");H(s.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${s.rank}.`);let o={image:s},a={radians:t,fillValue:n,center:r};return se.runKernel(c0,o,a)}var Ime=ae({rotateWithOffset_:kme});function R0(e,t,n,r,s,o){r==null&&(r=.5),s==null&&(s=Number.NEGATIVE_INFINITY),o==null&&(o=0);let a=e.shape[0];return n=Math.min(n,a),H(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),H(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),H(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),H(t.rank===1,()=>"scores must be a 1D tensor"),H(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),H(0<=o&&o<=1,()=>`softNmsSigma must be in [0, 1], but was '${o}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:o}}function Cme(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let o=U(e,"boxes","nonMaxSuppression"),a=U(t,"scores","nonMaxSuppression"),i=R0(o,a,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let l={maxOutputSize:n,iouThreshold:r,scoreThreshold:s};return se.runKernel(Wg,{boxes:o,scores:a},l)}var Sme=ae({nonMaxSuppression_:Cme});function Nme(e,t,n){let r=Tme(e,t,n),s=r<0?-(r+1):r;e.splice(s,0,t)}function Tme(e,t,n){return Eme(e,t,n||_me)}function _me(e,t){return e>t?1:e>>1);let i=n(t,e[o]);i>0?r=o+1:(s=o,a=!i)}return a?r:-r-1}function fM(e,t,n,r,s){return J_(e,t,n,r,s,0)}function hM(e,t,n,r,s,o){return J_(e,t,n,r,s,0,!1,o,!0)}function mM(e,t,n,r,s,o){return J_(e,t,n,r,s,o,!0)}function J_(e,t,n,r,s,o,a=!1,i=!1,l=!1){let u=[];for(let g=0;gs&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(gM);let c=o>0?-.5/o:0,p=[],d=[];for(;p.length0;){let g=u.pop(),{score:x,boxIndex:y,suppressBeginIndex:b}=g;if(x=b;--v){let w=Rme(e,y,p[v]);if(w>=r){A=!0;break}if(g.score=g.score*Dme(r,c,w),g.score<=s)break}g.suppressBeginIndex=p.length,A||(g.score===x?(p.push(y),d.push(g.score)):g.score>s&&Nme(u,g,gM))}let f=p.length,h=n-f;i&&h>0&&(p.push(...new Array(h).fill(0)),d.push(...new Array(h).fill(0)));let m={selectedIndices:p};return a&&(m.selectedScores=d),l&&(m.validOutputs=f),m}function Rme(e,t,n){let r=e.subarray(t*4,t*4+4),s=e.subarray(n*4,n*4+4),o=Math.min(r[0],r[2]),a=Math.min(r[1],r[3]),i=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),u=Math.min(s[0],s[2]),c=Math.min(s[1],s[3]),p=Math.max(s[0],s[2]),d=Math.max(s[1],s[3]),f=(i-o)*(l-a),h=(p-u)*(d-c);if(f<=0||h<=0)return 0;let m=Math.max(o,u),g=Math.max(a,c),x=Math.min(i,p),y=Math.min(l,d),b=Math.max(x-m,0)*Math.max(y-g,0);return b/(f+h-b)}function Dme(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function gM(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function $me(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let o=U(e,"boxes","nonMaxSuppressionAsync"),a=U(t,"scores","nonMaxSuppressionAsync"),i=R0(o,a,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let l=await Promise.all([o.data(),a.data()]),u=l[0],c=l[1],{selectedIndices:p}=fM(u,c,n,r,s);return o!==e&&o.dispose(),a!==t&&a.dispose(),Er(p,"int32")}var Fme=$me;function Ome(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=0){let a=U(e,"boxes","nonMaxSuppression"),i=U(t,"scores","nonMaxSuppression"),l=R0(a,i,n,r,s,o);n=l.maxOutputSize,r=l.iouThreshold,s=l.scoreThreshold,o=l.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:o},p=se.runKernel(Ug,u,c);return{selectedIndices:p[0],selectedScores:p[1]}}var Pme=ae({nonMaxSuppressionWithScore_:Ome});async function Mme(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=0){let a=U(e,"boxes","nonMaxSuppressionAsync"),i=U(t,"scores","nonMaxSuppressionAsync"),l=R0(a,i,n,r,s,o);n=l.maxOutputSize,r=l.iouThreshold,s=l.scoreThreshold,o=l.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],p=u[1],{selectedIndices:d,selectedScores:f}=mM(c,p,n,r,s,o);return a!==e&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Er(d,"int32"),selectedScores:Er(f)}}var zme=Mme;function Lme(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=!1){let a=U(e,"boxes","nonMaxSuppression"),i=U(t,"scores","nonMaxSuppression"),l=R0(a,i,n,r,s,null),u=l.maxOutputSize,c=l.iouThreshold,p=l.scoreThreshold,d={boxes:a,scores:i},f={maxOutputSize:u,iouThreshold:c,scoreThreshold:p,padToMaxOutputSize:o},h=se.runKernel(Gg,d,f);return{selectedIndices:h[0],validOutputs:h[1]}}var Bme=ae({nonMaxSuppressionPadded_:Lme});async function Vme(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=!1){let a=U(e,"boxes","nonMaxSuppressionAsync"),i=U(t,"scores","nonMaxSuppressionAsync"),l=R0(a,i,n,r,s,null),u=l.maxOutputSize,c=l.iouThreshold,p=l.scoreThreshold,[d,f]=await Promise.all([a.data(),i.data()]),{selectedIndices:h,validOutputs:m}=hM(d,f,u,c,p,o);return a!==e&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Er(h,"int32"),validOutputs:at(m,"int32")}}var Wme=Vme;function Gme(e,t,n=!1,r=!1){let s=U(e,"images","resizeBilinear");H(s.rank===3||s.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${s.rank}.`),H(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),H(r===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let o=s,a=!1;s.rank===3&&(a=!0,o=ie(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let[]=t,i={images:o},l={alignCorners:n,halfPixelCenters:r,size:t},u=se.runKernel(vf,i,l);return a?ie(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var xM=ae({resizeBilinear_:Gme});function Ume(e,t,n=!1,r=!1){let s=U(e,"images","resizeNearestNeighbor");H(s.rank===3||s.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${s.rank}.`),H(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),H(s.dtype==="float32"||s.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),H(r===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let o=s,a=!1;s.rank===3&&(a=!0,o=ie(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let[]=t,i={images:o},l={alignCorners:n,halfPixelCenters:r,size:t},u=se.runKernel(q1,i,l);return a?ie(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var yM=ae({resizeNearestNeighbor_:Ume});function jme(e,t="binary",n=!1,r=.5){let s=U(e,"image","threshold"),o=.2989,a=.587,i=.114,l=s.shape[0]*s.shape[1],u=te(Er([r]),255),c,p,d,f;if(H(s.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${s.rank}.`),H(s.shape[2]===3||s.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${s.shape[2]}.`),H(s.dtype==="int32"||s.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${s.dtype}.`),H(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),s.shape[2]===3){[c,p,d]=_r(s,[1,1,1],-1);let g=te(c,o),x=te(p,a),y=te(d,i);f=Re(Re(g,x),y)}else f=e;if(t==="otsu"){let g=A_(Fe(dk(f),"int32"),ls([]),256);u=Hme(g,l)}let h=n?jc(f,u):bo(f,u);return Fe(te(h,255),"int32")}function Hme(e,t){let n=Er([-1]),r=Er([0]),s=Er([0]),o,a,i,l,u,c;for(let p=0;p`Error in transform: image must be rank 4,but got rank ${a.rank}.`),H(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),H(o==null||o.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${o}.`);let l={image:a,transforms:i},u={interpolation:n,fillMode:r,fillValue:s,outputShape:o};return se.runKernel(i0,l,u)}var Xme=ae({transform_:Kme});function Zme(e,t,n){H(t%1==0,()=>`bandPart(): numLower must be an integer, got ${t}.`),H(n%1==0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let r=U(e,"a","bandPart");H(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let s=r.shape,[o,a]=r.shape.slice(-2);if(!(t<=o))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${o}).`);if(!(n<=a))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${a}).`);t<0&&(t=o),n<0&&(n=a);let i=ie(T0(0,o,1,"int32"),[-1,1]),l=T0(0,a,1,"int32"),u=Ge(i,l),c=Fa(jc(u,at(+t,"int32")),Uc(u,at(-n,"int32"))),p=xr([o,a],r.dtype);return ie(vs(Vs(ie(r,[-1,o,a])).map(d=>$s(c,d,p))),s)}var Yme=ae({bandPart_:Zme});function Jme(e){let t;if(Array.isArray(e)){t=!1,H(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let s=e[0].shape[0];for(let o=1;o`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[o].shape[0]} vs. ${s})`)}else t=!0,e=_r(e,e.shape[0],0).map(s=>ln(s,[0]));H(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],r=e;for(let s=0;s{let o=r[s];if(s>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return bM(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),r=Vs(ie(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),s=[],o=[];r.forEach(l=>{let[u,c]=bM(l,t);s.push(u),o.push(c)});let a=ie(vs(s,0),e.shape),i=ie(vs(o,0),e.shape);return[a,i]}}function bM(e,t=!1){return se.tidy(()=>{H(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],r=e.shape[1],s=__(n),o=mi(e),a=bi([[1]],[1,1]),i=mi(a),l=n>=r?r:n;for(let u=0;u{let f=gt(o,[u,u],[n-u,1]),h=kk(f),m=gt(o,[u,u],[1,1]),g=$s(bo(m,0),bi([[-1]]),bi([[1]])),x=Ge(m,te(g,h)),y=Me(f,x);y.shape[0]===1?i=mi(a):i=En([a,gt(y,[1,0],[y.shape[0]-1,y.shape[1]])],0);let b=er(Me(Lt(g,x),h)),A=gt(o,[u,0],[n-u,r]),v=te(b,i),w=Kt(i);if(u===0)o=Ge(A,Lt(v,Lt(w,A)));else{let N=Ge(A,Lt(v,Lt(w,A)));o=En([gt(o,[0,0],[u,r]),N],0)}let k=Kt(v),I=gt(s,[0,u],[n,s.shape[1]-u]);if(u===0)s=Ge(I,Lt(Lt(I,i),k));else{let N=Ge(I,Lt(Lt(I,i),k));s=En([gt(s,[0,0],[n,u]),N],1)}return[i,o,s]}),ye([c,p,d])}return!t&&n>r&&(s=gt(s,[0,0],[n,r]),o=gt(o,[0,0],[r,r])),[s,o]})}var tge=ae({qr_:ege}),Ws;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Ws||(Ws={}));function nge(e,t,n=Ws.SUM_BY_NONZERO_WEIGHTS){let r=U(e,"losses","computeWeightedLoss"),s=null;t!=null&&(s=U(t,"weights","computeWeightedLoss"));let o=s==null?r:te(r,s);if(n===Ws.NONE)return o;if(n===Ws.SUM)return Je(o);if(n===Ws.MEAN){if(s==null)return cr(o);{let a=r.size/s.size,i=Me(Je(o),Je(s));return a>1?Me(i,at(a)):i}}if(n===Ws.SUM_BY_NONZERO_WEIGHTS){if(s==null)return Me(Je(o),at(r.size));{let a=te(s,Go(r.shape)),i=Fe(Je(Yf(a,at(0))),"float32");return Me(Je(o),i)}}throw Error(`Unknown reduction: ${n}`)}var Gl=ae({computeWeightedLoss_:nge});function rge(e,t,n,r=Ws.SUM_BY_NONZERO_WEIGHTS){let s=U(e,"labels","absoluteDifference"),o=U(t,"predictions","absoluteDifference"),a=null;n!=null&&(a=U(n,"weights","absoluteDifference")),zs(s.shape,o.shape,"Error in absoluteDifference: ");let i=Tr(Ge(s,o));return Gl(i,a,r)}var sge=ae({absoluteDifference_:rge});function oge(e,t,n,r,s=Ws.SUM_BY_NONZERO_WEIGHTS){let o=U(e,"labels","cosineDistance"),a=U(t,"predictions","cosineDistance"),i=null;r!=null&&(i=U(r,"weights","cosineDistance")),zs(o.shape,a.shape,"Error in cosineDistance: ");let l=at(1),u=Ge(l,Je(te(o,a),n,!0));return Gl(u,i,s)}var age=ae({cosineDistance_:oge});function ige(e,t,n,r=Ws.SUM_BY_NONZERO_WEIGHTS){let s=U(e,"labels","hingeLoss"),o=U(t,"predictions","hingeLoss"),a=null;n!=null&&(a=U(n,"weights","hingeLoss")),zs(s.shape,o.shape,"Error in hingeLoss: ");let i=at(1);s=Ge(te(at(2),s),i);let l=yi(Ge(i,te(s,o)));return Gl(l,a,r)}var lge=ae({hingeLoss_:ige});function uge(e,t,n,r=1,s=Ws.SUM_BY_NONZERO_WEIGHTS){let o=U(e,"labels","huberLoss"),a=U(t,"predictions","huberLoss"),i=null;n!=null&&(i=U(n,"weights","huberLoss")),zs(o.shape,a.shape,"Error in huberLoss: ");let l=at(r),u=Tr(Ge(a,o)),c=S0(u,l),p=Ge(u,c),d=Re(te(at(.5),Tn(c)),te(l,p));return Gl(d,i,s)}var cge=ae({huberLoss_:uge});function pge(e,t,n,r=1e-7,s=Ws.SUM_BY_NONZERO_WEIGHTS){let o=U(e,"labels","logLoss"),a=U(t,"predictions","logLoss"),i=null;n!=null&&(i=U(n,"weights","logLoss")),zs(o.shape,a.shape,"Error in logLoss: ");let l=at(1),u=at(r),c=er(te(o,Vo(Re(a,u)))),p=te(Ge(l,o),Vo(Re(Ge(l,a),u))),d=Ge(c,p);return Gl(d,i,s)}var dge=ae({logLoss_:pge});function fge(e,t,n,r=Ws.SUM_BY_NONZERO_WEIGHTS){let s=U(e,"labels","meanSquaredError"),o=U(t,"predictions","meanSquaredError"),a=null;n!=null&&(a=U(n,"weights","meanSquaredError")),zs(s.shape,o.shape,"Error in meanSquaredError: ");let i=Ak(s,o);return Gl(i,a,r)}var hge=ae({meanSquaredError_:fge});function mge(e,t){let n=U(e,"labels","sigmoidCrossEntropyWithLogits"),r=U(t,"logits","sigmoidCrossEntropyWithLogits");zs(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let s=yi(r),o=te(r,n),a=hb(Bo(er(Tr(r))));return Re(Ge(s,o),a)}function gge(e,t,n,r=0,s=Ws.SUM_BY_NONZERO_WEIGHTS){let o=U(e,"multiClassLabels","sigmoidCrossEntropy"),a=U(t,"logits","sigmoidCrossEntropy"),i=null;if(n!=null&&(i=U(n,"weights","sigmoidCrossEntropy")),zs(o.shape,a.shape,"Error in sigmoidCrossEntropy: "),r>0){let u=at(r),c=at(1),p=at(.5);o=Re(te(o,Ge(c,u)),te(p,u))}let l=mge(o,a);return Gl(l,i,s)}var xge=ae({sigmoidCrossEntropy_:gge});function yge(e,t,n=-1){if(n===-1&&(n=t.rank-1),n!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${n}`);return al((s,o,a)=>{let l=F_(o,[n],!0),u=Ge(Fe(o,"float32"),l);a([s,u]);let c=er(te(u,s));return{value:Je(c,[n]),gradFunc:(f,h)=>{let[m,g]=h,x=Zf(f.shape,[n]);return[te(ie(f,x),Ge(Fe(m,"float32"),Bo(g))),te(ie(f,x),Ge(Bo(g),Fe(m,"float32")))]}}})(e,t)}function bge(e,t,n,r=0,s=Ws.SUM_BY_NONZERO_WEIGHTS){let o=U(e,"onehotLabels","softmaxCrossEntropy"),a=U(t,"logits","softmaxCrossEntropy"),i=null;if(n!=null&&(i=U(n,"weights","softmaxCrossEntropy")),zs(o.shape,a.shape,"Error in softmaxCrossEntropy: "),r>0){let u=at(r),c=at(1),p=at(o.shape[1]);o=Re(te(o,Ge(c,u)),Me(u,p))}let l=yge(o,a);return Gl(l,i,s)}var Age=ae({softmaxCrossEntropy_:bge});function vge(e,t,n,r){let s=U(e,"indices","sparseFillEmptyRows"),o=U(t,"values","sparseFillEmptyRows"),a=U(n,"denseShape","sparseFillEmptyRows"),i=U(r,"defaultValue","sparseFillEmptyRows",o.dtype);if(s.rank!==2)throw new Error(`Indices should be Tensor2D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${o.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let l={indices:s,values:o,denseShape:a,defaultValue:i},u=se.runKernel(Nw,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var wge=ae({sparseFillEmptyRows_:vge});function kge(e,t,n){let r=U(e,"inputIndices","sparseReshape"),s=U(t,"inputShape","sparseReshape"),o=U(n,"newShape","sparseReshape");if(r.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${o.shape}`);let a={inputIndices:r,inputShape:s,newShape:o},i=se.runKernel(Tw,a);return{outputIndices:i[0],outputShape:i[1]}}var Ige=ae({sparseReshape_:kge});function Cge(e,t,n){let r=U(e,"data","sparseSegmentMean"),s=U(t,"indices","sparseSegmentMean"),o=U(n,"segmentIds","sparseSegmentMean");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape ${o.shape}`);let a={data:r,indices:s,segmentIds:o};return se.runKernel(_w,a)}var Sge=ae({sparseSegmentMean_:Cge});function Nge(e,t,n){let r=U(e,"data","sparseSegmentSum"),s=U(t,"indices","sparseSegmentSum"),o=U(n,"segmentIds","sparseSegmentSum");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape ${o.shape}`);let a={data:r,indices:s,segmentIds:o};return se.runKernel(Ew,a)}var Tge=ae({sparseSegmentSum_:Nge});function _ge(e,t,n,r,s,o,a,i){let l=U(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=U(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:n,nGramWidths:r,leftPad:s,rightPad:o,padWidth:a,preserveShortSequences:i},p={data:l,dataSplits:u},d=se.runKernel(Dw,p,c);return{nGrams:d[0],nGramsSplits:d[1]}}var Ege=ae({stringNGrams_:_ge});function Rge(e,t,n=!0){let r=U(e,"input","stringSplit","string"),s=U(t,"delimiter","stringSplit","string");if(r.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${r.shape}`);if(s.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${s.shape}`);let o={skipEmpty:n},a={input:r,delimiter:s},i=se.runKernel($w,a,o);return{indices:i[0],values:i[1],shape:i[2]}}var Dge=ae({stringSplit_:Rge});function $ge(e,t){let n=U(e,"input","stringToHashBucketFast","string"),r={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let s={input:n};return se.runKernel(Fw,s,r)}var Fge=ae({stringToHashBucketFast_:$ge}),Oge={fft:wb,ifft:_0,rfft:kb,irfft:bk},Pge={hammingWindow:dme,hannWindow:pM,frame:dM,stft:gme},ht={flipLeftRight:Ame,grayscaleToRGB:wme,resizeNearestNeighbor:yM,resizeBilinear:xM,rotateWithOffset:Ime,cropAndResize:yme,nonMaxSuppression:Sme,nonMaxSuppressionAsync:Fme,nonMaxSuppressionWithScore:Pme,nonMaxSuppressionWithScoreAsync:zme,nonMaxSuppressionPadded:Bme,nonMaxSuppressionPaddedAsync:Wme,threshold:qme,transform:Xme},AM={bandPart:Yme,gramSchmidt:Qme,qr:tge},Mge={absoluteDifference:sge,computeWeightedLoss:Gl,cosineDistance:age,hingeLoss:lge,huberLoss:cge,logLoss:dge,meanSquaredError:hge,sigmoidCrossEntropy:xge,softmaxCrossEntropy:Age},Ib={sparseFillEmptyRows:wge,sparseReshape:Ige,sparseSegmentMean:Sge,sparseSegmentSum:Tge},Tk={stringNGrams:Ege,stringSplit:Dge,stringToHashBucketFast:Fge},Ul=class extends v9{minimize(e,t=!1,n){let{value:r,grads:s}=this.computeGradients(e,n);if(n!=null){let o=n.map(a=>({name:a.name,tensor:s[a.name]}));this.applyGradients(o)}else this.applyGradients(s);return ye(s),t?r:(r.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return j9(e,t)}dispose(){this.iterations_!=null&&ye(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:at(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(Ul,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var _k=class extends Ul{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=se.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=se.registeredVariables[n],o=!1;this.accumulatedGrads[r]==null&&(this.accumulatedGrads[r]={originalName:`${n}/accum_grad`,variable:ce(()=>Xt(s).variable(o))}),this.accumulatedUpdates[r]==null&&(this.accumulatedUpdates[r]={originalName:`${n}/accum_var`,variable:ce(()=>Xt(s).variable(o))});let a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;let i=this.accumulatedGrads[r].variable,l=this.accumulatedUpdates[r].variable;ce(()=>{let u=Re(te(i,this.rho),te(Tn(a),1-this.rho)),c=te(Me(As(Re(l,this.epsilon)),As(Re(i,this.epsilon))),a),p=Re(te(l,this.rho),te(Tn(c),1-this.rho));i.assign(u),l.assign(p);let d=Re(te(c,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(ye(this.accumulatedGrads.map(e=>e.variable)),ye(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};_k.className="Adadelta";Wc(_k);var Ek=class extends Ul{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=se.registeredVariables[n];if(this.accumulatedGrads[r]==null){let i=!1;this.accumulatedGrads[r]={originalName:`${n}/accumulator`,variable:ce(()=>I0(s.shape,this.initialAccumulatorValue).variable(i))}}let o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;let a=this.accumulatedGrads[r].variable;ce(()=>{let i=Re(a,Tn(o));a.assign(i);let l=Re(te(Me(o,As(Re(i,se.backend.epsilon()))),-this.learningRate),s);s.assign(l)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&ye(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};Ek.className="Adagrad";Wc(Ek);var Rk=class extends Ul{constructor(e,t,n,r=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],ce(()=>{this.accBeta1=at(t).variable(),this.accBeta2=at(n).variable()}),r==null&&(this.epsilon=se.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);ce(()=>{let n=Ge(1,this.accBeta1),r=Ge(1,this.accBeta2);t.forEach((s,o)=>{let a=se.registeredVariables[s],i=!1;this.accumulatedFirstMoment[o]==null&&(this.accumulatedFirstMoment[o]={originalName:`${s}/m`,variable:ce(()=>Xt(a).variable(i))}),this.accumulatedSecondMoment[o]==null&&(this.accumulatedSecondMoment[o]={originalName:`${s}/v`,variable:ce(()=>Xt(a).variable(i))});let l=Array.isArray(e)?e[o].tensor:e[s];if(l==null)return;let u=this.accumulatedFirstMoment[o].variable,c=this.accumulatedSecondMoment[o].variable,p=Re(te(u,this.beta1),te(l,1-this.beta1)),d=Re(te(c,this.beta2),te(Tn(l),1-this.beta2)),f=Me(p,n),h=Me(d,r);u.assign(p),c.assign(d);let m=Re(te(Me(f,Re(As(h),this.epsilon)),-this.learningRate),a);a.assign(m)}),this.accBeta1.assign(te(this.accBeta1,this.beta1)),this.accBeta2.assign(te(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&ye(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&ye(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),ce(()=>{this.accBeta1.assign(Wl(this.beta1,this.iterations_+1)),this.accBeta2.assign(Wl(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Rk.className="Adam";Wc(Rk);var Dk=class extends Ul{constructor(e,t,n,r=null,s=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],ce(()=>{this.iteration=at(0).variable(),this.accBeta1=at(t).variable()}),r==null&&(this.epsilon=se.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);ce(()=>{let n=Ge(1,this.accBeta1),r=Me(-this.learningRate,Re(te(this.iteration,this.decay),1));t.forEach((s,o)=>{let a=se.registeredVariables[s],i=!1;this.accumulatedFirstMoment[o]==null&&(this.accumulatedFirstMoment[o]={originalName:`${s}/m`,variable:Xt(a).variable(i)}),this.accumulatedWeightedInfNorm[o]==null&&(this.accumulatedWeightedInfNorm[o]={originalName:`${s}/v`,variable:Xt(a).variable(i)});let l=Array.isArray(e)?e[o].tensor:e[s];if(l==null)return;let u=this.accumulatedFirstMoment[o].variable,c=this.accumulatedWeightedInfNorm[o].variable,p=Re(te(u,this.beta1),te(l,1-this.beta1)),d=te(c,this.beta2),f=Tr(l),h=il(d,f);u.assign(p),c.assign(h);let m=Re(te(Me(r,n),Me(p,Re(h,this.epsilon))),a);a.assign(m)}),this.iteration.assign(Re(this.iteration,1)),this.accBeta1.assign(te(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&ye(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&ye(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Dk.className="Adamax";Wc(Dk);var Cb=class extends Ul{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=Array.isArray(e)?e[r].tensor:e[n];if(s==null)return;let o=se.registeredVariables[n];ce(()=>{let a=Re(te(this.c,s),o);o.assign(a)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=us(at(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};Cb.className="SGD";Wc(Cb);var $k=class extends Cb{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=at(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=se.registeredVariables[n];if(this.accumulations[r]==null){let i=!1;this.accumulations[r]={originalName:`${n}/momentum`,variable:ce(()=>Xt(s).variable(i))}}let o=this.accumulations[r].variable,a=Array.isArray(e)?e[r].tensor:e[n];a!=null&&ce(()=>{let i,l=Re(te(this.m,o),a);this.useNesterov?i=Re(te(this.c,Re(a,te(l,this.m))),s):i=Re(te(this.c,l),s),o.assign(l),s.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&ye(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};$k.className="Momentum";Wc($k);var Fk=class extends Ul{constructor(e,t=.9,n=0,r=null,s=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,r==null&&(this.epsilon=se.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=se.registeredVariables[n],o=!1;this.accumulatedMeanSquares[r]==null&&(this.accumulatedMeanSquares[r]={originalName:`${n}/rms`,variable:ce(()=>Xt(s).variable(o))}),this.accumulatedMoments[r]==null&&(this.accumulatedMoments[r]={originalName:`${n}/momentum`,variable:ce(()=>Xt(s).variable(o))}),this.accumulatedMeanGrads[r]==null&&this.centered&&(this.accumulatedMeanGrads[r]={originalName:`${n}/mg`,variable:ce(()=>Xt(s).variable(o))});let a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;let i=this.accumulatedMeanSquares[r].variable,l=this.accumulatedMoments[r].variable;ce(()=>{let u=Re(te(i,this.decay),te(Tn(a),1-this.decay));if(this.centered){let c=this.accumulatedMeanGrads[r].variable,p=Re(te(c,this.decay),te(a,1-this.decay)),d=Me(te(a,this.learningRate),As(Ge(u,Re(Tn(p),this.epsilon)))),f=Re(te(l,this.momentum),d);i.assign(u),c.assign(p),l.assign(f);let h=Ge(s,f);s.assign(h)}else{let c=Re(te(i,this.decay),te(Tn(a),1-this.decay)),p=Re(te(l,this.momentum),Me(te(a,this.learningRate),As(Re(c,this.epsilon))));i.assign(c),l.assign(p);let d=Ge(s,p);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&ye(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&ye(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&ye(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};Fk.className="RMSProp";Wc(Fk);var Qf=class{static sgd(e){return new Cb(e)}static momentum(e,t,n=!1){return new $k(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,s=!1){return new Fk(e,t,n,r,s)}static adam(e=.001,t=.9,n=.999,r=null){return new Rk(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new _k(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,s=0){return new Dk(e,t,n,r,s)}static adagrad(e,t=.1){return new Ek(e,t)}},eh={sgd:Qf.sgd,momentum:Qf.momentum,adadelta:Qf.adadelta,adagrad:Qf.adagrad,rmsprop:Qf.rmsprop,adamax:Qf.adamax,adam:Qf.adam},zge=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function Ok(){return new Promise(e=>zge(()=>e()))}var G={};Rt(G,{ERF_A1:()=>Xge,ERF_A2:()=>Zge,ERF_A3:()=>Yge,ERF_A4:()=>Jge,ERF_A5:()=>Qge,ERF_P:()=>Kge,PARALLELIZE_THRESHOLD:()=>Q_,SELU_SCALE:()=>wM,SELU_SCALEALPHA:()=>vM,applyActivation:()=>Sk,assertAndGetBroadcastShape:()=>Wn,assertAxesAreInnerMostDims:()=>efe,assertParamsConsistent:()=>Lge,assignToTypedArray:()=>o0e,axesAreInnerMostDims:()=>D_,calculateShapes:()=>u9,checkEinsumDimSizes:()=>p0e,combineLocations:()=>q9,complexWithEvenIndex:()=>n0e,complexWithOddIndex:()=>r0e,computeConv2DInfo:()=>ub,computeConv3DInfo:()=>T9,computeDefaultPad:()=>x_,computeDilation2DInfo:()=>kpe,computeOptimalWindowSize:()=>Vge,computeOutAndReduceShapes:()=>K9,computeOutShape:()=>Bge,computePool2DInfo:()=>N9,computePool3DInfo:()=>Ipe,convertConv2DDataFormat:()=>_9,decodeEinsumEquation:()=>u0e,eitherStridesOrDilationsAreOne:()=>ol,expandShapeToKeepDim:()=>Zf,exponent:()=>i0e,exponents:()=>a0e,fromStringArrayToUint8:()=>A0e,fromUint8ToStringArray:()=>b0e,getAxesPermutation:()=>X9,getBroadcastDims:()=>mde,getComplexWithIndex:()=>s0e,getEinsumComputePath:()=>d0e,getEinsumPermutation:()=>c0e,getFusedBiasGradient:()=>Ck,getFusedDyActivation:()=>Ik,getImageCenter:()=>Wge,getInnerMostAxes:()=>tfe,getPermuted:()=>Uge,getReductionAxes:()=>jr,getReshaped:()=>Gge,getReshapedPermuted:()=>jge,getSliceBeginCoords:()=>Hge,getSliceSize:()=>qge,getUndoAxesPermutation:()=>$_,isIdentityPermutation:()=>f0e,log:()=>Jle,mergeRealAndImagArrays:()=>e0e,prepareAndValidate:()=>l9,prepareSplitSize:()=>m0e,segment_util:()=>CM,shouldFuse:()=>Nk,slice_util:()=>Bs,splitRealAndImagArrays:()=>t0e,tupleValuesAreOne:()=>Gc,upcastType:()=>$a,validateInput:()=>r_,validateUpdateShape:()=>n_,warn:()=>tl});function Lge(e,t){let n=e[0].length;e.forEach((s,o)=>{H(s.length===n,()=>`Error in concat${n}D: rank of tensors[${o}] must be the same as the rank of the rest (${n})`)}),H(t>=0&&t`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let r=e[0];e.forEach((s,o)=>{for(let a=0;a`Error in concat${n}D: Shape of tensors[${o}] (${s}) does not match the shape of the rest (${r}) along the non-concatenated axis ${o}.`)})}function Bge(e,t){let n=e[0].slice();for(let r=1;r=t*2+1||a%2==1?o.push(a):s.push(a);r.push(...s),r.push(0),r.push(...o)}return r}function jge(e,t,n,r=!0){let s=[];r?s.push(e[0]/n):s.push(e[0]*n);for(let o=1;o/g,kM=",",IM="...";function u0e(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(l0e,"").length)/eE.length;if(n<1)throw new Error("Equations without an arrow are not supported.");if(n>1)throw new Error(`Equation must contain exactly one arrow ("${eE}").`);let[r,s]=e.split(eE);H(r.indexOf(IM)===-1,()=>`The ellipsis notation ("${IM}") is not supported yet.`);let o=r.split(kM),a=o.length;if(t!==a)throw new Error(`Expected ${a} input tensors, received ${t}`);if(a>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let d=0;dh.indexOf(f)!==-1))throw new Error(`Output subscripts contain the label ${f} not present in the input subscripts.`);i.indexOf(f)===-1&&i.push(f)}for(let d=0;ds!==-1),{permutationIndices:n,expandDims:r}}function p0e(e,t,n){let r=new Array(e);for(let s=0;s`Expected dimension ${r[t[s][a]]} at axis ${a} of input shaped ${JSON.stringify(o)}, but got dimension ${o[a]}`)}}function d0e(e,t){let n=e,r=[],s=0;e.length===0&&n.push(-1),s=e.length+1;for(let a=0;at===n)}function h0e(e,t){let n=[];for(let r=0;r"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{let s=t.reduce((a,i)=>(i===-1&&(a+=1),a),0);H(s<=1,()=>"There should be only one negative value in split array.");let o=t.indexOf(-1);if(o!==-1){let a=t.reduce((i,l)=>l>0?i+l:i);t[o]=e.shape[n]-a}H(e.shape[n]===t.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}var CM={};Rt(CM,{collectGatherOpShapeInfo:()=>y0e,computeOutShape:()=>x0e,segOpComputeOptimalWindowSize:()=>g0e});function g0e(e,t){let n=!1,r;for(e<=Q_?(r=e,n=!0):r=Jv(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=Jv(e,r+1);return r}function x0e(e,t,n){let r=[],s=e.length;for(let o=0;os))throw new Error(`Expect batchDims in the range of [-${s}, ${s}], but got ${r}`);if(r<0&&(r+=s),r>o)throw new Error(`batchDims (${r}) must be less than rank(x) ( ${o}).`);if(nBw(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function A0e(e){return e.map(t=>Q1(t))}var ll={};Rt(ll,{nonMaxSuppressionV3Impl:()=>fM,nonMaxSuppressionV4Impl:()=>hM,nonMaxSuppressionV5Impl:()=>mM,whereImpl:()=>rM});var SM={kernelName:cg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,E0(Fe(n,"float32"),-1))}}},v0e={kernelName:pg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Tn(Fe(n,"float32")),s=As(Ge(at(1),r));return er(Me(e,s))}}}},w0e={kernelName:dg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=As(Ge(Tn(Fe(n,"float32")),1));return Me(e,r)}}}},k0e={kernelName:$c,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=e,l=jr(n.shape,s);return l.length>0&&(i=Je(i,l)),ie(i,n.shape)},b:()=>{let i=e,l=jr(r.shape,s);return l.length>0&&(i=Je(i,l)),ie(i,r.shape)}}}},I0e={kernelName:Ld,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,s)=>{n[s]=()=>e.clone()}),n}},C0e={kernelName:Bd,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Xt(n)}}},S0e={kernelName:P1,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Xt(n)}}},N0e={kernelName:mg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,As(Ge(at(1),Tn(Fe(n,"float32")))))}}},T0e={kernelName:gg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=As(Re(at(1),Tn(Fe(n,"float32"))));return Me(e,r)}}}},_0e={kernelName:bg,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=Re(Tn(n),Tn(r)),l=te(e,Me(r,i)),u=jr(n.shape,s);return u.length>0&&(l=Je(l,u)),ie(l,n.shape)},b:()=>{let i=Re(Tn(n),Tn(r)),l=er(te(e,Me(n,i))),u=jr(r.shape,s);return u.length>0&&(l=Je(l,u)),ie(l,r.shape)}}}},E0e={kernelName:xg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,Re(Tn(Fe(n,"float32")),1))}}},R0e={kernelName:yg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,Ge(at(1),Tn(Fe(n,"float32"))))}}};function D0e(e,t,n,r,s,o){let a=U(e,"dy","avgPool3dGrad"),i=U(t,"input","avgPool3dGrad"),l=a,u=i,c=!1;i.rank===4&&(c=!0,l=ie(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]]),u=ie(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),H(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),H(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),o!=null&&H(as(s),()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${o} but got pad ${s}.`);let p={dy:l,input:u},d={filterSize:n,strides:r,pad:s,dimRoundingMode:o},f=se.runKernel(tw,p,d);return c?ie(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}var $0e=ae({avgPool3dGrad_:D0e}),F0e={kernelName:M1,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:o,pad:a,dimRoundingMode:i}=n;return{x:()=>$0e(e,r,s,o,a,i)}}};function O0e(e,t,n,r,s){let o=U(e,"dy","avgPoolGrad"),a=U(t,"input","avgPoolGrad");H(a.rank===o.rank,()=>`Rank of input (${a.rank}) does not match rank of dy (${o.rank})`);let i=a,l=o,u=!1;a.rank===3&&(u=!0,i=ie(a,[1,a.shape[0],a.shape[1],a.shape[2]]),l=ie(o,[1,o.shape[0],o.shape[1],o.shape[2]])),H(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),H(i.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${i.rank}.`);let c={dy:l,input:i},p={filterSize:n,strides:r,pad:s},d=se.runKernel(ew,c,p);return u?ie(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var P0e=ae({avgPoolGrad_:O0e}),M0e={kernelName:Vd,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:o,pad:a}=n;return{x:()=>P0e(e,r,s,o,a)}}},z0e={kernelName:Wd,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,s]=t,{transposeA:o,transposeB:a}=n;return!o&&!a?{a:()=>Lt(e,s,!1,!0),b:()=>Lt(r,e,!0,!1)}:!o&&a?{a:()=>Lt(e,s,!1,!1),b:()=>Lt(e,r,!0,!1)}:o&&!a?{a:()=>Lt(s,e,!1,!0),b:()=>Lt(r,e,!1,!1)}:{a:()=>Lt(s,e,!0,!0),b:()=>Lt(e,r,!0,!0)}}},L0e={kernelName:Ag,gradFunc:(e,t,n)=>{let{blockShape:r,crops:s}=n;return{x:()=>yb(e,r,s)}}},B0e={kernelName:SP,gradFunc:(e,t,n)=>{let r=n,s=r.inputShape,o=r.shape,a=Array.from(o);for(let l=s.length-1;l>=0;l--)if(s[l]===o[l])a[l]=1;else if(s[l]!==1)throw new Error(`broadcastTo(): [${s}] cannot be broadcast to [${o}].`);let i=[];for(let l=0;l1&&i.push(l);return{x:()=>Je(e,i,!0)}}},V0e={kernelName:Gd,gradFunc:e=>({x:()=>e.clone()})},W0e={kernelName:Ud,gradFunc:e=>({x:()=>Xt(e)})},G0e={kernelName:Fc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:s,clipValueMax:o}=n;return{x:()=>$s(Fa(Uc(r,s),jc(r,o)),e,Xt(e))}}},U0e={kernelName:z1,inputsToSave:["x"],gradFunc:SM.gradFunc},j0e={kernelName:vg,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(l=>l.shape),{axis:s}=n,o=Ra(s,t[0].shape)[0],a=r.map(l=>l[o]);return _r(e,a,o).map(l=>()=>l)}},H0e={kernelName:jd,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{dilations:o,strides:a,pad:i,dataFormat:l}=n;return H(Gc(o),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${o}'`),{x:()=>w_(r.shape,e,s,a,i,l),filter:()=>Y_(r,e,s.shape,a,i,l)}}},q0e={kernelName:Hd,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{strides:o,pad:a,dataFormat:i,dimRoundingMode:l}=n;return{dy:()=>Bl(e,s,o,a,i,1,l),filter:()=>Y_(e,r,s.shape,o,a,i,l)}}};function K0e(e,t,n,r,s){let o=e;e.rank===4&&(o=ie(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let a=t;a.rank===4&&(a=ie(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),H(o.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${o.shape}.`),H(a.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${a.shape}.`),H(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),H(o.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${o.shape[4]}) must match input depth in filter (${n[3]}.`),H(a.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${a.shape[4]}) must match output depth for filter (${n[4]}).`);let i={x:o,dy:a},l={strides:r,pad:s,filterShape:n};return se.runKernel(ow,i,l)}var X0e=ae({conv3DBackpropFilter_:K0e}),Z0e={kernelName:L1,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:o}=n;H(Gc(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);let[a,i]=t;return{x:()=>M9(a.shape,e,i,s,o),filter:()=>X0e(a,e,i.shape,s,o)}}},Y0e={kernelName:qd,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(er(mk(Fe(n,"float32"))),e)}}},J0e={kernelName:Kd,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(gk(Fe(n,"float32")),e)}}},Q0e={kernelName:Xd,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s,exclusive:o,reverse:a}=n;return{x:()=>{let i=X9([s],r.rank),l=rk(e,s,o,!a);return i!=null&&(l=Kt(l,i)),l}}}},exe={kernelName:Zd,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:o,dimRoundingMode:a}=n,i=r==null?[1,1]:r;H(Gc(i),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);let[l,u]=t;return H(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),H(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),H(l.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),H(ol(s,i),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${s} and dilations '${i}'.`),a!=null&&H(as(o),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`),{x:()=>cM(l.shape,e,u,s,o,i,a),filter:()=>uM(l,e,u.shape,s,o,i,a)}}},txe={kernelName:B1,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,o={x:r,filter:s,dy:e},a={x:r,filter:s,dy:e};return{x:()=>se.runKernel(pw,o,n),filter:()=>se.runKernel(dw,a,n)}}},nxe={kernelName:Jd,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>se.runKernel(hw,r)}}},rxe={kernelName:Ig,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=te(Bo(er(Tn(n))),2/Math.sqrt(Math.PI));return{x:()=>te(e,r)}}},sxe={kernelName:Qd,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,n)}}},oxe={kernelName:Sg,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>ie(e,n.shape)}}},axe={kernelName:Ng,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,Bo(n))}}},ixe={kernelName:ef,gradFunc:e=>({x:()=>Xt(e)})},lxe={kernelName:tf,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=Me(e,Fe(r,"float32")),l=jr(n.shape,s);return l.length>0?ie(Je(i,l),n.shape):i},b:()=>{let i=te(e,Fe(n,"float32")),l=jr(r.shape,s);l.length>0&&(i=ie(Je(i,l),r.shape));let u=Tn(r);return er(Me(i,Fe(u,"float32")))}}}},uxe={kernelName:nf,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[s,o,a,i]=t,l=i==null?at(1):i,u=jr(o.shape,s.shape),c=[];if(o.rank===1){for(let A=0;Ao.rank===1?ie(te(te(e,da(ie(f,[1,1,1,o.shape[0]]),c)),l),s.shape):ie(te(te(e,f),l),s.shape),mean:()=>{let A=te(te(f,at(-1)),d);return o.rank===1&&(A=Je(A,u)),ie(A,o.shape)},variance:()=>{let A=te(te(h,p),d);return o.rank===1&&(A=Je(A,u)),ie(A,o.shape)},scale:()=>{let A=te(p,f),v=te(e,A);return o.rank===1&&(v=Je(v,u)),ie(v,o.shape)},offset:()=>{let A=e;return o.rank===1&&(A=Je(A,u)),ie(A,o.shape)}}}},cxe={kernelName:_g,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,s]=t,{axis:o}=n,a=Ra(o,r.shape)[0];return{x:()=>{let l=r.shape,u=s.size,c=l.slice(0,a),p=c.length,d=l.slice(o,l.length).slice(1),f=d.length,h=NM(0,p),m=NM(p+1,p+1+f),g=TM([c,[u],d]),x=ie(e,g),y=ie(s,[u]),b=TM([[p],h,m]),A=Kt(x,b),v=q_(A,y,r.shape[a]),w=$_(b);return v=Kt(v,w),v},indices:()=>s}}};function NM(e,t){let n=[];for(let r=e;r{let[n,r]=t;return{a:()=>Xt(n),b:()=>Xt(r)}}},dxe={kernelName:sf,gradFunc:e=>({x:()=>Fe(e,"float32")})},fxe={kernelName:Dg,gradFunc:e=>({x:()=>Xt(e)})},hxe={kernelName:$g,gradFunc:e=>({x:()=>Xt(e)})},mxe={kernelName:Fg,gradFunc:e=>({x:()=>Xt(e)})},gxe={kernelName:of,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:s}=n,o=bo(r,0);return{x:()=>$s(o,e,te(e,s))}}},xxe={kernelName:Mg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,Re(n,1))}}},yxe={kernelName:af,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,Fe(n,"float32"))}}},bxe={kernelName:NP,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n;return{logits:()=>{let o=!0,a=Bo(r);return Ge(e,te(Je(e,s,o),a))}}}};function Axe(e,t,n,r=5,s=1,o=1,a=.5){let i={x:e,y:t,dy:n},l={depthRadius:r,bias:s,alpha:o,beta:a};return se.runKernel(bw,i,l)}var vxe=ae({localResponseNormalizationBackprop_:Axe}),wxe={kernelName:U1,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{depthRadius:o,bias:a,alpha:i,beta:l}=n;return{x:()=>vxe(r,s,e,o,a,i,l)}}};function _M(e,t,n,r){return t.rankte(e,Fe(Lo(n,t),e.dtype))}}var EM={kernelName:lf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:s}=r,o=t[0],a=t[1],i=Ra(s,o.shape),l=_M(e,a,o,i);return{x:()=>l.x()}}},kxe={kernelName:uf,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>te(e,Fe(Uc(n,r),"float32")),b:()=>te(e,Fe(ok(n,r),"float32"))}}};function Ixe(e,t,n,r,s,o,a){let i=U(e,"dy","maxPool3dGrad"),l=U(t,"input","maxPool3dGrad"),u=U(n,"output","maxPool3dGrad"),c=i,p=l,d=u,f=!1;l.rank===4&&(f=!0,c=ie(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),p=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),d=ie(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),H(c.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`),H(p.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${p.rank}.`),H(d.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${d.rank}.`),a!=null&&H(as(o),()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);let h={dy:c,input:p,output:d},m={filterSize:r,strides:s,pad:o,dimRoundingMode:a},g=se.runKernel(vw,h,m);return f?ie(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var Cxe=ae({maxPool3dGrad_:Ixe}),Sxe={kernelName:j1,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l}=n;return{x:()=>Cxe(e,r,s,o,a,i,l)}}};function Nxe(e,t,n,r,s,o,a){let i=U(e,"dy","maxPoolGrad"),l=U(t,"input","maxPoolGrad"),u=U(n,"output","maxPoolGrad");H(l.rank===i.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${i.rank})`),H(i.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${i.rank}.`),H(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),a!=null&&H(as(o),()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);let c={dy:i,input:l,output:u},p={filterSize:r,strides:s,pad:o,dimRoundingMode:a};return se.runKernel(Aw,c,p)}var Txe=ae({maxPoolGrad_:Nxe}),_xe={kernelName:cf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:o,strides:a,pad:i}=n;return{x:()=>Txe(e,r,s,o,a,i)}}},Exe={kernelName:pf,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n,o=Ra(s,r.shape),i=K9(r.shape,o)[1],l=wr(i);return{x:()=>{let c=r.shape.slice();o.forEach(f=>{c[f]=1});let p=ie(e,c);return Me(te(p,Go(r.shape,"float32")),l)}}}},Rxe={kernelName:df,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:s}=r,[o,a]=t,i=Ra(s,o.shape),l=_M(e,a,o,i);return{x:()=>l.x()}}},Dxe={kernelName:ff,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>te(e,Fe(jc(n,r),"float32")),b:()=>te(e,Fe(bo(n,r),"float32"))}}},$xe={kernelName:hf,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,o=s.map(a=>a[0]);return{x:()=>gt(e,o,r.shape)}}},Fxe={kernelName:Lg,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=jr(n.shape,s);return i.length>0?ie(Je(e,i),n.shape):e},b:()=>{let i=te(e,er(C0(Me(n,r)))),l=jr(r.shape,s);return l.length>0?ie(Je(i,l),r.shape):i}}}},Oxe={kernelName:mf,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=te(e,Fe(r,"float32")),l=jr(n.shape,s);return l.length>0?ie(Je(i,l),n.shape):i},b:()=>{let i=te(e,Fe(n,"float32")),l=jr(r.shape,s);return l.length>0?ie(Je(i,l),r.shape):i}}}},Pxe={kernelName:Bg,gradFunc:e=>({x:()=>er(e)})},Mxe={kernelName:gf,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>xr(n.shape,"float32")}}},zxe={kernelName:jg,gradFunc:e=>({x:()=>Xt(e)})},Lxe={kernelName:Hg,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return Vs(e,r).map(o=>()=>o)}},RM={kernelName:xf,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,o=s.map(a=>a[0]);return{x:()=>gt(e,o,r.shape)}}},Bxe={kernelName:yf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,s]=t,o=n,a=r,i=Wn(o.shape,a.shape);return{a:()=>{let c=Fe(a,"float32"),p=te(e,te(c,Wl(o,Ge(c,at(1))))),d=jr(o.shape,i);return d.length>0&&(p=Je(p,d)),ie(p,o.shape)},b:()=>{let c=bo(o,0),p=$s(c,Vo(o),Xt(o)),d=te(e,te(s,p)),f=jr(a.shape,i);return f.length>0&&(d=Je(d,f)),ie(d,a.shape)}}}},Vxe={kernelName:bf,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,s=bo(n,0);return{x:()=>$s(s,e,te(e,r)),alpha:()=>{let o=$s(s,Xt(e),te(e,n)),a=jr(r.shape,e.shape);return a.length>0&&(o=Je(o,a)),ie(o,r.shape)}}}},Wxe={kernelName:Yd,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=Me(e,Fe(r,"float32")),l=jr(n.shape,s);return l.length>0?ie(Je(i,l),n.shape):i},b:()=>{let i=te(e,Fe(n,"float32")),l=jr(r.shape,s);l.length>0&&(i=ie(Je(i,l),r.shape));let u=Tn(r);return er(Me(i,Fe(u,"float32")))}}}},Gxe={kernelName:Kg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,er(Tn(n)))}}},Uxe={kernelName:wf,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=te(jc(n,6),E0(n));return{x:()=>te(e,Fe(r,"float32"))}}},jxe={kernelName:Af,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,Fe(E0(n),"float32"))}}},Hxe={kernelName:Xg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ie(e,n.shape)}}},qxe={kernelName:vf,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>se.runKernel(Sw,s,n)}}},Kxe={kernelName:q1,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>se.runKernel(Cw,s,n)}}},Xxe={kernelName:kf,gradFunc:(e,t,n)=>{let{dims:r}=n,s=Ra(r,e.shape);return{x:()=>jo(e,s)}}},Zxe={kernelName:If,gradFunc:e=>({x:()=>Xt(e)})},Yxe={kernelName:Cf,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>er(Me(e,te(Wl(n,1.5),2)))}}},Jxe={kernelName:Yg,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>Fe(Xt(n),"float32"),t:()=>te(e,Fe(n,e.dtype)),e:()=>te(e,Fe(mb(n),e.dtype))}}},Qxe={kernelName:Jg,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=bo(n,at(0)),s=at(vM),o=at(wM),a=te(e,o),i=te(te(e,s),Bo(Fe(n,"float32")));return $s(r,a,i)}}}},eye={kernelName:Nf,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,te(n,Ge(at(1),n)))}}},tye={kernelName:t0,gradFunc:e=>({x:()=>Xt(e)})},nye={kernelName:Sf,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(db(Fe(n,"float32")),e)}}},rye={kernelName:e0,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(nk(Fe(n,"float32")),e)}}},sye={kernelName:Qg,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:s,size:o}=n,a=r.shape,[i,l]=A9(r,s,o),u=[];for(let c=0;cVl(e,u)}}},oye={kernelName:Ef,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:s}=n,o=!0,a=te(e,r);return{logits:()=>Ge(a,te(Je(a,[s],o),r))}}},aye={kernelName:n0,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,xo(n))}}},DM={kernelName:r0,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:s}=n;return{x:()=>pb(e,r,s)}}},$M={kernelName:s0,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>En(e,r)}}},iye={kernelName:Tf,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,te(As(Fe(n,"float32")),2))}}},lye={kernelName:K1,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(e,te(Fe(n,"float32"),2))}}},uye={kernelName:Rf,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=at(2);return{a:()=>te(e,te(s,Ge(n,r))),b:()=>te(e,te(s,Ge(r,n)))}}},cye={kernelName:Pc,gradFunc:e=>({x:()=>Xt(e)})},pye={kernelName:Df,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Wn(n.shape,r.shape);return{a:()=>{let i=e,l=jr(n.shape,s);return l.length>0&&(i=Je(i,l)),ie(i,n.shape)},b:()=>{let i=e,l=jr(r.shape,s);return l.length>0&&(i=Je(i,l)),ie(er(i),r.shape)}}}},dye={kernelName:_f,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,s=r.shape.slice(),{axis:o}=n;Ra(o,r.shape).forEach(u=>{s[u]=1});let i=ie(e,s),l=te(i,Go(r.shape,"float32"));return{x:()=>l}}},fye={kernelName:$f,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Me(e,Tn(db(n)))}}},hye={kernelName:Ff,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>te(Ge(at(1),Tn(n)),e)}}},mye={kernelName:Oc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:s}=n;return{x:()=>{let a=Xt(r);if(r.rank===1)for(let i=0;i{let r=n,{perm:s}=r,o=$_(s);return{x:()=>Kt(e,o)}}},xye={kernelName:l0,gradFunc:(e,t,n)=>{let r=n,{axis:s}=r;return{value:()=>vs(e,s)}}},yye={kernelName:X1,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>bye(e,n)}}};function bye(e,t){let n=il(t,Xt(t)),r=Kf(e,n),s=Uc(t,at(0,"int32")),o=r.rank-s.rank;for(let i=0;i({x:()=>Xt(e)})},vye=[SM,v0e,w0e,k0e,I0e,C0e,S0e,N0e,T0e,_0e,E0e,R0e,F0e,M0e,z0e,L0e,B0e,V0e,W0e,G0e,U0e,j0e,q0e,H0e,Z0e,Y0e,J0e,Q0e,exe,txe,Wxe,nxe,rxe,sxe,oxe,axe,lxe,ixe,uxe,cxe,pxe,dxe,fxe,hxe,mxe,gxe,xxe,yxe,bxe,wxe,EM,EM,kxe,Sxe,_xe,Exe,Rxe,Dxe,$xe,Fxe,Oxe,Pxe,Mxe,zxe,Lxe,RM,RM,Bxe,Vxe,Gxe,Uxe,jxe,Hxe,qxe,Kxe,Xxe,Zxe,Yxe,Jxe,Qxe,eye,tye,nye,rye,sye,oye,aye,DM,DM,$M,$M,iye,uye,lye,cye,pye,dye,fye,hye,mye,gye,xye,yye,Aye];for(let e of vye)TP(e);ve().prototype.abs=function(){return this.throwIfDisposed(),Tr(this)};ve().prototype.acos=function(){return this.throwIfDisposed(),u_(this)};ve().prototype.acosh=function(){return this.throwIfDisposed(),c_(this)};ve().prototype.add=function(e){return this.throwIfDisposed(),Re(this,e)};ve().prototype.all=function(e,t){return this.throwIfDisposed(),Jw(this,e,t)};ve().prototype.any=function(e,t){return this.throwIfDisposed(),lb(this,e,t)};ve().prototype.argMax=function(e){return this.throwIfDisposed(),xi(this,e)};ve().prototype.argMin=function(e){return this.throwIfDisposed(),p_(this,e)};ve().prototype.asScalar=function(){return this.throwIfDisposed(),H(this.size===1,()=>"The array must have only 1 element."),ie(this,[])};ve().prototype.asType=function(e){return this.throwIfDisposed(),Fe(this,e)};ve().prototype.as1D=function(){return this.throwIfDisposed(),ie(this,[this.size])};ve().prototype.as2D=function(e,t){return this.throwIfDisposed(),ie(this,[e,t])};ve().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),ie(this,[e,t,n])};ve().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),ie(this,[e,t,n,r])};ve().prototype.as5D=function(e,t,n,r,s){return this.throwIfDisposed(),ie(this,[e,t,n,r,s])};ve().prototype.asin=function(){return this.throwIfDisposed(),d_(this)};ve().prototype.asinh=function(){return this.throwIfDisposed(),f_(this)};ve().prototype.atan=function(){return this.throwIfDisposed(),h_(this)};ve().prototype.atan2=function(e){return this.throwIfDisposed(),m_(this,e)};ve().prototype.atanh=function(){return this.throwIfDisposed(),g_(this)};ve().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),cb(this,e,t,n,r)};ve().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),pb(this,e,t)};ve().prototype.batchNorm=function(e,t,n,r,s){return this.throwIfDisposed(),qf(this,e,t,n,r,s)};ve().prototype.broadcastTo=function(e){return this.throwIfDisposed(),A0(this,e)};ve().prototype.cast=function(e){return this.throwIfDisposed(),Fe(this,e)};ve().prototype.ceil=function(){return this.throwIfDisposed(),v_(this)};ve().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),yo(this,e,t)};ve().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof Vt&&(e=[e]),En([this,...e],t)};ve().prototype.conv1d=function(e,t,n,r,s,o){return this.throwIfDisposed(),ek(this,e,t,n,r,s,o)};ve().prototype.conv2dTranspose=function(e,t,n,r,s){return this.throwIfDisposed(),tk(this,e,t,n,r,s)};ve().prototype.conv2d=function(e,t,n,r,s,o){return this.throwIfDisposed(),Bl(this,e,t,n,r,s,o)};ve().prototype.cos=function(){return this.throwIfDisposed(),db(this)};ve().prototype.cosh=function(){return this.throwIfDisposed(),nk(this)};ve().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),rk(this,e,t,n)};ve().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),I_(this,e,t)};ve().prototype.depthwiseConv2d=function(e,t,n,r,s,o){return this.throwIfDisposed(),w0(this,e,t,n,r,s,o)};ve().prototype.dilation2d=function(e,t,n,r,s){return this.throwIfDisposed(),C_(this,e,t,n,r,s)};ve().prototype.divNoNan=function(e){return this.throwIfDisposed(),S_(this,e)};ve().prototype.div=function(e){return this.throwIfDisposed(),Me(this,e)};ve().prototype.dot=function(e){return this.throwIfDisposed(),B9(this,e)};ve().prototype.elu=function(){return this.throwIfDisposed(),k0(this)};ve().prototype.equal=function(e){return this.throwIfDisposed(),Lo(this,e)};ve().prototype.erf=function(){return this.throwIfDisposed(),N_(this)};ve().prototype.exp=function(){return this.throwIfDisposed(),Bo(this)};ve().prototype.expandDims=function(e){return this.throwIfDisposed(),kr(this,e)};ve().prototype.expm1=function(){return this.throwIfDisposed(),T_(this)};ve().prototype.fft=function(){return this.throwIfDisposed(),wb(this)};ve().prototype.flatten=function(){return this.throwIfDisposed(),ie(this,[this.size])};ve().prototype.floor=function(){return this.throwIfDisposed(),C0(this)};ve().prototype.floorDiv=function(e){return this.throwIfDisposed(),Zw(this,e)};ve().prototype.gather=function(e,t){return this.throwIfDisposed(),Kf(this,e,t)};ve().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Uc(this,e)};ve().prototype.greater=function(e){return this.throwIfDisposed(),bo(this,e)};ve().prototype.ifft=function(){return this.throwIfDisposed(),_0(this)};ve().prototype.irfft=function(){return this.throwIfDisposed(),bk(this)};ve().prototype.isFinite=function(){return this.throwIfDisposed(),W9(this)};ve().prototype.isInf=function(){return this.throwIfDisposed(),G9(this)};ve().prototype.isNaN=function(){return this.throwIfDisposed(),E_(this)};ve().prototype.leakyRelu=function(e){return this.throwIfDisposed(),fb(this,e)};ve().prototype.lessEqual=function(e){return this.throwIfDisposed(),jc(this,e)};ve().prototype.less=function(e){return this.throwIfDisposed(),ok(this,e)};ve().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),R_(this,e,t,n,r)};ve().prototype.logSigmoid=function(){return this.throwIfDisposed(),H9(this)};ve().prototype.logSoftmax=function(e){return this.throwIfDisposed(),ik(this,e)};ve().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),F_(this,e,t)};ve().prototype.log=function(){return this.throwIfDisposed(),Vo(this)};ve().prototype.log1p=function(){return this.throwIfDisposed(),hb(this)};ve().prototype.logicalAnd=function(e){return this.throwIfDisposed(),Fa(this,e)};ve().prototype.logicalNot=function(){return this.throwIfDisposed(),mb(this)};ve().prototype.logicalOr=function(e){return this.throwIfDisposed(),lk(this,e)};ve().prototype.logicalXor=function(e){return this.throwIfDisposed(),Z9(this,e)};ve().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Lt(this,e,t,n)};ve().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),gb(this,e,t,n,r)};ve().prototype.max=function(e,t){return this.throwIfDisposed(),Wo(this,e,t)};ve().prototype.maximum=function(e){return this.throwIfDisposed(),il(this,e)};ve().prototype.mean=function(e,t){return this.throwIfDisposed(),cr(this,e,t)};ve().prototype.min=function(e,t){return this.throwIfDisposed(),xb(this,e,t)};ve().prototype.minimum=function(e){return this.throwIfDisposed(),S0(this,e)};ve().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),P_(this,e,t)};ve().prototype.mod=function(e){return this.throwIfDisposed(),M_(this,e)};ve().prototype.mul=function(e){return this.throwIfDisposed(),te(this,e)};ve().prototype.neg=function(){return this.throwIfDisposed(),er(this)};ve().prototype.norm=function(e,t,n){return this.throwIfDisposed(),kk(this,e,t,n)};ve().prototype.notEqual=function(e){return this.throwIfDisposed(),Yf(this,e)};ve().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),g0(this,e,t,n)};ve().prototype.onesLike=function(){return this.throwIfDisposed(),Uo(this)};ve().prototype.pad=function(e,t){return this.throwIfDisposed(),Vl(this,e,t)};ve().prototype.pool=function(e,t,n,r,s){return this.throwIfDisposed(),Q9(this,e,t,n,r,s)};ve().prototype.pow=function(e){return this.throwIfDisposed(),Wl(this,e)};ve().prototype.prelu=function(e){return this.throwIfDisposed(),bb(this,e)};ve().prototype.prod=function(e,t){return this.throwIfDisposed(),ck(this,e,t)};ve().prototype.reciprocal=function(){return this.throwIfDisposed(),B_(this)};ve().prototype.relu=function(){return this.throwIfDisposed(),yi(this)};ve().prototype.relu6=function(){return this.throwIfDisposed(),pk(this)};ve().prototype.reshapeAs=function(e){return this.throwIfDisposed(),ie(this,e.shape)};ve().prototype.reshape=function(e){return this.throwIfDisposed(),ie(this,e)};ve().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),xM(this,e,t,n)};ve().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),yM(this,e,t,n)};ve().prototype.reverse=function(e){return this.throwIfDisposed(),jo(this,e)};ve().prototype.rfft=function(){return this.throwIfDisposed(),kb(this)};ve().prototype.round=function(){return this.throwIfDisposed(),dk(this)};ve().prototype.rsqrt=function(){return this.throwIfDisposed(),fk(this)};ve().prototype.selu=function(){return this.throwIfDisposed(),hk(this)};ve().prototype.separableConv2d=function(e,t,n,r,s,o){return this.throwIfDisposed(),V_(this,e,t,n,r,s,o)};ve().prototype.sigmoid=function(){return this.throwIfDisposed(),xo(this)};ve().prototype.sign=function(){return this.throwIfDisposed(),W_(this)};ve().prototype.sin=function(){return this.throwIfDisposed(),mk(this)};ve().prototype.sinh=function(){return this.throwIfDisposed(),gk(this)};ve().prototype.slice=function(e,t){return this.throwIfDisposed(),gt(this,e,t)};ve().prototype.softmax=function(e){return this.throwIfDisposed(),Jf(this,e)};ve().prototype.softplus=function(){return this.throwIfDisposed(),Xf(this)};ve().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),yb(this,e,t)};ve().prototype.split=function(e,t){return this.throwIfDisposed(),_r(this,e,t)};ve().prototype.sqrt=function(){return this.throwIfDisposed(),As(this)};ve().prototype.square=function(){return this.throwIfDisposed(),Tn(this)};ve().prototype.squaredDifference=function(e){return this.throwIfDisposed(),Ak(this,e)};ve().prototype.squeeze=function(e){return this.throwIfDisposed(),ln(this,e)};ve().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof Vt?[this,e]:[this,...e];return vs(n,t)};ve().prototype.step=function(e){return this.throwIfDisposed(),E0(this,e)};ve().prototype.stridedSlice=function(e,t,n,r,s,o,a,i){return this.throwIfDisposed(),U_(this,e,t,n,r,s,o,a,i)};ve().prototype.sub=function(e){return this.throwIfDisposed(),Ge(this,e)};ve().prototype.sum=function(e,t){return this.throwIfDisposed(),Je(this,e,t)};ve().prototype.tan=function(){return this.throwIfDisposed(),j_(this)};ve().prototype.tanh=function(){return this.throwIfDisposed(),Hf(this)};ve().prototype.tile=function(e){return this.throwIfDisposed(),da(this,e)};ve().prototype.toBool=function(){return this.throwIfDisposed(),Fe(this,"bool")};ve().prototype.toFloat=function(){return this.throwIfDisposed(),Fe(this,"float32")};ve().prototype.toInt=function(){return this.throwIfDisposed(),Fe(this,"int32")};ve().prototype.topk=function(e,t){return this.throwIfDisposed(),H_(this,e,t)};ve().prototype.transpose=function(e){return this.throwIfDisposed(),Kt(this,e)};ve().prototype.unique=function(e){return this.throwIfDisposed(),wk(this,e)};ve().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),q_(this,e,t)};ve().prototype.unstack=function(e){return this.throwIfDisposed(),Vs(this,e)};ve().prototype.where=function(e,t){return this.throwIfDisposed(),$s(e,this,t)};ve().prototype.zerosLike=function(){return this.throwIfDisposed(),Xt(this)};var FM={};Rt(FM,{maxNorm:()=>Cye,minMaxNorm:()=>Tye,nonNeg:()=>Nye,unitNorm:()=>Sye});var tE;function Hr(){return tE==null&&(tE=sl().epsilon()),tE}function Ai(){return"channelsLast"}var jl=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,jl.prototype)}},vi=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,vi.prototype)}},pe=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,pe.prototype)}},Et=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Et.prototype)}},OM=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,OM.prototype)}};function th(e,t){if(Array.isArray(e)){let n=[];for(let r=0;rn.toUpperCase())}var Oa={};function nE(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function rE(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>rE(t));else{let t=Object.keys(e);for(let n of t){let r=e[n];r!=null&&typeof r=="object"&&(!Array.isArray(r)&&r.type==="ndarray"&&typeof r.value=="number"?e[n]=r.value:rE(r))}}}function Sb(e,t={},n={},r="object",s=!1){if(typeof e=="string"){let o=e,a;if(o in n)a=n[o];else if(o in Oa)a=Oa[o];else if(a=t[o],a==null)throw new pe(`Unknown ${r}: ${e}. This may be due to one of the following reasons: 1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. 2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return a}else{let o=e;if(o.className==null||o.config==null)throw new pe(`${r}: Improper config format: ${JSON.stringify(o)}. 'className' and 'config' must set.`);let a=o.className,i,l;if(a in n?[i,l]=n[a]:a in Oa?[i,l]=Oa.className:a in t&&([i,l]=t[a]),i==null)throw new pe(`Unknown ${r}: ${a}. This may be due to one of the following reasons: 1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. 2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(l!=null){let u={};for(let f of Object.keys(Oa))u[f]=Oa[f];for(let f of Object.keys(n))u[f]=n[f];let c=o.config;c.customObjects=u;let p=Object.assign({},Oa);for(let f of Object.keys(n))Oa[f]=n[f];rE(o.config);let d=l(i,o.config,n,s);return Oa=Object.assign({},p),d}else{let u=Object.assign({},Oa);for(let p of Object.keys(n))Oa[p]=n[p];let c=new i(o.config);return Oa=Object.assign({},u),c}}}function wye(e,t){return et?1:0}function Pk(e,t){return-1*wye(e,t)}function qc(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function kye(e){if(e==null)throw new pe(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function rh(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new pe(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function sE(e,t,n=0,r=1/0){return ul(n>=0),ul(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every(s=>typeof s===t)}function cs(e,t){Array.isArray(e)?(E.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>cs(n,`element ${r+1} of ${t}`))):E.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${MM(e)}.`)}function MM(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>MM(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function Iye(e,t){let n=E.now(),r;return(...o)=>{let a=E.now();return a-nAs(Je(te(e,e),t,!0)))}var Nb=class extends De.Serializable{getConfig(){return{}}},aE=class extends Nb{constructor(e){super();this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return ce(()=>{let t=oE(e,this.axis),n=yo(t,0,this.maxValue);return te(e,Me(n,Re(Hr(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};aE.className="MaxNorm";De.registerClass(aE);var iE=class extends Nb{constructor(e){super();this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return ce(()=>Me(e,Re(Hr(),oE(e,this.axis))))}getConfig(){return{axis:this.axis}}};iE.className="UnitNorm";De.registerClass(iE);var lE=class extends Nb{apply(e){return yi(e)}};lE.className="NonNeg";De.registerClass(lE);var uE=class extends Nb{constructor(e){super();this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=e.minValue!=null?e.minValue:this.defaultMinValue,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.rate=e.rate!=null?e.rate:this.defaultRate,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return ce(()=>{let t=oE(e,this.axis),n=Re(te(this.rate,yo(t,this.minValue,this.maxValue)),te(1-this.rate,t));return te(e,Me(n,Re(Hr(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};uE.className="MinMaxNorm";De.registerClass(uE);var LM={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function qr(e){return nE(e)}function BM(e,t={}){return Sb(e,De.SerializationMap.getMap().classNameMap,t,"constraint")}function Kr(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in LM?LM[e]:e,config:{}};return BM(n)}else return e instanceof Nb?e:BM(e)}function Cye(e){return new aE(e)}function Sye(e){return new iE(e)}function Nye(){return new lE}function Tye(e){return new uE(e)}var VM={};Rt(VM,{constant:()=>Yye,glorotNormal:()=>s1e,glorotUniform:()=>r1e,heNormal:()=>o1e,heUniform:()=>a1e,identity:()=>t1e,leCunNormal:()=>i1e,leCunUniform:()=>l1e,ones:()=>Zye,orthogonal:()=>u1e,randomNormal:()=>Qye,randomUniform:()=>Jye,truncatedNormal:()=>e1e,varianceScaling:()=>n1e,zeros:()=>Xye});var _ye=["channelsFirst","channelsLast"],Eye=["nearest","bilinear"],Rye=["valid","same","causal"],Dye=["max","avg"],$ye=["sum","mul","concat","ave"],D0=new Map;function Ir(e){rh(_ye,"DataFormat",e)}function Fye(e){rh(Eye,"InterpolationFormat",e)}function fa(e){rh(Rye,"PaddingMode",e)}function WM(e){rh(Dye,"PoolMode",e)}var Tb=[],GM="/";function sh(e,t){Tb.push(e);try{let n=t();return Tb.pop(),n}catch(n){throw Tb.pop(),n}}function Oye(){return Tb.length===0?"":Tb.join(GM)+GM}function UM(e){if(!HM(e))throw new Error("Not a valid tensor name: '"+e+"'");return Oye()+e}function jM(e){if(!HM(e))throw new Error("Not a valid tensor name: '"+e+"'");D0.has(e)||D0.set(e,0);let t=D0.get(e);if(D0.set(e,D0.get(e)+1),t>0){let n=`${e}_${t}`;return D0.set(n,1),n}else return e}var Pye=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function HM(e){return!!e.match(Pye)}function Mye(e){return e===parseInt(e.toString(),10)}function Kc(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let s=t;st&&(t=r)}return t}function wi(e,t){if(t{if(e.shape.length!==2)throw new pe(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=_b(e,1);return dE(n,[1,t,1])})}function Lye(e){let t=[Kc(e.shape)];return ie(e,t)}function Bye(e){if(e.rank<=1)throw new pe(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],Kc(e.shape,1)];return ie(e,t)}function oh(e,t,n){return ce(()=>{switch(e.rank){case 1:return xk(e,t,n);case 2:return G_(e,[t,0],[n,e.shape[1]]);case 3:return yk(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return vb(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return gt(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return gt(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new pe(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function cE(e,t,n){return ce(()=>{switch(e.rank){case 1:return xk(e,t,n);case 2:return G_(e,[0,t],[e.shape[0],n]);case 3:return yk(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return vb(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new pe(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function zk(e,t,n,r){return ce(()=>{switch(e.rank){case 1:return xk(e,t,n);case 2:switch(r){case 1:return oh(e,t,n);case 2:return cE(e,t,n);default:throw new pe(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return oh(e,t,n);case 2:return yk(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return cE(e,t,n);default:throw new pe(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return oh(e,t,n);case 2:return vb(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return vb(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return cE(e,t,n);default:throw new pe(`The axis is not within the rank of the tensor ${r}`)}default:throw new pe(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function pE(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),En(e,t)}function qM(e,t){switch(e.rank){case 1:return F9([e,t]);case 2:return v0([e,t],0);case 3:return O9([e,t],0);case 4:return P9([e,t],0);default:throw new pe(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function dE(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new pe(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return da(e,t)}function Lk(e,t=0,n=1,r,s){return eM(e,t,n,r,s)}function cl(e,t,n,r){if(e.rank<2||t.rank<2)throw new Et(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let s=e.shape.slice(-1)[0],o=t.shape.slice(-2)[0];if(s!==o)throw new Et(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2){let s=!1,o=!1;return Hc.matMul({a:e,b:t,transposeA:s,transposeB:o,bias:r?fE(e.rank,r,Ai()):null,activation:n})}else{let s=e.shape.slice(),o=s.pop();e=ie(e,[-1,o]);let a=t.shape.slice(),i=a.pop(),l=a.pop(),u=[...a,i],c=Array.from({length:t.rank},(h,m)=>m===0?t.rank-2:m<=t.rank-2?m-1:m);t=ie(Kt(t,c),[l,-1]);let p=[...s,...u],d=!1,f=!1;return ie(Hc.matMul({a:e,b:t,transposeA:d,transposeB:f,bias:r?fE(e.rank,r,Ai()):null,activation:n}),p)}}function KM(e,t,n){return ce(()=>(Array.isArray(t)?t=Er(t,"int32"):t=Fe(t,"int32"),Kf(e,t,n)))}function Eb(e){return te(e,e)}function fE(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new pe(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return r.length===1?ie(t,[1,r[0],1,1,1]):ie(t,[1,r[3],r[0],r[1],r[2]]);if(n==="channelsLast")return r.length===1?ie(t,[1,1,1,1,r[0]]):ie(t,[1].concat(r))}else if(e===4){if(n==="channelsFirst")return r.length===1?ie(t,[1,r[0],1,1]):ie(t,[1,r[2],r[0],r[1]]);if(n==="channelsLast")return r.length===1?ie(t,[1,1,1,r[0]]):ie(t,[1].concat(r))}else if(e===3){if(n==="channelsFirst")return r.length===1?ie(t,[1,r[0],1]):ie(t,[1,r[1],r[0]]);if(n==="channelsLast")return r.length===1?ie(t,[1,1,r[0]]):ie(t,[1].concat(r))}else if(e<3)return t;throw new pe(`Unsupported input rank by biasAdd: ${t.rank}`)}function ki(e,t,n){return ce(()=>(n==null&&(n=Ai()),Ir(n),Re(e,fE(e.rank,t,n))))}function Vye(e,t=1){if(t!==1)throw new Et(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return k0(e)}function Wye(e){return ce(()=>Me(e,Re(Tr(e),1)))}function XM(e,t,n,r){return ce(()=>iM(e,t,n,r))}function Gye(e){return ce(()=>{let t=Re(.5,te(.2,e));return yo(t,0,1)})}function Rb(e,t,n=!1){return n?e():t()}var Uye=["fanIn","fanOut","fanAvg"],jye=["normal","uniform","truncatedNormal"];function Hye(e){rh(Uye,"FanMode",e)}function qye(e){rh(jye,"Distribution",e)}var Pa=class extends De.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},hE=class extends Pa{apply(e,t){return xr(e,t)}};hE.className="Zeros";De.registerClass(hE);var Bk=class extends Pa{apply(e,t){return Go(e,t)}};Bk.className="Ones";De.registerClass(Bk);var mE=class extends Pa{constructor(e){super();if(typeof e!="object")throw new pe(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new pe(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return ce(()=>te(at(this.value),Go(e,t)))}getConfig(){return{value:this.value}}};mE.className="Constant";De.registerClass(mE);var gE=class extends Pa{constructor(e){super();this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return N0(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};gE.className="RandomUniform";De.registerClass(gE);var xE=class extends Pa{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Et(`randomNormal does not support dType ${t}.`);return Lk(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};xE.className="RandomNormal";De.registerClass(xE);var yE=class extends Pa{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Et(`truncatedNormal does not support dType ${t}.`);return vk(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};yE.className="TruncatedNormal";De.registerClass(yE);var bE=class extends Pa{constructor(e){super();this.gain=e.gain!=null?e.gain:1}apply(e,t){return ce(()=>{if(e.length!==2||e[0]!==e[1])throw new pe("Identity matrix initializer can only be used for 2D square matrices.");return te(this.gain,__(e[0]))})}getConfig(){return{gain:this.gain}}};bE.className="Identity";De.registerClass(bE);function Kye(e,t="channelsLast"){let n,r;if(Ir(t),e.length===2)n=e[0],r=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let s=Kc(e,2);n=e[1]*s,r=e[0]*s}else if(t==="channelsLast"){let s=Kc(e,0,e.length-2);n=e[e.length-2]*s,r=e[e.length-1]*s}}else{let s=Kc(e);n=Math.sqrt(s),r=Math.sqrt(s)}return[n,r]}var vo=class extends Pa{constructor(e){super();if(e.scale<0)throw new pe(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,Hye(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,qye(this.distribution),this.seed=e.seed}apply(e,t){let n=Kye(e),r=n[0],s=n[1],o=this.scale;if(this.mode==="fanIn"?o/=Math.max(1,r):this.mode==="fanOut"?o/=Math.max(1,s):o/=Math.max(1,(r+s)/2),this.distribution==="normal"){let a=Math.sqrt(o);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Et(`${this.getClassName()} does not support dType ${t}.`);return vk(e,0,a,t,this.seed)}else{let a=Math.sqrt(3*o);return N0(e,-a,a,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};vo.className="VarianceScaling";De.registerClass(vo);var Vk=class extends vo{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return vo.className}};Vk.className="GlorotUniform";De.registerClass(Vk);var Wk=class extends vo{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return vo.className}};Wk.className="GlorotNormal";De.registerClass(Wk);var Gk=class extends vo{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return vo.className}};Gk.className="HeNormal";De.registerClass(Gk);var Uk=class extends vo{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return vo.className}};Uk.className="HeUniform";De.registerClass(Uk);var jk=class extends vo{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return vo.className}};jk.className="LeCunNormal";De.registerClass(jk);var Hk=class extends vo{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return vo.className}};Hk.className="LeCunNormal";De.registerClass(Hk);var AE=class extends Pa{constructor(e){super();if(this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new Et("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return ce(()=>{if(e.length<2)throw new Et("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,r=Lk(n,0,1,"float32"),s=AM.gramSchmidt(r);return e[0]>e[1]&&(s=Kt(s)),te(this.gain,s)})}getConfig(){return{gain:this.gain,seed:this.seed}}};AE.className="Orthogonal";De.registerClass(AE);var ZM={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function YM(e,t={}){return Sb(e,De.SerializationMap.getMap().classNameMap,t,"initializer")}function pr(e){return nE(e)}function tr(e){if(typeof e=="string"){let t=e in ZM?ZM[e]:e;if(t==="GlorotNormal")return new Wk;if(t==="GlorotUniform")return new Vk;if(t==="HeNormal")return new Gk;if(t==="HeUniform")return new Uk;if(t==="LeCunNormal")return new jk;if(t==="LeCunUniform")return new Hk;{let n={};return n.className=t,n.config={},YM(n)}}else return e instanceof Pa?e:YM(e)}function Xye(){return new hE}function Zye(){return new Bk}function Yye(e){return new mE(e)}function Jye(e){return new gE(e)}function Qye(e){return new xE(e)}function e1e(e){return new yE(e)}function t1e(e){return new bE(e)}function n1e(e){return new vo(e)}function r1e(e){return new Vk(e)}function s1e(e){return new Wk(e)}function o1e(e){return new Gk(e)}function a1e(e){return new Uk(e)}function i1e(e){return new jk(e)}function l1e(e){return new Hk(e)}function u1e(e){return new AE(e)}var JM={};Rt(JM,{Layer:()=>Yt,RNN:()=>fl,RNNCell:()=>Bb,activation:()=>jbe,add:()=>eAe,alphaDropout:()=>MAe,average:()=>tAe,averagePooling1d:()=>z4,averagePooling2d:()=>L4,averagePooling3d:()=>B4,avgPool1d:()=>cAe,avgPool2d:()=>dAe,avgPool3d:()=>hAe,avgPooling1d:()=>pAe,avgPooling2d:()=>fAe,avgPooling3d:()=>mAe,batchNormalization:()=>iAe,bidirectional:()=>_Ae,concatenate:()=>nAe,conv1d:()=>Pbe,conv2d:()=>Mbe,conv2dTranspose:()=>zbe,conv3d:()=>Lbe,conv3dTranspose:()=>Bbe,convLstm2d:()=>CAe,convLstm2dCell:()=>SAe,cropping2D:()=>Wbe,dense:()=>Hbe,depthwiseConv2d:()=>Ube,dot:()=>aAe,dropout:()=>qbe,elu:()=>Ebe,embedding:()=>Qbe,flatten:()=>Xbe,gaussianDropout:()=>PAe,gaussianNoise:()=>OAe,globalAveragePooling1d:()=>gAe,globalAveragePooling2d:()=>xAe,globalMaxPool1d:()=>RAe,globalMaxPool2d:()=>DAe,globalMaxPooling1d:()=>iL,globalMaxPooling2d:()=>lL,gru:()=>bAe,gruCell:()=>AAe,input:()=>Rz,inputLayer:()=>_be,layerNormalization:()=>lAe,leakyReLU:()=>Dbe,lstm:()=>vAe,lstmCell:()=>wAe,masking:()=>zAe,maxPool1d:()=>$Ae,maxPool2d:()=>FAe,maxPooling1d:()=>uL,maxPooling2d:()=>cL,maxPooling3d:()=>yAe,maximum:()=>rAe,minimum:()=>sAe,multiply:()=>oAe,permute:()=>Jbe,prelu:()=>$be,reLU:()=>Rbe,repeatVector:()=>Zbe,reshape:()=>Ybe,rnn:()=>NAe,separableConv2d:()=>Vbe,simpleRNN:()=>kAe,simpleRNNCell:()=>IAe,softmax:()=>Fbe,spatialDropout1d:()=>Kbe,stackedRNNCells:()=>TAe,thresholdedReLU:()=>Obe,timeDistributed:()=>EAe,upSampling2d:()=>Gbe,zeroPadding2d:()=>uAe});var c1e=0;function QM(){return c1e++}var qk={};function Kk(e=""){return e in qk||(qk[e]=0),qk[e]+=1,e+qk[e].toString()}function vE(e){return Array.isArray(e)&&Array.isArray(e[0])}function Xk(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function $t(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new pe(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function kn(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new pe(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Zk(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((r,s)=>r*s);return t}var ez="Variable",tz=class{constructor(e,t="float32",n=ez,r=!0,s=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=QM(),n=n==null?ez:n,this.originalName=UM(n),this.name=jM(this.originalName),this.trainable_=r,this.constraint=s,this.val=nM(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),p1e(this.val,e),this.val.id!==e.id&&(this.val.assign(e),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function p1e(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function wE(e){return e.map(t=>t.read())}function kE(e){e.forEach(t=>{t[0].write(t[1])})}var Rr=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,e.shape!=null?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},Ii=class{constructor(e,t,n,r,s,o,a){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=s,this.outputTensorIndex=a,this.id=QM(),o!=null&&(this.originalName=UM(o),this.name=jM(this.originalName)),this.rank=t.length}},d1e=0,Yk=class{constructor(e,t){this.callArgs=t,this.id=d1e++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(let n of e.inboundLayers)n!=null&&n.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){let e=[];for(let t of this.inboundLayers)t!=null?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},f1e=0,Yt=class extends De.Serializable{constructor(e={}){super();this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=f1e++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){let n=this.getClassName();t=Hl(n)+"_"+Kk(n)}if(this.name=t,this.trainable_=e.trainable==null?!0:e.trainable,e.inputShape!=null||e.batchInputShape!=null){let n;if(e.batchInputShape!=null)n=e.batchInputShape;else if(e.inputShape!=null){let s=null;e.batchSize!=null&&(s=e.batchSize),n=[s].concat(e.inputShape)}this.batchInputShape=n;let r=e.dtype;r==null&&(r=e.inputDType),r==null&&(r="float32"),this.dtype=r}e.weights!=null?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(this.inboundNodes.length===0)throw new vi(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new pe(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return Ao(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return Ao(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new jl(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(this.inboundNodes.length===0)throw new jl(`Layer ${this.name} is not connected, no input to return.`);return Ao(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new jl(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new jl(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Ao(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(e=>e())}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach(t=>t.trainable=e),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(e=>e.trainable):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(e=>!e.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=Gn(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=Gn(this.inputSpec);if(e.length!==t.length)throw new pe(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;ns.maxNDim)throw new pe(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${s.maxNDim}, found ndim=${o}`);if(s.minNDim!=null&&o=0?a[l]:a[a.length+l];if(u!=null&&[u,null].indexOf(c)===-1)throw new pe(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${u} but got shape ${a}.`)}}if(s.shape!=null)for(let a=0;a{if(!this.built){this.assertInputCompatibility(e);let o=[];for(let a of Gn(e))o.push(a.shape);this.build(Ao(o)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&s&&(this._refCount=1)}if(this.assertInputCompatibility(e),s){let o=this.call(e,t),a=Gn(o),i=[];for(let l of a)n.indexOf(l)!==-1&&(l=l.clone()),i.push(l);if(o=Ao(i),this.activityRegularizer!=null)throw new Et("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return o}else{let o=h1e(e),a=this.computeOutputShape(o),i,l=m1e(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?o[0]:o),a!=null&&a.length>0&&Array.isArray(a[0])?i=a.map((u,c)=>new Ii(l,u,this,Gn(e),t,this.name,c)):i=new Ii(l,a,this,Gn(e),t,this.name),this.addInboundNode(e,i,null,null,o,a,t),this._refCount++,this.activityRegularizer!=null)throw new Et("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return i}})}warnOnIncompatibleInputShape(e){if(this.batchInputShape!=null)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach((n,r)=>{n!=null&&e[r]!=null&&e[r]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new jl(`The layer ${this.name} has never been called and thus has no defined output shape.`);let e=[];for(let t of this.inboundNodes){let n=JSON.stringify(t.outputShapes);e.indexOf(n)===-1&&e.push(n)}if(e.length===1){let t=this.inboundNodes[0].outputShapes;return Array.isArray(t)&&Array.isArray(t[0])&&t.length===1?t[0]:t}else throw new jl(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new vi(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Zk(this.weights)}build(e){this.built=!0}getWeights(e=!1){return wE(e?this.trainableWeights:this.weights)}setWeights(e){ce(()=>{let t=this.weights;if(t.length!==e.length)throw new pe(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],r=wE(t);for(let s=0;ss.apply(l.read())),o==null&&(o=!0),o?this._trainableWeights.push(l):this._nonTrainableWeights.push(l),l}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=Gn(e),this._losses!==void 0&&this._losses!==null&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(t!=null)if(Array.isArray(t))t.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return t}addInboundNode(e,t,n,r,s,o,a=null){let i=Gn(e);t=Gn(t),n=Gn(n),r=Gn(r),s=Xk(s),o=Xk(o);let l=[],u=[],c=[];for(let p of i)l.push(p.sourceLayer),u.push(p.nodeIndex),c.push(p.tensorIndex);new Yk({outboundLayer:this,inboundLayers:l,nodeIndices:u,tensorIndices:c,inputTensors:i,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:s,outputShapes:o},a);for(let p=0;pe.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount==0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function h1e(e){e=Gn(e);let t=[];for(let n of e)t.push(n.shape);return Ao(t)}function m1e(e){return"float32"}function nz(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let r=t.inboundNodes[n];if(r.inboundLayers.length===0)return r.inputTensors;{let s=[];for(let o=0;o0){let s=await Promise.all(t);for(let o=0;oRe(this.totals[r],te(s,n)));this.totals[r]=a,o!=null&&o.dispose()}}}async onEpochEnd(e,t){if(t!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?t[n]=this.totals[n]/this.seen:ce(()=>{let r=te(Me(1,this.seen),this.totals[n]);t[n]=r,this.totals[n].dispose(),us(t[n])}))}},iz=class extends O0{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){t==null&&(t={}),this.epoch.push(e);for(let n in t)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(t[n])}async syncData(){let e=[],t=[],n=[];for(let s in this.history){let o=this.history[s];for(let a=0;anew lz(r,t))}var Ma=class{constructor(){}static registerCallbackConstructor(e,t){E.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),Ma.checkForDuplicate(t),Ma.constructors[e]==null&&(Ma.constructors[e]=[]),Ma.constructors[e].push(t)}static checkForDuplicate(e){for(let t in Ma.constructors)Ma.constructors[+t].forEach(r=>{if(r===e)throw new pe("Duplicate callback constructor.")})}static clear(){Ma.constructors={}}static createCallbacks(e){let t=[];for(let n in Ma.constructors){let r=+n;e>=r&&t.push(...Ma.constructors[r])}return t.map(n=>new n)}};Ma.constructors={};function cz(e,t,n,r,s,o,a,i,l){let u=new iz,c=[new x1e,...Ma.createCallbacks(t)];e!=null&&c.push(...e),c.push(u);let p=new az(c);return p.setParams({epochs:n,initialEpoch:r,samples:s,steps:o,batchSize:a,verbose:t,doValidation:i,metrics:l}),{callbackList:p,history:u}}function Ci(e,t={},n=!1){return Sb(e,De.SerializationMap.getMap().classNameMap,t,"layer",n)}function Jk(e,t){return ce(()=>{e.dtype!=="float32"&&(e=Fe(e,"float32"));let n=Je(Eb(e),t,!0),r=I0(n.shape,Hr()),s=As(il(n,r));return Me(e,s)})}function ah(e,t){return ce(()=>cr(Eb(Ge(t,e)),-1))}function Qk(e,t){return ce(()=>cr(Tr(Ge(t,e)),-1))}function P0(e,t){return ce(()=>{let n=Ge(e,t),r=yo(Tr(e),Hr(),Number.MAX_VALUE),s=Tr(Me(n,r));return te(100,cr(s,-1))})}function y1e(e,t){return ce(()=>{let n=yo(t,Hr(),Number.MAX_VALUE),r=Vo(Re(1,n)),s=yo(e,Hr(),Number.MAX_VALUE),o=Vo(Re(1,s));return cr(Eb(Ge(r,o)),-1)})}function b1e(e,t){return ce(()=>{let n=il(0,Ge(1,te(e,t)));return cr(Eb(n),-1)})}function A1e(e,t){return ce(()=>{let n=il(0,Ge(1,te(e,t)));return cr(n,-1)})}function v1e(e,t){return ce(()=>{let n=Je(te(e,t),-1),r=Wo(te(Ge(1,e),t),-1);return il(0,Re(1,Ge(r,n)))})}function w1e(e,t){return ce(()=>{let n=Math.log(2),r=Ge(t,e),s=Ge(Re(r,Xf(te(-2,r))),n);return cr(s,-1)})}function Db(e,t,n=!1){return ce(()=>{if(n)t=Jf(t);else{let r=Je(t,t.shape.length-1,!0);t=Me(t,r)}return t=yo(t,Hr(),1-Hr()),er(Je(te(Fe(e,"float32"),Vo(t)),t.shape.length-1))})}function e5(e,t,n=!1){return ce(()=>{let r=Fe(C0(Lye(e)),"int32");t=yo(t,Hr(),1-Hr());let s=t.shape,o=ie(g0(r,s[s.length-1]),s);return Db(o,t,n)})}function k1e(e,t){if(!E.arraysEqual(e.shape,t.shape))throw new pe(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return ce(()=>{let n=yi(t),r=er(Tr(t));return Re(Ge(n,te(t,e)),hb(Bo(r)))})}function t5(e,t){return ce(()=>{let n;return n=yo(t,Hr(),1-Hr()),n=Vo(Me(n,Ge(1,n))),cr(k1e(e,n),-1)})}function I1e(e,t){return ce(()=>{let n=yo(e,Hr(),1),r=yo(t,Hr(),1);return Je(te(e,Vo(Me(n,r))),-1)})}function C1e(e,t){return ce(()=>{let n=Vo(Re(Hr(),t));return cr(Ge(t,te(e,n)),-1)})}function IE(e,t){return ce(()=>{let n=Jk(e,-1),r=Jk(t,-1),s=te(n,r);return er(Je(s,-1))})}var n5={meanSquaredError:ah,meanAbsoluteError:Qk,meanAbsolutePercentageError:P0,meanSquaredLogarithmicError:y1e,squaredHinge:b1e,hinge:A1e,categoricalHinge:v1e,logcosh:w1e,categoricalCrossentropy:Db,sparseCategoricalCrossentropy:e5,binaryCrossentropy:t5,kullbackLeiblerDivergence:I1e,poisson:C1e,cosineProximity:IE};function CE(e){if(typeof e=="string"){if(e in n5)return n5[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new pe(t)}else return e}function SE(e,t){return ce(()=>{let n=te(.5,Uo(t)),r=Mk(bo(t,n),e.dtype);return cr(Lo(e,r),-1)})}function NE(e,t){return ce(()=>Mk(Lo(xi(e,-1),xi(t,-1)),"float32"))}function pz(e,t){return ce(()=>Fe(Je(Fa(Lo(e,1),Lo(t,1))),"float32"))}function S1e(e,t){return ce(()=>Fe(Je(Fa(Lo(e,1),Lo(t,0))),"float32"))}function N1e(e,t){return ce(()=>Fe(Je(Fa(Lo(e,0),Lo(t,1))),"float32"))}function dz(e,t){return ce(()=>{let n=pz(e,t),r=N1e(e,t),s=Re(n,r);return Fe($s(bo(s,0),Me(n,s),0),"float32")})}function T1e(e,t){return ce(()=>{let n=pz(e,t),r=S1e(e,t),s=Re(n,r);return Fe($s(bo(s,0),Me(n,s),0),"float32")})}function fz(e,t){return t5(e,t)}function hz(e,t){return e.rank===t.rank&&(e=ln(e,[e.rank-1])),t=xi(t,-1),t.dtype!==e.dtype&&(t=Fe(t,e.dtype)),Fe(Lo(e,t),"float32")}var _1e=ah,E1e=ah,R1e=Qk,D1e=Qk,$1e=P0,F1e=P0,TE=Db,O1e=IE,mz=e5,r5={binaryAccuracy:SE,categoricalAccuracy:NE,precision:dz,categoricalCrossentropy:TE,sparseCategoricalCrossentropy:mz,mse:_1e,MSE:E1e,mae:R1e,MAE:D1e,mape:$1e,MAPE:F1e,cosine:O1e};function P1e(e){if(typeof e=="string"&&e in r5)return r5[e];if(typeof e!="string"&&e!=null)return e;throw new pe(`Unknown metric ${e}`)}function s5(e){if(ul(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(n5))if(n5[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(r5))if(r5[n]===e){t=n;break}return t!==void 0?t:e.name}}function M1e(e){let t={Adagrad:()=>eh.adagrad(.01),Adadelta:()=>eh.adadelta(1,.95,Hr()),Adam:()=>eh.adam(.001,.9,.999,Hr()),Adamax:()=>eh.adamax(.002,.9,.999,Hr(),0),RMSProp:()=>eh.rmsprop(.001,.9,0,Hr()),SGD:()=>eh.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new pe(`Unknown Optimizer ${e}`)}var gz=1*1024*1024;function xz(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!_E(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let r=JSON.stringify(e);r.length>gz&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${r.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${gz}.`)}}function _E(e){if(e===null)return!0;if(typeof e=="object")if(Object.getPrototypeOf(e)===Object.prototype){let t=Object.keys(e);for(let n of t)if(typeof n!="string"||!_E(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!_E(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function z1e(e,t,n,r=console.log){let s=B1e(e),o=["Layer (type)","Output shape","Param #"];s?(t=t||65,n=n||[.45,.85,1]):(t=t||98,n=n||[.33,.55,.67,1]),n[n.length-1]<=1&&(n=n.map(c=>Math.floor(t*c)));let a;if(!s){o.push("Receives inputs"),a=[];for(let c in e.nodesByDepth)a.push(...e.nodesByDepth[c])}r("_".repeat(t)),o5(o,n,r),r("=".repeat(t));let i=e.layers;for(let c=0;c1||s.length===1&&s[0].inboundLayers.length>1){t=!1;break}r.push(...s)}if(t)for(let s of e.layers){let o=!1;for(let a of s.inboundNodes)if(r.indexOf(a)!==-1)if(o){t=!1;break}else o=!0;if(!t)break}return t}function o5(e,t,n=console.log){let r="";for(let s=0;s0&&(r=r.slice(0,r.length-1)+" "),r+=e[s],r=r.slice(0,t[s]),r+=" ".repeat(t[s]-r.length);n(r)}function V1e(e,t,n){let r;try{r=JSON.stringify(e.outputShape)}catch(i){r="multiple"}let s=e.name,o=e.getClassName(),a=[`${s} (${o})`,r,e.countParams().toString()];o5(a,t,n)}function W1e(e,t,n,r){let s;try{s=JSON.stringify(e.outputShape)}catch(c){s="multiple"}let o=[];for(let c of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(c)===-1))for(let p=0;ph.name),l=[],u=t.names();for(let h of i)u.indexOf(h)!==-1?l.push(t.getValue(h)):l.push(null);r!=null&&(r.maxNumTensors=-1/0,r.minNumTensors=1/0);let c=i.join(",")+"|"+t.names().join(","),p,d;if(DE[c]==null){let h=U1e(a,t);p=h.sorted,d=h.recipientCounts,DE[c]=p,bz[c]=d}p=DE[c],d={},s||Object.assign(d,bz[c]);let f=new ih(t);for(let h=0;hr.maxNumTensors&&(r.maxNumTensors=N),N0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let s=Az(e[0],t);n=s.sorted,r=s.recipientMap}else{let s=new Set;for(let o of e){let{sorted:a,recipientMap:i}=Az(o,t);for(let l of a)s.has(l.name)||(n.push(l),s.add(l.name));for(let l in i)r[l]==null&&(r[l]=new Set),i[l].forEach(u=>r[l].add(u))}}return{sorted:n,recipientCounts:j1e(r)}}function j1e(e){let t={};for(let n in e)t[n]=e[n].size;return t}function Az(e,t){let n=new Set,r=[],s={};for(let i of t.names())n.add(i);let o=[],a=[];for(o.push(e);o.length>0;){let i=o[o.length-1];if(n.has(i.name)){o.pop();continue}let l=a[a.length-1]===o.length-1;if(i.inputs.length===0||l)o.pop(),r.push(i),n.add(i.name),l&&a.pop();else{a.push(o.length-1);for(let u of i.inputs)s[u.name]==null&&(s[u.name]=new Set),s[u.name].add(i.name),!n.has(u.name)&&o.push(u)}}return{sorted:r,recipientMap:s}}function H1e(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;rx.name)}`);qc(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(x=>x.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let x of this.outputs){let y=x.sourceLayer,b=x.nodeIndex,A=x.tensorIndex;this.outputLayers.push(y),this.outputLayersNodeIndices.push(b),this.outputLayersTensorIndices.push(A)}for(let x of this.inputs){let y=x.sourceLayer,b=x.nodeIndex,A=x.tensorIndex;ul(b===0,"input layer has >1 nodes"),ul(A===0,"input layer has >1 tensors"),this.inputLayers.push(y),this.inputLayersNodeIndices.push(b),this.inputLayersTensorIndices.push(A)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let x=0;xx.shape),this.internalOutputShapes=this.outputs.map(x=>x.shape);let t={},n={},r={},s={},o={},a=[],i=(x,y,b,A,v,w)=>{(A==null||v==null||w==null)&&(A=x.sourceLayer,v=x.nodeIndex,w=x.tensorIndex);let k=A.inboundNodes[v];if(b.indexOf(k)!==-1)throw new vi(`The tensor ${x.name} at layer "${A.name}" is part of a cycle.`);if(y.indexOf(k)!==-1)return;this.containerNodes.add(pl.nodeKey(A,v)),A.id in o||(o[A.id]=Object.keys(o).length),b.indexOf(k)===-1&&b.push(k);let I=k.inboundLayers.length;for(let N=0;N=0;)b.splice(b.indexOf(k),1);a.push(k)},l=[],u=[];for(let x of this.outputs)i(x,l,u);let c=a.slice().reverse();for(let x of c){n[x.id]=x,x.id in t||(t[x.id]=0);let y=t[x.id],b=r[x.outboundLayer.id]==null?0:r[x.outboundLayer.id];y=Math.max(y,b),r[x.outboundLayer.id]=y,s[x.outboundLayer.id]=x.outboundLayer,t[x.id]=y;for(let A=0;AparseInt(x,10)).sort(Pk);this.layers=[];for(let x of f){let y=d[x];y.sort((b,A)=>{let v=o[b.id],w=o[A.id];return vw?1:0});for(let b of y)b instanceof pl&&this.internalContainerRefs.push(b),this.layers.push(b)}this.layersByDepth=d,f=Object.keys(p).map(x=>parseInt(x,10)).sort(Pk);let h=this.inputs.slice(),m=[];for(let x of f)for(let y of p[x]){let b=y.outboundLayer;if(b!=null){for(let A of y.inputTensors)if(h.indexOf(A)===-1)throw new vi(`Graph disconnected: cannot obtain value for tensor ${A} at layer "${b.name}". The following previous layers were accessed without issue: ${m}`);for(let A of y.outputTensors)h.push(A);m.push(b.name)}}this.nodesByDepth=p;let g=this.layers.map(x=>x.name);for(let x of g){let y=g.filter(b=>b===x).length;if(y!==1)throw new vi(`The name "${x}" is used ${y} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(g))}this.outboundNodes=[],this.inboundNodes=[],new Yk({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(x=>null),outputMasks:this.outputs.map(x=>null),inputShapes:this.inputs.map(x=>x.shape),outputShapes:this.outputs.map(x=>x.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount==0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new pe("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},r=0;for(let o of this.layers)for(let a of o.weights){if(n[a.originalName]!=null)throw new pe(`Duplicate weight name: ${a.originalName}`);n[a.originalName]=a,r++}let s=[];for(let o in e){let a=o;if(n[o]==null){let i=o.split("/");a=i.slice(0,-2).concat([i[i.length-1]]).join("/")}if(n[a]!=null)s.push([n[a],e[o]]);else if(t)throw new pe(`Provided weight data has no target variable: ${o}`);delete n[a]}if(t){let o=[];for(let a in n)o.push(a);if(o.length>0)throw new pe(`${o.length} of ${r} weights are not set: ${o}`)}kE(s)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${RE}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=EE(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return ce(()=>{e=Gn(e);let n=new ih;for(let r=0;r{e=Gn(e);let n;return t==null?n=th(null,e.length):n=Gn(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Xk(e);if(t.length!==this.inputLayers.length)throw new pe(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let a=0;aparseInt(a,10)).sort(Pk);if(r.length>1)for(let a of r){let i=this.nodesByDepth[a];for(let l of i){let u=l.outboundLayer;if(this.inputLayers.map(h=>h.id).indexOf(u.id)!==-1)continue;let c=[];for(let h=0;hparseInt(i,10)).sort(Pk);for(let i of r){let l=this.nodesByDepth[i];for(let u of l){let c=u.outboundLayer,p=u.inputTensors,d=u.outputTensors,f=new Array;for(let h of p)h.id in n&&f.push(n[h.id]);if(f.length===p.length){let h={},m,g,x,y;if(u.callArgs!=null&&(h=u.callArgs),f.length===1){let[b,A]=f[0];h.mask==null&&(h.mask=A),x=Gn(c.call(b,h)),y=Gn(c.computeMask(b,A)),m=[b],g=[A]}else m=f.map(b=>b[0]),g=f.map(b=>b[1]),h.mask==null&&(h.mask=g),x=Gn(c.call(m,h)),y=Gn(c.computeMask(m,g));if(c.activityRegularizer)throw new Et("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let b=0;b{let e=[];for(let t of this.layers)for(let n=0;n0){let h=[];for(let m=0;m0&&m.apply(Ao(x),y)}function l(m){let g=m.name,x=Ci(m,t.customObjects!=null?t.customObjects:{});x.setFastWeightInitDuringBuild(r),s[g]=x,m.inboundNodes.forEach(b=>{if(!(b instanceof Array))throw new pe(`Corrupted configuration, expected array for nodeData: ${b}`);a(x,b)})}let u=t.name,c=t.layers;for(let m of c)l(m);for(;!kye(o);)for(let m of c){let g=s[m.name];if(g.name in o){let x=o[g.name];delete o[g.name];for(let y of x)i(g,y)}}let p=[],d=[],f=t.inputLayers;for(let m of f){let g=m[0],x=m[1],y=m[2];ul(g in s);let A=s[g].inboundNodes[x].outputTensors;p.push(A[y])}let h=t.outputLayers;for(let m of h){let g=m[0],x=m[1],y=m[2];ul(g in s);let A=s[g].inboundNodes[x].outputTensors;d.push(A[y])}return new e({inputs:p,outputs:d,name:u})}get stateful(){if(this._stateful)throw new pe("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){ce(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function q1e(e,t,n){let r=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(s=>null);if(r===1)return Array.isArray(e)&&e.length===1?e:typeof e=="object"&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let s=[];return t.forEach(o=>{o in e?s.push(e[o]):s.push(null)}),s}else throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function vz(e,t){return q1e(e,t,"classWeight")}async function wz(e,t,n,r){if(t!=null||r!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let s=ce(()=>{if(e.shape.length===1)return mi(e);if(e.shape.length===2){if(e.shape[1]>1)return xi(e,1);if(e.shape[1]===1)return ie(e,[e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),o=Array.from(await s.data());ye(s);let a=[];return o.forEach(i=>{if(n[i]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${i} exists in the data but not in classWeight`);a.push(n[i])}),Er(a,"float32")}else return null}function K1e(e,t){return te(e,t)}var X1e=32;function kz(e,t){let n,r,s=t;n=s.xs,r=s.ys,E.assert(n!=null&&r!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let o=Iz("input",e.inputNames,n),a=Iz("output",e.outputNames,r),i=o[0].shape[0];E.assert(o.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${o.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),E.assert(a.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${a.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l`Batch size mismatch: input ${e.inputNames[l]} has ${o[l].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);for(let l=0;l`Batch size mismatch: output ${e.outputNames[l]} has ${a[l].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);return{xs:o,ys:a}}function Iz(e,t,n){if(n instanceof Vt)return[n];if(Array.isArray(n))return E.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let r=[];for(let s of t){if(n[s]==null)throw new pe(`The feature data generated by the dataset lacks the required ${e} key '${s}'.`);r.push(n[s])}return r}}function Z1e(e){if(e.length===3)throw new Et("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function Y1e(e,t,n){let r=n.batchesPerEpoch!=null;if(E.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),E.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),E.assert(n.epochs!=null&&n.epochs>0&&Number.isInteger(n.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`),E.assert(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),E.assert(n.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let s=n.validationData!=null,o,a;if(s)if(Cz(n.validationData))E.assert(n.validationBatches==null||n.validationBatches>0&&Number.isInteger(n.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`);else{let g=Z1e(n.validationData);o=g.xs,a=g.ys}let i=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),u;s?u=l.slice().concat(l.map(g=>"val_"+g)):u=l.slice();let c=uz(n.callbacks,n.yieldEvery),p=n.verbose==null?1:n.verbose,{callbackList:d,history:f}=cz(c,p,n.epochs,null,null,J1e(t,n),null,s,u);d.setModel(e),e.history=f,await d.onTrainBegin(),e.stopTraining_=!1;let h=n.initialEpoch==null?0:n.initialEpoch,m=await t.iterator();for(;h=n.batchesPerEpoch:b.done){if(s){let A;Cz(n.validationData)?A=Gn(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):A=Gn(e.evaluate(o,a,{batchSize:n.validationBatchSize==null?X1e:n.validationBatchSize,verbose:0}));for(let v=0;v0)throw new Et("Verbose mode is not implemented yet.");E.assert(!r||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let a=Q1e(t)?t:await t.iterator(),i=0,l=0;for(;r?l{if(u.value){let{xs:c,ys:p}=kz(e,u.value),d=c.concat(p),f=ce(()=>s(d));if(ye(d),l===0)for(let m=0;mRe(o[m],te(h,g))),l>0&&ye(x)}ye(f),i+=h,++l}return o}),u.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let u=0;u0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function Ob(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>oh(r,t,n-t)):oh(e,t,n-t)}function FE(e,t){return ce(()=>e==null?null:Array.isArray(e)?e.map(n=>FE(n,t)):KM(e,t.dtype==="int32"?t:Fe(t,"int32")))}function OE(e,t){let n=[],r=0,s=null;for(;r=e&&(s=e),n.push([r,s]),r=s;return n}async function tbe(e,t,n,r,s,o,a,i,l,u,c,p,d,f,h){s==null&&(s=32),o==null&&(o=1),c==null&&(c=!0),d==null&&(d=0);let m=!1;if(l!=null&&u!=null&&(m=!0),h!=null&&(m=!0,f==null))throw new pe("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=e.checkNumSamples(n,s,f,"steps_per_epoch"),x;g!=null&&(x=wi(0,g)),a==null&&(a=1);let{callbackList:y,history:b}=cz(i,a,o,d,g,f,s,m,p);y.setModel(e),e.history=b,await y.onTrainBegin(),e.stopTraining_=!1;for(let A=d;A{let T=k[I][0],_=k[I][1],R=oh(w,T,_-T);N.batch=I,N.size=_-T;let S=FE(n,R),F=t(S);for(let B=0;B0){if(h=!0,r.validationData.length===2)a=r.validationData[0],i=r.validationData[1];else throw r.validationData.length===3?new Et("validationData including sample weights is not supported yet."):new pe(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);let k=!0,I=await e.standardizeUserData(a,i,null,null,k,p);l=I[0],u=I[1],m=l.concat(u)}else if(r.validationSplit!=null&&r.validationSplit>0&&r.validationSplit<1){h=!0;let k=Math.floor(s[0].shape[0]*(1-r.validationSplit)),I=s[0].shape[0];l=Ob(s,k,I),s=Ob(s,0,k),u=Ob(o,k,I),o=Ob(o,0,k),m=l.concat(u)}else r.validationSteps!=null&&(h=!0);let g=s.concat(o).concat(c);e.checkTrainableWeightsConsistency();let x=e.makeTrainFunction(),y=e.getDedupedMetricsNames(),b,A;h?(e.makeTestFunction(),b=e.testFunction,A=y.slice().concat(y.map(k=>"val_"+k))):(b=null,m=[],A=y.slice());let v=uz(r.callbacks,r.yieldEvery);return await tbe(e,x,g,y,p,r.epochs,r.verbose,v,b,m,r.shuffle,A,r.initialEpoch,null,null)}finally{e.isTraining=!1,lh(s,t),lh(o,n),lh(l,a),lh(u,i),c!=null&&ye(c)}}function Sz(e){let t=[];e instanceof Vt&&(e=[e]);for(let n=0;nn.push(s.id));else if(t!=null)for(let s in t){let o=t[s];n.push(o.id)}let r=[];if(e instanceof Vt)n.indexOf(e.id)===-1&&r.push(e);else if(Array.isArray(e))e.forEach(s=>{n.indexOf(s.id)===-1&&r.push(s)});else if(e!=null)for(let s in e){let o=e[s];n.indexOf(o.id)===-1&&r.push(o)}r.forEach(s=>{s.isDisposed||s.dispose()})}function rbe(e){return e instanceof Vt}function PE(e){return Array.isArray(e)}function Nz(e){return!rbe(e)&&!PE(e)}function Tz(e,t,n,r=!0,s=""){if(t==null||t.length===0){if(e!=null){let a=!1;if(PE(e)&&e.length>0)a=!0;else if(Nz(e)){for(let i in e)if(e.hasOwnProperty(i)){a=!0;break}}else a=!0;if(a)throw new pe(`Error when checking model ${s} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(a=>null);let o;if(Nz(e)){e=e,o=[];for(let a of t){if(e[a]==null)throw new pe(`No data provided for "${a}". Need data for each key in: ${t}`);o.push(e[a])}}else if(PE(e)){if(e=e,e.length!==t.length)throw new pe(`Error when checking model ${s}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);o=e}else{if(e=e,t.length>1)throw new pe(`The model ${s} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);o=[e]}if(o=Sz(o),n!=null)for(let a=0;a=0&&u!==c)throw new pe(`${s} expected a batch of elements where each example has shape [${n[a].slice(1,n[a].length)}] (i.e.,tensor shape [*,${n[a].slice(1,n[a].length)}]) but the ${s} received an input with ${i.shape[0]} examples, each with shape [${i.shape.slice(1,i.shape.length)}] (tensor shape [${i.shape}])`)}}return o}function sbe(e,t,n){let r=qc(e.map(o=>o.shape[0]));r.sort();let s=qc(t.map(o=>o.shape[0]));if(s.sort(),r.length>1)throw new pe(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(o=>o.shape))}`);if(s.length>1)throw new pe(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(o=>o.shape))}`);if(r.length>0&&s.length>0&&!E.arraysEqual(r,s))throw new pe(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${s[0]} target sample(s).`)}function obe(e,t,n){let r=[ah,t5,Db];for(let s=0;s1)throw new pe(`The model expects ${t.length} ${s} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);o=[e]}if(n!=null)for(let a=0;a[]);let n;if(typeof e=="string"||typeof e=="function")n=[e];else if(Array.isArray(e)||typeof e=="object")n=e;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);if(Array.isArray(n))return t.map(r=>n);{let r=[];for(let s of t){let o=n.hasOwnProperty(s)?n[s]:[];Array.isArray(o)||(o=[o]),r.push(o)}return r}}var ibe="layers-model",ql=class extends pl{constructor(e){super(e);this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new pe("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");z1e(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=M1e(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Ul))throw new pe("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let o in e.loss)if(this.outputNames.indexOf(o)===-1)throw new pe(`Unknown entry in loss dictionary: "${o}". Only expected the following keys: ${this.outputNames}`);for(let o of this.outputNames)e.loss[o]==null&&console.warn(`Output "${o}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${o} during training`),t.push(CE(e.loss[o]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new pe(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map(a=>CE(a))}else{let o=CE(e.loss);this.outputs.forEach(a=>{t.push(o)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let o=0;o{for(let o=0;o1&&(this.metricsTensors.push([a,o]),this.metricsNames.push(this.outputNames[o]+"_loss"))}});let r=abe(e.metrics,this.outputNames),s=(o,a,i)=>{this.outputNames.length>1&&(a=this.outputNames[o]+"_"+a),this.metricsNames.push(a),this.metricsTensors.push([i,o])};sh("metric",()=>{for(let o=0;o{let u="",c,p,d;for(let f of l){if(typeof f=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(f)!==-1){let m=this.internalOutputShapes[o];m[m.length-1]===1||this.lossFunctions[o]===t5?["accuracy","acc"].indexOf(f)!==-1?p=SE:["crossentropy","ce"].indexOf(f)!==-1&&(p=fz):this.lossFunctions[o]===e5?["accuracy","acc"].indexOf(f)!==-1?p=hz:["crossentropy","ce"].indexOf(f)!==-1&&(p=mz):["accuracy","acc"].indexOf(f)!==-1?p=NE:["crossentropy","ce"].indexOf(f)!==-1&&(p=TE);let g;["accuracy","acc"].indexOf(f)!==-1?g="acc":["crossentropy","ce"].indexOf(f)!==-1&&(g="ce"),d=p,c=u+g}else d=P1e(f),c=u+s5(f);let h;sh(c,()=>{h=d}),s(o,c,h)}})(a)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let r=n.batchSize==null?32:n.batchSize;$E(r);let s=!0,o=this.standardizeUserDataXY(e,t,s,r);try{let a=o[0].concat(o[1]);this.makeTestFunction();let i=this.testFunction,l=this.testLoop(i,a,r,n.verbose,n.steps);return Ao(l)}finally{lh(o[0],e),lh(o[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),ebe(this,e,t)}checkNumSamples(e,t,n,r="steps"){let s;if(n!=null){if(s=null,t!=null)throw new pe(`If ${r} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?s=e[0].shape[0]:s=e.shape[0];else throw new pe(`Either the input data should have a defined shape, or ${r} shoud be specified.`);return s}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new pe("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],s=this.retrieveSymbolicTensors(r),o=new ih;if(e instanceof Vt&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new pe(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let i=0;ia.name);for(let a=0;a0){let r=[];throw t.forEach((s,o)=>{s==null&&r.push(e[o])}),new pe(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(r)}`)}return t}predictLoop(e,t=32,n=!1){return ce(()=>{let r=this.checkNumSamples(e);if(n)throw new Et("Verbose predictLoop() is not implemented yet.");let s=OE(r,t),o=this.outputs.map(a=>[]);for(let a=0;a{let l=s[a][0],u=s[a][1],c=Ob(e,l,u),p=[];if(Array.isArray(c))for(let f=0;fo[u].push(l));return Ao(o.map(a=>En(a,0)))})}predict(e,t={}){let n=Sz(e);_z(n,this.inputNames,this.feedInputShapes,!1);try{let r=t.batchSize==null?32:t.batchSize;return $E(r),this.predictLoop(n,r)}finally{lh(n,e)}}predictOnBatch(e){_z(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,r){if(this.optimizer_==null)throw new vi("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let s=[];for(let o=0;o0&&e[0].shape[0]%r!=0)throw new pe(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${r}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,r,s=!0,o){let[a,i]=this.standardizeUserDataXY(e,t,s,o);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(r!=null){let u=vz(r,this.outputNames);l=[];for(let c=0;c{let o=this.checkNumSamples(t,n,s,"steps"),a=[];if(r>0)throw new Et("Verbose mode is not implemented yet.");if(s!=null)throw new Et("steps mode in testLoop() is not implemented yet");{let i=OE(o,n),l=Er(wi(0,o));for(let u=0;u1&&(s+=`_${PM(e.slice(0,n),r)}`),t.push(s)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),o=[],a=()=>{let c=[];for(let h=0;h1&&h{f=Re(f,h)}),f},i=this.collectedTrainableWeights.map(c=>c.read()),l=!0;return[this.optimizer_.minimize(a,l,i)].concat(o)}}makeTestFunction(){this.testFunction=e=>ce(()=>{let t=[],n,r=e.slice(0,this.inputs.length),s=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),o=[];for(let l=0;lHl(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let r of t)if(typeof n[r]=="string")e[r]=Hl(n[r]);else throw new Error("Serialization of non-string loss is not supported.")}return e}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[Hl(s5(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>Hl(s5(e)));{let e={};for(let t in this.metrics)e[t]=Hl(s5(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(e.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(e.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(e.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let t=$b(e.optimizer_config),n=Ci(t),r;if(typeof e.loss=="string")r=nh(e.loss);else if(Array.isArray(e.loss))r=e.loss.map(o=>nh(o));else if(e.loss!=null){r={};for(let o in e.loss)r[o]=nh(e.loss[o])}let s;if(Array.isArray(e.metrics))s=e.metrics.map(o=>nh(o));else if(e.metrics!=null){s={};for(let o in e.metrics)s[o]=nh(e.metrics[o])}this.compile({loss:r,metrics:s,optimizer:n})}async save(e,t){if(typeof e=="string"){let l=go.getSaveHandlers(e);if(l.length===0)throw new pe(`Cannot find any save handlers for URL '${e}'`);if(l.length>1)throw new pe(`Found more than one (${l.length}) save handlers for URL '${e}'`);e=l[0]}if(e.save==null)throw new pe("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await go.encodeWeights(this.getNamedWeights(t)),r=!1,s=null,a={modelTopology:this.toJSON(s,r),format:ibe,generatedBy:`TensorFlow.js tfjs-layers v${RE}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){a.trainingConfig=this.getTrainingConfig();let l="optimizer",{data:u,specs:c}=await go.encodeWeights(await this.optimizer.getWeights(),l);n.specs.push(...c),n.data=go.concatenateArrayBuffers([n.data,u])}if(this.userDefinedMetadata!=null){let l=!0;xz(this.userDefinedMetadata,this.name,l),a.userDefinedMetadata=this.userDefinedMetadata}return a.weightData=n.data,a.weightSpecs=n.specs,e.save(a)}setUserDefinedMetadata(e){xz(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};ql.className="Model";De.registerClass(ql);var Ez=class extends ql{};Ez.className="Functional";De.registerClass(Ez);async function lbe(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let r=$b(n),s=Ci(r,t);if(e.weightsManifest!=null){let o=await go.loadWeights(e.weightsManifest,e.pathPrefix,s.weights.map(i=>i.originalName)),a={};for(let i of s.weights)a[i.originalName]=o[i.originalName];s.loadWeights(a),ye(o)}return s}async function ube(e,t){if(t==null&&(t={}),typeof e=="string"){let n=go.getLoadHandlers(e,t);if(n.length===0)n.push(go.browserHTTPRequest(e,t));else if(n.length>1)throw new pe(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return cbe(e,void 0,t)}async function cbe(e,t,n){if(n==null&&(n={}),e.load==null)throw new pe("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let r=await e.load(),s=r.modelTopology;s.model_config!=null&&(s=s.model_config);let o=n.strict==null?!0:n.strict,a=r.weightData!=null&&r.weightSpecs!=null&&o,i=Ci($b(s),t,a),l=r.trainingConfig;if(l!=null&&i.loadTrainingConfig(l),r.userDefinedMetadata!=null&&i.setUserDefinedMetadata(r.userDefinedMetadata),r.weightData!=null){if(r.weightSpecs==null)throw new pe("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:u,optimizerWeights:c}=pbe(r.weightData,r.weightSpecs);i.loadWeights(u,o),i.optimizer!=null&&c.length>0&&await i.optimizer.setWeights(c),ye(u),ye(c.map(p=>p.tensor))}return i}function pbe(e,t){let n=go.decodeWeights(e,t),r={},s=[];return t.forEach(o=>{o.group==="optimizer"?s.push({name:o.name,tensor:n[o.name]}):r[o.name]=n[o.name]}),{modelWeights:r,optimizerWeights:s}}var M0=class extends ql{constructor(e){super({inputs:[],outputs:[]});if(e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:Kk("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(n=>n<0))throw new pe(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof M0||e instanceof ql,n;if(t){if(n=e,n.outputs.length!==1)throw new pe("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new pe("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new pe("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let r=rz({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(r)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new pe(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new pe("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=nz(this.outputs[0])}this.inboundNodes=[],new Yk({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:th(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(r=>r.shape),outputShapes:this.outputs[0].shape})}else{let r=e.apply(this.outputs[0]);if(Array.isArray(r))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[r],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(kn(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new ql({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){this.model==null&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new vi("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new vi("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return this.model==null&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return this.model==null&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new vi("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new vi("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},r=!1){let s,o={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new pe("Legacy serialization format not supported yet.");s=t}else E.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),s=t.layers,delete t.layers,o=t;let a=new e(o);if(!(a instanceof M0))throw new Et(`Sequential.fromConfig called on non-Sequential input: ${a}`);for(let i of s){let u=Ci(i,void 0,r);r&&u.setFastWeightInitDuringBuild(!0),a.add(u)}return a}set stopTraining(e){if(this.model==null)throw new pe("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new pe("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};M0.className="Sequential";De.registerClass(M0);function dbe(e){return new ql(e)}function fbe(e){return new M0(e)}function hbe(e,t){return t==null&&(t={}),ube(e,t)}function Rz(e){return rz(e)}function mbe(e,t){Ma.registerCallbackConstructor(e,t)}var wo=class extends De.Serializable{getConfig(){return{}}},Dz=class extends wo{apply(e,t=1){return Vye(e,t)}};Dz.className="elu";De.registerClass(Dz);var $z=class extends wo{apply(e){return hk(e)}};$z.className="selu";De.registerClass($z);var Fz=class extends wo{apply(e){return yi(e)}};Fz.className="relu";De.registerClass(Fz);var Oz=class extends wo{apply(e){return ce(()=>S0(6,yi(e)))}};Oz.className="relu6";De.registerClass(Oz);var Pz=class extends wo{apply(e){return e}};Pz.className="linear";De.registerClass(Pz);var Mz=class extends wo{apply(e){return xo(e)}};Mz.className="sigmoid";De.registerClass(Mz);var zz=class extends wo{apply(e){return Gye(e)}};zz.className="hardSigmoid";De.registerClass(zz);var Lz=class extends wo{apply(e){return Xf(e)}};Lz.className="softplus";De.registerClass(Lz);var Bz=class extends wo{apply(e){return Wye(e)}};Bz.className="softsign";De.registerClass(Bz);var Vz=class extends wo{apply(e){return Hf(e)}};Vz.className="tanh";De.registerClass(Vz);var ME=class extends wo{apply(e,t=-1){return Jf(e,t)}};ME.className="softmax";De.registerClass(ME);var Wz=class extends wo{apply(e,t=-1){return ik(e,t)}};Wz.className="logSoftmax";De.registerClass(Wz);var Gz=class extends wo{apply(e,t=1){return ce(()=>te(xo(te(e,t)),e))}};Gz.className="swish";De.registerClass(Gz);var Uz=class extends wo{apply(e){return ce(()=>te(e,Hf(Xf(e))))}};Uz.className="mish";De.registerClass(Uz);function Yc(e){return e.getClassName()}function zE(e,t={}){return Sb(e,De.SerializationMap.getMap().classNameMap,t,"activation")}function Jc(e){if(e==null){let t={};return t.className="linear",t.config={},zE(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},zE(t)}else return e instanceof wo?e:zE(e)}function LE(e){if(e!=null&&typeof e!="object")throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}var jz=class extends De.Serializable{},Pb=class extends jz{constructor(e){super();LE(e),this.l1=e==null||e.l1==null?.01:e.l1,this.l2=e==null||e.l2==null?.01:e.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(e){return ce(()=>{let t=xr([1]);return this.hasL1&&(t=Re(t,Je(te(this.l1,Tr(e))))),this.hasL2&&(t=Re(t,Je(te(this.l2,Eb(e))))),ie(t,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Pb.className="L1L2";De.registerClass(Pb);function gbe(e){return LE(e),new Pb({l1:e!=null?e.l1:null,l2:0})}function xbe(e){return LE(e),new Pb({l2:e!=null?e.l2:null,l1:0})}var Hz={l1l2:"L1L2"};function Rn(e){return nE(e)}function qz(e,t={}){return Sb(e,De.SerializationMap.getMap().classNameMap,t,"regularizer")}function nr(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in Hz?Hz[e]:e,config:{}};return qz(n)}else return e instanceof jz?e:qz(e)}var BE=class extends Yt{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=$t(e);let n=yi(e);return this.maxValue!=null&&(n=yo(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};BE.className="ReLU";De.registerClass(BE);var VE=class extends Yt{constructor(e){super(e==null?{}:e);this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=$t(e);return fb(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};VE.className="LeakyReLU";De.registerClass(VE);var WE=class extends Yt{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=tr(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=nr(e.alphaRegularizer),this.alphaConstraint=Kr(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new pe(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=kn(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let r of this.sharedAxes)t[r-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let r=1;r(Ir(t),t==="channelsFirst"?Kt(e,[0,2,3,1]):e))}function Kz(e,t){return ce(()=>(Ir(t),t==="channelsFirst"?Kt(e,[0,2,3,4,1]):e))}function ybe(e,t,n,r=1,s="valid",o,a=1){return ce(()=>{if(o==null&&(o=Ai()),Ir(o),e.shape.length!==3)throw new pe(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new pe(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new pe(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(o==="channelsFirst"&&(e=Kt(e,[0,2,1])),s==="causal")throw new Et("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let i=ek(e,t,r,s==="same"?"same":"valid","NWC",a);return n!=null&&(i=ki(i,n)),i})}function Xz(e,t,n,r=[1,1],s="valid",o,a,i=null){return ce(()=>{if(o==null&&(o=Ai()),Ir(o),e.rank!==3&&e.rank!==4)throw new pe(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new pe(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=HE(e,o);if(s==="causal")throw new Et("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=Hc.conv2d({x:l,filter:t,strides:r,pad:s==="same"?"same":"valid",dilations:a,dataFormat:"NHWC",bias:n,activation:i}),o==="channelsFirst"&&(l=Kt(l,[0,3,1,2])),l})}function bbe(e,t,n,r=[1,1,1],s="valid",o,a){return ce(()=>{if(o==null&&(o=Ai()),Ir(o),e.rank!==4&&e.rank!==5)throw new pe(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new pe(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let i=Kz(e,o);if(s==="causal")throw new Et("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return i=k_(i,t,r,s==="same"?"same":"valid","NDHWC",a),n!=null&&(i=ki(i,n)),o==="channelsFirst"&&(i=Kt(i,[0,4,1,2,3])),i})}var qE=class extends Yt{constructor(e,t){super(t);if(this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",qE.verifyArgs(t),this.rank=e,cs(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Et(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=z0(t.kernelSize,e,"kernelSize"),this.strides=z0(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,fa(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Ir(this.dataFormat),this.activation=Jc(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=tr(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Kr(t.biasConstraint),this.biasRegularizer=nr(t.biasRegularizer),this.activityRegularizer=nr(t.activityRegularizer),this.dilationRate=z0(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new pe(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new pe(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new pe(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(ul("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!sE(e.kernelSize,"number",1,3))throw new pe(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:Yc(this.activation),useBias:this.useBias,biasInitializer:pr(this.biasInitializer),biasRegularizer:Rn(this.biasRegularizer),activityRegularizer:Rn(this.activityRegularizer),biasConstraint:qr(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},Mb=class extends qE{constructor(e,t){super(e,t);this.kernel=null,Mb.verifyArgs(t),this.filters=t.filters,cs(this.filters,"filters"),this.kernelInitializer=tr(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Kr(t.kernelConstraint),this.kernelRegularizer=nr(t.kernelRegularizer)}build(e){e=kn(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new pe(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],r=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",r,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return ce(()=>{e=$t(e);let n,r=this.bias==null?null:this.bias.read(),s=zM(this.activation.getClassName());if(s!=null&&this.rank===2)n=Xz(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate,s);else{if(this.rank===1)n=ybe(e,this.kernel.read(),r,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=Xz(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=bbe(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Et("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=kn(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let s=0;s 0 but got ${JSON.stringify(e.filters)}`)}},zb=class extends Mb{constructor(e){super(2,e);zb.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!sE(e.kernelSize,"number",1,2))throw new pe(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};zb.className="Conv2D";De.registerClass(zb);var Lb=class extends Mb{constructor(e){super(3,e);Lb.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new pe(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};Lb.className="Conv3D";De.registerClass(Lb);var KE=class extends zb{constructor(e){super(e);if(this.inputSpec=[new Rr({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new pe(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=kn(e),e.length!==4)throw new pe("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new pe("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Rr({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return ce(()=>{let n=$t(e);if(n.shape.length!==4)throw new pe(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,s=r[0],o,a;this.dataFormat==="channelsFirst"?(o=2,a=3):(o=1,a=2);let i=r[o],l=r[a],u=this.kernelSize[0],c=this.kernelSize[1],p=this.strides[0],d=this.strides[1],f=dl(i,p,u,this.padding),h=dl(l,d,c,this.padding),m=[s,f,h,this.filters];this.dataFormat!=="channelsLast"&&(n=Kt(n,[0,2,3,1]));let g=tk(n,this.kernel.read(),m,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(g=Kt(g,[0,3,1,2])),this.bias!=null&&(g=ki(g,this.bias.read(),this.dataFormat)),this.activation!=null&&(g=this.activation.apply(g)),g})}computeOutputShape(e){e=kn(e);let t=e.slice(),n,r,s;this.dataFormat==="channelsFirst"?(n=1,r=2,s=3):(n=3,r=1,s=2);let o=this.kernelSize[0],a=this.kernelSize[1],i=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[r]=dl(t[r],i,o,this.padding),t[s]=dl(t[s],l,a,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};KE.className="Conv2DTranspose";De.registerClass(KE);var XE=class extends Lb{constructor(e){super(e);if(this.inputSpec=[new Rr({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new pe(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=kn(e),e.length!==5)throw new pe("Input should have rank 5; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new pe("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Rr({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return ce(()=>{let n=$t(e);if(n.shape.length!==5)throw new pe(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,s=r[0],o,a,i;this.dataFormat==="channelsFirst"?(i=2,o=3,a=4):(i=1,o=2,a=3);let l=r[i],u=r[o],c=r[a],p=this.kernelSize[0],d=this.kernelSize[1],f=this.kernelSize[2],h=this.strides[0],m=this.strides[1],g=this.strides[2],x=dl(l,h,p,this.padding),y=dl(u,m,d,this.padding),b=dl(c,g,f,this.padding),A=[s,x,y,b,this.filters];this.dataFormat!=="channelsLast"&&(n=Kt(n,[0,2,3,4,1]));let v=z9(n,this.kernel.read(),A,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(v=Kt(v,[0,4,1,2,3])),this.bias!==null&&(v=ki(v,this.bias.read(),this.dataFormat)),this.activation!==null&&(v=this.activation.apply(v)),v})}computeOutputShape(e){e=kn(e);let t=e.slice(),n,r,s,o;this.dataFormat==="channelsFirst"?(n=1,r=2,s=3,o=4):(n=4,r=1,s=2,o=3);let a=this.kernelSize[0],i=this.kernelSize[1],l=this.kernelSize[2],u=this.strides[0],c=this.strides[1],p=this.strides[2];return t[n]=this.filters,t[r]=dl(t[r],u,a,this.padding),t[s]=dl(t[s],c,i,this.padding),t[o]=dl(t[o],p,l,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};XE.className="Conv3DTranspose";De.registerClass(XE);var Zz=class extends Mb{constructor(e,t){super(e,t);if(this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new pe("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new pe("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new pe(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=tr(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=nr(t.depthwiseRegularizer),this.depthwiseConstraint=Kr(t.depthwiseConstraint),this.pointwiseInitializer=tr(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=nr(t.pointwiseRegularizer),this.pointwiseConstraint=Kr(t.pointwiseConstraint)}build(e){if(e=kn(e),e.length{e=$t(e);let n;if(this.rank===1)throw new Et("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Kt(e,[0,2,3,1])),n=V_(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=ki(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Kt(n,[0,3,1,2])),n})}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=pr(this.depthwiseInitializer),e.pointwiseInitializer=pr(this.pointwiseInitializer),e.depthwiseRegularizer=Rn(this.depthwiseRegularizer),e.pointwiseRegularizer=Rn(this.pointwiseRegularizer),e.depthwiseConstraint=qr(this.depthwiseConstraint),e.pointwiseConstraint=qr(this.pointwiseConstraint),e}};Zz.className="SeparableConv";var ZE=class extends Zz{constructor(e){super(2,e)}};ZE.className="SeparableConv2D";De.registerClass(ZE);var a5=class extends Mb{constructor(e){super(1,e);a5.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!sE(e.kernelSize,"number",1,1))throw new pe(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};a5.className="Conv1D";De.registerClass(a5);var YE=class extends Yt{constructor(e){super(e);typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return ce(()=>{if(e=$t(e),this.dataFormat==="channelsLast"){let n=zk(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return zk(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=zk(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return zk(n,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};YE.className="Cropping2D";De.registerClass(YE);var JE=class extends Yt{constructor(e){super(e);this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ir(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,Fye(this.interpolation)}computeOutputShape(e){if(this.dataFormat==="channelsFirst"){let t=e[2]==null?null:this.size[0]*e[2],n=e[3]==null?null:this.size[1]*e[3];return[e[0],e[1],t,n]}else{let t=e[1]==null?null:this.size[0]*e[1],n=e[2]==null?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return ce(()=>{let n=$t(e),r=n.shape;if(this.dataFormat==="channelsFirst"){n=Kt(n,[0,2,3,1]);let s=this.size[0]*r[2],o=this.size[1]*r[3],a=this.interpolation==="nearest"?ht.resizeNearestNeighbor(n,[s,o]):ht.resizeBilinear(n,[s,o]);return Kt(a,[0,3,1,2])}else{let s=this.size[0]*r[1],o=this.size[1]*r[2];return this.interpolation==="nearest"?ht.resizeNearestNeighbor(n,[s,o]):ht.resizeBilinear(n,[s,o])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};JE.className="UpSampling2D";De.registerClass(JE);function Abe(e,t,n=[1,1],r="valid",s,o){return ce(()=>{s==null&&(s=Ai()),Ir(s);let a=HE(e,s);if(e.rank!==4)throw new pe(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new pe(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return a=w0(a,t,n,r==="same"?"same":"valid","NHWC",o),s==="channelsFirst"&&(a=Kt(a,[0,3,1,2])),a})}var QE=class extends qE{constructor(e){super(2,e);this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=tr(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Kr(e.depthwiseConstraint),this.depthwiseRegularizer=nr(e.depthwiseRegularizer)}build(e){if(e=kn(e),e.length<4)throw new pe(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new pe(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],r=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",r,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return ce(()=>{e=$t(e);let n=Abe(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=ki(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=kn(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,s=Si(t,this.kernelSize[0],this.padding,this.strides[0]),o=Si(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],r,s,o]:[e[0],s,o,r]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=pr(this.depthwiseInitializer),e.depthwiseRegularizer=Rn(this.depthwiseRegularizer),e.depthwiseConstraint=qr(this.depthwiseRegularizer),e}};QE.className="DepthwiseConv2D";De.registerClass(QE);function Yz(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new pe("When inputs is an array, neither initialState or constants should be provided");r!=null&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function s(o){return o==null||Array.isArray(o)?o:[o]}return t=s(t),n=s(n),{inputs:e,initialState:t,constants:n}}function Jz(e,t,n,r=!1,s,o,a=!1,i=!1){return ce(()=>{let l=t.shape.length;if(l<3)throw new pe(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(wi(2,l));if(t=Kt(t,u),o!=null)throw new Et("The rnn() functoin of the deeplearn.js backend does not support constants yet.");a&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),s!=null&&(s=Fe(Fe(s,"bool"),"float32"),s.rank===l-1&&(s=kr(s,-1)),s=Kt(s,u)),r&&(t=jo(t,0),s!=null&&(s=jo(s,0)));let c=[],p,d=n,f=t.shape[0],h=Vs(t),m;s!=null&&(m=Vs(s));for(let x=0;xe(y,d));if(s==null)p=b[0],d=b[1];else{let A=ce(()=>{let v=m[x],w=Ge(Uo(v),v),k=Re(te(b[0],v),te(d[0],w)),I=d.map((N,T)=>Re(te(b[1][T],v),te(N,w)));return{output:k,newStates:I}});p=A.output,d=A.newStates}i&&c.push(p)}let g;return i&&(g=vs(c,1)),[p,g,d]})}var fl=class extends Yt{constructor(e){super(e);let t;if(e.cell==null)throw new pe("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new u5({cells:e.cell}):t=e.cell,t.stateSize==null)throw new pe("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new Rr({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return wi(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){vE(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],r;if(this.returnSequences?r=[e[0],e[1],n]:r=[e[0],n],this.returnState){let s=[];for(let o of t)s.push([e[0],o]);return[r].concat(s)}else return r}computeMask(e,t){return ce(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let r=this.states.map(s=>null);return[n].concat(r)}else return n})}get states(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;na.shape[a.shape.length-1]),o))throw new pe(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=o.map(a=>new Rr({shape:[null,a]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){ce(()=>{if(!this.stateful)throw new jl("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new pe("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>xr([n,r])):this.states_=[xr([n,this.cell.stateSize])];else if(e==null)ye(this.states_),this.keptStates!=null&&(ye(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>xr([n,r])):this.states_[0]=xr([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new pe(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):ye(this.states_);for(let r=0;rus(r.clone()))})}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let s=Yz(e,n,r,this.numConstants);e=s.inputs,n=s.initialState,r=s.constants;let o=[],a=[];if(n!=null){t.initialState=n,o=o.concat(n),this.stateSpec=[];for(let l of n)this.stateSpec.push(new Rr({shape:l.shape}));a=a.concat(this.stateSpec)}if(r!=null&&(t.constants=r,o=o.concat(r),this.numConstants=r.length),o[0]instanceof Ii){let l=[e].concat(o),u=this.inputSpec.concat(a),c=this.inputSpec;this.inputSpec=u;let p=super.apply(l,t);return this.inputSpec=c,p}else return super.apply(e,t)}call(e,t){return ce(()=>{let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;e=$t(e),s==null&&(this.stateful?s=this.states_:s=this.getInitialState(e));let o=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(s.length!==o)throw new pe(`RNN Layer has ${o} state(s) but was passed ${s.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let a={training:r},l=Jz((f,h)=>{let m=this.cell.call([f].concat(h),a);return[m[0],m.slice(1)]},e,s,this.goBackwards,n,null,this.unroll,this.returnSequences),u=l[0],c=l[1],p=l[2];this.stateful&&this.resetStates(p,r);let d=this.returnSequences?c:u;return this.returnState?[d].concat(p):d})}getInitialState(e){return ce(()=>{let t=xr(e.shape);return t=Je(t,[1,2]),t=_b(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?dE(t,[1,n]):t):this.cell.stateSize>1?[dE(t,[1,this.cell.stateSize])]:[t]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(t.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===fl.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let r=t.cell,s=Ci(r,n);return new e(Object.assign(t,{cell:s}))}};fl.className="RNN";De.registerClass(fl);var Bb=class extends Yt{},i5=class extends Bb{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,cs(this.units,"units"),this.activation=Jc(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=tr(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=tr(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=tr(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=nr(e.kernelRegularizer),this.recurrentRegularizer=nr(e.recurrentRegularizer),this.biasRegularizer=nr(e.biasRegularizer),this.kernelConstraint=Kr(e.kernelConstraint),this.recurrentConstraint=Kr(e.recurrentConstraint),this.biasConstraint=Kr(e.biasConstraint),this.dropout=$0([1,Xc([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=$0([1,Xc([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=kn(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return ce(()=>{if(e=e,e.length!==2)throw new pe(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=t.training==null?!1:t.training;0Uo(e),rate:this.dropout,training:r})),0Uo(n),rate:this.recurrentDropout,training:r}));let s,o=this.dropoutMask,a=this.recurrentDropoutMask;o!=null?s=cl(te(e,o),this.kernel.read()):s=cl(e,this.kernel.read()),this.bias!=null&&(s=ki(s,this.bias.read())),a!=null&&(n=te(n,a));let i=Re(s,cl(n,this.recurrentKernel.read()));return this.activation!=null&&(i=this.activation.apply(i)),[i,i]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Yc(this.activation),useBias:this.useBias,kernelInitializer:pr(this.kernelInitializer),recurrentInitializer:pr(this.recurrentInitializer),biasInitializer:pr(this.biasInitializer),kernelRegularizer:Rn(this.kernelRegularizer),recurrentRegularizer:Rn(this.recurrentRegularizer),biasRegularizer:Rn(this.biasRegularizer),activityRegularizer:Rn(this.activityRegularizer),kernelConstraint:qr(this.kernelConstraint),recurrentConstraint:qr(this.recurrentConstraint),biasConstraint:qr(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};i5.className="SimpleRNNCell";De.registerClass(i5);var e4=class extends fl{constructor(e){e.cell=new i5(e);super(e)}call(e,t){return ce(()=>{this.cell.dropoutMask!=null&&(ye(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ye(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}static fromConfig(e,t){return new e(t)}};e4.className="SimpleRNN";De.registerClass(e4);var l5=class extends Bb{constructor(e){super(e);if(this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new pe("GRUCell does not support reset_after parameter set to true.");this.units=e.units,cs(this.units,"units"),this.activation=Jc(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Jc(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=tr(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=tr(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=tr(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=nr(e.kernelRegularizer),this.recurrentRegularizer=nr(e.recurrentRegularizer),this.biasRegularizer=nr(e.biasRegularizer),this.kernelConstraint=Kr(e.kernelConstraint),this.recurrentConstraint=Kr(e.recurrentConstraint),this.biasConstraint=Kr(e.biasConstraint),this.dropout=$0([1,Xc([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=$0([1,Xc([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=kn(e);let t=e[e.length-1];this.kernel=this.addWeight("kernel",[t,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return ce(()=>{if(e=e,e.length!==2)throw new pe(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,r=e[1];e=e[0],0Uo(e),rate:this.dropout,training:n,count:3})),0Uo(r),rate:this.recurrentDropout,training:n,count:3}));let s=this.dropoutMask,o=this.recurrentDropoutMask,a,i,l;0{this.cell.dropoutMask!=null&&(ye(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ye(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};t4.className="GRU";De.registerClass(t4);var Vb=class extends Bb{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,cs(this.units,"units"),this.activation=Jc(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Jc(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=tr(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=tr(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=tr(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=nr(e.kernelRegularizer),this.recurrentRegularizer=nr(e.recurrentRegularizer),this.biasRegularizer=nr(e.biasRegularizer),this.kernelConstraint=Kr(e.kernelConstraint),this.recurrentConstraint=Kr(e.recurrentConstraint),this.biasConstraint=Kr(e.biasConstraint),this.dropout=$0([1,Xc([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=$0([1,Xc([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;e=kn(e);let n=e[e.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let r;if(this.useBias){if(this.unitForgetBias){let s=this.biasInitializer,o=this.units;r=new(t=class extends Pa{apply(i,l){let u=s.apply([o]),c=new Bk().apply([o]),p=s.apply([o*2]);return qM(qM(u,c),p)}},t.className="CustomInit",t)}else r=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,r,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return ce(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new pe(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],s=e[2];e=e[0],0Uo(e),rate:this.dropout,training:n,count:4})),0Uo(r),rate:this.recurrentDropout,training:n,count:4}));let o=this.dropoutMask,a=this.recurrentDropoutMask,i,l,u,c;0{this.cell.dropoutMask!=null&&(ye(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ye(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};n4.className="LSTM";De.registerClass(n4);var u5=class extends Bb{constructor(e){super(e);this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return ce(()=>{e=e;let n=e.slice(1),r=[];for(let a of this.cells.slice().reverse())Array.isArray(a.stateSize)?r.push(n.splice(0,a.stateSize.length)):r.push(n.splice(0,1));r.reverse();let s=[],o;for(let a=0;a{sh(`RNNCell_${r}`,()=>{n.build(e),Array.isArray(n.stateSize)?t=n.stateSize[0]:t=n.stateSize,e=[e[0],t]})}),this.built=!0}getConfig(){let e=super.getConfig(),t=s=>({className:s.getClassName(),config:s.getConfig()}),r={cells:this.cells.map(t)};return Object.assign({},e,r)}static fromConfig(e,t,n={}){let r=[];for(let s of t.cells)r.push(Ci(s,n));return new e({cells:r})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return wE(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,s=e.splice(r);for(let o=0;oXM(t(),n),a=()=>Rb(o,t,r);return!s||s<=1?us(a().clone()):Array(s).fill(void 0).map(a).map(l=>us(l.clone()))}var vbe=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,r=Object.getOwnPropertySymbols(e);s{if(this.cell.dropoutMask!=null&&(ye(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ye(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new pe("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return ce(()=>{let{stateSize:t}=this.cell,n=e.shape,r=this.computeSingleOutputShape(n),s=[r[0],...r.slice(2)],o=xr(s);return Array.isArray(t)?Array(t.length).fill(o):[o]})}resetStates(e,t=!1){ce(()=>{if(!this.stateful)throw new jl("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),s=[r[0],...r.slice(2)];if(n[0]==null)throw new pe("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>xr(s)):this.states_=[xr(s)];else if(e==null)ye(this.states_),this.keptStates!=null&&(ye(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>xr(s)):this.states_[0]=xr(s);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new pe(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):ye(this.states_);for(let a=0;aus(a.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:s,strides:o,dilationRate:a}=this.cell,i=t==="channelsFirst",l=e[i?3:2],u=e[i?4:3],c=Si(l,r[0],s,o[0],a[0]),p=Si(u,r[1],s,o[1],a[1]);return[...e.slice(0,2),...i?[n,c,p]:[c,p,n]]}};Qz.className="ConvRNN2D";var c5=class extends Vb{constructor(e){let{filters:t,kernelSize:n,strides:r,padding:s,dataFormat:o,dilationRate:a}=e;super(Object.assign({},e,{units:t}));this.filters=t,cs(this.filters,"filters"),this.kernelSize=z0(n,2,"kernelSize"),this.kernelSize.forEach(i=>cs(i,"kernelSize")),this.strides=z0(r||1,2,"strides"),this.strides.forEach(i=>cs(i,"strides")),this.padding=s||"valid",fa(this.padding),this.dataFormat=o||"channelsLast",Ir(this.dataFormat),this.dilationRate=z0(a||1,2,"dilationRate"),this.dilationRate.forEach(i=>cs(i,"dilationRate"))}build(e){var t;e=kn(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new pe(`The channel dimension of the input should be defined. Found ${e[n]}`);let r=e[n],s=4,o=this.kernelSize.concat([r,this.filters*s]);this.kernel=this.addWeight("kernel",o,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let a=this.kernelSize.concat([this.filters,this.filters*s]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",a,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let i;if(this.unitForgetBias){let l=this.biasInitializer,u=this.filters;i=new(t=class extends Pa{apply(p,d){let f=l.apply([u]),h=Go([u]),m=l.apply([u*2]);return pE([f,h,m])}},t.className="CustomInit",t)}else i=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*s],null,i,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return ce(()=>{if(e.length!==3)throw new pe(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,r=e[0],s=e[1],o=e[2],a=4;0Uo(r),rate:this.dropout,training:n,count:a}));let i=this.dropoutMask,l=(J,Q,ee)=>!Q||!Q[ee]?J:te(Q[ee],J),u=l(r,i,0),c=l(r,i,1),p=l(r,i,2),d=l(r,i,3);0Uo(s),rate:this.recurrentDropout,training:n,count:a}));let f=this.recurrentDropoutMask,h=l(s,f,0),m=l(s,f,1),g=l(s,f,2),x=l(s,f,3),y=3,[b,A,v,w]=_r(this.kernel.read(),a,y),[k,I,N,T]=this.useBias?_r(this.bias.read(),a):[null,null,null,null];u=this.inputConv(u,b,k,this.padding),c=this.inputConv(c,A,I,this.padding),p=this.inputConv(p,v,N,this.padding),d=this.inputConv(d,w,T,this.padding);let[_,R,S,F]=_r(this.recurrentKernel.read(),a,y);h=this.recurrentConv(h,_),m=this.recurrentConv(m,R),g=this.recurrentConv(g,S),x=this.recurrentConv(x,F);let B=this.recurrentActivation.apply(Re(u,h)),W=this.recurrentActivation.apply(Re(c,m)),q=Re(te(W,o),te(B,this.activation.apply(Re(p,g)))),K=te(this.recurrentActivation.apply(Re(d,x)),this.activation.apply(q));return[K,K,q]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=vbe(e,["units"]),r={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},n,r)}inputConv(e,t,n,r){let s=Bl(e,t,this.strides,r||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?ki(s,n,this.dataFormat):s}recurrentConv(e,t){return Bl(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};c5.className="ConvLSTM2DCell";De.registerClass(c5);var r4=class extends Qz{constructor(e){let t=new c5(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};r4.className="ConvLSTM2D";De.registerClass(r4);var p5=class extends Yt{constructor(e){super(e);this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let r=0;r{this.invokeCallHook(e,t);let n=$t(e);if(0XM(n,this.rate,s,this.seed),()=>n,r)}return e})}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};p5.className="Dropout";De.registerClass(p5);var s4=class extends p5{constructor(e){super(e);this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};s4.className="SpatialDropout1D";De.registerClass(s4);var o4=class extends Yt{constructor(e){super(e);if(this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,cs(this.units,"units"),this.activation=Jc(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=tr(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=tr(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Kr(e.kernelConstraint),this.biasConstraint=Kr(e.biasConstraint),this.kernelRegularizer=nr(e.kernelRegularizer),this.biasRegularizer=nr(e.biasRegularizer),this.activityRegularizer=nr(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=kn(e);let t=e[e.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){e=kn(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return ce(()=>{this.invokeCallHook(e,t);let n=$t(e),r=zM(this.activation.getClassName()),s;return r!=null?s=cl(n,this.kernel.read(),r,this.bias?this.bias.read():null):(s=cl(n,this.kernel.read()),this.bias!=null&&(s=ki(s,this.bias.read())),this.activation!=null&&(s=this.activation.apply(s))),s})}getConfig(){let e={units:this.units,activation:Yc(this.activation),useBias:this.useBias,kernelInitializer:pr(this.kernelInitializer),biasInitializer:pr(this.biasInitializer),kernelRegularizer:Rn(this.kernelRegularizer),biasRegularizer:Rn(this.biasRegularizer),activityRegularizer:Rn(this.activityRegularizer),kernelConstraint:qr(this.kernelConstraint),biasConstraint:qr(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};o4.className="Dense";De.registerClass(o4);var a4=class extends Yt{constructor(e){e=e||{};super(e);this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=kn(e);for(let t of e.slice(1))if(t==null)throw new pe(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],Kc(e,1)]}call(e,t){return ce(()=>{this.invokeCallHook(e,t);let n=$t(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let r=[0];for(let s=2;s{this.invokeCallHook(e,t);let n=$t(e);return this.activation.apply(n)})}getConfig(){let e={activation:Yc(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};i4.className="Activation";De.registerClass(i4);var l4=class extends Yt{constructor(e){super(e);this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return ce(()=>(e=$t(e),zye(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};l4.className="RepeatVector";De.registerClass(l4);var u4=class extends Yt{constructor(e){super(e);this.targetShape=e.targetShape;for(let t=0;t{this.invokeCallHook(e,t);let n=$t(e),r=n.shape,s=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return ie(n,s)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};u4.className="Reshape";De.registerClass(u4);var c4=class extends Yt{constructor(e){super(e);if(e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=wi(1,e.dims.length+1);if(!E.arraysEqual(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new Rr({ndim:this.dims.length+1})]}computeOutputShape(e){e=kn(e);let t=e.slice();return this.dims.forEach((n,r)=>{t[r+1]=e[n]}),t}call(e,t){return Kt($t(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};c4.className="Permute";De.registerClass(c4);var p4=class extends Yt{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=$t(e),r=-1;return lb(Yf(n,this.maskValue),r)}call(e,t){return ce(()=>{this.invokeCallHook(e,t);let n=$t(e),r=-1,s=!0,o=lb(Yf(n,this.maskValue),r,s);return te(n,Fe(o,n.dtype))})}};p4.className="Masking";De.registerClass(p4);var d4=class extends Yt{constructor(e){super(e);if(this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(Gn(e.inputLength))}this.inputDim=e.inputDim,cs(this.inputDim,"inputDim"),this.outputDim=e.outputDim,cs(this.outputDim,"outputDim"),this.embeddingsInitializer=tr(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=nr(e.embeddingsRegularizer),this.activityRegularizer=nr(e.activityRegularizer),this.embeddingsConstraint=Kr(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return ce(()=>this.maskZero?(e=$t(e),Yf(e,Xt(e))):null)}computeOutputShape(e){if(e=kn(e),this.inputLength==null)return[...e,this.outputDim];let t=Gn(this.inputLength);if(t.length!==e.length-1)throw new pe(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r{this.invokeCallHook(e,t);let n=$t(e);n.dtype!=="int32"&&(n=Mk(n,"int32"));let r=KM(this.embeddings.read(),ie(n,[n.size]));return ie(r,kn(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:pr(this.embeddingsInitializer),embeddingsRegularizer:Rn(this.embeddingsRegularizer),activityRegularizer:Rn(this.activityRegularizer),embeddingsConstraint:qr(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};d4.className="Embedding";De.registerClass(d4);var uh=class extends Yt{constructor(e){super(e||{});this.supportsMasking=!0}mergeFunction(e){throw new Et}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length1)throw new pe(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let s=1;ss.length);e.indexOf(null)===-1&&qc(r).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return ce(()=>{if(e=e,this.reshapeRequired){let n=[],r=e.map(s=>s.rank);if(r.indexOf(null)===-1){let s=Xc(r);for(let o of e){let a=o.rank;for(let i=0;i1){let u=wi(1,l).concat([0]);n.push(Kt(i,u)),s=!0}else n.push(i)}let o=this.mergeFunction(n),a=o.rank;if(s){if(a==null){let i=o.shape,l=i.length,u=i[l-1],c=[u].concat(i.slice(0,i.length-1));o=ie(Kt(ie(o,[-1,u]),[1,0]),c)}else if(a>1){let i=[a-1].concat(wi(0,a-1));o=Kt(o,i)}}return o}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let r=1;r{if(t==null)return null;if(!Array.isArray(t))throw new pe("`mask` should be an Array");if(!Array.isArray(e))throw new pe("`inputs` should be an Array");if(t.length!==e.length)throw new pe(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(r=>r==null))return null;t=t.map(r=>r==null?r:kr(r,0));let n=t[0];for(let r=1;r{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0];for(let n=1;n{let t=e[0];for(let n=1;n1)throw new pe("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return ce(()=>pE(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new pe("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),r=this.axis<0?n.length+this.axis:this.axis;for(let s of t.slice(1)){if(n[r]==null||s[r]==null){n[r]=null;break}n[r]+=s[r]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new pe("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new pe("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new pe(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return ce(()=>{let n=!0;if(t.forEach(o=>{if(o!=null){n=!1;return}}),n)return null;let r=[];for(let o=0;o3||t.shape.length>3)throw new Et("batchDot is not implemented for tensors of 4D or higher rank yet");if(E.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),E.assert(e.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof n=="number"&&(n=[n,n]),e.dtype==="complex64"||t.dtype==="complex64")throw new Et("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,s=t.shape.length;n==null&&(n=[r-1,s-2]);let o=n;return ce(()=>{let a;if(r>s){a=r-s;let l=[];for(let u=0;ur){a=s-r;let l=[];for(let u=0;u0){let l;r>s?l=r+s-3:l=r-1;let u=[];for(let c=l;c"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0],n=e[1];if(t.length>3||n.length>3)throw new Et("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new pe(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(e.length!==2)throw new pe(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],r;return Array.isArray(this.axes)?r=this.axes.map((s,o)=>Wb(s,e[o].shape.length)):r=[Wb(this.axes,t.shape.length),Wb(this.axes,n.shape.length)],this.normalize&&(t=Jk(t,r[0]),n=Jk(n,r[1])),wbe(t,n,r)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Wb(this.axes,e.length),Wb(this.axes,t.length)],n}computeOutputShape(e){E.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new Et("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);t.splice(r[0],1),n.splice(r[1],1),n.splice(0,1);let s=t.concat(n);return s.length===1&&s.push(1),s}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};b4.className="Dot";De.registerClass(b4);var A4=class extends Yt{constructor(e){super(e);this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return ce(()=>{this.invokeCallHook(e,t);let n=$t(e);return Rb(()=>Re(Lk(n.shape,0,this.stddev),n),()=>n,t.training||!1)})}};A4.className="GaussianNoise";De.registerClass(A4);var v4=class extends Yt{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return ce(()=>{this.invokeCallHook(e,t);let n=$t(e);return this.rate>0&&this.rate<1?Rb(()=>{let s=Math.sqrt(this.rate/(1-this.rate));return te(n,Lk(n.shape,1,s))},()=>n,t.training||!1):n})}};v4.className="GaussianDropout";De.registerClass(v4);var w4=class extends Yt{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||$t(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return ce(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return Rb(()=>{let s=$t(e),o=1.6732632423543772,a=1.0507009873554805,i=-o*a,l=Uc(N0(n),this.rate);l=Mk(l,"float32");let u=((1-this.rate)*(1+this.rate*i**2))**-.5,c=-u*i*this.rate,p=Re(te(s,l),te(Re(l,-1),i));return Re(te(p,u),c)},()=>$t(e),t.training||!1)}return e})}};w4.className="AlphaDropout";De.registerClass(w4);function Gb(e,t,n,r,s,o=.001){let a;if(e.rank===2)a=E9(e,t,n,r,s,o);else if(e.rank===3)a=R9(e,t,n,r,s,o);else if(e.rank===4)a=D9(e,t,n,r,s,o);else throw new Et(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return a}function kbe(e,t,n,r,s=.001){return ce(()=>{let o=uk(e,r),a=o.mean,i=o.variance;return[Gb(e,a,i,n,t,s),a,i]})}function Ibe(e,t,n,r,s=.001){return ce(()=>{let o=uk(e,r),a=o.mean,i=o.variance,l=[];for(let h of wi(0,e.rank))r.indexOf(h)!==-1?l.push(1):l.push(e.shape[h]);let u=ie(a,l),c=ie(i,l),p=t==null?null:ie(t,l),d=n==null?null:ie(n,l);return[Gb(e,u,c,d,p,s),a,i]})}function Cbe(e,t,n,r,s=.001){return E.arraysEqual(r.slice().sort(),wi(0,e.rank-1))?kbe(e,t,n,r,s):Ibe(e,t,n,r,s)}var k4=class extends Yt{constructor(e){e==null&&(e={});super(e);this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=tr(e.betaInitializer||"zeros"),this.gammaInitializer=tr(e.gammaInitializer||"ones"),this.movingMeanInitializer=tr(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=tr(e.movingVarianceInitializer||"ones"),this.betaConstraint=Kr(e.betaConstraint),this.gammaConstraint=Kr(e.gammaConstraint),this.betaRegularizer=nr(e.betaRegularizer),this.gammaRegularizer=nr(e.gammaRegularizer)}build(e){e=kn(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new pe(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Rr({ndim:e.length,axes:{[t]:n}})];let r=[n];this.scale&&(this.gamma=this.addWeight("gamma",r,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",r,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",r,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",r,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return ce(()=>{let n=t.training==null?!1:t.training,r=$t(e),s=r.shape,o=s.length,a=wi(0,o),i=this.axis>=0?this.axis:this.axis+o;a.splice(i,1);let l=th(1,o);l[i]=s[i];let u=a.slice();u.sort();let c=!E.arraysEqual(u,wi(0,o).slice(0,o-1)),p=()=>{if(c){let x=ie(this.movingMean.read(),l),y=ie(this.movingVariance.read(),l),b=this.center?ie(this.beta.read(),l):null,A=this.scale?ie(this.gamma.read(),l):null;return Gb(r,x,y,b,A,this.epsilon)}else return Gb(r,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!n)return p();let[d,f,h]=Cbe(r,this.gamma.read(),this.beta.read(),a,this.epsilon),m=(x,y,b)=>{ce(()=>{let A=1-b,v=x.read(),w=te(Ge(v,y),A);x.write(Ge(v,w))})};return(()=>{m(this.movingMean,f,this.momentum),m(this.movingVariance,h,this.momentum)})(),d})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:pr(this.betaInitializer),gammaInitializer:pr(this.gammaInitializer),movingMeanInitializer:pr(this.movingMeanInitializer),movingVarianceInitializer:pr(this.movingVarianceInitializer),betaRegularizer:Rn(this.betaRegularizer),gammaRegularizer:Rn(this.gammaRegularizer),betaConstraint:qr(this.betaConstraint),gammaConstraint:qr(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};k4.className="BatchNormalization";De.registerClass(k4);var I4=class extends Yt{constructor(e){e==null&&(e={});super(e);if(this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=tr(e.betaInitializer||"zeros"),this.gammaInitializer=tr(e.gammaInitializer||"ones"),this.betaRegularizer=nr(e.betaRegularizer),this.gammaRegularizer=nr(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=kn(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let s=0;s=t)throw new Error(`Invalid axis: ${s}`);if(this.axis.length!==qc(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(s=>e[s]),r=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,r):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,r):this.beta=null,this.built=!0}call(e,t){let n=$t(e),r=n.shape,s=r.length;return ce(()=>{let o=!0,{mean:a,variance:i}=uk(n,this.axis,o),l=th(1,s);for(let h of this.axis)l[h]=r[h];let u=h=>h!=null&&h.shape.length!==s&&this.axis!==[s-1]?ie(h,l):h,c=u(this.gamma.read()),p=u(this.beta.read()),d=[],f=[];for(let h=0;h{if(e.rank!==4)throw new pe(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new pe("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=Ai()),n!=="channelsLast"&&n!=="channelsFirst")throw new pe(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let r;return n==="channelsFirst"?r=[[0,0],[0,0],t[0],t[1]]:r=[[0,0],t[0],t[1],[0,0]],Vl(e,r)})}var C4=class extends Yt{constructor(e){e==null&&(e={});super(e);if(this.dataFormat=e.dataFormat==null?Ai():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new pe(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new pe(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new pe(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Rr({ndim:4})]}computeOutputShape(e){e=kn(e);let t,n;return this.dataFormat==="channelsFirst"?(e[2]!=null&&e[2]>=0?t=e[2]+this.padding[0][0]+this.padding[0][1]:t=null,e[3]!=null&&e[3]>=0?n=e[3]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],e[1],t,n]):(e[1]!=null&&e[1]>=0?t=e[1]+this.padding[0][0]+this.padding[0][1]:t=null,e[2]!=null&&e[2]>=0?n=e[2]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],t,n,e[3]])}call(e,t){return ce(()=>Sbe($t(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};C4.className="ZeroPadding2D";De.registerClass(C4);function d5(e,t,n,r,s,o){return ce(()=>{Ir(s),WM(o),fa(r),n==null&&(n=[1,1]),r==null&&(r="valid"),s==null&&(s=Ai()),o==null&&(o="max"),e=HE(e,s);let a,i=r==="same"?"same":"valid";return o==="max"?a=gb(e,t,n,i):a=cb(e,t,n,i),s==="channelsFirst"&&(a=Kt(a,[0,3,1,2])),a})}function eL(e,t,n,r,s,o){return ce(()=>{Ir(s),WM(o),fa(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),s==null&&(s=Ai()),o==null&&(o="max"),e=Kz(e,s);let a,i=r==="same"?"same":"valid";return o==="max"?a=O_(e,t,n,i):a=b_(e,t,n,i),s==="channelsFirst"&&(a=Kt(a,[0,4,1,2,3])),a})}var tL=class extends Yt{constructor(e){e.poolSize==null&&(e.poolSize=2);super(e);if(typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new pe(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(cs(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new pe(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);cs(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,fa(this.padding),this.inputSpec=[new Rr({ndim:3})]}computeOutputShape(e){e=kn(e);let t=Si(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return ce(()=>{this.invokeCallHook(e,t),e=_b($t(e),2);let n=this.poolingFunction($t(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return ln(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},S4=class extends tL{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Ir(s),fa(r),d5(e,t,n,r,s,"max")}};S4.className="MaxPooling1D";De.registerClass(S4);var N4=class extends tL{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Ir(s),fa(r),d5(e,t,n,r,s,"avg")}};N4.className="AveragePooling1D";De.registerClass(N4);var nL=class extends Yt{constructor(e){e.poolSize==null&&(e.poolSize=[2,2]);super(e);if(this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new pe(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];cs(this.poolSize,"poolSize"),cs(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ir(this.dataFormat),fa(this.padding),this.inputSpec=[new Rr({ndim:4})]}computeOutputShape(e){e=kn(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=Si(t,this.poolSize[0],this.padding,this.strides[0]),n=Si(n,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return ce(()=>(this.invokeCallHook(e,t),this.poolingFunction($t(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},T4=class extends nL{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Ir(s),fa(r),d5(e,t,n,r,s,"max")}};T4.className="MaxPooling2D";De.registerClass(T4);var _4=class extends nL{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Ir(s),fa(r),d5(e,t,n,r,s,"avg")}};_4.className="AveragePooling2D";De.registerClass(_4);var rL=class extends Yt{constructor(e){e.poolSize==null&&(e.poolSize=[2,2,2]);super(e);if(this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new pe(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];cs(this.poolSize,"poolSize"),cs(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ir(this.dataFormat),fa(this.padding),this.inputSpec=[new Rr({ndim:5})]}computeOutputShape(e){e=kn(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=Si(t,this.poolSize[0],this.padding,this.strides[0]),n=Si(n,this.poolSize[1],this.padding,this.strides[1]),r=Si(r,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,r]:[e[0],t,n,r,e[4]]}call(e,t){return ce(()=>(this.invokeCallHook(e,t),this.poolingFunction($t(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},E4=class extends rL{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Ir(s),fa(r),eL(e,t,n,r,s,"max")}};E4.className="MaxPooling3D";De.registerClass(E4);var R4=class extends rL{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Ir(s),fa(r),eL(e,t,n,r,s,"avg")}};R4.className="AveragePooling3D";De.registerClass(R4);var sL=class extends Yt{constructor(e){super(e);this.inputSpec=[new Rr({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Et}},D4=class extends sL{constructor(e){super(e||{})}call(e,t){return ce(()=>{let n=$t(e);return cr(n,1)})}};D4.className="GlobalAveragePooling1D";De.registerClass(D4);var $4=class extends sL{constructor(e){super(e||{})}call(e,t){return ce(()=>{let n=$t(e);return Wo(n,1)})}};$4.className="GlobalMaxPooling1D";De.registerClass($4);var oL=class extends Yt{constructor(e){super(e);this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ir(this.dataFormat),this.inputSpec=[new Rr({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Et}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},F4=class extends oL{call(e,t){return ce(()=>{let n=$t(e);return this.dataFormat==="channelsLast"?cr(n,[1,2]):cr(n,[2,3])})}};F4.className="GlobalAveragePooling2D";De.registerClass(F4);var O4=class extends oL{call(e,t){return ce(()=>{let n=$t(e);return this.dataFormat==="channelsLast"?Wo(n,[1,2]):Wo(n,[2,3])})}};O4.className="GlobalMaxPooling2D";De.registerClass(O4);var aL=class extends Yt{constructor(e){super(e);this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let r=t.layer,s=Ci(r,n);delete t.layer;let o={layer:s};return Object.assign(o,t),new e(o)}},P4=class extends aL{constructor(e){super(e);this.supportsMasking=!0}build(e){if(e=kn(e),e.length<3)throw new pe(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=kn(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),r=e[1];return[n[0],r].concat(n.slice(1))}call(e,t){return ce(()=>(e=$t(e),Jz((o,a)=>[$t(this.layer.call(o,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};P4.className="TimeDistributed";De.registerClass(P4);function Nbe(e){rh($ye,"BidirectionalMergeMode",e)}var Tbe="concat",M4=class extends aL{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Ci(n),t.goBackwards=t.goBackwards!==!0;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=Ci(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?Tbe:e.mergeMode,Nbe(this.mergeMode),e.weights)throw new Et("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,r,s;return this.returnState&&(s=t.slice(1)),n=t[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,r=[n]):this.mergeMode==null?r=[n,n.slice()]:r=[n],this.returnState?this.mergeMode==null?r.concat(s).concat(s.slice()):[n].concat(s).concat(s.slice()):Ao(r)}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let s=Yz(e,n,r,this.numConstants);if(e=s.inputs,n=s.initialState,r=s.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&r==null)return super.apply(e,t);let o=[],a=[];if(n!=null){let l=n.length;if(l%2>0)throw new pe("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,o.push(...n);let u=n.map(c=>new Rr({shape:c.shape}));this.forwardLayer.stateSpec=u.slice(0,l/2),this.backwardLayer.stateSpec=u.slice(l/2),a.push(...u)}if(r!=null)throw new Et("Support for constants in Bidirectional layers is not implemented yet.");let i=o[0]instanceof Ii;for(let l of o)if(l instanceof Ii!==i)throw new pe("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(i){let l=[e].concat(o),u=this.inputSpec.concat(a),c=this.inputSpec;this.inputSpec=u;let p=super.apply(l,t);return this.inputSpec=c,p}else return super.apply(e,t)}call(e,t){return ce(()=>{let n=t.initialState,r,s;if(n==null)r=this.forwardLayer.call(e,t),s=this.backwardLayer.call(e,t);else{let i=n.slice(0,n.length/2),l=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:i})),s=this.backwardLayer.call(e,Object.assign(t,{initialState:l}))}let o;this.returnState&&(Array.isArray(r)&&(o=r.slice(1).concat(s.slice(1))),r=r[0],s=s[0]),this.returnSequences&&(s=jo(s,1));let a;return this.mergeMode==="concat"?a=pE([r,s]):this.mergeMode==="sum"?a=Re(r,s):this.mergeMode==="ave"?a=te(.5,Re(r,s)):this.mergeMode==="mul"?a=te(r,s):this.mergeMode==null&&(a=[r,s]),this.returnState?this.mergeMode==null?a.concat(o):[a].concat(o):a})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){sh(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),sh(this.backwardLayer.name,()=>{this.backwardLayer.build(e)}),this.built=!0}computeMask(e,t){Array.isArray(t)&&(t=t[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[t,t]:n=t:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let s=this.forwardLayer.states.map(o=>null);return Array.isArray(n)?n.concat(s).concat(s):[n].concat(s).concat(s)}else return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(e),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=Ci(t.layer);if(delete t.layer,t.numConstants!=null)throw new Et("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};M4.className="Bidirectional";De.registerClass(M4);function _be(e){return new F0(e)}function Ebe(e){return new GE(e)}function Rbe(e){return new BE(e)}function Dbe(e){return new VE(e)}function $be(e){return new WE(e)}function Fbe(e){return new jE(e)}function Obe(e){return new UE(e)}function Pbe(e){return new a5(e)}function Mbe(e){return new zb(e)}function zbe(e){return new KE(e)}function Lbe(e){return new Lb(e)}function Bbe(e){return new XE(e)}function Vbe(e){return new ZE(e)}function Wbe(e){return new YE(e)}function Gbe(e){return new JE(e)}function Ube(e){return new QE(e)}function jbe(e){return new i4(e)}function Hbe(e){return new o4(e)}function qbe(e){return new p5(e)}function Kbe(e){return new s4(e)}function Xbe(e){return new a4(e)}function Zbe(e){return new l4(e)}function Ybe(e){return new u4(e)}function Jbe(e){return new c4(e)}function Qbe(e){return new d4(e)}function eAe(e){return new f4(e)}function tAe(e){return new m4(e)}function nAe(e){return new y4(e)}function rAe(e){return new g4(e)}function sAe(e){return new x4(e)}function oAe(e){return new h4(e)}function aAe(e){return new b4(e)}function iAe(e){return new k4(e)}function lAe(e){return new I4(e)}function uAe(e){return new C4(e)}function z4(e){return new N4(e)}function cAe(e){return z4(e)}function pAe(e){return z4(e)}function L4(e){return new _4(e)}function dAe(e){return L4(e)}function fAe(e){return L4(e)}function B4(e){return new R4(e)}function hAe(e){return B4(e)}function mAe(e){return B4(e)}function gAe(e){return new D4(e)}function xAe(e){return new F4(e)}function iL(e){return new $4(e)}function lL(e){return new O4(e)}function uL(e){return new S4(e)}function cL(e){return new T4(e)}function yAe(e){return new E4(e)}function bAe(e){return new t4(e)}function AAe(e){return new l5(e)}function vAe(e){return new n4(e)}function wAe(e){return new Vb(e)}function kAe(e){return new e4(e)}function IAe(e){return new i5(e)}function CAe(e){return new r4(e)}function SAe(e){return new c5(e)}function NAe(e){return new fl(e)}function TAe(e){return new u5(e)}function _Ae(e){return new M4(e)}function EAe(e){return new P4(e)}var RAe=iL,DAe=lL,$Ae=uL,FAe=cL;function OAe(e){return new A4(e)}function PAe(e){return new v4(e)}function MAe(e){return new w4(e)}function zAe(e){return new p4(e)}var pL={};Rt(pL,{MAPE:()=>XAe,MSE:()=>JAe,binaryAccuracy:()=>LAe,binaryCrossentropy:()=>BAe,categoricalAccuracy:()=>WAe,categoricalCrossentropy:()=>GAe,cosineProximity:()=>HAe,mape:()=>ZAe,meanAbsoluteError:()=>qAe,meanAbsolutePercentageError:()=>KAe,meanSquaredError:()=>YAe,mse:()=>QAe,precision:()=>UAe,recall:()=>jAe,sparseCategoricalAccuracy:()=>VAe});function LAe(e,t){return SE(e,t)}function BAe(e,t){return fz(e,t)}function VAe(e,t){return hz(e,t)}function WAe(e,t){return NE(e,t)}function GAe(e,t){return TE(e,t)}function UAe(e,t){return dz(e,t)}function jAe(e,t){return T1e(e,t)}function HAe(e,t){return IE(e,t)}function qAe(e,t){return Qk(e,t)}function KAe(e,t){return P0(e,t)}function XAe(e,t){return P0(e,t)}function ZAe(e,t){return P0(e,t)}function YAe(e,t){return ah(e,t)}function JAe(e,t){return ah(e,t)}function QAe(e,t){return ah(e,t)}var dL={};Rt(dL,{modelFromJSON:()=>lbe});var fL={};Rt(fL,{l1:()=>t2e,l1l2:()=>e2e,l2:()=>n2e});function e2e(e){return new Pb(e)}function t2e(e){return gbe(e)}function n2e(e){return xbe(e)}var hL=class extends O0{constructor(){super(...arguments);this.model=null}setModel(e){if(!(e instanceof ql))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function f5(e,t){return et}var gL=class extends hL{constructor(e){super();if(e==null&&(e={}),e.restoreBestWeights)throw new Et("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=f5:this.mode==="max"?this.monitorFunc=mL:this.monitor.indexOf("acc")!==-1?this.monitorFunc=mL:this.monitorFunc=f5,this.monitorFunc===f5&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===f5?1/0:-1/0}async onEpochEnd(e,t){await Zc(t);let n=this.getMonitorValue(t);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){e==null&&(e={});let t=e[this.monitor];return t==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};function r2e(e){return new gL(e)}var s2e={earlyStopping:r2e},Ni;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF"})(Ni||(Ni={}));var xL;(function(e){let t;(function(n){n[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(xL||(xL={}));var V4={};function o2e(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};V4[e]=n}function yL(e){return V4[e]}function a2e(e){delete V4[e]}function $(e,t,n,r,s){let o=t.inputParams[e];if(o&&o.inputIndexStart!==void 0){let i=o.inputIndexStart,l=o.inputIndexEnd===0?void 0:o.inputIndexEnd===void 0?i+1:o.inputIndexEnd;if(o.type==="tensor")return Gs(t.inputNames[o.inputIndexStart],n,r,s);if(o.type==="tensors")return t.inputNames.slice(i,l).map(d=>Gs(d,n,r,s));let u=Gs(t.inputNames.slice(i)[0],n,r,s),c=u.dataSync();return o.type==="number"?c[0]:E.toNestedArray(u.shape,c)}let a=t.attrParams[e];return a&&a.value}function Gs(e,t,n,r){let[s,o]=Ho(e);if(r!=null){let i=r.getHashTableHandleByName(s);if(i!=null)return i}let a=n.currentContextIds.find(i=>!!t[h5(s,i)]);return a!==void 0?t[h5(s,a)][o]:void 0}function i2e(e,t,n){return t[h5(e,n.currentContextId)]}function Kl(e,t){let[n,r,s]=Ho(e);return[h5(n,t&&t.currentContextId),r,s]}function h5(e,t){return t?`${e}-${t}`:e}function Ho(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let n=t[0],r=t.length===3?t[1]:void 0,s=Number(t[t.length-1]);return[n,s,r]}function m5(e,t,n){let r=$("pad",e,t,n);if(r==="explicit"){r=$("explicitPaddings",e,t,n);let s=[[0,0],[0,0],[0,0],[0,0]];for(let o=0;o<4;o++)s[o][0]=r[o*2],s[o][1]=r[o*2+1];return s}return r}function Xl(e){return e.kept?e:mi(e)}var bL={};Rt(bL,{json:()=>l2e});var l2e=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],AL={};Rt(AL,{json:()=>u2e});var u2e=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],vL={};Rt(vL,{json:()=>c2e});var c2e=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}],wL={};Rt(wL,{json:()=>p2e});var p2e=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],kL={};Rt(kL,{json:()=>d2e});var d2e=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],IL={};Rt(IL,{json:()=>f2e});var f2e=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],CL={};Rt(CL,{json:()=>h2e});var h2e=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],SL={};Rt(SL,{json:()=>m2e});var m2e=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],NL={};Rt(NL,{json:()=>g2e});var g2e=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}],TL={};Rt(TL,{json:()=>x2e});var x2e=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}],_L={};Rt(_L,{json:()=>y2e});var y2e=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],EL={};Rt(EL,{json:()=>b2e});var b2e=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}],RL={};Rt(RL,{json:()=>A2e});var A2e=[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],DL={};Rt(DL,{json:()=>v2e});var v2e=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],$L={};Rt($L,{json:()=>w2e});var w2e=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],FL={};Rt(FL,{json:()=>k2e});var k2e=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],OL={};Rt(OL,{json:()=>I2e});var I2e=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],PL={};Rt(PL,{json:()=>C2e});var C2e=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],ML={};Rt(ML,{json:()=>S2e});var S2e=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],zL=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[bL,AL,vL,wL,kL,IL,CL,SL,NL,TL,_L,EL,RL,DL,$L,FL,OL,PL,ML],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,r)=>(n[r.tfOpName]=r,n),{})}transformGraph(e,t={}){let n=e.node,r=[],s=[],o=[],a=n.reduce((h,m)=>(h[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?r.push(h[m.name]):m.op==="Const"?s.push(h[m.name]):(m.input==null||m.input.length===0)&&o.push(h[m.name]),h),{}),i=[],l=[],u={},c={};t!=null&&(u=this.mapSignatureEntries(t.inputs),c=this.mapSignatureEntries(t.outputs));let p=Object.keys(a);p.forEach(h=>{let m=a[h];m.inputNames.forEach((g,x)=>{let[y,,b]=Kl(g),A=a[y];if(A.outputs!=null){let v=A.outputs.indexOf(b);if(v!==-1){let w=`${y}:${v}`;m.inputNames[x]=w}}m.inputs.push(A),A.children.push(m)})}),Object.keys(c).length===0?p.forEach(h=>{let m=a[h];m.children.length===0&&l.push(m)}):Object.keys(c).forEach(h=>{let[m]=Kl(h),g=a[m];g!=null&&(g.signatureKey=c[h],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(h=>{let[m]=Kl(h),g=a[m];g&&(g.signatureKey=u[h],i.push(g))}):i=r;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,m)=>(h[m.signature.name]=this.mapFunction(m),h),{}));let f={nodes:a,inputs:i,outputs:l,weights:s,placeholders:r,signature:t,functions:d};return o.length>0&&(f.initNodes=o),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=yL(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(r=>r.startsWith("^")?r.substr(1):r),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((r,s)=>(r[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},r),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((r,s)=>{let o=s.type,a;switch(s.type){case"string":a=W4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=W4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":a=Z4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Z4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":a=U4(e.attr,s.tfName,s.defaultValue||0),a===void 0&&!!s.tfDeprecatedName&&(a=U4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":a=X4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=X4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":a=G4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=G4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":a=J4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=J4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":a=K4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=K4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":a=Y4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Y4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":a=H4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=H4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":a=q4(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=q4(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":a=BL(e.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=BL(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return r[s.name]={value:a,type:o},r},{})),n}mapFunction(e){let t=e.nodeDef,n=[],r=[],s={};t!=null&&(s=t.reduce((c,p)=>(c[p.name]=this.mapNode(p),p.op==="Const"&&r.push(c[p.name]),c),{}));let o=[],a=[];e.signature.inputArg.forEach(c=>{let[p]=Kl(c.name),d={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:j4(c.type),type:"dtype"}},children:[]};d.signatureKey=c.name,o.push(d),s[p]=d}),Object.keys(s).forEach(c=>{let p=s[c];p.inputNames.forEach((d,f)=>{let[h,,m]=Kl(d),g=s[h];if(g.outputs!=null){let x=g.outputs.indexOf(m);if(x!==-1){let y=`${h}:${x}`;p.inputNames[f]=y}}p.inputs.push(g),g.children.push(p)})});let l=e.ret;e.signature.outputArg.forEach(c=>{let[p,d]=Kl(l[c.name]),f=s[p];f!=null&&(f.defaultOutput=d,a.push(f))});let u=this.mapArgsToSignature(e);return{nodes:s,inputs:o,outputs:a,weights:r,placeholders:n,signature:u}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n),t),{}),outputs:e.signature.outputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t),{})}}mapArgToTensorInfo(e,t){let n=e.name;return t!=null&&(n=t[n]),{name:n,dtype:e.type}}};function N2e(e){let t=be().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function LL(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):N2e(e);return t?n:n.toLowerCase()}function W4(e,t,n,r=!1){let s=e[t];return s!=null?LL(s.s,r):n}function G4(e,t,n){let r=e[t];return r?r.b:n}function U4(e,t,n){let r=e[t]||{},s=r.i!=null?r.i:r.f!=null?r.f:n;return typeof s=="number"?s:parseInt(s,10)}function j4(e){switch(typeof e=="string"&&(e=Ni[e]),e){case Ni.DT_FLOAT:return"float32";case Ni.DT_INT32:case Ni.DT_INT64:case Ni.DT_INT8:case Ni.DT_UINT8:return"int32";case Ni.DT_BOOL:return"bool";case Ni.DT_DOUBLE:return"float32";case Ni.DT_STRING:return"string";default:return null}}function BL(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function H4(e,t,n){let r=e[t];return r&&r.type?j4(r.type):n}function q4(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(s=>j4(s)):n}function VL(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function K4(e,t,n){let r=e[t];return r&&r.shape?VL(r.shape):n}function X4(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map(s=>typeof s=="number"?s:parseInt(s,10)):n}function Z4(e,t,n,r=!1){let s=e[t];return s&&s.list&&s.list.s?s.list.s.map(o=>LL(o,r)):n}function Y4(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(s=>VL(s)):n}function J4(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var T2e=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(r=>this.getInput(r)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((r,s)=>(r[s]=this.getAttr(s),r),{}))}getInput(e){return Gs(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return Gs(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return U4(this.node.rawAttrs,e,t);if(n.s!=null)return W4(this.node.rawAttrs,e,t);if(n.b!=null)return G4(this.node.rawAttrs,e,t);if(n.shape!=null)return K4(this.node.rawAttrs,e,t);if(n.type!=null)return H4(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return X4(this.node.rawAttrs,e,t);if(n.list.s!=null)return Z4(this.node.rawAttrs,e,t);if(n.list.shape!=null)return Y4(this.node.rawAttrs,e,t);if(n.list.b!=null)return J4(this.node.rawAttrs,e,t);if(n.list.type!=null)return q4(this.node.rawAttrs,e,t)}return t}},_2e=(e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[Re($("a",e,t,n),$("b",e,t,n))];case"AddN":return[Yw($("tensors",e,t,n))];case"FloorMod":case"Mod":return[M_($("a",e,t,n),$("b",e,t,n))];case"Mul":return[te($("a",e,t,n),$("b",e,t,n))];case"RealDiv":case"Div":return[Me($("a",e,t,n),$("b",e,t,n))];case"DivNoNan":return[S_($("a",e,t,n),$("b",e,t,n))];case"FloorDiv":return[Zw($("a",e,t,n),$("b",e,t,n))];case"Sub":return[Ge($("a",e,t,n),$("b",e,t,n))];case"Minimum":return[S0($("a",e,t,n),$("b",e,t,n))];case"Maximum":return[il($("a",e,t,n),$("b",e,t,n))];case"Pow":return[Wl($("a",e,t,n),$("b",e,t,n))];case"SquaredDifference":return[Ak($("a",e,t,n),$("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},E2e=(e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[Tr($("x",e,t,n))];case"Acos":return[u_($("x",e,t,n))];case"Acosh":return[c_($("x",e,t,n))];case"Asin":return[d_($("x",e,t,n))];case"Asinh":return[f_($("x",e,t,n))];case"Atan":return[h_($("x",e,t,n))];case"Atan2":return[m_($("x",e,t,n),$("y",e,t,n))];case"Atanh":return[g_($("x",e,t,n))];case"Ceil":return[v_($("x",e,t,n))];case"Complex":return[Lc($("real",e,t,n),$("imag",e,t,n))];case"Cos":return[db($("x",e,t,n))];case"Cosh":return[nk($("x",e,t,n))];case"Elu":return[k0($("x",e,t,n))];case"Erf":return[N_($("x",e,t,n))];case"Exp":return[Bo($("x",e,t,n))];case"Expm1":return[T_($("x",e,t,n))];case"Floor":return[C0($("x",e,t,n))];case"Log":return[Vo($("x",e,t,n))];case"Log1p":return[hb($("x",e,t,n))];case"Imag":return[sk($("x",e,t,n))];case"Neg":return[er($("x",e,t,n))];case"Reciprocal":return[B_($("x",e,t,n))];case"Real":return[Ab($("x",e,t,n))];case"Relu":return[yi($("x",e,t,n))];case"Round":return[dk($("x",e,t,n))];case"Selu":return[hk($("x",e,t,n))];case"Sigmoid":return[xo($("x",e,t,n))];case"Sin":return[mk($("x",e,t,n))];case"Sign":return[W_($("x",e,t,n))];case"Sinh":return[gk($("x",e,t,n))];case"Softplus":return[Xf($("x",e,t,n))];case"Sqrt":return[As($("x",e,t,n))];case"Square":return[Tn($("x",e,t,n))];case"Tanh":return[Hf($("x",e,t,n))];case"Tan":return[j_($("x",e,t,n))];case"ClipByValue":return[yo($("x",e,t,n),$("clipValueMin",e,t,n),$("clipValueMax",e,t,n))];case"Relu6":return[pk($("x",e,t,n))];case"Rsqrt":return[fk(Gs(e.inputNames[0],t,n))];case"Prod":return[ck($("x",e,t,n),$("axes",e,t,n))];case"LeakyRelu":return[fb($("x",e,t,n),$("alpha",e,t,n))];case"Prelu":return[bb($("x",e,t,n),$("alpha",e,t,n))];case"IsNan":return[E_(Gs(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function za(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){E.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let r=0;rn+` Shapes ${e} and ${t} must match`)}}}function WL(e){return!(typeof e=="number"||e.some(t=>t<0))}function Ub(e,t,n){let r=Q4(e,n),s=!WL(r);if(s&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(s&&t.forEach(o=>{r=Q4(o.shape,r)}),!WL(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function Q4(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let r=0;r=0&&o>=0&&s!==o)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=s>=0?s:o}return n}var R2e=class{constructor(e,t,n,r,s,o,a){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=s,this.dynamicSize=o,this.clearAfterRead=a,this.tensors=[],this.closed_=!1,this.idTensor=at(0),us(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),za(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,us(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((n,r)=>this.write(n,t[r]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let r=0;r=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,Vs(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,r=e.map(i=>(n+=i,n));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let s=n===0?0:t.size/n,o=[];ce(()=>{t=ie(t,[1,n,s]);for(let i=0;i{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);za(t,s.shape,"TensorList shape mismatch: "),us(s)}),this.idTensor=at(0),this.maxNumElements=r,us(this.idTensor)}get id(){return this.idTensor.id}copy(){return new jb([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);za(e,this.elementShape,"TensorList shape mismatch: ");let r=Ub(this.elementShape,this.tensors,e);return ce(()=>{let s=this.tensors.map(o=>ie(o,r));return vs(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Ub(this.elementShape,this.tensors,e),r=this.tensors.pop();return za(r.shape,e,"TensorList shape mismatch: "),ie(r,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(za(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");us(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);this.tensors.length=e}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);za(this.tensors[e].shape,t,"TensorList shape mismatch: ");let r=Ub(this.elementShape,this.tensors,t);return ie(this.tensors[e],r)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);za(this.elementShape,t.shape,"TensorList shape mismatch: "),us(t),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);za(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let r=Ub(this.elementShape,this.tensors,n);return e.length===0?ls([],[0].concat(r)):ce(()=>{let s=e.map(o=>ie(this.tensors[o],r));return vs(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);za(this.elementShape,t,"TensorList shape mismatch: ");let n=Ub(this.elementShape,this.tensors,t);return this.size()===0?ls([],[0].concat(n)):ce(()=>{let r=this.tensors.map(s=>ie(s,n));return En(r,0)})}};function D2e(e,t,n){let r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let s=e.shape.slice(1);za(s,t,"TensorList shape mismatch: ");let o=Vs(e);return new jb(o,t,r)}function $2e(e,t,n){return new jb([],e,t,n)}function F2e(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let s=Math.max(...t);if(r!=null&&r!==-1&&s>=r)throw new Error(`Max index must be < array size (${s} vs. ${r})`);let o=new jb([],n,e.dtype,r),a=Vs(e,0);return t.forEach((i,l)=>{o.setItem(i,a[l])}),o}function O2e(e,t,n){let r=0,s=t.map(c=>(r+=c,r));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${r}, and tensor's shape is: ${e.shape}`);let o=e.shape.slice(1),a=Q4(o,n),i=r===0?0:e.size/r,l=ce(()=>{let c=[];e=ie(e,[1,r,i]);for(let p=0;p{switch(e.op){case"If":case"StatelessIf":{let r=$("thenBranch",e,t,n),s=$("elseBranch",e,t,n),o=$("cond",e,t,n),a=$("args",e,t,n);return(await o.data())[0]?n.functionMap[r].executeFunctionAsync(a,n.tensorArrayMap,n.tensorListMap):n.functionMap[s].executeFunctionAsync(a,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=$("body",e,t,n),s=$("cond",e,t,n),o=$("args",e,t,n),a=await n.functionMap[s].executeFunctionAsync(o,n.tensorArrayMap,n.tensorListMap),i=o.map(c=>c.id),l=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=o;for(;l[0];){let c=u;u=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let p=u.map(f=>f.id);c.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()});let d=await n.functionMap[s].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);l=await d[0].data(),d.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()})}return u}case"LoopCond":{let r=$("pred",e,t,n);return[Xl(r)]}case"Switch":{let r=$("pred",e,t,n),s=$("data",e,t,n);return s.kept||(s=Xl(s)),(await r.data())[0]?[void 0,s]:[s,void 0]}case"Merge":{let r=e.inputNames.find(s=>Gs(s,t,n)!==void 0);if(r){let s=Gs(r,t,n);return[Xl(s)]}return}case"Enter":{let r=$("frameName",e,t,n),s=$("tensor",e,t,n);return n.enterFrame(r),[Xl(s)]}case"Exit":{let r=$("tensor",e,t,n);return n.exitFrame(),[Xl(r)]}case"NextIteration":{let r=$("tensor",e,t,n);return n.nextIteration(),[Xl(r)]}case"TensorArrayV3":{let r=$("size",e,t,n),s=$("dtype",e,t,n),o=$("elementShape",e,t,n),a=$("dynamicSize",e,t,n),i=$("clearAfterRead",e,t,n),l=$("identicalElementShapes",e,t,n),u=$("name",e,t,n),c=new R2e(u,s,r,o,l,a,i);return n.addTensorArray(c),[c.idTensor,at(1)]}case"TensorArrayWriteV3":{let r=$("tensorArrayId",e,t,n),s=$("index",e,t,n),o=$("tensor",e,t,n),a=n.getTensorArray(r.id);return a.write(s,o),[a.idTensor]}case"TensorArrayReadV3":{let r=$("tensorArrayId",e,t,n),s=$("index",e,t,n);return[n.getTensorArray(r.id).read(s)]}case"TensorArrayGatherV3":{let r=$("tensorArrayId",e,t,n),s=$("indices",e,t,n),o=$("dtype",e,t,n);return[n.getTensorArray(r.id).gather(s,o)]}case"TensorArrayScatterV3":{let r=$("tensorArrayId",e,t,n),s=$("indices",e,t,n),o=$("tensor",e,t,n),a=n.getTensorArray(r.id);return a.scatter(s,o),[a.idTensor]}case"TensorArrayConcatV3":{let r=$("tensorArrayId",e,t,n),s=n.getTensorArray(r.id),o=$("dtype",e,t,n);return[s.concat(o)]}case"TensorArraySplitV3":{let r=$("tensorArrayId",e,t,n),s=$("tensor",e,t,n),o=$("lengths",e,t,n),a=n.getTensorArray(r.id);return a.split(o,s),[a.idTensor]}case"TensorArraySizeV3":{let r=$("tensorArrayId",e,t,n),s=n.getTensorArray(r.id);return[at(s.size(),"int32")]}case"TensorArrayCloseV3":{let r=$("tensorArrayId",e,t,n),s=n.getTensorArray(r.id);return s.clearAndClose(),[s.idTensor]}case"TensorListSetItem":{let r=$("tensorListId",e,t,n),s=$("index",e,t,n),o=$("tensor",e,t,n),a=n.getTensorList(r.id);return a.setItem(s,o),[a.idTensor]}case"TensorListGetItem":{let r=$("tensorListId",e,t,n),s=$("index",e,t,n),o=$("elementShape",e,t,n),a=$("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(s,o,a)]}case"TensorListScatterV2":case"TensorListScatter":{let r=$("indices",e,t,n),s=$("tensor",e,t,n),o=$("elementShape",e,t,n),a=$("numElements",e,t,n),i=F2e(s,r,o,a);return n.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r=$("elementShape",e,t,n),s=$("elementDType",e,t,n),o;e.op==="TensorListReserve"?o="numElements":o="maxNumElements";let a=$(o,e,t,n),i=$2e(r,s,a);return n.addTensorList(i),[i.idTensor]}case"TensorListGather":{let r=$("tensorListId",e,t,n),s=$("indices",e,t,n),o=$("elementShape",e,t,n),a=$("elementDType",e,t,n);return[n.getTensorList(r.id).gather(s,a,o)]}case"TensorListStack":{let r=$("tensorListId",e,t,n),s=$("elementShape",e,t,n),o=$("elementDType",e,t,n),a=$("numElements",e,t,n);return[n.getTensorList(r.id).stack(s,o,a)]}case"TensorListFromTensor":{let r=$("tensor",e,t,n),s=$("elementShape",e,t,n),o=$("elementDType",e,t,n),a=D2e(r,s,o);return n.addTensorList(a),[a.idTensor]}case"TensorListConcat":{let r=$("tensorListId",e,t,n),s=n.getTensorList(r.id),o=$("dtype",e,t,n),a=$("elementShape",e,t,n);return[s.concat(o,a)]}case"TensorListPushBack":{let r=$("tensorListId",e,t,n),s=$("tensor",e,t,n),o=n.getTensorList(r.id);return o.pushBack(s),[o.idTensor]}case"TensorListPopBack":{let r=$("tensorListId",e,t,n),s=$("elementShape",e,t,n),o=$("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(s,o)]}case"TensorListSplit":{let r=$("tensor",e,t,n),s=$("elementShape",e,t,n),o=$("lengths",e,t,n),a=O2e(r,o,s);return n.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function GL(e,t,n){let[r,s]=$("fusedOps",e,t,n),o=r==="biasadd",a=!o,i=s==="prelu",l=r==="fusedbatchnorm",u=$("numArgs",e,t,n);if(o){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&o&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let c=$("strides",e,t,n),p=m5(e,t,n),d=$("dataFormat",e,t,n).toUpperCase(),f=$("dilations",e,t,n),[h,m]=$("args",e,t,n);a&&(m=h,h=void 0);let g=$("leakyreluAlpha",e,t,n);return{stride:c,pad:p,dataFormat:d,dilations:f,biasArg:h,preluArg:m,activationFunc:s,leakyreluAlpha:g}}var M2e=(e,t,n)=>{switch(e.op){case"Conv1D":{let r=$("stride",e,t,n),s=$("pad",e,t,n),o=$("dataFormat",e,t,n).toUpperCase(),a=$("dilation",e,t,n);return[ek($("x",e,t,n),$("filter",e,t,n),r,s,o,a)]}case"Conv2D":{let r=$("strides",e,t,n),s=m5(e,t,n),o=$("dataFormat",e,t,n).toUpperCase(),a=$("dilations",e,t,n);return[Bl($("x",e,t,n),$("filter",e,t,n),[r[1],r[2]],s,o,[a[1],a[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:o,dilations:a,biasArg:i,preluArg:l,activationFunc:u,leakyreluAlpha:c}=GL(e,t,n);return[Hc.conv2d({x:$("x",e,t,n),filter:$("filter",e,t,n),strides:[r[1],r[2]],pad:s,dataFormat:o,dilations:[a[1],a[2]],bias:i,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:o,dilations:a,biasArg:i,preluArg:l,activationFunc:u,leakyreluAlpha:c}=GL(e,t,n);return[Hc.depthwiseConv2d({x:$("x",e,t,n),filter:$("filter",e,t,n),strides:[r[1],r[2]],pad:s,dataFormat:o,dilations:[a[1],a[2]],bias:i,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=$("outputShape",e,t,n),s=$("strides",e,t,n),o=m5(e,t,n);return[tk($("x",e,t,n),$("filter",e,t,n),r,[s[1],s[2]],o)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=$("strides",e,t,n),s=m5(e,t,n),o=$("dilations",e,t,n),a=$("dataFormat",e,t,n).toUpperCase();return[w0($("input",e,t,n),$("filter",e,t,n),[r[1],r[2]],s,a,[o[1],o[2]])]}case"Conv3D":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("dataFormat",e,t,n).toUpperCase(),a=$("dilations",e,t,n);return[k_($("x",e,t,n),$("filter",e,t,n),[r[1],r[2],r[3]],s,o,[a[1],a[2],a[3]])]}case"AvgPool":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("kernelSize",e,t,n);return[cb($("x",e,t,n),[o[1],o[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("kernelSize",e,t,n);return[gb($("x",e,t,n),[o[1],o[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("kernelSize",e,t,n),a=$("includeBatchInIndex",e,t,n),{result:i,indexes:l}=Y9($("x",e,t,n),[o[1],o[2]],[r[1],r[2]],s,a);return[i,l]}case"AvgPool3D":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("kernelSize",e,t,n);return[b_($("x",e,t,n),[o[1],o[2],o[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("kernelSize",e,t,n);return[O_($("x",e,t,n),[o[1],o[2],o[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=$("strides",e,t,n),s=$("pad",e,t,n),o=$("dilations",e,t,n),a=r[1],i=r[2],l=o[1],u=o[2];return[C_($("x",e,t,n),$("filter",e,t,n),[a,i],s,[l,u],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},z2e=(e,t,n)=>{switch(e.op){case"Fill":{let r=$("shape",e,t,n),s=$("dtype",e,t,n),o=$("value",e,t,n);return[I0(r,o,s)]}case"LinSpace":{let r=$("start",e,t,n),s=$("stop",e,t,n),o=$("num",e,t,n);return[U9(r,s,o)]}case"Multinomial":{let r=$("logits",e,t,n),s=$("numSamples",e,t,n),o=$("seed",e,t,n);return[J9(r,s,o)]}case"OneHot":{let r=$("indices",e,t,n),s=$("depth",e,t,n),o=$("onValue",e,t,n),a=$("offValue",e,t,n);return[g0(r,s,o,a)]}case"Ones":return[Go($("shape",e,t,n),$("dtype",e,t,n))];case"OnesLike":return[Uo($("x",e,t,n))];case"RandomUniform":return[N0($("shape",e,t,n),$("minval",e,t,n),$("maxval",e,t,n),$("dtype",e,t,n))];case"Range":{let r=$("start",e,t,n),s=$("stop",e,t,n),o=$("step",e,t,n);return[T0(r,s,o,$("dtype",e,t,n))]}case"TruncatedNormal":{let r=$("shape",e,t,n),s=$("mean",e,t,n),o=$("stdDev",e,t,n),a=$("seed",e,t,n);return[vk(r,s,o,$("dtype",e,t,n),a)]}case"Zeros":return[xr($("shape",e,t,n),$("dtype",e,t,n))];case"ZerosLike":return[Xt($("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function eR(e,t,n){let r=$("boxes",e,t,n),s=$("scores",e,t,n),o=$("maxOutputSize",e,t,n),a=$("iouThreshold",e,t,n),i=$("scoreThreshold",e,t,n),l=$("softNmsSigma",e,t,n);return{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i,softNmsSigma:l}}var L2e=async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i,softNmsSigma:l}=eR(e,t,n),u=await ht.nonMaxSuppressionWithScoreAsync(r,s,o,a,i,l);return[u.selectedIndices,u.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i}=eR(e,t,n),l=$("padToMaxOutputSize",e,t,n),u=await ht.nonMaxSuppressionPaddedAsync(r,s,o,a,i,l);return[u.selectedIndices,u.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i}=eR(e,t,n);return[await ht.nonMaxSuppressionAsync(r,s,o,a,i)]}case"Where":{let r=Fe($("condition",e,t,n),"bool"),s=[await K_(r)];return r.dispose(),s}case"ListDiff":return tM($("x",e,t,n),$("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},B2e=(e,t,n)=>{switch(e.op){case"TopKV2":{let r=$("x",e,t,n),s=$("k",e,t,n),o=$("sorted",e,t,n),a=H_(r,s,o);return[a.values,a.indices]}case"Unique":{let r=$("x",e,t,n),s=wk(r);return[s.values,s.indices]}case"UniqueV2":{let r=$("x",e,t,n),s=$("axis",e,t,n),o=wk(r,s);return[o.values,o.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},V2e=(e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=$("default",e,t,n);return[Gs(e.name,t,n)||r];case"Placeholder":return[Gs(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let u=$("x",e,t,n);return[Xl(u)]}case"IdentityN":return $("x",e,t,n).map(u=>Xl(u));case"Snapshot":let s=$("x",e,t,n);return[Xl(s)];case"Shape":return[Er($("x",e,t,n).shape,"int32")];case"ShapeN":return $("x",e,t,n).map(u=>Er(u.shape));case"Size":return[at($("x",e,t,n).size,"int32")];case"Rank":return[at($("x",e,t,n).rank,"int32")];case"NoOp":return[at(1)];case"Print":let o=$("x",e,t,n),a=$("data",e,t,n),i=$("message",e,t,n),l=$("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(i);for(let u=0;ue.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return at(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(r=>r.dispose()),this.tensorMap.clear(),ce(()=>{let r=Vs(t),s=n.length,o=r.length;E.assert(s===o,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${o} elements.`);for(let a=0;a{let r=[];for(let s=0;s{switch(e.op){case"HashTable":case"HashTableV2":{let s=$("keyDType",e,t,n),o=$("valueDType",e,t,n),a=new W2e(s,o);return r.addHashTable(e.name,a),[a.handle]}case"LookupTableImport":case"LookupTableImportV2":{let s=$("tableHandle",e,t,n,r),o=$("keys",e,t,n),a=$("values",e,t,n);return[await r.getHashTableById(s.id).import(o,a)]}case"LookupTableFind":case"LookupTableFindV2":{let s=$("tableHandle",e,t,n,r),o=$("keys",e,t,n),a=$("defaultValue",e,t,n);return[await r.getHashTableById(s.id).find(o,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let s=$("tableHandle",e,t,n,r);return[r.getHashTableById(s.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},U2e=(e,t,n)=>{switch(e.op){case"ResizeBilinear":{let r=$("images",e,t,n),s=$("size",e,t,n),o=$("alignCorners",e,t,n),a=$("halfPixelCenters",e,t,n);return[ht.resizeBilinear(r,[s[0],s[1]],o,a)]}case"ResizeNearestNeighbor":{let r=$("images",e,t,n),s=$("size",e,t,n),o=$("alignCorners",e,t,n),a=$("halfPixelCenters",e,t,n);return[ht.resizeNearestNeighbor(r,[s[0],s[1]],o,a)]}case"CropAndResize":{let r=$("image",e,t,n),s=$("boxes",e,t,n),o=$("boxInd",e,t,n),a=$("cropSize",e,t,n),i=$("method",e,t,n),l=$("extrapolationValue",e,t,n);return[ht.cropAndResize(r,s,o,a,i,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},j2e=(e,t,n)=>{switch(e.op){case"Equal":return[Lo($("a",e,t,n),$("b",e,t,n))];case"NotEqual":return[Yf($("a",e,t,n),$("b",e,t,n))];case"Greater":return[bo($("a",e,t,n),$("b",e,t,n))];case"GreaterEqual":return[Uc($("a",e,t,n),$("b",e,t,n))];case"Less":return[ok($("a",e,t,n),$("b",e,t,n))];case"LessEqual":return[jc($("a",e,t,n),$("b",e,t,n))];case"LogicalAnd":return[Fa($("a",e,t,n),$("b",e,t,n))];case"LogicalNot":return[mb($("a",e,t,n))];case"LogicalOr":return[lk($("a",e,t,n),$("b",e,t,n))];case"Select":case"SelectV2":return[$s($("condition",e,t,n),$("a",e,t,n),$("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},H2e=(e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[Lt($("a",e,t,n),$("b",e,t,n),$("transposeA",e,t,n),$("transposeB",e,t,n))];case"Einsum":return[V9($("equation",e,t,n),...$("tensors",e,t,n))];case"Transpose":return[Kt($("x",e,t,n),$("perm",e,t,n))];case"_FusedMatMul":let[r,s]=$("fusedOps",e,t,n),o=r==="biasadd",a=s==="prelu",i=$("numArgs",e,t,n),l=$("leakyreluAlpha",e,t,n);if(o){if(a&&i!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!a&&i!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[u,c]=$("args",e,t,n);return[Hc.matMul({a:$("a",e,t,n),b:$("b",e,t,n),transposeA:$("transposeA",e,t,n),transposeB:$("transposeB",e,t,n),bias:u,activation:s,preluActivationWeights:c,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},q2e=(e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[qf($("x",e,t,n),$("mean",e,t,n),$("variance",e,t,n),$("offset",e,t,n),$("scale",e,t,n),$("epsilon",e,t,n))];case"FusedBatchNormV3":return[qf($("x",e,t,n),$("mean",e,t,n),$("variance",e,t,n),$("offset",e,t,n),$("scale",e,t,n),$("epsilon",e,t,n))];case"LRN":return[R_($("x",e,t,n),$("radius",e,t,n),$("bias",e,t,n),$("alpha",e,t,n),$("beta",e,t,n))];case"Softmax":return[Jf($("x",e,t,n))];case"LogSoftmax":return[ik($("x",e,t,n))];case"SparseToDense":return[X_($("sparseIndices",e,t,n),$("outputShape",e,t,n),$("sparseValues",e,t,n),$("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},K2e=(e,t,n)=>{switch(e.op){case"Max":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[Wo($("x",e,t,n),a,i)]}case"Mean":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[cr($("x",e,t,n),a,i)]}case"Min":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[xb($("x",e,t,n),a,i)]}case"Sum":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[Je($("x",e,t,n),a,i)]}case"All":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[Jw($("x",e,t,n),a,i)]}case"Any":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[lb($("x",e,t,n),a,i)]}case"ArgMax":{let a=$("axis",e,t,n);return[xi($("x",e,t,n),a)]}case"ArgMin":{let a=$("axis",e,t,n);return[p_($("x",e,t,n),a)]}case"Prod":{let a=$("axis",e,t,n),i=$("keepDims",e,t,n);return[ck($("x",e,t,n),a,i)]}case"Cumsum":{let a=$("axis",e,t,n),i=$("exclusive",e,t,n),l=$("reverse",e,t,n);return[rk($("x",e,t,n),a,i,l)]}case"Bincount":let r=$("x",e,t,n),s=$("weights",e,t,n),o=$("size",e,t,n);return[A_(r,s,o)];case"DenseBincount":{let a=$("x",e,t,n),i=$("weights",e,t,n),l=$("size",e,t,n),u=$("binaryOutput",e,t,n);return[L9(a,i,l,u)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},X2e=(e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=$("n",e,t,n),s=$("axis",e,t,n),o=$("tensors",e,t,n);return o=o.slice(0,r),[En(o,s)]}case"Gather":{let r=$("x",e,t,n),s=$("indices",e,t,n);return[Kf(r,Fe(s,"int32"),0)]}case"GatherV2":{let r=$("axis",e,t,n),s=$("batchDims",e,t,n),o=$("x",e,t,n),a=$("indices",e,t,n);return[Kf(o,Fe(a,"int32"),r,s)]}case"Reverse":{let r=$("dims",e,t,n),s=[];for(let a=0;a{let r=$("axis",e,t,n),s=$("tensors",e,t,n),o=s[0].shape,a=ln(s[0]).shape,i=s.map(l=>{let u=E.arraysEqual(l.shape,o);if(!u&&!E.arraysEqual(ln(l).shape,a))throw new Error("the input tensors shape does not match");return u?l:ie(l,o)});return[vs(i,r)]});case"Unpack":{let r=$("axis",e,t,n),s=$("tensor",e,t,n);return Vs(s,r)}case"Tile":{let r=$("reps",e,t,n);return[da($("x",e,t,n),r)]}case"Split":case"SplitV":{let r=$("axis",e,t,n),s=$("numOrSizeSplits",e,t,n),o=$("x",e,t,n);return _r(o,s,r)}case"ScatterNd":{let r=$("indices",e,t,n),s=$("values",e,t,n),o=$("shape",e,t,n);return[oM(r,s,o)]}case"GatherNd":{let r=$("x",e,t,n),s=$("indices",e,t,n);return[aM(r,s)]}case"SparseToDense":{let r=$("sparseIndices",e,t,n),s=$("outputShape",e,t,n),o=$("sparseValues",e,t,n),a=$("defaultValue",e,t,n);return[X_(r,o,s,o.dtype===a.dtype?a:Fe(a,o.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Z2e=(e,t,n)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:o,reverseIndexMap:a}=Ib.sparseFillEmptyRows($("indices",e,t,n),$("values",e,t,n),$("denseShape",e,t,n),$("defaultValue",e,t,n));return[r,s,o,a]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=Ib.sparseReshape($("inputIndices",e,t,n),$("inputShape",e,t,n),$("newShape",e,t,n));return[r,s]}case"SparseSegmentMean":return[Ib.sparseSegmentMean($("data",e,t,n),$("indices",e,t,n),$("segmentIds",e,t,n))];case"SparseSegmentSum":return[Ib.sparseSegmentSum($("data",e,t,n),$("indices",e,t,n),$("segmentIds",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Y2e=(e,t,n)=>{switch(e.op){case"FFT":return[wb($("x",e,t,n))];case"IFFT":return[_0($("x",e,t,n))];case"RFFT":return[kb($("x",e,t,n))];case"IRFFT":return[bk($("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},J2e=(e,t,n)=>{switch(e.op){case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=Tk.stringNGrams($("data",e,t,n),$("dataSplits",e,t,n),$("separator",e,t,n),$("nGramWidths",e,t,n),$("leftPad",e,t,n),$("rightPad",e,t,n),$("padWidth",e,t,n),$("preserveShortSequences",e,t,n));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:o}=Tk.stringSplit($("input",e,t,n),$("delimiter",e,t,n),$("skipEmpty",e,t,n));return[r,s,o]}case"StringToHashBucketFast":return[Tk.stringToHashBucketFast($("input",e,t,n),$("numBuckets",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Q2e=(e,t,n)=>{switch(e.op){case"Cast":return[Fe($("x",e,t,n),$("dtype",e,t,n))];case"ExpandDims":{let r=$("axis",e,t,n);return[kr($("x",e,t,n),r)]}case"Squeeze":{let r=$("axis",e,t,n);return[ln($("x",e,t,n),r)]}case"Reshape":return[ie($("x",e,t,n),$("shape",e,t,n))];case"MirrorPad":return[P_($("x",e,t,n),$("padding",e,t,n),$("mode",e,t,n))];case"PadV2":case"Pad":return[Vl($("x",e,t,n),$("padding",e,t,n),$("constantValue",e,t,n))];case"SpaceToBatchND":{let r=$("blockShape",e,t,n),s=$("paddings",e,t,n);return[yb($("x",e,t,n),r,s)]}case"BatchToSpaceND":{let r=$("blockShape",e,t,n),s=$("crops",e,t,n);return[pb($("x",e,t,n),r,s)]}case"DepthToSpace":{let r=$("blockSize",e,t,n),s=$("dataFormat",e,t,n).toUpperCase();return[I_($("x",e,t,n),r,s)]}case"BroadcastTo":return[A0($("x",e,t,n),$("shape",e,t,n))];case"BroadcastArgs":return[$9($("s0",e,t,n),$("s1",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function UL(e,t,n,r){let s=((o,a,i)=>{switch(o.category){case"arithmetic":return ce(()=>_2e(o,a,i));case"basic_math":return ce(()=>E2e(o,a,i));case"control":return P2e(o,a,i);case"convolution":return ce(()=>M2e(o,a,i));case"creation":return ce(()=>z2e(o,a,i));case"dynamic":return L2e(o,a,i);case"evaluation":return ce(()=>B2e(o,a,i));case"image":return ce(()=>U2e(o,a,i));case"graph":return ce(()=>V2e(o,a,i));case"logical":return ce(()=>j2e(o,a,i));case"matrices":return ce(()=>H2e(o,a,i));case"normalization":return ce(()=>q2e(o,a,i));case"reduction":return ce(()=>K2e(o,a,i));case"slice_join":return ce(()=>X2e(o,a,i));case"sparse":return ce(()=>Z2e(o,a,i));case"spectral":return ce(()=>Y2e(o,a,i));case"string":return ce(()=>J2e(o,a,i));case"transformation":return ce(()=>Q2e(o,a,i));case"hash_table":return G2e(o,a,i,r);case"custom":let l=yL(o.op);if(l&&l.customExecutor)return l.customExecutor(new T2e(o,a,i));throw TypeError(`Custom op ${o.op} is not registered.`);default:throw TypeError(`Unknown op '${o.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return E.isPromise(s)?s.then(o=>[].concat(o)):[].concat(s)}var jL=class{constructor(e={},t={},n={},r={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function HL(e,t,n,r){let s=new Set,o=[],a=null,i=null,l=new Set,u=Object.keys(e).map(d=>Ho(d)[0]),c=[];r!=null&&(c=r.map(d=>Ho(d.name)[0]));let p=[...t];for(;p.length>0;){let d=p.pop();if((qL(d)||sve(d)||ove(d))&&a==null&&(a=d,i=a.children.map(f=>f.name).filter(f=>s.has(f))),s.add(d.name),n[d.name]==null&&u.indexOf(d.name)===-1&&c.indexOf(d.name)===-1){if(d.inputs.length===0){o.push(d.name);continue}d.inputs.forEach(f=>{l.has(f.name)||(l.add(f.name),p.push(f))})}}return{inputs:e,outputs:t,usedNodes:s,missingInputs:o,dynamicNode:a,syncInputs:i}}function eve(e,t,n){let{usedNodes:r,inputs:s}=n,o=[],a=Object.keys(s).map(c=>Ho(c)[0]).map(c=>e.nodes[c]),i=e.initNodes;a.forEach(c=>{r.has(c.name)&&o.push(c)}),e.weights.forEach(c=>{r.has(c.name)&&o.push(c)}),i!=null&&i.forEach(c=>{r.has(c.name)&&o.push(c)});let l=new Set,u=[];for(;o.length>0;){let c=o.pop();l.add(c.name),t[c.name]||u.push(c),c.children.forEach(p=>{!l.has(p.name)&&r.has(p.name)&&p.inputs.every(d=>l.has(d.name))&&o.push(p)})}return u}var tve=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],nve=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],rve=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function qL(e){return tve.indexOf(e.op)>=0}function sve(e){return nve.indexOf(e.op)>=0}function ove(e){return rve.indexOf(e.op)>=0}var tR=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(n=>{this._functionExecutorMap[n]=new tR(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(r=>r.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(s=>s.name).sort(),r=t.map(s=>s.name).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)}compile(e,t){let n=HL(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:s,syncInputs:o}=n;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${o}]`);if(r.length>0){let a=t.map(l=>l.name),i=Object.keys(e);throw new Error(`Cannot compute the outputs [${a}] from the provided inputs [${i}]. Missing the following inputs: [${r}]`)}return eve(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let r=n.map(c=>this.graph.nodes[Ho(c)[0]]),s=t.map(c=>Ho(c)[0]),o=s.map(c=>this.graph.nodes[c]);o.length===0&&(o=this._outputs);let a=this.getCompilationKey(r,o),i=this.compiledMap.get(a);i==null&&(i=this.compile(e,o),this.compiledMap.set(a,i));let l={},u={};return ce(()=>{let c=new jL(this.weightMap,l,u,this.functionExecutorMap),p=Object.assign({},this.weightMap);Object.keys(e).forEach(h=>{let[m,g]=Ho(h),x=[];x[g]=e[h],p[m]=x});let d=this.getFrozenTensorIds(p),f={};for(let h=0;hGs(h,p,c))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(r=>r.id)));return new Set(t)}checkTensorForDisposal(e,t,n,r,s,o,a){t.category==="control"||o.indexOf(e)!==-1||(n[e].forEach(i=>{i!=null&&(a[i.id]=(a[i.id]||0)+t.children.length)}),t.inputs.forEach(i=>{if(i.category!=="control"){let l=i2e(i.name,n,r);l!=null&&l.forEach(u=>{if(u&&!u.kept&&!s.has(u.id)){let c=a[u.id];c===1?(u.dispose(),delete a[u.id]):c!=null&&a[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}async _executeAsync(e,t,n=!1,r={},s={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));let o=new jL(this.weightMap,r,s,this.functionExecutorMap),a=await this.executeWithControlFlow(e,o,t,n),i=t.map(p=>Gs(p,a,o)),l=i.map(p=>p.id),u=Object.keys(e).map(p=>e[p].id),c=new Set([...l,...u,...this.weightIds]);return Object.keys(a).forEach(p=>{a[p].forEach(f=>{f&&!f.kept&&!f.isDisposed&&!c.has(f.id)&&f.dispose()})}),this.parent==null&&o.dispose(c),i}async executeFunctionAsync(e,t,n){let r=e.reduce((s,o,a)=>(s[this.inputs[a].name]=o,s),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){let s=Object.keys(e),o=s.map(y=>this.graph.nodes[Ho(y)[0]]),a=n.map(y=>Ho(y)[0]),i=a.map(y=>this.graph.nodes[y]);i.length===0&&(i=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:c,syncInputs:p}=HL(e,i,this.weightMap,this._initNodes),d=[...o,...this.graph.weights,...this._initNodes||[]].map(y=>({node:y,contexts:t.currentContext})),f=Object.assign({},this.weightMap);Object.keys(e).forEach(y=>{let[b,A]=Ho(y),v=[];v[A]=e[y],f[b]=v});let h={},m=this.getFrozenTensorIds(f),g={};for(;d.length>0;){let y=this.processStack(o,d,t,f,g,m,a,h,l);await Promise.all(y)}c==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let x=i.filter(y=>!qL(y)&&!Gs(y.name,f,t)).map(y=>y.name);if(x.length>0){let y="";throw c!=null&&(y=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${p}]`),new Error(`Cannot compute the outputs [${x}] from the provided inputs [${s}]. Consider providing the following inputs: [${u}]. ${y}`)}return f}processStack(e,t,n,r,s,o,a,i,l){let u=[];for(;t.length>0;){let c=t.pop();n.currentContext=c.contexts;let p="";if(c.node.op==="Enter"&&$("isConstant",c.node,r,n)&&([p]=Kl(c.node.name,n)),r[c.node.name]==null){let d=UL(c.node,r,n,this._resourceManager);p||([p]=Kl(c.node.name,n));let f=n.currentContext;E.isPromise(d)?u.push(d.then(h=>(r[p]=h,n.currentContext=f,this.checkTensorForDisposal(p,c.node,r,n,o,a,i),this.processChildNodes(c.node,t,n,r,s,l),h))):(r[p]=d,this.checkTensorForDisposal(p,c.node,r,n,o,a,i),this.processChildNodes(c.node,t,n,r,s,l))}else this.processChildNodes(c.node,t,n,r,s,l)}return u}processChildNodes(e,t,n,r,s,o){e.children.forEach(a=>{let[i]=Kl(a.name,n);s[i]||!o.has(a.name)||(a.op==="Merge"?a.inputNames.some(l=>!!Gs(l,r,n))&&(s[i]=!0,t.push({contexts:n.currentContext,node:a})):a.inputNames.every(l=>!!Gs(l,r,n))&&(s[i]=!0,t.push({contexts:n.currentContext,node:a})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[r]=Ho(t),s=this.graph.nodes[r];if(s.attrParams.shape&&s.attrParams.shape.value){let o=s.attrParams.shape.value,a=o.length===n.shape.length&&n.shape.every((i,l)=>o[l]===-1||o[l]===i);E.assert(a,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${o}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&E.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(e){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let r=this._signature.inputs[n];t[r.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[r]=Ho(n);return this.graph.nodes[r]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=Ho(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},ave=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},ive="?tfjs-format=file",lve="model.json",KL=class{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",t==null&&(this.loadOptions={}),this.resourceManager=new ave}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=go.browserHTTPRequest(e,this.loadOptions);else{let t=go.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(go.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}async load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=await this.handler.load();return this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n;this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null?n=this.artifacts.userDefinedMetadata.signature:n=this.artifacts.signature,this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let r=go.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new tR(zL.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=zL.Instance.transformGraph(e.modelInitializer);this.initializer=new tR(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(e,t){if(typeof e=="string"){let n=go.getSaveHandlers(e);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${e}'`);e=n[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){return this.execute(e,this.outputNodes)}normalizeInputs(e){if(!(e instanceof Vt)&&!Array.isArray(e))return e;if(e=Array.isArray(e)?e:[e],e.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce((t,n,r)=>(t[n]=e[r],t),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function yn(e,t={}){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&e.load==null&&(e.endsWith("/")||(e=e+"/"),e=`${e}${lve}${ive}`);let n=new KL(e,t);return await n.load(),n}var uve="3.9.0",XL={};Rt(XL,{CSVDataset:()=>iB,Dataset:()=>B0,FileDataSource:()=>hB,TextLineDataset:()=>sB,URLDataSource:()=>mB,array:()=>Dve,csv:()=>Gve,func:()=>Uve,generator:()=>jve,microphone:()=>qve,version_data:()=>Kve,webcam:()=>Hve,zip:()=>$ve});var cve=Pd(pP()),pve=Pd(pP());function dve(e,t){return g5(e,t)}function g5(e,t,n=new Map,r=new Set){if(e==null)return null;if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let s=t(e);if(s.recurse&&s.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(s.recurse)if(L0(e)){let o=Array.isArray(e)?[]:{};r.add(e);for(let a in e){let i=e[a],l=g5(i,t,n,r);o[a]=l}return r.delete(e),o}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,s.value),s.value}function fve(e,t=YL){return ZL(e,t)}function ZL(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let s=t(e);if(s.recurse&&s.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(s.recurse)if(L0(r)){let o=Array.isArray(r)?[]:{};n.add(r);for(let a in r){let i=e.map(u=>u[a]),l=ZL(i,t,n);o[a]=l}return n.delete(r),o}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return s.value}function YL(e){return e===null?null:L0(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function JL(e,t){let n=new Map;g5(e,t,n);for(let s of Array.from(n.keys())){let o=n.get(s);if(E.isPromise(o)){let a=await o;n.set(s,a)}}return g5(e,t,n)}function L0(e){let t=!1;if(be().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=dP();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof Vt)&&!(e instanceof Promise)&&!t)}function hve(e){return e==null||mve(e)||Array.isArray(e)||typeof e=="object"&&e instanceof Vt||E.isTypedArray(e)}function mve(e){return e===null||typeof e!="object"&&typeof e!="function"}function gve(e){return dve(e,xve)}function xve(e){return e instanceof Vt?{value:e.clone(),recurse:!1}:L0(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var QL=class{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,e==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(let t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}},nR=class extends QL{constructor(){super(nR.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let r=0;rt===!0)}rowMajorBatch(e,t=!0){return new Cve(this,e,t)}columnMajorBatch(e,t=!0,n=YL){return this.rowMajorBatch(e,t).map(s=>fve(s,n))}concatenate(e,t){return new nB(eB([this,e]),t)}take(e){return e<0||e==null?this:new Ive(this,e)}skip(e){return e<0||e==null?this:new kve(this,e)}prefetch(e){return new rB(this,e)}shuffle(e,t){return new Rve(this,e,t)}serial(){return new wve(this)}},Ave=class extends ps{constructor(e){super();this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let e=this.items[this.trav];return this.trav++,{value:gve(e),done:!1}}},vve=class extends ps{constructor(e){super();this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}},wve=class extends ps{constructor(e){super();this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},kve=class extends ps{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++ Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},Cve=class extends ps{constructor(e,t,n=!0){super();this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let e=[];for(;e.length0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},Sve=class extends ps{constructor(e,t){super();this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;ye(e.value)}}},Nve=class extends ps{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=fi.getTensorsInContainer(e.value),n=this.transform(e.value),r=fi.getTensorsInContainer(n);for(let s of t)fi.isTensorInList(s,r)||s.dispose();return{value:n,done:!1}}},Tve=class extends ps{constructor(e,t){super();this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},tB=class extends ps{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=fi.getTensorsInContainer(e.value),n=await this.transform(e.value),r=fi.getTensorsInContainer(n);for(let s of t)fi.isTensorInList(s,r)||s.dispose();return{value:n,done:!1}}},sR=class extends ps{constructor(){super();this.outputQueue=new nR,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.outputQueue.length()===0;)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},_ve=class extends sR{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let e=await this.upstream.next();if(e.done)return!1;let t=fi.getTensorsInContainer(e.value),n=this.transform(e.value),r=fi.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let s of t)fi.isTensorInList(s,r)||s.dispose();return!0}},nB=class extends ps{constructor(e,t){super();this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,this.iterator==null){let n=await this.moreIterators.next();if(n.done)return{value:null,done:!0};this.iterator=n.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}},ep;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(ep||(ep={}));var Eve=class extends ps{constructor(e,t=ep.FAIL){super();this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;function r(o){return o instanceof ps?{value:o.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let s=await JL(this.iterators,r);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case ep.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case ep.SHORTEST:return{value:null,done:!0};case ep.LONGEST:default:}return this.count++,{value:s,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},rB=class extends ps{constructor(e,t){super();this.upstream=e,this.bufferSize=t,this.buffer=new QL(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}},Rve=class extends rB{constructor(e,t,n){super(e,t);this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=pve.alea(n||E.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}randomInt(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(t.done)this.upstreamExhausted=!0;else return this.refill(),t}return{value:null,done:!0}}},B0=class{constructor(){this.size=null}batch(e,t=!0){let n=this;E.assert(e>0,()=>`batchSize needs to be positive, but it is ${e}`);let r;return this.size===1/0||this.size==null?r=this.size:t?r=Math.ceil(this.size/e):r=Math.floor(this.size/e),qo(async()=>(await n.iterator()).columnMajorBatch(e,t,Fve),r)}concatenate(e){let t=this,n;return this.size===1/0||e.size===1/0?n=1/0:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,qo(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===1/0?n=1/0:n=null,qo(async()=>(await t.iterator()).filter(r=>ce(()=>e(r))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return qo(async()=>(await t.iterator()).map(n=>ce(()=>e(n))),this.size)}mapAsync(e){let t=this;return qo(async()=>(await t.iterator()).mapAsync(e),this.size)}prefetch(e){if(e==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return qo(async()=>(await t.iterator()).prefetch(e),this.size)}repeat(e){let t=this,n;return this.size!=null&&e>0?n=this.size*e:e===0?n=0:this.size!=null&&(e===void 0||e<0)?n=1/0:n=null,qo(async()=>{let r=rR(async()=>({value:await t.iterator(),done:!1}));return yve(r.take(e))},n)}skip(e){let t=this,n;return this.size!=null&&e>=0&&this.size>=e?n=this.size-e:this.size!=null&&(this.size(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let r=this,s=cve.alea(t||E.now().toString());return qo(async()=>{let o=s.int32();return n&&(o+=s.int32()),(await r.iterator()).shuffle(e,o.toString())},this.size)}take(e){let t=this,n;return this.size!=null&&this.size>e?n=e:this.size!=null&&this.size<=e?n=this.size:n=null,qo(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};B0.MAX_BUFFER_SIZE=1e4;function qo(e,t=null){return new class extends B0{constructor(){super(...arguments);this.size=t}async iterator(){return e()}}}function Dve(e){return qo(async()=>eB(e),e.length)}function $ve(e){if(!L0(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;n{let n=await JL(e,r=>{if(r instanceof B0)return{value:r.iterator(),recurse:!1};if(L0(r))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return bve(n,ep.SHORTEST)},t)}function Fve(e){if(e===null)return null;let t=e[0];return hve(t)?{value:Ove(e),recurse:!1}:{value:null,recurse:!0}}function Ove(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof Vt?vs(e):ls(e)}var sB=class extends B0{constructor(e){super();this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(` `).map(r=>(r.endsWith("\r")&&(r=r.slice(0,-1)),r))}},x5='"',Hb=Symbol("out"),oB=Symbol("field"),y5=Symbol("quote"),oR=Symbol("quoteafterquote"),aB=Symbol("quoteinquote"),iB=class extends B0{constructor(e,t){super();this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new sB(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(E.assert(t.delimiter==null,()=>"Delimiter should not be provided when delimWhitespace is true."),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&E.assert(e.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce((r,s)=>(r[s]=r[s]+1||1,r),{}),n=Object.keys(t).filter(r=>t[r]>1);if(E.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let r of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(r)===-1)throw new Error('The key "'+r+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let t=await(await this.base.iterator()).next();if(t.done)throw new Error("No data was found for CSV parsing.");let n=t.value;return this.parseRow(n,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map(t=>this.makeDataElement(t))}makeDataElement(e){let t=this.parseRow(e),n={},r={};for(let s=0;s14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=e.includeSpectrogram!==!1,this.includeWaveform=e.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(be().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");let t=new lB(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let r=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(r,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let r=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(r,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(r=>{let s=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&r({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(s),r({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((r,s)=>n.set(r,s*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(E.sizeFromShape(t));return n.set(e,n.length-e.length),ls(n,t)}},uB=class extends ps{constructor(e,t){super();if(this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=Er([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,r=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,s=(1-n)/2,o=(1-r)/2,a=s+n,i=r+o;this.cropBox=bi([o,s,i,a],[1,4])}else this.cropBox=bi([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(be().get("IS_NODE"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new uB(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&E.assert(this.webcamConfig.facingMode==="user"||this.webcamConfig.facingMode==="environment",()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`);try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}})}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=Mo.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return ce(()=>{let t=kr(Fe(e,"float32"),0),n;n=ht.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let r=n.shape;return ie(n,r.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(t=>t.stop());try{this.webcamVideoElement.srcObject=null}catch(t){console.log(t),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},cB=class{},pB=class extends ps{split(e){return new Pve(this,e)}},Pve=class extends pB{constructor(e,t){super();this.upstream=e,this.impl=new Mve(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Mve=class extends sR{constructor(e,t){super();this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let e=await this.upstream.next();if(e.done)return this.carryover===""?!1:(this.outputQueue.push(this.carryover),this.carryover="",!0);let t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(let n of t.slice(0,-1))this.outputQueue.push(n);return this.carryover=t[t.length-1],!0}},zve=class extends ps{decodeUTF8(){return new Lve(this)}},Lve=class extends pB{constructor(e){super();this.upstream=e,this.impl=new Bve(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Bve=class extends sR{constructor(e){super();if(this.upstream=e,be().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=dP();this.decoder=new t("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e=await this.upstream.next(),t;if(e.done)return!1;t=e.value;let n;return be().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},dB=class extends zve{constructor(e,t={}){super();this.file=e,this.options=t,E.assert(e instanceof Uint8Array||(be().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((t,n)=>{let r=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)t(new Uint8Array(this.file.slice(this.offset,r)));else{let s=new FileReader;s.onload=a=>{let i=s.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return n(new TypeError("FileReader returned unknown type."));t(i)},s.onabort=a=>n(new Error("Aborted")),s.onerror=a=>n(new Error(a.type));let o=this.file.slice(this.offset,r);s.readAsArrayBuffer(o)}this.offset=r}),done:!1}}};async function Vve(e,t={}){let n,r;typeof e=="string"?n=e:(n=e.url,r=Wve(e));let s=await E.fetch(n,r);if(s.ok){let o=new Uint8Array(await s.arrayBuffer());return new dB(o,t)}else throw new Error(s.statusText)}var Wve=e=>({method:e.method,headers:e.headers,body:e.body,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,referrer:e.referrer,integrity:e.integrity});function fB(e){return typeof e=="string"&&e.substr(0,7)==="file://"}var hB=class extends cB{constructor(e,t={}){super();this.input=e,this.options=t}async iterator(){if(fB(this.input)&&be().get("IS_NODE")){let e=ig("fs");this.input=e.readFileSync(this.input.substr(7))}return new dB(this.input,this.options)}},mB=class extends cB{constructor(e,t={}){super();this.url=e,this.fileOptions=t}async iterator(){return fB(this.url)?new hB(this.url,this.fileOptions).iterator():Vve(this.url,this.fileOptions)}};function Gve(e,t={}){return new iB(new mB(e),t)}function Uve(e){let t=rR(e);return qo(async()=>t)}function jve(e){return qo(async()=>{let t=await e();return rR(()=>t.next())})}async function Hve(e,t){return uB.create(e,t)}async function qve(e){return lB.create(e)}var Kve="3.9.0";function rt(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&E.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var Xve=ll.whereImpl,aR=class extends $1{constructor(){super();this.blockSize=48,this.firstUse=!0,this.data=new Xv(this,zo())}nextDataId(){return aR.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,be().get("IS_NODE")&&G.warn(` ============================ Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details. ============================`));let r={id:this.nextDataId()};return this.data.set(r,{values:e,dtype:n,refCount:1}),r}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&E.isString(n[0])){let s=n.map(o=>E.encodeString(o));r=this.write(s,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,r,s){this.data.set(e,{values:t,dtype:r,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let r=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return G.mergeRealAndImagArrays(r,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>E.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return Wt(e.shape,e.dtype,n)}makeOutput(e,t,n){let r=this.write(e,t,n);return zo().makeTensorFromDataId(r,t,n,this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=E.now();return e(),{kernelMs:E.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){rt([e],"where");let t=this.readSync(e.dataId);return Xve(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};aR.nextDataId=0;var gB={};Rt(gB,{addImpl:()=>yB,bincountImpl:()=>lR,bincountReduceImpl:()=>bB,ceilImpl:()=>AB,concatImpl:()=>uR,equalImpl:()=>vB,expImpl:()=>kB,expm1Impl:()=>CB,floorImpl:()=>SB,gatherNdImpl:()=>NB,gatherV2Impl:()=>TB,greaterEqualImpl:()=>EB,greaterImpl:()=>_B,lessEqualImpl:()=>DB,lessImpl:()=>RB,linSpaceImpl:()=>$B,logImpl:()=>FB,maxImpl:()=>OB,maximumImpl:()=>PB,minimumImpl:()=>MB,multiplyImpl:()=>cR,negImpl:()=>zB,notEqualImpl:()=>LB,prodImpl:()=>BB,rangeImpl:()=>dR,rsqrtImpl:()=>VB,sigmoidImpl:()=>Mwe,simpleAbsImpl:()=>xB,sliceImpl:()=>v5,sparseFillEmptyRowsImpl:()=>GB,sparseReshapeImpl:()=>UB,sparseSegmentReductionImpl:()=>fR,sqrtImpl:()=>Bwe,squaredDifferenceImpl:()=>jB,stridedSliceImpl:()=>HB,stringNGramsImpl:()=>qB,stringSplitImpl:()=>KB,stringToHashBucketFastImpl:()=>XB,subImpl:()=>ZB,tileImpl:()=>YB,topKImpl:()=>QB,transposeImpl:()=>pR,uniqueImpl:()=>eV});function xB(e){let t=new Float32Array(e.length);for(let n=0;n{let{x:t}=e.inputs,n=e.backend;rt(t,"abs");let r=new Float32Array(E.sizeFromShape(t.shape)),s=n.data.get(t.dataId).values;return r=xB(s),n.makeOutput(r,t.shape,"float32")},Yve={kernelName:cg,backendName:"cpu",kernelFunc:Zve};function Dr(e){return(t,n,r,s,o)=>{let a=G.assertAndGetBroadcastShape(t,n),i=a.length,l=E.computeStrides(a),u=E.sizeFromShape(a),c=E.getTypedArrayFromDType(o,u),p=t.length,d=n.length,f=E.computeStrides(t),h=E.computeStrides(n),m=G.getBroadcastDims(t,a),g=G.getBroadcastDims(n,a);if(m.length+g.length===0)for(let x=0;xb[k]=0);let A=E.locToIndex(b,p,f),v=y.slice(-d);g.forEach(k=>v[k]=0);let w=E.locToIndex(v,d,h);c[x]=e(r[A],s[w])}return[c,a]}}function Ko(e){let{inputs:t,backend:n}=e,{real:r,imag:s}=t,o=n.data.get(r.dataId).values,a=n.data.get(s.dataId).values,i=n.makeTensorInfo(r.shape,"complex64"),l=n.data.get(i.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",o),imag:n.makeTensorInfo(s.shape,"float32",a)},i}var Jve={kernelName:rw,backendName:"cpu",kernelFunc:Ko};function b5(e,t,n="float32"){if(n==="complex64"){let s=b5(e,t,"float32"),o=b5(e,t,"float32");return Ko({inputs:{real:s,imag:o},backend:e})}let r=E.makeZerosTypedArray(E.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function hl(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var Qve={kernelName:sf,backendName:"cpu",kernelFunc:hl};function ch(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.data.get(r.dataId).complexTensorInfos.real,o=n.data.get(s.dataId).values;return n.makeTensorInfo(s.shape,s.dtype,o)}var ewe={kernelName:Iw,backendName:"cpu",kernelFunc:ch};function tp(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:o}=r;if(o==="complex64"){if(s.dtype==="complex64")return hl({inputs:{x:s},backend:n});let a=b5(n,s.shape,s.dtype),i=tp({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),l=Ko({inputs:{real:i,imag:a},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i),l}if(s.dtype==="complex64"){let a=ch({inputs:{input:s},backend:n}),i=tp({inputs:{x:a},backend:n,attrs:{dtype:o}});return n.disposeIntermediateTensorInfo(a),i}if(!E.hasEncodingLoss(s.dtype,o)){let a=hl({inputs:{x:s},backend:n});return{dataId:a.dataId,shape:a.shape,dtype:o}}if(o==="int32"){let a=n.data.get(s.dataId).values,i=Int32Array.from(a);return n.makeTensorInfo(s.shape,"int32",i)}if(o==="bool"){let a=n.data.get(s.dataId).values,i=E.toTypedArray([0],s.dtype),[l,u]=Dr((c,p)=>c!==p?1:0)(s.shape,[],a,i,"bool");return n.makeTensorInfo(u,"bool",l)}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${o}`)}var twe={kernelName:Gd,backendName:"cpu",kernelFunc:tp};function ds(e,t,n,r){return n==null?({inputs:s,backend:o})=>{let{a,b:i}=s,l=o;rt([a,i],e);let u=l.data.get(a.dataId).values,c=l.data.get(i.dataId).values,p=a.dtype==="string"?G.fromUint8ToStringArray(u):u,d=a.dtype==="string"?G.fromUint8ToStringArray(c):c,f=r||a.dtype,[h,m]=t(a.shape,i.shape,p,d,f);return l.makeTensorInfo(m,f,h)}:({inputs:s,backend:o})=>{let{a,b:i}=s,l=o;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=tp({inputs:{x:a},backend:l,attrs:{dtype:"complex64"}}),c=l.data.get(u.dataId),p=c.complexTensorInfos.real,d=c.complexTensorInfos.imag,f=l.data.get(p.dataId).values,h=l.data.get(d.dataId).values,m=tp({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(m.dataId),x=g.complexTensorInfos.real,y=g.complexTensorInfos.imag,b=l.data.get(x.dataId).values,A=l.data.get(y.dataId).values,[v,w,k]=n(a.shape,i.shape,f,h,b,A),I=l.makeTensorInfo(k,"float32",v),N=l.makeTensorInfo(k,"float32",w),T=Ko({inputs:{real:I,imag:N},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(I),l.disposeIntermediateTensorInfo(N),T}else{let u=l.data.get(a.dataId).values,c=l.data.get(i.dataId).values,p=r||a.dtype,[d,f]=t(a.shape,i.shape,u,c,p);return l.makeTensorInfo(f,p,d)}}}function iR(e){return(t,n,r,s,o,a)=>{let i=G.assertAndGetBroadcastShape(t,n),l=E.sizeFromShape(i),u=i.length,c=E.computeStrides(i),p=E.getTypedArrayFromDType("float32",l),d=E.getTypedArrayFromDType("float32",l),f=G.getBroadcastDims(t,i),h=G.getBroadcastDims(n,i),m=G.mergeRealAndImagArrays(r,s),g=G.mergeRealAndImagArrays(o,a),x=t.length,y=E.computeStrides(t),b=n.length,A=E.computeStrides(n);if(f.length+h.length===0)for(let v=0;vk[R]=0);let I=E.locToIndex(k,x,y),N=w.slice(-b);h.forEach(R=>N[R]=0);let T=E.locToIndex(N,b,A),_=e(m[I*2],m[I*2+1],g[T*2],g[T*2+1]);p[v]=_.real,d[v]=_.imag}return[p,d,i]}}var yB=Dr((e,t)=>e+t),nwe=iR((e,t,n,r)=>({real:e+n,imag:t+r})),qb=ds($c,yB,nwe),rwe={kernelName:$c,backendName:"cpu",kernelFunc:qb};function lR(e,t,n,r,s){let o=E.sizeFromShape(r),a=E.makeZerosTypedArray(s,n);for(let i=0;i=s||(o>0?a[l]+=t[i]:a[l]+=1)}return a}function bB(e,t,n,r=!1){let s=e.shape[0],o=e.shape[1],a=Wt([s,n],t.dtype);for(let i=0;i=n||(r?a.set(1,i,u):t.size>0?a.set(a.get(i,u)+t.get(i,l),i,u):a.set(a.get(i,u)+1,i,u))}return a}function np(e){return(t,n,r)=>{let s=E.getTypedArrayFromDType(n,t.length);for(let o=0;o{let{x:a}=r;if(rt(a,e),a.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=o,l=i.data.get(a.dataId).values,u=E.sizeFromShape(a.shape),c=n||a.dtype,p=E.getArrayFromDType(c,u);for(let d=0;d{let{x:a}=r;if(rt(a,e),a.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=o,l=i.data.get(a.dataId).values,u=n||a.dtype,c=t(l,u,s);return i.makeTensorInfo(a.shape,u,c)}}var AB=np(e=>Math.ceil(e)),swe=V0(Ud,AB),owe={kernelName:Ud,backendName:"cpu",kernelFunc:swe};function uR(e,t,n,r){let s=E.getArrayFromDType(n,E.sizeFromShape(t));if(r&&n!=="string"){let o=0;e.forEach(a=>{let i=E.sizeFromShape(a.shape);s.set(a.vals,o),o+=i})}else{let o=0;e.forEach(a=>{let i=n==="string"?G.fromUint8ToStringArray(a.vals):a.vals,l=0;for(let u=0;ue===t?1:0),wB=ds(Cg,vB,null,"bool"),awe={kernelName:Cg,backendName:"cpu",kernelFunc:wB},kB=np(e=>Math.exp(e)),IB=V0(Qd,kB),iwe={kernelName:Qd,backendName:"cpu",kernelFunc:IB},CB=np(e=>Math.expm1(e)),lwe=V0(Ng,CB),uwe={kernelName:Ng,backendName:"cpu",kernelFunc:lwe},SB=np(e=>Math.floor(e)),cwe=V0(ef,SB),pwe={kernelName:ef,backendName:"cpu",kernelFunc:cwe};function NB(e,t,n,r,s,o,a,i,l){let u=Wt([r,o],n);for(let c=0;c=l/o)throw new Error(`Invalid indices: ${p} does not index into ${i}`);for(let f=0;fe>t?1:0),dwe=ds(Rg,_B,null,"bool"),fwe={kernelName:Rg,backendName:"cpu",kernelFunc:dwe},EB=Dr((e,t)=>e>=t?1:0),hwe=ds(rf,EB,null,"bool"),mwe={kernelName:rf,backendName:"cpu",kernelFunc:hwe},RB=Dr((e,t)=>ee<=t?1:0),ywe=ds(Pg,DB,null,"bool"),bwe={kernelName:Pg,backendName:"cpu",kernelFunc:ywe};function $B(e,t,n){let r=(t-e)/(n-1),s=E.makeZerosTypedArray(n,"float32");s[0]=e;for(let o=1;oMath.log(e)),Awe=V0(af,FB),vwe={kernelName:af,backendName:"cpu",kernelFunc:Awe};function OB(e,t,n,r){let s=E.getTypedArrayFromDType(r,E.sizeFromShape(n));for(let o=0;oi)&&(i=u)}s[o]=i}return s}var PB=Dr((e,t)=>Math.max(e,t)),wwe=ds(uf,PB),kwe={kernelName:uf,backendName:"cpu",kernelFunc:wwe},MB=Dr((e,t)=>Math.min(e,t)),Iwe=ds(ff,MB),Cwe={kernelName:ff,backendName:"cpu",kernelFunc:Iwe},cR=Dr((e,t)=>e*t),Swe=iR((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),A5=ds(mf,cR,Swe),Nwe={kernelName:mf,backendName:"cpu",kernelFunc:A5};function zB(e,t,n){let r=E.createScalarValue(-1,n);return cR([],t,r,e,n)}function Twe(e){let{inputs:t,backend:n}=e,{x:r}=t;rt(r,"neg");let s=n.data.get(r.dataId).values,[o,a]=zB(s,r.shape,r.dtype);return n.makeTensorInfo(a,r.dtype,o)}var _we={kernelName:Bg,backendName:"cpu",kernelFunc:Twe},LB=Dr((e,t)=>e!==t?1:0),Ewe=ds(Vg,LB,null,"bool"),Rwe={kernelName:Vg,backendName:"cpu",kernelFunc:Ewe};function pR(e,t,n,r,s){let o=t.length,a=E.sizeFromShape(t),i=E.computeStrides(t),l=E.computeStrides(s),u=E.getTypedArrayFromDType(n,E.sizeFromShape(s));for(let c=0;cn.disposeIntermediateTensorInfo(y)),n.makeTensorInfo(x,g,h)}var Fwe={kernelName:qg,backendName:"cpu",kernelFunc:$we};function dR(e,t,n,r){let s=e===t,o=e1;if(s||o||a)return E.makeZerosTypedArray(0,r);let i=Math.abs(Math.ceil((t-e)/n)),l=E.makeZerosTypedArray(i,r);t1/Math.sqrt(e)),Owe=V0(Cf,VB),Pwe={kernelName:Cf,backendName:"cpu",kernelFunc:Owe},Mwe=np(e=>1/(1+Math.exp(-e))),WB=In(Nf,e=>1/(1+Math.exp(-e))),zwe={kernelName:Nf,backendName:"cpu",kernelFunc:WB};function v5(e,t,n,r,s){let o=Bs.isSliceContinous(r,t,n),a=E.sizeFromShape(n),i=E.computeStrides(r);if(o){let p=Bs.computeFlatOffset(t,i);return s==="string"?e.slice(p,p+a):e.subarray(p,p+a)}let l=s==="string"?G.fromUint8ToStringArray(e):e,u=Wt(r,s,l),c=Wt(n,s);for(let p=0;ph+t[m]);c.set(u.get(...f),...d)}return s==="string"?G.fromStringArrayToUint8(c.values):c.values}function ph(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,size:a}=r;rt(s,"slice");let[i,l]=Bs.parseSliceParams(s,o,a);Bs.assertParamsValid(s,i,l);let u=n.data.get(s.dataId).values,c=v5(u,i,l,s.shape,s.dtype);return n.makeTensorInfo(l,s.dtype,c)}var Lwe={kernelName:Qg,backendName:"cpu",kernelFunc:ph};function GB(e,t,n,r,s,o,a){let i=t[0],l=o[0],u=new Array(l),c=new Array(i),p=t[1];if(l===0){if(i!==0)throw new Error(`Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${i}`);let g=E.getArrayFromDType(n,0),x=E.getArrayFromDType(s,0);return[g,[0,p],x,u,c]}let d=!0,f=0,h=new Array(l).fill(0);for(let g=0;g=l)throw new Error(`indices(${g}, 0) is invalid: ${x} >= ${l}`);++h[x],d=d&&x>=f,f=x}let m=!0;for(let g=0;g0&&(h[g]+=h[g-1])}if(m&&d){let g=e,x=r;for(let y=0;y0){f[d-1]=1;for(let g=d-2;g>=0;--g)f[g]=f[g+1]*r[g+1]}let h=[];if(i>0){h[i-1]=1;for(let g=i-2;g>=0;--g)h[g]=h[g+1]*l[g+1]}let m=E.getArrayFromDType(n,a*i);for(let g=0;g0?s[i-1]+1:0;if(p<0)throw new Error("segment ids must be >= 0");let d=t.slice();d[0]=p;let f=d.reduce((b,A)=>b*A,1),h=E.getArrayFromDType(n,f);if(i===0)return p>0&&h.fill(a),[h,d];if(p<=0)throw new Error("segment ids must be >= 0");let m=0,g=1,x=0,y=s[m];for(;;){let b=0;if(g=b)throw new Error("segment ids are not increasing")}if(y<0||y>=p)throw new Error(`Segment id ${y} out of range [0, ${p}), possibly because segmentIds input is not sorted.`);y>x&&h.fill(a,x*u,y*u);for(let A=m;A=l[0])throw new Error(`Bad: indices[${A}] == ${r[A]} out of range [0, ${l[0]})`);for(let w=0;wi)break}return xMath.sqrt(e)),Vwe=In(Tf,e=>Math.sqrt(e)),Wwe={kernelName:Tf,backendName:"cpu",kernelFunc:Vwe},jB=Dr((e,t)=>{let n=e-t;return n*n}),Gwe=ds(Rf,jB),Uwe={kernelName:Rf,backendName:"cpu",kernelFunc:Gwe};function HB(e,t,n,r){let s=Wt(e,t.dtype);for(let o=0;o0?0:a-i),d=0;d+=l*this.leftPad.length;for(let x=0;xx.forEach(y=>h[m++]=y);for(let x=0;x0){g(e[p+c-1]);for(let x=0;x0){let i=t[0];if(i!==0)throw new Error(`First split value must be 0, got ${i}`);for(let l=1;l=i;if(u=u&&t[l]<=n,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${i}, ${n}]`);i=t[l]}if(i!==n)throw new Error(`Last split value must be data size. Expected ${n}, got ${i}`)}let s=r-1,o=E.getArrayFromDType("int32",r);if(n===0||r===0){let i=new Array(n);for(let l=0;l<=s;++l)o[l]=0;return[i,o]}o[0]=0;for(let i=1;i<=s;++i){let l=t[i]-t[i-1],u=0;this.nGramWidths.forEach(c=>{u+=this.getNumNGrams(l,c)}),this.preserveShort&&l>0&&u===0&&(u=1),o[i]=o[i-1]+u}let a=new Array(o[s]);for(let i=0;i{let p=t[i+1]-t[i],d=this.getNumNGrams(p,c);this.createNGrams(e,l,a,u,d,c),u+=d}),this.preserveShort&&u===o[i]){let c=t[i+1]-t[i];if(c===0)continue;let p=c+2*this.padWidth,d=1;this.createNGrams(e,l,a,u,d,p)}}return[a,o]}};function qB(e,t,n,r,s,o,a,i){return new jwe(n,r,s,o,a,i).compute(e,t)}function Hwe(e,t,n,r){if(!e.length)return;if(t.length===0){for(let o=0;oe-t),qwe=iR((e,t,n,r)=>({real:e-n,imag:t-r})),hR=ds(Df,ZB,qwe),Kwe={kernelName:Df,backendName:"cpu",kernelFunc:hR};function YB(e,t){let n=new Array(e.rank);for(let s=0;s{let n=t.value-e.value;return n===0?e.index-t.index:n};function JB(e,t,n=0,r=e.length-1){for(;r>n;){if(r-n>600){let i=r-n+1,l=t-n+1,u=Math.log(i),c=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(l-i/2),d=Math.max(n,Math.floor(t-l*c/i+p)),f=Math.min(r,Math.floor(t+(i-l)*c/i+p));JB(e,t,d,f)}let s=e[t],o=n,a=r;for(E.swap(e,n,t),Kb(e[r],s)>0&&E.swap(e,n,r);o0;)a=a-1}Kb(e[n],s)===0?E.swap(e,n,a):(a=a+1,E.swap(e,a,r)),a<=t&&(n=a+1),t<=a&&(r=a-1)}}function QB(e,t,n,r,s){let o=t[t.length-1],[a,i]=[e.length/o,o],l=E.getTypedArrayFromDType(n,a*r),u=E.getTypedArrayFromDType("int32",a*r);for(let p=0;ph[b]={value:y,index:b}),r{for(let g=0;gnew aR,1);var tV=In(Jd,e=>e>=0?e:Math.exp(e)-1),Xwe={kernelName:Jd,backendName:"cpu",kernelFunc:tV};function nV(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:o}=r;rt([s],"leakyRelu");let a=E.sizeFromShape(s.shape),i=n.data.get(s.dataId).values,l=E.getTypedArrayFromDType("float32",a);for(let u=0;ue<0?t*e:e);function rV(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t;rt([r,s],"prelu");let o=n.data.get(r.dataId).values,a=n.data.get(s.dataId).values,[i,l]=Ywe(r.shape,s.shape,o,a,r.dtype);return n.makeTensorInfo(l,r.dtype,i)}var Jwe={kernelName:bf,backendName:"cpu",kernelFunc:rV},sV=In(Af,e=>Math.max(0,e)),Qwe={kernelName:Af,backendName:"cpu",kernelFunc:sV},oV=In(wf,e=>Math.min(Math.max(0,e),6)),eke={kernelName:wf,backendName:"cpu",kernelFunc:oV};function mR(e,t,n,r,s){if(n==="linear")return hl({inputs:{x:t},backend:e});if(n==="relu")return sV({inputs:{x:t},backend:e});if(n==="elu")return tV({inputs:{x:t},backend:e});if(n==="relu6")return oV({inputs:{x:t},backend:e});if(n==="prelu")return rV({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return nV({inputs:{x:t},backend:e,attrs:{alpha:s}});if(n==="sigmoid")return WB({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function Un(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{shape:o}=r,a=E.sizeFromShape(s.shape),i=E.inferFromImplicitShape(o,a),l=E.sizeFromShape(i);E.assert(a===l,()=>`The new shape (${i}) has ${l} elements and the old shape (${s.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),n.incRef(s.dataId);let u=n.data.get(s.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,p=u.complexTensorInfos.imag;c.shape=i,p.shape=i}return{dataId:s.dataId,shape:i,dtype:s.dtype}}var tke={kernelName:Xg,backendName:"cpu",kernelFunc:Un};function aV(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o}=t,{transposeA:a,transposeB:i}=r;rt([s,o],"matMul");let l=s.shape.length,u=o.shape.length,c=a?s.shape[l-2]:s.shape[l-1],p=i?o.shape[u-1]:o.shape[u-2],d=a?s.shape[l-1]:s.shape[l-2],f=i?o.shape[u-2]:o.shape[u-1],h=s.shape.slice(0,-2),m=o.shape.slice(0,-2),g=E.sizeFromShape(h),x=E.sizeFromShape(m),y=g===x||g===1||x===1;E.assert(l>=2&&u>=2&&y,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${h}) and (${m}).`);let A=(g>x?s.shape.slice(0,-2):o.shape.slice(0,-2)).concat([d,f]);E.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${s.shape} and ${o.shape} and transposeA=${a} and transposeB=${i} must match.`);let v=a?[g,c,d]:[g,d,c],w=i?[x,f,p]:[x,p,f],k=Un({inputs:{x:s},backend:n,attrs:{shape:v}}),I=Un({inputs:{x:o},backend:n,attrs:{shape:w}}),N=a?k.shape[1]:k.shape[2],T=a?k.shape[2]:k.shape[1],_=i?I.shape[1]:I.shape[2],R=Math.max(g,x),S=n.data.get(k.dataId).values,F=n.data.get(I.dataId).values,B=E.computeStrides(k.shape),W=E.computeStrides(I.shape),[q,K,J]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Q,ee,ue]=i?[1,W[1],W[0]]:[W[1],1,W[0]],re=T*_,de=Wt([R,T,_],k.dtype),fe=de.values,me=n.blockSize;for(let xe=0;xeMath.acos(e)),ake={kernelName:pg,backendName:"cpu",kernelFunc:oke},ike=In(dg,e=>Math.acosh(e)),lke={kernelName:dg,backendName:"cpu",kernelFunc:ike};function uke(e){let{inputs:t,backend:n}=e,r=t;rt(t,"addN");let s=r.map(i=>n.data.get(i.dataId).values),o=Wt(r[0].shape,r[0].dtype),a=o.values;for(let i=0;iy&&(y=v,b=A)}f[g]=b}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(c,"int32",f)}var gke={kernelName:Bd,backendName:"cpu",kernelFunc:mke};function xke(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o}=r;rt(s,"argMin");let a=E.parseAxisParam(o,s.shape),i=G.getAxesPermutation(a,s.shape.length),l=s,u=[];i!=null&&(l=ha({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(l),a=G.getInnerMostAxes(a.length,l.shape.length)),a=[a[0]],G.assertAxesAreInnerMostDims("argMin",a,l.shape.length);let[c,p]=G.computeOutAndReduceShapes(l.shape,a),d=E.sizeFromShape(c),f=E.makeZerosTypedArray(d,"int32"),h=E.sizeFromShape(p),m=n.data.get(l.dataId).values;for(let g=0;gn.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(c,"int32",f)}var yke={kernelName:P1,backendName:"cpu",kernelFunc:xke},bke=In(mg,e=>Math.asin(e)),Ake={kernelName:mg,backendName:"cpu",kernelFunc:bke},vke=In(gg,e=>Math.asinh(e)),wke={kernelName:gg,backendName:"cpu",kernelFunc:vke},kke=In(xg,e=>Math.atan(e)),Ike={kernelName:xg,backendName:"cpu",kernelFunc:kke},Cke=Dr((e,t)=>Math.atan2(e,t)),Ske=ds(bg,Cke),Nke={kernelName:bg,backendName:"cpu",kernelFunc:Ske},Tke=In(yg,e=>Math.atanh(e)),_ke={kernelName:yg,backendName:"cpu",kernelFunc:Tke};function gR(e,t,n,r,s,o){let a=s.strideHeight,i=s.strideWidth,l=s.dilationHeight,u=s.dilationWidth,c=s.effectiveFilterHeight,p=s.effectiveFilterWidth,d=s.padInfo.top,f=s.padInfo.left,h=o==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=Wt(s.outShape,n),g=m.values,x=s.outShape[1]*s.outShape[2]*s.outShape[3],y=s.outShape[2]*s.outShape[3],b=s.outShape[3];for(let A=0;Aq?q=fe:o==="avg"&&(K+=fe,J++)}if(isNaN(q))break}let Q=R+S*b+k;g[Q]=o==="avg"?K/J:q}}}return m}function iV(e,t,n,r,s=!1,o=!1){let a=Wt(r.outShape,"int32"),i=r.strideHeight,l=r.strideWidth,u=r.dilationHeight,c=r.dilationWidth,p=r.effectiveFilterHeight,d=r.effectiveFilterWidth,f=r.padInfo.top,h=r.padInfo.left,m=Wt(t,n,e);for(let g=0;gT&&(T=W,s?_=o?((g*r.inHeight+R)*r.inWidth+F)*r.inChannels+x:(R*r.inWidth+F)*r.inChannels+x:_=S*d+B)}}a.set(_,g,y,w,x)}}return a}function lV(e,t,n,r,s,o){let a=s.strideDepth,i=s.strideHeight,l=s.strideWidth,u=s.dilationDepth,c=s.dilationHeight,p=s.dilationWidth,d=s.effectiveFilterDepth,f=s.effectiveFilterHeight,h=s.effectiveFilterWidth,m=s.padInfo.front,g=s.padInfo.top,x=s.padInfo.left,y=o==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,b=Wt(s.outShape,n),A=b.values,v=s.outShape[1]*s.outShape[2]*s.outShape[3]*s.outShape[4],w=s.outShape[2]*s.outShape[3]*s.outShape[4],k=s.outShape[3]*s.outShape[4],I=s.outShape[4];for(let N=0;NNe?Ne=it:o==="avg"&&(_e+=it,Oe++),isNaN(Ne))break}if(isNaN(Ne))break}if(isNaN(Ne))break}let Ve=xe+R;A[Ve]=o==="avg"?_e/Oe:Ne}}}}return b}function Eke(e,t){let n=Wt(t.outShape,"int32"),r=t.strideDepth,s=t.strideHeight,o=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,p=t.effectiveFilterWidth,d=t.padInfo.front,f=t.padInfo.top,h=t.padInfo.left;for(let m=0;m=S&&(S=ee,F=W*c*p+K*c+Q)}}}n.set(F,m,x,v,N,g)}}}return n}function Rke(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;rt(s,"avgPool");let{filterSize:o,strides:a,pad:i,dimRoundingMode:l}=r,u=1;E.assert(G.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=G.computePool2DInfo(s.shape,o,a,u,i,l),p;if(c.filterWidth===1&&c.filterHeight===1&&E.arraysEqual(c.inShape,c.outShape))p=hl({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,f=E.computeStrides(s.shape),h=gR(d,s.shape,s.dtype,f,c,"avg");p=n.makeTensorInfo(c.outShape,s.dtype,h.values)}return p}var Dke={kernelName:Vd,backendName:"cpu",kernelFunc:Rke};function $ke(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=r;rt(s,"avgPool3d");let c=G.computePool3DInfo(s.shape,o,a,1,i,l,u),p=n.data.get(s.dataId).values,d=lV(p,s.shape,s.dtype,E.computeStrides(s.shape),c,"avg");return n.makeTensorInfo(d.shape,"float32",d.values)}var Fke={kernelName:M1,backendName:"cpu",kernelFunc:$ke};function Oke(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=r;rt([s,o],"avgPool3DGrad");let c=G.computePool3DInfo(o.shape,a,i,1,l,u),p=c.strideDepth,d=c.strideHeight,f=c.strideWidth,h=c.filterDepth,m=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,y=c.dilationHeight,b=c.dilationWidth,A=c.effectiveFilterDepth,v=c.effectiveFilterHeight,w=c.effectiveFilterWidth,k=A-1-c.padInfo.front,I=w-1-c.padInfo.left,N=v-1-c.padInfo.top,T=Wt(o.shape,"float32"),_=1/(h*m*g),R=n.bufferSync(s);for(let S=0;S=c.outDepth||Math.floor(re)!==re))for(let de=0;de=c.outHeight||Math.floor(fe)!==fe))for(let me=0;me=c.outWidth||Math.floor(xe)!==xe)continue;ee+=R.get(S,re,fe,xe,F)}}}T.set(ee*_,S,B,W,q,F)}return n.makeTensorInfo(T.shape,T.dtype,T.values)}var Pke={kernelName:tw,backendName:"cpu",kernelFunc:Oke};function Mke(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o;rt([s,o],"avgPoolGrad");let{filterSize:i,strides:l,pad:u}=r,c=G.computePool2DInfo(a.shape,i,l,1,u),p=c.strideHeight,d=c.strideWidth,f=c.filterHeight,h=c.filterWidth,m=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,y=c.effectiveFilterWidth,b=y-1-c.padInfo.left,A=x-1-c.padInfo.top,v=Wt(a.shape,"float32"),w=1/(f*h),k=n.data.get(s.dataId).values,I=Wt(s.shape,"float32",k);for(let N=0;N=c.outHeight||Math.floor(q)!==q))for(let K=0;K=c.outWidth||Math.floor(J)!==J)continue;B+=I.get(N,q,J,T)}}v.set(B*w,N,_,R,T)}return n.makeTensorInfo(v.shape,v.dtype,v.values)}var zke={kernelName:ew,backendName:"cpu",kernelFunc:Mke};function Lke(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,scale:o,offset:a,mean:i,variance:l}=t;E.assert(i.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),E.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),E.assert(o==null||i.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),rt([s,i,l,o,a],"batchNorm");let{varianceEpsilon:u}=r;u==null&&(u=.001);let c=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values,d=n.data.get(l.dataId).values,f=o?n.data.get(o.dataId).values:new Float32Array([1]),h=a?n.data.get(a.dataId).values:new Float32Array([0]),m=new Float32Array(c.length),g=h.length,x=f.length,y=d.length,b=p.length,A=0,v=0,w=0,k=0;for(let I=0;I=g&&(A=0),v>=b&&(v=0),w>=x&&(w=0),k>=y&&(k=0);return n.makeTensorInfo(s.shape,s.dtype,m)}var Bke={kernelName:nf,backendName:"cpu",kernelFunc:Lke};function Vke(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,crops:a}=r;rt([s],"batchToSpaceND");let i=o.reduce((x,y)=>x*y),l=G.getReshaped(s.shape,o,i),u=G.getPermuted(l.length,o.length),c=G.getReshapedPermuted(s.shape,o,i),p=G.getSliceBeginCoords(a,o.length),d=G.getSliceSize(c,a,o.length),f=Un({inputs:{x:s},backend:n,attrs:{shape:l}}),h=ha({inputs:{x:f},backend:n,attrs:{perm:u}}),m=Un({inputs:{x:h},backend:n,attrs:{shape:c}}),g=ph({inputs:{x:m},backend:n,attrs:{begin:p,size:d}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),g}var Wke={kernelName:Ag,backendName:"cpu",kernelFunc:Vke};function Gke(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:o}=t,{size:a}=r,i=n.data.get(s.dataId).values,l=n.data.get(o.dataId).values,u=lR(i,l,o.dtype,o.shape,a);return n.makeTensorInfo([a],o.dtype,u)}var Uke={kernelName:nw,backendName:"cpu",kernelFunc:Gke};function jke(e){let{inputs:t,backend:n}=e,{s0:r,s1:s}=t,o=n.data.get(r.dataId).values,a=n.data.get(s.dataId).values,i=G.assertAndGetBroadcastShape(Array.from(o),Array.from(a));return n.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var Hke={kernelName:ET,backendName:"cpu",kernelFunc:jke},qke=In(Fc,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(E.sizeFromShape(t.shape)),s=n.data.get(t.dataId),o=s.complexTensorInfos.real,a=s.complexTensorInfos.imag,i=n.data.get(o.dataId).values,l=n.data.get(a.dataId).values;for(let u=0;um.shape),o);if(E.sizeFromShape(a)===0)return n.makeTensorInfo(a,t[0].dtype,[]);let i=t.filter(m=>E.sizeFromShape(m.shape)>0);if(i.length===1)return hl({inputs:{x:i[0]},backend:n});let l=i.map(m=>m.shape);if(G.assertParamsConsistent(l,o),i[0].dtype==="complex64"){let m=i.map(A=>ch({inputs:{input:A},backend:n})),g=i.map(A=>W0({inputs:{input:A},backend:n})),x=G0({inputs:m,backend:n,attrs:{axis:o}}),y=G0({inputs:g,backend:n,attrs:{axis:o}}),b=Ko({inputs:{real:x,imag:y},backend:n});return m.forEach(A=>n.disposeIntermediateTensorInfo(A)),g.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.disposeIntermediateTensorInfo(x),n.disposeIntermediateTensorInfo(y),b}let u=i.map(m=>{let g=E.sizeFromShape(m.shape.slice(o));return Un({inputs:{x:m},backend:n,attrs:{shape:[-1,g]}})}),c=u.map(m=>({vals:n.data.get(m.dataId).values,shape:m.shape}));a=G.computeOutShape(u.map(m=>m.shape),1);let p=u[0].shape[0]===1,d=uR(c,a,t[0].dtype,p),f=G.computeOutShape(i.map(m=>m.shape),o),h=n.makeTensorInfo(f,t[0].dtype,d);return u.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var Jke={kernelName:vg,backendName:"cpu",kernelFunc:G0};function uV(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dataFormat:l,dilations:u,dimRoundingMode:c}=r;rt([s,o],"conv2d");let p=G.convertConv2DDataFormat(l),d=G.computeConv2DInfo(s.shape,o.shape,a,u,i,c,!1,p),f=d.filterHeight,h=d.filterWidth,m=d.dilationHeight,g=d.dilationWidth,x=d.padInfo.left,y=d.padInfo.top,b=d.dataFormat==="channelsLast",A=new Ur(d.outShape,s.dtype),v=E.computeStrides(s.shape),w=E.computeStrides(o.shape),k=v[0],I=b?v[1]:v[2],N=b?v[2]:1,T=b?1:v[1],_=A.strides[0],R=b?A.strides[1]:A.strides[2],S=b?A.strides[2]:1,F=b?1:A.strides[1],B=n.data.get(s.dataId).values,W=n.data.get(o.dataId).values,q=A.values;for(let K=0;K=d.inHeight)continue;let me=de*w[0],xe=J+fe*I;for(let Ne=0;Ne=d.inWidth)continue;let At=me+Ve*w[1],ft=xe+He*N,dt=At;for(let ct=0;ct=u.inDepth)continue;let K=W*N[0],J=_+q*I[1];for(let Q=0;Q=u.inHeight)continue;let fe=K+re*N[1],me=J+de*I[2];for(let xe=0;xe=u.inWidth)continue;let He=fe+Oe*N[2],At=me+Ve*u.inChannels,ft=He;for(let dt=0;dtMath.cos(e)),p5e={kernelName:qd,backendName:"cpu",kernelFunc:c5e},d5e=In(Kd,e=>Math.cosh(e)),f5e={kernelName:Kd,backendName:"cpu",kernelFunc:d5e};function h5e(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:o,boxInd:a}=t,{cropSize:i,method:l,extrapolationValue:u}=r,[c,p,d,f]=s.shape,h=o.shape[0],[m,g]=i,x=Wt([h,m,g,f],"float32"),y=n.data.get(o.dataId).values,b=n.data.get(a.dataId).values,A=n.data.get(s.dataId).values,v=E.computeStrides(s.shape),w=E.computeStrides(x.shape);for(let k=0;k=c)continue;let F=m>1?(_-N)*(p-1)/(m-1):0,B=g>1?(R-T)*(d-1)/(g-1):0;for(let W=0;W1?N*(p-1)+W*F:.5*(N+_)*(p-1);if(q<0||q>p-1){for(let K=0;K1?T*(d-1)+ee*B:.5*(T+R)*(d-1);if(ue<0||ue>d-1){for(let me=0;me1?T*(d-1)+K*B:.5*(T+R)*(d-1);if(J<0||J>d-1){for(let ue=0;uex+h-y-1:(x,y)=>x+y;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`),E.assert(o>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${o}`);let i=s.shape[0],l=s.shape[1],u=s.shape[2],c=s.shape[3],p=l*o,d=u*o,f=c/(o*o),h=n.data.get(s.dataId).values,m=new Float32Array(i*p*d*f),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${d}'`);let f=G.computeConv2DInfo(s.shape,o.shape,a,d,i,u,!0),{filterHeight:h,filterWidth:m,dilationHeight:g,dilationWidth:x,padInfo:y}=f,b=y.left,A=y.top,v=f.outChannels/f.inChannels,w=new Ur(f.outShape,s.dtype),k=n.data.get(s.dataId).values,I=n.data.get(o.dataId).values,N=w.values;for(let T=0;T=f.inHeight)continue;let K=W*p[0],J=_+q*c[1];for(let Q=0;Q=f.inWidth)continue;let fe=K+re*p[1],me=J+de*f.inChannels,xe=ee,Ne=fe;for(let _e=0;_e{let{x:r,filter:s}=e,{strides:o,pad:a,dilations:i}=n,l=t,u=l.data.get(r.dataId).values,c=r.shape.length,p=l.data.get(s.dataId).values,d=s.shape.length,{batchSize:f,inHeight:h,inWidth:m,inChannels:g,outHeight:x,outWidth:y,padInfo:b,strideHeight:A,strideWidth:v,filterHeight:w,filterWidth:k,dilationHeight:I,dilationWidth:N,outShape:T}=G.computeDilation2DInfo(r.shape,s.shape,o,a,"NHWC",i),_=E.sizeFromShape(T),R=T.length,S=E.getArrayFromDType(r.dtype,_);for(let B=0;B=0&&de=0&&meee&&(ee=_e)}}}let ue=E.locToIndex([B,W,K,Q],R,E.computeStrides(T));S[ue]=ee}}}return{dataId:l.write(E.toTypedArray(S,r.dtype),T,r.dtype),shape:T,dtype:r.dtype}}},E5e={kernelName:dw,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:o}=e,{strides:a,pad:i,dilations:l}=n,u=t,c=E.toNestedArray(r.shape,u.data.get(r.dataId).values),p=E.toNestedArray(s.shape,u.data.get(s.dataId).values),{batchSize:d,inHeight:f,inWidth:h,inChannels:m,outHeight:g,outWidth:x,padInfo:y,strideHeight:b,strideWidth:A,filterHeight:v,filterWidth:w,dilationHeight:k,dilationWidth:I,outShape:N}=G.computeDilation2DInfo(r.shape,s.shape,a,i,"NHWC",l);E.assert(o.rank===N.length,()=>`Error in ${dw}, dy must have the same rank as output ${N.length}, but got ${o.rank}`);let T=E.toNestedArray(N,u.data.get(o.dataId).values),_=E.makeZerosNestedTypedArray(s.shape,s.dtype);for(let S=0;S=0&&re=0&&feJ&&(J=me,Q=ue,ee=de)}}}_[Q][ee][K]+=T[S][F][W][K]}}}return{dataId:u.write(E.toTypedArray(_,r.dtype),s.shape,s.dtype),shape:s.shape,dtype:s.dtype}}},R5e={kernelName:pw,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:o}=e,{strides:a,pad:i,dilations:l}=n,u=t,c=E.toNestedArray(r.shape,u.data.get(r.dataId).values),p=E.toNestedArray(s.shape,u.data.get(s.dataId).values),{batchSize:d,inHeight:f,inWidth:h,inChannels:m,outHeight:g,outWidth:x,padInfo:y,strideHeight:b,strideWidth:A,filterHeight:v,filterWidth:w,dilationHeight:k,dilationWidth:I,outShape:N}=G.computeDilation2DInfo(r.shape,s.shape,a,i,"NHWC",l);E.assert(o.rank===N.length,()=>`Error in ${pw}, dy must have the same rank as output ${N.length}, but got ${o.rank}`);let T=E.toNestedArray(N,u.data.get(o.dataId).values),_=E.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S=0&&re=0&&feJ&&(J=me,Q=re,ee=fe)}}}_[S][Q][ee][K]+=T[S][F][W][K]}}}return{dataId:u.write(E.toTypedArray(_,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function Xb(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r;rt(s,"sum");let i;s.dtype==="bool"?i=tp({inputs:{x:s},backend:n,attrs:{dtype:"int32"}}):i=hl({inputs:{x:s},backend:n});let l=i.shape.length,u=E.parseAxisParam(o,i.shape),c=G.getAxesPermutation(u,l),p=u,d=i;c!=null&&(d=ha({inputs:{x:i},backend:n,attrs:{perm:c}}),p=G.getInnerMostAxes(p.length,l)),G.assertAxesAreInnerMostDims("sum",p,d.shape.length);let[f,h]=G.computeOutAndReduceShapes(d.shape,p),m=G.upcastType(d.dtype,"int32"),g=b5(n,f,m),x=E.sizeFromShape(h),y=n.data.get(g.dataId).values,b=n.data.get(d.dataId).values;for(let A=0;A=0&&(d=Xb({inputs:{x:d},backend:n,attrs:{axis:u[m]-(a.length-f),keepDims:!1}}),h.push(d)),f--)}for(let m of h)m!==d&&n.disposeIntermediateTensorInfo(m);return d}var F5e={kernelName:fw,backendName:"cpu",kernelFunc:$5e};function O5e(e){let{inputs:t,backend:n}=e,{dy:r,y:s}=t;rt([r,s],"eluGrad");let o=new Float32Array(E.sizeFromShape(s.shape)),a=n.data.get(s.dataId).values,i=n.data.get(r.dataId).values;for(let l=0;l=1?o[l]=i[l]:o[l]=i[l]*(u+1)}return n.makeTensorInfo(s.shape,"float32",o)}var P5e={kernelName:hw,backendName:"cpu",kernelFunc:O5e},M5e=G.ERF_P,z5e=G.ERF_A1,L5e=G.ERF_A2,B5e=G.ERF_A3,V5e=G.ERF_A4,W5e=G.ERF_A5,G5e=In(Ig,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+M5e*n);return t*(1-((((W5e*r+V5e)*r+B5e)*r+L5e)*r+z5e)*r*Math.exp(-n*n))}),U5e={kernelName:Ig,backendName:"cpu",kernelFunc:G5e};function w5(e){let{inputs:t,backend:n,attrs:r}=e,{input:s}=t,{dim:o}=r,a=s.shape.length,i=s.shape.slice(),l=o;return o<0&&(E.assert(-(a+1)<=o,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+o+1),i.splice(l,0,1),Un({inputs:{x:s},backend:n,attrs:{shape:i}})}var j5e={kernelName:Sg,backendName:"cpu",kernelFunc:w5},H5e=Dr((e,t)=>e/t),xR=ds(Yd,H5e),yR={kernelName:Yd,backendName:"cpu",kernelFunc:xR};function pV(e,t,n){let r=e.shape,s=r[0],o=r[1],a=n.data.get(e.dataId),i=a.complexTensorInfos.real,l=a.complexTensorInfos.imag,u=[s,o],c=E.sizeFromShape(u),p=E.getTypedArrayFromDType("float32",c),d=E.getTypedArrayFromDType("float32",c);for(let g=0;g{let{image:r}=e,s=n,o=E.getTypedArrayFromDType(r.dtype,E.sizeFromShape(r.shape)),[a,i,l,u]=r.shape,c=s.data.get(r.dataId).values;for(let d=0;d=0&&bMath.floor(e/t)),n3e=ds(tf,t3e,null,"int32"),r3e={kernelName:tf,backendName:"cpu",kernelFunc:n3e};function s3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=r,m=uV({inputs:{x:s,filter:o},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d}});if(a){let g=m;m=qb({inputs:{a:m,b:a},backend:n}),n.disposeIntermediateTensorInfo(g)}if(f){let g=m;m=mR(n,m,f,i,h),n.disposeIntermediateTensorInfo(g)}return m}var o3e={kernelName:Mf,backendName:"cpu",kernelFunc:s3e};function a3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=r,m=cV({inputs:{x:s,filter:o},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d}});if(a){let g=m;m=qb({inputs:{a:m,b:a},backend:n}),n.disposeIntermediateTensorInfo(g)}if(f){let g=m;m=mR(n,m,f,i,h),n.disposeIntermediateTensorInfo(g)}return m}var i3e={kernelName:zf,backendName:"cpu",kernelFunc:a3e};function l3e(e){let{inputs:t,backend:n}=e,{params:r,indices:s}=t,o=E.sizeFromShape(r.shape),a=s.shape,i=a[a.length-1],[l,u,c,p]=G.prepareAndValidate(r,s);if(u===0)return n.makeTensorInfo(l,r.dtype,[]);let d=n.data.get(s.dataId).values,f=n.bufferSync(r),h=NB(d,f,r.dtype,u,i,c,p,r.shape,o);return n.makeTensorInfo(l,r.dtype,h.values)}var u3e={kernelName:Eg,backendName:"cpu",kernelFunc:l3e};function c3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,indices:o}=t,{axis:a,batchDims:i}=r;rt([s,o],"gatherV2");let l=i;i==null&&(l=0);let u=E.sizeFromShape(o.shape),c=E.parseAxisParam(a,s.shape)[0],p=G.segment_util.collectGatherOpShapeInfo(s,o,c,l),d=Un({inputs:{x:s},backend:n,attrs:{shape:[p.batchSize,p.outerSize,p.dimSize,p.sliceSize]}}),f=Un({inputs:{x:o},backend:n,attrs:{shape:[p.batchSize,u/p.batchSize]}}),h=[p.batchSize,p.outerSize,u/p.batchSize,p.sliceSize],m=n.bufferSync(f),g=n.bufferSync(d),x=TB(g,m,h);return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),n.makeTensorInfo(p.outputShape,x.dtype,x.values)}var p3e={kernelName:_g,backendName:"cpu",kernelFunc:c3e};function d3e(e){let{inputs:t,backend:n}=e,{input:r}=t,s=E.sizeFromShape(r.shape),o=r.shape[r.shape.length-1],a=s/o,i=Un({inputs:{x:r},backend:n,attrs:{shape:[a,o]}}),l=pV(i,!0,n),u=Un({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var f3e={kernelName:gw,backendName:"cpu",kernelFunc:d3e},h3e=In(Dg,e=>Number.isFinite(e)?1:0,"bool"),m3e={kernelName:Dg,backendName:"cpu",kernelFunc:h3e},g3e=In($g,e=>Math.abs(e)===1/0?1:0,"bool"),x3e={kernelName:$g,backendName:"cpu",kernelFunc:g3e},y3e=In(Fg,e=>Number.isNaN(e)?1:0,"bool"),b3e={kernelName:Fg,backendName:"cpu",kernelFunc:y3e};function A3e(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:o}=n,a=$B(r,s,o);return t.makeTensorInfo([a.length],"float32",a)}var v3e={kernelName:yw,backendName:"cpu",kernelFunc:A3e},w3e=In(Mg,e=>Math.log1p(e)),k3e={kernelName:Mg,backendName:"cpu",kernelFunc:w3e},I3e=Dr((e,t)=>e&&t),C3e=ds(zg,I3e,null,"bool"),S3e={kernelName:zg,backendName:"cpu",kernelFunc:C3e},N3e=In(W1,e=>e?0:1,"bool"),T3e={kernelName:W1,backendName:"cpu",kernelFunc:N3e},_3e=Dr((e,t)=>e||t),E3e=ds(G1,_3e,null,"bool"),R3e={kernelName:G1,backendName:"cpu",kernelFunc:E3e};function D3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:o,bias:a,alpha:i,beta:l}=r;rt(s,"LRN");let u=s.shape[3],c=u-1,p=n.data.get(s.dataId).values,d=E.sizeFromShape(s.shape),f=new Float32Array(d);function h(m){let g=m%u,x=m-g+Math.max(0,g-o),y=m-g+Math.min(g+o,c),b=0;for(;x<=y;x++){let A=p[x];b+=A*A}return b}for(let m=0;m`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=G.computePool2DInfo(s.shape,o,a,u,i,l),p;if(c.filterWidth===1&&c.filterHeight===1&&E.arraysEqual(c.inShape,c.outShape))p=hl({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,f=E.computeStrides(s.shape),h=gR(d,s.shape,s.dtype,f,c,"max");p=n.makeTensorInfo(c.outShape,s.dtype,h.values)}return p}var z3e={kernelName:cf,backendName:"cpu",kernelFunc:M3e};function L3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=r;rt(s,"maxPool3d");let c=G.computePool3DInfo(s.shape,o,a,1,i,l,u),p=n.data.get(s.dataId).values,d=lV(p,s.shape,s.dtype,E.computeStrides(s.shape),c,"max");return n.makeTensorInfo(d.shape,"float32",d.values)}var B3e={kernelName:j1,backendName:"cpu",kernelFunc:L3e};function V3e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=r;rt([s,o],"maxPool3DGrad");let c=G.computePool3DInfo(o.shape,a,i,1,l,u),p=n.bufferSync(o),d=Eke(p,c),f=c.strideDepth,h=c.strideHeight,m=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,y=c.dilationWidth,b=c.effectiveFilterDepth,A=c.effectiveFilterHeight,v=c.effectiveFilterWidth,w=b-1-c.padInfo.front,k=v-1-c.padInfo.left,I=A-1-c.padInfo.top,N=Wt(o.shape,"float32"),T=n.bufferSync(s);for(let _=0;_=c.outDepth||Math.floor(ee)!==ee))for(let ue=0;ue=c.outHeight||Math.floor(re)!==re))for(let de=0;de=c.outWidth||Math.floor(fe)!==fe)continue;let me=b*A*v-1-d.get(_,ee,re,fe,R),xe=Q*A*v+ue*v+de,Ne=me===xe?1:0;if(Ne===0)continue;J+=T.get(_,ee,re,fe,R)*Ne}}}N.set(J,_,S,F,B,R)}return n.makeTensorInfo(N.shape,N.dtype,N.values)}var W3e={kernelName:vw,backendName:"cpu",kernelFunc:V3e};function G3e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o,output:a}=t,i=o;rt([o,a],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:p}=r,d=G.computePool2DInfo(i.shape,l,u,1,c,p),f=n.data.get(i.dataId).values,h=Wt(d.outShape,i.dtype,iV(f,i.shape,i.dtype,d).values),m=d.strideHeight,g=d.strideWidth,x=d.dilationHeight,y=d.dilationWidth,b=d.effectiveFilterHeight,A=d.effectiveFilterWidth,v=A-1-d.padInfo.left,w=b-1-d.padInfo.top,k=Wt(i.shape,"float32"),I=n.data.get(s.dataId).values,N=Wt(s.shape,"float32",I);for(let T=0;T=d.outHeight||Math.floor(K)!==K))for(let J=0;J=d.outWidth||Math.floor(Q)!==Q)continue;let ee=b*A-1-h.get(T,K,Q,_),ue=q*A+J,re=ee===ue?1:0;if(re===0)continue;W+=N.get(T,K,Q,_)*re}}k.set(W,T,R,S,_)}return n.makeTensorInfo(k.shape,k.dtype,k.values)}var U3e={kernelName:Aw,backendName:"cpu",kernelFunc:G3e};function j3e(e,t,n,r,s){let o=E.computeStrides(t),a=gR(e,t,n,o,s,"max"),i=iV(e,t,n,s,!0,r);return[a.values,i.values]}var H3e={kernelName:ww,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:o,pad:a,includeBatchInIndex:i}=t,l=n;rt(r,"MaxPoolWithArgmax");let u=l.data.get(r.dataId).values,c=G.computePool2DInfo(r.shape,s,o,[1,1],a),[p,d]=j3e(u,r.shape,r.dtype,i,c),f=l.write(p,c.outShape,r.dtype),h=l.write(d,c.outShape,r.dtype);return[{dataId:f,shape:c.outShape,dtype:r.dtype},{dataId:h,shape:c.outShape,dtype:"int32"}]}};function q3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=E.parseAxisParam(o,s.shape),u=G.computeOutAndReduceShapes(s.shape,i)[1],c=E.sizeFromShape(u),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([c]));p.push(d);let f=tp({inputs:{x:s},backend:n,attrs:{dtype:"float32"}});p.push(f);let h=xR({inputs:{a:f,b:d},backend:n});p.push(h);let m=Xb({inputs:{x:h},backend:n,attrs:{axis:o,keepDims:a}});return p.forEach(g=>n.disposeIntermediateTensorInfo(g)),m}var K3e={kernelName:pf,backendName:"cpu",kernelFunc:q3e};function X3e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r;rt(s,"min");let i=E.parseAxisParam(o,s.shape),l=i,u=G.getAxesPermutation(l,s.shape.length),c=s;u!=null&&(c=ha({inputs:{x:s},backend:n,attrs:{perm:u}}),l=G.getInnerMostAxes(l.length,s.shape.length)),G.assertAxesAreInnerMostDims("min",l,c.shape.length);let[p,d]=G.computeOutAndReduceShapes(c.shape,l),f=E.sizeFromShape(d),h=E.makeZerosTypedArray(E.sizeFromShape(p),c.dtype),m=n.data.get(c.dataId).values;for(let x=0;xb[0]+s.shape[A]+b[1]),l=o.map(b=>b[0]),u=o.map((b,A)=>b[0]+s.shape[A]),c=a==="reflect"?0:1,p=n.data.get(s.dataId).values,d=s.shape.length,f=E.computeStrides(s.shape),h=E.sizeFromShape(i),m=i.length,g=E.computeStrides(i),x=E.getTypedArrayFromDType(s.dtype,h);for(let b=0;b=u[w]&&(A[w]=(u[w]-1)*2-A[w]+c);A=A.map((w,k)=>w-l[k]);let v=E.locToIndex(A,d,f);x[b]=p[v]}return{dataId:n.write(x,i,s.dtype),shape:i,dtype:s.dtype}}var J3e={kernelName:hf,backendName:"cpu",kernelFunc:Y3e},Q3e=Dr((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),eIe=ds(Lg,Q3e),tIe={kernelName:Lg,backendName:"cpu",kernelFunc:eIe},nIe=Pd(cP());function fV(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:o}=r,a=s.shape.length,i=o;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let l=E.parseAxisParam([i],s.shape),u=dV({inputs:{x:s},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),c=G.expandShapeToKeepDim(u.shape,l),p=Un({inputs:{x:u},backend:n,attrs:{shape:c}}),d=hR({inputs:{a:s,b:p},backend:n}),f=IB({inputs:{x:d},backend:n}),h=Xb({inputs:{x:f},backend:n,attrs:{axis:l,keepDims:!1}}),m=Un({inputs:{x:h},backend:n,attrs:{shape:c}}),g=xR({inputs:{a:f,b:m},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),g}var rIe={kernelName:Ef,backendName:"cpu",kernelFunc:fV};function sIe(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:o,seed:a,normalized:i}=r;rt(s,"multinomial");let l=i?s:fV({inputs:{logits:s},backend:n,attrs:{dim:-1}}),u=l.shape[0],c=l.shape[1],p=n.data.get(l.dataId).values,d=[u,o],f=E.makeZerosTypedArray(E.sizeFromShape(d),"int32");for(let h=0;h=0&&c[p]{E.assertShapesMatch(o,c.shape,"All tensors passed to stack must have matching shapes"),E.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=t.map(c=>{let p=w5({inputs:{input:c},backend:n,attrs:{dim:s}});return i.push(p),p}),u=G0({inputs:l,backend:n,attrs:{axis:s}});return i.forEach(c=>n.disposeIntermediateTensorInfo(c)),u}var bIe={kernelName:Hg,backendName:"cpu",kernelFunc:mV};function AIe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:o,constantValue:a}=r;rt(s,"pad");let i=o.map((y,b)=>y[0]+s.shape[b]+y[1]),l=o.map(y=>y[0]),u=n.data.get(s.dataId).values,c=E.sizeFromShape(s.shape),p=s.shape.length,d=E.computeStrides(s.shape),f=E.sizeFromShape(i),h=i.length,m=E.computeStrides(i),g=E.getTypedArrayFromDType(s.dtype,f);a!==0&&g.fill(a);for(let y=0;yw+l[k]),v=E.locToIndex(A,h,m);g[v]=u[y]}return{dataId:n.write(g,i,s.dtype),shape:i,dtype:s.dtype}}var gV={kernelName:xf,backendName:"cpu",kernelFunc:AIe},vIe=Dr((e,t)=>Math.pow(e,t)),wIe=ds(yf,vIe),kIe={kernelName:yf,backendName:"cpu",kernelFunc:wIe};function IIe(e){let{backend:t,attrs:n}=e,{start:r,stop:s,dtype:o,step:a}=n,i=dR(r,s,a,o);return t.makeTensorInfo([i.length],o,i)}var CIe={kernelName:H1,backendName:"cpu",kernelFunc:IIe},SIe=In(Kg,e=>1/e),NIe={kernelName:Kg,backendName:"cpu",kernelFunc:SIe};function TIe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:o,halfPixelCenters:a,size:i}=r;rt(s,"resizeBilinear");let l=E.computeStrides(s.shape),[u,c]=i,[p,d,f,h]=s.shape,m=n.data.get(s.dataId).values,g=new Float32Array(E.sizeFromShape([p,u,c,h])),x=[o&&u>1?d-1:d,o&&c>1?f-1:f],y=[o&&u>1?u-1:u,o&&c>1?c-1:c],b=0,A=x[0]/y[0],v=x[1]/y[1];for(let w=0;w1?u-1:u,a&&f>1?c-1:c],g=[a&&d>1?d-1:d,a&&f>1?f-1:f],x=m[0]/g[0],y=m[1]/g[1],b=n.data.get(o.dataId).values,A=0;for(let v=0;v1?d-1:d,o&&c>1?f-1:f],y=[o&&u>1?u-1:u,o&&c>1?c-1:c],b=x[0]/y[0],A=x[1]/y[1],v=0;for(let w=0;w1?c-1:c,a&&h>1?p-1:p],y=[a&&f>1?f-1:f,a&&h>1?h-1:h],b=x[0]/y[0],A=x[1]/y[1],v=1/b,w=1/A,k=Math.ceil(v)*2+2,I=Math.ceil(w)*2+2;for(let N=0;N=f)continue;let re=T+ue*l[1],de=ue*b,fe=Math.min(c-1,a?Math.round(de):Math.floor(de));if(_===fe)for(let me=0;me=h)continue;let Ne=re+xe*l[2],_e=xe*A,Oe=Math.min(p-1,a?Math.round(_e):Math.floor(_e));B===Oe&&(Q+=g[Ne+J])}}m[W+J]=Q}}}}return n.makeTensorInfo(s.shape,s.dtype,m)}var OIe={kernelName:Cw,backendName:"cpu",kernelFunc:FIe};function PIe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:o}=r;rt(s,"reverse");let a=s.shape.length,i=E.parseAxisParam(o,s.shape);if(a===0)return hl({inputs:{x:s},backend:n});let l=new Ur(s.shape,s.dtype),u=n.bufferSync(s);for(let c=0;cd[f]=s.shape[f]-1-d[f]),l.set(u.get(...d),...p)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var MIe={kernelName:kf,backendName:"cpu",kernelFunc:PIe},zIe={kernelName:c0,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:o,center:a}=t,i=n,l=E.getTypedArrayFromDType(r.dtype,E.sizeFromShape(r.shape)),[u,c,p,d]=r.shape,[f,h]=G.getImageCenter(a,c,p),m=255,g=Math.sin(s),x=Math.cos(s),y=i.data.get(r.dataId).values;for(let A=0;A=0&&F=0&&B{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1}),BIe={kernelName:If,backendName:"cpu",kernelFunc:LIe};function xV(e,t,n,r,s,o,a,i,l,u){let c=[r/s,s],p=e.values,d=t.values;if(r===0)return Wt(n,t.dtype);let f=Wt(c,t.dtype);f.values.fill(l);for(let h=0;h=r/s)throw new Error(`Invalid indices: ${m} does not index into ${n}`);for(let x=0;x1||s.shape.length===1?1:E.sizeFromShape(s.shape.slice(1));for(let h=0;he>=0?HIe*e:jIe*(Math.exp(e)-1)),KIe={kernelName:Jg,backendName:"cpu",kernelFunc:qIe},XIe=In(t0,e=>e<0?-1:e>0?1:0),ZIe={kernelName:t0,backendName:"cpu",kernelFunc:XIe},YIe=In(Sf,e=>Math.sin(e)),JIe={kernelName:Sf,backendName:"cpu",kernelFunc:YIe},QIe=In(e0,e=>Math.sinh(e)),eCe={kernelName:e0,backendName:"cpu",kernelFunc:QIe},tCe=11920928955078125e-23,yV=Math.log(tCe)+2,nCe=In(n0,e=>{let t=e>-yV,n=eNumber(g)))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}var iCe={kernelName:Nw,backendName:"cpu",kernelFunc:aCe};function lCe(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:s,newShape:o}=t;if(r.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${o.shape}`);let a=Array.from(n.data.get(s.dataId).values),i=n.data.get(r.dataId).values,l=Array.from(n.data.get(o.dataId).values),[u,c,p]=UB(i,r.shape,r.dtype,a,l);return[n.makeTensorInfo(c,r.dtype,u),n.makeTensorInfo([p.length],o.dtype,new Int32Array(p))]}var uCe={kernelName:Tw,backendName:"cpu",kernelFunc:lCe};function cCe(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,l=n.data.get(o.dataId).values,[u,c]=fR(a,r.shape,r.dtype,i,l,!0);return n.makeTensorInfo(c,r.dtype,u)}var pCe={kernelName:_w,backendName:"cpu",kernelFunc:cCe};function dCe(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,l=n.data.get(o.dataId).values,[u,c]=fR(a,r.shape,r.dtype,i,l);return n.makeTensorInfo(c,r.dtype,u)}var fCe={kernelName:Ew,backendName:"cpu",kernelFunc:dCe};function hCe(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:o,defaultValue:a}=t,{outputShape:i}=r,{sliceRank:l,numUpdates:u,sliceSize:c,strides:p,outputSize:d}=G.calculateShapes(o,s,i),f=!1,h=n.bufferSync(s),m=n.bufferSync(o),g=n.data.get(a.dataId).values[0],x=xV(h,m,i,d,c,u,l,p,g,f);return n.makeTensorInfo(i,x.dtype,x.values)}var mCe={kernelName:Rw,backendName:"cpu",kernelFunc:hCe};function gCe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:o,axis:a}=r,i=E.parseAxisParam(a,s.shape)[0],l=G.prepareSplitSize(s,o,i),u=new Array(s.shape.length).fill(0),c=s.shape.slice();return l.map(p=>{let d=[...c];d[i]=p;let f=ph({inputs:{x:s},backend:n,attrs:{begin:u,size:d}});return u[i]+=p,f})}var xCe={kernelName:s0,backendName:"cpu",kernelFunc:gCe},yCe={kernelName:K1,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;rt(n,"square");let s=r.data.get(n.dataId).values,o=new Float32Array(s.length);for(let i=0;i{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),ACe={kernelName:Pc,backendName:"cpu",kernelFunc:bCe};function vCe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,end:a,strides:i,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:d}=r;rt(s,"stridedSlice");let{nonStrided:f,$begin:h,$strides:m,size:g,newShape:x,outShape:y}=Bs.sliceInfo(s.shape,o,a,i,l,u,c,p,d),b=Un({inputs:{x:s},backend:n,attrs:{shape:x}}),A;if(f){let w=ph({inputs:{x:b},backend:n,attrs:{begin:h,size:g}});A=Un({inputs:{x:w},backend:n,attrs:{shape:y}}),n.disposeIntermediateTensorInfo(w)}else if(y.some(w=>w===0))A=n.makeTensorInfo(y,s.dtype,[]);else{let w=n.bufferSync(b),k=HB(y,w,m,h);A=n.makeTensorInfo(k.shape,k.dtype,k.values)}let v=Un({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(A),v}var wCe={kernelName:o0,backendName:"cpu",kernelFunc:vCe};function kCe(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:o,leftPad:a,rightPad:i,padWidth:l,preserveShortSequences:u}=r,{data:c,dataSplits:p}=t,d=n.data.get(c.dataId).values,f=n.data.get(p.dataId).values,[h,m]=qB(d,f,s,o,a,i,l,u);return[n.makeTensorInfo([h.length],"string",h),n.makeTensorInfo(p.shape,"int32",m)]}var ICe={kernelName:Dw,backendName:"cpu",kernelFunc:kCe};function CCe(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:s}=r,{input:o,delimiter:a}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(o.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${o.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=n.data.get(o.dataId).values,l=n.data.get(a.dataId).values[0],[u,c,p]=KB(i,l,s),d=c.length;return[n.makeTensorInfo([d,2],"int32",u),n.makeTensorInfo([d],"string",c),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var SCe={kernelName:$w,backendName:"cpu",kernelFunc:CCe};function NCe(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:s}=r,{input:o}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(s<=0)throw new Error("Number of buckets must be at least 1");let a=n.data.get(o.dataId).values,i=XB(a,s);return n.makeTensorInfo(o.shape,"int32",i)}var TCe={kernelName:Fw,backendName:"cpu",kernelFunc:NCe},_Ce=In($f,e=>Math.tan(e)),ECe={kernelName:$f,backendName:"cpu",kernelFunc:_Ce},RCe=In(Ff,e=>Math.tanh(e)),DCe={kernelName:Ff,backendName:"cpu",kernelFunc:RCe};function $Ce(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reps:o}=r;rt(s,"tile");let a=YB(n.bufferSync(s),o);return n.makeTensorInfo(a.shape,a.dtype,a.values)}var FCe={kernelName:Oc,backendName:"cpu",kernelFunc:$Ce};function OCe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{k:o,sorted:a}=r;rt(s,"topk");let i=n.data.get(s.dataId).values,[l,u]=QB(i,s.shape,s.dtype,o,a);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var PCe={kernelName:a0,backendName:"cpu",kernelFunc:OCe};function MCe(e){let{inputs:t,attrs:n,backend:r}=e,{image:s,transforms:o}=t,{interpolation:a,fillMode:i,fillValue:l,outputShape:u}=n,[c,p,d,f]=s.shape,[h,m]=u!=null?u:[p,d],g=[c,h,m,f],x=E.computeStrides(s.shape),y=x[0],b=x[1],A=x[2],v=E.getTypedArrayFromDType(s.dtype,E.sizeFromShape(g));v.fill(l);let w=r.data.get(s.dataId).values,k=r.data.get(o.dataId).values;for(let N=0;Nt-1)if(t<=1)n=0;else{let r=2*t;n-=r*Math.trunc(n/r),n>=t&&(n=r-n-1)}return E.clamp(0,n,t-1)}function BCe(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let r=t-1;n+=t*(Math.trunc(-n/r)+1)}else if(n>t-1)if(t<=1)n=0;else{let r=t-1;n-=t*Math.trunc(n/r)}return E.clamp(0,n,t-1)}function VCe(e,t){return e}function WCe(e,t){return E.clamp(0,e,t-1)}function Zb(e,t,n,r,s,o,a,i,l,u,c){let p=a*r+i*s+l*o+u;return 0<=i&&in.disposeIntermediateTensorInfo(h)),f}var ZCe={kernelName:X1,backendName:"cpu",kernelFunc:XCe},YCe=[ske,Yve,ake,lke,rwe,cke,dke,hke,gke,yke,Ake,wke,Ike,Nke,_ke,Dke,Fke,Pke,zke,nke,Bke,Wke,Uke,Hke,twe,owe,Kke,Jve,Zke,Jke,t5e,r5e,Qke,i5e,u5e,o5e,p5e,f5e,m5e,x5e,b5e,v5e,w5e,I5e,S5e,T5e,_5e,R5e,E5e,yR,F5e,Xwe,P5e,awe,U5e,iwe,j5e,uwe,Y5e,J5e,e3e,pwe,r3e,o3e,i3e,u3e,p3e,fwe,mwe,Qve,f3e,Yke,m3e,x3e,b3e,Zwe,xwe,bwe,v3e,vwe,k3e,S3e,T3e,R3e,$3e,O3e,kwe,z3e,B3e,W3e,U3e,H3e,P3e,K3e,Z3e,Cwe,J3e,tIe,oIe,Nwe,_we,lIe,pIe,hIe,Rwe,gIe,yIe,bIe,gV,kIe,Jwe,Fwe,CIe,ewe,NIe,Qwe,eke,tke,_Ie,RIe,$Ie,OIe,MIe,zIe,BIe,Pwe,WIe,UIe,KIe,zwe,ZIe,JIe,eCe,Lwe,rIe,rCe,oCe,iCe,uCe,pCe,fCe,mCe,xCe,Wwe,yCe,Uwe,ACe,wCe,ICe,SCe,TCe,Kwe,D5e,ECe,DCe,FCe,PCe,Dwe,zCe,HCe,KCe,ZCe,xIe];for(let e of YCe)Mc(e);var AV={};Rt(AV,{assertNotComplex:()=>j0,bindCanvasToFramebuffer:()=>uSe,bindColorTextureToFramebuffer:()=>N5,bindTextureToProgramUniformSampler:()=>OV,bindTextureUnit:()=>DV,bindVertexBufferToProgramAttribute:()=>kR,callAndCheck:()=>Qe,canBeRepresented:()=>vV,createFragmentShader:()=>IV,createFramebuffer:()=>RV,createProgram:()=>CV,createStaticIndexBuffer:()=>TV,createStaticVertexBuffer:()=>NV,createTexture:()=>_V,createVertexShader:()=>kV,getBatchDim:()=>fh,getExtensionOrThrow:()=>Qb,getFramebufferErrorMessage:()=>PV,getMaxTexturesInShader:()=>BV,getNumChannels:()=>iSe,getProgramUniformLocation:()=>FV,getProgramUniformLocationOrThrow:()=>$V,getRowsCols:()=>hh,getShapeAs3D:()=>T5,getTextureShapeFromLogicalShape:()=>zV,getWebGLDisjointQueryTimerVersion:()=>VV,getWebGLErrorMessage:()=>wV,getWebGLMaxTextureSize:()=>LV,hasExtension:()=>ga,isCapableOfRenderingToFloatTexture:()=>WV,isDownloadFloatTextureEnabled:()=>GV,isReshapeFree:()=>tA,isWebGLFenceEnabled:()=>UV,isWebGLVersionEnabled:()=>CR,linkProgram:()=>SV,resetMaxTextureSize:()=>cSe,resetMaxTexturesInShader:()=>pSe,unbindColorTextureFromFramebuffer:()=>IR,unbindTextureUnit:()=>lSe,validateFramebuffer:()=>eA,validateProgram:()=>S5,validateTextureSize:()=>EV});var dh={},vR={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function I5(e,t){dh[e]=t}function ml(e){if(!(e in dh)){let n=QCe(e);if(n!==null)dh[e]=n;else return console.log("Could not get context for WebGL version",e),null}let t=dh[e];return t.isContextLost()?(delete dh[e],ml(e)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),dh[e])}function JCe(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function QCe(e){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=JCe(e);return t.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete dh[e]},!1),e===1?t.getContext("webgl",vR)||t.getContext("experimental-webgl",vR):t.getContext("webgl2",vR)}var Yb;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Yb||(Yb={}));var ma;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(ma||(ma={}));var ws;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(ws||(ws={}));function Jb(e,t){return[t,e]}function eSe(e,t){return e*t}function C5(e){let t=E.sizeFromShape(e),n=Math.ceil(t/4);return E.sizeToSquarishShape(n)}function U0(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function tSe(e,t){let[n,r]=U0(e,t);return n*r*4}function wR(e,t){let n=e,r,s,o,a,i,l,u,c,p,d;return be().getNumber("WEBGL_VERSION")===2?(r=n.R32F,s=n.R16F,o=n.RGBA16F,a=n.RGBA32F,i=n.RED,u=4,c=1,p=n.HALF_FLOAT,d=n.FLOAT):(r=e.RGBA,s=e.RGBA,o=e.RGBA,a=n.RGBA,i=e.RGBA,u=4,c=4,p=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT),l=e.RGBA,{internalFormatFloat:r,internalFormatHalfFloat:s,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:p,textureTypeFloat:d}}function Qe(e,t){let n=t();return be().getBool("DEBUG")&&nSe(e),n}function nSe(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+wV(e,t))}var rSe=596e-10,sSe=65504;function vV(e){return!!(be().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||rSee.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function kV(e,t){let n=Zl(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(Qe(e,()=>e.shaderSource(n,t)),Qe(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function IV(e,t){let n=Zl(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(Qe(e,()=>e.shaderSource(n,t)),Qe(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw aSe(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var oSe=/ERROR: [0-9]+:([0-9]+):/g;function aSe(e,t){let n=oSe.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let r=+n[1],s=e.split(` `),o=s.length.toString().length+2,a=s.map((p,d)=>E.rightPad((d+1).toString(),o)+p),i=0;for(let p=0;pe.createProgram(),"Unable to create WebGLProgram.")}function SV(e,t){if(Qe(e,()=>e.linkProgram(t)),e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function S5(e,t){if(Qe(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function NV(e,t){let n=Zl(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return Qe(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),Qe(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function TV(e,t){let n=Zl(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return Qe(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),Qe(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function iSe(){return be().getNumber("WEBGL_VERSION")===2?1:4}function _V(e){return Zl(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function EV(e,t){let n=be().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let r=`[${e}x${t}]`;throw new Error("Requested texture size "+r+" is invalid.")}if(e>n||t>n){let r=`[${e}x${t}]`,s=`[${n}x${n}]`;throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+s+".")}}function RV(e){return Zl(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function kR(e,t,n,r,s,o,a){let i=e.getAttribLocation(t,n);return i===-1?!1:(Qe(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),Qe(e,()=>e.vertexAttribPointer(i,s,e.FLOAT,!1,o,a)),Qe(e,()=>e.enableVertexAttribArray(i)),!0)}function DV(e,t,n){MV(e,n),Qe(e,()=>e.activeTexture(e.TEXTURE0+n)),Qe(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function lSe(e,t){MV(e,t),Qe(e,()=>e.activeTexture(e.TEXTURE0+t)),Qe(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function $V(e,t,n){return Zl(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function FV(e,t,n){return e.getUniformLocation(t,n)}function OV(e,t,n,r){Qe(e,()=>DV(e,t,r)),Qe(e,()=>e.uniform1i(n,r))}function uSe(e){Qe(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),Qe(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),Qe(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function N5(e,t,n){Qe(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),Qe(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function IR(e,t){Qe(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),Qe(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function eA(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+PV(e,t))}function PV(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function Zl(e,t,n){let r=Qe(e,()=>t());if(r==null)throw new Error(n);return r}function MV(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(rn){let s=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${s}.`)}}function fh(e,t=2){return E.sizeFromShape(e.slice(0,e.length-t))}function hh(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function T5(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[fh(e),...hh(e)]),t}function zV(e,t=!1){let n=be().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((s,o)=>o>=e.length-2?E.nearestLargerEven(e[o]):e[o]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=E.squeezeShape(e).newShape);let r=E.sizeFromShape(e);if(e.length<=1&&r<=n)return[1,r];if(e.length===2&&e[0]<=n&&e[1]<=n)return e;if(e.length===3&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(e.length===3&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){let s=fh(e),o=2,a=2;return e.length&&([o,a]=hh(e)),r=s*(o/2)*(a/2),E.sizeToSquarishShape(r).map(i=>i*2)}return E.sizeToSquarishShape(r)}function _5(e){return e%2==0}function tA(e,t){if(e=e.slice(-2),t=t.slice(-2),E.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let n=e.slice(-1)[0],r=t.slice(-1)[0];if(n===r||_5(n)&&_5(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&_5(e[0])&&_5(t[0])}var E5,R5;function LV(e){if(E5==null){let t=ml(e);E5=t.getParameter(t.MAX_TEXTURE_SIZE)}return E5}function cSe(){E5=null}function pSe(){R5=null}function BV(e){if(R5==null){let t=ml(e);R5=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,R5)}function VV(e){if(e===0)return 0;let t,n=ml(e);return ga(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:ga(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function ga(e,t){return e.getExtension(t)!=null}function CR(e){try{if(ml(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function WV(e){if(e===0)return!1;let t=ml(e);if(e===1){if(!ga(t,"OES_texture_float"))return!1}else if(!ga(t,"EXT_color_buffer_float"))return!1;return SR(t)}function GV(e){if(e===0)return!1;let t=ml(e);if(e===1){if(!ga(t,"OES_texture_float")||!ga(t,"WEBGL_color_buffer_float"))return!1}else{if(ga(t,"EXT_color_buffer_float"))return SR(t);let r="EXT_color_buffer_half_float";if(ga(t,r)){let s=t.getExtension(r);return dSe(t,s)}return!1}return SR(t)}function SR(e){let t=wR(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,r,s,0,t.textureFormatFloat,t.textureTypeFloat,null);let o=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,o),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let a=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(o),a}function dSe(e,t){let n=wR(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);let s=1,o=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,s,o,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let a=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,a),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(a),i}function UV(e){return e!==2?!1:ml(e).fenceSync!=null}function j0(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&E.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var xt=be();xt.registerFlag("HAS_WEBGL",()=>xt.getNumber("WEBGL_VERSION")>0);xt.registerFlag("WEBGL_VERSION",()=>CR(2)?2:CR(1)?1:0);xt.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);xt.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>xt.get("WEBGL_VERSION")===2);xt.registerFlag("WEBGL_CPU_FORWARD",()=>!0);xt.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);xt.registerFlag("WEBGL_PACK",()=>xt.getBool("HAS_WEBGL"));xt.registerFlag("WEBGL_PACK_NORMALIZATION",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_CLIP",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_PACK_REDUCE",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_LAZILY_UNPACK",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_CONV_IM2COL",()=>xt.getBool("WEBGL_PACK"));xt.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>LV(xt.getNumber("WEBGL_VERSION")));xt.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>BV(xt.getNumber("WEBGL_VERSION")));xt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=xt.getNumber("WEBGL_VERSION");return e===0?0:VV(e)});xt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>xt.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!ob.isMobile());xt.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>WV(xt.getNumber("WEBGL_VERSION")));xt.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>xt.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:xt.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));xt.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>GV(xt.getNumber("WEBGL_VERSION")));xt.registerFlag("WEBGL_FENCE_API_ENABLED",()=>UV(xt.getNumber("WEBGL_VERSION")));xt.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>xt.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);xt.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});xt.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>ob.isMobile()&&xt.getBool("IS_CHROME")?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});xt.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);xt.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);xt.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);xt.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);function Us(){let e,t,n,r,s,o,a,i,l,u;return be().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",s="texture",o="outputColor",a="out vec4 outputColor;",i=` bool isnan_custom(float val) { return (val > 0.0 || val < 0.0) ? false : val != 0.0; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan_custom(val.x), isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); } #define isnan(value) isnan_custom(value) `,l="",u=` #define round(value) newRound(value) int newRound(float value) { return int(floor(value + 0.5)); } ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `):(e="",t="attribute",n="varying",r="varying",s="texture2D",o="gl_FragColor",a="",i=` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); } `,l=` uniform float INFINITY; bool isinf(float val) { return abs(val) == INFINITY; } bvec4 isinf(vec4 val) { return equal(abs(val), vec4(INFINITY)); } `,u=` int round(float value) { return int(floor(value + 0.5)); } ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:s,output:o,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:l,defineRound:u}}function mh(e,t,n="index"){let r=E.computeStrides(t);return r.map((s,o)=>{let a=`int ${e[o]} = ${n} / ${s}`,i=o===r.length-1?`int ${e[o+1]} = ${n} - ${e[o]} * ${s}`:`index -= ${e[o]} * ${s}`;return`${a}; ${i};`}).join("")}function D5(e,t,n="index"){let r=E.computeStrides(t);return r.map((s,o)=>{let a=`int ${e[o]} = ${n} / outShapeStrides[${o}]`,i=o===r.length-1?`int ${e[o+1]} = ${n} - ${e[o]} * outShapeStrides[${o}]`:`index -= ${e[o]} * outShapeStrides[${o}]`;return`${a}; ${i};`}).join("")}function fSe(e,t){let n=e.length,r=e.map(o=>`${t}[${o}]`),s=new Array(n-1);s[n-2]=r[n-1];for(let o=n-3;o>=0;--o)s[o]=`(${s[o+1]} * ${r[o+1]})`;return s}function hSe(e,t,n="index"){let r=e.map((o,a)=>a),s=fSe(r,t);return s.map((o,a)=>{let i=`int ${e[a]} = ${n} / ${s[a]}`,l=a===s.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * ${s[a]}`:`index -= ${e[a]} * ${s[a]}`;return`${i}; ${l};`}).join("")}function NR(e){let t=E.computeStrides(e).map(n=>n.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } `}function TR(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `}var jV=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; lowp vec4 encode_float(highp float v) { if (isnan(v)) { return vec4(255, 255, 255, 255); } highp float av = abs(v); if(av < FLOAT_MIN) { return vec4(0.0, 0.0, 0.0, 0.0); } else if(v > FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 127.0) / 255.0; } else if(v < -FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 255.0) / 255.0; } highp vec4 c = vec4(0,0,0,0); highp float e = floor(log2(av)); highp float m = exp2(fract(log2(av))) - 1.0; c[2] = floor(128.0 * m); m -= c[2] / 128.0; c[1] = floor(32768.0 * m); m -= c[1] / 32768.0; c[0] = floor(8388608.0 * m); highp float ebias = e + 127.0; c[3] = floor(ebias / 2.0); ebias -= c[3] * 2.0; c[2] += floor(ebias) * 128.0; c[3] += 128.0 * step(0.0, -v); return c / 255.0; } `,{getBroadcastDims:HV}=G;function mSe(e,t,n){let r=[];if(e.forEach(f=>{let h=E.sizeFromShape(f.shapeInfo.logicalShape);if(f.shapeInfo.isUniform?r.push(`uniform float ${f.name}${h>1?`[${h}]`:""};`):(r.push(`uniform sampler2D ${f.name};`),r.push(`uniform int offset${f.name};`)),n.enableShapeUniforms){let{uniformShape:m}=_R(n.packedInputs,f.shapeInfo.logicalShape,f.shapeInfo.texShape);switch(m.length){case 1:r.push(`uniform int ${f.name}Shape;`);break;case 2:r.push(`uniform ivec2 ${f.name}Shape;`);break;case 3:r.push(`uniform ivec3 ${f.name}Shape;`);break;case 4:r.push(`uniform ivec4 ${f.name}Shape;`);break;default:break}r.push(`uniform ivec2 ${f.name}TexShape;`)}}),n.enableShapeUniforms){switch(t.logicalShape.length){case 1:r.push("uniform int outShape;");break;case 2:r.push("uniform ivec2 outShape;"),r.push("uniform int outShapeStrides;");break;case 3:r.push("uniform ivec3 outShape;"),r.push("uniform ivec2 outShapeStrides;");break;case 4:r.push("uniform ivec4 outShape;"),r.push("uniform ivec3 outShapeStrides;");break;default:break}r.push("uniform ivec2 outTexShape;")}n.customUniforms&&n.customUniforms.forEach(f=>{r.push(`uniform ${f.type} ${f.name}${f.arrayIndex?`[${f.arrayIndex}]`:""};`)});let s=r.join(` `),o=e.map(f=>gSe(f,t,n.packedInputs,n.enableShapeUniforms)).join(` `),a=t.texShape,i=Us(),l=bSe(i),u,c,p=wSe(i);return t.isPacked?(u=xSe(t.logicalShape,a,n.enableShapeUniforms),c=vSe(i)):(u=ySe(t.logicalShape,a,n.enableShapeUniforms),c=ASe(i)),n.packedInputs&&(p+=SSe),[p,l,c,s,u,o,n.userCode].join(` `)}function H0(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return zSe(e,t);case 1:return BSe(e,t);case 2:return WSe(e,t);case 3:return USe(e,t);case 4:return HSe(e,t);case 5:return qSe(e);case 6:return KSe(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function qV(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return MSe(e);case 1:return LSe(e,t);case 2:return VSe(e,t);case 3:return GSe(e,t);default:return jSe(e,t)}}function gSe(e,t,n=!1,r){let s="";n?s+=qV(e,r):s+=H0(e,r);let o=e.shapeInfo.logicalShape,a=t.logicalShape;return o.length<=a.length&&(n?s+=XSe(e,t):s+=ZSe(e,t)),s}function xSe(e,t,n){switch(e.length){case 0:return KV();case 1:return NSe(e,t,n);case 2:return OSe(e,t,n);case 3:return _Se(e,t,n);default:return RSe(e,t,n)}}function ySe(e,t,n){switch(e.length){case 0:return KV();case 1:return TSe(e,t,n);case 2:return PSe(e,t,n);case 3:return ESe(e,t,n);case 4:return DSe(e,t,n);case 5:return $Se(e,t);case 6:return FSe(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function bSe(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } `}function ASe(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } `}function vSe(e){return` void setOutput(vec4 val) { ${e.output} = val; } `}function wSe(e){return`${e.version} precision highp float; precision highp int; precision highp sampler2D; ${e.varyingFs} vec2 resultUV; ${e.defineOutput} const vec2 halfCR = vec2(0.5, 0.5); struct ivec5 { int x; int y; int z; int w; int u; }; struct ivec6 { int x; int y; int z; int w; int u; int v; }; uniform float NAN; ${e.defineSpecialNaN} ${e.defineSpecialInf} ${e.defineRound} int imod(int x, int y) { return x - y * (x / y); } int idiv(int a, int b, float sign) { int res = a / b; int mod = imod(a, b); if (sign < 0. && mod != 0) { res -= 1; } return res; } //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW #define HASHSCALE1 443.8975 float random(float seed){ vec2 p = resultUV * seed; vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.x + p3.y) * p3.z); } ${kSe} ${ISe} ${CSe} `}var kSe=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texelIndex = index / 2; int texR = texelIndex / texNumC; int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,ISe=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); int texR = texelIndex / texNumC; int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,CSe=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2); int texR = index / texNumC; int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,SSe=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? (modCoord.y == 0. ? frag.r : frag.g) : (modCoord.y == 0. ? frag.b : frag.a); } float getChannel(vec4 frag, int dim) { float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } `;function KV(){return` int getOutputCoords() { return 0; } `}function NSe(e,t,n){let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return r[0]===1?n?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } `:` int getOutputCoords() { return 2 * int(resultUV.x * ${r[1]}.0); } `:r[1]===1?n?` int getOutputCoords() { return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0)); } `:` int getOutputCoords() { return 2 * int(resultUV.y * ${r[0]}.0); } `:n?` int getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]})); return 2 * (resTexRC.x * ${r[1]} + resTexRC.y); } `}function TSe(e,t,n){return t[0]===1?n?` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } `:` int getOutputCoords() { return int(resultUV.x * ${t[1]}.0); } `:t[1]===1?n?` int getOutputCoords() { return int(resultUV.y * float(outTexShape[0])); } `:` int getOutputCoords() { return int(resultUV.y * ${t[0]}.0); } `:n?` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); return resTexRC.x * outTexShape[1] + resTexRC.y; } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); return resTexRC.x * ${t[1]} + resTexRC.y; } `}function _Se(e,t,n){if(n)return` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); int index = resTexRC.x * packedTexShape[1] + resTexRC.y; int b = index / texelsInBatch; index -= b * texelsInBatch; int r = 2 * (index / texelsInLogicalRow); int c = imod(index, texelsInLogicalRow) * 2; return ivec3(b, r, c); } `;let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],s=Math.ceil(e[2]/2),o=s*Math.ceil(e[1]/2);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]})); int index = resTexRC.x * ${r[1]} + resTexRC.y; int b = index / ${o}; index -= b * ${o}; int r = 2 * (index / ${s}); int c = imod(index, ${s}) * 2; return ivec3(b, r, c); } `}function ESe(e,t,n){if(n)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; ${D5(["r","c","d"],e)} return ivec3(r, c, d); } `;let r=mh(["r","c","d"],e);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); int index = resTexRC.x * ${t[1]} + resTexRC.y; ${r} return ivec3(r, c, d); } `}function RSe(e,t,n){if(n)return` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); int index = resTexRC.x * packedTexShape[1] + resTexRC.y; int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0)); int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0)); int texelsInBatchN = texelsInBatch * outShape[1]; int b2 = index / texelsInBatchN; index -= b2 * texelsInBatchN; int b = index / texelsInBatch; index -= b * texelsInBatch; int r = 2 * (index / texelsInLogicalRow); int c = imod(index, texelsInLogicalRow) * 2; return ivec4(b2, b, r, c); } `;let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],s=Math.ceil(e[e.length-1]/2),o=s*Math.ceil(e[e.length-2]/2),a=o,i="",l="b, r, c";for(let u=2;u=1?c="coords = 0;":c=i.map(y=>`coords.${p[y+u]} = 0;`).join(` `);let d="";a<2&&o>0?d="coords":d=e.shapeInfo.logicalShape.map((y,b)=>`coords.${p[b+u]}`).join(", ");let f="return outputValue;",m=E.sizeFromShape(e.shapeInfo.logicalShape)===1,x=E.sizeFromShape(t.logicalShape)===1;if(o===1&&!m&&!x)f=` return vec4(outputValue.xy, outputValue.xy); `;else if(m&&!x)a===1?f=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:f=` return vec4(outputValue.x); `;else if(i.length){let y=o-2,b=o-1;i.indexOf(y)>-1&&i.indexOf(b)>-1?f="return vec4(outputValue.x);":i.indexOf(y)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(b)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${s}() { ${l} coords = getOutputCoords(); ${c} vec4 outputValue = get${r}(${d}); ${f} } `}function ZSe(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),s="get"+r+"AtOutCoords",o=t.texShape,a=e.shapeInfo.texShape,i=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&i===l&&e.shapeInfo.flatOffset==null&&E.arraysEqual(a,o))return` float ${s}() { return sampleTexture(${n}, resultUV); } `;let u=Dn(l),c=HV(e.shapeInfo.logicalShape,t.logicalShape),p=l-i,d,f=["x","y","z","w","u","v"];i===0?d="":l<2&&c.length>=1?d="coords = 0;":d=c.map(m=>`coords.${f[m+p]} = 0;`).join(` `);let h="";return l<2&&i>0?h="coords":h=e.shapeInfo.logicalShape.map((m,g)=>`coords.${f[g+p]}`).join(", "),` float ${s}() { ${u} coords = getOutputCoords(); ${d} return get${r}(${h}); } `}function Dn(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function _R(e,t,n){let{newShape:r,keptDims:s}=E.squeezeShape(t),o=t.length,a=e&&o===3&&t[0]===1,i=a?t.slice(1):r,l=!e&&o>1&&!E.arraysEqual(t,n)&&r.lengthe[n]).join(", ")}function YSe(e,t,n,r){let s=n.map((b,A)=>{let v={logicalShape:b.shape,texShape:b.isUniform?null:b.texData.texShape,isUniform:b.isUniform,isPacked:b.isUniform?!1:b.texData.isPacked,flatOffset:null};return b.texData!=null&&b.texData.slice!=null&&b.texData.slice.flatOffset>0&&(v.flatOffset=b.texData.slice.flatOffset),{name:t.variableNames[A],shapeInfo:v}}),o=s.map(b=>b.shapeInfo),a={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},i=mSe(s,a,t),l=e.createProgram(i),u=null,c=e.getUniformLocation(l,"NAN",!1);be().getNumber("WEBGL_VERSION")===1&&(u=e.getUniformLocation(l,"INFINITY",!1));let p=!1,d={},f={},h={};for(let b=0;b{y[A]=e.getUniformLocation(l,b.name,p)}),{program:t,source:i,webGLProgram:l,uniformLocations:d,customUniformLocations:y,inShapeInfos:o,outShapeInfo:a,infLoc:u,nanLoc:c,inShapesLocations:f,inTexShapesLocations:h,outShapeLocation:m,outShapeStridesLocation:x,outTexShapeLocation:g}}function XV(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((n,r)=>{let s=n.logicalShape,o=t[r],a=o.shape;if(!E.arraysEqual(s,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${s} and ${a} must match`);if(n.isUniform&&o.isUniform)return;let i=n.texShape,l=o.isUniform?null:o.texData.texShape;if(!E.arraysEqual(i,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${l} must match`)})}function JSe(e,t,n,r,s){t.program.enableShapeUniforms||(XV(t.inShapeInfos,n),XV([t.outShapeInfo],[r]));let o=r.texData.texture,a=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(o,a[0],a[1]):e.setOutputMatrixTexture(o,a[0],a[1]),e.setProgram(t.webGLProgram),be().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((l,u)=>{let c=t.program.variableNames[u],p=t.uniformLocations[c],d=t.uniformLocations[`offset${c}`],f=t.inShapesLocations[`${c}Shape`],h=t.inTexShapesLocations[`${c}TexShape`];if(f){let{uniformShape:m}=_R(t.program.packedInputs,l.shape,l.texData.texShape);switch(m.length){case 1:e.gl.uniform1iv(f,new Int32Array(m));break;case 2:e.gl.uniform2iv(f,new Int32Array(m));break;case 3:e.gl.uniform3iv(f,new Int32Array(m));break;case 4:e.gl.uniform4iv(f,new Int32Array(m));break;default:break}}if(h&&e.gl.uniform2i(h,l.texData.texShape[0],l.texData.texShape[1]),p!=null){if(l.isUniform){if(E.sizeFromShape(l.shape)<2)e.gl.uniform1f(p,l.uniformValues[0]);else{let m=l.uniformValues;m instanceof Float32Array||(m=new Float32Array(m)),e.gl.uniform1fv(p,m)}return}l.texData.slice!=null&&d!=null&&e.gl.uniform1i(d,l.texData.slice.flatOffset),e.setInputMatrixTexture(l.texData.texture,p,u)}});let i=t.outShapeLocation;if(i)switch(r.shape.length){case 1:e.gl.uniform1iv(i,new Int32Array(r.shape));break;case 2:e.gl.uniform2iv(i,new Int32Array(r.shape));break;case 3:e.gl.uniform3iv(i,new Int32Array(r.shape));break;case 4:e.gl.uniform4iv(i,new Int32Array(r.shape));break;default:break}if(t.outShapeStridesLocation){let l=E.computeStrides(r.shape);switch(r.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(l));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(l));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(l));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,r.texData.texShape[0],r.texData.texShape[1]),t.program.customUniforms&&s&&t.program.customUniforms.forEach((l,u)=>{let c=t.customUniformLocations[u],p=s[u];if(l.type==="float")e.gl.uniform1fv(c,p);else if(l.type==="vec2")e.gl.uniform2fv(c,p);else if(l.type==="vec3")e.gl.uniform3fv(c,p);else if(l.type==="vec4")e.gl.uniform4fv(c,p);else if(l.type==="int")e.gl.uniform1iv(c,p);else if(l.type==="ivec2")e.gl.uniform2iv(c,p);else if(l.type==="ivec3")e.gl.uniform3iv(c,p);else if(l.type==="ivec4")e.gl.uniform4iv(c,p);else throw Error(`uniform type ${l.type} is not supported yet.`)}),e.executeProgram()}function QSe(e,t,n){let r="";t.concat(n).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!a.isUniform){let l=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:p}=_R(e.packedInputs,a.shape,l),d="",f="",h="";if(c.length===1&&e.packedInputs){let v=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];d=`${v[0]>1}_${v[1]>1}`}else if(c.length===2&&!e.packedInputs)f=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!e.packedInputs){let v=E.computeStrides(c);h=`${v[0]===l[1]}_${v[v.length-1]===l[1]}`}let m=a.shape.length,g=c.length===2&&E.arraysEqual(a.shape,l),x=E.sizeFromShape(a.shape)===1,y=G.getBroadcastDims(a.shape,n.shape),b=!e.packedInputs&&m===n.shape.length&&E.arraysEqual(l,n.texData.texShape),A=e.packedInputs||c.length>2?"":`${l[0]>1}_${l[1]>1}`;r+=`${m}_${b}_${u?p:""}_${c.length}_${x}_${y}_${g}_${d}_${f}_${h}_${A}_${i}`}else{let l=a.isUniform?"uniform":a.texData.texShape;r+=`${a.shape}_${l}_${i}`}});let s=e.userCode,o=e.constructor.name;return o+="_"+r+"_"+s+`${be().getNumber("WEBGL_VERSION")}`,o}function xa(e){return be().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var eNe=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Yb.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Us();this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?D5(["r","c","d"],e):mh(["r","c","d"],e)} return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getA(rc.x, rc.y, rc.z); } ${t.output} = result; } `}},tNe=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Yb.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Us();this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?D5(["r","c","d"],e):mh(["r","c","d"],e)} return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); } ${t.output} = result; } `}},nNe=class{constructor(e){this.variableNames=["A"],this.outTexUsage=ma.DOWNLOAD;let t=Us();this.outputShape=e,this.userCode=` ${jV} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } `}},rNe=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ma.DOWNLOAD;let t=Us();this.outputShape=e,this.userCode=` ${jV} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } `}},sNe=class{constructor(e,t=!1){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Us();this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length);let r="result";t&&(r="floor(result * 255. + 0.5)"),this.userCode=` ${this.enableShapeUniforms?TR():NR(e)} void main() { ivec3 coords = getOutputCoords(); int flatIndex = getFlatIndex(coords); int offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / texShape[1]; int c = imod(flatIndex, texShape[1]); vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); vec4 values = ${n.texture2D}(A, uv); float result; if(offset == 0) { result = values[0]; } else if(offset == 1) { result = values[1]; } else if(offset == 2) { result = values[2]; } else { result = values[3]; } ${n.output} = vec4(${r}, 0., 0., 0.); } `}},oNe=class{constructor(e,t=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Us();this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length);let r="",s="result";t&&(s="floor(result * 255. + 0.5)");for(let o=0;o<=1;o++)for(let a=0;a<=1;a++){let i=o*2+a;r+=` localCoords = coords; if(localCoords[2] + ${a} < ${this.enableShapeUniforms?"outShape[2]":`${e[2]}`}) { localCoords[2] += ${a}; if (localCoords[1] + ${o} < ${this.enableShapeUniforms?"outShape[1]":`${e[1]}`}) { localCoords[1] += ${o}; flatIndex = getFlatIndex(localCoords); offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / texShape[1]; int c = imod(flatIndex, texShape[1]); vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); values = ${n.texture2D}(A, uv); if (offset == 0) { result[${i}] = values[0]; } else if (offset == 1) { result[${i}] = values[1]; } else if (offset == 2) { result[${i}] = values[2]; } else { result[${i}] = values[3]; } } } `}this.userCode=` ${this.enableShapeUniforms?TR():NR(e)} void main() { ivec3 coords = getOutputCoords(); vec4 result = vec4(0.); int flatIndex, r, c, offset; ivec3 localCoords; vec2 uv; vec4 values; ${r} ${n.output} = ${s}; } `}},ZV={};Rt(ZV,{bindVertexProgramAttributeStreams:()=>oW,createBufferFromOutputTexture:()=>lW,createFloat16MatrixTexture:()=>tW,createFloat16PackedMatrixTexture:()=>sW,createFloat32MatrixTexture:()=>eW,createIndexBuffer:()=>QV,createPackedMatrixTexture:()=>rW,createUnsignedBytesMatrixTexture:()=>nW,createVertexBuffer:()=>JV,createVertexShader:()=>YV,downloadByteEncodedFloatMatrixFromOutputTexture:()=>cW,downloadFloat32MatrixFromBuffer:()=>uW,downloadMatrixFromPackedOutputTexture:()=>dW,downloadPackedMatrixFromBuffer:()=>pW,getInternalFormatForFloat16MatrixTexture:()=>RR,getInternalFormatForFloat16PackedMatrixTexture:()=>FR,getInternalFormatForFloat32MatrixTexture:()=>ER,getInternalFormatForPackedMatrixTexture:()=>$R,getInternalFormatForUnsignedBytesMatrixTexture:()=>DR,uploadDenseMatrixToTexture:()=>aW,uploadPixelDataToTexture:()=>iW});function YV(e){let t=Us(),n=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; ${t.varyingVs} vec2 resultUV; void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`;return kV(e,n)}function JV(e){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return NV(e,t)}function QV(e){let t=new Uint16Array([0,1,2,2,1,3]);return TV(e,t)}function nA(e,t,n,r,s,o){EV(t,n);let a=_V(e),i=e.TEXTURE_2D;return Qe(e,()=>e.bindTexture(i,a)),Qe(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),Qe(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),Qe(e,()=>e.texParameteri(i,e.TEXTURE_MIN_FILTER,e.NEAREST)),Qe(e,()=>e.texParameteri(i,e.TEXTURE_MAG_FILTER,e.NEAREST)),Qe(e,()=>e.texImage2D(i,0,r,t,n,0,s,o,null)),Qe(e,()=>e.bindTexture(e.TEXTURE_2D,null)),a}function ER(e){return e.internalFormatFloat}function eW(e,t,n,r){let[s,o]=Jb(t,n);return nA(e,s,o,ER(r),r.textureFormatFloat,e.FLOAT)}function RR(e){return e.internalFormatHalfFloat}function tW(e,t,n,r){let[s,o]=Jb(t,n);return nA(e,s,o,RR(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function DR(e){return e.downloadTextureFormat}function nW(e,t,n,r){let[s,o]=Jb(t,n);return nA(e,s,o,DR(r),e.RGBA,e.UNSIGNED_BYTE)}function $R(e){return e.internalFormatPackedFloat}function rW(e,t,n,r){let[s,o]=U0(t,n);return nA(e,s,o,$R(r),e.RGBA,e.FLOAT)}function FR(e){return e.internalFormatPackedHalfFloat}function sW(e,t,n,r){let[s,o]=U0(t,n);return nA(e,s,o,FR(r),e.RGBA,r.textureTypeHalfFloat)}function oW(e,t,n){let r=0,s=3*4,o=3*4+2*4;return Qe(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),kR(e,t,"clipSpacePos",n,3,o,r)&&kR(e,t,"uv",n,2,o,s)}function aW(e,t,n,r,s,o){Qe(e,()=>e.bindTexture(e.TEXTURE_2D,t));let a,i,l;s instanceof Uint8Array?(a=new Uint8Array(n*r*4),i=e.UNSIGNED_BYTE,l=e.RGBA):(a=new Float32Array(n*r*4),i=e.FLOAT,l=o.internalFormatPackedFloat),a.set(s),Qe(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,i,a)),Qe(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function iW(e,t,n){Qe(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?Qe(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):Qe(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),Qe(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function lW(e,t,n,r){let s=e.createBuffer();Qe(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,s));let i=4*4*t*n;return Qe(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,i,e.STREAM_READ)),Qe(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),Qe(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),s}function uW(e,t,n){let r=e,s=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,s),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),s}function cW(e,t,n,r){let[s,o]=Jb(t,n),a=4,i=new Uint8Array(eSe(t*n,a));return Qe(e,()=>e.readPixels(0,0,s,o,r.downloadTextureFormat,e.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function pW(e,t,n,r,s,o,a,i){let l=e,u=new Float32Array(tSe(o,a));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function dW(e,t,n){let r=new Float32Array(t*n*4);return Qe(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var $5=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=be().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,I5(t,e)):this.gl=ml(t);let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(be().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",o="OES_texture_half_float";if(this.textureFloatExtension=Qb(this.gl,s),ga(this.gl,o))this.textureHalfFloatExtension=Qb(this.gl,o);else if(be().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),ga(this.gl,r))this.colorBufferHalfFloatExtension=Qb(this.gl,r);else if(be().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",ga(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(ga(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=JV(this.gl),this.indexBuffer=QV(this.gl),this.framebuffer=RV(this.gl),this.textureConfig=wR(this.gl,this.textureHalfFloatExtension)}get debug(){return be().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;Qe(e,()=>e.finish()),Qe(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),Qe(e,()=>e.deleteFramebuffer(this.framebuffer)),Qe(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),Qe(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),Qe(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),eW(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),tW(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),nW(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),iW(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),aW(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),sW(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),rW(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(IR(this.gl,this.framebuffer),this.outputTexture=null),Qe(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>cW(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,r,s,o){return pW(this.gl,e,t,n,r,s,o,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return uW(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=lW(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(be().getBool("WEBGL_FENCE_API_ENABLED")){let r=e,s=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let o=r.clientWaitSync(s,0,0);return o===r.ALREADY_SIGNALED||o===r.CONDITION_SATISFIED},t=s}else be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>dW(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl,n=IV(t,e);this.vertexShader==null&&(this.vertexShader=YV(t));let r=CV(t);return Qe(t,()=>t.attachShader(r,this.vertexShader)),Qe(t,()=>t.attachShader(r,n)),SV(t,r),this.debug&&S5(t,r),this.vertexAttrsAreBound||(this.setProgram(r),this.vertexAttrsAreBound=oW(t,this.program,this.vertexBuffer)),r}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&Qe(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&S5(this.gl,this.program),Qe(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?$V(this.gl,e,t):FV(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),Qe(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),OV(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,s]=U0(t,n);this.setOutputMatrixTextureDriver(e,r,s)}setOutputMatrixWriteRegion(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t)}setOutputPackedMatrixWriteRegion(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&S5(this.gl,this.program),eA(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),Qe(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),Qe(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Qb(this.gl,be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),s=n.createQuery();return n.beginQuery(r.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await E.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(e,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),s=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),r=n.getQueryObjectEXT(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=aNe(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),!(this.itemsToPoll.length>1)&&E.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),N5(this.gl,e,this.framebuffer),this.debug&&eA(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(N5(this.gl,this.outputTexture,this.framebuffer),this.debug&&eA(this.gl)):IR(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let r=this.gl;N5(r,e,this.framebuffer),this.debug&&eA(r),this.outputTexture=e,Qe(r,()=>r.viewport(0,0,t,n)),Qe(r,()=>r.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),Qe(this.gl,()=>this.gl.scissor(e,t,n,r))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function aNe(e){let t=0;for(;t`${e}.${n}`)}function js(e,t){return t===1?[e]:gW(e,t)}function jNe(e,t){if(e===1)return"rc";let n="";for(let r=0;r ${t[0]}`;let r="";for(let s=e-2;s= ${t[s]}`,s= ${t}; bool rEdge = rp1 >= ${n}; `}function ZNe(e,t){let n=e.length,r=qNe(n,t);return n===1?`getA(rc), rc + 1 >= ${e[0]} ? 0. : getA(rc + 1), 0, 0`:`getA(${r[0]}), cEdge ? 0. : getA(${r[1]}), rEdge ? 0. : getA(${r[2]}), rEdge || cEdge ? 0. : getA(${r[3]})`}var xW=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length);let n="";for(let r=0;r<4;r++){let s="thisRC = rc;";r%2==1&&(s+="thisRC.z += 1;"),r>1&&(s+="thisRC.y += 1;"),n+=` ${s} ${r>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); result[${r}] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${r>0?"}":""} `}this.userCode=` ${YNe(t,this.enableShapeUniforms)} ${this.enableShapeUniforms?TR():NR(e)} void main() { ivec3 rc = getOutputCoords(); vec4 result = vec4(0.); ivec3 thisRC; int rows = ${this.enableShapeUniforms?"outShape[1]":e[1]}; int cols = ${this.enableShapeUniforms?"outShape[2]":e[2]}; ${n} setOutput(result); } `}};function YNe(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { ${t?hSe(["r","c","d"],"inputShape"):mh(["r","c","d"],e)} return ivec3(r, c, d); } `}var JNe=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let r=bW(t,n),s=AW(e,r,n);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let o=yW(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=o,this.log();let i=this.freeTextures[s].shift();return this.usedTextures[s].push(i),i}let a;return r===ws.PACKED_2X2_FLOAT32?a=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===ws.PACKED_2X2_FLOAT16?a=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===ws.UNPACKED_FLOAT32?a=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===ws.UNPACKED_FLOAT16?a=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===ws.PACKED_4X1_UNSIGNED_BYTE&&(a=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(a),this.numUsedTextures++,this._numBytesAllocated+=o,this.log(),a}releaseTexture(e,t,n,r){if(this.freeTextures==null)return;let s=bW(n,r),o=AW(t,s,r);o in this.freeTextures||(this.freeTextures[o]=[]);let a=yW(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,r),i=be().get("WEBGL_DELETE_TEXTURE_THRESHOLD");i!==-1&&this._numBytesAllocated>i?(this.gpgpu.deleteMatrixTexture(e),this._numBytesAllocated-=a):(this.freeTextures[o].push(e),this.numFreeTextures++,this._numBytesFree+=a),this.numUsedTextures--;let l=this.usedTextures[o],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function QNe(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F)return 16;if(t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;throw new Error(`Unknown internal format ${t}`)}function yW(e,t,n,r,s){let o=eTe(t,r),a;if(s){let[l,u]=U0(e[0],e[1]);a=l*u}else{let[l,u]=Jb(e[0],e[1]);a=l*u}let i=QNe(n,o);return a*i}function eTe(e,t){switch(e){case ws.PACKED_2X2_FLOAT32:return $R(t);case ws.PACKED_2X2_FLOAT16:return FR(t);case ws.UNPACKED_FLOAT32:return ER(t);case ws.UNPACKED_FLOAT16:return RR(t);case ws.PACKED_4X1_UNSIGNED_BYTE:return DR(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function tTe(e){return be().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?ws.PACKED_2X2_FLOAT32:ws.UNPACKED_FLOAT32:e?ws.PACKED_2X2_FLOAT16:ws.UNPACKED_FLOAT16}function bW(e,t){if(e===ma.UPLOAD)return ws.PACKED_2X2_FLOAT32;if(e===ma.RENDER||e==null)return tTe(t);if(e===ma.DOWNLOAD||e===ma.PIXELS)return ws.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function AW(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var rp=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } void main() { float x = getAAtOutCoords(); float y = unaryOperation(x); setOutput(y); } `}},Ti="if (isnan(x)) return x;",nTe="return x;",vW="return abs(x);",rTe="return (x >= 0.0) ? x : (exp(x) - 1.0);",sTe=Ti+` return (x < 0.0) ? 0.0 : x; `,oTe=Ti+` return (x < 0.0) ? 0.0 : min(6.0, x); `,F5="return x;",aTe="return 1.0 / (1.0 + exp(-1.0 * x));",iTe="return x;",lTe=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; `,uTe=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,cTe=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,pTe="return 1.0 / (1.0 + exp(-1.0 * x));",Z0=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `}},dTe=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e;let t=e.length,n=js("rc",t),r=Dn(t),s=jNe(t,n),o=n.slice(-2),a=t<=1?"rc":`vec2(${o.join(",")})`;this.userCode=` void main() { ${r} rc = getOutputCoords(); vec4 packedInput = getA(${s}); setOutput(getChannel(packedInput, ${a})); } `}},fTe=ll.whereImpl,hTe=1e-7,mTe=1e-4,O5={};function gTe(e){return e in O5||(O5[e]={}),O5[e]}var xTe=be().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),yTe=600;function bTe(){return be().global.screen==null?1024:be().global.screen.height*be().global.screen.width*window.devicePixelRatio*yTe/1024/1024}var Y0=class extends $1{constructor(e){super();if(this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!be().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){let t=ml(be().getNumber("WEBGL_VERSION"));this.binaryCache=gTe(be().getNumber("WEBGL_VERSION")),this.gpgpu=new $5(t),this.canvas=t.canvas,this.gpgpuCreatedLocally=!0}else this.gpgpu=e,this.binaryCache={},this.gpgpuCreatedLocally=!1,this.canvas=e.gl.canvas;this.textureManager=new JNe(this.gpgpu),this.numMBBeforeWarning=bTe(),this.texData=new Xv(this,zo())}nextDataId(){return Y0.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}write(e,t,n){if((be().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||be().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:t,dtype:n,values:e,usage:ma.UPLOAD,refCount:1}),r}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,r,s){if(be().getBool("DEBUG")&&this.checkNumericalProblems(t),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:r,values:t,usage:ma.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:r,complexTensorInfos:s,slice:o,shape:a,isPacked:i}=t;if(o!=null){let p;i?p=new Z0(a,F5):p=new rp(a,F5);let d=this.runWebGLProgram(p,[{dataId:e,shape:a,dtype:r}],r),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(n!=null)return this.convertAndCacheOnCPU(e);if(r==="string")return n;let l=this.activeTimers!=null,u;l&&(u=E.now());let c;if(r==="complex64"){let p=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);c=G.mergeRealAndImagArrays(p,d)}else c=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=E.now()-u),this.convertAndCacheOnCPU(e,c)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:n,shape:r,slice:s,dtype:o,complexTensorInfos:a,isPacked:i}=t;if(s!=null){let f;i?f=new Z0(r,F5):f=new rp(r,F5);let h=this.runWebGLProgram(f,[{dataId:e,shape:r,dtype:o}],o),m=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),m}if(n!=null)return this.convertAndCacheOnCPU(e);if(!be().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&be().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(o!=="complex64"&&be().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let f=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(f.texture,...C5(r))}this.pendingRead.set(e,[]),o!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(o==="complex64"){let f=await Promise.all([this.read(a.real.dataId),this.read(a.imag.dataId)]),h=f[0],m=f[1];c=G.mergeRealAndImagArrays(h,m)}else if(l==null)c=this.getValuesFromTexture(e);else{let f=E.sizeFromShape(r);c=this.gpgpu.downloadFloat32MatrixFromBuffer(l,f)}if(u!=null&&this.disposeIntermediateTensorInfo(u),l!=null){let f=this.gpgpu.gl;Qe(f,()=>f.deleteBuffer(l))}let p=this.convertAndCacheOnCPU(e,c),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(p)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&zo().removeDataId(e,this),this.pendingDeletes--),p}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>E.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return Wt(e.shape,e.dtype,n)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}async time(e){let t=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,e();let s=E.flatten(this.activeTimers.map(i=>i.query)).filter(i=>i!=null),o=E.flatten(this.activeTimers.map(i=>i.name)).filter(i=>i!=null);this.activeTimers=t,r&&(this.programTimersStack=null);let a={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let i=await Promise.all(s);a.kernelMs=E.sum(i),a.getExtraProfileInfo=()=>i.map((l,u)=>({name:o[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else a.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,a}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:E.now(),endMs:null}}endTimer(e){return be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=E.now(),e)}async getQueryTime(e){if(be().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:r,usage:s,isPacked:o,slice:a}=this.texData.get(e),i=a&&a.origDataId||e,l=this.dataRefCount.get(i);l>1?this.dataRefCount.set(i,l-1):(this.dataRefCount.delete(i),t!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,s,o)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=xTe){return be().getBool("WEBGL_CPU_FORWARD")&&e.every(n=>this.texData.get(n.dataId).texture==null&&E.sizeFromShape(n.shape)0&&E.isString(n[0])){let s=n.map(o=>E.encodeString(o));r=this.write(s,e,t)}else r=this.write(n,e,t);return this.texData.get(r).usage=null,{dataId:r,shape:e,dtype:t}}makeOutput(e,t,n){let{dataId:r}=this.makeTensorInfo(e,t,n);return zo().makeTensorFromDataId(r,e,t,this)}unpackTensor(e){let t=new dTe(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new HNe(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[fh(e.shape),...hh(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[fh(t),...hh(t)],o=new xW(s,n),a=!0,i=[n],l=this.runWebGLProgram(o,[r],e.dtype,i,a);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e){let t=this.texData.get(e),{isPacked:n,shape:r,dtype:s}=t,o=T5(r),a,i=C5(o);n?a=new tNe(o):a=new eNe(o);let l=!0,u=[i],c=this.runWebGLProgram(a,[{shape:o,dtype:s,dataId:e}],s,u,l);return{dtype:s,shape:r,dataId:c.dataId}}runWebGLProgram(e,t,n,r,s=!1){let o=this.makeTensorInfo(e.outputShape,n),a=this.texData.get(o.dataId);if(e.packedOutput&&(a.isPacked=!0),e.outPackingScheme===Yb.DENSE){let m=C5(e.outputShape);a.texShape=m.map(g=>g*2)}if(e.outTexUsage!=null&&(a.usage=e.outTexUsage),E.sizeFromShape(o.shape)===0)return a.values=E.getTypedArrayFromDType(o.dtype,0),o;let i=[],l=t.map(m=>{if(m.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let g=this.texData.get(m.dataId);if(g.texture==null){if(!e.packedInputs&&E.sizeFromShape(m.shape)<=be().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:m.shape,texData:null,isUniform:!0,uniformValues:g.values};e.packedInputs&&(g.isPacked=!0,g.shape=m.shape)}else if(!!g.isPacked!=!!e.packedInputs)m=g.isPacked?this.unpackTensor(m):this.packTensor(m),i.push(m),g=this.texData.get(m.dataId);else if(g.isPacked&&!tA(g.shape,m.shape)){let x=m,y=m.shape;m.shape=g.shape,m=this.packedReshape(m,y),i.push(m),g=this.texData.get(m.dataId),x.shape=y}return this.uploadToGPU(m.dataId),{shape:m.shape,texData:g,isUniform:!1}});this.uploadToGPU(o.dataId);let u={shape:o.shape,texData:a,isUniform:!1},c=QSe(e,l,u),p=this.getAndSaveBinary(c,()=>YSe(this.gpgpu,e,l,u)),d=this.activeTimers!=null,f;d&&(f=this.startTimer()),JSe(this.gpgpu,p,l,u,r),i.forEach(m=>this.disposeIntermediateTensorInfo(m)),d&&(f=this.endTimer(f),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(f)}));let h=be().get("WEBGL_FLUSH_THRESHOLD");if(h>0){let m=E.now();m-this.lastGlFlushTime>h&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=m)}if(!be().getBool("WEBGL_LAZILY_UNPACK")&&a.isPacked&&s===!1){let m=this.unpackTensor(o);return this.disposeIntermediateTensorInfo(o),m}return o}compileAndRun(e,t,n,r,s=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,r,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(be().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=ce(()=>{if(!be().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=be().getBool("DEBUG");be().set("DEBUG",!1);let t=this.abs(at(1e-8)).dataSync()[0];if(be().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?hTe:mTe}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:r,values:s,texture:o,usage:a,isPacked:i}=t;if(o!=null)return;let l=this.activeTimers!=null,u;l&&(u=E.now());let c=t.texShape;if(c==null&&(c=zV(n,i),t.texShape=c),s!=null){let p=T5(n),d,f=c[1],h=c[0],m=s instanceof Uint8Array;i?([f,h]=U0(c[0],c[1]),d=new oNe(p,m)):d=new sNe(p,m);let g=this.makeTensorInfo([h,f],r);m?this.texData.get(g.dataId).usage=ma.PIXELS:this.texData.get(g.dataId).usage=ma.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),f,h,s);let x=[[h,f]],y=!0,b=this.runWebGLProgram(d,[g],r,x,y),A=this.texData.get(b.dataId);t.texture=A.texture,t.texShape=A.texShape,t.isPacked=A.isPacked,t.usage=A.usage,this.disposeIntermediateTensorInfo(g),this.texData.delete(b.dataId),t.values=null,l&&(this.uploadWaitMs+=E.now()-u)}else{let p=this.acquireTexture(c,a,r,i);t.texture=p}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:r}=n;return this.releaseGPUData(e),t!=null&&(n.values=ATe(t,r)),n.values}acquireTexture(e,t,n,r){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*E.bytesPerElement(t)}};Y0.nextDataId=0;function ATe(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let n=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let r=0;rnew Y0,2);var wTe={forceHalfFloat:wW},kW=` if (isnan(a)) return a; if (isnan(b)) return b; `,J0=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=G.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=xa(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `}},P5=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `,rA=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=G.assertAndGetBroadcastShape(t,n);let s=this.outputShape.length;this.enableShapeUniforms=xa(s);let o="";if(r)if(s===0||E.sizeFromShape(this.outputShape)===1)o=` result.y = 0.; result.z = 0.; result.w = 0.; `;else if(o=` ${Dn(s)} coords = getOutputCoords(); `,s===1)this.enableShapeUniforms?o+=` result.y = (coords + 1) >= outShape ? 0. : result.y; result.z = 0.; result.w = 0.; `:o+=` result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; `;else{let i=js("coords",s);this.enableShapeUniforms?o+=` bool nextRowOutOfBounds = (${i[s-2]} + 1) >= outShape[${s} - 2]; bool nextColOutOfBounds = (${i[s-1]} + 1) >= outShape[${s} - 1]; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `:o+=` bool nextRowOutOfBounds = (${i[s-2]} + 1) >= ${this.outputShape[s-2]}; bool nextColOutOfBounds = (${i[s-1]} + 1) >= ${this.outputShape[s-1]}; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `}this.userCode=` vec4 binaryOperation(vec4 a, vec4 b) { ${e} } void main() { vec4 a = getAAtOutCoords(); vec4 b = getBAtOutCoords(); vec4 result = binaryOperation(a, b); ${o} setOutput(result); } `}};function Xo(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var kTe={kernelName:sf,backendName:"webgl",kernelFunc:Xo};function sp(e){let{inputs:t,backend:n}=e,{real:r,imag:s}=t,o=n.makeTensorInfo(r.shape,"complex64"),a=n.texData.get(o.dataId),i=Xo({inputs:{x:r},backend:n}),l=Xo({inputs:{x:s},backend:n});return a.complexTensorInfos={real:i,imag:l},o}var ITe={kernelName:rw,backendName:"webgl",kernelFunc:sp},IW="return (a < 0.) ? b * a : a;",CW=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function CTe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:o}=r,a=n.makeTensorInfo([],"float32",E.createScalarValue(o,"float32")),i=be().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new rA(CW,s.shape,a.shape):new J0(IW,s.shape,a.shape),l=n.runWebGLProgram(i,[s,a],s.dtype);return n.disposeIntermediateTensorInfo(a),l}var STe={kernelName:of,backendName:"webgl",kernelFunc:CTe},SW="return (a < 0.) ? b * a : a;",NW=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function NTe(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,o=be().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new rA(NW,r.shape,s.shape):new J0(SW,r.shape,s.shape);return n.runWebGLProgram(o,[r,s],r.dtype)}var TTe={kernelName:bf,backendName:"webgl",kernelFunc:NTe},TW="if (isnan(x)) return x;",_Te=` if (isnan(a)) return a; if (isnan(b)) return b; `,ETe=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;function tn({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:s,backend:o})=>{let{x:a}=s,i=o,l=r||a.dtype;if(i.shouldExecuteOnCPU([a])&&n!=null){let p=i.texData.get(a.dataId),d=n(p.values,l);return i.makeTensorInfo(a.shape,l,d)}let u=be().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,c;return u?c=new Z0(a.shape,t):c=new rp(a.shape,e),i.runWebGLProgram(c,[a],l)}}function ks({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:s,dtype:o}){return({inputs:a,backend:i})=>{let{a:l,b:u}=a,c=i;if(r&&l.dtype==="complex64"){let h=c.texData.get(l.dataId),m=c.texData.get(u.dataId),[g,x]=[[h.complexTensorInfos.real,m.complexTensorInfos.real],[h.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(b=>{let[A,v]=b,w={dataId:A.dataId,dtype:A.dtype,shape:l.shape},k={dataId:v.dataId,dtype:v.dtype,shape:u.shape},I=new J0(e,l.shape,u.shape);return c.runWebGLProgram(I,[w,k],$a(A.dtype,v.dtype))}),y=sp({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),y}let p=o||$a(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||c.shouldExecuteOnCPU([l,u]))&&s!=null){let h=c.texData.get(l.dataId).values,m=c.texData.get(u.dataId).values,g=l.dtype==="string"?G.fromUint8ToStringArray(h):h,x=l.dtype==="string"?G.fromUint8ToStringArray(m):m,[y,b]=s(l.shape,u.shape,g,x,p),A=c.makeTensorInfo(b,p),v=c.texData.get(A.dataId);return v.values=y,A}let d=be().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,f;return d?f=new rA(t,l.shape,u.shape,n):f=new J0(e,l.shape,u.shape),c.runWebGLProgram(f,[l,u],p)}}function M5(e,t=!1){if(e==="linear")return t?iTe:nTe;if(e==="relu")return t?uTe:sTe;if(e==="elu")return t?lTe:rTe;if(e==="relu6")return t?cTe:oTe;if(e==="prelu")return t?NW:SW;if(e==="leakyrelu")return t?CW:IW;if(e==="sigmoid")return t?pTe:aTe;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var _W=class{constructor(e,t,n,r=!1,s=!1,o=!1,a=null,i=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=xa(this.outputShape.length);let u=r?e[1]:e[2],c=Math.ceil(u/2),p=r?"i * 2, rc.y":"rc.y, i * 2",d=s?"rc.z, i * 2":"i * 2, rc.z",f=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",g="";a&&(i?m=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${a} }`:l?m=`vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${a} }`:m=`vec4 activation(vec4 x) { ${a} }`,g="result = activation(result);");let x=o?"result += getBiasAtOutCoords();":"";o&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let y="rc.x",b="rc.x";e[0]`The new shape (${l}) has ${u} elements and the old shape (${s.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(s.dataId);return c.isPacked&&!tA(s.shape,l)&&!(c.texture!==null&&tA(c.shape,l))?DTe(s,l,a):(a.incRef(s.dataId),{dataId:s.dataId,shape:l,dtype:s.dtype})}var $Te={kernelName:Xg,backendName:"webgl",kernelFunc:qe},$W=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:s,outSize:o}=e;this.outputShape=[r,o];let a=Math.floor(n/4)*4,i=n%4,l="sumValue += dot(values, ones);";if(t!=null){let c=1/t;l=`sumValue += dot(values * ${E.isInt(c)?c.toPrecision(2):c}, ones);`}let u="";s%n>0&&(u=` if (inIdx < 0 || inIdx >= ${s}) { return 0.0; } `),this.userCode=` const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { ${u} return getX(batch, inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * ${n}; float sumValue = 0.0; for (int i = 0; i < ${a}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${l} } int inIdx = inOffset + ${a}; if (${i===1}) { vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0); ${l} } else if (${i===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), 0.0, 0.0); ${l} } else if (${i===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), 0.0); ${l} } setOutput(sumValue); } `}},FTe=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:s,outSize:o}=e;this.outputShape=[r,o];let a="0.0",i="";t==="prod"?a="1.0":t==="min"?(a="1.0 / 1e-20",i="min"):t==="max"&&(a="-1.0 / 1e-20",i="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");let u=Math.floor(n/4)*4,c=n%4,p=` if (${t==="sum"}) { sumValue += dot(values, ones); } else if (${t==="prod"}) { vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); prodValue *= tmp[0] * tmp[1]; } else { minMaxValue = ${i}(values, minMaxValue); if (${t==="min"} || ${t==="max"}) { minMaxValue = ${i}(values, minMaxValue); bvec4 isNaN = isnan(values); if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) { minMaxValue = vec4(NAN); } } } `,d="vec4";t==="all"?(a="1.0",p=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); `,d="bvec4"):t==="any"&&(a="0.0",p=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); `,d="bvec4");let f="";s%n>0&&(f=` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } `),this.userCode=` const float initializationValue = ${a}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { ${f} return getX(batch, inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * ${n}; vec4 minMaxValue = vec4(${a}); float prodValue = 1.0; float sumValue = 0.0; float allValue = 1.0; float anyValue = 0.0; for (int i = 0; i < ${u}; i += 4) { int inIdx = inOffset + i; ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${p} } int inIdx = inOffset + ${u}; if (${c===1}) { ${d} values = ${d}( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); ${p} } else if (${c===2}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); ${p} } else if (${c===3}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); ${p} } setOutput(${l}); } `}};function OTe(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],r=G.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function xh(e,t,n,r){let s=OTe(e.shape),o=e;for(let a=0;a6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let s=0;s6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=Dn(this.rank),s=gW("rc",this.rank),o=new Array(this.rank);for(let u=0;u=2&&c>=2&&b,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${m}) and (${g}).`);let v=(x>y?e.shape.slice(0,-2):t.shape.slice(0,-2)).concat([f,h]);E.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`);let w=n?[x,p,f]:[x,f,p],k=r?[y,h,d]:[y,d,h],I=qe({inputs:{x:e},backend:s,attrs:{shape:w}}),N=qe({inputs:{x:t},backend:s,attrs:{shape:k}}),T=[I,N],_=Math.max(x,y),R=n?I.shape[1]:I.shape[2],S=o!=null,F=a!=null,B=l==="leakyrelu",W=l!=null?M5(l,!0):null,q=S||F||B||W!=null,K;if((f===1||h===1)&&R>FW&&q===!1){let Q=I,ee=N;n&&(Q=Hs({inputs:{x:I},backend:s,attrs:{perm:[0,2,1]}}),T.push(Q)),r&&(ee=Hs({inputs:{x:N},backend:s,attrs:{perm:[0,2,1]}}),T.push(ee));let ue=h!==1,re=h===1,de=Q;ue&&(de=qe({inputs:{x:Q},backend:s,attrs:{shape:[_,R,1]}}),T.push(de));let fe=h===1?2:1,me=ee;re&&(me=qe({inputs:{x:ee},backend:s,attrs:{shape:[_,1,R]}}),T.push(me));let xe=PR({inputs:{a:de,b:me},backend:s});K=L5({inputs:{x:xe},backend:s,attrs:{axis:fe,keepDims:!0}}),T.push(xe)}else{let Q=$a(e.dtype,t.dtype),ee=new _W(w,k,[_,f,h],n,r,S,W,F,B),ue=[I,N];if(o!=null&&ue.push(o),F&&ue.push(a),B){let re=s.makeTensorInfo([],"float32",E.createScalarValue(i,"float32"));ue.push(re),T.push(re)}K=s.runWebGLProgram(ee,ue,Q)}let J=qe({inputs:{x:K},backend:s,attrs:{shape:v}});T.push(K);for(let Q of T)s.disposeIntermediateTensorInfo(Q);return J}function WTe(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o,bias:a,preluActivationWeights:i}=t,{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:p}=r;return B5({a:s,b:o,transposeA:l,transposeB:u,backend:n,bias:a,preluActivationWeights:i,leakyreluAlpha:p,activation:c})}var GTe={kernelName:Pf,backendName:"webgl",kernelFunc:WTe},OW="return abs(x);";function UTe(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&r.dtype!=="complex64"){let o=n.texData.get(r.dataId),a=hW(o.values);return n.makeTensorInfo(r.shape,r.dtype,a)}let s;return be().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new Z0(r.shape,OW):s=new rp(r.shape,OW),n.runWebGLProgram(s,[r],r.dtype)}var jTe={kernelName:cg,backendName:"webgl",kernelFunc:UTe},HTe=Ti+` if (abs(x) > 1.) { return NAN; } return acos(x); `,qTe=tn({opSnippet:HTe}),KTe={kernelName:pg,backendName:"webgl",kernelFunc:qTe},XTe=Ti+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,ZTe=tn({opSnippet:XTe}),YTe={kernelName:dg,backendName:"webgl",kernelFunc:ZTe},PW="return a + b;",JTe=ks({opSnippet:PW,packedOpSnippet:PW,supportsComplex:!0,cpuKernelImpl:iNe}),QTe={kernelName:$c,backendName:"webgl",kernelFunc:JTe},e_e=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,o)=>`T${o}`);let n=[];this.variableNames.forEach(s=>{n.push(`float v${s} = get${s}AtOutCoords();`)});let r=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${n.join(` `)} float result = ${r}; setOutput(result); } `}},t_e=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,o)=>`T${o}`);let n=[];this.variableNames.forEach(s=>{n.push(`vec4 v${s} = get${s}AtOutCoords();`)});let r=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${n.join(` `)} vec4 result = ${r}; setOutput(result); } `}};function V5(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return Xo({inputs:{x:r[0]},backend:n});if(r.length>be().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let l=Math.floor(r.length/2),u=V5({inputs:r.slice(0,l),backend:n}),c=V5({inputs:r.slice(l),backend:n});return V5({inputs:[u,c],backend:n})}let s=r.map(l=>l.dtype).reduce((l,u)=>$a(l,u)),o=r.map(l=>l.shape),i=be().getBool("WEBGL_PACK")?new t_e(r[0].shape,o):new e_e(r[0].shape,o);return n.runWebGLProgram(i,r,s)}var n_e={kernelName:Ld,backendName:"webgl",kernelFunc:V5};function r_e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=s.shape.length,l=E.parseAxisParam(o,s.shape),u=l,c=G.getAxesPermutation(u,i),p=s;c!=null&&(p=Hs({inputs:{x:s},backend:n,attrs:{perm:c}}),u=G.getInnerMostAxes(u.length,i)),G.assertAxesAreInnerMostDims("all",u,i);let[d,f]=G.computeOutAndReduceShapes(p.shape,u),h=E.sizeFromShape(f),m=qe({inputs:{x:p},backend:n,attrs:{shape:[-1,h]}}),g=xh(m,m.dtype,"all",n),x;if(a){let y=G.expandShapeToKeepDim(d,l);x=qe({inputs:{x:g},backend:n,attrs:{shape:y}})}else x=qe({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),c!=null&&n.disposeIntermediateTensorInfo(p),x}var s_e={kernelName:fg,backendName:"webgl",kernelFunc:r_e};function o_e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=s.shape.length,l=E.parseAxisParam(o,s.shape),u=l,c=G.getAxesPermutation(u,i),p=s;c!=null&&(p=Hs({inputs:{x:s},backend:n,attrs:{perm:c}}),u=G.getInnerMostAxes(u.length,i)),G.assertAxesAreInnerMostDims("any",u,i);let[d,f]=G.computeOutAndReduceShapes(p.shape,u),h=E.sizeFromShape(f),m=qe({inputs:{x:p},backend:n,attrs:{shape:[-1,h]}}),g=xh(m,m.dtype,"any",n),x;if(a){let y=G.expandShapeToKeepDim(d,l);x=qe({inputs:{x:g},backend:n,attrs:{shape:y}})}else x=qe({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),c!=null&&n.disposeIntermediateTensorInfo(p),x}var a_e={kernelName:hg,backendName:"webgl",kernelFunc:o_e},i_e=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:r,batchSize:s,outSize:o}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[s,o];let a=t==="max"?">":"<",i=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * ${r}; int bestIndex = inOffset; float bestValue = getA(batch, bestIndex); for (int i = 0; i < ${r}; i++) { int inIdx = ${i}; float candidate = getA(batch, inIdx); if (candidate ${a} bestValue) { bestValue = candidate; bestIndex = inIdx; } } setOutput(float(bestIndex)); } `}},l_e=class{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,E.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],o=Math.ceil(s/t);this.outputShape=e.slice(0,-1),o>1&&this.outputShape.push(o),r||this.variableNames.push("bestIndicesA");let a=this.outputShape,i=a.length,l=Dn(i),u=js("coords",i),c,p;if(o===1){p=i+1;let k=Dn(p);c=` ${k} sourceLocR = ${k}(${u.join()}, 0); ++${u[i-1]}; ${k} sourceLocG = ${k}(${u.join()}, 0); ++${u[i-2]}; ${k} sourceLocA = ${k}(${u.join()}, 0); --${u[i-1]}; ${k} sourceLocB = ${k}(${u.join()}, 0); --${u[i-2]};`}else p=i,c=` ${l} sourceLocR = coords; ++${u[i-1]}; ${l} sourceLocG = coords; ++${u[i-2]}; ${l} sourceLocA = coords; --${u[i-1]}; ${l} sourceLocB = coords; --${u[i-2]};`;let d=["x","y","z","w","u","v"].slice(0,p),f="."+d[p-1],h=d.map(k=>"int "+k),m=js("sourceLocR",p-1).concat("inIdx.r"),g=js("sourceLocG",p-1).concat("inIdx.g"),x=js("sourceLocB",p-1).concat("inIdx.b"),y=js("sourceLocA",p-1).concat("inIdx.a"),b=n==="max"?"greaterThan":"lessThan",A=r?"":` inIdx = round(vec4(getBestIndicesAChannel(${m.join()}), getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${y.join()})));`,v=`vec4( getAChannel(${m.join()}), hasNextCol ? getAChannel(${g.join()}) : 0., hasNextRow ? getAChannel(${x.join()}) : 0., hasNextRow && hasNextCol ? getAChannel(${y.join()}) : 0.)`,w=r?"":` float getBestIndicesAChannel(${h.join()}) { return getChannel(getBestIndicesA(${d.join()}), vec2(${d.slice(-2).join()})); }`;this.userCode=` float getAChannel(${h.join()}) { return getChannel(getA(${d.join()}), vec2(${d.slice(-2).join()})); } ${w} void main() { ${l} coords = getOutputCoords(); bool hasNextCol = ${u[i-1]} < ${a[i-1]-1}; bool hasNextRow = ${u[i-2]} < ${a[i-2]-1}; ${c} ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f}, sourceLocB${f}, sourceLocA${f}) * ${t}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = ${v}; for (int i = 0; i < ${t}; i++) { inIdx = srcIdx; ${A} vec4 candidate = ${v}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(${b}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); bestValue = vec4(replace.x ? candidate.x : bestValue.x, replace.y ? candidate.y : bestValue.y, replace.z ? candidate.z : bestValue.z, replace.w ? candidate.w : bestValue.w); bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace)); srcIdx++; } setOutput(bestIndex); } `}};function MW(e,t,n,r=null){let s=t.shape[0],o=t.shape[1];r!=null&&(s=r.shape[0],o=r.shape[1]);let a=G.computeOptimalWindowSize(o),i={windowSize:a,inSize:o,batchSize:s,outSize:Math.ceil(o/a)},l=new i_e(i,n,r==null),u=[t];r!=null&&u.push(r);let c=e.runWebGLProgram(l,u,"int32");if(c.shape[1]===1)return c;let p=MW(e,t,n,c);return e.disposeIntermediateTensorInfo(c),p}function zW(e,t,n,r=null){let s=r!=null?r.shape:t.shape,o=s[s.length-1],a=G.computeOptimalWindowSize(o),i=new l_e(s,a,n,r==null),l=r==null?[t]:[t,r],u=e.runWebGLProgram(i,l,"int32");if(u.shape.length===t.shape.length){let c=zW(e,t,n,u);return e.disposeIntermediateTensorInfo(u),c}return u}function LW(e,t,n,r){let s=[n];if(G.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),s,t.shape.length),!be().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let o=[],a=e.texData.get(t.dataId),i=a!==null&&a.isPacked,l=t;i&&(l=e.unpackTensor(t),o.push(l));let[u,c]=G.computeOutAndReduceShapes(l.shape,s),p=E.sizeFromShape(c),d=qe({inputs:{x:l},backend:e,attrs:{shape:[-1,p]}});o.push(d);let f=MW(e,d,r);o.push(f);let h=qe({inputs:{x:f},backend:e,attrs:{shape:u}});return o.forEach(m=>e.disposeIntermediateTensorInfo(m)),h}return zW(e,t,r)}function u_e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o}=r,a=E.parseAxisParam(o,s.shape),i=G.getAxesPermutation(a,s.shape.length),l=s,u=[];i!=null&&(l=Hs({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(l),a=G.getInnerMostAxes(a.length,l.shape.length)),G.assertAxesAreInnerMostDims("argMax",[a[0]],l.shape.length);let c=LW(n,l,a[0],"max");return u.forEach(p=>n.disposeIntermediateTensorInfo(p)),c}var c_e={kernelName:Bd,backendName:"webgl",kernelFunc:u_e};function p_e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o}=r,a=E.parseAxisParam(o,s.shape),i=G.getAxesPermutation(a,s.shape.length),l=s,u=[];i!=null&&(l=Hs({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(l),a=G.getInnerMostAxes(a.length,l.shape.length)),G.assertAxesAreInnerMostDims("argMin",[a[0]],l.shape.length);let c=LW(n,l,a[0],"min");return u.forEach(p=>n.disposeIntermediateTensorInfo(p)),c}var d_e={kernelName:P1,backendName:"webgl",kernelFunc:p_e},f_e=Ti+` if (abs(x) > 1.) { return NAN; } return asin(x); `,h_e=tn({opSnippet:f_e}),m_e={kernelName:mg,backendName:"webgl",kernelFunc:h_e},g_e=Ti+"return log(x + sqrt(x * x + 1.0));",x_e=tn({opSnippet:g_e}),y_e={kernelName:gg,backendName:"webgl",kernelFunc:x_e},b_e=Ti+` return atan(x); `,A_e=tn({opSnippet:b_e}),v_e={kernelName:xg,backendName:"webgl",kernelFunc:A_e},w_e=_Te+` return atan(a, b); `,k_e=` vec4 result = atan(a, b); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+ETe+` return result; `,I_e=ks({opSnippet:w_e,packedOpSnippet:k_e}),C_e={kernelName:bg,backendName:"webgl",kernelFunc:I_e},S_e=Ti+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,N_e=tn({opSnippet:S_e}),T_e={kernelName:yg,backendName:"webgl",kernelFunc:N_e},sA=class{constructor(e,t,n,r=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let o=e.filterWidth,a=e.strideHeight,i=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterHeight,p=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,x="0.0";if(h||(x="-1.0 / 1e-20"),n){let k=">=";this.userCode=` const ivec2 strides = ivec2(${a}, ${i}); const ivec2 pads = ivec2(${d}, ${f}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; float avgValue = 0.0; for (int wR = 0; wR < ${c}; wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${p}; wC += ${u}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float value = getX(batch, xR, xC, d); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${k} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${r?s?m:g:`wR * ${p} + wC`}; } } } setOutput(float(minMaxPosition)); } `;return}let y="max",b=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(b="avgValue / count");let A=Math.floor(o/4)*4,v=o%4,w=` if (${h}) { avgValue += dot(values, ones); } else { minMaxValue = ${y}(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(${a}, ${i}); const ivec2 pads = ivec2(${d}, ${f}); const float initializationValue = ${x}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xR, int xC, int d) { if (xC < 0 || xC >= ${e.inWidth}) { return initializationValue; } count += 1.0; return getX(batch, xR, xC, d); } void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined vec4 minMaxValue = vec4(${x}); float avgValue = 0.0; count = 0.0; for (int wR = 0; wR < ${c}; wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${A}; wC += 4) { int xC = xCCorner + wC * ${u}; vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${u}, d), getValue(batch, xR, xC + 2 * ${u}, d), getValue(batch, xR, xC + 3 * ${u}, d) ); ${w} } int xC = xCCorner + ${A}; if (${v===1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); ${w} } else if (${v===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${u}, d), initializationValue, initializationValue ); ${w} } else if (${v===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${u}, d), getValue(batch, xR, xC + 2 * ${u}, d), initializationValue ); ${w} } } setOutput(${b}); } `}},MR=class{constructor(e,t,n,r=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let o=e.filterWidth,a=e.strideDepth,i=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,c=e.dilationHeight,p=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,m=e.padInfo.front,g=e.padInfo.top,x=e.padInfo.left;this.outputShape=e.outShape;let y=t==="avg",b="0.0";if(y||(b="-1.0 / 1e-20"),n){let N=">=";this.userCode=` const ivec3 strides = ivec3(${a}, ${i}, ${l}); const ivec3 pads = ivec3(${m}, ${g}, ${x}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; for (int wD = 0; wD < ${d}; wD += ${u}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${f}; wR += ${c}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${h}; wC += ${p}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float value = getX(batch, xD, xR, xC, ch); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${N} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${r?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${f} * ${h} + wR * ${h} + wC`}; } } } } setOutput(float(minMaxPosition)); } `;return}let A="max",v=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(v="avgValue / count");let w=Math.floor(o/4)*4,k=o%4,I=` if (${y}) { avgValue += dot(values, ones); } else { minMaxValue = ${A}(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(${a}, ${i}, ${l}); const ivec3 pads = ivec3(${m}, ${g}, ${x}); const float initializationValue = ${b}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xD, int xR, int xC, int ch) { if (xC < 0 || xC >= ${e.inWidth}) { return initializationValue; } count += 1.0; return getX(batch, xD, xR, xC, ch); } void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). // ? = to be determined vec4 minMaxValue = vec4(${b}); float avgValue = 0.0; count = 0.0; for (int wD = 0; wD < ${d}; wD += ${u}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${f}; wR += ${c}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${w}; wC += 4) { int xC = xCCorner + wC * ${p}; vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${p}, ch), getValue(batch, xD, xR, xC + 2 * ${p}, ch), getValue(batch, xD, xR, xC + 3 * ${p}, ch) ); ${I} } int xC = xCCorner + ${w}; if (${k===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); ${I} } else if (${k===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${p}, ch), initializationValue, initializationValue ); ${I} } else if (${k===3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${p}, ch), getValue(batch, xD, xR, xC + 2 * ${p}, ch), initializationValue ); ${I} } } setOutput(${v}); } } `}};function __e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;j0(s,"avgPool");let{filterSize:o,strides:a,pad:i,dimRoundingMode:l}=r,u=1;E.assert(G.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=G.computePool2DInfo(s.shape,o,a,u,i,l);if(c.filterWidth===1&&c.filterHeight===1&&E.arraysEqual(c.inShape,c.outShape))return Xo({inputs:{x:s},backend:n});let p=new sA(c,"avg",!1);return n.runWebGLProgram(p,[s],"float32")}var E_e={kernelName:Vd,backendName:"webgl",kernelFunc:__e};function R_e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=r,c=[1,1,1],p=G.computePool3DInfo(s.shape,o,a,c,i,l,u),d=new MR(p,"avg",!1);return n.runWebGLProgram(d,[s],"float32")}var D_e={kernelName:M1,backendName:"webgl",kernelFunc:R_e},$_e=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,s=e.strideWidth,o=e.dilationHeight,a=e.dilationWidth,i=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=i-1-e.padInfo.top,c=l-1-e.padInfo.left,p=1/(t*n);this.userCode=` const ivec2 pads = ivec2(${u}, ${c}); const float avgMultiplier = float(${p}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${i}; wR += ${o}) { float dyR = float(dyRCorner + wR) / ${r}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${l}; wC+= ${a}) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); dotProd += dyValue * avgMultiplier; } } setOutput(dotProd); } `}},F_e=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,s=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,p=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=c-1-e.padInfo.front,h=p-1-e.padInfo.top,m=d-1-e.padInfo.left,g=1/(t*n*r);this.userCode=` const ivec3 pads = ivec3(${f}, ${h}, ${m}); const float avgMultiplier = float(${g}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < ${c}; wD += ${i}) { float dyD = float(dyDCorner + wD) / ${s}.0; if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${p}; wR += ${l}) { float dyR = float(dyRCorner + wR) / ${o}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${d}; wC += ${u}) { float dyC = float(dyCCorner + wC) / ${a}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); dotProd += dyValue * avgMultiplier; } } } setOutput(dotProd); } `}};function O_e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o,{filterSize:i,strides:l,pad:u,dimRoundingMode:c}=r,p=[1,1,1],d=G.computePool3DInfo(a.shape,i,l,p,u,c),f=new F_e(d);return n.runWebGLProgram(f,[s],a.dtype)}var P_e={kernelName:tw,backendName:"webgl",kernelFunc:O_e};function M_e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o;j0([s,o],"avgPoolGrad");let{filterSize:i,strides:l,pad:u}=r,c=G.computePool2DInfo(a.shape,i,l,1,u),p=new $_e(c);return n.runWebGLProgram(p,[s],a.dtype)}var z_e={kernelName:ew,backendName:"webgl",kernelFunc:M_e};function L_e(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o}=t,{transposeA:a,transposeB:i}=r;return B5({a:s,b:o,transposeA:a,transposeB:i,backend:n})}var B_e={kernelName:Wd,backendName:"webgl",kernelFunc:L_e},V_e=class{constructor(e,t,n,r,s,o){this.outputShape=[],this.variableNames=["x","mean","variance"],G.assertAndGetBroadcastShape(e,t),G.assertAndGetBroadcastShape(e,n);let a="0.0";r!=null&&(G.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");let i="1.0";s!=null&&(G.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),i="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); float variance = getVarianceAtOutCoords(); float offset = ${a}; float scale = ${i}; float inv = scale * inversesqrt(variance + float(${o})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } `}},W_e=class{constructor(e,t,n,r,s,o){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],G.assertAndGetBroadcastShape(e,t),G.assertAndGetBroadcastShape(e,n);let a="vec4(0.0)";r!=null&&(G.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");let i="vec4(1.0)";s!=null&&(G.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),i="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${a}; vec4 scale = ${i}; vec4 x = getXAtOutCoords(); vec4 mean = getMeanAtOutCoords(); vec4 variance = getVarianceAtOutCoords(); vec4 inv = scale * inversesqrt(variance + vec4(${o})); setOutput((x - mean) * inv + offset); } `}},G_e=({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:s,variance:o,offset:a,scale:i}=e;E.assert(s.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),E.assert(a==null||s.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),E.assert(i==null||s.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let u=[r,s,o],c=null;a!=null&&(c=a.shape,u.push(a));let p=null;i!=null&&(p=i.shape,u.push(i));let d=be().getBool("WEBGL_PACK_NORMALIZATION")?new W_e(r.shape,s.shape,o.shape,c,p,l):new V_e(r.shape,s.shape,o.shape,c,p,l);return t.runWebGLProgram(d,u,u[0].dtype)},U_e={kernelName:nf,backendName:"webgl",kernelFunc:G_e},j_e=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=Dn(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=H_e(this.rank),r,s=e.map((o,a)=>`sourceLoc.${zR[a]} = start[${a}] + coords.${zR[a]};`);r=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${s.join(` `)} `,this.userCode=` void main() { ${r} setOutput(getSource(${n})); } `}},zR=["x","y","z","w","u","v"];function H_e(e){if(e===1)return"sourceLoc";if(e<=6)return zR.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var q_e=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=Dn(this.rank),n=js("coords",this.rank),r=js("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${r.slice(-2).join()})`,o=`getChannel(getSource(${r.join()}), ${s})`,a=` result.x = ${o}; if (++${n[this.rank-1]} < ${e[this.rank-1]}) { ++${r[this.rank-1]}; result.y = ${o}; --${r[this.rank-1]}; } `,i=this.rank===1?"":` --${n[this.rank-1]}; if (++${n[this.rank-2]} < ${e[this.rank-2]}) { ++${r[this.rank-2]}; result.z = ${o}; if (++${n[this.rank-1]} < ${e[this.rank-1]}) { ++${r[this.rank-1]}; result.w = ${o}; } } `,l=this.rank<=4?`sourceLoc = coords + ${t}(${e.map((u,c)=>`start[${c}]`).join()});`:e.map((u,c)=>`${r[c]} = ${n[c]} + start[${c}];`).join(` `);this.userCode=` void main() { ${t} coords = getOutputCoords(); ${t} sourceLoc; ${l} vec4 result = vec4(0.); ${a} ${i} setOutput(result); } `}};function K_e(e,t,n,r){let s=r.texData.get(e.dataId),o=r.makeTensorInfo(n,e.dtype),a=r.texData.get(o.dataId);Object.assign(a,s),a.refCount=1,a.shape=n,a.dtype=e.dtype;let i=Bs.computeFlatOffset(t,E.computeStrides(e.shape));s.slice&&(i+=s.slice.flatOffset),a.slice={flatOffset:i,origDataId:s.slice&&s.slice.origDataId||e.dataId};let l=r.dataRefCount.get(a.slice.origDataId)||1;return r.dataRefCount.set(a.slice.origDataId,l+1),o}function Q0(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,size:a}=r,[i,l]=Bs.parseSliceParams(s,o,a);if(Bs.assertParamsValid(s,i,l),E.sizeFromShape(l)===0)return n.makeTensorInfo(l,s.dtype,[]);if(n.shouldExecuteOnCPU([s])||s.dtype==="string"){let p=n.texData.get(s.dataId),d=$Ne(p.values,i,l,s.shape,s.dtype);return n.makeTensorInfo(l,s.dtype,d)}let{isPacked:u}=n.texData.get(s.dataId),c=Bs.isSliceContinous(s.shape,i,l);if(u||!c){let p=be().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new q_e(l):new j_e(l),d=[i];return n.runWebGLProgram(p,[s],s.dtype,d)}return n.uploadToGPU(s.dataId),K_e(s,i,l,n)}var X_e={kernelName:Qg,backendName:"webgl",kernelFunc:Q0},Z_e=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,crops:a}=r;E.assert(s.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=o.reduce((y,b)=>y*b),l=G.getReshaped(s.shape,o,i),u=G.getPermuted(l.length,o.length),c=G.getReshapedPermuted(s.shape,o,i),p=G.getSliceBeginCoords(a,o.length),d=G.getSliceSize(c,a,o.length),f=[],h=qe({inputs:{x:s},backend:n,attrs:{shape:l}}),m=Hs({inputs:{x:h},backend:n,attrs:{perm:u}}),g=qe({inputs:{x:m},backend:n,attrs:{shape:c}}),x=Q0({inputs:{x:g},backend:n,attrs:{begin:p,size:d}});return f.push(h),f.push(m),f.push(g),f.forEach(y=>n.disposeIntermediateTensorInfo(y)),x},Y_e={kernelName:Ag,backendName:"webgl",kernelFunc:Z_e};function J_e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:o}=t,{size:a}=r,i=n.readSync(s.dataId),l=n.readSync(o.dataId),u=fW(i,l,o.dtype,o.shape,a);return n.makeTensorInfo([a],o.dtype,u)}var Q_e={kernelName:nw,backendName:"webgl",kernelFunc:J_e},eEe="return float(a != b);",BW=ks({opSnippet:eEe,cpuKernelImpl:TNe,dtype:"bool"}),tEe={kernelName:Vg,backendName:"webgl",kernelFunc:BW};function oA(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.texData.get(r.dataId);return Xo({inputs:{x:s.complexTensorInfos.real},backend:n})}var nEe={kernelName:Iw,backendName:"webgl",kernelFunc:oA},rEe="return float(int(x));";function sEe(e,t){let n=new rp(e.shape,rEe),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function LR(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:o}=r;if(o==="complex64"){if(s.dtype==="complex64")return Xo({inputs:{x:s},backend:n});let a=xr(s.shape),i=LR({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),l=sp({inputs:{real:i,imag:a},backend:n});return a.dispose(),n.disposeIntermediateTensorInfo(i),l}if(s.dtype==="complex64"){let a=oA({inputs:{input:s},backend:n}),i=LR({inputs:{x:a},backend:n,attrs:{dtype:o}});return n.disposeIntermediateTensorInfo(a),i}if(!E.hasEncodingLoss(s.dtype,o)){let a=Xo({inputs:{x:s},backend:n});return{dataId:a.dataId,shape:a.shape,dtype:o}}if(o==="int32")return sEe(s,n);if(o==="bool"){let a=n.makeTensorInfo([],"bool",E.getTypedArrayFromDType("bool",1)),l=BW({inputs:{a:s,b:a},backend:n});return n.disposeIntermediateTensorInfo(a),l}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${o}`)}var oEe={kernelName:Gd,backendName:"webgl",kernelFunc:LR},VW="return ceil(x);",aEe=tn({opSnippet:VW,packedOpSnippet:VW,cpuKernelImpl:uNe}),iEe={kernelName:Ud,backendName:"webgl",kernelFunc:aEe},lEe=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { float value = getAAtOutCoords(); if (isnan(value)) { setOutput(value); return; } setOutput(clamp(value, minVal, maxVal)); } `}},uEe=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { vec4 value = getAAtOutCoords(); if (any(isnan(value))) { setOutput(value); return; } setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } `}};function cEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:o,clipValueMax:a}=r,i;be().getBool("WEBGL_PACK_CLIP")?i=new uEe(s.shape):i=new lEe(s.shape);let l=[[o],[a]];return n.runWebGLProgram(i,[s],s.dtype,l)}var pEe={kernelName:Fc,backendName:"webgl",kernelFunc:cEe},dEe=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); float mx = max(re, im); // sadly the length function in glsl is not underflow-safe // (at least not on Intel GPUs). So the safe solution is // to ensure underflow-safety in all cases. setOutput( mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } `}};function WW(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function fEe(e){let{inputs:t,backend:n}=e,{x:r}=t,s=n.texData.get(r.dataId),o=new dEe(r.shape),a=[WW(r,s.complexTensorInfos.real),WW(r,s.complexTensorInfos.imag)];return n.runWebGLProgram(o,a,a[0].dtype)}var hEe={kernelName:z1,backendName:"webgl",kernelFunc:fEe},mEe=class{constructor(e){this.outputShape=[],this.outputShape=G.computeOutShape(e,1),this.variableNames=e.map((o,a)=>`T${a}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let o=1;o`T${m}`);let i=new Array(e.length-1);i[0]=e[0][t];for(let h=1;h= ${i[h-1]}) { return getChannel( getT${h}(${W5(a,l,m)}), vec2(${W5(u,l,m)})); }`}let d=i.length,f=i[i.length-1];p+=` return getChannel( getT${d}(${W5(a,l,f)}), vec2(${W5(u,l,f)}));`,this.userCode=` float getValue(${a.map(h=>"int "+h)}) { ${p} } void main() { ${s} coords = getOutputCoords(); vec4 result = vec4(getValue(${o}), 0., 0., 0.); ${o[r-1]} = ${o[r-1]} + 1; if (${o[r-1]} < ${n[r-1]}) { result.g = getValue(${o}); } ${o[r-2]} = ${o[r-2]} + 1; if (${o[r-2]} < ${n[r-2]}) { result.a = getValue(${o}); } ${o[r-1]} = ${o[r-1]} - 1; if (${o[r-2]} < ${n[r-2]} && ${o[r-1]} < ${n[r-1]}) { result.b = getValue(${o}); } setOutput(result); } `}};function W5(e,t,n){let r=e.indexOf(t);return e.map((o,a)=>a===r?`${o} - ${n}`:o).join()}function G5(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.texData.get(r.dataId);return Xo({inputs:{x:s.complexTensorInfos.imag},backend:n})}var xEe={kernelName:xw,backendName:"webgl",kernelFunc:G5};function ex(e,t,n){let r=e[0].dtype;if(r==="complex64"){let c=e.map(m=>oA({inputs:{input:m},backend:n})),p=e.map(m=>G5({inputs:{input:m},backend:n})),d=ex(c,t,n),f=ex(p,t,n),h=sp({inputs:{real:d,imag:f},backend:n});return c.forEach(m=>n.disposeIntermediateTensorInfo(m)),p.forEach(m=>n.disposeIntermediateTensorInfo(m)),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),h}let s=n.shouldExecuteOnCPU(e);if(r==="string"&&(s=!0),s){let c=e.map(x=>{let y=E.sizeFromShape(x.shape.slice(t));return qe({inputs:{x},backend:n,attrs:{shape:[-1,y]}})}),p=c.map(x=>({vals:n.readSync(x.dataId),shape:x.shape})),d=G.computeOutShape(c.map(x=>x.shape),1),f=c[0].shape[0]===1,h=cNe(p,d,r,f),m=G.computeOutShape(e.map(x=>x.shape),t),g=n.makeTensorInfo(m,r,h);return c.forEach(x=>n.disposeIntermediateTensorInfo(x)),g}if(e.length>be().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let c=Math.floor(e.length/2),p=ex(e.slice(0,c),t,n),d=ex(e.slice(c),t,n),f=ex([p,d],t,n);return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),f}if(be().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let c=new gEe(e.map(p=>p.shape),t);return n.runWebGLProgram(c,e,r)}let{tensors2D:o,outShape:a}=yEe(e,t,n),i=new mEe(o.map(c=>c.shape)),l=n.runWebGLProgram(i,o,r);o.forEach(c=>n.disposeIntermediateTensorInfo(c));let u=qe({inputs:{x:l},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(l),u}function yEe(e,t,n){let r=G.computeOutShape(e.map(o=>o.shape),t);return{tensors2D:e.map(o=>qe({inputs:{x:o},attrs:{shape:[-1,E.sizeFromShape(o.shape.slice(t))]},backend:n})),outShape:r}}function GW(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r,o=E.parseAxisParam(s,t[0].shape)[0],a=G.computeOutShape(t.map(u=>u.shape),o);if(E.sizeFromShape(a)===0)return n.makeTensorInfo(a,t[0].dtype,[]);let i=t.filter(u=>E.sizeFromShape(u.shape)>0);if(i.length===1)return Xo({inputs:{x:i[0]},backend:n});let l=i.map(u=>u.shape);return G.assertParamsConsistent(l,o),ex(i,o,n)}var bEe={kernelName:vg,backendName:"webgl",kernelFunc:GW},UW=class{constructor(e,t=!1,n=null,r=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let o=e.padInfo.top,a=e.padInfo.left,i=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,p=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,m=e.dataFormat==="channelsLast",g=m?1:2,x=m?2:3,y=m?3:1,b="",A="";n&&(r?b=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${n} }`:s?b=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${n} }`:b=` float activation(float x) { ${n} } `,A="result = activation(result);");let v=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${b} const ivec2 strides = ivec2(${i}, ${l}); const ivec2 pads = ivec2(${o}, ${a}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d2 = coords[${y}]; ivec2 xRCCorner = ivec2(coords[${g}], coords[${x}]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${p}; wR++) { int xR = xRCorner + wR * ${u}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } for (int d1 = 0; d1 < ${f}; d1 += 4) { vec4 wValues = vec4( getW(wR, wC, d1, d2), getW(wR, wC, d1 + 1, d2), getW(wR, wC, d1 + 2, d2), getW(wR, wC, d1 + 3, d2) ); if (${m}) { vec4 xValues = vec4( getX(batch, xR, xC, d1), getX(batch, xR, xC, d1 + 1), getX(batch, xR, xC, d1 + 2), getX(batch, xR, xC, d1 + 3) ); dotProd += dot(xValues, wValues); } else { vec4 xValues = vec4( getX(batch, d1, xR, xC), getX(batch, d1 + 1, xR, xC), getX(batch, d1 + 2, xR, xC), getX(batch, d1 + 3, xR, xC) ); dotProd += dot(xValues, wValues); } } if (${h===1}) { if (${m}) { dotProd += getX(batch, xR, xC, ${f}) * getW(wR, wC, ${f}, d2); } else { dotProd += getX(batch, ${f}, xR, xC) * getW(wR, wC, ${f}, d2); } } else if (${h===2}) { vec2 wValues = vec2( getW(wR, wC, ${f}, d2), getW(wR, wC, ${f} + 1, d2) ); if (${m}) { vec2 xValues = vec2( getX(batch, xR, xC, ${f}), getX(batch, xR, xC, ${f} + 1) ); dotProd += dot(xValues, wValues); } else { vec2 xValues = vec2( getX(batch, ${f}, xR, xC), getX(batch, ${f} + 1, xR, xC) ); dotProd += dot(xValues, wValues); } } else if (${h===3}) { vec3 wValues = vec3( getW(wR, wC, ${f}, d2), getW(wR, wC, ${f} + 1, d2), getW(wR, wC, ${f} + 2, d2) ); if (${m}) { vec3 xValues = vec3( getX(batch, xR, xC, ${f}), getX(batch, xR, xC, ${f} + 1), getX(batch, xR, xC, ${f} + 2) ); dotProd += dot(xValues, wValues); } else { vec3 xValues = vec3( getX(batch, ${f}, xR, xC), getX(batch, ${f} + 1, xR, xC), getX(batch, ${f} + 2, xR, xC) ); dotProd += dot(xValues, wValues); } } } } float result = dotProd; ${v} ${A} setOutput(result); } `}},AEe=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,s=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,c=e.filterDepth,p=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${s}, ${o}, ${a}); const ivec3 pads = ivec3(${t}, ${n}, ${r}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d2 = coords.u; ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xFCorner = xFRCCorner.x; int xRCorner = xFRCCorner.y; int xCCorner = xFRCCorner.z; // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; for (int wF = 0; wF < ${c}; wF++) { int xF = xFCorner + wF * ${i}; if (xF < 0 || xF >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${p}; wR++) { int xR = xRCorner + wR * ${l}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${u}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } for (int d1 = 0; d1 < ${f}; d1 += 4) { vec4 xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), getX(batch, xF, xR, xC, d1 + 2), getX(batch, xF, xR, xC, d1 + 3) ); vec4 wValues = vec4( getW(wF, wR, wC, d1, d2), getW(wF, wR, wC, d1 + 1, d2), getW(wF, wR, wC, d1 + 2, d2), getW(wF, wR, wC, d1 + 3, d2) ); dotProd += dot(xValues, wValues); } if (${h===1}) { dotProd += getX(batch, xF, xR, xC, ${f}) * getW(wF, wR, wC, ${f}, d2); } else if (${h===2}) { vec2 xValues = vec2( getX(batch, xF, xR, xC, ${f}), getX(batch, xF, xR, xC, ${f} + 1) ); vec2 wValues = vec2( getW(wF, wR, wC, ${f}, d2), getW(wF, wR, wC, ${f} + 1, d2) ); dotProd += dot(xValues, wValues); } else if (${h===3}) { vec3 xValues = vec3( getX(batch, xF, xR, xC, ${f}), getX(batch, xF, xR, xC, ${f} + 1), getX(batch, xF, xR, xC, ${f} + 2) ); vec3 wValues = vec3( getW(wF, wR, wC, ${f}, d2), getW(wF, wR, wC, ${f} + 1, d2), getW(wF, wR, wC, ${f} + 2, d2) ); dotProd += dot(xValues, wValues); } } } } setOutput(dotProd); } `}},vEe=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=e,this.enableShapeUniforms=xa(this.outputShape.length);let{dataFormat:n}=t,r=Us(),s=n==="channelsLast",o=s?0:1,a=s?1:2,i=this.enableShapeUniforms?"if(blockIndex < outShape[1] && pos < outShape[0]) {":`if(blockIndex < ${e[1]} && pos < ${e[0]}) {`,l="";for(let u=0;u<=1;u++)for(let c=0;c<=1;c++)l+=` blockIndex = rc.y + ${c}; pos = rc.x + ${u}; ${i} offsetY = int(blockIndex / outWidth) * stride[0] - pad[0]; d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow); if(d0 < inputShape[${o}] && d0 >= 0) { // Use custom imod instead mod. On Intel GPU, mod may generate // unexpected value. // https://github.com/tensorflow/tfjs/issues/5447 offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1]; d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) / inChannels); if(d1 < inputShape[${a}] && d1 >= 0) { ch = imod(pos, inChannels); if (${s}) { innerDims = vec2(d1, ch); result[${u*2+c}] = getChannel( getA(d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); result[${u*2+c}] = getChannel( getA(ch, int(innerDims.x), int(innerDims.y)), innerDims); } } } } `;this.userCode=` void main() { ivec2 rc = getOutputCoords(); vec4 result = vec4(0); int blockIndex, pos, offsetY, d0, offsetX, d1, ch; vec2 innerDims; ${l} ${r.output} = result; } `}};function jW({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:o=null,leakyreluAlpha:a=0,activation:i=null}){let l=e.shape,u=r.texData.get(e.dataId),c=n.inChannels,p=l[0]*l[1]*l[2],d=n.outChannels,f=n.dataFormat==="channelsLast",h=!1,m=!1,g,x=[];if(!((p===1||d===1)&&c>FW)&&u.isPacked&&f&&u.texture!=null&&l[2]%2!=0&&E.arraysEqual(u.shape.slice(-3),l.slice(-3))){let A=l[0]*l[1]*(l[2]+1),v={dataId:e.dataId,shape:[1,A,n.inChannels],dtype:e.dtype},w=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,E.assert(tA(u.shape,v.shape),()=>`packed reshape ${u.shape} to ${v.shape} isn't free`);let k=qe({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});x.push(k);let I=B5({a:v,b:k,backend:r,transposeA:h,transposeB:m,bias:s,activation:i,preluActivationWeights:o,leakyreluAlpha:a}),N=r.texData.get(I.dataId);E.assert(N.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=w,N.shape=n.outShape,g=Xo({inputs:{x:I},backend:r}),g.shape=n.outShape,x.push(I)}else{let A=f?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],v=qe({inputs:{x:e},backend:r,attrs:{shape:[1,A,n.inChannels]}}),w=qe({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),k=B5({a:v,b:w,transposeA:h,transposeB:m,backend:r,bias:s,activation:i,preluActivationWeights:o,leakyreluAlpha:a});g=qe({inputs:{x:k},backend:r,attrs:{shape:n.outShape}}),x.push(v),x.push(w),x.push(k)}for(let A of x)r.disposeIntermediateTensorInfo(A);return g}function HW({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:o=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:l,filterHeight:u,inChannels:c,outWidth:p,outHeight:d,dataFormat:f}=n,h=f==="channelsLast",m=l*u*c,g=d*p,x=[m,g],y=!0,b=!1,A=[],v=qe({inputs:{x:e},backend:r,attrs:{shape:e.shape.slice(1)}}),w=qe({inputs:{x:t},backend:r,attrs:{shape:[1,m,E.sizeFromShape(t.shape)/m]}});A.push(v),A.push(w);let k=new vEe(x,n),I=[v.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],N=r.runWebGLProgram(k,[v],"float32",I),T=qe({inputs:{x:N},backend:r,attrs:{shape:[1,x[0],x[1]]}});A.push(N),A.push(T);let _=s!=null,R=o!=null,S=i==="leakyrelu",F=i?M5(i,!0):null,B=new _W(T.shape,w.shape,[1,g,n.outChannels],y,b,_,F,R,S),W=[T,w];if(s&&W.push(s),R&&W.push(o),S){let Q=r.makeTensorInfo([],"float32",E.createScalarValue(a,"float32"));W.push(Q),A.push(Q)}let q=r.runWebGLProgram(B,W,"float32"),K=h?[1,d,p,n.outChannels]:[1,n.outChannels,d,p],J=qe({inputs:{x:q},backend:r,attrs:{shape:K}});A.push(q);for(let Q of A)r.disposeIntermediateTensorInfo(Q);return J}function wEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dataFormat:l,dilations:u,dimRoundingMode:c}=r,p=G.convertConv2DDataFormat(l),d=G.computeConv2DInfo(s.shape,o.shape,a,u,i,c,!1,p),f;if(d.filterHeight===1&&d.filterWidth===1&&d.dilationHeight===1&&d.dilationWidth===1&&d.strideHeight===1&&d.strideWidth===1&&(d.padInfo.type==="SAME"||d.padInfo.type==="VALID"))f=jW({x:s,filter:o,convInfo:d,backend:n});else if(be().getBool("WEBGL_CONV_IM2COL")&&s.shape[0]===1)f=HW({x:s,filter:o,convInfo:d,backend:n});else{let m=new UW(d);f=n.runWebGLProgram(m,[s,o],"float32")}let h=qe({inputs:{x:f},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(f),h}var kEe={kernelName:jd,backendName:"webgl",kernelFunc:wEe},IEe=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,s=e.padInfo.left,o=e.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int d2 = coords.w; // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int b = 0; b < ${e.batchSize}; b++) { for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${t} - ${r}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${n} - ${s}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } if (${o}) { float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } else { float dyValue = getDy(b, d2, yR, yC); float xValue = getX(b, d1, xR, xC); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}},CEe=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,s=e.strideWidth,o=e.dataFormat==="channelsLast",a=t-1-e.padInfo.top,i=n-1-e.padInfo.left,l=o?1:2,u=o?2:3,c=o?3:1;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[${c}]; ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${t}; wR++) { float dyR = float(dyRCorner + wR) / ${r}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${t} - 1 - wR; for (int wC = 0; wC < ${n}; wC++) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${n} - 1 - wC; for (int d2 = 0; d2 < ${e.outChannels}; d2++) { if (${o}) { float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } else { float xValue = getDy(batch, d2, idyR, idyC); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}},SEe=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,s=e.padInfo.front,o=e.padInfo.top,a=e.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; int wR = coords.y; int wC = coords.z; int d1 = coords.w; int d2 = coords.u; float dotProd = 0.0; for (int b = 0; b < ${e.batchSize}; b++) { for (int yF = 0; yF < ${e.outDepth}; yF++) { int xF = wF + yF * ${t} - ${s}; if (xF < 0 || xF >= ${e.inDepth}) { continue; } for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${n} - ${o}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${r} - ${a}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float dyValue = getDy(b, yF, yR, yC, d2); float xValue = getX(b, xF, xR, xC, d1); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}},NEe=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,s=e.strideDepth,o=e.strideHeight,a=e.strideWidth,i=t-1-e.padInfo.front,l=n-1-e.padInfo.top,u=r-1-e.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${i}, ${l}, ${u}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyFCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; float dotProd = 0.0; for (int wF = 0; wF < ${t}; wF++) { float dyF = float(dyFCorner + wF) / ${s}.0; if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) { continue; } int idyF = int(dyF); int wFPerm = ${t} - 1 - wF; for (int wR = 0; wR < ${n}; wR++) { float dyR = float(dyRCorner + wR) / ${o}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${n} - 1 - wR; for (int wC = 0; wC < ${r}; wC++) { float dyC = float(dyCCorner + wC) / ${a}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${r} - 1 - wC; for (int d2 = 0; d2 < ${e.outChannels}; d2++) { float xValue = getDy(batch, idyF, idyR, idyC, d2); float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}};function TEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:o}=t,{strides:a,pad:i,dataFormat:l,dimRoundingMode:u,filterShape:c}=r,p=G.convertConv2DDataFormat(l),d=G.computeConv2DInfo(s.shape,c,a,1,i,u,!1,p),f=new IEe(d);return n.runWebGLProgram(f,[s,o],"float32")}var _Ee={kernelName:sw,backendName:"webgl",kernelFunc:TEe};function EEe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:o}=t,{inputShape:a,strides:i,pad:l,dataFormat:u,dimRoundingMode:c}=r,p=G.convertConv2DDataFormat(u),d=G.computeConv2DInfo(a,o.shape,i,1,l,c,!1,p),f=new CEe(d);return n.runWebGLProgram(f,[s,o],"float32")}var REe={kernelName:Hd,backendName:"webgl",kernelFunc:EEe};function DEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dilations:l}=r,u=G.computeConv3DInfo(s.shape,o.shape,a,l,i),c=new AEe(u);return n.runWebGLProgram(c,[s,o],"float32")}var $Ee={kernelName:L1,backendName:"webgl",kernelFunc:DEe};function FEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:o}=t,{strides:a,pad:i,filterShape:l}=r,u=G.computeConv3DInfo(s.shape,l,a,1,i),c=new SEe(u);return n.runWebGLProgram(c,[s,o],"float32")}var OEe={kernelName:ow,backendName:"webgl",kernelFunc:FEe};function PEe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:o}=t,{pad:a,strides:i,inputShape:l}=r,u=G.computeConv3DInfo(l,o.shape,i,1,a),c=new NEe(u);return n.runWebGLProgram(c,[s,o],"float32")}var MEe={kernelName:aw,backendName:"webgl",kernelFunc:PEe},zEe=TW+` return cos(x); `,LEe=tn({opSnippet:zEe}),BEe={kernelName:qd,backendName:"webgl",kernelFunc:LEe},VEe=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `,WEe=tn({opSnippet:VEe}),GEe={kernelName:Kd,backendName:"webgl",kernelFunc:WEe},UEe=class{constructor(e,t,n,r,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[o,a,i,l]=e,[u]=t,[c,p]=n;this.outputShape=[u,c,p,l];let d=r==="bilinear"?1:0,[f,h]=[`${a-1}.0`,`${i-1}.0`],[m,g,x]=c>1?[`${(a-1)/(c-1)}`,"(y2-y1) * height_ratio",`y1*${f} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${f}`],[y,b,A]=p>1?[`${(i-1)/(p-1)}`,"(x2-x1) * width_ratio",`x1*${h} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${h}`];this.userCode=` const float height_ratio = float(${m}); const float width_ratio = float(${y}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int y = coords[1]; int x = coords[2]; int d = coords[3]; // get box vals float y1 = getBoxes(b,0); float x1 = getBoxes(b,1); float y2 = getBoxes(b,2); float x2 = getBoxes(b,3); // get image in batch index int bInd = round(getBoxInd(b)); if(bInd < 0 || bInd >= ${o}) { return; } float height_scale = ${g}; float width_scale = ${b}; float in_y = ${x}; if( in_y < 0.0 || in_y > ${f} ) { setOutput(float(${s})); return; } float in_x = ${A}; if( in_x < 0.0 || in_x > ${h} ) { setOutput(float(${s})); return; } vec2 sourceFracIndexCR = vec2(in_x,in_y); if(${d} == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d); float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d); float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d); float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d); vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR); float top = topLeft + (topRight - topLeft) * fracCR.x; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x; float newValue = top + (bottom - top) * fracCR.y; setOutput(newValue); } else { // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestCR = ivec2(floor( sourceFracIndexCR + vec2(0.5,0.5))); float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d); setOutput(newValue); } } `}},jEe=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:o,boxInd:a}=t,{cropSize:i,method:l,extrapolationValue:u}=r,c=new UEe(s.shape,o.shape,i,l,u);return n.runWebGLProgram(c,[s,o,a],"float32")},HEe={kernelName:wg,backendName:"webgl",kernelFunc:jEe},qW=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}],this.outputShape=e;let r=e.length,s=t?"0.0":`getX(${KW(r,"coords")})`,o=e[e.length-1],a="",i="";t?(a=n?`end != ${o-1}`:"end != 0",i=n?"end + 1":"end - 1"):(a=n?`end + pow2 < ${o}`:"end >= pow2",i=n?"end + pow2":"end - pow2"),this.userCode=` void main() { ${Dn(r)} coords = getOutputCoords(); int end = ${XW(r,"coords")}; float val = ${s}; int pow2 = int(pow(2.0, index)); if (${a}) { int idx = ${i}; ${XW(r,"coords")} = idx; val += getX(${KW(r,"coords")}); } setOutput(val); } `}};function KW(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function XW(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function qEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,exclusive:a,reverse:i}=r,l=s.shape.length,u=G.getAxesPermutation([o],l),c=s;u!=null&&(c=Hs({inputs:{x:s},backend:n,attrs:{perm:u}}));let p=G.getInnerMostAxes(1,l)[0];if(p!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${s.shape.length-1} but got axis=${o}`);let d=c.shape[p],f=Xo({inputs:{x:c},backend:n});for(let h=0;h<=Math.ceil(Math.log2(d))-1;h++){let m=new qW(c.shape,!1,i),g=[[h]],x=f;f=n.runWebGLProgram(m,[f],f.dtype,g),n.disposeIntermediateTensorInfo(x)}if(a){let h=new qW(c.shape,a,i),m=f;f=n.runWebGLProgram(h,[f],f.dtype),n.disposeIntermediateTensorInfo(m)}if(u!=null){let h=G.getUndoAxesPermutation(u),m=Hs({inputs:{x:f},backend:n,attrs:{perm:h}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(c),m}return f}var KEe={kernelName:Xd,backendName:"webgl",kernelFunc:qEe};function XEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:o}=t,{size:a,binaryOutput:i}=r;if(s.shape.length===1){let l=n.readSync(s.dataId),u=n.readSync(o.dataId),c=fW(l,u,o.dtype,o.shape,a);return n.makeTensorInfo([a],o.dtype,c)}else if(s.shape.length===2){let l=n.bufferSync(s),u=n.bufferSync(o),c=lNe(l,u,a,i);return n.makeTensorInfo(c.shape,o.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${s.shape.length}.`)}var ZEe={kernelName:iw,backendName:"webgl",kernelFunc:XEe},YEe=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int h = ${this.getHeightCoordString()}; int w = ${this.getWidthCoordString()}; int d = ${this.getDepthCoordString()}; int in_h = h / ${t}; int offset_h = imod(h, ${t}); int in_w = w / ${t}; int offset_w = imod(w, ${t}); int offset_d = (offset_h * ${t} + offset_w) * ${this.getOutputDepthSize()}; int in_d = d + offset_d; float result = ${this.getInputSamplingString()}; setOutput(result); } `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function JEe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockSize:o,dataFormat:a}=r;E.assert(o>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${o}`);let i=s.shape[0],l=a==="NHWC"?s.shape[1]:s.shape[2],u=a==="NHWC"?s.shape[2]:s.shape[3],c=a==="NHWC"?s.shape[3]:s.shape[1],p=l*o,d=u*o,f=c/(o*o),h=a==="NHWC"?[i,p,d,f]:[i,f,p,d],m=new YEe(h,o,a);return n.runWebGLProgram(m,[s],s.dtype)}var QEe={kernelName:kg,backendName:"webgl",kernelFunc:JEe},ZW=class{constructor(e,t=!1,n=null,r=!1,s=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=xa(this.outputShape.length);let o=e.filterHeight,a=e.filterWidth,i=e.outChannels/e.inChannels,l="",u="";n&&(r?l=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${n} }`:s?l=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${n} }`:l=` float activation(float x) { ${n} } `,u="result = activation(result);");let c=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${l} void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; ivec2 xRCCorner = coords.yz * strides - pads; int d2 = coords.w; int d1 = d2 / ${i}; int q = d2 - d1 * ${i}; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations. for (int wR = 0; wR < ${o}; wR++) { int xR = xRCorner + wR * dilations[0]; if (xR < 0 || xR >= inDims[0]) { continue; } for (int wC = 0; wC < ${a}; wC++) { int xC = xCCorner + wC * dilations[1]; if (xC < 0 || xC >= inDims[1]) { continue; } float xVal = getX(batch, xR, xC, d1); float wVal = getW(wR, wC, d1, q); dotProd += xVal * wVal; } } float result = dotProd; ${c} ${u} setOutput(result); } `}},YW=class{constructor(e,t=!1,n=null,r=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=xa(this.outputShape.length);let o=e.outChannels/e.inChannels,a=e.padInfo.left,i=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,p=c,d=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) { `;for(let x=0;x<(p+1)/2;x++){let y=x*2;if(d+=` xC = xCCorner + ${y*l}; `,i===1){if(y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { xTexelC${y}.zw = vec2(0.0); } xTexelC${y}Ready = 1; } `,l===1&&y>0?d+=` xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy); `:d+=` xCOffset = xC + 1 - 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { previous.zw = vec2(0.0); } xC${y} = vec4(previous.zw, xTexelC${y}.xy); } else { xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy); } `):d+=` if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${y}.zw = vec2(0.0); } xTexelC${y}Ready = 1; } xC${y} = xTexelC${y}; `,y+1= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { xTexelC${y+1} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { xTexelC${y+1}.zw = vec2(0.0); } xTexelC${y+1}Ready = 1; } `,l>1&&(d+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xCOffset, d1); xTexelC${y}Ready = 1; } `),d+=` xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy); `):b===1?d+=` xC${y+1} = xTexelC${y}; `:d+=` xCOffset = xC + ${b}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { xTexelC${y+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${y+1}.zw = vec2(0.0); } xTexelC${y+1}Ready = 1; } xC${y+1} = xTexelC${y+1}; `}}else y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { xTexelC${y}.zw = vec2(0.0); } xTexelC${y}Ready = 1; } if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y+1}Ready == 0) { xTexelC${y+1} = getX(batch, xR, xC + 1, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xC + 2 >= inDims[1]) { xTexelC${y+1}.zw = vec2(0.0); } xTexelC${y+1}Ready = 1; } xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw); `,y+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy); `)):(d+=` if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${y}.zw = vec2(0.0); } xTexelC${y}Ready = 1; } xCOffset = xC + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { xTexelC${y+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${y+1}.zw = vec2(0.); } xTexelC${y+1}Ready = 1; } xC${y} = vec4( xTexelC${y}.xy, xTexelC${y+1}.xy); `,y+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let p=G.computeConv2DInfo(s.shape,o.shape,a,c,i,u,!0),d;be().getBool("WEBGL_PACK_DEPTHWISECONV")&&p.strideWidth<=2&&p.outChannels/p.inChannels==1?d=new YW(p):d=new ZW(p);let f=[[p.padInfo.top,p.padInfo.left],[p.strideHeight,p.strideWidth],[p.dilationHeight,p.dilationWidth],[p.inHeight,p.inWidth]];return n.runWebGLProgram(d,[s,o],"float32",f)}var t4e={kernelName:Zd,backendName:"webgl",kernelFunc:e4e},n4e=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,s=e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int dm = coords.w; int d2 = d1 * ${o} + dm; float dotProd = 0.0; // TO DO: Vec4 over the batch size for (int b = 0; b < ${e.batchSize}; b++) { for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${t} - ${r}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${n} - ${s}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } } } setOutput(dotProd); } `}},r4e=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,s=e.strideWidth,o=t-1-e.padInfo.top,a=n-1-e.padInfo.left,i=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${o}, ${a}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = coords.yz - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; float dotProd = 0.0; for (int wR = 0; wR < ${t}; wR++) { float dyR = float(dyRCorner + wR) / ${r}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${t} - 1 - wR; for (int wC = 0; wC < ${n}; wC++) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${n} - 1 - wC; // TO DO: Vec4 over the channelMul for (int dm = 0; dm < ${i}; dm++) { int d2 = d1 * ${i} + dm; float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, dm); dotProd += xValue * wValue; } } } setOutput(dotProd); } `}};function s4e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:o}=t,{strides:a,dilations:i,pad:l,dimRoundingMode:u,filterShape:c}=r,p=G.computeConv2DInfo(s.shape,c,a,i,l,u,!0),d=new n4e(p);return n.runWebGLProgram(d,[s,o],"float32")}var o4e={kernelName:lw,backendName:"webgl",kernelFunc:s4e};function a4e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:o}=t,{strides:a,dilations:i,pad:l,dimRoundingMode:u,inputShape:c}=r,p=G.computeConv2DInfo(c,o.shape,a,i,l,u,!0),d=new r4e(p);return n.runWebGLProgram(d,[s,o],"float32")}var i4e={kernelName:uw,backendName:"webgl",kernelFunc:a4e},l4e=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } `}};function u4e(e){let{inputs:t,backend:n}=e,{x:r}=t,s=[...r.shape,...r.shape],o=E.sizeFromShape(r.shape),a=qe({inputs:{x:r},backend:n,attrs:{shape:[o]}}),i=new l4e(o),l=n.runWebGLProgram(i,[a],a.dtype),u=qe({inputs:{x:l},backend:n,attrs:{shape:s}});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(l),u}var c4e={kernelName:cw,backendName:"webgl",kernelFunc:u4e},p4e=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:r,strideHeight:s,strideWidth:o,filterHeight:a,filterWidth:i,dilationHeight:l,dilationWidth:u}=e,{top:c,left:p}=r;this.userCode=` const ivec2 strides = ivec2(${s}, ${o}); const ivec2 pads = ivec2(${c}, ${p}); const float neg_infinity = -3.4e38; void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.w; ivec2 outTopLeftCorner = coords.yz * strides - pads; int hBeg = outTopLeftCorner.x; int wBeg = outTopLeftCorner.y; float curVal = neg_infinity; for (int h = 0; h < ${a}; h++) { int hIn = hBeg + h * ${l}; if (hIn >= 0 && hIn < ${t}) { for (int w = 0; w < ${i}; w++) { int wIn = wBeg + w * ${u}; if (wIn >= 0 && wIn < ${n}) { float xVal = getX(batch, hIn, wIn, d1); float wVal = getW(h, w, d1); float val = xVal + wVal; if (val > curVal) { curVal = val; } } } } } float result = curVal; setOutput(result); } `}};function d4e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dilations:l}=r,u=G.computeDilation2DInfo(s.shape,o.shape,a,i,"NHWC",l),c,p=new p4e(u);c=n.runWebGLProgram(p,[s,o],"float32");let d=qe({inputs:{x:c},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(c),d}var f4e={kernelName:B1,backendName:"webgl",kernelFunc:d4e};function h4e(e){let{inputs:t,backend:n,attrs:r}=e,{equation:s}=r,o=t,{allDims:a,summedDims:i,idDims:l}=G.decodeEinsumEquation(s,o.length);G.checkEinsumDimSizes(a.length,l,o);let{path:u,steps:c}=G.getEinsumComputePath(i,l),p=c.length,d=null,f=a.length,h=[];for(let m=0;m=0&&(d=L5({inputs:{x:d},backend:n,attrs:{axis:u[m]-(a.length-f),keepDims:!1}}),h.push(d)),f--)}for(let m of h)m!==d&&n.disposeIntermediateTensorInfo(m);return d}var m4e={kernelName:fw,backendName:"webgl",kernelFunc:h4e},g4e="return (x >= 0.0) ? x : (exp(x) - 1.0);",x4e=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; `,y4e=tn({opSnippet:g4e,packedOpSnippet:x4e}),b4e={kernelName:Jd,backendName:"webgl",kernelFunc:y4e},A4e="return (b >= 1.0) ? a : a * (b + 1.0);",v4e=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,w4e=e=>{let{inputs:t,backend:n}=e,{dy:r,y:s}=t,o=be().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new rA(v4e,r.shape,s.shape):new J0(A4e,r.shape,s.shape);return n.runWebGLProgram(o,[r,s],r.dtype)},k4e={kernelName:hw,backendName:"webgl",kernelFunc:w4e},I4e=` return vec4(equal(a, b)); `,C4e="return float(a == b);",S4e=ks({opSnippet:C4e,packedOpSnippet:I4e,dtype:"bool",cpuKernelImpl:pNe}),N4e={kernelName:Cg,backendName:"webgl",kernelFunc:S4e},T4e=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = ${G.ERF_P}; float a1 = ${G.ERF_A1}; float a2 = ${G.ERF_A2}; float a3 = ${G.ERF_A3}; float a4 = ${G.ERF_A4}; float a5 = ${G.ERF_A5}; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); `,_4e=tn({opSnippet:T4e}),E4e={kernelName:Ig,backendName:"webgl",kernelFunc:_4e},JW="return exp(x);",QW=tn({opSnippet:JW,packedOpSnippet:JW,cpuKernelImpl:dNe}),R4e={kernelName:Qd,backendName:"webgl",kernelFunc:QW};function BR(e){let{inputs:t,attrs:n,backend:r}=e,{dim:s}=n,{input:o}=t,a=o.shape.length,i=o.shape.slice(),l=s;return s<0&&(E.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+s+1),i.splice(l,0,1),qe({inputs:{x:o},backend:r,attrs:{shape:i}})}var D4e={kernelName:Sg,backendName:"webgl",kernelFunc:BR},eG="return exp(x) - 1.0;",$4e=tn({opSnippet:eG,packedOpSnippet:eG,cpuKernelImpl:fNe}),F4e={kernelName:Ng,backendName:"webgl",kernelFunc:$4e},tG=class{constructor(e,t,n){this.variableNames=["real","imag"];let r=t[1];this.outputShape=t;let s=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,o=n?`${r}.0`:"1.0",a;if(e==="real")a="return real * expR - imag * expI;";else if(e==="imag")a="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` const float exponentMultiplier = ${s}; float unaryOpComplex(float real, float expR, float imag, float expI) { ${a} } float mulMatDFT(int batch, int index) { float indexRatio = float(index) / float(${r}); float exponentMultiplierTimesIndexRatio = exponentMultiplier * indexRatio; float result = 0.0; for (int i = 0; i < ${r}; i++) { // x = (-2|2 * PI / N) * index * i; float x = exponentMultiplierTimesIndexRatio * float(i); float expR = cos(x); float expI = sin(x); float real = getReal(batch, i); float imag = getImag(batch, i); result += unaryOpComplex(real, expR, imag, expI) / ${o}; } return result; } void main() { ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } `}};function nG(e,t,n){let r=n.texData.get(e.dataId),s=E.sizeFromShape(e.shape),o=e.shape[e.shape.length-1],a=s/o,i=qe({inputs:{x:e},backend:n,attrs:{shape:[a,o]}}),l=i.shape,u=new tG("real",l,t),c=new tG("imag",l,t),p=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:l},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:l}],d=n.runWebGLProgram(u,p,"float32"),f=n.runWebGLProgram(c,p,"float32"),h=sp({inputs:{real:d,imag:f},backend:n});n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f);let m=qe({inputs:{x:h},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(h),m}function O4e(e){let{inputs:t,backend:n}=e,{input:r}=t;return nG(r,!1,n)}var P4e={kernelName:mw,backendName:"webgl",kernelFunc:O4e},M4e=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } `}};function aA(e){let{backend:t,attrs:n}=e,{shape:r,value:s}=n,{dtype:o}=n;if(o=o||E.inferDtype(s),o==="string"){let a=E.getArrayFromDType(o,E.sizeFromShape(r));return a.fill(s),t.makeTensorInfo(r,o,a)}else{let a=new M4e(r,s),i=[[s]];return t.runWebGLProgram(a,[],o,i)}}var z4e={kernelName:V1,backendName:"webgl",kernelFunc:aA},L4e=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; int coordX = ${t} - x - 1; float outputValue; if(coordX >= 0 && coordX < ${t}) { outputValue = getImage(coords[0], coords[1], coordX, coords[3]); } else { outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); } setOutput(outputValue); } `}},B4e={kernelName:Tg,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,s=new L4e(n.shape);return r.runWebGLProgram(s,[n],n.dtype)}},rG="return floor(x);",V4e=tn({opSnippet:rG,packedOpSnippet:rG,cpuKernelImpl:hNe}),W4e={kernelName:ef,backendName:"webgl",kernelFunc:V4e},G4e=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); if (ib != 0) { // Windows (D3D) wants guaranteed non-zero int division at compile-time. return float(idiv(ia, ib, s)); } else { return NAN; } `,U4e=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); ivec4 result = ivec4(0); vec4 s = sign(a) * sign(b); // Windows (D3D) wants guaranteed non-zero int division at compile-time. if (cond[0]) { result[0] = idiv(ia[0], ib[0], s[0]); } if (cond[1]) { result[1] = idiv(ia[1], ib[1], s[1]); } if (cond[2]) { result[2] = idiv(ia[2], ib[2], s[2]); } if (cond[3]) { result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); `,j4e=ks({opSnippet:G4e,packedOpSnippet:U4e,dtype:"int32"}),H4e={kernelName:tf,backendName:"webgl",kernelFunc:j4e},q4e=class{constructor(e){this.variableNames=["A"];let t=Us(),[n,r]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}.0, ${n}.0); vec4 values = ${t.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } setOutput(floor(value * 255.0 + 0.5)); } `}},K4e=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Us(),[n,r]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec4 result = vec4(0.); for(int row=0; row<=1; row++) { for(int col=0; col<=1; col++) { texC = coords[1] + row; depth = coords[2] + col; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}.0, ${n}.0); vec4 values = ${t.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } result[row * 2 + col] = floor(value * 255.0 + 0.5); } } ${t.output} = result; } `}},X4e={kernelName:Pw,backendName:"webgl",kernelFunc:Z4e},tx;function Z4e(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:s}=t,{numChannels:o}=r,a=typeof HTMLVideoElement!="undefined"&&s instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&s instanceof HTMLImageElement,[l,u]=a?[s.videoWidth,s.videoHeight]:[s.width,s.height],c=[u,l],p=[u,l,o];(i||a)&&(tx==null&&(tx=document.createElement("canvas").getContext("2d")),tx.canvas.width=l,tx.canvas.height=u,tx.drawImage(s,0,0,l,u),s=tx.canvas);let d=n.makeTensorInfo(c,"int32");n.texData.get(d.dataId).usage=ma.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(d.dataId),s);let f=be().getBool("WEBGL_PACK")?new K4e(p):new q4e(p),h=n.runWebGLProgram(f,[d],"int32");return n.disposeData(d.dataId),h}function Y4e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=r,m=G.convertConv2DDataFormat(c),g=G.computeConv2DInfo(s.shape,o.shape,l,p,u,d,!1,m),x,y=[];if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=jW({x:s,filter:o,convInfo:g,backend:n,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:h});else if(be().getBool("WEBGL_CONV_IM2COL")&&s.shape[0]===1)x=HW({x:s,filter:o,convInfo:g,backend:n,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:h});else{let A=a!=null,v=i!=null,w=f==="leakyrelu",k=f?M5(f,!1):null,I=new UW(g,A,k,v,w),N=[s,o];if(a&&N.push(a),i&&N.push(i),w){let T=n.makeTensorInfo([],"float32",E.createScalarValue(h,"float32"));N.push(T),y.push(T)}x=n.runWebGLProgram(I,N,"float32")}let b=qe({inputs:{x},backend:n,attrs:{shape:g.outShape}});return y.push(x),y.forEach(A=>n.disposeIntermediateTensorInfo(A)),b}var J4e={kernelName:Mf,backendName:"webgl",kernelFunc:Y4e};function Q4e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dilations:c,dimRoundingMode:p,activation:d,leakyreluAlpha:f}=r,h=[],m=c;m==null&&(m=[1,1]),E.assert(G.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let g=G.computeConv2DInfo(s.shape,o.shape,l,m,u,p,!0),x=be().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels==1,y=d?M5(d,x):null,b=[s,o],A=a!=null,v=i!=null,w=d==="leakyrelu";if(A&&b.push(a),v&&b.push(i),w){let T=n.makeTensorInfo([],"float32",E.createScalarValue(f,"float32"));b.push(T),h.push(T)}let k;x?k=new YW(g,A,y,v,w):k=new ZW(g,A,y,v,w);let I=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],N=n.runWebGLProgram(k,b,"float32",I);return h.forEach(T=>n.disposeIntermediateTensorInfo(T)),N}var eRe={kernelName:zf,backendName:"webgl",kernelFunc:Q4e},tRe=class{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;let r=Dn(t.length),s=Dn(n.length),o=this.sliceDim>1?"strides[j]":"strides";this.userCode=` ${r} strides = ${r}(${this.strides}); void main() { ${s} coords = getOutputCoords(); int flattenIndex = 0; for (int j = 0; j < ${this.sliceDim}; j++) { int index = round(getIndices(coords[0], j)); flattenIndex += index * ${o}; } setOutput(getX(flattenIndex, coords[1])); } `}};function nRe(e){let{inputs:t,backend:n}=e,{params:r,indices:s}=t,o=s.shape,a=o[o.length-1],i=E.sizeFromShape(r.shape),[l,u,c,p]=G.prepareAndValidate(r,s),d=qe({inputs:{x:s},backend:n,attrs:{shape:[u,a]}}),f=qe({inputs:{x:r},backend:n,attrs:{shape:[E.sizeFromShape(r.shape)/c,c]}});if(n.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let x=n.readSync(s.dataId),y=n.bufferSync(r),b=mNe(x,y,r.dtype,u,a,c,p,r.shape,i);return n.makeTensorInfo(l,r.dtype,b.values)}let h=new tRe(a,p,[u,c]),m=n.runWebGLProgram(h,[f,d],f.dtype),g=qe({inputs:{x:m},backend:n,attrs:{shape:l}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),g}var rRe={kernelName:Eg,backendName:"webgl",kernelFunc:nRe},sRe=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=Dn(this.rank),r=oRe(e,2);this.userCode=` void main() { ${n} resRC = getOutputCoords(); setOutput(getA(${r})); } `}};function oRe(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let s=0;sn.disposeIntermediateTensorInfo(v)),n.makeTensorInfo(u.outputShape,A.dtype,A.values)}let m=new sRe(d.shape,h),g=n.runWebGLProgram(m,[d,f],d.dtype);p.push(g);let x=qe({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return p.forEach(y=>n.disposeIntermediateTensorInfo(y)),x}var aRe={kernelName:_g,backendName:"webgl",kernelFunc:sG},iRe="return float(a > b);",lRe=` return vec4(greaterThan(a, b)); `,uRe=ks({opSnippet:iRe,packedOpSnippet:lRe,cpuKernelImpl:xNe,dtype:"bool"}),cRe={kernelName:Rg,backendName:"webgl",kernelFunc:uRe},pRe="return float(a >= b);",dRe=` return vec4(greaterThanEqual(a, b)); `,fRe=ks({opSnippet:pRe,packedOpSnippet:dRe,dtype:"bool",cpuKernelImpl:yNe}),hRe={kernelName:rf,backendName:"webgl",kernelFunc:fRe};function mRe(e){let{inputs:t,backend:n}=e,{input:r}=t;return nG(r,!0,n)}var gRe={kernelName:gw,backendName:"webgl",kernelFunc:mRe},xRe="return float(!isnan(x) && !isinf(x));",yRe=tn({opSnippet:xRe,dtype:"bool"}),bRe={kernelName:Dg,backendName:"webgl",kernelFunc:yRe},ARe="return float(isinf(x));",vRe=tn({opSnippet:ARe,dtype:"bool"}),wRe={kernelName:$g,backendName:"webgl",kernelFunc:vRe},kRe="return float(isnan(x));",IRe=tn({opSnippet:kRe,dtype:"bool"}),CRe={kernelName:Fg,backendName:"webgl",kernelFunc:IRe},SRe="return float(a < b);",NRe=` return vec4(lessThan(a, b)); `,TRe=ks({opSnippet:SRe,packedOpSnippet:NRe,cpuKernelImpl:bNe,dtype:"bool"}),_Re={kernelName:Og,backendName:"webgl",kernelFunc:TRe},ERe="return float(a <= b);",RRe=` return vec4(lessThanEqual(a, b)); `,DRe=ks({opSnippet:ERe,packedOpSnippet:RRe,cpuKernelImpl:ANe,dtype:"bool"}),$Re={kernelName:Pg,backendName:"webgl",kernelFunc:DRe};function FRe(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:o}=n,a=vNe(r,s,o);return t.makeTensorInfo([a.length],"float32",a)}var ORe={kernelName:yw,backendName:"webgl",kernelFunc:FRe},PRe=`if (x < 0.0) return NAN; return log(x);`,MRe=` vec4 result = log(x); vec4 isNaN = vec4(lessThan(x, vec4(0.0))); result.r = isNaN.r == 1.0 ? NAN : result.r; result.g = isNaN.g == 1.0 ? NAN : result.g; result.b = isNaN.b == 1.0 ? NAN : result.b; result.a = isNaN.a == 1.0 ? NAN : result.a; return result; `,zRe=tn({opSnippet:PRe,packedOpSnippet:MRe,cpuKernelImpl:wNe}),LRe={kernelName:af,backendName:"webgl",kernelFunc:zRe},BRe="return log(1.0 + x);",VRe=tn({opSnippet:BRe}),WRe={kernelName:Mg,backendName:"webgl",kernelFunc:VRe},GRe="return float(a >= 1.0 && b >= 1.0);",URe=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,jRe=ks({opSnippet:GRe,packedOpSnippet:URe,dtype:"bool"}),HRe={kernelName:zg,backendName:"webgl",kernelFunc:jRe},qRe="return float(!(x >= 1.0));",KRe=tn({opSnippet:qRe}),XRe={kernelName:W1,backendName:"webgl",kernelFunc:KRe},ZRe="return float(a >= 1.0 || b >= 1.0);",YRe=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,JRe=ks({opSnippet:ZRe,packedOpSnippet:YRe,dtype:"bool"}),QRe={kernelName:G1,backendName:"webgl",kernelFunc:JRe},e7e=class{constructor(e,t,n,r,s){this.variableNames=["x"],this.outputShape=[];let o=t,a=e[3]-1;this.outputShape=e;let i,l=`float(${n}) + float(${r}) * sum`;s===.5?i=`inversesqrt(${l})`:s===1?i=`1.0/(${l})`:i=`exp(log(${l}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; int d = coords[3]; float x = getX(b, r, c, d); float sum = 0.0; for (int j = -${o}; j <= ${o}; j++) { int idx = d + j; if (idx >= 0 && idx <= ${a}) { float z = getX(b, r, c, idx); sum += z * z; } } float val = x * ${i}; setOutput(val); } `}},t7e=class{constructor(e,t,n,r,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let o=t,a=e[3]-1;this.outputShape=e;let i,l=`float(${n}) + float(${r}) * sum`;s===.5?i=`inversesqrt(${l})`:s===1?i=`1.0/(${l})`:i=`exp(log(${l}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; int r = coords.y; int c = coords.z; int d = coords.w; bool hasNextCol = d < ${this.outputShape[3]}; bool hasNextRow = c < ${this.outputShape[2]}; vec4 sum = vec4(0.); vec4 xFragAtOutputCoords = getX(b, r, c, d); vec4 xAtOutputCoords = vec4( getChannel(xFragAtOutputCoords, vec2(c, d)), hasNextCol ? getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0, hasNextRow ? getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0, (hasNextRow && hasNextCol) ? getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0 ); int firstChannel = d - ${o}; vec2 cache = vec2(0.); if(firstChannel >= 0){ vec4 firstChannelFrag = getX(b, r, c, firstChannel); cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel)); if(hasNextRow){ cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel)); } } ivec2 depth = ivec2(d, d + 1); for (int j = - ${o}; j <= ${o}; j++) { ivec2 idx = depth + j; bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${a})); bool depthInRange = aboveLowerBound.x && belowUpperBound.x; bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; if(depthInRange || depthPlusOneInRange){ vec4 z = vec4(0.); vec4 xFragAtCurrentDepth; z.xz = cache.xy; if(depthPlusOneInRange && hasNextCol){ xFragAtCurrentDepth = idx.y != d ? getX(b, r, c, idx.y) : xFragAtOutputCoords; z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); if(hasNextRow){ z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); } } cache.xy = z.yw; sum += z * z; } } vec4 result = xAtOutputCoords * ${i}; setOutput(result); } `}},n7e=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:o,bias:a,alpha:i,beta:l}=r,u=be().getBool("WEBGL_PACK_NORMALIZATION")?new t7e(s.shape,o,a,i,l):new e7e(s.shape,o,a,i,l);return n.runWebGLProgram(u,[s],s.dtype)},r7e={kernelName:U1,backendName:"webgl",kernelFunc:n7e},s7e=class{constructor(e,t,n,r,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=s,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; float result = 0.0; for (int d = 0; d < ${this.depth}; ++d) { int depthBegin = int(max(0.0, float(d - ${t}))); int depthEnd = int(min(float(${this.depth}), float(d + ${t} + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = ${this.depth}; float norm = 0.0; for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd) { norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); } else { break; } } norm = float(${r}) * norm + float(${n}); for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){ if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd){ float dyi = -2.0 * float(${r}) * float(${s}) * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d) / norm; if (k == d) { dyi += pow(norm, -1.0 * ${s}); } if (k == coords[3]) { dyi *= getDy(b, r, c, d); result += dyi; } } else { break; } } } setOutput(result); } `}},o7e=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s,y:o,dy:a}=t,{depthRadius:i,bias:l,alpha:u,beta:c}=r,p=new s7e(s.shape,i,l,u,c);return n.runWebGLProgram(p,[s,o,a],s.dtype)},a7e={kernelName:bw,backendName:"webgl",kernelFunc:o7e};function i7e(e,t,n,r){let s=E.sizeFromShape(t),a=E.sizeFromShape(e.shape)/s,i=qe({inputs:{x:e},attrs:{shape:[a,s]},backend:r}),l=xh(i,e.dtype,"max",r),u=qe({inputs:{x:l},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(l),u}function oG(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reductionIndices:o,keepDims:a}=r,i=s.shape.length,l=E.parseAxisParam(o,s.shape),u=l,c=G.getAxesPermutation(u,i),p=c!=null,d=n.shouldExecuteOnCPU([s]),f=s;if(p){if(d){let b=n.texData.get(f.dataId).values,A=new Array(i);for(let k=0;k`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=G.computePool2DInfo(s.shape,o,a,u,i,l);if(c.filterWidth===1&&c.filterHeight===1&&E.arraysEqual(c.inShape,c.outShape))return Xo({inputs:{x:s},backend:n});let p=new sA(c,"max",!1);return n.runWebGLProgram(p,[s],s.dtype)}var h7e={kernelName:cf,backendName:"webgl",kernelFunc:f7e};function m7e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dataFormat:l,dimRoundingMode:u}=r,c=[1,1,1],p=G.computePool3DInfo(s.shape,o,a,c,i,u,l),d=new MR(p,"max",!1);return n.runWebGLProgram(d,[s],s.dtype)}var g7e={kernelName:j1,backendName:"webgl",kernelFunc:m7e},x7e=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,s=e.effectiveFilterHeight,o=e.effectiveFilterWidth,a=s-1-e.padInfo.top,i=o-1-e.padInfo.left,l=s*o-1;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${s}; wR += ${r}) { float dyR = float(dyRCorner + wR) / ${t}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${o}; wC++) { float dyC = float(dyCCorner + wC) / ${n}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wR * ${o} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } setOutput(dotProd); } `}},y7e=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,s=e.dilationDepth,o=e.dilationHeight,a=e.dilationWidth,i=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=i-1-e.padInfo.front,p=l-1-e.padInfo.top,d=u-1-e.padInfo.left,f=i*l*u-1;this.userCode=` const ivec3 pads = ivec3(${c}, ${p}, ${d}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < ${i}; wD += ${s}) { float dyD = float(dyDCorner + wD) / ${t}.0; if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${l}; wR += ${o}) { float dyR = float(dyRCorner + wR) / ${n}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${u}; wC += ${a}) { float dyC = float(dyCCorner + wC) / ${r}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); int maxPosValue = ${f} - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wD * ${l} * ${u} + wR * ${u} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } } setOutput(dotProd); } `}};function b7e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o,{filterSize:i,strides:l,pad:u,dimRoundingMode:c}=r,p=[1,1,1],d=G.computePool3DInfo(a.shape,i,l,p,u,c),f=new MR(d,"max",!0),h=n.runWebGLProgram(f,[a],a.dtype),m=new y7e(d),g=n.runWebGLProgram(m,[s,h],a.dtype);return n.disposeIntermediateTensorInfo(h),g}var A7e={kernelName:vw,backendName:"webgl",kernelFunc:b7e};function v7e(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o,output:a}=t,i=o;j0([o,a],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:p}=r,d=G.computePool2DInfo(i.shape,l,u,1,c,p),f=!0,h=new sA(d,"max",f),m=n.runWebGLProgram(h,[i],i.dtype),g=new x7e(d),x=n.runWebGLProgram(g,[s,m],i.dtype);return n.disposeIntermediateTensorInfo(m),x}var w7e={kernelName:Aw,backendName:"webgl",kernelFunc:v7e};function k7e(e,t,n,r){let s=new sA(n,"max",!1),o=r.runWebGLProgram(s,[e],"float32");s=new sA(n,"max",!0,!0,t);let a=r.runWebGLProgram(s,[e],"float32");return[o,a]}var I7e={kernelName:ww,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:o,pad:a,includeBatchInIndex:i}=t,l=n;E.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];E.assert(G.eitherStridesOrDilationsAreOne(o,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${u}'`);let c=G.computePool2DInfo(r.shape,s,o,u,a),[p,d]=k7e(r,i,c,l);return[p,d]}};function C7e(e,t,n,r){let s=E.sizeFromShape(t),a=E.sizeFromShape(e.shape)/s,i=qe({inputs:{x:e},attrs:{shape:[a,s]},backend:r}),l=xh(i,"float32","mean",r),u=qe({inputs:{x:l},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(l),u}var S7e={kernelName:pf,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:s,axis:o}=t,a=n,i=r.shape.length,l=E.parseAxisParam(o,r.shape),u=l,c=G.getAxesPermutation(u,i),p=c!=null,d=a.shouldExecuteOnCPU([r]),f=[],h=r;if(p){if(d){let A=a.texData.get(h.dataId).values,v=new Array(i);for(let I=0;Iu[0]+e[c]+u[1]);let r=e.length,s=Dn(r),o=t.map(u=>u[0]).join(","),a=t.map((u,c)=>u[0]+e[c]).join(","),i=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),l=n==="reflect"?0:1;if(r===1){this.userCode=` int start = ${o}; int end = ${a}; void main() { int outC = getOutputCoords(); if (outC < start) { outC = start * 2 - outC - ${l}; } else if(outC >= end) { outC = (end - 1) * 2 - outC + ${l}; } setOutput(getX(outC - start)); } `;return}this.userCode=` ${s} start = ${s}(${o}); ${s} end = ${s}(${a}); void main() { ${s} outC = getOutputCoords(); for (int i = 0; i < ${r}; i++) { if (outC[i] < start[i]) { outC[i] = start[i] * 2 - outC[i] - ${l}; } else if(outC[i] >= end[i]) { outC[i] = (end[i] - 1) * 2 - outC[i] + ${l}; } } ${s} coords = outC - start; setOutput(getX(${i})); } `}},F7e=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let r=e.length,s=Dn(r),o=t.map(f=>f[0]).join(","),a=t.map((f,h)=>f[0]+e[h]).join(","),i=js("rc",r),l=js("source",r),u=`${i[r-1]} < ${this.outputShape[r-1]}`,c=r===1?"source":`vec2(${l.slice(-2).join()})`,p=n==="reflect"?0:1,d="";if(r===1){let f=` ${s} source = rc; if (source < start) { source = start * 2 - source - ${p}; } else if (source >= end) { source = (end - 1) * 2 - source + ${p}; } source -= start; `;d=` ${s} rc = outputLoc; ${f} result[0] = getChannel(getX(${l.join()}), ${c}); ${i[r-1]} += 1; if(${u}) { ${f} result[1] = getChannel(getX(${l.join()}), ${c}); } `}else{let f=` ${s} source = rc; ${s} lt = ${s}(lessThan(source, start)); ${s} gte = ${s}(greaterThanEqual(source, end)); ${s} orig = 1 - (lt + gte); source = orig * source + lt * (start * 2 - source - ${p}) + gte * ((end - 1) * 2 - source + ${p}); source -= start; `;d=` ${s} rc = outputLoc; ${f} result[0] = getChannel(getX(${l.join()}), ${c}); ${i[r-1]} += 1; if(${u}) { ${f} result[1] = getChannel(getX(${l.join()}), ${c}); } rc = outputLoc; ${i[r-2]} += 1; if(${i[r-2]} < ${this.outputShape[r-2]}) { ${f} result[2] = getChannel(getX(${l.join()}), ${c}); ${i[r-1]} += 1; if(${u}) { ${f} result[3] = getChannel(getX(${l.join()}), ${c}); } } `}this.userCode=` const ${s} start = ${s}(${o}); const ${s} end = ${s}(${a}); void main() { ${s} outputLoc = getOutputCoords(); vec4 result = vec4(0.); ${d} setOutput(result); } `}},O7e=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:s,mode:o}=n,a=be().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new F7e(r.shape,s,o):new $7e(r.shape,s,o);return t.runWebGLProgram(a,[r],r.dtype)},P7e={kernelName:hf,backendName:"webgl",kernelFunc:O7e},M7e=`if (b == 0.0) return NAN; return mod(a, b);`,z7e=` vec4 result = mod(a, b); vec4 isNaN = vec4(equal(b, vec4(0.0))); `+P5+` return result; `,L7e=ks({opSnippet:M7e,packedOpSnippet:z7e}),B7e={kernelName:Lg,backendName:"webgl",kernelFunc:L7e},V7e=class{constructor(e,t,n){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,n],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; float r = random(seed); float cdf = 0.0; for (int i = 0; i < ${t-1}; i++) { cdf += getProbs(batch, i); if (r < cdf) { setOutput(float(i)); return; } } // If no other event happened, last event happened. setOutput(float(${t-1})); } `}},W7e=` if (a == b) { return 1.0; }; return a / b;`,G7e=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; if(a.x == b.x) { result.x = 1.; } if(a.y == b.y) { result.y = 1.; } if(a.z == b.z) { result.z = 1.; } if(a.w == b.w) { result.w = 1.; } return result; `,aG=ks({opSnippet:W7e,packedOpSnippet:G7e,checkOutOfBounds:!0}),U7e={kernelName:Yd,backendName:"webgl",kernelFunc:aG},iG="return a - b;",lG=ks({opSnippet:iG,packedOpSnippet:iG,supportsComplex:!0,cpuKernelImpl:VNe}),j7e={kernelName:Df,backendName:"webgl",kernelFunc:lG};function uG(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:o}=r,a=E.parseAxisParam([o],s.shape),i=oG({inputs:{x:s},backend:n,attrs:{reductionIndices:a,keepDims:!1}}),l=G.expandShapeToKeepDim(i.shape,a),u=qe({inputs:{x:i},backend:n,attrs:{shape:l}}),c=lG({inputs:{a:s,b:u},backend:n}),p=QW({inputs:{x:c},backend:n}),d=L5({inputs:{x:p},backend:n,attrs:{axis:a,keepDims:!1}}),f=qe({inputs:{x:d},backend:n,attrs:{shape:l}}),h=aG({inputs:{a:p,b:f},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),h}var H7e={kernelName:Ef,backendName:"webgl",kernelFunc:uG};function q7e(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:o,seed:a,normalized:i}=r,l=i?s:uG({inputs:{logits:s},backend:n,attrs:{dim:s.shape.length-1}}),u=l.shape[0],c=l.shape[1],p=new V7e(u,c,o),d=[[a]],f=n.runWebGLProgram(p,[l],"int32",d);return i||n.disposeIntermediateTensorInfo(l),f}var K7e={kernelName:kw,backendName:"webgl",kernelFunc:q7e},cG="return -x;";function X7e(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let o=n.texData.get(r.dataId),[a,i]=NNe(o.values,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,a)}let s;return be().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new Z0(r.shape,cG):s=new rp(r.shape,cG),n.runWebGLProgram(s,[r],r.dtype)}var Z7e={kernelName:Bg,backendName:"webgl",kernelFunc:X7e},Y7e=ll.nonMaxSuppressionV3Impl;function J7e(e){G.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:o}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l}=r,u=n.readSync(s.dataId),c=n.readSync(o.dataId),{selectedIndices:p}=Y7e(u,c,a,i,l);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}var Q7e={kernelName:Wg,backendName:"webgl",kernelFunc:J7e},eDe=ll.nonMaxSuppressionV4Impl;function tDe(e){G.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:o}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l,padToMaxOutputSize:u}=r,c=n.readSync(s.dataId),p=n.readSync(o.dataId),{selectedIndices:d,validOutputs:f}=eDe(c,p,a,i,l,u);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([f]))]}var nDe={kernelName:Gg,backendName:"webgl",kernelFunc:tDe},rDe=ll.nonMaxSuppressionV5Impl;function sDe(e){G.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:o}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l,softNmsSigma:u}=r,c=n.readSync(s.dataId),p=n.readSync(o.dataId),d=a,f=i,h=l,m=u,{selectedIndices:g,selectedScores:x}=rDe(c,p,d,f,h,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var oDe={kernelName:Ug,backendName:"webgl",kernelFunc:sDe},aDe=class{constructor(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${r}), float(${n}), float(index == coords.y))); } `}},iDe=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{depth:o,onValue:a,offValue:i}=r,l=E.sizeFromShape(s.shape),u=new aDe(l,o,a,i),c=qe({inputs:{x:s},backend:n,attrs:{shape:[l]}}),p=n.runWebGLProgram(u,[c],s.dtype);n.disposeIntermediateTensorInfo(c);let d=[...s.shape,o],f=qe({inputs:{x:p},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(p),f},lDe={kernelName:gf,backendName:"webgl",kernelFunc:iDe};function U5(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let s=oA({inputs:{input:r},backend:n}),o=U5({inputs:{x:s},backend:n}),a=G5({inputs:{input:r},backend:n}),i=U5({inputs:{x:a},backend:n}),l=sp({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i),l}else return aA({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var uDe={kernelName:u0,backendName:"webgl",kernelFunc:U5};function pG(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(r.dtype==="complex64"){let s=oA({inputs:{input:r},backend:n}),o=pG({inputs:{x:s},backend:n}),a=G5({inputs:{input:r},backend:n}),i=U5({inputs:{x:a},backend:n}),l=sp({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i),l}else return aA({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var cDe={kernelName:jg,backendName:"webgl",kernelFunc:pG};function pDe(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return BR({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let o=t[0].shape,a=t[0].dtype;t.forEach(c=>{E.assertShapesMatch(o,c.shape,"All tensors passed to stack must have matching shapes"),E.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=t.map(c=>{let p=BR({inputs:{input:c},backend:n,attrs:{dim:s}});return i.push(p),p}),u=GW({inputs:l,backend:n,attrs:{axis:s}});return i.forEach(c=>n.disposeIntermediateTensorInfo(c)),u}var dDe={kernelName:Hg,backendName:"webgl",kernelFunc:pDe},fDe=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let r=e.length,s=Dn(r),o=t.map(l=>l[0]).join(","),a=t.map((l,u)=>l[0]+e[u]).join(","),i=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);if(r===1){this.userCode=` int start = ${o}; int end = ${a}; void main() { int outC = getOutputCoords(); if (outC < start || outC >= end) { setOutput(value); } else { setOutput(getX(outC - start)); } } `;return}this.userCode=` ${s} start = ${s}(${o}); ${s} end = ${s}(${a}); void main() { ${s} outC = getOutputCoords(); if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { setOutput(value); } else { ${s} coords = outC - start; setOutput(getX(${i})); } } `}},hDe=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let r=e.length,s=Dn(r),o=t.map(h=>h[0]).join(","),a=t.map((h,m)=>h[0]+e[m]).join(","),i=js("rc",r),l=js("source",r),u=`${i[r-1]} < ${this.outputShape[r-1]}`,c=r===1?"source":`vec2(${l.slice(-2).join()})`,p=[`${s} rc = outputLoc;`,`${i[r-1]} += 1; if(${u}) { `,r===1?"":`} rc = outputLoc; ${i[r-2]} += 1; if(${i[r-2]} < ${this.outputShape[r-2]}) {`,r===1?"":` ${i[r-1]} += 1; if(${u}) {`],d=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="";for(let h=0,m=r===1?2:4;h{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:o,constantValue:a}=r;if(E.sizeFromShape(s.shape)===0){let u=o.map((c,p)=>c[0]+s.shape[p]+c[1]);return aA({backend:n,attrs:{shape:u,value:a,dtype:s.dtype}})}let i=be().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new hDe(s.shape,o,a):new fDe(s.shape,o,a),l=[[a]];return n.runWebGLProgram(i,[s],s.dtype,l)},mDe={kernelName:xf,backendName:"webgl",kernelFunc:dG},gDe=` if(a < 0.0 && floor(b) < b){ return NAN; } if (b == 0.0) { return 1.0; } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); `,xDe=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); `+P5+` return result; `,yDe=ks({opSnippet:gDe,packedOpSnippet:xDe}),bDe={kernelName:yf,backendName:"webgl",kernelFunc:yDe};function ADe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=s.shape.length,l=[],u=E.parseAxisParam(o,s.shape),c=u,p=G.getAxesPermutation(c,i),d=s;p!=null&&(d=Hs({inputs:{x:s},backend:n,attrs:{perm:p}}),c=G.getInnerMostAxes(c.length,i),l.push(d)),G.assertAxesAreInnerMostDims("prod",c,i);let f;if(n.shouldExecuteOnCPU([d])){let h=n.texData.get(d.dataId).values,{outVals:m,outShape:g,outDtype:x}=_Ne(d.shape,d.dtype,h,c);f=n.makeTensorInfo(g,x,m)}else{let[h,m]=G.computeOutAndReduceShapes(d.shape,c),g=E.sizeFromShape(m),x=qe({inputs:{x:d},backend:n,attrs:{shape:[-1,g]}}),y=Ww(s.dtype),b=xh(x,y,"prod",n);f=qe({inputs:{x:b},backend:n,attrs:{shape:h}}),l.push(x),l.push(b)}if(a){l.push(f);let h=G.expandShapeToKeepDim(f.shape,u);f=qe({inputs:{x:f},backend:n,attrs:{shape:h}})}return l.forEach(h=>n.disposeIntermediateTensorInfo(h)),f}var vDe={kernelName:qg,backendName:"webgl",kernelFunc:ADe},fG=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:o,dtype:a}=n,i=ENe(r,s,o,a);return t.makeTensorInfo([i.length],a,i)},wDe={kernelName:H1,backendName:"webgl",kernelFunc:fG},kDe="return 1.0 / x;",IDe=tn({opSnippet:kDe}),CDe={kernelName:Kg,backendName:"webgl",kernelFunc:IDe},SDe=Ti+` return (x < 0.0) ? 0.0 : x; `,NDe=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,TDe=tn({opSnippet:SDe,packedOpSnippet:NDe}),_De={kernelName:Af,backendName:"webgl",kernelFunc:TDe},EDe=Ti+` return (x < 0.0) ? 0.0 : min(6.0, x); `,RDe=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,DDe=tn({opSnippet:EDe,packedOpSnippet:RDe}),$De={kernelName:wf,backendName:"webgl",kernelFunc:DDe},FDe=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.outputShape=[];let[o,a,i,l]=e;this.outputShape=[o,t,n,l];let u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],p;s?p="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":p="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${u[0]/c[0]}, ${u[1]/c[1]}); const vec2 inputShapeRC = vec2(${a}.0, ${i}.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = ${p}; // Compute the four integer indices. ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0))); ivec2 sourceCeilRC = ivec2( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d); float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d); float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d); float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d); vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC); float top = topLeft + (topRight - topLeft) * fracRC.y; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y; float newValue = top + (bottom - top) * fracRC.x; setOutput(newValue); } `}},ODe=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[o,a,i,l]=e;this.outputShape=[o,t,n,l];let u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],p;s?p="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":p="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${u[0]/c[0]}, ${u[1]/c[1]}, ${u[1]/c[1]}); const vec3 inputShapeRC = vec3(${a}.0, ${i}.0, ${i}.0); float getAValue(int b, int r, int c, int d) { return getChannel(getA(b, r, c, d), vec2(c, d)); } void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; // Calculate values for next column in yRC.z. ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. vec3 sourceFracIndexRC = ${p}; // Compute the four integer indices. ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0))); ivec3 sourceCeilRC = ivec3( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < ${l-1}; bool hasNextRow = coords.z < ${n-1}; // In parallel, construct four corners for all four components in // packed 2x2 cell. vec4 topLeft = vec4( getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 bottomLeft = vec4( getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 topRight = vec4( getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0); vec4 bottomRight = vec4( getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0); vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC); vec4 top = mix(topLeft, topRight, fracRC.yyzz); vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz); vec4 newValue = mix(top, bottom, fracRC.x); setOutput(newValue); } `}};function PDe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:o,halfPixelCenters:a,size:i}=r,[l,u]=i,c=be().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new ODe(s.shape,l,u,o,a):new FDe(s.shape,l,u,o,a);return n.runWebGLProgram(c,[s],"float32")}var MDe={kernelName:vf,backendName:"webgl",kernelFunc:PDe},zDe=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,s]=t,[,o,a]=e,i=[n&&o>1?r-1:r,n&&a>1?s-1:s],l=[n&&o>1?o-1:o,n&&a>1?a-1:a],u=i[0]/l[0],c=i[1]/l[1],p=1/u,d=1/c,f=Math.ceil(p)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(${u}); const float widthScale = float(${c}); const float invHeightScale = float(${p}); const float invWidthScale = float(${d}); const int winHeight = int(${f}); const int winWidth = int(${h}); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(startRLerp - float(winHeight / 2)); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(startCLerp - float(winWidth / 2)); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= ${o}) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= ${a}) { continue; } float dxR = float(dyR) * heightScale; int topDxRIndex = int(floor(dxR)); int bottomDxRIndex = int(min(ceil(dxR), ${r-1}.0)); float dxRLerp = dxR - float(topDxRIndex); float inverseDxRLerp = 1.0 - dxRLerp; float dxC = float(dyC) * widthScale; int leftDxCIndex = int(floor(dxC)); int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0)); float dxCLerp = dxC - float(leftDxCIndex); float inverseDxCLerp = 1.0 - dxCLerp; if (r == topDxRIndex && c == leftDxCIndex) { // topLeft accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; } if (r == topDxRIndex && c == rightDxCIndex) { // topRight accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; } if (r == bottomDxRIndex && c == leftDxCIndex) { // bottomLeft accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; } if (r == bottomDxRIndex && c == rightDxCIndex) { // bottomRight accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; } } } // End loop over dy setOutput(accumulator); } `}};function LDe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:o}=t,{alignCorners:a}=r,i=new zDe(o.shape,s.shape,a);return n.runWebGLProgram(i,[o],o.dtype)}var BDe={kernelName:Sw,backendName:"webgl",kernelFunc:LDe},VDe=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.outputShape=[];let[o,a,i,l]=e;this.outputShape=[o,t,n,l];let u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],p=r?"0.5":"0.0",d;s?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${u[0]/c[0]}, ${u[1]/c[1]}); const vec2 inputShapeRC = vec2(${a}.0, ${i}.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${p}))); float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); setOutput(newValue); } `}},WDe=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[o,a,i,l]=e;this.outputShape=[o,t,n,l];let u=[r&&t>1?a-1:a,r&&n>1?i-1:i],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],p=r?"0.5":"0.0",d;s?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${u[0]/c[0]}, ${u[1]/c[1]}, ${u[1]/c[1]}); const vec3 inputShapeRC = vec3(${a}.0, ${i}.0, ${i}.0); float getAValue(int b, int r, int c, int d) { return getChannel(getA(b, r, c, d), vec2(c, d)); } void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; // Calculate values for next column in yRC.z. ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. vec3 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${p}))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < ${l-1}; bool hasNextRow = coords.z < ${n-1}; vec4 newValue = vec4( getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d), hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0); setOutput(newValue); } `}};function GDe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:o,halfPixelCenters:a,size:i}=r,[l,u]=i,c=be().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new WDe(s.shape,l,u,o,a):new VDe(s.shape,l,u,o,a);return n.runWebGLProgram(c,[s],s.dtype)}var UDe={kernelName:q1,backendName:"webgl",kernelFunc:GDe},jDe=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,s]=t,[,o,a]=e,i=[n&&o>1?r-1:r,n&&a>1?s-1:s],l=[n&&o>1?o-1:o,n&&a>1?a-1:a],u=i[0]/l[0],c=i[1]/l[1],p=1/u,d=1/c,f=Math.ceil(p)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(${u}); const float widthScale = float(${c}); const float invHeightScale = float(${p}); const float invWidthScale = float(${d}); const int winHeight = int(${f}); const int winWidth = int(${h}); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(floor(startRLerp - float(winHeight / 2))); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(floor(startCLerp - float(winWidth / 2))); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= ${o}) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= ${a}) { continue; } float sourceFracRow = float(${i[0]}) * (float(dyR) / float(${l[0]})); float sourceFracCol = float(${i[1]}) * (float(dyC) / float(${l[1]})); int sourceNearestRow = int(min( float(int(${r}) - 1), ${n} ? float(round(sourceFracRow)) : float(floor(sourceFracRow)))); int sourceNearestCol = int(min( float(int(${s}) - 1), ${n} ? float(round(sourceFracCol)) : float(floor(sourceFracCol)))); if (r == sourceNearestRow && c == sourceNearestCol) { accumulator += getDy(b, dyR, dyC, d); } } } // End loop over dy setOutput(accumulator); } `}};function HDe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:o}=t,{alignCorners:a}=r,i=new jDe(o.shape,s.shape,a);return n.runWebGLProgram(i,[o],o.dtype)}var qDe={kernelName:Cw,backendName:"webgl",kernelFunc:HDe},KDe=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,n===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); } `;return}let r=a=>t.indexOf(a)!==-1&&e[a]!==1?`${e[a]} - coords[${a}] - 1`:`coords[${a}]`,s=e.map((a,i)=>r(i)).join(","),o=Dn(n);this.userCode=` void main() { ${o} coords = getOutputCoords(); setOutput(getX(${s})); } `}},XDe=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let r=js("rc",n),s=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,o=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,a=Dn(n);n===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); result.r = getChannel(getX(${e[0]} - rc - 1), ${e[0]} - rc - 1); if(${s}){ result.g = getChannel(getX(${e[0]} - (rc + 1) - 1), ${e[0]} - (rc + 1) - 1); } setOutput(result); } `:this.userCode=` void main() { ${a} rc = getOutputCoords(); vec4 result = vec4(0.); result.r = ${i(r.slice())}; if(${s}){ result.g = ${l(r.slice())}; } if(${o}) { result.b = ${u(r.slice())}; if(${s}) { result.a = ${c(r.slice())}; } } setOutput(result); } `;function i(f){return p(f)}function l(f){return f[n-1]="("+f[n-1]+" + 1)",p(f)}function u(f){return f[n-2]="("+f[n-2]+" + 1)",p(f)}function c(f){return f[n-1]="("+f[n-1]+" + 1)",f[n-2]="("+f[n-2]+" + 1)",p(f)}function p(f){let h=e.map((x,y)=>d(y,f)),m=h.join(","),g=h.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${g}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function ZDe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:o}=r,a=s.shape.length,i=E.parseAxisParam(o,s.shape);if(a===0)return Xo({inputs:{x:s},backend:n});let l=be().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new XDe(s.shape,i):new KDe(s.shape,i);return n.runWebGLProgram(l,[s],s.dtype)}var YDe={kernelName:kf,backendName:"webgl",kernelFunc:ZDe},JDe=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let n=e[1],r=e[2];this.outputShape=e;let s="";typeof t=="number"?s=`float outputValue = ${t.toFixed(2)};`:s=` vec3 fill = vec3(${t.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; int y = coords[1]; float coordXFloat = (float(x) - params[0]) * params[3] - (float(y) - params[1]) * params[2]; float coordYFloat = (float(x) - params[0]) * params[2] + (float(y) - params[1]) * params[3]; int coordX = int(round(coordXFloat + params[0])); int coordY = int(round(coordYFloat + params[1])); ${s} if(coordX >= 0 && coordX < ${r} && coordY >= 0 && coordY < ${n}) { outputValue = getImage(coords[0], coordY, coordX, coords[3]); } setOutput(outputValue); } `}},QDe={kernelName:c0,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:o,center:a}=t,i=n,l=new JDe(r.shape,o),[u,c]=G.getImageCenter(a,r.shape[1],r.shape[2]),p=[[u,c,Math.sin(s),Math.cos(s)]];return i.runWebGLProgram(l,[r],r.dtype,p)}},e$e=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); if ((x - base) < 0.5) { return floor(x); } else if ((x - base) > 0.5) { return ceil(x); } else { if (mod(base, 2.0) == 0.0) { return base; } else { return base + 1.0; } } `,t$e=tn({opSnippet:e$e}),n$e={kernelName:If,backendName:"webgl",kernelFunc:t$e},r$e="return inversesqrt(x);",s$e=tn({opSnippet:r$e,cpuKernelImpl:RNe}),o$e={kernelName:Cf,backendName:"webgl",kernelFunc:s$e},hG=class{constructor(e,t,n,r,s,o,a=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=o;let i=Dn(s.length),l=Dn(o.length),u="";n===1?u="i":n===2&&(u="i, j");let c=`getIndices(${u})`,p="";r===1?p="i":r===2&&(p="i, coords[1]");let d=`getUpdates(${p})`,f=t>1?"strides[j]":"strides";this.userCode=` ${i} strides = ${i}(${s}); void main() { ${l} coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < ${e}; i++) { int flattenedIndex = 0; for (int j = 0; j < ${t}; j++) { int index = round(${c}); flattenedIndex += index * ${f}; } if (flattenedIndex == coords[0]) { sum += ${d}; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } `}};function a$e(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s,updates:o}=t,{shape:a}=r,{sliceRank:i,numUpdates:l,sliceSize:u,strides:c,outputSize:p}=G.calculateShapes(o,s,a),d=[p/u,u];if(p===0)return n.makeTensorInfo(a,s.dtype);let f=qe({inputs:{x:s},backend:n,attrs:{shape:[l,i]}}),h=qe({inputs:{x:o},backend:n,attrs:{shape:[l,u]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new hG(l,i,f.shape.length,h.shape.length,c,d),x=n.runWebGLProgram(g,[h,f,m],h.dtype),y=qe({inputs:{x},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(x),n.disposeIntermediateTensorInfo(m),y}var i$e={kernelName:Zg,backendName:"webgl",kernelFunc:a$e},l$e=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let r,s;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)s="resRC",r="resRC";else{let a=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],l=[];for(let u=0;u= 1.0) { setOutput(getA(${s})); } else { setOutput(getB(${s})); } } `}};function u$e(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:o}=t,a=new l$e(r.shape.length,s.shape,s.shape.length);return n.runWebGLProgram(a,[r,s,o],$a(s.dtype,o.dtype))}var c$e={kernelName:Yg,backendName:"webgl",kernelFunc:u$e},p$e=` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 float scaleAlpha = ${G.SELU_SCALEALPHA}; float scale = ${G.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `,d$e=tn({opSnippet:p$e}),f$e={kernelName:Jg,backendName:"webgl",kernelFunc:d$e},mG="return 1.0 / (1.0 + exp(-1.0 * x));",h$e=tn({opSnippet:mG,packedOpSnippet:mG,cpuKernelImpl:DNe}),m$e={kernelName:Nf,backendName:"webgl",kernelFunc:h$e},g$e=` if (isnan(x)) { return 0.0; } return sign(x); `,x$e=tn({opSnippet:g$e}),y$e={kernelName:t0,backendName:"webgl",kernelFunc:x$e},b$e=TW+` return sin(x); `,A$e=tn({opSnippet:b$e}),v$e={kernelName:Sf,backendName:"webgl",kernelFunc:A$e},w$e=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `,k$e=tn({opSnippet:w$e}),I$e={kernelName:e0,backendName:"webgl",kernelFunc:k$e},C$e=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; bool too_large = x > -threshold; bool too_small = x < threshold; float result; float exp_x = exp(x); if (too_large){ result = x; } else if (too_small){ result = exp_x; } else{ result = log(exp_x + 1.0); } return result; `,S$e=tn({opSnippet:C$e}),N$e={kernelName:n0,backendName:"webgl",kernelFunc:S$e},T$e=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,paddings:a}=r;E.assert(s.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=o.reduce((x,y)=>x*y),l=[[0,0]];l.push(...a);for(let x=1+o.length;xn.disposeIntermediateTensorInfo(x)),g},_$e={kernelName:r0,backendName:"webgl",kernelFunc:T$e};function E$e(e){let{inputs:t,backend:n}=e,{indices:r,values:s,denseShape:o,defaultValue:a}=t;if(o.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${o.shape}`);if(r.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${r.shape}`);if(s.shape.length!==1)throw new Error(`Values must be a vector, saw: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw: ${a.shape}`);let i=n.readSync(r.dataId),l=n.readSync(s.dataId),u=n.readSync(o.dataId),c=n.readSync(a.dataId)[0],[p,d,f,h,m]=FNe(i,r.shape,r.dtype,l,s.dtype,u,c);return[n.makeTensorInfo(d,r.dtype,p),n.makeTensorInfo([d[0]],s.dtype,f),n.makeTensorInfo([h.length],"bool",new Uint8Array(h.map(g=>Number(g)))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}var R$e={kernelName:Nw,backendName:"webgl",kernelFunc:E$e};function D$e(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:s,newShape:o}=t;if(r.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${o.shape}`);let a=Array.from(n.readSync(s.dataId)),i=n.readSync(r.dataId),l=Array.from(n.readSync(o.dataId)),[u,c,p]=ONe(i,r.shape,r.dtype,a,l);return[n.makeTensorInfo(c,r.dtype,u),n.makeTensorInfo([p.length],o.dtype,new Int32Array(p))]}var $$e={kernelName:Tw,backendName:"webgl",kernelFunc:D$e};function F$e(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.readSync(r.dataId),i=n.readSync(s.dataId),l=n.readSync(o.dataId),[u,c]=mW(a,r.shape,r.dtype,i,l,!0);return n.makeTensorInfo(c,r.dtype,u)}var O$e={kernelName:_w,backendName:"webgl",kernelFunc:F$e};function P$e(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.readSync(r.dataId),i=n.readSync(s.dataId),l=n.readSync(o.dataId),[u,c]=mW(a,r.shape,r.dtype,i,l);return n.makeTensorInfo(c,r.dtype,u)}var M$e={kernelName:Ew,backendName:"webgl",kernelFunc:P$e};function z$e(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:o,defaultValue:a}=t,{outputShape:i}=r,{sliceRank:l,numUpdates:u,strides:c,outputSize:p}=G.calculateShapes(o,s,i),d=!1,f=new hG(u,l,s.shape.length,o.shape.length,c,[p,1],d),h=n.runWebGLProgram(f,[o,s,a],o.dtype),m=qe({inputs:{x:h},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(h),m}var L$e={kernelName:Rw,backendName:"webgl",kernelFunc:z$e};function B$e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:o,axis:a}=r,i=E.parseAxisParam(a,s.shape)[0],l=G.prepareSplitSize(s,o,i),u=s.shape.length,c=new Array(u).fill(0),p=s.shape.slice();return l.map(d=>{let f=[...p];f[i]=d;let h=Q0({inputs:{x:s},backend:n,attrs:{begin:c,size:f}});return c[i]+=d,h})}var V$e={kernelName:s0,backendName:"webgl",kernelFunc:B$e},gG="return sqrt(x);",W$e=tn({opSnippet:gG,packedOpSnippet:gG,cpuKernelImpl:PNe}),G$e={kernelName:Tf,backendName:"webgl",kernelFunc:W$e},U$e="return x * x;",j$e=tn({opSnippet:U$e}),H$e={kernelName:K1,backendName:"webgl",kernelFunc:j$e},xG="return (a - b) * (a - b);",q$e=ks({opSnippet:xG,packedOpSnippet:xG}),K$e={kernelName:Rf,backendName:"webgl",kernelFunc:q$e};function X$e({inputs:e,attrs:t,backend:n}){let{x:r}=e,s=Ti+` return x > 0.0 ? 1.0 : float(${t.alpha}); `,o=new rp(r.shape,s);return n.runWebGLProgram(o,[r],r.dtype)}var Z$e={kernelName:Pc,backendName:"webgl",kernelFunc:X$e},Y$e=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,s=Dn(n.length),o=Dn(n.length),a="";if(r===1)a="coords * strides + begin";else{let i=0;a=n.map((l,u)=>(i++,n.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${i-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=` ${s} begin = ${s}(${e}); ${s} strides = ${s}(${t}); void main() { ${o} coords = getOutputCoords(); setOutput(getX(${a})); } `}};function J$e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,end:a,strides:i,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:d}=r,{nonStrided:f,$begin:h,$strides:m,size:g,newShape:x,outShape:y}=Bs.sliceInfo(s.shape,o,a,i,l,u,c,p,d),b=qe({inputs:{x:s},backend:n,attrs:{shape:x}}),A;if(f){let w=Q0({inputs:{x:b},backend:n,attrs:{begin:h,size:g}});A=qe({inputs:{x:w},backend:n,attrs:{shape:y}}),n.disposeIntermediateTensorInfo(w)}else if(y.some(w=>w===0))A=n.makeTensorInfo(y,s.dtype,[]);else if(n.shouldExecuteOnCPU([b])){let I=n.texData.get(b.dataId).values,N=Wt(b.shape,b.dtype,I),T=MNe(y,N,m,h);A=n.makeTensorInfo(y,b.dtype,T.values)}else{let k=new Y$e(h,m,y);A=n.runWebGLProgram(k,[b],b.dtype)}let v=qe({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(A),v}var Q$e={kernelName:o0,backendName:"webgl",kernelFunc:J$e};function e6e(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:o,leftPad:a,rightPad:i,padWidth:l,preserveShortSequences:u}=r,{data:c,dataSplits:p}=t,d=n.readSync(c.dataId),f=n.readSync(p.dataId),[h,m]=zNe(d,f,s,o,a,i,l,u);return[n.makeTensorInfo([h.length],"string",h),n.makeTensorInfo(p.shape,"int32",m)]}var t6e={kernelName:Dw,backendName:"webgl",kernelFunc:e6e};function n6e(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:s}=r,{input:o,delimiter:a}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(o.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${o.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=n.readSync(o.dataId),l=n.readSync(a.dataId)[0],[u,c,p]=LNe(i,l,s),d=c.length;return[n.makeTensorInfo([d,2],"int32",u),n.makeTensorInfo([d],"string",c),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var r6e={kernelName:$w,backendName:"webgl",kernelFunc:n6e};function s6e(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:s}=r,{input:o}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(s<=0)throw new Error("Number of buckets must be at least 1");let a=n.readSync(o.dataId),i=BNe(a,s);return n.makeTensorInfo(o.shape,"int32",i)}var o6e={kernelName:Fw,backendName:"webgl",kernelFunc:s6e},a6e="return tan(x);",i6e=tn({opSnippet:a6e}),l6e={kernelName:$f,backendName:"webgl",kernelFunc:i6e},u6e=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `,c6e=tn({opSnippet:u6e}),p6e={kernelName:Ff,backendName:"webgl",kernelFunc:c6e},d6e=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let o=0;o5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let s=0;s5){let l=n.readSync(s.dataId),u=s.dtype==="string"?l.map(d=>E.decodeString(d)):l,c=Wt(s.shape,s.dtype,u),p=WNe(c,o);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let a=new d6e(s.shape,o);return n.runWebGLProgram(a,[s],s.dtype)}var h6e={kernelName:Oc,backendName:"webgl",kernelFunc:yG},m6e=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int elemIdx = coords[1]; // We compare elements pair-wise within a group of size 2 * inc. // The comparing rule for each group alternates between ascending // and descending. Within each group, we compare each pair at // positions i and i+inc. To decide whether an element at position i // is x0 or x1, we mod it by 2 * inc, if the result is smaller than // inc, it is in the first half of the group, we denote it as x0, // otherwise we denote it as x1. // For example, as shown in the Bitonic top K paper referenced above, // Figure5(a) shows that element[1] is in the // second half of the group when group size is 2, but it is in the // first half of the group when group size is 4. bool isFirstInPair = imod(elemIdx, 2 * inc) < inc; int i = isFirstInPair ? elemIdx : elemIdx - inc; int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc)); float x0 = i0 < n ? getX(batch, i0) : negativeInf; float x1 = i1 < n ? getX(batch, i1) : negativeInf; // Denotes which direction indices are in (ascending or descending). bool reverse = imod(elemIdx, 2 * dir) >= dir; bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0); if (reverse == isGreater) { // Elements in opposite order of direction int iTemp = i0; i0 = i1; i1 = iTemp; } if (isFirstInPair) { setOutput(float(i0)); } else { setOutput(float(i1)); } } `}},g6e=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` void main() { // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... ivec2 coords = getOutputCoords(); int batch = coords[0]; int elemIdx = coords[1]; // The output size is half of the previous size. // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4), // we only need to output the indices at positions |, the indices at // positions _ can be thrown away, see Figure5(b) After Phase 2 // (Merge phase) in the Bitonic Top K paper referenced above. // For example, the paper shows we only need to output the orange bars. // The output sequence should look like this | | | | | | | |. // Because the sequence is halved, to map the output index back // to the previous sequence to find the corresponding value, // we need to double the index. When we double the index, // we basically interpolate a position, so 2i looks like // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position // of each 2k positions by - elemIdx % k. E.g. for output at // index 4,5,6,7, we want to get the corresponding element at // original index 8,9,10,11, for output at index 8,9,10,11, // we want to get the corresponding element at original index // 16,17,18,19, so on and so forth. int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k)); int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k)); float x0 = getX(batch, i0); float x1 = i1 < n ? getX(batch, i1) : x0; setOutput(x0 >= x1 ? float(i0) : float(i1)); } `}};function yh(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function bG(e){let t=1;for(;tl){let T=n.readSync(s.dataId),[_,R]=GNe(T,u,s.dtype,o,a);return[n.makeTensorInfo(_.shape,_.dtype,_.values),n.makeTensorInfo(R.shape,R.dtype,R.values)]}if(o===0)return u[u.length-1]=0,[n.makeTensorInfo(u,s.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(c===1)return[s,aA({attrs:{shape:u,dtype:"int32",value:0},backend:n})];let p=n.texData.get(s.dataId),d=p!==null&&p.isPacked,f=d?n.unpackTensor(s):s,m=E.sizeFromShape(u)/c,g=qe({inputs:{x:f},attrs:{shape:[m,c]},backend:n});d&&yh(n,f);let x=bG(o),y=bG(c),b=null,A=()=>b===null?[g,g]:[g,b],v=(T,_,R)=>{let S=A(),F=new m6e(R),W=[[c],[b===null?1:0],[Number.NEGATIVE_INFINITY],[T],[_]],q=b;b=n.runWebGLProgram(F,S,"int32",W),yh(n,q)};for(let T=1;T=1;R/=2)v(_,R,[m,y])}for(let T=y;T>x;T/=2){let _=A(),R=new g6e([m,T/2]),F=[[c],[b===null?1:0],[x]],B=b;b=n.runWebGLProgram(R,_,"int32",F),yh(n,B);let W=x/2,q=W*2;for(let K=W;K>=1;K/=2)v(q,K,b.shape)}let w=b;b=Q0({inputs:{x:b},backend:n,attrs:{begin:0,size:[m,o]}}),yh(n,w);let k=sG({inputs:{x:g,indices:b},backend:n,attrs:{axis:1,batchDims:1}});yh(n,g);let I=u.slice(0,-1);I.push(o),w=b,b=qe({inputs:{x:b},attrs:{shape:I},backend:n}),yh(n,w);let N=k;return k=qe({inputs:{x:k},attrs:{shape:I},backend:n}),yh(n,N),[k,b]}var y6e={kernelName:a0,backendName:"webgl",kernelFunc:x6e},b6e=class{constructor(e,t,n,r,s,o){this.variableNames=["Image","Transforms"],this.outputShape=o;let a=n==="nearest"?1:2,i;switch(r){case"constant":i=1;break;case"reflect":i=2;break;case"wrap":i=3;break;case"nearest":i=4;break;default:i=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${i} == 2) { if (inCoord < 0.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz2 = 2.0 * len; if (inCoord < sz2) { inCoord = sz2 * float(int(float(-inCoord / sz2))) + inCoord; } inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0; } } else if (inCoord > len - 1.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz2 = 2.0 * len; inCoord -= sz2 * float(int(float(inCoord / sz2))); if (inCoord >= len) { inCoord = sz2 - inCoord - 1.0; } } } return clamp(inCoord, 0.0, len - 1.0); } else if (${i} == 3) { if (inCoord < 0.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz = len - 1.0; inCoord += len * (float(int(float(-inCoord / sz))) + 1.0); } } else if (inCoord > len - 1.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz = len - 1.0; inCoord -= len * float(int(float(inCoord / sz))); } } return clamp(inCoord, 0.0, len - 1.0); } else if (${i} == 4) { return clamp(outCoord, 0.0, len - 1.0); } else { return outCoord; } } float readWithFillValue(int batch, int coordY, int coordX, int channel) { float outputValue; if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) { outputValue = getImage(batch, coordY, coordX, channel); } else { outputValue = float(${s}); } return outputValue; } void main() { ivec4 coords = getOutputCoords(); float outputValue; int batch = coords[0]; int x = coords[2]; int y = coords[1]; int channel = coords[3]; float xf = float(x); float yf = float(y); float a1 = getTransforms(batch, 0); float a2 = getTransforms(batch, 1); float a3 = getTransforms(batch, 2); float b1 = getTransforms(batch, 3); float b2 = getTransforms(batch, 4); float b3 = getTransforms(batch, 5); float c1 = getTransforms(batch, 6); float c2 = getTransforms(batch, 7); float projection = c1 * xf + c2 * yf + 1.0; if (projection == 0.0) { outputValue = float(${s}); } else { float inX = (a1 * xf + a2 * yf + a3) / projection; float inY = (b1 * xf + b2 * yf + b3) / projection; float mapX = mapCoord(inX, float(${t})); float mapY = mapCoord(inY, float(${e})); if (${a} == 1) { int coordY = int(round(mapY)); int coordX = int(round(mapX)); outputValue = readWithFillValue(batch, coordY, coordX, channel); } else { float yFloor = floor(mapY); float xFloor = floor(mapX); float yCeil = yFloor + 1.0; float xCeil = xFloor + 1.0; float valueYFloor = (xCeil - mapX) * readWithFillValue(batch, int(yFloor), int(xFloor), channel) + (mapX - xFloor) * readWithFillValue(batch, int(yFloor), int(xCeil), channel); float valueYCeil = (xCeil - mapX) * readWithFillValue(batch, int(yCeil), int(xFloor), channel) + (mapX - xFloor) * readWithFillValue(batch, int(yCeil), int(xCeil), channel); outputValue = (yCeil - mapY) * valueYFloor + (mapY - yFloor) * valueYCeil; } } setOutput(outputValue); } `}};function A6e(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,transforms:o}=t,{interpolation:a,fillMode:i,fillValue:l,outputShape:u}=r,[c,p,d,f]=s.shape,[h,m]=u!=null?u:[p,d],g=[c,h,m,f],x=new b6e(p,d,a,i,l,g);return n.runWebGLProgram(x,[s,o],"float32")}var v6e={kernelName:i0,backendName:"webgl",kernelFunc:A6e};function w6e(e){let{inputs:t,attrs:n,backend:r}=e,{axis:s}=n,{x:o}=t;j0(o,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=r.readSync(o.dataId),{outputValues:i,outputShape:l,indices:u}=UNe(a,s,o.shape,o.dtype);return[r.makeTensorInfo(l,o.dtype,i),r.makeTensorInfo([u.length],"int32",u)]}var k6e={kernelName:Ow,backendName:"webgl",kernelFunc:w6e};function I6e(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:o}=r;o<0&&(o+=s.shape.length);let a=s,i=a.shape.length,l=s.shape[o],u=new Array(i-1),c=0;for(let m=0;mn.disposeIntermediateTensorInfo(m)),h}var C6e={kernelName:l0,backendName:"webgl",kernelFunc:I6e},S6e=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,r=e.batchSize,s=e.inSize,o=e.numSegments,a=o*Math.ceil(s/n);this.outputShape=[r,a];let i="0.0",l="sumValue",u=Math.floor(n/4)*4,c=n%4,p=` sumValue += dot(values, segFilter); `,d="";s%n>0&&(d=` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } `);let f="";s%n>0&&(f=` if (inIdx < 0 || inIdx >= ${s}) { return -1.0; } `),this.userCode=` const float initializationValue = ${i}; float getValue(int batch, int inIdx) { ${d} return getX(batch, inIdx); } float getSegmentIdAtIndex(int inIdx) { ${f} return getSegmentIds(inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = int(floor(float(outIdx) / float( ${o})) * float(${n})); int currentSeg = int(mod(float(outIdx), float(${o}))); float sumValue = 0.0; for (int i = 0; i < ${u}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 ); ${p} } int inIdx = inOffset + ${u}; if (${c===1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, 0, 0, 0 ); ${p} } else if (${c===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, 0, 0 ); ${p} } else if (${c===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, 0 ); ${p} } setOutput(${l}); } `}};function N6e(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:o}=t,{numSegments:a}=r,i=s.shape.length,l=[],u=0,c=G.getAxesPermutation([u],i),p=s;c!=null&&(p=Hs({inputs:{x:s},backend:n,attrs:{perm:c}}),l.push(p),u=G.getInnerMostAxes(1,i)[0]);let d=G.segment_util.computeOutShape(p.shape,u,a),f=E.sizeFromShape([p.shape[u]]),h=qe({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}});l.push(h);let m=Ww(s.dtype),g=(A,v,w,k,I)=>{let N=A.shape[0],T=A.shape[1],_=G.segment_util.segOpComputeOptimalWindowSize(T,I),R={windowSize:_,inSize:T,batchSize:N,numSegments:I},S=new S6e(R,v),F=n.compileAndRun(S,[A,w],k);if(l.push(F),F.shape[1]===I)return F;let B=fG({backend:n,attrs:{start:0,stop:I,step:1,dtype:"float32"}}),W=yG({inputs:{x:B},backend:n,attrs:{reps:[T/_]}});return l.push(B),l.push(W),g(F,v,W,k,I)},x=g(h,"unsortedSegmentSum",o,m,a),y=qe({inputs:{x},backend:n,attrs:{shape:d}}),b=y;if(c!=null){l.push(y);let A=G.getUndoAxesPermutation(c);b=Hs({inputs:{x:b},backend:n,attrs:{perm:A}})}return l.forEach(A=>n.disposeIntermediateTensorInfo(A)),b}var T6e={kernelName:X1,backendName:"webgl",kernelFunc:N6e},_6e=[r7e,a7e,GTe,jTe,KTe,YTe,QTe,n_e,s_e,a_e,c_e,d_e,m_e,y_e,C_e,v_e,T_e,D_e,E_e,P_e,z_e,B_e,U_e,Y_e,Q_e,oEe,iEe,pEe,hEe,ITe,bEe,_Ee,REe,kEe,OEe,MEe,$Ee,BEe,GEe,HEe,KEe,ZEe,QEe,o4e,i4e,t4e,c4e,f4e,m4e,b4e,k4e,N4e,E4e,R4e,D4e,F4e,P4e,z4e,B4e,W4e,H4e,X4e,J4e,eRe,rRe,aRe,cRe,hRe,kTe,gRe,xEe,bRe,wRe,CRe,STe,_Re,$Re,ORe,WRe,LRe,HRe,XRe,QRe,l7e,g7e,h7e,A7e,w7e,I7e,d7e,S7e,T7e,D7e,P7e,B7e,K7e,RTe,Z7e,Q7e,nDe,oDe,tEe,lDe,cDe,dDe,mDe,bDe,TTe,vDe,wDe,nEe,U7e,CDe,$De,_De,$Te,MDe,BDe,UDe,qDe,YDe,QDe,n$e,o$e,i$e,c$e,f$e,m$e,y$e,v$e,I$e,X_e,H7e,N$e,_$e,R$e,$$e,O$e,M$e,L$e,V$e,G$e,H$e,K$e,Z$e,Q$e,t6e,r6e,o6e,j7e,BTe,l6e,p6e,h6e,y6e,v6e,VTe,k6e,C6e,T6e,uDe];for(let e of _6e)Mc(e);var ko;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(ko||(ko={}));var iA;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(iA||(iA={}));var AG;function E6e(e){AG=e.wasm.cwrap(Pf,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function R6e(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o,bias:a,preluActivationWeights:i}=t;if(s.dtype!=="float32"||o.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:p}=r,d=n.dataIdMap.get(s.dataId).id,f=n.dataIdMap.get(o.dataId).id,h=0;if(a!=null){let I=n.dataIdMap.get(a.dataId);if(I.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${I.shape.length}.`);h=I.id}let m=i==null?0:n.dataIdMap.get(i.dataId).id,g=iA[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=l?s.shape[2]:s.shape[1],y=u?o.shape[1]:o.shape[2],b=s.shape[0],A=n.makeOutput([b,x,y],s.dtype),v=n.dataIdMap.get(A.dataId).id,w=new Uint8Array(new Int32Array(s.shape).buffer),k=new Uint8Array(new Int32Array(o.shape).buffer);return AG(d,w,s.shape.length,f,k,o.shape.length,l,u,g,h,m,p||0,v),A}var D6e={kernelName:Pf,backendName:"wasm",setupFunc:E6e,kernelFunc:R6e};function Is(e){let t;function n(s){t=s.wasm.cwrap(e,null,["number","number"])}function r(s){let{backend:o,inputs:{x:a}}=s,i=o.dataIdMap.get(a.dataId).id,l=o.makeOutput(a.shape,a.dtype),u=o.dataIdMap.get(l.dataId).id;return E.sizeFromShape(l.shape)===0||t(i,u),l}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var $6e=Is(cg);function qs(e,t,n){let r;function s(a){r=a.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function o(a){let{backend:i,inputs:l}=a,{a:u,b:c}=l,p=i.dataIdMap.get(u.dataId).id,d=i.dataIdMap.get(c.dataId).id,f=n!=null?n:u.dtype,h=G.assertAndGetBroadcastShape(u.shape,c.shape),m=i.makeOutput(h,f);if(E.sizeFromShape(h)===0)return m;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),y=i.dataIdMap.get(m.dataId).id,b=()=>r(p,g,u.shape.length,d,x,c.shape.length,ko[u.dtype],y);if(t&&u.dtype==="float32")return b(),m;let A=G.getBroadcastDims(u.shape,h),v=G.getBroadcastDims(c.shape,h),w=A.every((I,N)=>I===N),k=v.every((I,N)=>I===N);if(w&&k)return b(),m;throw new Error(`Broadcasting along outer dims is not yet supported for ${u.dtype} ${e}.`)}return{kernelName:e,backendName:"wasm",setupFunc:s,kernelFunc:o}}var F6e=!0,O6e=qs($c,F6e),vG;function P6e(e){vG=e.wasm.cwrap(Ld,null,["array","number","number","number"])}function M6e(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(E.sizeFromShape(r.shape)===0)return r;let s=t.map(i=>n.dataIdMap.get(i.dataId).id),o=new Uint8Array(new Int32Array(s).buffer),a=n.dataIdMap.get(r.dataId).id;return vG(o,s.length,ko[r.dtype],a),r}var z6e={kernelName:Ld,backendName:"wasm",setupFunc:P6e,kernelFunc:M6e};function j5(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var L6e={kernelName:sf,backendName:"wasm",kernelFunc:j5},wG;function B6e(e){wG=e.wasm.cwrap(Of,null,["number","array","number","number","number","array","number"])}function nx(e){let{inputs:t,backend:n,attrs:r}=e,[s,o]=W6e(t.x.shape,r.perm),a=!0;for(let h=0;h=s&&(o===-1||r[o]>r[a])&&(o=a);r[o]=s}return[n,r]}var G6e={kernelName:Of,backendName:"wasm",kernelFunc:nx,setupFunc:B6e};function op(e,t,n){let r=e.shape,s=e.shape.length,o=E.parseAxisParam(t,r),a=o,i=G.getAxesPermutation(a,s),l=null,u=!1;if(i!=null){let c=new Array(s);for(let f=0;f`new shape: ${a}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:a,dtype:r.dtype}}var nFe={kernelName:Xg,backendName:"wasm",kernelFunc:Io},NG;function rFe(e){NG=e.wasm.cwrap(Wd,null,["number","array","number","number","array","number","number","number","number"])}function sFe(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o}=t,{transposeA:a,transposeB:i}=r;if(s.dtype!=="float32"||o.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=s.shape.length,u=o.shape.length,c=a?s.shape[l-2]:s.shape[l-1],p=i?o.shape[u-1]:o.shape[u-2],d=a?s.shape[l-1]:s.shape[l-2],f=i?o.shape[u-2]:o.shape[u-1],h=s.shape.slice(0,-2),m=o.shape.slice(0,-2),g=E.sizeFromShape(h),x=E.sizeFromShape(m),y=g===x||g===1||x===1;E.assert(l>=2&&u>=2&&y,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${h}) and (${m}).`);let A=(g>x?s.shape.slice(0,-2):o.shape.slice(0,-2)).concat([d,f]);E.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${s.shape} and ${o.shape} and transposeA=${a} and transposeB=${i} must match.`);let v=a?[g,c,d]:[g,d,c],w=i?[x,f,p]:[x,p,f],k=Io({inputs:{x:s},backend:n,attrs:{shape:v}}),I=Io({inputs:{x:o},backend:n,attrs:{shape:w}}),N=n.dataIdMap.get(k.dataId).id,T=n.dataIdMap.get(I.dataId).id,_=a?k.shape[2]:k.shape[1],R=i?I.shape[1]:I.shape[2],S=Math.max(g,x),F=n.makeOutput([S,_,R],k.dtype),B=n.dataIdMap.get(F.dataId).id,W=new Uint8Array(new Int32Array(k.shape).buffer),q=new Uint8Array(new Int32Array(I.shape).buffer);return NG(N,W,k.shape.length,T,q,I.shape.length,a,i,B),n.disposeData(k.dataId),n.disposeData(I.dataId),F.shape=A,F}var oFe={kernelName:Wd,backendName:"wasm",setupFunc:rFe,kernelFunc:sFe};function lA(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:s}=e,[o,a]=Bs.parseSliceParams(t,n,r),i=Bs.isSliceContinous(t.shape,o,a),l=s.readSync(t.dataId),u=s.makeOutput(a,t.dtype),c=E.computeStrides(t.shape),p=s.dataIdMap.get(u.dataId);if(i){let h=Bs.computeFlatOffset(o,c);return t.dtype==="string"?p.stringBytes=l.slice(h,h+E.sizeFromShape(a)):s.typedArrayFromHeap(u).set(l.subarray(h,h+E.sizeFromShape(a))),u}if(t.dtype==="string"){let h=v5(l,o,a,t.shape,t.dtype);return p.stringBytes=h,u}let d=s.typedArrayFromHeap(u),f=t.shape.length;if(f===2)aFe(l,c[0],d,o,a);else if(f===3)iFe(l,c[0],c[1],d,o,a);else if(f===4)lFe(l,c[0],c[1],c[2],d,o,a);else{let h=v5(l,o,a,t.shape,t.dtype);d.set(h)}return u}function aFe(e,t,n,r,s){let o=0,a=r[0],i=r[1],l=a+s[0];for(let u=a;ux*y),l=G.getReshaped(s.shape,o,i),u=G.getPermuted(l.length,o.length),c=G.getReshapedPermuted(s.shape,o,i),p=G.getSliceBeginCoords(a,o.length),d=G.getSliceSize(c,a,o.length),f=Io({inputs:{x:s},backend:n,attrs:{shape:l}}),h=nx({inputs:{x:f},backend:n,attrs:{perm:u}}),m=Io({inputs:{x:h},backend:n,attrs:{shape:c}}),g=lA({inputs:{x:m},backend:n,attrs:{begin:p,size:d}});return n.disposeData(f.dataId),n.disposeData(h.dataId),n.disposeData(f.dataId),g}var pFe={kernelName:Ag,backendName:"wasm",kernelFunc:cFe};function H5(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,s=r.makeOutput(t.shape,n),o=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(s).set(o),s}var dFe={kernelName:Gd,backendName:"wasm",kernelFunc:H5},fFe=Is(Ud),TG;function hFe(e){TG=e.wasm.cwrap(Fc,null,["number","number","number","number"])}function mFe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:o,clipValueMax:a}=r,i=n.dataIdMap.get(s.dataId).id,l=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(l.dataId).id;return TG(i,o,a,u),l}var gFe={kernelName:Fc,backendName:"wasm",setupFunc:hFe,kernelFunc:mFe};function _G(e){let{inputs:t,backend:n}=e,r=E.parseAxisParam(e.attrs.axis,t[0].shape)[0],s=G.computeOutShape(t.map(f=>f.shape),r),o=t.filter(f=>E.sizeFromShape(f.shape)>0);if(o.length===1)return j5({inputs:{x:o[0]},backend:n});let a=n.makeOutput(s,t[0].dtype);if(E.sizeFromShape(s)===0)return a;let i=o.map(f=>f.shape);if(G.assertParamsConsistent(i,r),o[0].dtype==="string"){let f=o.map(b=>{let A=E.sizeFromShape(b.shape.slice(r));return Io({inputs:{x:b},backend:n,attrs:{shape:[-1,A]}})}),h=f.map(b=>({vals:n.readSync(b.dataId),shape:b.shape}));s=G.computeOutShape(f.map(b=>b.shape),1);let m=f[0].shape[0]===1,g=uR(h,s,t[0].dtype,m),x=G.computeOutShape(o.map(b=>b.shape),r);a.shape=x;let y=n.dataIdMap.get(a.dataId);return y.stringBytes=G.fromStringArrayToUint8(g),f.forEach(b=>n.disposeData(b.dataId)),a}let l=E.sizeFromShape(o[0].shape.slice(0,r)),u=0,c=o.map(f=>{let h=E.sizeFromShape(f.shape.slice(r));return u+=h,h}),p=o.map(f=>n.typedArrayFromHeap(f)),d=n.typedArrayFromHeap(a);for(let f=0;f`cumsum does not support ${s.dtype} tensors in the WASM backend`);let u=G.getAxesPermutation([o],l),c=s;u!==null&&(c=nx({inputs:{x:s},attrs:{perm:u},backend:n}));let p=G.getInnerMostAxes(1,l)[0];G.assertAxesAreInnerMostDims("cumsum",[p],l);let d=n.makeOutput(c.shape,c.dtype),f=c.shape[p],h=n.dataIdMap.get(c.dataId).id,m=n.dataIdMap.get(d.dataId).id;$G(h,a?1:0,i?1:0,f,m,ko[s.dtype]);let g=d;if(u!==null){let x=G.getUndoAxesPermutation(u);g=nx({inputs:{x:d},attrs:{perm:x},backend:n}),n.disposeData(c.dataId),n.disposeData(d.dataId)}return g}var RFe={kernelName:Xd,backendName:"wasm",setupFunc:_Fe,kernelFunc:EFe},FG;function DFe(e){FG=e.wasm.cwrap(kg,null,["number","number","number","array","number","array","array","number","number"])}function $Fe(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{blockSize:o,dataFormat:a}=r;E.assert(o>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${o}`);let i=s.shape[0],l=a==="NHWC"?s.shape[1]:s.shape[2],u=a==="NHWC"?s.shape[2]:s.shape[3],c=a==="NHWC"?s.shape[3]:s.shape[1],p=l*o,d=u*o,f=c/(o*o),h=a==="NHWC"?[i,p,d,f]:[i,f,p,d],m=t.makeOutput(h,"float32"),x=t.dataIdMap.get(s.dataId).id,y=new Uint8Array(new Int32Array(E.computeStrides(s.shape)).buffer),b=new Uint8Array(new Int32Array(h).buffer),A=new Uint8Array(new Int32Array(E.computeStrides(h)).buffer),v=t.dataIdMap.get(m.dataId).id;return FG(x,o,a==="NHWC"?1:0,y,s.shape.length-1,b,A,h.length,v),m}var FFe={kernelName:kg,backendName:"wasm",setupFunc:DFe,kernelFunc:$Fe},OG;function OFe(e){OG=e.wasm.cwrap(Zd,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function PFe(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:o}=t,a=r.dataIdMap.get(s.dataId).id,i=r.dataIdMap.get(o.dataId).id,{strides:l,dilations:u,pad:c,dimRoundingMode:p}=n,d=u==null?[1,1]:u,f=G.computeConv2DInfo(s.shape,o.shape,l,d,c,p,!0),h=f.filterHeight,m=f.filterWidth,g=f.padInfo.top,x=f.padInfo.right,y=f.padInfo.bottom,b=f.padInfo.left,A=f.dilationHeight,v=f.dilationWidth,w=f.strideHeight,k=f.strideWidth,I=f.inChannels,N=f.outChannels,T=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let _=r.makeOutput(f.outShape,"float32"),R=r.dataIdMap.get(_.dataId).id;return OG(a,s.shape[0],s.shape[1],s.shape[2],i,h,m,g,x,y,b,T,A,v,w,k,I,N,R),_}var MFe={kernelName:Zd,backendName:"wasm",setupFunc:OFe,kernelFunc:PFe},zFe=Is(Jd),LFe=!1,BFe=qs(Cg,LFe,"bool"),VFe=Is(Qd);function WR(e){let{inputs:t,attrs:n,backend:r}=e,{input:s}=t,{dim:o}=n,a=s.shape.length,i=s.shape.slice(),l=o;return o<0&&(E.assert(-(a+1)<=o,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+o+1),i.splice(l,0,1),Io({inputs:{x:s},backend:r,attrs:{shape:i}})}var WFe={kernelName:Sg,backendName:"wasm",kernelFunc:WR};function PG(e){let{attrs:{shape:t,value:n,dtype:r},backend:s}=e,o=s.makeOutput(t,r);return s.typedArrayFromHeap(o).fill(n),o}var GFe={kernelName:V1,backendName:"wasm",kernelFunc:PG},MG;function UFe(e){MG=e.wasm.cwrap(Tg,null,["number","number","number","number","number","number"])}function jFe(e){let{inputs:t,backend:n}=e,{image:r}=t,s=n.makeOutput(r.shape,r.dtype),o=n.dataIdMap.get(r.dataId).id,a=n.dataIdMap.get(s.dataId).id,[i,l,u,c]=r.shape;return MG(o,i,l,u,c,a),s}var HFe={kernelName:Tg,backendName:"wasm",kernelFunc:jFe,setupFunc:UFe},qFe=Is(ef),KFe=!1,XFe=qs(tf,KFe),zG;function ZFe(e){zG=e.wasm.cwrap(nf,null,["number","number","number","number","number","number","number"])}function YFe(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:s}=r,{x:o,mean:a,variance:i,offset:l,scale:u}=n,c=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(a.dataId).id,d=t.dataIdMap.get(i.dataId).id,f=l!=null?t.dataIdMap.get(l.dataId).id:0,h=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(o.shape,o.dtype);if(E.sizeFromShape(o.shape)===0)return m;let g=t.dataIdMap.get(m.dataId).id;return zG(c,p,d,f,h,s,g),m}var JFe={kernelName:nf,backendName:"wasm",setupFunc:ZFe,kernelFunc:YFe},LG;function QFe(e){LG=e.wasm.cwrap(Mf,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function e8e(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dilations:c,dataFormat:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=n,m=G.computeConv2DInfo(s.shape,o.shape,l,c,u,d),g=iA[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedConv2D in the wasm backend.`);let x=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(o.dataId).id,b=m.outChannels,A=0;if(a!=null){let re=r.dataIdMap.get(a.dataId);if(re.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${re.shape.length}.`);if(re.shape[0]!==b)throw new Error(`FusedConv2D bias shape (${re.shape}) does not match the number of output channels (${b})`);A=re.id}let v=m.filterHeight,w=m.filterWidth,k=m.padInfo.top,I=m.padInfo.right,N=m.padInfo.bottom,T=m.padInfo.left,_=m.dilationHeight,R=m.dilationWidth,S=m.strideHeight,F=m.strideWidth,B=m.inChannels,W=m.padInfo.type==="SAME"?1:0,q=m.batchSize,K=m.inHeight,J=m.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let Q=r.makeOutput(m.outShape,"float32"),ee=r.dataIdMap.get(Q.dataId).id,ue=i==null?0:r.dataIdMap.get(i.dataId).id;return LG(x,q,K,J,y,v,w,A,k,I,N,T,W,_,R,S,F,B,b,g,ue,h||0,ee),Q}var t8e={kernelName:Mf,backendName:"wasm",setupFunc:QFe,kernelFunc:e8e},BG;function n8e(e){BG=e.wasm.cwrap(zf,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function r8e(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dilations:c,dataFormat:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=n,m=G.computeConv2DInfo(s.shape,o.shape,l,c,u,d,!0),g=iA[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(o.dataId).id,b=m.outChannels,A=0;if(a!=null){let re=r.dataIdMap.get(a.dataId);if(re.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${re.shape.length}.`);if(re.shape[0]!==b)throw new Error(`FusedDepthwiseConv2D bias shape (${re.shape}) does not match the number of output channels (${b})`);A=re.id}let v=m.filterHeight,w=m.filterWidth,k=m.padInfo.top,I=m.padInfo.right,N=m.padInfo.bottom,T=m.padInfo.left,_=m.dilationHeight,R=m.dilationWidth,S=m.strideHeight,F=m.strideWidth,B=m.inChannels,W=m.padInfo.type==="SAME"?1:0,q=m.batchSize,K=m.inHeight,J=m.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let Q=r.makeOutput(m.outShape,"float32"),ee=r.dataIdMap.get(Q.dataId).id,ue=i==null?0:r.dataIdMap.get(i.dataId).id;return BG(x,q,K,J,y,v,w,A,k,I,N,T,W,_,R,S,F,B,b,g,ue,h||0,ee),Q}var s8e={kernelName:zf,backendName:"wasm",setupFunc:n8e,kernelFunc:r8e},VG;function o8e(e){VG=e.wasm.cwrap(Eg,null,["number","number","number","number","number","number","array","number"])}function a8e(e){let{backend:t,inputs:n}=e,{params:r,indices:s}=n,[o,a,i,l]=e_.prepareAndValidate(r,s),u=t.makeOutput(o,r.dtype);if(a===0)return u;let c=s.shape,p=c[c.length-1],f=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,g=new Uint8Array(new Int32Array(l).buffer),x=t.dataIdMap.get(u.dataId).id;return VG(f,ko[r.dtype],m,a,p,i,g,x),u}var i8e={kernelName:Eg,backendName:"wasm",setupFunc:o8e,kernelFunc:a8e},WG;function l8e(e){WG=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function u8e(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,indices:o}=n,{axis:a,batchDims:i}=r,l=E.parseAxisParam(a,s.shape)[0],u=G.segment_util.collectGatherOpShapeInfo(s,o,l,i),c=Io({inputs:{x:s},attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]},backend:t}),p=E.sizeFromShape(o.shape),d=Io({inputs:{x:o},attrs:{shape:[u.batchSize,p/u.batchSize]},backend:t}),f=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize],h=t.makeOutput(f,s.dtype);if(E.sizeFromShape(s.shape)===0)return h;let m=c.shape.length-1,x=t.dataIdMap.get(c.dataId).id,b=t.dataIdMap.get(d.dataId).id,A=t.dataIdMap.get(h.dataId).id,v=new Uint8Array(new Int32Array(E.computeStrides(c.shape)).buffer),w=new Uint8Array(new Int32Array(E.computeStrides(f)).buffer);return WG(x,ko[s.dtype],v,m,b,u.batchSize,w,A),t.disposeData(c.dataId),t.disposeData(d.dataId),h.shape=u.outputShape,h}var c8e={kernelName:_g,backendName:"wasm",setupFunc:l8e,kernelFunc:u8e},p8e=!1,d8e=qs(Rg,p8e,"bool"),f8e=!1,h8e=qs(rf,f8e,"bool"),GG;function m8e(e){GG=e.wasm.cwrap(of,null,["number","number","number"])}function g8e(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,s=r.dataIdMap.get(t.dataId).id,o=r.makeOutput(t.shape,t.dtype);if(E.sizeFromShape(t.shape)!==0){let a=r.dataIdMap.get(o.dataId).id;GG(s,n,a)}return o}var x8e={kernelName:of,backendName:"wasm",setupFunc:m8e,kernelFunc:g8e},y8e=!1,b8e=qs(Og,y8e,"bool"),A8e=!1,v8e=qs(Pg,A8e,"bool"),w8e=Is(af),k8e=!1,I8e=qs(zg,k8e,"bool"),UG;function C8e(e){UG=e.wasm.cwrap(lf,null,["number, number, number"])}function S8e(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:s,keepDims:o}=r,{x:a}=n,l=t.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:p,originalAxes:d,inputWasTransposed:f}=op(a,s,t);if(f){let b=t.dataIdMap.get(c.dataId).id;u=c,l=b}let h=u.shape.length;G.assertAxesAreInnerMostDims("max",p,h);let[m,g]=G.computeOutAndReduceShapes(u.shape,p),x=E.sizeFromShape(g),y=t.makeOutput(m,a.dtype);if(E.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;UG(l,x,b)}if(f&&t.disposeData(c.dataId),o){let b=G.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var N8e={kernelName:lf,backendName:"wasm",setupFunc:C8e,kernelFunc:S8e},T8e=!1,_8e=qs(uf,T8e),jG;function E8e(e){jG=e.wasm.cwrap(cf,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function R8e(e){let{inputs:t,attrs:n,backend:r}=e,s=t.x,o=r.dataIdMap.get(s.dataId).id,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=n,c=G.computePool2DInfo(s.shape,a,i,1,l,u),p=c.filterHeight,d=c.filterWidth,f=c.padInfo.top,h=c.padInfo.right,m=c.padInfo.bottom,g=c.padInfo.left,x=c.dilationHeight,y=c.dilationWidth,b=c.strideHeight,A=c.strideWidth,v=c.inChannels,w=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let k=r.makeOutput(c.outShape,"float32"),I=r.dataIdMap.get(k.dataId).id;return jG(o,s.shape[0],s.shape[1],s.shape[2],p,d,f,h,m,g,x,y,b,A,v,w,I),k}var D8e={kernelName:cf,backendName:"wasm",setupFunc:E8e,kernelFunc:R8e},HG;function $8e(e){HG=e.wasm.cwrap(pf,null,["number, number, number"])}function F8e(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:o}=r,{x:a}=n,i=t.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:d,inputWasTransposed:f}=op(a,s,t),h=p;if(f){let A=t.dataIdMap.get(c.dataId).id;A!==i&&(u=c,l=A,h=G.getInnerMostAxes(h.length,u.shape.length))}G.assertAxesAreInnerMostDims("mean",h,u.shape.length);let[m,g]=G.computeOutAndReduceShapes(u.shape,h),x=E.sizeFromShape(g),y=u;u.dtype!=="float32"&&(y=H5({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(y.dataId).id);let b=t.makeOutput(m,"float32");if(E.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(b.dataId).id;HG(l,x,A)}if(f&&t.disposeData(c.dataId),o){let A=G.expandShapeToKeepDim(b.shape,d);b.shape=A}return u.dtype!=="float32"&&t.disposeData(y.dataId),b}var O8e={kernelName:pf,backendName:"wasm",setupFunc:$8e,kernelFunc:F8e},qG;function P8e(e){qG=e.wasm.cwrap(df,null,["number, number, number"])}function M8e(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:o}=r,{x:a}=n,i=t.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:d,inputWasTransposed:f}=op(a,s,t);if(f){let b=t.dataIdMap.get(c.dataId).id;b!==i&&(u=c,l=b)}let h=u.shape.length;G.assertAxesAreInnerMostDims("min",p,h);let[m,g]=G.computeOutAndReduceShapes(u.shape,p),x=E.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(E.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;qG(l,x,b)}if(f&&t.disposeData(c.dataId),o){let b=G.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var z8e={kernelName:df,backendName:"wasm",setupFunc:P8e,kernelFunc:M8e},L8e=!1,B8e=qs(ff,L8e),GR;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(GR||(GR={}));var KG;function V8e(e){KG=e.wasm.cwrap(hf,null,["number","array","number","number","array","array","number","number"])}function W8e(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,mode:s}}=e,o=r.map((h,m)=>h[0]+t.shape[m]+h[1]),a=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(o,t.dtype),l=n.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),c=r.map(h=>h[0]),p=r.map(h=>h[1]),d=new Uint8Array(new Int32Array(c).buffer),f=new Uint8Array(new Int32Array(p).buffer);return KG(a,u,t.shape.length,ko[t.dtype],d,f,GR[s],l),i}var G8e={kernelName:hf,backendName:"wasm",kernelFunc:W8e,setupFunc:V8e},U8e=!0,j8e=qs(mf,U8e),H8e=Is(Bg);function UR(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],s=n[1],o=n[2],a=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:s,pSelectedScores:o,pValidOutputs:a}}var XG;function q8e(e){XG=e.wasm.cwrap(Wg,"number",["number","number","number","number","number"])}function K8e(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:o,scoreThreshold:a}=r,{boxes:i,scores:l}=n,u=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(l.dataId).id,p=XG(u,c,o,s,a),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:m}=UR(t,p);return t.wasm._free(h),t.wasm._free(m),t.makeOutput([f],"int32",d)}var X8e={kernelName:Wg,backendName:"wasm",setupFunc:q8e,kernelFunc:K8e},ZG;function Z8e(e){ZG=e.wasm.cwrap(Gg,"number",["number","number","number","number","number","bool"])}function Y8e(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:o,scoreThreshold:a,padToMaxOutputSize:i}=r,{boxes:l,scores:u}=n,c=t.dataIdMap.get(l.dataId).id,p=t.dataIdMap.get(u.dataId).id,d=ZG(c,p,o,s,a,i),{pSelectedIndices:f,selectedSize:h,pSelectedScores:m,pValidOutputs:g}=UR(t,d);t.wasm._free(m);let x=t.makeOutput([h],"int32",f),y=t.makeOutput([],"int32",g);return[x,y]}var J8e={kernelName:Gg,backendName:"wasm",setupFunc:Z8e,kernelFunc:Y8e},YG;function Q8e(e){YG=e.wasm.cwrap(Ug,"number",["number","number","number","number","number","number"])}function eOe(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:o,scoreThreshold:a,softNmsSigma:i}=r,{boxes:l,scores:u}=n,c=t.dataIdMap.get(l.dataId).id,p=t.dataIdMap.get(u.dataId).id,d=YG(c,p,o,s,a,i),{pSelectedIndices:f,selectedSize:h,pSelectedScores:m,pValidOutputs:g}=UR(t,d);t.wasm._free(g);let x=t.makeOutput([h],"int32",f),y=t.makeOutput([h],"float32",m);return[x,y]}var tOe={kernelName:Ug,backendName:"wasm",setupFunc:Q8e,kernelFunc:eOe},nOe=!1,rOe=qs(Vg,nOe,"bool"),JG;function sOe(e){JG=e.wasm.cwrap(gf,null,["number","number","number","number","number"])}function oOe(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{depth:o,onValue:a,offValue:i}=r,l=n.makeOutput([...s.shape,o],"int32"),u=n.dataIdMap.get(l.dataId).id,p=n.dataIdMap.get(s.dataId).id;return JG(p,o,a,i,u),l}var aOe={kernelName:gf,backendName:"wasm",setupFunc:sOe,kernelFunc:oOe};function iOe(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var lOe={kernelName:jg,backendName:"wasm",kernelFunc:iOe};function uOe(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return WR({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let o=t[0].shape,a=t[0].dtype;t.forEach(c=>{E.assertShapesMatch(o,c.shape,"All tensors passed to stack must have matching shapes"),E.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=t.map(c=>{let p=WR({inputs:{input:c},backend:n,attrs:{dim:s}});return i.push(p),p}),u=_G({inputs:l,backend:n,attrs:{axis:s}});return i.forEach(c=>n.disposeData(c.dataId)),u}var cOe={kernelName:Hg,backendName:"wasm",kernelFunc:uOe},QG;function pOe(e){QG=e.wasm.cwrap(xf,null,["number","array","number","number","array","array","number","number"])}function dOe(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:s}}=e,o=r.map((m,g)=>m[0]+t.shape[g]+m[1]);if(E.sizeFromShape(t.shape)===0)return PG({backend:n,attrs:{shape:o,value:s,dtype:t.dtype}});let a=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(o,t.dtype),u=n.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(t.shape).buffer),p=r.map(m=>m[0]),d=r.map(m=>m[1]),f=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return QG(a,c,t.shape.length,ko[t.dtype],f,h,s,u),i}var eU={kernelName:xf,backendName:"wasm",kernelFunc:dOe,setupFunc:pOe},fOe=!1,hOe=qs(yf,fOe),tU;function mOe(e){tU=e.wasm.cwrap(bf,null,["number","number","number"])}function gOe(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,o=n.dataIdMap.get(r.dataId).id,a=n.dataIdMap.get(s.dataId).id,i=n.makeOutput(r.shape,"float32"),l=n.dataIdMap.get(i.dataId).id;return tU(o,a,l),i}var xOe={kernelName:bf,backendName:"wasm",setupFunc:mOe,kernelFunc:gOe},nU;function yOe(e){nU=e.wasm.cwrap(qg,null,["number","number","number","number"])}function bOe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:o}=r,{x:a}=n,i=t.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:d,inputWasTransposed:f}=op(a,s,t),h=p;if(f){let b=t.dataIdMap.get(c.dataId).id;b!==i&&(u=c,l=b,h=G.getInnerMostAxes(h.length,u.shape.length))}G.assertAxesAreInnerMostDims("prod",h,u.shape.length);let[m,g]=G.computeOutAndReduceShapes(u.shape,h),x=E.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(E.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;nU(l,x,ko[y.dtype],b)}if(f&&t.disposeData(c.dataId),o){let b=G.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var AOe={kernelName:qg,backendName:"wasm",setupFunc:yOe,kernelFunc:bOe},vOe=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:o,dtype:a}=n,i=dR(r,s,o,a),l=t.makeOutput([i.length],a);return t.typedArrayFromHeap(l).set(i),l},wOe={kernelName:H1,backendName:"wasm",kernelFunc:vOe},kOe=!0,IOe=qs(Yd,kOe),COe=Is(Af),SOe=Is(wf),rU;function NOe(e){rU=e.wasm.cwrap(vf,null,["number","number","number","number","number","number","number","number","number","number"])}function TOe(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:o,halfPixelCenters:a,size:i}=r,[l,u]=i,[c,p,d,f]=s.shape,h=[c,l,u,f],m=t.dataIdMap.get(s.dataId),g;m.dtype!=="float32"&&(g=H5({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(g.dataId));let x=m.id,y=t.makeOutput(h,"float32");if(E.sizeFromShape(s.shape)===0)return y;let b=t.dataIdMap.get(y.dataId).id;return rU(x,c,p,d,f,l,u,o?1:0,a?1:0,b),g!=null&&t.disposeData(g.dataId),y}var _Oe={kernelName:vf,backendName:"wasm",setupFunc:NOe,kernelFunc:TOe},sU;function EOe(e){sU=e.wasm.cwrap(kf,null,["number","array","number","array","number","number"])}function ROe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:o}=r,a=E.parseAxisParam(o,s.shape);if(s.shape.length===0)return j5({inputs:{x:s},backend:n});let i=n.makeOutput(s.shape,s.dtype),l=n.dataIdMap.get(s.dataId).id,u=n.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),p=new Uint8Array(new Int32Array(s.shape).buffer);sU(l,c,a.length,p,s.shape.length,u);let d=Io({inputs:{x:i},attrs:{shape:s.shape},backend:n});return n.disposeData(i.dataId),d}var DOe={kernelName:kf,backendName:"wasm",kernelFunc:ROe,setupFunc:EOe},oU;function $Oe(e){oU=e.wasm.cwrap(c0,null,["number","number","number","number","number","number","number","number","array","number","number"])}function FOe(e){let{inputs:t,backend:n,attrs:r}=e,{image:s}=t,{radians:o,fillValue:a,center:i}=r,l=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(s.dataId).id,c=n.dataIdMap.get(l.dataId).id,[p,d,f,h]=s.shape,[m,g]=G.getImageCenter(i,d,f),x=a===0,y=255,b=typeof a=="number"?[a,a,a,x?0:y]:[...a,y],A=new Uint8Array(new Int32Array(b).buffer);return oU(u,p,d,f,h,o,m,g,A,b.length,c),l}var OOe={kernelName:c0,backendName:"wasm",kernelFunc:FOe,setupFunc:$Oe},POe=Is(If),MOe=Is(Cf),aU;function zOe(e){aU=e.wasm.cwrap(Zg,null,["number","number","number","number","number","number","array","number","number"])}function LOe(e){let{backend:t,inputs:n,attrs:r}=e,{indices:s,updates:o}=n,{shape:a}=r,i=t.makeOutput(a,o.dtype);if(E.sizeFromShape(a)===0)return i;let{sliceRank:l,numUpdates:u,sliceSize:c,strides:p,outputSize:d}=t_.calculateShapes(o,s,a),h=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(o.dataId).id,x=new Uint8Array(new Int32Array(p).buffer),y=t.dataIdMap.get(i.dataId).id;return aU(h,g,ko[o.dtype],l,u,c,x,d,y),i}var BOe={kernelName:Zg,backendName:"wasm",setupFunc:zOe,kernelFunc:LOe},iU;function VOe(e){iU=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function WOe(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:o}=t,a=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(s.dataId).id,l=n.dataIdMap.get(o.dataId).id,u=n.makeOutput(s.shape,s.dtype),c=n.dataIdMap.get(u.dataId).id,p=r.shape.length,d=s.shape.length,f=p===0||p>1||d===1?1:E.sizeFromShape(s.shape.slice(1));return iU(a,i,l,f,c),u}var GOe={kernelName:Yg,backendName:"wasm",kernelFunc:WOe,setupFunc:VOe},lU;function UOe(e){lU=e.wasm.cwrap(Nf,null,["number","number"])}function jOe(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),o=t.dataIdMap.get(s.dataId).id;return E.sizeFromShape(s.shape)===0||lU(r,o),s}var HOe={kernelName:"Sigmoid",backendName:"wasm",setupFunc:UOe,kernelFunc:jOe},qOe=Is(Sf),uU;function KOe(e){uU=e.wasm.cwrap(Ef,null,["number","number","number","number"])}function XOe(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,s=t.dataIdMap.get(n.dataId).id,o=t.makeOutput(n.shape,n.dtype),a=t.dataIdMap.get(o.dataId).id,i=n.shape[r],l=E.sizeFromShape(n.shape)/i;return E.sizeFromShape(o.shape)===0||uU(s,a,i,l),o}var ZOe={kernelName:Ef,backendName:"wasm",setupFunc:KOe,kernelFunc:XOe};function YOe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,paddings:a}=r,i=E.sizeFromShape(o),l=[[0,0]];l.push(...a);for(let w=1+o.length;w{let d=[...c];d[i]=p;let f=lA({inputs:{x:s},attrs:{begin:u,size:d},backend:r});return u[i]+=p,f})}var ePe={kernelName:s0,backendName:"wasm",kernelFunc:QOe},tPe=Is(Tf),nPe=Is(K1),rPe=!0,sPe=qs(Rf,rPe),cU;function oPe(e){cU=e.wasm.cwrap(Pc,null,["number","number","number"])}function aPe(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:s}=r,{x:o}=n,a=t.dataIdMap.get(o.dataId).id,i=t.makeOutput(o.shape,o.dtype),l=t.dataIdMap.get(i.dataId).id;return cU(a,s,l),i}var iPe={kernelName:Pc,backendName:"wasm",setupFunc:oPe,kernelFunc:aPe},pU;function lPe(e){pU=e.wasm.cwrap(o0,null,["number","array","number","array","array","array","array","array","number","number"])}function uPe(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{begin:o,end:a,strides:i}=r;i==null&&(i=new Array(o.length));let{beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:d}=r,f=G.slice_util.maskToAxes(c);if(f.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(c!==0&&p!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(c!==0&&d!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let h=s.shape.length-o.length,m=G.slice_util.maskToAxes(p),g=s.shape.slice();m.forEach(_=>{o[_]=0,a[_]=1,g.splice(_,0,1)});let x=Io({inputs:{x:s},attrs:{shape:g},backend:t}),{begin:y,end:b,strides:A}=G.slice_util.getNormalizedAxes(x.shape,f,h,o,a,i,l,u,c);o=y,a=b,i=A;let v=G.slice_util.maskToAxes(d);v.forEach(_=>{a[_]=o[_]+1,i[_]=1});let w=G.slice_util.computeOutShape(o,a,i),k=w.filter((_,R)=>v.indexOf(R)===-1);if(i.every(_=>_===1)){let _=lA({inputs:{x},attrs:{begin:o,size:w},backend:t});t.disposeData(x.dataId);let R=Io({inputs:{x:_},attrs:{shape:k},backend:t});return t.disposeData(_.dataId),R}let N=t.makeOutput(k,"float32");if(!k.some(_=>_===0)){let _=t.dataIdMap.get(x.dataId).id,R=new Uint8Array(new Int32Array(E.computeStrides(x.shape)).buffer),S=new Uint8Array(new Int32Array(o).buffer),F=new Uint8Array(new Int32Array(a).buffer),B=new Uint8Array(new Int32Array(i).buffer),W=new Uint8Array(new Int32Array(k).buffer),q=new Uint8Array(new Int32Array(E.computeStrides(k)).buffer),K=t.dataIdMap.get(N.dataId).id;pU(_,R,x.shape.length,S,F,B,W,q,k.length,K)}t.disposeData(x.dataId);let T=Io({inputs:{x:N},attrs:{shape:k},backend:t});return t.disposeData(N.dataId),T}var cPe={kernelName:o0,backendName:"wasm",setupFunc:lPe,kernelFunc:uPe},pPe=!0,dPe=qs(Df,pPe),dU;function fPe(e){dU=e.wasm.cwrap(_f,null,["number, number, number"])}function hPe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:o}=r,{x:a}=n,i=t.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:d,inputWasTransposed:f}=op(a,s,t),h=p;if(f){let b=t.dataIdMap.get(c.dataId).id;b!==i&&(u=c,l=b,h=G.getInnerMostAxes(h.length,u.shape.length))}G.assertAxesAreInnerMostDims("sum",h,u.shape.length);let[m,g]=G.computeOutAndReduceShapes(u.shape,h),x=E.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(E.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;dU(l,x,b)}if(f&&t.disposeData(c.dataId),o){let b=G.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var mPe={kernelName:_f,backendName:"wasm",setupFunc:fPe,kernelFunc:hPe},gPe=Is($f),xPe=Is(Ff),fU;function yPe(e){fU=e.wasm.cwrap(Oc,null,["number","array","number","array","number","number"])}function bPe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,o=n.dataIdMap.get(s.dataId).id,{reps:a}=r,i=new Array(s.shape.length);for(let d=0;d{let{x:r}=e,{k:s,sorted:o}=n,a=t.dataIdMap.get(r.dataId).id,i=new Uint8Array(new Int32Array(r.shape).buffer),l=r.shape.slice();l[l.length-1]=s;let u=t.makeOutput(l,r.dtype),c=t.dataIdMap.get(u.dataId).id,p=t.makeOutput(l,"int32"),d=t.dataIdMap.get(p.dataId).id;return hU(a,i,r.shape.length,ko[r.dtype],s,o,c,d),[u,p]},kPe={kernelName:a0,backendName:"wasm",setupFunc:vPe,kernelFunc:wPe},mU;function IPe(e){mU=e.wasm.cwrap(i0,null,["number","number","bool","number","number","number","number","number","number","array","number","number","number","number","number"])}function CPe(e){let{backend:t,inputs:n,attrs:r}=e,{image:s,transforms:o}=n,{interpolation:a,fillMode:i,fillValue:l,outputShape:u}=r,[c,p,d,f]=s.shape,[h,m]=u!=null?u:[p,d],g=[c,h,m,f],x=new Uint8Array(new Int32Array(E.computeStrides(s.shape)).buffer),y=t.makeOutput(g,s.dtype),b=t.dataIdMap.get(y.dataId).id,v=t.dataIdMap.get(s.dataId).id,k=t.dataIdMap.get(o.dataId).id,I=a==="nearest"?1:2,N;switch(i){case"constant":N=1;break;case"reflect":N=2;break;case"wrap":N=3;break;case"nearest":N=4;break;default:N=1;break}return mU(v,k,o.shape[0]>1,c,h,m,f,d,p,x,s.shape.length-1,I,N,l,b),y}var SPe={kernelName:i0,backendName:"wasm",setupFunc:IPe,kernelFunc:CPe};function NPe(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:o}=r;o<0&&(o+=s.shape.length);let a=s.shape[o],i=s.shape.length,l=new Array(i-1),u=0;for(let f=0;f({dataId:f,dtype:h,shape:l}))}var TPe={kernelName:l0,backendName:"wasm",kernelFunc:NPe};function _Pe(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var EPe={kernelName:u0,backendName:"wasm",kernelFunc:_Pe},RPe=[$6e,O6e,z6e,H6e,X6e,J6e,tFe,oFe,pFe,dFe,fFe,gFe,xFe,AFe,kFe,IFe,CFe,TFe,RFe,FFe,MFe,zFe,BFe,VFe,WFe,GFe,HFe,qFe,XFe,D6e,JFe,t8e,s8e,i8e,c8e,d8e,h8e,L6e,x8e,b8e,v8e,w8e,I8e,N8e,_8e,D8e,O8e,z8e,B8e,G8e,j8e,H8e,X8e,J8e,tOe,rOe,aOe,lOe,cOe,eU,hOe,xOe,AOe,wOe,IOe,COe,SOe,nFe,_Oe,DOe,OOe,MOe,POe,BOe,GOe,HOe,qOe,uFe,ZOe,JOe,ePe,tPe,nPe,sPe,iPe,cPe,dPe,mPe,gPe,xPe,APe,kPe,SPe,G6e,TPe,EPe];for(let e of RPe)Mc(e);var jR=be();jR.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));jR.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(jR.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var gU=Pd($le()),DPe='var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}',$Pe=Pd(Fle()),xU=class extends $1{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new Xv(this,zo())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=E.now();return e(),{kernelMs:E.now()-t}}move(e,t,n,r,s){let o=this.dataIdNextNumber++;if(r==="string"){let u=t;this.dataIdMap.set(e,{id:o,stringBytes:u,shape:n,dtype:r,memoryOffset:null,refCount:s});return}let a=E.sizeFromShape(n),i=a*E.bytesPerElement(r),l=this.wasm._malloc(i);this.dataIdMap.set(e,{id:o,memoryOffset:l,shape:n,dtype:r,refCount:s}),this.wasm.tfjs.registerTensor(o,a,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,i),l)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:r,stringBytes:s}=this.dataIdMap.get(e);if(n==="string")return s;let o=this.wasm.HEAPU8.slice(t,t+E.sizeFromShape(r)*E.bytesPerElement(n));return PPe(o.buffer,n)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let r;if(n==null)r=this.write(null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:n,shape:e,dtype:t,refCount:1});let o=E.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,o,n)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(n),o=E.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,s,o);case"int32":return new Int32Array(r,s,o);case"bool":return new Uint8Array(r,s,o);default:throw new Error(`Unknown dtype ${t}`)}}};function FPe(e){return(t,n)=>(E.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(s=>{WebAssembly.instantiate(s,t).then(o=>{n(o.instance,o.module)})})}),{})}function yU(e,t,n){if(q5!=null)return q5;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),cA!=null&&cA[r]!=null?cA[r]:n+r}async function OPe(){let[e,t]=await Promise.all([be().getAsync("WASM_HAS_SIMD_SUPPORT"),be().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let s={};s.locateFile=(i,l)=>{if(i.endsWith(".worker.js")){let u=DPe,c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?yU(e,t,uA!=null?uA:l):l+i},HR&&(s.instantiateWasm=FPe(yU(e,t,uA!=null?uA:"")));let o=!1;s.onAbort=()=>{if(o||pA)return;pA=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let a;t&&e&&q5==null?(s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+gU.default.toString()],{type:"text/javascript"}),a=(0,gU.default)(s)):a=(0,$Pe.default)(s),a.then(i=>{o=!0,pA=!1;let l=null;i.tfjs={init:i.cwrap("init",null,[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",l,["number"]),dispose:i.cwrap("dispose",l,[])},n({wasm:i})})})}function PPe(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var MPe=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],q5=null,uA=null,cA={},pA=!1,HR=!1;function zPe(e,t=!1){if(i_("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),pA)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");q5=e,HR=t}function bU(e,t=!1){if(pA)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")uA=e;else{cA=e;let n=MPe.filter(r=>cA[r]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}HR=t}var LPe="3.9.0",BPe=2;y0("wasm",async()=>{let{wasm:e}=await OPe();return new xU(e)},BPe);var VPe="3.9.0",WPe="3.9.0",GPe="3.9.0",UPe="3.9.0",jPe="3.9.0",HPe="3.9.0",qPe="3.9.0",KPe="3.9.0",XPe={tfjs:VPe,"tfjs-core":WPe,"tfjs-data":GPe,"tfjs-layers":UPe,"tfjs-converter":jPe,"tfjs-backend-cpu":HPe,"tfjs-backend-webgl":qPe,"tfjs-backend-wasm":KPe};var qR="2.3.0";function YPe(e,t,n){let r=function(i,l,u){let c=new RegExp("\\b"+l+" \\w+ (\\w+)","ig");i.replace(c,(p,d)=>(u[d]=0,p))},s=function(i,l){let u=e.createShader(l);if(e.shaderSource(u,i),e.compileShader(u),!e.getShaderParameter(u,e.COMPILE_STATUS))throw new Error("filter: gl compile failed",e.getShaderInfoLog(u));return u};this.uniform={},this.attribute={};let o=s(t,e.VERTEX_SHADER),a=s(n,e.FRAGMENT_SHADER);if(this.id=e.createProgram(),e.attachShader(this.id,o),e.attachShader(this.id,a),e.linkProgram(this.id),!e.getProgramParameter(this.id,e.LINK_STATUS))throw new Error("filter: gl link failed",e.getProgramInfoLog(this.id));e.useProgram(this.id),r(t,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=e.getAttribLocation(this.id,i);r(t,"uniform",this.uniform),r(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=e.getUniformLocation(this.id,i)}function AU(e){e||(e={});let t=0,n=null,r=!1,s=-1,o=[null,null],a=[],i=-1,l=-1,u=null,c=null,p={},d=e.canvas||document.createElement("canvas"),f={},h={INTERMEDIATE:1},m=d.getContext("webgl");if(!m)throw new Error("filter: context failed");this.addFilter=function(v){let w=Array.prototype.slice.call(arguments,1),k=p[v];a.push({func:k,args:w})},this.reset=function(){a=[]};let g=function(v,w){if(!(v===i&&w===l)){if(d.width=v,i=v,d.height=w,l=w,!u){let k=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);u=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,u),m.bufferData(m.ARRAY_BUFFER,k,m.STATIC_DRAW),m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}m.viewport(0,0,i,l),o=[null,null]}},x=function(v,w){let k=m.createFramebuffer();m.bindFramebuffer(m.FRAMEBUFFER,k);let I=m.createRenderbuffer();m.bindRenderbuffer(m.RENDERBUFFER,I);let N=m.createTexture();return m.bindTexture(m.TEXTURE_2D,N),m.texImage2D(m.TEXTURE_2D,0,m.RGBA,v,w,0,m.RGBA,m.UNSIGNED_BYTE,null),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.LINEAR),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.LINEAR),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,m.TEXTURE_2D,N,0),m.bindTexture(m.TEXTURE_2D,null),m.bindFramebuffer(m.FRAMEBUFFER,null),{fbo:k,texture:N}},y=function(v){return o[v]=o[v]||x(i,l),o[v]},b=function(v=null){var N,T;let w=null,k=null,I=!1;t===0?w=n:w=(N=y(s))==null?void 0:N.texture,t++,r&&!(v&h.INTERMEDIATE)?(k=null,I=t%2==0):(s=(s+1)%2,k=(T=y(s))==null?void 0:T.fbo),m.bindTexture(m.TEXTURE_2D,w),m.bindFramebuffer(m.FRAMEBUFFER,k),m.uniform1f(c.uniform.flipY,I?-1:1),m.drawArrays(m.TRIANGLES,0,6)};this.apply=function(v){if(g(v.width,v.height),t=0,n||(n=m.createTexture()),m.bindTexture(m.TEXTURE_2D,n),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.NEAREST),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST),m.texImage2D(m.TEXTURE_2D,0,m.RGBA,m.RGBA,m.UNSIGNED_BYTE,v),a.length===0)return b(),d;for(let w=0;wr.kernelName.toLowerCase())}async function K5(){if(Ee.browser=typeof navigator!="undefined",Ee.node=typeof process!="undefined",Ee.worker=Ee.browser?typeof WorkerGlobalScope!="undefined":void 0,Ee.tfjs.version=qw,Ee.offscreen=typeof Ee.offscreen=="undefined"?typeof OffscreenCanvas!="undefined":Ee.offscreen,typeof navigator!="undefined"){let e=navigator.userAgent.match(/\(([^()]+)\)/g);if(e&&e[0]){let t=e[0].match(/\(([^()]+)\)/g);Ee.platform=t&&t[0]?t[0].replace(/\(|\)/g,""):"",Ee.agent=navigator.userAgent.replace(e[0],""),Ee.platform[1]&&(Ee.agent=Ee.agent.replace(e[1],"")),Ee.agent=Ee.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(Ee.platform=`${process.platform} ${process.arch}`,Ee.agent=`NodeJS ${process.version}`);await JPe()}async function vU(e){Ee=os(Ee,e)}var X5=2048,wt,rr,$r;function Zo(e,t){let n;return Ee.browser?Ee.offscreen?n=new OffscreenCanvas(e,t):(n=document.createElement("canvas"),n.width=e,n.height=t):typeof Ee.Canvas!="undefined"?n=new Ee.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t)),n}function rx(e,t){let n;if(!e)return t.debug&&Ce("input is missing"),{tensor:null,canvas:null};if(!(e instanceof Vt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof Ee.Canvas!="undefined"&&e instanceof Ee.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input type is not recognized");if(e instanceof Vt){if(e.isDisposedInternal)throw new Error("input tensor is disposed");if(e.shape&&e.shape.length===4&&e.shape[0]===1&&e.shape[3]===3)n=mi(e);else throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${e.shape}`)}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&Ce("input stream is not ready"),{tensor:null,canvas:wt};let r=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,s=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!r||!s)return t.debug&&Ce("cannot determine input dimensions"),{tensor:null,canvas:wt};let o=r,a=s;if(o>X5&&(o=X5,a=Math.trunc(o*s/r)),a>X5&&(a=X5,o=Math.trunc(a*r/s)),(t.filter.width||0)>0?o=t.filter.width:(t.filter.height||0)>0&&(o=r*((t.filter.height||0)/s)),(t.filter.height||0)>0?a=t.filter.height:(t.filter.width||0)>0&&(a=s*((t.filter.width||0)/r)),!o||!a)throw new Error("input cannot determine dimension");(!wt||(wt==null?void 0:wt.width)!==o||(wt==null?void 0:wt.height)!==a)&&(wt=Zo(o,a));let i=wt.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(r,0),i.scale(-1,1),i.drawImage(e,0,0,r,s,0,0,wt==null?void 0:wt.width,wt==null?void 0:wt.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,r,s,0,0,wt==null?void 0:wt.width,wt==null?void 0:wt.height),t.filter.enabled&&Ee.webgl.supported){if((!$r||!rr||wt.width!==rr.width||(wt==null?void 0:wt.height)!==(rr==null?void 0:rr.height))&&(rr=Zo(wt==null?void 0:wt.width,wt==null?void 0:wt.height),(rr==null?void 0:rr.width)!==(wt==null?void 0:wt.width)&&(rr.width=wt==null?void 0:wt.width),(rr==null?void 0:rr.height)!==(wt==null?void 0:wt.height)&&(rr.height=wt==null?void 0:wt.height),$r=Ee.browser?new AU({canvas:rr}):null),!$r)return{tensor:null,canvas:wt};$r.reset(),$r.addFilter("brightness",t.filter.brightness),t.filter.contrast!==0&&$r.addFilter("contrast",t.filter.contrast),t.filter.sharpness!==0&&$r.addFilter("sharpen",t.filter.sharpness),t.filter.blur!==0&&$r.addFilter("blur",t.filter.blur),t.filter.saturation!==0&&$r.addFilter("saturation",t.filter.saturation),t.filter.hue!==0&&$r.addFilter("hue",t.filter.hue),t.filter.negative&&$r.addFilter("negative"),t.filter.sepia&&$r.addFilter("sepia"),t.filter.vintage&&$r.addFilter("brownie"),t.filter.sepia&&$r.addFilter("sepia"),t.filter.kodachrome&&$r.addFilter("kodachrome"),t.filter.technicolor&&$r.addFilter("technicolor"),t.filter.polaroid&&$r.addFilter("polaroid"),t.filter.pixelate!==0&&$r.addFilter("pixelate",t.filter.pixelate),$r.apply(wt)}else rr=wt,$r&&($r=null);if(!n){let l;if(rr.data){let u=[rr.height,rr.width,3];l=jw(rr.data,u,"float32")}else if(typeof ImageData!="undefined"&&rr instanceof ImageData)l=Mo?Mo.fromPixels(rr):null;else if(t.backend==="webgl"||t.backend==="humangl"){let u=Zo(o,a);u.width=o,u.height=a;let c=u.getContext("2d");c==null||c.drawImage(rr,0,0),console.log("PIXELS",u),l=Mo&&Ee.browser?Mo.fromPixels(u):null;try{l=Mo&&Ee.browser?Mo.fromPixels(u):null}catch(p){throw new Error("browser webgl error")}}else{let u=Zo(o,a);if(!u)return{tensor:null,canvas:wt};u.width=o,u.height=a;let c=u.getContext("2d");if(!c)return{tensor:null,canvas:wt};c.drawImage(rr,0,0);let p=c.getImageData(0,0,o,a);Mo&&Ee.browser?l=Mo.fromPixels(p):l=ce(()=>{let d=ls(Array.from(p.data),[o,a,4]),f=_r(d,4,2),h=vs([f[0],f[1],f[2]],2);return ie(h,[d.shape[0],d.shape[1],3])})}if(l){let u=Fe(l,"float32");n=kr(u,0),ye(l),ye(u)}else throw n=xr([1,o,a,3]),new Error("cannot create tensor from input")}}return{tensor:n,canvas:t.filter.return?rr:null}}var KR=0,wU=1;async function kU(e,t){if(e.cacheSensitivity===0)return!1;let n=32;if(!t.shape[1]||!t.shape[2])return!1;let r=ht.resizeBilinear(t,[Math.trunc(t.shape[1]/n),Math.trunc(t.shape[2]/n)]),s=await r.data();ye(r);let o=0;for(let l=0;l10*e.cacheSensitivity?0:a,i}var gl={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},XR={count:468,mouth:13,symmetryLine:[13,gl.midwayBetweenEyes[0]]},dA={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},ZR=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]}],fA=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],Ah=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var QPe=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],e9e=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],t9e=[33,133,362,263,1,78,308],SQe=QPe.map(e=>fA[e]),NQe=e9e.map(e=>fA[e]),TQe=t9e.map(e=>fA[e]);var IU=e=>({startPoint:gt(e,[0,0],[-1,2]),endPoint:gt(e,[0,2],[-1,2])});var hA=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],Z5=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2],YR=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],JR=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],CU=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:r}},QR=(e,t,n)=>{let r=t.shape[1],s=t.shape[2];return ht.cropAndResize(t,[[e.startPoint[1]/r,e.startPoint[0]/s,e.endPoint[1]/r,e.endPoint[0]/s]],[0],n)},mA=(e,t=1.5)=>{let n=Z5(e),r=hA(e),s=[t*r[0]/2,t*r[1]/2];return{startPoint:[n[0]-s[0],n[1]-s[1]],endPoint:[n[0]+s[0],n[1]+s[1]],landmarks:e.landmarks}},gA=e=>{let t=Z5(e),n=hA(e),r=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-r),Math.round(t[1]-r)],endPoint:[Math.round(t[0]+r),Math.round(t[1]+r)],landmarks:e.landmarks}},Y5=e=>{let t=e.map(r=>r[0]),n=e.map(r=>r[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},J5=[[1,0,0],[0,1,0],[0,0,1]],n9e=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),r9e=(e,t)=>n9e(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var SU=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],vh=(e,t)=>{let n=0;for(let r=0;r{let n=[];for(let r=0;r{let n=[],r=e.length;for(let s=0;s{let n=Math.cos(e),r=Math.sin(e),s=[[n,-r,0],[r,n,0],[0,0,1]],o=SU(t[0],t[1]),a=NU(o,s),i=SU(-t[0],-t[1]);return NU(a,i)},o9e=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],r=[-vh(t[0],n),-vh(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[1]),[0,0,1]]},a9e=(e,t)=>[vh(e,t[0]),vh(e,t[1])];function _U(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let r=0;r[o[0]/s*(p[0]-s/2),o[1]/s*(p[1]-s/2),p[2]||0]),i=n!==0?TU(n,[0,0]):J5,l=n!==0?a.map(p=>[...a9e(p,i),p[2]]):a,u=n!==0?o9e(r):J5,c=[...Z5({startPoint:t.startPoint,endPoint:t.endPoint}),1];return l.map(p=>[Math.round(p[0]+vh(c,u[0])),Math.round(p[1]+vh(c,u[1])),Math.round(p[2]||0)])}function e7(e,t,n){let[r,s]=e.landmarks.length>=XR.count?XR.symmetryLine:dA.symmetryLine,o=r9e(e.landmarks[r],e.landmarks[s]),a=Z5({startPoint:e.startPoint,endPoint:e.endPoint}),i=[a[0]/t.shape[2],a[1]/t.shape[1]],l=ht.rotateWithOffset(t,o,0,i),u=TU(-o,a),c=QR({startPoint:e.startPoint,endPoint:e.endPoint},l,[n,n]),p=Me(c,255);return ye(c),ye(l),[o,u,p]}var RU=6,ya,t7=[],DU=null,ba=0,xA=()=>ba;async function $U(e){var t;return Ee.initial&&(ya=null),ya?e.debug&&Ce("cached model:",ya.modelUrl):(ya=await yn(an(e.modelBasePath,((t=e.face.detector)==null?void 0:t.modelPath)||"")),!ya||!ya.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",ya.modelUrl)),ba=ya.inputs[0].shape?ya.inputs[0].shape[2]:0,ba===-1&&(ba=64),t7=_U(ba),DU=bi(t7),ya}function i9e(e){let t=gt(e,[0,1],[-1,2]),n=Re(t,DU),r=gt(e,[0,3],[-1,2]),s=Me(r,ba),o=Me(n,ba),a=Me(s,2),i=Ge(o,a),l=Re(o,a),u=te(i,ba),c=te(l,ba);return v0([u,c],1)}async function FU(e,t){var u,c,p,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return{boxes:[]};let[n,r,s]=ce(()=>{let f=ht.resizeBilinear(e,[ba,ba]),h=Ge(Me(f,127.5),.5),m=ya==null?void 0:ya.execute(h),g;if(Array.isArray(m)){let A=m.sort((I,N)=>I.size-N.size),v=En([A[0],A[2]],2),w=En([A[1],A[3]],2),k=En([w,v],1);g=ln(k,0)}else g=ln(m);let x=i9e(g),y=gt(g,[0,0],[-1,1]),b=ln(xo(y));return[g,x,b]}),o=await ht.nonMaxSuppressionAsync(r,s,((u=t.face.detector)==null?void 0:u.maxDetected)||0,((c=t.face.detector)==null?void 0:c.iouThreshold)||0,((p=t.face.detector)==null?void 0:p.minConfidence)||0),a=await o.array();ye(o);let i=[],l=await s.data();for(let f=0;f(((d=t.face.detector)==null?void 0:d.minConfidence)||0)){let m=gt(r,[a[f],0],[1,-1]),g=ce(()=>ie(ln(gt(n,[a[f],RU-1],[1,-1])),[RU,-1]));i.push({box:IU(m),landmarks:g,anchor:t7[a[f]],confidence:h}),ye(m)}}return ye(n),ye(r),ye(s),{boxes:i,scaleFactor:[e.shape[2]/ba,e.shape[1]/ba]}}var La,ap=0,l9e=2.3,n7=gl.leftEyeLower0,r7=gl.rightEyeLower0,sx={leftBounds:[n7[0],n7[n7.length-1]],rightBounds:[r7[0],r7[r7.length-1]]},ox={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function OU(e){var t;return Ee.initial&&(La=null),La?e.debug&&Ce("cached model:",La.modelUrl):(La=await yn(an(e.modelBasePath,((t=e.face.iris)==null?void 0:t.modelPath)||"")),!La||!La.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",La.modelUrl)),ap=La.inputs[0].shape?La.inputs[0].shape[2]:0,ap===-1&&(ap=64),La}function Q5(e,t,n,r){for(let s=0;s{let t=e[sx.leftBounds[0]][2],n=e[sx.rightBounds[0]][2];return t-n},PU=(e,t,n,r,s=!1,o)=>{let a=gA(mA(Y5([e[n],e[r]]),l9e)),i=hA(a),l=ht.cropAndResize(t,[[a.startPoint[1]/o,a.startPoint[0]/o,a.endPoint[1]/o,a.endPoint[0]/o]],[0],[ap,ap]);if(s&&Ee.kernels.includes("flipleftright")){let u=ht.flipLeftRight(l);ye(l),l=u}return{box:a,boxSize:i,crop:l}},MU=(e,t,n,r=!1)=>{let s=[];for(let o=0;o{let r=e[gl[`${n}EyeUpper0`][ox.upperCenter]][2],s=e[gl[`${n}EyeLower0`][ox.lowerCenter]][2],o=(r+s)/2;return t.map((a,i)=>{let l=o;return i===2?l=r:i===4&&(l=s),[a[0],a[1],l]})};async function LU(e,t,n,r){if(!La)return n.debug&&Ce("face mesh iris detection requested, but model is not loaded"),e;let{box:s,boxSize:o,crop:a}=PU(e,t,sx.leftBounds[0],sx.leftBounds[1],!0,r),{box:i,boxSize:l,crop:u}=PU(e,t,sx.rightBounds[0],sx.rightBounds[1],!0,r),c=En([a,u]);ye(a),ye(u);let p=La.predict(c);ye(c);let d=await p.data();ye(p);let f=d.slice(0,ox.numCoordinates*3),{rawCoords:h,iris:m}=MU(f,s,o,!0),g=d.slice(ox.numCoordinates*3),{rawCoords:x,iris:y}=MU(g,i,l),b=u9e(e);Math.abs(b)<30?(Q5(e,h,"left",null),Q5(e,x,"right",null)):b<1?Q5(e,h,"left",["EyeUpper0","EyeLower0"]):Q5(e,x,"right",["EyeUpper0","EyeLower0"]);let A=zU(e,m,"left"),v=zU(e,y,"right");return e.concat(A).concat(v)}var xl=[],Ba=null,_i=0,s7=Number.MAX_SAFE_INTEGER,BU=0;async function VU(e,t){var o,a,i,l,u,c,p,d,f,h,m,g;if(!t.skipFrame||(BU!==((o=t.face.detector)==null?void 0:o.maxDetected)||!((a=t.face.mesh)==null?void 0:a.enabled))&&s7>(((i=t.face.detector)==null?void 0:i.skipFrames)||0)){let x=await FU(e,t);xl=[];for(let y of x.boxes){let b=await y.box.startPoint.data(),A=await y.box.endPoint.data(),v=await y.landmarks.array();xl.push({startPoint:b,endPoint:A,landmarks:v,confidence:y.confidence})}x.boxes.forEach(y=>ye([y.box.startPoint,y.box.endPoint,y.landmarks]));for(let y=0;y[_[0]/(e.shape[2]||0),_[1]/(e.shape[1]||0),(_[2]||0)/_i]),x={...mA(Y5(A.mesh),1.5),confidence:x.confidence};for(let _ of Object.keys(gl))A.annotations[_]=gl[_].map(R=>A.mesh[R]);((h=t.face.detector)==null?void 0:h.rotation)&&t.face.mesh.enabled&&((m=t.face.description)==null?void 0:m.enabled)&&Ee.kernels.includes("rotatewithoffset")&&(ye(A.tensor),[y,b,A.tensor]=e7(x,e,_i)),A.box=YR(x,e),A.boxRaw=JR(x,e),A.score=Math.round(100*I||100*x.confidence||0)/100,A.faceScore=Math.round(100*I)/100,x={...gA(x),confidence:x.confidence,faceConfidence:I}}}else{A.box=YR(x,e),A.boxRaw=JR(x,e),A.score=Math.round(100*x.confidence||0)/100,A.mesh=x.landmarks.map(v=>[(x.startPoint[0]+x.endPoint[0])/2+(x.endPoint[0]+x.startPoint[0])*v[0]/xA(),(x.startPoint[1]+x.endPoint[1])/2+(x.endPoint[1]+x.startPoint[1])*v[1]/xA()]),A.meshRaw=A.mesh.map(v=>[v[0]/(e.shape[2]||0),v[1]/(e.shape[1]||0),(v[2]||0)/_i]);for(let v of Object.keys(dA))A.annotations[v]=[A.mesh[dA[v]]]}n.push(A),r.push(x)}return((g=t.face.mesh)==null?void 0:g.enabled)&&(xl=r.filter(x=>{var y;return x.confidence>(((y=t.face.detector)==null?void 0:y.minConfidence)||0)})),BU=n.length,n}async function WU(e){var t;return Ee.initial&&(Ba=null),Ba?e.debug&&Ce("cached model:",Ba.modelUrl):(Ba=await yn(an(e.modelBasePath,((t=e.face.mesh)==null?void 0:t.modelPath)||"")),!Ba||!Ba.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",Ba.modelUrl)),_i=Ba.inputs[0].shape?Ba.inputs[0].shape[2]:0,_i===-1&&(_i=64),Ba}var GU=Ah,UU=fA;var Ks,e3=[],jU=0,o7=Number.MAX_SAFE_INTEGER;async function HU(e){var n,r;let t=an(e.modelBasePath,((n=e.face.description)==null?void 0:n.modelPath)||"");return Ee.initial&&(Ks=null),Ks?e.debug&&Ce("cached model:",t):(Ks=await yn(t),Ks?e.debug&&Ce("load model:",t):Ce("load model failed:",((r=e.face.description)==null?void 0:r.modelPath)||"")),Ks}function a7(e){return ce(()=>{let n=e.image||e.tensor||e;if(!(n instanceof Vt))return null;let r=[[.05,.15,.85,.85]];if(!(Ks==null?void 0:Ks.inputs[0].shape))return null;let s=n.shape.length===3?ht.cropAndResize(kr(n,0),r,[0],[Ks.inputs[0].shape[2],Ks.inputs[0].shape[1]]):ht.cropAndResize(n,r,[0],[Ks.inputs[0].shape[2],Ks.inputs[0].shape[1]]);return te(s,255)})}async function i7(e,t,n,r){var s,o,a;return Ks?o7<(((s=t.face.description)==null?void 0:s.skipFrames)||0)&&t.skipFrame&&jU===r&&((o=e3[n])==null?void 0:o.age)&&((a=e3[n])==null?void 0:a.age)>0?(o7++,e3[n]):(o7=0,new Promise(async i=>{var p,d;let l=a7(e),u,c={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(((p=t.face.description)==null?void 0:p.enabled)&&(u=await(Ks==null?void 0:Ks.predict(l))),ye(l),u){let f=await u.find(A=>A.shape[1]===1).data(),h=Math.trunc(200*Math.abs(f[0]-.5))/100;h>(((d=t.face.description)==null?void 0:d.minConfidence)||0)&&(c.gender=f[0]<=.5?"female":"male",c.genderScore=Math.min(.99,h));let m=xi(u.find(A=>A.shape[1]===100),1),g=(await m.data())[0];ye(m);let x=await u.find(A=>A.shape[1]===100).data();c.age=Math.round(x[g-1]>x[g+1]?10*g-100*x[g-1]:10*g+100*x[g+1])/10;let b=await u.find(A=>A.shape[1]===1024).data();c.descriptor=[...b],u.forEach(A=>ye(A))}e3[n]=c,jU=r,i(c)})):null}var c9e=["angry","disgust","fear","happy","sad","surprise","neutral"],Xr,t3=[],qU=0,l7=Number.MAX_SAFE_INTEGER,u7=[.2989,.587,.114];async function KU(e){var t;return Ee.initial&&(Xr=null),Xr?e.debug&&Ce("cached model:",Xr.modelUrl):(Xr=await yn(an(e.modelBasePath,((t=e.face.emotion)==null?void 0:t.modelPath)||"")),!Xr||!Xr.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",Xr.modelUrl)),Xr}async function c7(e,t,n,r){var s;return Xr?l7<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0)&&t.skipFrame&&qU===r&&t3[n]&&t3[n].length>0?(l7++,t3[n]):(l7=0,new Promise(async o=>{var g,x;let a=ht.resizeBilinear(e,[(Xr==null?void 0:Xr.inputs[0].shape)?Xr.inputs[0].shape[2]:0,(Xr==null?void 0:Xr.inputs[0].shape)?Xr.inputs[0].shape[1]:0],!1),[i,l,u]=_r(a,3,3);ye(a);let c=te(i,u7[0]),p=te(l,u7[1]),d=te(u,u7[2]);ye(i),ye(l),ye(u);let f=Yw([c,p,d]);ye(c),ye(p),ye(d);let h=ce(()=>te(Ge(f,.5),2));ye(f);let m=[];if((g=t.face.emotion)==null?void 0:g.enabled){let y=await(Xr==null?void 0:Xr.predict(h)),b=await y.data();ye(y);for(let A=0;A(((x=t.face.emotion)==null?void 0:x.minConfidence)||0)&&m.push({score:Math.min(.99,Math.trunc(100*b[A])/100),emotion:c9e[A]});m.sort((A,v)=>v.score-A.score)}ye(h),t3[n]=m,qU=r,o(m)})):null}var yA=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],p9e=yA.length,bA=yA.reduce((e,t,n)=>(e[t]=n,e),{}),d9e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],aet=d9e.map(([e,t])=>[bA[e],bA[t]]),XU=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function ZU(e){let t=e.reduce(({maxX:n,maxY:r,minX:s,minY:o},{position:{x:a,y:i}})=>({maxX:Math.max(n,a),maxY:Math.max(r,i),minX:Math.min(s,a),minY:Math.min(o,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function YU(e,[t,n],[r,s]){let o=t/r,a=n/s,i=(u,c)=>({id:c,score:u.score,boxRaw:[u.box[0]/s,u.box[1]/r,u.box[2]/s,u.box[3]/r],box:[Math.trunc(u.box[0]*a),Math.trunc(u.box[1]*o),Math.trunc(u.box[2]*a),Math.trunc(u.box[3]*o)],keypoints:u.keypoints.map(({score:p,part:d,position:f})=>({score:p,part:d,position:[Math.trunc(f.x*a),Math.trunc(f.y*o)],positionRaw:[f.x/r,f.y/r]}))});return e.map((u,c)=>i(u,c))}var p7=class{constructor(t,n){nt(this,"priorityQueue");nt(this,"numberOfElements");nt(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function JU(e,t,n,r){let s=n-e,o=r-t;return s*s+o*o}function m7(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Yo,f9e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],n3=1,ax=16,h9e=50**2;function QU(e,t,n,r,s,o,a=2){let i=x=>({y:o.get(x.y,x.x,e),x:o.get(x.y,x.x,o.shape[2]/2+e)}),l=(x,y,b)=>({y:h7(Math.round(x.y/ax),0,y-1),x:h7(Math.round(x.x/ax),0,b-1)}),[u,c]=r.shape,p=l(t.position,u,c),d=i(p),h=m7(t.position,d);for(let x=0;x[bA[d],bA[f]]),a=o.map(([,d])=>d),i=o.map(([d])=>d),l=t.shape[2],u=a.length,c=new Array(l),p=f7(e.part,ax,n);c[e.part.id]={score:e.score,part:yA[e.part.id],position:p};for(let d=u-1;d>=0;--d){let f=a[d],h=i[d];c[f]&&!c[h]&&(c[h]=QU(d,c[f],h,t,n,s))}for(let d=0;dt){i=!1;break}if(!i)break}return i}function x9e(e,t){let[n,r,s]=t.shape,o=new p7(n*r*s,({score:a})=>a);for(let a=0;a{var a;let o=(a=s[r])==null?void 0:a.position;return o?JU(n,t,o.y,o.x)<=h9e:!1})}function y9e(e,t){return t.reduce((r,{position:s,score:o},a)=>(ej(e,s,a)||(r+=o),r),0)/t.length}function b9e(e,t,n,r,s,o){let a=[],i=x9e(o,t);for(;a.lengthf.score>o);let p=y9e(a,c),d=ZU(c);p>o&&a.push({keypoints:c,box:d,score:Math.round(100*p)/100})}return a}async function g7(e,t){let n=ce(()=>{if(!Yo.inputs[0].shape)return[];let a=ht.resizeBilinear(e,[Yo.inputs[0].shape[2],Yo.inputs[0].shape[1]]),i=Ge(Me(Fe(a,"float32"),127.5),1),u=Yo.execute(i,f9e).map(c=>ln(c,[0]));return u[1]=u[1].sigmoid(),u}),r=await Promise.all(n.map(a=>a.buffer()));for(let a of n)ye(a);let s=await b9e(r[0],r[1],r[2],r[3],t.body.maxDetected,t.body.minConfidence);return Yo.inputs[0].shape?YU(s,[e.shape[1],e.shape[2]],[Yo.inputs[0].shape[2],Yo.inputs[0].shape[1]]):[]}async function tj(e){return!Yo||Ee.initial?(Yo=await yn(an(e.modelBasePath,e.body.modelPath||"")),!Yo||!Yo.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",Yo.modelUrl)):e.debug&&Ce("cached model:",Yo.modelUrl),Yo}function r3(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function AA(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function nj(e,t,n){let r=t.shape[1],s=t.shape[2],o=[[e.startPoint[1]/r,e.startPoint[0]/s,e.endPoint[1]/r,e.endPoint[0]/s]];return ht.cropAndResize(t,o,[0],n)}function rj(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.palmLandmarks.map(o=>[o[0]*t[0],o[1]*t[1]]);return{startPoint:n,endPoint:r,palmLandmarks:s,confidence:e.confidence}}function s3(e,t=1.5){let n=AA(e),r=r3(e),s=[t*r[0]/2,t*r[1]/2],o=[n[0]-s[0],n[1]-s[1]],a=[n[0]+s[0],n[1]+s[1]];return{startPoint:o,endPoint:a,palmLandmarks:e.palmLandmarks}}function o3(e){let t=AA(e),n=r3(e),s=Math.max(...n)/2,o=[t[0]-s,t[1]-s],a=[t[0]+s,t[1]+s];return{startPoint:o,endPoint:a,palmLandmarks:e.palmLandmarks}}var sj=[{x:.015625,y:.015625},{x:.015625,y:.015625},{x:.046875,y:.015625},{x:.046875,y:.015625},{x:.078125,y:.015625},{x:.078125,y:.015625},{x:.109375,y:.015625},{x:.109375,y:.015625},{x:.140625,y:.015625},{x:.140625,y:.015625},{x:.171875,y:.015625},{x:.171875,y:.015625},{x:.203125,y:.015625},{x:.203125,y:.015625},{x:.234375,y:.015625},{x:.234375,y:.015625},{x:.265625,y:.015625},{x:.265625,y:.015625},{x:.296875,y:.015625},{x:.296875,y:.015625},{x:.328125,y:.015625},{x:.328125,y:.015625},{x:.359375,y:.015625},{x:.359375,y:.015625},{x:.390625,y:.015625},{x:.390625,y:.015625},{x:.421875,y:.015625},{x:.421875,y:.015625},{x:.453125,y:.015625},{x:.453125,y:.015625},{x:.484375,y:.015625},{x:.484375,y:.015625},{x:.515625,y:.015625},{x:.515625,y:.015625},{x:.546875,y:.015625},{x:.546875,y:.015625},{x:.578125,y:.015625},{x:.578125,y:.015625},{x:.609375,y:.015625},{x:.609375,y:.015625},{x:.640625,y:.015625},{x:.640625,y:.015625},{x:.671875,y:.015625},{x:.671875,y:.015625},{x:.703125,y:.015625},{x:.703125,y:.015625},{x:.734375,y:.015625},{x:.734375,y:.015625},{x:.765625,y:.015625},{x:.765625,y:.015625},{x:.796875,y:.015625},{x:.796875,y:.015625},{x:.828125,y:.015625},{x:.828125,y:.015625},{x:.859375,y:.015625},{x:.859375,y:.015625},{x:.890625,y:.015625},{x:.890625,y:.015625},{x:.921875,y:.015625},{x:.921875,y:.015625},{x:.953125,y:.015625},{x:.953125,y:.015625},{x:.984375,y:.015625},{x:.984375,y:.015625},{x:.015625,y:.046875},{x:.015625,y:.046875},{x:.046875,y:.046875},{x:.046875,y:.046875},{x:.078125,y:.046875},{x:.078125,y:.046875},{x:.109375,y:.046875},{x:.109375,y:.046875},{x:.140625,y:.046875},{x:.140625,y:.046875},{x:.171875,y:.046875},{x:.171875,y:.046875},{x:.203125,y:.046875},{x:.203125,y:.046875},{x:.234375,y:.046875},{x:.234375,y:.046875},{x:.265625,y:.046875},{x:.265625,y:.046875},{x:.296875,y:.046875},{x:.296875,y:.046875},{x:.328125,y:.046875},{x:.328125,y:.046875},{x:.359375,y:.046875},{x:.359375,y:.046875},{x:.390625,y:.046875},{x:.390625,y:.046875},{x:.421875,y:.046875},{x:.421875,y:.046875},{x:.453125,y:.046875},{x:.453125,y:.046875},{x:.484375,y:.046875},{x:.484375,y:.046875},{x:.515625,y:.046875},{x:.515625,y:.046875},{x:.546875,y:.046875},{x:.546875,y:.046875},{x:.578125,y:.046875},{x:.578125,y:.046875},{x:.609375,y:.046875},{x:.609375,y:.046875},{x:.640625,y:.046875},{x:.640625,y:.046875},{x:.671875,y:.046875},{x:.671875,y:.046875},{x:.703125,y:.046875},{x:.703125,y:.046875},{x:.734375,y:.046875},{x:.734375,y:.046875},{x:.765625,y:.046875},{x:.765625,y:.046875},{x:.796875,y:.046875},{x:.796875,y:.046875},{x:.828125,y:.046875},{x:.828125,y:.046875},{x:.859375,y:.046875},{x:.859375,y:.046875},{x:.890625,y:.046875},{x:.890625,y:.046875},{x:.921875,y:.046875},{x:.921875,y:.046875},{x:.953125,y:.046875},{x:.953125,y:.046875},{x:.984375,y:.046875},{x:.984375,y:.046875},{x:.015625,y:.078125},{x:.015625,y:.078125},{x:.046875,y:.078125},{x:.046875,y:.078125},{x:.078125,y:.078125},{x:.078125,y:.078125},{x:.109375,y:.078125},{x:.109375,y:.078125},{x:.140625,y:.078125},{x:.140625,y:.078125},{x:.171875,y:.078125},{x:.171875,y:.078125},{x:.203125,y:.078125},{x:.203125,y:.078125},{x:.234375,y:.078125},{x:.234375,y:.078125},{x:.265625,y:.078125},{x:.265625,y:.078125},{x:.296875,y:.078125},{x:.296875,y:.078125},{x:.328125,y:.078125},{x:.328125,y:.078125},{x:.359375,y:.078125},{x:.359375,y:.078125},{x:.390625,y:.078125},{x:.390625,y:.078125},{x:.421875,y:.078125},{x:.421875,y:.078125},{x:.453125,y:.078125},{x:.453125,y:.078125},{x:.484375,y:.078125},{x:.484375,y:.078125},{x:.515625,y:.078125},{x:.515625,y:.078125},{x:.546875,y:.078125},{x:.546875,y:.078125},{x:.578125,y:.078125},{x:.578125,y:.078125},{x:.609375,y:.078125},{x:.609375,y:.078125},{x:.640625,y:.078125},{x:.640625,y:.078125},{x:.671875,y:.078125},{x:.671875,y:.078125},{x:.703125,y:.078125},{x:.703125,y:.078125},{x:.734375,y:.078125},{x:.734375,y:.078125},{x:.765625,y:.078125},{x:.765625,y:.078125},{x:.796875,y:.078125},{x:.796875,y:.078125},{x:.828125,y:.078125},{x:.828125,y:.078125},{x:.859375,y:.078125},{x:.859375,y:.078125},{x:.890625,y:.078125},{x:.890625,y:.078125},{x:.921875,y:.078125},{x:.921875,y:.078125},{x:.953125,y:.078125},{x:.953125,y:.078125},{x:.984375,y:.078125},{x:.984375,y:.078125},{x:.015625,y:.109375},{x:.015625,y:.109375},{x:.046875,y:.109375},{x:.046875,y:.109375},{x:.078125,y:.109375},{x:.078125,y:.109375},{x:.109375,y:.109375},{x:.109375,y:.109375},{x:.140625,y:.109375},{x:.140625,y:.109375},{x:.171875,y:.109375},{x:.171875,y:.109375},{x:.203125,y:.109375},{x:.203125,y:.109375},{x:.234375,y:.109375},{x:.234375,y:.109375},{x:.265625,y:.109375},{x:.265625,y:.109375},{x:.296875,y:.109375},{x:.296875,y:.109375},{x:.328125,y:.109375},{x:.328125,y:.109375},{x:.359375,y:.109375},{x:.359375,y:.109375},{x:.390625,y:.109375},{x:.390625,y:.109375},{x:.421875,y:.109375},{x:.421875,y:.109375},{x:.453125,y:.109375},{x:.453125,y:.109375},{x:.484375,y:.109375},{x:.484375,y:.109375},{x:.515625,y:.109375},{x:.515625,y:.109375},{x:.546875,y:.109375},{x:.546875,y:.109375},{x:.578125,y:.109375},{x:.578125,y:.109375},{x:.609375,y:.109375},{x:.609375,y:.109375},{x:.640625,y:.109375},{x:.640625,y:.109375},{x:.671875,y:.109375},{x:.671875,y:.109375},{x:.703125,y:.109375},{x:.703125,y:.109375},{x:.734375,y:.109375},{x:.734375,y:.109375},{x:.765625,y:.109375},{x:.765625,y:.109375},{x:.796875,y:.109375},{x:.796875,y:.109375},{x:.828125,y:.109375},{x:.828125,y:.109375},{x:.859375,y:.109375},{x:.859375,y:.109375},{x:.890625,y:.109375},{x:.890625,y:.109375},{x:.921875,y:.109375},{x:.921875,y:.109375},{x:.953125,y:.109375},{x:.953125,y:.109375},{x:.984375,y:.109375},{x:.984375,y:.109375},{x:.015625,y:.140625},{x:.015625,y:.140625},{x:.046875,y:.140625},{x:.046875,y:.140625},{x:.078125,y:.140625},{x:.078125,y:.140625},{x:.109375,y:.140625},{x:.109375,y:.140625},{x:.140625,y:.140625},{x:.140625,y:.140625},{x:.171875,y:.140625},{x:.171875,y:.140625},{x:.203125,y:.140625},{x:.203125,y:.140625},{x:.234375,y:.140625},{x:.234375,y:.140625},{x:.265625,y:.140625},{x:.265625,y:.140625},{x:.296875,y:.140625},{x:.296875,y:.140625},{x:.328125,y:.140625},{x:.328125,y:.140625},{x:.359375,y:.140625},{x:.359375,y:.140625},{x:.390625,y:.140625},{x:.390625,y:.140625},{x:.421875,y:.140625},{x:.421875,y:.140625},{x:.453125,y:.140625},{x:.453125,y:.140625},{x:.484375,y:.140625},{x:.484375,y:.140625},{x:.515625,y:.140625},{x:.515625,y:.140625},{x:.546875,y:.140625},{x:.546875,y:.140625},{x:.578125,y:.140625},{x:.578125,y:.140625},{x:.609375,y:.140625},{x:.609375,y:.140625},{x:.640625,y:.140625},{x:.640625,y:.140625},{x:.671875,y:.140625},{x:.671875,y:.140625},{x:.703125,y:.140625},{x:.703125,y:.140625},{x:.734375,y:.140625},{x:.734375,y:.140625},{x:.765625,y:.140625},{x:.765625,y:.140625},{x:.796875,y:.140625},{x:.796875,y:.140625},{x:.828125,y:.140625},{x:.828125,y:.140625},{x:.859375,y:.140625},{x:.859375,y:.140625},{x:.890625,y:.140625},{x:.890625,y:.140625},{x:.921875,y:.140625},{x:.921875,y:.140625},{x:.953125,y:.140625},{x:.953125,y:.140625},{x:.984375,y:.140625},{x:.984375,y:.140625},{x:.015625,y:.171875},{x:.015625,y:.171875},{x:.046875,y:.171875},{x:.046875,y:.171875},{x:.078125,y:.171875},{x:.078125,y:.171875},{x:.109375,y:.171875},{x:.109375,y:.171875},{x:.140625,y:.171875},{x:.140625,y:.171875},{x:.171875,y:.171875},{x:.171875,y:.171875},{x:.203125,y:.171875},{x:.203125,y:.171875},{x:.234375,y:.171875},{x:.234375,y:.171875},{x:.265625,y:.171875},{x:.265625,y:.171875},{x:.296875,y:.171875},{x:.296875,y:.171875},{x:.328125,y:.171875},{x:.328125,y:.171875},{x:.359375,y:.171875},{x:.359375,y:.171875},{x:.390625,y:.171875},{x:.390625,y:.171875},{x:.421875,y:.171875},{x:.421875,y:.171875},{x:.453125,y:.171875},{x:.453125,y:.171875},{x:.484375,y:.171875},{x:.484375,y:.171875},{x:.515625,y:.171875},{x:.515625,y:.171875},{x:.546875,y:.171875},{x:.546875,y:.171875},{x:.578125,y:.171875},{x:.578125,y:.171875},{x:.609375,y:.171875},{x:.609375,y:.171875},{x:.640625,y:.171875},{x:.640625,y:.171875},{x:.671875,y:.171875},{x:.671875,y:.171875},{x:.703125,y:.171875},{x:.703125,y:.171875},{x:.734375,y:.171875},{x:.734375,y:.171875},{x:.765625,y:.171875},{x:.765625,y:.171875},{x:.796875,y:.171875},{x:.796875,y:.171875},{x:.828125,y:.171875},{x:.828125,y:.171875},{x:.859375,y:.171875},{x:.859375,y:.171875},{x:.890625,y:.171875},{x:.890625,y:.171875},{x:.921875,y:.171875},{x:.921875,y:.171875},{x:.953125,y:.171875},{x:.953125,y:.171875},{x:.984375,y:.171875},{x:.984375,y:.171875},{x:.015625,y:.203125},{x:.015625,y:.203125},{x:.046875,y:.203125},{x:.046875,y:.203125},{x:.078125,y:.203125},{x:.078125,y:.203125},{x:.109375,y:.203125},{x:.109375,y:.203125},{x:.140625,y:.203125},{x:.140625,y:.203125},{x:.171875,y:.203125},{x:.171875,y:.203125},{x:.203125,y:.203125},{x:.203125,y:.203125},{x:.234375,y:.203125},{x:.234375,y:.203125},{x:.265625,y:.203125},{x:.265625,y:.203125},{x:.296875,y:.203125},{x:.296875,y:.203125},{x:.328125,y:.203125},{x:.328125,y:.203125},{x:.359375,y:.203125},{x:.359375,y:.203125},{x:.390625,y:.203125},{x:.390625,y:.203125},{x:.421875,y:.203125},{x:.421875,y:.203125},{x:.453125,y:.203125},{x:.453125,y:.203125},{x:.484375,y:.203125},{x:.484375,y:.203125},{x:.515625,y:.203125},{x:.515625,y:.203125},{x:.546875,y:.203125},{x:.546875,y:.203125},{x:.578125,y:.203125},{x:.578125,y:.203125},{x:.609375,y:.203125},{x:.609375,y:.203125},{x:.640625,y:.203125},{x:.640625,y:.203125},{x:.671875,y:.203125},{x:.671875,y:.203125},{x:.703125,y:.203125},{x:.703125,y:.203125},{x:.734375,y:.203125},{x:.734375,y:.203125},{x:.765625,y:.203125},{x:.765625,y:.203125},{x:.796875,y:.203125},{x:.796875,y:.203125},{x:.828125,y:.203125},{x:.828125,y:.203125},{x:.859375,y:.203125},{x:.859375,y:.203125},{x:.890625,y:.203125},{x:.890625,y:.203125},{x:.921875,y:.203125},{x:.921875,y:.203125},{x:.953125,y:.203125},{x:.953125,y:.203125},{x:.984375,y:.203125},{x:.984375,y:.203125},{x:.015625,y:.234375},{x:.015625,y:.234375},{x:.046875,y:.234375},{x:.046875,y:.234375},{x:.078125,y:.234375},{x:.078125,y:.234375},{x:.109375,y:.234375},{x:.109375,y:.234375},{x:.140625,y:.234375},{x:.140625,y:.234375},{x:.171875,y:.234375},{x:.171875,y:.234375},{x:.203125,y:.234375},{x:.203125,y:.234375},{x:.234375,y:.234375},{x:.234375,y:.234375},{x:.265625,y:.234375},{x:.265625,y:.234375},{x:.296875,y:.234375},{x:.296875,y:.234375},{x:.328125,y:.234375},{x:.328125,y:.234375},{x:.359375,y:.234375},{x:.359375,y:.234375},{x:.390625,y:.234375},{x:.390625,y:.234375},{x:.421875,y:.234375},{x:.421875,y:.234375},{x:.453125,y:.234375},{x:.453125,y:.234375},{x:.484375,y:.234375},{x:.484375,y:.234375},{x:.515625,y:.234375},{x:.515625,y:.234375},{x:.546875,y:.234375},{x:.546875,y:.234375},{x:.578125,y:.234375},{x:.578125,y:.234375},{x:.609375,y:.234375},{x:.609375,y:.234375},{x:.640625,y:.234375},{x:.640625,y:.234375},{x:.671875,y:.234375},{x:.671875,y:.234375},{x:.703125,y:.234375},{x:.703125,y:.234375},{x:.734375,y:.234375},{x:.734375,y:.234375},{x:.765625,y:.234375},{x:.765625,y:.234375},{x:.796875,y:.234375},{x:.796875,y:.234375},{x:.828125,y:.234375},{x:.828125,y:.234375},{x:.859375,y:.234375},{x:.859375,y:.234375},{x:.890625,y:.234375},{x:.890625,y:.234375},{x:.921875,y:.234375},{x:.921875,y:.234375},{x:.953125,y:.234375},{x:.953125,y:.234375},{x:.984375,y:.234375},{x:.984375,y:.234375},{x:.015625,y:.265625},{x:.015625,y:.265625},{x:.046875,y:.265625},{x:.046875,y:.265625},{x:.078125,y:.265625},{x:.078125,y:.265625},{x:.109375,y:.265625},{x:.109375,y:.265625},{x:.140625,y:.265625},{x:.140625,y:.265625},{x:.171875,y:.265625},{x:.171875,y:.265625},{x:.203125,y:.265625},{x:.203125,y:.265625},{x:.234375,y:.265625},{x:.234375,y:.265625},{x:.265625,y:.265625},{x:.265625,y:.265625},{x:.296875,y:.265625},{x:.296875,y:.265625},{x:.328125,y:.265625},{x:.328125,y:.265625},{x:.359375,y:.265625},{x:.359375,y:.265625},{x:.390625,y:.265625},{x:.390625,y:.265625},{x:.421875,y:.265625},{x:.421875,y:.265625},{x:.453125,y:.265625},{x:.453125,y:.265625},{x:.484375,y:.265625},{x:.484375,y:.265625},{x:.515625,y:.265625},{x:.515625,y:.265625},{x:.546875,y:.265625},{x:.546875,y:.265625},{x:.578125,y:.265625},{x:.578125,y:.265625},{x:.609375,y:.265625},{x:.609375,y:.265625},{x:.640625,y:.265625},{x:.640625,y:.265625},{x:.671875,y:.265625},{x:.671875,y:.265625},{x:.703125,y:.265625},{x:.703125,y:.265625},{x:.734375,y:.265625},{x:.734375,y:.265625},{x:.765625,y:.265625},{x:.765625,y:.265625},{x:.796875,y:.265625},{x:.796875,y:.265625},{x:.828125,y:.265625},{x:.828125,y:.265625},{x:.859375,y:.265625},{x:.859375,y:.265625},{x:.890625,y:.265625},{x:.890625,y:.265625},{x:.921875,y:.265625},{x:.921875,y:.265625},{x:.953125,y:.265625},{x:.953125,y:.265625},{x:.984375,y:.265625},{x:.984375,y:.265625},{x:.015625,y:.296875},{x:.015625,y:.296875},{x:.046875,y:.296875},{x:.046875,y:.296875},{x:.078125,y:.296875},{x:.078125,y:.296875},{x:.109375,y:.296875},{x:.109375,y:.296875},{x:.140625,y:.296875},{x:.140625,y:.296875},{x:.171875,y:.296875},{x:.171875,y:.296875},{x:.203125,y:.296875},{x:.203125,y:.296875},{x:.234375,y:.296875},{x:.234375,y:.296875},{x:.265625,y:.296875},{x:.265625,y:.296875},{x:.296875,y:.296875},{x:.296875,y:.296875},{x:.328125,y:.296875},{x:.328125,y:.296875},{x:.359375,y:.296875},{x:.359375,y:.296875},{x:.390625,y:.296875},{x:.390625,y:.296875},{x:.421875,y:.296875},{x:.421875,y:.296875},{x:.453125,y:.296875},{x:.453125,y:.296875},{x:.484375,y:.296875},{x:.484375,y:.296875},{x:.515625,y:.296875},{x:.515625,y:.296875},{x:.546875,y:.296875},{x:.546875,y:.296875},{x:.578125,y:.296875},{x:.578125,y:.296875},{x:.609375,y:.296875},{x:.609375,y:.296875},{x:.640625,y:.296875},{x:.640625,y:.296875},{x:.671875,y:.296875},{x:.671875,y:.296875},{x:.703125,y:.296875},{x:.703125,y:.296875},{x:.734375,y:.296875},{x:.734375,y:.296875},{x:.765625,y:.296875},{x:.765625,y:.296875},{x:.796875,y:.296875},{x:.796875,y:.296875},{x:.828125,y:.296875},{x:.828125,y:.296875},{x:.859375,y:.296875},{x:.859375,y:.296875},{x:.890625,y:.296875},{x:.890625,y:.296875},{x:.921875,y:.296875},{x:.921875,y:.296875},{x:.953125,y:.296875},{x:.953125,y:.296875},{x:.984375,y:.296875},{x:.984375,y:.296875},{x:.015625,y:.328125},{x:.015625,y:.328125},{x:.046875,y:.328125},{x:.046875,y:.328125},{x:.078125,y:.328125},{x:.078125,y:.328125},{x:.109375,y:.328125},{x:.109375,y:.328125},{x:.140625,y:.328125},{x:.140625,y:.328125},{x:.171875,y:.328125},{x:.171875,y:.328125},{x:.203125,y:.328125},{x:.203125,y:.328125},{x:.234375,y:.328125},{x:.234375,y:.328125},{x:.265625,y:.328125},{x:.265625,y:.328125},{x:.296875,y:.328125},{x:.296875,y:.328125},{x:.328125,y:.328125},{x:.328125,y:.328125},{x:.359375,y:.328125},{x:.359375,y:.328125},{x:.390625,y:.328125},{x:.390625,y:.328125},{x:.421875,y:.328125},{x:.421875,y:.328125},{x:.453125,y:.328125},{x:.453125,y:.328125},{x:.484375,y:.328125},{x:.484375,y:.328125},{x:.515625,y:.328125},{x:.515625,y:.328125},{x:.546875,y:.328125},{x:.546875,y:.328125},{x:.578125,y:.328125},{x:.578125,y:.328125},{x:.609375,y:.328125},{x:.609375,y:.328125},{x:.640625,y:.328125},{x:.640625,y:.328125},{x:.671875,y:.328125},{x:.671875,y:.328125},{x:.703125,y:.328125},{x:.703125,y:.328125},{x:.734375,y:.328125},{x:.734375,y:.328125},{x:.765625,y:.328125},{x:.765625,y:.328125},{x:.796875,y:.328125},{x:.796875,y:.328125},{x:.828125,y:.328125},{x:.828125,y:.328125},{x:.859375,y:.328125},{x:.859375,y:.328125},{x:.890625,y:.328125},{x:.890625,y:.328125},{x:.921875,y:.328125},{x:.921875,y:.328125},{x:.953125,y:.328125},{x:.953125,y:.328125},{x:.984375,y:.328125},{x:.984375,y:.328125},{x:.015625,y:.359375},{x:.015625,y:.359375},{x:.046875,y:.359375},{x:.046875,y:.359375},{x:.078125,y:.359375},{x:.078125,y:.359375},{x:.109375,y:.359375},{x:.109375,y:.359375},{x:.140625,y:.359375},{x:.140625,y:.359375},{x:.171875,y:.359375},{x:.171875,y:.359375},{x:.203125,y:.359375},{x:.203125,y:.359375},{x:.234375,y:.359375},{x:.234375,y:.359375},{x:.265625,y:.359375},{x:.265625,y:.359375},{x:.296875,y:.359375},{x:.296875,y:.359375},{x:.328125,y:.359375},{x:.328125,y:.359375},{x:.359375,y:.359375},{x:.359375,y:.359375},{x:.390625,y:.359375},{x:.390625,y:.359375},{x:.421875,y:.359375},{x:.421875,y:.359375},{x:.453125,y:.359375},{x:.453125,y:.359375},{x:.484375,y:.359375},{x:.484375,y:.359375},{x:.515625,y:.359375},{x:.515625,y:.359375},{x:.546875,y:.359375},{x:.546875,y:.359375},{x:.578125,y:.359375},{x:.578125,y:.359375},{x:.609375,y:.359375},{x:.609375,y:.359375},{x:.640625,y:.359375},{x:.640625,y:.359375},{x:.671875,y:.359375},{x:.671875,y:.359375},{x:.703125,y:.359375},{x:.703125,y:.359375},{x:.734375,y:.359375},{x:.734375,y:.359375},{x:.765625,y:.359375},{x:.765625,y:.359375},{x:.796875,y:.359375},{x:.796875,y:.359375},{x:.828125,y:.359375},{x:.828125,y:.359375},{x:.859375,y:.359375},{x:.859375,y:.359375},{x:.890625,y:.359375},{x:.890625,y:.359375},{x:.921875,y:.359375},{x:.921875,y:.359375},{x:.953125,y:.359375},{x:.953125,y:.359375},{x:.984375,y:.359375},{x:.984375,y:.359375},{x:.015625,y:.390625},{x:.015625,y:.390625},{x:.046875,y:.390625},{x:.046875,y:.390625},{x:.078125,y:.390625},{x:.078125,y:.390625},{x:.109375,y:.390625},{x:.109375,y:.390625},{x:.140625,y:.390625},{x:.140625,y:.390625},{x:.171875,y:.390625},{x:.171875,y:.390625},{x:.203125,y:.390625},{x:.203125,y:.390625},{x:.234375,y:.390625},{x:.234375,y:.390625},{x:.265625,y:.390625},{x:.265625,y:.390625},{x:.296875,y:.390625},{x:.296875,y:.390625},{x:.328125,y:.390625},{x:.328125,y:.390625},{x:.359375,y:.390625},{x:.359375,y:.390625},{x:.390625,y:.390625},{x:.390625,y:.390625},{x:.421875,y:.390625},{x:.421875,y:.390625},{x:.453125,y:.390625},{x:.453125,y:.390625},{x:.484375,y:.390625},{x:.484375,y:.390625},{x:.515625,y:.390625},{x:.515625,y:.390625},{x:.546875,y:.390625},{x:.546875,y:.390625},{x:.578125,y:.390625},{x:.578125,y:.390625},{x:.609375,y:.390625},{x:.609375,y:.390625},{x:.640625,y:.390625},{x:.640625,y:.390625},{x:.671875,y:.390625},{x:.671875,y:.390625},{x:.703125,y:.390625},{x:.703125,y:.390625},{x:.734375,y:.390625},{x:.734375,y:.390625},{x:.765625,y:.390625},{x:.765625,y:.390625},{x:.796875,y:.390625},{x:.796875,y:.390625},{x:.828125,y:.390625},{x:.828125,y:.390625},{x:.859375,y:.390625},{x:.859375,y:.390625},{x:.890625,y:.390625},{x:.890625,y:.390625},{x:.921875,y:.390625},{x:.921875,y:.390625},{x:.953125,y:.390625},{x:.953125,y:.390625},{x:.984375,y:.390625},{x:.984375,y:.390625},{x:.015625,y:.421875},{x:.015625,y:.421875},{x:.046875,y:.421875},{x:.046875,y:.421875},{x:.078125,y:.421875},{x:.078125,y:.421875},{x:.109375,y:.421875},{x:.109375,y:.421875},{x:.140625,y:.421875},{x:.140625,y:.421875},{x:.171875,y:.421875},{x:.171875,y:.421875},{x:.203125,y:.421875},{x:.203125,y:.421875},{x:.234375,y:.421875},{x:.234375,y:.421875},{x:.265625,y:.421875},{x:.265625,y:.421875},{x:.296875,y:.421875},{x:.296875,y:.421875},{x:.328125,y:.421875},{x:.328125,y:.421875},{x:.359375,y:.421875},{x:.359375,y:.421875},{x:.390625,y:.421875},{x:.390625,y:.421875},{x:.421875,y:.421875},{x:.421875,y:.421875},{x:.453125,y:.421875},{x:.453125,y:.421875},{x:.484375,y:.421875},{x:.484375,y:.421875},{x:.515625,y:.421875},{x:.515625,y:.421875},{x:.546875,y:.421875},{x:.546875,y:.421875},{x:.578125,y:.421875},{x:.578125,y:.421875},{x:.609375,y:.421875},{x:.609375,y:.421875},{x:.640625,y:.421875},{x:.640625,y:.421875},{x:.671875,y:.421875},{x:.671875,y:.421875},{x:.703125,y:.421875},{x:.703125,y:.421875},{x:.734375,y:.421875},{x:.734375,y:.421875},{x:.765625,y:.421875},{x:.765625,y:.421875},{x:.796875,y:.421875},{x:.796875,y:.421875},{x:.828125,y:.421875},{x:.828125,y:.421875},{x:.859375,y:.421875},{x:.859375,y:.421875},{x:.890625,y:.421875},{x:.890625,y:.421875},{x:.921875,y:.421875},{x:.921875,y:.421875},{x:.953125,y:.421875},{x:.953125,y:.421875},{x:.984375,y:.421875},{x:.984375,y:.421875},{x:.015625,y:.453125},{x:.015625,y:.453125},{x:.046875,y:.453125},{x:.046875,y:.453125},{x:.078125,y:.453125},{x:.078125,y:.453125},{x:.109375,y:.453125},{x:.109375,y:.453125},{x:.140625,y:.453125},{x:.140625,y:.453125},{x:.171875,y:.453125},{x:.171875,y:.453125},{x:.203125,y:.453125},{x:.203125,y:.453125},{x:.234375,y:.453125},{x:.234375,y:.453125},{x:.265625,y:.453125},{x:.265625,y:.453125},{x:.296875,y:.453125},{x:.296875,y:.453125},{x:.328125,y:.453125},{x:.328125,y:.453125},{x:.359375,y:.453125},{x:.359375,y:.453125},{x:.390625,y:.453125},{x:.390625,y:.453125},{x:.421875,y:.453125},{x:.421875,y:.453125},{x:.453125,y:.453125},{x:.453125,y:.453125},{x:.484375,y:.453125},{x:.484375,y:.453125},{x:.515625,y:.453125},{x:.515625,y:.453125},{x:.546875,y:.453125},{x:.546875,y:.453125},{x:.578125,y:.453125},{x:.578125,y:.453125},{x:.609375,y:.453125},{x:.609375,y:.453125},{x:.640625,y:.453125},{x:.640625,y:.453125},{x:.671875,y:.453125},{x:.671875,y:.453125},{x:.703125,y:.453125},{x:.703125,y:.453125},{x:.734375,y:.453125},{x:.734375,y:.453125},{x:.765625,y:.453125},{x:.765625,y:.453125},{x:.796875,y:.453125},{x:.796875,y:.453125},{x:.828125,y:.453125},{x:.828125,y:.453125},{x:.859375,y:.453125},{x:.859375,y:.453125},{x:.890625,y:.453125},{x:.890625,y:.453125},{x:.921875,y:.453125},{x:.921875,y:.453125},{x:.953125,y:.453125},{x:.953125,y:.453125},{x:.984375,y:.453125},{x:.984375,y:.453125},{x:.015625,y:.484375},{x:.015625,y:.484375},{x:.046875,y:.484375},{x:.046875,y:.484375},{x:.078125,y:.484375},{x:.078125,y:.484375},{x:.109375,y:.484375},{x:.109375,y:.484375},{x:.140625,y:.484375},{x:.140625,y:.484375},{x:.171875,y:.484375},{x:.171875,y:.484375},{x:.203125,y:.484375},{x:.203125,y:.484375},{x:.234375,y:.484375},{x:.234375,y:.484375},{x:.265625,y:.484375},{x:.265625,y:.484375},{x:.296875,y:.484375},{x:.296875,y:.484375},{x:.328125,y:.484375},{x:.328125,y:.484375},{x:.359375,y:.484375},{x:.359375,y:.484375},{x:.390625,y:.484375},{x:.390625,y:.484375},{x:.421875,y:.484375},{x:.421875,y:.484375},{x:.453125,y:.484375},{x:.453125,y:.484375},{x:.484375,y:.484375},{x:.484375,y:.484375},{x:.515625,y:.484375},{x:.515625,y:.484375},{x:.546875,y:.484375},{x:.546875,y:.484375},{x:.578125,y:.484375},{x:.578125,y:.484375},{x:.609375,y:.484375},{x:.609375,y:.484375},{x:.640625,y:.484375},{x:.640625,y:.484375},{x:.671875,y:.484375},{x:.671875,y:.484375},{x:.703125,y:.484375},{x:.703125,y:.484375},{x:.734375,y:.484375},{x:.734375,y:.484375},{x:.765625,y:.484375},{x:.765625,y:.484375},{x:.796875,y:.484375},{x:.796875,y:.484375},{x:.828125,y:.484375},{x:.828125,y:.484375},{x:.859375,y:.484375},{x:.859375,y:.484375},{x:.890625,y:.484375},{x:.890625,y:.484375},{x:.921875,y:.484375},{x:.921875,y:.484375},{x:.953125,y:.484375},{x:.953125,y:.484375},{x:.984375,y:.484375},{x:.984375,y:.484375},{x:.015625,y:.515625},{x:.015625,y:.515625},{x:.046875,y:.515625},{x:.046875,y:.515625},{x:.078125,y:.515625},{x:.078125,y:.515625},{x:.109375,y:.515625},{x:.109375,y:.515625},{x:.140625,y:.515625},{x:.140625,y:.515625},{x:.171875,y:.515625},{x:.171875,y:.515625},{x:.203125,y:.515625},{x:.203125,y:.515625},{x:.234375,y:.515625},{x:.234375,y:.515625},{x:.265625,y:.515625},{x:.265625,y:.515625},{x:.296875,y:.515625},{x:.296875,y:.515625},{x:.328125,y:.515625},{x:.328125,y:.515625},{x:.359375,y:.515625},{x:.359375,y:.515625},{x:.390625,y:.515625},{x:.390625,y:.515625},{x:.421875,y:.515625},{x:.421875,y:.515625},{x:.453125,y:.515625},{x:.453125,y:.515625},{x:.484375,y:.515625},{x:.484375,y:.515625},{x:.515625,y:.515625},{x:.515625,y:.515625},{x:.546875,y:.515625},{x:.546875,y:.515625},{x:.578125,y:.515625},{x:.578125,y:.515625},{x:.609375,y:.515625},{x:.609375,y:.515625},{x:.640625,y:.515625},{x:.640625,y:.515625},{x:.671875,y:.515625},{x:.671875,y:.515625},{x:.703125,y:.515625},{x:.703125,y:.515625},{x:.734375,y:.515625},{x:.734375,y:.515625},{x:.765625,y:.515625},{x:.765625,y:.515625},{x:.796875,y:.515625},{x:.796875,y:.515625},{x:.828125,y:.515625},{x:.828125,y:.515625},{x:.859375,y:.515625},{x:.859375,y:.515625},{x:.890625,y:.515625},{x:.890625,y:.515625},{x:.921875,y:.515625},{x:.921875,y:.515625},{x:.953125,y:.515625},{x:.953125,y:.515625},{x:.984375,y:.515625},{x:.984375,y:.515625},{x:.015625,y:.546875},{x:.015625,y:.546875},{x:.046875,y:.546875},{x:.046875,y:.546875},{x:.078125,y:.546875},{x:.078125,y:.546875},{x:.109375,y:.546875},{x:.109375,y:.546875},{x:.140625,y:.546875},{x:.140625,y:.546875},{x:.171875,y:.546875},{x:.171875,y:.546875},{x:.203125,y:.546875},{x:.203125,y:.546875},{x:.234375,y:.546875},{x:.234375,y:.546875},{x:.265625,y:.546875},{x:.265625,y:.546875},{x:.296875,y:.546875},{x:.296875,y:.546875},{x:.328125,y:.546875},{x:.328125,y:.546875},{x:.359375,y:.546875},{x:.359375,y:.546875},{x:.390625,y:.546875},{x:.390625,y:.546875},{x:.421875,y:.546875},{x:.421875,y:.546875},{x:.453125,y:.546875},{x:.453125,y:.546875},{x:.484375,y:.546875},{x:.484375,y:.546875},{x:.515625,y:.546875},{x:.515625,y:.546875},{x:.546875,y:.546875},{x:.546875,y:.546875},{x:.578125,y:.546875},{x:.578125,y:.546875},{x:.609375,y:.546875},{x:.609375,y:.546875},{x:.640625,y:.546875},{x:.640625,y:.546875},{x:.671875,y:.546875},{x:.671875,y:.546875},{x:.703125,y:.546875},{x:.703125,y:.546875},{x:.734375,y:.546875},{x:.734375,y:.546875},{x:.765625,y:.546875},{x:.765625,y:.546875},{x:.796875,y:.546875},{x:.796875,y:.546875},{x:.828125,y:.546875},{x:.828125,y:.546875},{x:.859375,y:.546875},{x:.859375,y:.546875},{x:.890625,y:.546875},{x:.890625,y:.546875},{x:.921875,y:.546875},{x:.921875,y:.546875},{x:.953125,y:.546875},{x:.953125,y:.546875},{x:.984375,y:.546875},{x:.984375,y:.546875},{x:.015625,y:.578125},{x:.015625,y:.578125},{x:.046875,y:.578125},{x:.046875,y:.578125},{x:.078125,y:.578125},{x:.078125,y:.578125},{x:.109375,y:.578125},{x:.109375,y:.578125},{x:.140625,y:.578125},{x:.140625,y:.578125},{x:.171875,y:.578125},{x:.171875,y:.578125},{x:.203125,y:.578125},{x:.203125,y:.578125},{x:.234375,y:.578125},{x:.234375,y:.578125},{x:.265625,y:.578125},{x:.265625,y:.578125},{x:.296875,y:.578125},{x:.296875,y:.578125},{x:.328125,y:.578125},{x:.328125,y:.578125},{x:.359375,y:.578125},{x:.359375,y:.578125},{x:.390625,y:.578125},{x:.390625,y:.578125},{x:.421875,y:.578125},{x:.421875,y:.578125},{x:.453125,y:.578125},{x:.453125,y:.578125},{x:.484375,y:.578125},{x:.484375,y:.578125},{x:.515625,y:.578125},{x:.515625,y:.578125},{x:.546875,y:.578125},{x:.546875,y:.578125},{x:.578125,y:.578125},{x:.578125,y:.578125},{x:.609375,y:.578125},{x:.609375,y:.578125},{x:.640625,y:.578125},{x:.640625,y:.578125},{x:.671875,y:.578125},{x:.671875,y:.578125},{x:.703125,y:.578125},{x:.703125,y:.578125},{x:.734375,y:.578125},{x:.734375,y:.578125},{x:.765625,y:.578125},{x:.765625,y:.578125},{x:.796875,y:.578125},{x:.796875,y:.578125},{x:.828125,y:.578125},{x:.828125,y:.578125},{x:.859375,y:.578125},{x:.859375,y:.578125},{x:.890625,y:.578125},{x:.890625,y:.578125},{x:.921875,y:.578125},{x:.921875,y:.578125},{x:.953125,y:.578125},{x:.953125,y:.578125},{x:.984375,y:.578125},{x:.984375,y:.578125},{x:.015625,y:.609375},{x:.015625,y:.609375},{x:.046875,y:.609375},{x:.046875,y:.609375},{x:.078125,y:.609375},{x:.078125,y:.609375},{x:.109375,y:.609375},{x:.109375,y:.609375},{x:.140625,y:.609375},{x:.140625,y:.609375},{x:.171875,y:.609375},{x:.171875,y:.609375},{x:.203125,y:.609375},{x:.203125,y:.609375},{x:.234375,y:.609375},{x:.234375,y:.609375},{x:.265625,y:.609375},{x:.265625,y:.609375},{x:.296875,y:.609375},{x:.296875,y:.609375},{x:.328125,y:.609375},{x:.328125,y:.609375},{x:.359375,y:.609375},{x:.359375,y:.609375},{x:.390625,y:.609375},{x:.390625,y:.609375},{x:.421875,y:.609375},{x:.421875,y:.609375},{x:.453125,y:.609375},{x:.453125,y:.609375},{x:.484375,y:.609375},{x:.484375,y:.609375},{x:.515625,y:.609375},{x:.515625,y:.609375},{x:.546875,y:.609375},{x:.546875,y:.609375},{x:.578125,y:.609375},{x:.578125,y:.609375},{x:.609375,y:.609375},{x:.609375,y:.609375},{x:.640625,y:.609375},{x:.640625,y:.609375},{x:.671875,y:.609375},{x:.671875,y:.609375},{x:.703125,y:.609375},{x:.703125,y:.609375},{x:.734375,y:.609375},{x:.734375,y:.609375},{x:.765625,y:.609375},{x:.765625,y:.609375},{x:.796875,y:.609375},{x:.796875,y:.609375},{x:.828125,y:.609375},{x:.828125,y:.609375},{x:.859375,y:.609375},{x:.859375,y:.609375},{x:.890625,y:.609375},{x:.890625,y:.609375},{x:.921875,y:.609375},{x:.921875,y:.609375},{x:.953125,y:.609375},{x:.953125,y:.609375},{x:.984375,y:.609375},{x:.984375,y:.609375},{x:.015625,y:.640625},{x:.015625,y:.640625},{x:.046875,y:.640625},{x:.046875,y:.640625},{x:.078125,y:.640625},{x:.078125,y:.640625},{x:.109375,y:.640625},{x:.109375,y:.640625},{x:.140625,y:.640625},{x:.140625,y:.640625},{x:.171875,y:.640625},{x:.171875,y:.640625},{x:.203125,y:.640625},{x:.203125,y:.640625},{x:.234375,y:.640625},{x:.234375,y:.640625},{x:.265625,y:.640625},{x:.265625,y:.640625},{x:.296875,y:.640625},{x:.296875,y:.640625},{x:.328125,y:.640625},{x:.328125,y:.640625},{x:.359375,y:.640625},{x:.359375,y:.640625},{x:.390625,y:.640625},{x:.390625,y:.640625},{x:.421875,y:.640625},{x:.421875,y:.640625},{x:.453125,y:.640625},{x:.453125,y:.640625},{x:.484375,y:.640625},{x:.484375,y:.640625},{x:.515625,y:.640625},{x:.515625,y:.640625},{x:.546875,y:.640625},{x:.546875,y:.640625},{x:.578125,y:.640625},{x:.578125,y:.640625},{x:.609375,y:.640625},{x:.609375,y:.640625},{x:.640625,y:.640625},{x:.640625,y:.640625},{x:.671875,y:.640625},{x:.671875,y:.640625},{x:.703125,y:.640625},{x:.703125,y:.640625},{x:.734375,y:.640625},{x:.734375,y:.640625},{x:.765625,y:.640625},{x:.765625,y:.640625},{x:.796875,y:.640625},{x:.796875,y:.640625},{x:.828125,y:.640625},{x:.828125,y:.640625},{x:.859375,y:.640625},{x:.859375,y:.640625},{x:.890625,y:.640625},{x:.890625,y:.640625},{x:.921875,y:.640625},{x:.921875,y:.640625},{x:.953125,y:.640625},{x:.953125,y:.640625},{x:.984375,y:.640625},{x:.984375,y:.640625},{x:.015625,y:.671875},{x:.015625,y:.671875},{x:.046875,y:.671875},{x:.046875,y:.671875},{x:.078125,y:.671875},{x:.078125,y:.671875},{x:.109375,y:.671875},{x:.109375,y:.671875},{x:.140625,y:.671875},{x:.140625,y:.671875},{x:.171875,y:.671875},{x:.171875,y:.671875},{x:.203125,y:.671875},{x:.203125,y:.671875},{x:.234375,y:.671875},{x:.234375,y:.671875},{x:.265625,y:.671875},{x:.265625,y:.671875},{x:.296875,y:.671875},{x:.296875,y:.671875},{x:.328125,y:.671875},{x:.328125,y:.671875},{x:.359375,y:.671875},{x:.359375,y:.671875},{x:.390625,y:.671875},{x:.390625,y:.671875},{x:.421875,y:.671875},{x:.421875,y:.671875},{x:.453125,y:.671875},{x:.453125,y:.671875},{x:.484375,y:.671875},{x:.484375,y:.671875},{x:.515625,y:.671875},{x:.515625,y:.671875},{x:.546875,y:.671875},{x:.546875,y:.671875},{x:.578125,y:.671875},{x:.578125,y:.671875},{x:.609375,y:.671875},{x:.609375,y:.671875},{x:.640625,y:.671875},{x:.640625,y:.671875},{x:.671875,y:.671875},{x:.671875,y:.671875},{x:.703125,y:.671875},{x:.703125,y:.671875},{x:.734375,y:.671875},{x:.734375,y:.671875},{x:.765625,y:.671875},{x:.765625,y:.671875},{x:.796875,y:.671875},{x:.796875,y:.671875},{x:.828125,y:.671875},{x:.828125,y:.671875},{x:.859375,y:.671875},{x:.859375,y:.671875},{x:.890625,y:.671875},{x:.890625,y:.671875},{x:.921875,y:.671875},{x:.921875,y:.671875},{x:.953125,y:.671875},{x:.953125,y:.671875},{x:.984375,y:.671875},{x:.984375,y:.671875},{x:.015625,y:.703125},{x:.015625,y:.703125},{x:.046875,y:.703125},{x:.046875,y:.703125},{x:.078125,y:.703125},{x:.078125,y:.703125},{x:.109375,y:.703125},{x:.109375,y:.703125},{x:.140625,y:.703125},{x:.140625,y:.703125},{x:.171875,y:.703125},{x:.171875,y:.703125},{x:.203125,y:.703125},{x:.203125,y:.703125},{x:.234375,y:.703125},{x:.234375,y:.703125},{x:.265625,y:.703125},{x:.265625,y:.703125},{x:.296875,y:.703125},{x:.296875,y:.703125},{x:.328125,y:.703125},{x:.328125,y:.703125},{x:.359375,y:.703125},{x:.359375,y:.703125},{x:.390625,y:.703125},{x:.390625,y:.703125},{x:.421875,y:.703125},{x:.421875,y:.703125},{x:.453125,y:.703125},{x:.453125,y:.703125},{x:.484375,y:.703125},{x:.484375,y:.703125},{x:.515625,y:.703125},{x:.515625,y:.703125},{x:.546875,y:.703125},{x:.546875,y:.703125},{x:.578125,y:.703125},{x:.578125,y:.703125},{x:.609375,y:.703125},{x:.609375,y:.703125},{x:.640625,y:.703125},{x:.640625,y:.703125},{x:.671875,y:.703125},{x:.671875,y:.703125},{x:.703125,y:.703125},{x:.703125,y:.703125},{x:.734375,y:.703125},{x:.734375,y:.703125},{x:.765625,y:.703125},{x:.765625,y:.703125},{x:.796875,y:.703125},{x:.796875,y:.703125},{x:.828125,y:.703125},{x:.828125,y:.703125},{x:.859375,y:.703125},{x:.859375,y:.703125},{x:.890625,y:.703125},{x:.890625,y:.703125},{x:.921875,y:.703125},{x:.921875,y:.703125},{x:.953125,y:.703125},{x:.953125,y:.703125},{x:.984375,y:.703125},{x:.984375,y:.703125},{x:.015625,y:.734375},{x:.015625,y:.734375},{x:.046875,y:.734375},{x:.046875,y:.734375},{x:.078125,y:.734375},{x:.078125,y:.734375},{x:.109375,y:.734375},{x:.109375,y:.734375},{x:.140625,y:.734375},{x:.140625,y:.734375},{x:.171875,y:.734375},{x:.171875,y:.734375},{x:.203125,y:.734375},{x:.203125,y:.734375},{x:.234375,y:.734375},{x:.234375,y:.734375},{x:.265625,y:.734375},{x:.265625,y:.734375},{x:.296875,y:.734375},{x:.296875,y:.734375},{x:.328125,y:.734375},{x:.328125,y:.734375},{x:.359375,y:.734375},{x:.359375,y:.734375},{x:.390625,y:.734375},{x:.390625,y:.734375},{x:.421875,y:.734375},{x:.421875,y:.734375},{x:.453125,y:.734375},{x:.453125,y:.734375},{x:.484375,y:.734375},{x:.484375,y:.734375},{x:.515625,y:.734375},{x:.515625,y:.734375},{x:.546875,y:.734375},{x:.546875,y:.734375},{x:.578125,y:.734375},{x:.578125,y:.734375},{x:.609375,y:.734375},{x:.609375,y:.734375},{x:.640625,y:.734375},{x:.640625,y:.734375},{x:.671875,y:.734375},{x:.671875,y:.734375},{x:.703125,y:.734375},{x:.703125,y:.734375},{x:.734375,y:.734375},{x:.734375,y:.734375},{x:.765625,y:.734375},{x:.765625,y:.734375},{x:.796875,y:.734375},{x:.796875,y:.734375},{x:.828125,y:.734375},{x:.828125,y:.734375},{x:.859375,y:.734375},{x:.859375,y:.734375},{x:.890625,y:.734375},{x:.890625,y:.734375},{x:.921875,y:.734375},{x:.921875,y:.734375},{x:.953125,y:.734375},{x:.953125,y:.734375},{x:.984375,y:.734375},{x:.984375,y:.734375},{x:.015625,y:.765625},{x:.015625,y:.765625},{x:.046875,y:.765625},{x:.046875,y:.765625},{x:.078125,y:.765625},{x:.078125,y:.765625},{x:.109375,y:.765625},{x:.109375,y:.765625},{x:.140625,y:.765625},{x:.140625,y:.765625},{x:.171875,y:.765625},{x:.171875,y:.765625},{x:.203125,y:.765625},{x:.203125,y:.765625},{x:.234375,y:.765625},{x:.234375,y:.765625},{x:.265625,y:.765625},{x:.265625,y:.765625},{x:.296875,y:.765625},{x:.296875,y:.765625},{x:.328125,y:.765625},{x:.328125,y:.765625},{x:.359375,y:.765625},{x:.359375,y:.765625},{x:.390625,y:.765625},{x:.390625,y:.765625},{x:.421875,y:.765625},{x:.421875,y:.765625},{x:.453125,y:.765625},{x:.453125,y:.765625},{x:.484375,y:.765625},{x:.484375,y:.765625},{x:.515625,y:.765625},{x:.515625,y:.765625},{x:.546875,y:.765625},{x:.546875,y:.765625},{x:.578125,y:.765625},{x:.578125,y:.765625},{x:.609375,y:.765625},{x:.609375,y:.765625},{x:.640625,y:.765625},{x:.640625,y:.765625},{x:.671875,y:.765625},{x:.671875,y:.765625},{x:.703125,y:.765625},{x:.703125,y:.765625},{x:.734375,y:.765625},{x:.734375,y:.765625},{x:.765625,y:.765625},{x:.765625,y:.765625},{x:.796875,y:.765625},{x:.796875,y:.765625},{x:.828125,y:.765625},{x:.828125,y:.765625},{x:.859375,y:.765625},{x:.859375,y:.765625},{x:.890625,y:.765625},{x:.890625,y:.765625},{x:.921875,y:.765625},{x:.921875,y:.765625},{x:.953125,y:.765625},{x:.953125,y:.765625},{x:.984375,y:.765625},{x:.984375,y:.765625},{x:.015625,y:.796875},{x:.015625,y:.796875},{x:.046875,y:.796875},{x:.046875,y:.796875},{x:.078125,y:.796875},{x:.078125,y:.796875},{x:.109375,y:.796875},{x:.109375,y:.796875},{x:.140625,y:.796875},{x:.140625,y:.796875},{x:.171875,y:.796875},{x:.171875,y:.796875},{x:.203125,y:.796875},{x:.203125,y:.796875},{x:.234375,y:.796875},{x:.234375,y:.796875},{x:.265625,y:.796875},{x:.265625,y:.796875},{x:.296875,y:.796875},{x:.296875,y:.796875},{x:.328125,y:.796875},{x:.328125,y:.796875},{x:.359375,y:.796875},{x:.359375,y:.796875},{x:.390625,y:.796875},{x:.390625,y:.796875},{x:.421875,y:.796875},{x:.421875,y:.796875},{x:.453125,y:.796875},{x:.453125,y:.796875},{x:.484375,y:.796875},{x:.484375,y:.796875},{x:.515625,y:.796875},{x:.515625,y:.796875},{x:.546875,y:.796875},{x:.546875,y:.796875},{x:.578125,y:.796875},{x:.578125,y:.796875},{x:.609375,y:.796875},{x:.609375,y:.796875},{x:.640625,y:.796875},{x:.640625,y:.796875},{x:.671875,y:.796875},{x:.671875,y:.796875},{x:.703125,y:.796875},{x:.703125,y:.796875},{x:.734375,y:.796875},{x:.734375,y:.796875},{x:.765625,y:.796875},{x:.765625,y:.796875},{x:.796875,y:.796875},{x:.796875,y:.796875},{x:.828125,y:.796875},{x:.828125,y:.796875},{x:.859375,y:.796875},{x:.859375,y:.796875},{x:.890625,y:.796875},{x:.890625,y:.796875},{x:.921875,y:.796875},{x:.921875,y:.796875},{x:.953125,y:.796875},{x:.953125,y:.796875},{x:.984375,y:.796875},{x:.984375,y:.796875},{x:.015625,y:.828125},{x:.015625,y:.828125},{x:.046875,y:.828125},{x:.046875,y:.828125},{x:.078125,y:.828125},{x:.078125,y:.828125},{x:.109375,y:.828125},{x:.109375,y:.828125},{x:.140625,y:.828125},{x:.140625,y:.828125},{x:.171875,y:.828125},{x:.171875,y:.828125},{x:.203125,y:.828125},{x:.203125,y:.828125},{x:.234375,y:.828125},{x:.234375,y:.828125},{x:.265625,y:.828125},{x:.265625,y:.828125},{x:.296875,y:.828125},{x:.296875,y:.828125},{x:.328125,y:.828125},{x:.328125,y:.828125},{x:.359375,y:.828125},{x:.359375,y:.828125},{x:.390625,y:.828125},{x:.390625,y:.828125},{x:.421875,y:.828125},{x:.421875,y:.828125},{x:.453125,y:.828125},{x:.453125,y:.828125},{x:.484375,y:.828125},{x:.484375,y:.828125},{x:.515625,y:.828125},{x:.515625,y:.828125},{x:.546875,y:.828125},{x:.546875,y:.828125},{x:.578125,y:.828125},{x:.578125,y:.828125},{x:.609375,y:.828125},{x:.609375,y:.828125},{x:.640625,y:.828125},{x:.640625,y:.828125},{x:.671875,y:.828125},{x:.671875,y:.828125},{x:.703125,y:.828125},{x:.703125,y:.828125},{x:.734375,y:.828125},{x:.734375,y:.828125},{x:.765625,y:.828125},{x:.765625,y:.828125},{x:.796875,y:.828125},{x:.796875,y:.828125},{x:.828125,y:.828125},{x:.828125,y:.828125},{x:.859375,y:.828125},{x:.859375,y:.828125},{x:.890625,y:.828125},{x:.890625,y:.828125},{x:.921875,y:.828125},{x:.921875,y:.828125},{x:.953125,y:.828125},{x:.953125,y:.828125},{x:.984375,y:.828125},{x:.984375,y:.828125},{x:.015625,y:.859375},{x:.015625,y:.859375},{x:.046875,y:.859375},{x:.046875,y:.859375},{x:.078125,y:.859375},{x:.078125,y:.859375},{x:.109375,y:.859375},{x:.109375,y:.859375},{x:.140625,y:.859375},{x:.140625,y:.859375},{x:.171875,y:.859375},{x:.171875,y:.859375},{x:.203125,y:.859375},{x:.203125,y:.859375},{x:.234375,y:.859375},{x:.234375,y:.859375},{x:.265625,y:.859375},{x:.265625,y:.859375},{x:.296875,y:.859375},{x:.296875,y:.859375},{x:.328125,y:.859375},{x:.328125,y:.859375},{x:.359375,y:.859375},{x:.359375,y:.859375},{x:.390625,y:.859375},{x:.390625,y:.859375},{x:.421875,y:.859375},{x:.421875,y:.859375},{x:.453125,y:.859375},{x:.453125,y:.859375},{x:.484375,y:.859375},{x:.484375,y:.859375},{x:.515625,y:.859375},{x:.515625,y:.859375},{x:.546875,y:.859375},{x:.546875,y:.859375},{x:.578125,y:.859375},{x:.578125,y:.859375},{x:.609375,y:.859375},{x:.609375,y:.859375},{x:.640625,y:.859375},{x:.640625,y:.859375},{x:.671875,y:.859375},{x:.671875,y:.859375},{x:.703125,y:.859375},{x:.703125,y:.859375},{x:.734375,y:.859375},{x:.734375,y:.859375},{x:.765625,y:.859375},{x:.765625,y:.859375},{x:.796875,y:.859375},{x:.796875,y:.859375},{x:.828125,y:.859375},{x:.828125,y:.859375},{x:.859375,y:.859375},{x:.859375,y:.859375},{x:.890625,y:.859375},{x:.890625,y:.859375},{x:.921875,y:.859375},{x:.921875,y:.859375},{x:.953125,y:.859375},{x:.953125,y:.859375},{x:.984375,y:.859375},{x:.984375,y:.859375},{x:.015625,y:.890625},{x:.015625,y:.890625},{x:.046875,y:.890625},{x:.046875,y:.890625},{x:.078125,y:.890625},{x:.078125,y:.890625},{x:.109375,y:.890625},{x:.109375,y:.890625},{x:.140625,y:.890625},{x:.140625,y:.890625},{x:.171875,y:.890625},{x:.171875,y:.890625},{x:.203125,y:.890625},{x:.203125,y:.890625},{x:.234375,y:.890625},{x:.234375,y:.890625},{x:.265625,y:.890625},{x:.265625,y:.890625},{x:.296875,y:.890625},{x:.296875,y:.890625},{x:.328125,y:.890625},{x:.328125,y:.890625},{x:.359375,y:.890625},{x:.359375,y:.890625},{x:.390625,y:.890625},{x:.390625,y:.890625},{x:.421875,y:.890625},{x:.421875,y:.890625},{x:.453125,y:.890625},{x:.453125,y:.890625},{x:.484375,y:.890625},{x:.484375,y:.890625},{x:.515625,y:.890625},{x:.515625,y:.890625},{x:.546875,y:.890625},{x:.546875,y:.890625},{x:.578125,y:.890625},{x:.578125,y:.890625},{x:.609375,y:.890625},{x:.609375,y:.890625},{x:.640625,y:.890625},{x:.640625,y:.890625},{x:.671875,y:.890625},{x:.671875,y:.890625},{x:.703125,y:.890625},{x:.703125,y:.890625},{x:.734375,y:.890625},{x:.734375,y:.890625},{x:.765625,y:.890625},{x:.765625,y:.890625},{x:.796875,y:.890625},{x:.796875,y:.890625},{x:.828125,y:.890625},{x:.828125,y:.890625},{x:.859375,y:.890625},{x:.859375,y:.890625},{x:.890625,y:.890625},{x:.890625,y:.890625},{x:.921875,y:.890625},{x:.921875,y:.890625},{x:.953125,y:.890625},{x:.953125,y:.890625},{x:.984375,y:.890625},{x:.984375,y:.890625},{x:.015625,y:.921875},{x:.015625,y:.921875},{x:.046875,y:.921875},{x:.046875,y:.921875},{x:.078125,y:.921875},{x:.078125,y:.921875},{x:.109375,y:.921875},{x:.109375,y:.921875},{x:.140625,y:.921875},{x:.140625,y:.921875},{x:.171875,y:.921875},{x:.171875,y:.921875},{x:.203125,y:.921875},{x:.203125,y:.921875},{x:.234375,y:.921875},{x:.234375,y:.921875},{x:.265625,y:.921875},{x:.265625,y:.921875},{x:.296875,y:.921875},{x:.296875,y:.921875},{x:.328125,y:.921875},{x:.328125,y:.921875},{x:.359375,y:.921875},{x:.359375,y:.921875},{x:.390625,y:.921875},{x:.390625,y:.921875},{x:.421875,y:.921875},{x:.421875,y:.921875},{x:.453125,y:.921875},{x:.453125,y:.921875},{x:.484375,y:.921875},{x:.484375,y:.921875},{x:.515625,y:.921875},{x:.515625,y:.921875},{x:.546875,y:.921875},{x:.546875,y:.921875},{x:.578125,y:.921875},{x:.578125,y:.921875},{x:.609375,y:.921875},{x:.609375,y:.921875},{x:.640625,y:.921875},{x:.640625,y:.921875},{x:.671875,y:.921875},{x:.671875,y:.921875},{x:.703125,y:.921875},{x:.703125,y:.921875},{x:.734375,y:.921875},{x:.734375,y:.921875},{x:.765625,y:.921875},{x:.765625,y:.921875},{x:.796875,y:.921875},{x:.796875,y:.921875},{x:.828125,y:.921875},{x:.828125,y:.921875},{x:.859375,y:.921875},{x:.859375,y:.921875},{x:.890625,y:.921875},{x:.890625,y:.921875},{x:.921875,y:.921875},{x:.921875,y:.921875},{x:.953125,y:.921875},{x:.953125,y:.921875},{x:.984375,y:.921875},{x:.984375,y:.921875},{x:.015625,y:.953125},{x:.015625,y:.953125},{x:.046875,y:.953125},{x:.046875,y:.953125},{x:.078125,y:.953125},{x:.078125,y:.953125},{x:.109375,y:.953125},{x:.109375,y:.953125},{x:.140625,y:.953125},{x:.140625,y:.953125},{x:.171875,y:.953125},{x:.171875,y:.953125},{x:.203125,y:.953125},{x:.203125,y:.953125},{x:.234375,y:.953125},{x:.234375,y:.953125},{x:.265625,y:.953125},{x:.265625,y:.953125},{x:.296875,y:.953125},{x:.296875,y:.953125},{x:.328125,y:.953125},{x:.328125,y:.953125},{x:.359375,y:.953125},{x:.359375,y:.953125},{x:.390625,y:.953125},{x:.390625,y:.953125},{x:.421875,y:.953125},{x:.421875,y:.953125},{x:.453125,y:.953125},{x:.453125,y:.953125},{x:.484375,y:.953125},{x:.484375,y:.953125},{x:.515625,y:.953125},{x:.515625,y:.953125},{x:.546875,y:.953125},{x:.546875,y:.953125},{x:.578125,y:.953125},{x:.578125,y:.953125},{x:.609375,y:.953125},{x:.609375,y:.953125},{x:.640625,y:.953125},{x:.640625,y:.953125},{x:.671875,y:.953125},{x:.671875,y:.953125},{x:.703125,y:.953125},{x:.703125,y:.953125},{x:.734375,y:.953125},{x:.734375,y:.953125},{x:.765625,y:.953125},{x:.765625,y:.953125},{x:.796875,y:.953125},{x:.796875,y:.953125},{x:.828125,y:.953125},{x:.828125,y:.953125},{x:.859375,y:.953125},{x:.859375,y:.953125},{x:.890625,y:.953125},{x:.890625,y:.953125},{x:.921875,y:.953125},{x:.921875,y:.953125},{x:.953125,y:.953125},{x:.953125,y:.953125},{x:.984375,y:.953125},{x:.984375,y:.953125},{x:.015625,y:.984375},{x:.015625,y:.984375},{x:.046875,y:.984375},{x:.046875,y:.984375},{x:.078125,y:.984375},{x:.078125,y:.984375},{x:.109375,y:.984375},{x:.109375,y:.984375},{x:.140625,y:.984375},{x:.140625,y:.984375},{x:.171875,y:.984375},{x:.171875,y:.984375},{x:.203125,y:.984375},{x:.203125,y:.984375},{x:.234375,y:.984375},{x:.234375,y:.984375},{x:.265625,y:.984375},{x:.265625,y:.984375},{x:.296875,y:.984375},{x:.296875,y:.984375},{x:.328125,y:.984375},{x:.328125,y:.984375},{x:.359375,y:.984375},{x:.359375,y:.984375},{x:.390625,y:.984375},{x:.390625,y:.984375},{x:.421875,y:.984375},{x:.421875,y:.984375},{x:.453125,y:.984375},{x:.453125,y:.984375},{x:.484375,y:.984375},{x:.484375,y:.984375},{x:.515625,y:.984375},{x:.515625,y:.984375},{x:.546875,y:.984375},{x:.546875,y:.984375},{x:.578125,y:.984375},{x:.578125,y:.984375},{x:.609375,y:.984375},{x:.609375,y:.984375},{x:.640625,y:.984375},{x:.640625,y:.984375},{x:.671875,y:.984375},{x:.671875,y:.984375},{x:.703125,y:.984375},{x:.703125,y:.984375},{x:.734375,y:.984375},{x:.734375,y:.984375},{x:.765625,y:.984375},{x:.765625,y:.984375},{x:.796875,y:.984375},{x:.796875,y:.984375},{x:.828125,y:.984375},{x:.828125,y:.984375},{x:.859375,y:.984375},{x:.859375,y:.984375},{x:.890625,y:.984375},{x:.890625,y:.984375},{x:.921875,y:.984375},{x:.921875,y:.984375},{x:.953125,y:.984375},{x:.953125,y:.984375},{x:.984375,y:.984375},{x:.984375,y:.984375},{x:.03125,y:.03125},{x:.03125,y:.03125},{x:.09375,y:.03125},{x:.09375,y:.03125},{x:.15625,y:.03125},{x:.15625,y:.03125},{x:.21875,y:.03125},{x:.21875,y:.03125},{x:.28125,y:.03125},{x:.28125,y:.03125},{x:.34375,y:.03125},{x:.34375,y:.03125},{x:.40625,y:.03125},{x:.40625,y:.03125},{x:.46875,y:.03125},{x:.46875,y:.03125},{x:.53125,y:.03125},{x:.53125,y:.03125},{x:.59375,y:.03125},{x:.59375,y:.03125},{x:.65625,y:.03125},{x:.65625,y:.03125},{x:.71875,y:.03125},{x:.71875,y:.03125},{x:.78125,y:.03125},{x:.78125,y:.03125},{x:.84375,y:.03125},{x:.84375,y:.03125},{x:.90625,y:.03125},{x:.90625,y:.03125},{x:.96875,y:.03125},{x:.96875,y:.03125},{x:.03125,y:.09375},{x:.03125,y:.09375},{x:.09375,y:.09375},{x:.09375,y:.09375},{x:.15625,y:.09375},{x:.15625,y:.09375},{x:.21875,y:.09375},{x:.21875,y:.09375},{x:.28125,y:.09375},{x:.28125,y:.09375},{x:.34375,y:.09375},{x:.34375,y:.09375},{x:.40625,y:.09375},{x:.40625,y:.09375},{x:.46875,y:.09375},{x:.46875,y:.09375},{x:.53125,y:.09375},{x:.53125,y:.09375},{x:.59375,y:.09375},{x:.59375,y:.09375},{x:.65625,y:.09375},{x:.65625,y:.09375},{x:.71875,y:.09375},{x:.71875,y:.09375},{x:.78125,y:.09375},{x:.78125,y:.09375},{x:.84375,y:.09375},{x:.84375,y:.09375},{x:.90625,y:.09375},{x:.90625,y:.09375},{x:.96875,y:.09375},{x:.96875,y:.09375},{x:.03125,y:.15625},{x:.03125,y:.15625},{x:.09375,y:.15625},{x:.09375,y:.15625},{x:.15625,y:.15625},{x:.15625,y:.15625},{x:.21875,y:.15625},{x:.21875,y:.15625},{x:.28125,y:.15625},{x:.28125,y:.15625},{x:.34375,y:.15625},{x:.34375,y:.15625},{x:.40625,y:.15625},{x:.40625,y:.15625},{x:.46875,y:.15625},{x:.46875,y:.15625},{x:.53125,y:.15625},{x:.53125,y:.15625},{x:.59375,y:.15625},{x:.59375,y:.15625},{x:.65625,y:.15625},{x:.65625,y:.15625},{x:.71875,y:.15625},{x:.71875,y:.15625},{x:.78125,y:.15625},{x:.78125,y:.15625},{x:.84375,y:.15625},{x:.84375,y:.15625},{x:.90625,y:.15625},{x:.90625,y:.15625},{x:.96875,y:.15625},{x:.96875,y:.15625},{x:.03125,y:.21875},{x:.03125,y:.21875},{x:.09375,y:.21875},{x:.09375,y:.21875},{x:.15625,y:.21875},{x:.15625,y:.21875},{x:.21875,y:.21875},{x:.21875,y:.21875},{x:.28125,y:.21875},{x:.28125,y:.21875},{x:.34375,y:.21875},{x:.34375,y:.21875},{x:.40625,y:.21875},{x:.40625,y:.21875},{x:.46875,y:.21875},{x:.46875,y:.21875},{x:.53125,y:.21875},{x:.53125,y:.21875},{x:.59375,y:.21875},{x:.59375,y:.21875},{x:.65625,y:.21875},{x:.65625,y:.21875},{x:.71875,y:.21875},{x:.71875,y:.21875},{x:.78125,y:.21875},{x:.78125,y:.21875},{x:.84375,y:.21875},{x:.84375,y:.21875},{x:.90625,y:.21875},{x:.90625,y:.21875},{x:.96875,y:.21875},{x:.96875,y:.21875},{x:.03125,y:.28125},{x:.03125,y:.28125},{x:.09375,y:.28125},{x:.09375,y:.28125},{x:.15625,y:.28125},{x:.15625,y:.28125},{x:.21875,y:.28125},{x:.21875,y:.28125},{x:.28125,y:.28125},{x:.28125,y:.28125},{x:.34375,y:.28125},{x:.34375,y:.28125},{x:.40625,y:.28125},{x:.40625,y:.28125},{x:.46875,y:.28125},{x:.46875,y:.28125},{x:.53125,y:.28125},{x:.53125,y:.28125},{x:.59375,y:.28125},{x:.59375,y:.28125},{x:.65625,y:.28125},{x:.65625,y:.28125},{x:.71875,y:.28125},{x:.71875,y:.28125},{x:.78125,y:.28125},{x:.78125,y:.28125},{x:.84375,y:.28125},{x:.84375,y:.28125},{x:.90625,y:.28125},{x:.90625,y:.28125},{x:.96875,y:.28125},{x:.96875,y:.28125},{x:.03125,y:.34375},{x:.03125,y:.34375},{x:.09375,y:.34375},{x:.09375,y:.34375},{x:.15625,y:.34375},{x:.15625,y:.34375},{x:.21875,y:.34375},{x:.21875,y:.34375},{x:.28125,y:.34375},{x:.28125,y:.34375},{x:.34375,y:.34375},{x:.34375,y:.34375},{x:.40625,y:.34375},{x:.40625,y:.34375},{x:.46875,y:.34375},{x:.46875,y:.34375},{x:.53125,y:.34375},{x:.53125,y:.34375},{x:.59375,y:.34375},{x:.59375,y:.34375},{x:.65625,y:.34375},{x:.65625,y:.34375},{x:.71875,y:.34375},{x:.71875,y:.34375},{x:.78125,y:.34375},{x:.78125,y:.34375},{x:.84375,y:.34375},{x:.84375,y:.34375},{x:.90625,y:.34375},{x:.90625,y:.34375},{x:.96875,y:.34375},{x:.96875,y:.34375},{x:.03125,y:.40625},{x:.03125,y:.40625},{x:.09375,y:.40625},{x:.09375,y:.40625},{x:.15625,y:.40625},{x:.15625,y:.40625},{x:.21875,y:.40625},{x:.21875,y:.40625},{x:.28125,y:.40625},{x:.28125,y:.40625},{x:.34375,y:.40625},{x:.34375,y:.40625},{x:.40625,y:.40625},{x:.40625,y:.40625},{x:.46875,y:.40625},{x:.46875,y:.40625},{x:.53125,y:.40625},{x:.53125,y:.40625},{x:.59375,y:.40625},{x:.59375,y:.40625},{x:.65625,y:.40625},{x:.65625,y:.40625},{x:.71875,y:.40625},{x:.71875,y:.40625},{x:.78125,y:.40625},{x:.78125,y:.40625},{x:.84375,y:.40625},{x:.84375,y:.40625},{x:.90625,y:.40625},{x:.90625,y:.40625},{x:.96875,y:.40625},{x:.96875,y:.40625},{x:.03125,y:.46875},{x:.03125,y:.46875},{x:.09375,y:.46875},{x:.09375,y:.46875},{x:.15625,y:.46875},{x:.15625,y:.46875},{x:.21875,y:.46875},{x:.21875,y:.46875},{x:.28125,y:.46875},{x:.28125,y:.46875},{x:.34375,y:.46875},{x:.34375,y:.46875},{x:.40625,y:.46875},{x:.40625,y:.46875},{x:.46875,y:.46875},{x:.46875,y:.46875},{x:.53125,y:.46875},{x:.53125,y:.46875},{x:.59375,y:.46875},{x:.59375,y:.46875},{x:.65625,y:.46875},{x:.65625,y:.46875},{x:.71875,y:.46875},{x:.71875,y:.46875},{x:.78125,y:.46875},{x:.78125,y:.46875},{x:.84375,y:.46875},{x:.84375,y:.46875},{x:.90625,y:.46875},{x:.90625,y:.46875},{x:.96875,y:.46875},{x:.96875,y:.46875},{x:.03125,y:.53125},{x:.03125,y:.53125},{x:.09375,y:.53125},{x:.09375,y:.53125},{x:.15625,y:.53125},{x:.15625,y:.53125},{x:.21875,y:.53125},{x:.21875,y:.53125},{x:.28125,y:.53125},{x:.28125,y:.53125},{x:.34375,y:.53125},{x:.34375,y:.53125},{x:.40625,y:.53125},{x:.40625,y:.53125},{x:.46875,y:.53125},{x:.46875,y:.53125},{x:.53125,y:.53125},{x:.53125,y:.53125},{x:.59375,y:.53125},{x:.59375,y:.53125},{x:.65625,y:.53125},{x:.65625,y:.53125},{x:.71875,y:.53125},{x:.71875,y:.53125},{x:.78125,y:.53125},{x:.78125,y:.53125},{x:.84375,y:.53125},{x:.84375,y:.53125},{x:.90625,y:.53125},{x:.90625,y:.53125},{x:.96875,y:.53125},{x:.96875,y:.53125},{x:.03125,y:.59375},{x:.03125,y:.59375},{x:.09375,y:.59375},{x:.09375,y:.59375},{x:.15625,y:.59375},{x:.15625,y:.59375},{x:.21875,y:.59375},{x:.21875,y:.59375},{x:.28125,y:.59375},{x:.28125,y:.59375},{x:.34375,y:.59375},{x:.34375,y:.59375},{x:.40625,y:.59375},{x:.40625,y:.59375},{x:.46875,y:.59375},{x:.46875,y:.59375},{x:.53125,y:.59375},{x:.53125,y:.59375},{x:.59375,y:.59375},{x:.59375,y:.59375},{x:.65625,y:.59375},{x:.65625,y:.59375},{x:.71875,y:.59375},{x:.71875,y:.59375},{x:.78125,y:.59375},{x:.78125,y:.59375},{x:.84375,y:.59375},{x:.84375,y:.59375},{x:.90625,y:.59375},{x:.90625,y:.59375},{x:.96875,y:.59375},{x:.96875,y:.59375},{x:.03125,y:.65625},{x:.03125,y:.65625},{x:.09375,y:.65625},{x:.09375,y:.65625},{x:.15625,y:.65625},{x:.15625,y:.65625},{x:.21875,y:.65625},{x:.21875,y:.65625},{x:.28125,y:.65625},{x:.28125,y:.65625},{x:.34375,y:.65625},{x:.34375,y:.65625},{x:.40625,y:.65625},{x:.40625,y:.65625},{x:.46875,y:.65625},{x:.46875,y:.65625},{x:.53125,y:.65625},{x:.53125,y:.65625},{x:.59375,y:.65625},{x:.59375,y:.65625},{x:.65625,y:.65625},{x:.65625,y:.65625},{x:.71875,y:.65625},{x:.71875,y:.65625},{x:.78125,y:.65625},{x:.78125,y:.65625},{x:.84375,y:.65625},{x:.84375,y:.65625},{x:.90625,y:.65625},{x:.90625,y:.65625},{x:.96875,y:.65625},{x:.96875,y:.65625},{x:.03125,y:.71875},{x:.03125,y:.71875},{x:.09375,y:.71875},{x:.09375,y:.71875},{x:.15625,y:.71875},{x:.15625,y:.71875},{x:.21875,y:.71875},{x:.21875,y:.71875},{x:.28125,y:.71875},{x:.28125,y:.71875},{x:.34375,y:.71875},{x:.34375,y:.71875},{x:.40625,y:.71875},{x:.40625,y:.71875},{x:.46875,y:.71875},{x:.46875,y:.71875},{x:.53125,y:.71875},{x:.53125,y:.71875},{x:.59375,y:.71875},{x:.59375,y:.71875},{x:.65625,y:.71875},{x:.65625,y:.71875},{x:.71875,y:.71875},{x:.71875,y:.71875},{x:.78125,y:.71875},{x:.78125,y:.71875},{x:.84375,y:.71875},{x:.84375,y:.71875},{x:.90625,y:.71875},{x:.90625,y:.71875},{x:.96875,y:.71875},{x:.96875,y:.71875},{x:.03125,y:.78125},{x:.03125,y:.78125},{x:.09375,y:.78125},{x:.09375,y:.78125},{x:.15625,y:.78125},{x:.15625,y:.78125},{x:.21875,y:.78125},{x:.21875,y:.78125},{x:.28125,y:.78125},{x:.28125,y:.78125},{x:.34375,y:.78125},{x:.34375,y:.78125},{x:.40625,y:.78125},{x:.40625,y:.78125},{x:.46875,y:.78125},{x:.46875,y:.78125},{x:.53125,y:.78125},{x:.53125,y:.78125},{x:.59375,y:.78125},{x:.59375,y:.78125},{x:.65625,y:.78125},{x:.65625,y:.78125},{x:.71875,y:.78125},{x:.71875,y:.78125},{x:.78125,y:.78125},{x:.78125,y:.78125},{x:.84375,y:.78125},{x:.84375,y:.78125},{x:.90625,y:.78125},{x:.90625,y:.78125},{x:.96875,y:.78125},{x:.96875,y:.78125},{x:.03125,y:.84375},{x:.03125,y:.84375},{x:.09375,y:.84375},{x:.09375,y:.84375},{x:.15625,y:.84375},{x:.15625,y:.84375},{x:.21875,y:.84375},{x:.21875,y:.84375},{x:.28125,y:.84375},{x:.28125,y:.84375},{x:.34375,y:.84375},{x:.34375,y:.84375},{x:.40625,y:.84375},{x:.40625,y:.84375},{x:.46875,y:.84375},{x:.46875,y:.84375},{x:.53125,y:.84375},{x:.53125,y:.84375},{x:.59375,y:.84375},{x:.59375,y:.84375},{x:.65625,y:.84375},{x:.65625,y:.84375},{x:.71875,y:.84375},{x:.71875,y:.84375},{x:.78125,y:.84375},{x:.78125,y:.84375},{x:.84375,y:.84375},{x:.84375,y:.84375},{x:.90625,y:.84375},{x:.90625,y:.84375},{x:.96875,y:.84375},{x:.96875,y:.84375},{x:.03125,y:.90625},{x:.03125,y:.90625},{x:.09375,y:.90625},{x:.09375,y:.90625},{x:.15625,y:.90625},{x:.15625,y:.90625},{x:.21875,y:.90625},{x:.21875,y:.90625},{x:.28125,y:.90625},{x:.28125,y:.90625},{x:.34375,y:.90625},{x:.34375,y:.90625},{x:.40625,y:.90625},{x:.40625,y:.90625},{x:.46875,y:.90625},{x:.46875,y:.90625},{x:.53125,y:.90625},{x:.53125,y:.90625},{x:.59375,y:.90625},{x:.59375,y:.90625},{x:.65625,y:.90625},{x:.65625,y:.90625},{x:.71875,y:.90625},{x:.71875,y:.90625},{x:.78125,y:.90625},{x:.78125,y:.90625},{x:.84375,y:.90625},{x:.84375,y:.90625},{x:.90625,y:.90625},{x:.90625,y:.90625},{x:.96875,y:.90625},{x:.96875,y:.90625},{x:.03125,y:.96875},{x:.03125,y:.96875},{x:.09375,y:.96875},{x:.09375,y:.96875},{x:.15625,y:.96875},{x:.15625,y:.96875},{x:.21875,y:.96875},{x:.21875,y:.96875},{x:.28125,y:.96875},{x:.28125,y:.96875},{x:.34375,y:.96875},{x:.34375,y:.96875},{x:.40625,y:.96875},{x:.40625,y:.96875},{x:.46875,y:.96875},{x:.46875,y:.96875},{x:.53125,y:.96875},{x:.53125,y:.96875},{x:.59375,y:.96875},{x:.59375,y:.96875},{x:.65625,y:.96875},{x:.65625,y:.96875},{x:.71875,y:.96875},{x:.71875,y:.96875},{x:.78125,y:.96875},{x:.78125,y:.96875},{x:.84375,y:.96875},{x:.84375,y:.96875},{x:.90625,y:.96875},{x:.90625,y:.96875},{x:.96875,y:.96875},{x:.96875,y:.96875},{x:.0625,y:.0625},{x:.0625,y:.0625},{x:.0625,y:.0625},{x:.0625,y:.0625},{x:.0625,y:.0625},{x:.0625,y:.0625},{x:.1875,y:.0625},{x:.1875,y:.0625},{x:.1875,y:.0625},{x:.1875,y:.0625},{x:.1875,y:.0625},{x:.1875,y:.0625},{x:.3125,y:.0625},{x:.3125,y:.0625},{x:.3125,y:.0625},{x:.3125,y:.0625},{x:.3125,y:.0625},{x:.3125,y:.0625},{x:.4375,y:.0625},{x:.4375,y:.0625},{x:.4375,y:.0625},{x:.4375,y:.0625},{x:.4375,y:.0625},{x:.4375,y:.0625},{x:.5625,y:.0625},{x:.5625,y:.0625},{x:.5625,y:.0625},{x:.5625,y:.0625},{x:.5625,y:.0625},{x:.5625,y:.0625},{x:.6875,y:.0625},{x:.6875,y:.0625},{x:.6875,y:.0625},{x:.6875,y:.0625},{x:.6875,y:.0625},{x:.6875,y:.0625},{x:.8125,y:.0625},{x:.8125,y:.0625},{x:.8125,y:.0625},{x:.8125,y:.0625},{x:.8125,y:.0625},{x:.8125,y:.0625},{x:.9375,y:.0625},{x:.9375,y:.0625},{x:.9375,y:.0625},{x:.9375,y:.0625},{x:.9375,y:.0625},{x:.9375,y:.0625},{x:.0625,y:.1875},{x:.0625,y:.1875},{x:.0625,y:.1875},{x:.0625,y:.1875},{x:.0625,y:.1875},{x:.0625,y:.1875},{x:.1875,y:.1875},{x:.1875,y:.1875},{x:.1875,y:.1875},{x:.1875,y:.1875},{x:.1875,y:.1875},{x:.1875,y:.1875},{x:.3125,y:.1875},{x:.3125,y:.1875},{x:.3125,y:.1875},{x:.3125,y:.1875},{x:.3125,y:.1875},{x:.3125,y:.1875},{x:.4375,y:.1875},{x:.4375,y:.1875},{x:.4375,y:.1875},{x:.4375,y:.1875},{x:.4375,y:.1875},{x:.4375,y:.1875},{x:.5625,y:.1875},{x:.5625,y:.1875},{x:.5625,y:.1875},{x:.5625,y:.1875},{x:.5625,y:.1875},{x:.5625,y:.1875},{x:.6875,y:.1875},{x:.6875,y:.1875},{x:.6875,y:.1875},{x:.6875,y:.1875},{x:.6875,y:.1875},{x:.6875,y:.1875},{x:.8125,y:.1875},{x:.8125,y:.1875},{x:.8125,y:.1875},{x:.8125,y:.1875},{x:.8125,y:.1875},{x:.8125,y:.1875},{x:.9375,y:.1875},{x:.9375,y:.1875},{x:.9375,y:.1875},{x:.9375,y:.1875},{x:.9375,y:.1875},{x:.9375,y:.1875},{x:.0625,y:.3125},{x:.0625,y:.3125},{x:.0625,y:.3125},{x:.0625,y:.3125},{x:.0625,y:.3125},{x:.0625,y:.3125},{x:.1875,y:.3125},{x:.1875,y:.3125},{x:.1875,y:.3125},{x:.1875,y:.3125},{x:.1875,y:.3125},{x:.1875,y:.3125},{x:.3125,y:.3125},{x:.3125,y:.3125},{x:.3125,y:.3125},{x:.3125,y:.3125},{x:.3125,y:.3125},{x:.3125,y:.3125},{x:.4375,y:.3125},{x:.4375,y:.3125},{x:.4375,y:.3125},{x:.4375,y:.3125},{x:.4375,y:.3125},{x:.4375,y:.3125},{x:.5625,y:.3125},{x:.5625,y:.3125},{x:.5625,y:.3125},{x:.5625,y:.3125},{x:.5625,y:.3125},{x:.5625,y:.3125},{x:.6875,y:.3125},{x:.6875,y:.3125},{x:.6875,y:.3125},{x:.6875,y:.3125},{x:.6875,y:.3125},{x:.6875,y:.3125},{x:.8125,y:.3125},{x:.8125,y:.3125},{x:.8125,y:.3125},{x:.8125,y:.3125},{x:.8125,y:.3125},{x:.8125,y:.3125},{x:.9375,y:.3125},{x:.9375,y:.3125},{x:.9375,y:.3125},{x:.9375,y:.3125},{x:.9375,y:.3125},{x:.9375,y:.3125},{x:.0625,y:.4375},{x:.0625,y:.4375},{x:.0625,y:.4375},{x:.0625,y:.4375},{x:.0625,y:.4375},{x:.0625,y:.4375},{x:.1875,y:.4375},{x:.1875,y:.4375},{x:.1875,y:.4375},{x:.1875,y:.4375},{x:.1875,y:.4375},{x:.1875,y:.4375},{x:.3125,y:.4375},{x:.3125,y:.4375},{x:.3125,y:.4375},{x:.3125,y:.4375},{x:.3125,y:.4375},{x:.3125,y:.4375},{x:.4375,y:.4375},{x:.4375,y:.4375},{x:.4375,y:.4375},{x:.4375,y:.4375},{x:.4375,y:.4375},{x:.4375,y:.4375},{x:.5625,y:.4375},{x:.5625,y:.4375},{x:.5625,y:.4375},{x:.5625,y:.4375},{x:.5625,y:.4375},{x:.5625,y:.4375},{x:.6875,y:.4375},{x:.6875,y:.4375},{x:.6875,y:.4375},{x:.6875,y:.4375},{x:.6875,y:.4375},{x:.6875,y:.4375},{x:.8125,y:.4375},{x:.8125,y:.4375},{x:.8125,y:.4375},{x:.8125,y:.4375},{x:.8125,y:.4375},{x:.8125,y:.4375},{x:.9375,y:.4375},{x:.9375,y:.4375},{x:.9375,y:.4375},{x:.9375,y:.4375},{x:.9375,y:.4375},{x:.9375,y:.4375},{x:.0625,y:.5625},{x:.0625,y:.5625},{x:.0625,y:.5625},{x:.0625,y:.5625},{x:.0625,y:.5625},{x:.0625,y:.5625},{x:.1875,y:.5625},{x:.1875,y:.5625},{x:.1875,y:.5625},{x:.1875,y:.5625},{x:.1875,y:.5625},{x:.1875,y:.5625},{x:.3125,y:.5625},{x:.3125,y:.5625},{x:.3125,y:.5625},{x:.3125,y:.5625},{x:.3125,y:.5625},{x:.3125,y:.5625},{x:.4375,y:.5625},{x:.4375,y:.5625},{x:.4375,y:.5625},{x:.4375,y:.5625},{x:.4375,y:.5625},{x:.4375,y:.5625},{x:.5625,y:.5625},{x:.5625,y:.5625},{x:.5625,y:.5625},{x:.5625,y:.5625},{x:.5625,y:.5625},{x:.5625,y:.5625},{x:.6875,y:.5625},{x:.6875,y:.5625},{x:.6875,y:.5625},{x:.6875,y:.5625},{x:.6875,y:.5625},{x:.6875,y:.5625},{x:.8125,y:.5625},{x:.8125,y:.5625},{x:.8125,y:.5625},{x:.8125,y:.5625},{x:.8125,y:.5625},{x:.8125,y:.5625},{x:.9375,y:.5625},{x:.9375,y:.5625},{x:.9375,y:.5625},{x:.9375,y:.5625},{x:.9375,y:.5625},{x:.9375,y:.5625},{x:.0625,y:.6875},{x:.0625,y:.6875},{x:.0625,y:.6875},{x:.0625,y:.6875},{x:.0625,y:.6875},{x:.0625,y:.6875},{x:.1875,y:.6875},{x:.1875,y:.6875},{x:.1875,y:.6875},{x:.1875,y:.6875},{x:.1875,y:.6875},{x:.1875,y:.6875},{x:.3125,y:.6875},{x:.3125,y:.6875},{x:.3125,y:.6875},{x:.3125,y:.6875},{x:.3125,y:.6875},{x:.3125,y:.6875},{x:.4375,y:.6875},{x:.4375,y:.6875},{x:.4375,y:.6875},{x:.4375,y:.6875},{x:.4375,y:.6875},{x:.4375,y:.6875},{x:.5625,y:.6875},{x:.5625,y:.6875},{x:.5625,y:.6875},{x:.5625,y:.6875},{x:.5625,y:.6875},{x:.5625,y:.6875},{x:.6875,y:.6875},{x:.6875,y:.6875},{x:.6875,y:.6875},{x:.6875,y:.6875},{x:.6875,y:.6875},{x:.6875,y:.6875},{x:.8125,y:.6875},{x:.8125,y:.6875},{x:.8125,y:.6875},{x:.8125,y:.6875},{x:.8125,y:.6875},{x:.8125,y:.6875},{x:.9375,y:.6875},{x:.9375,y:.6875},{x:.9375,y:.6875},{x:.9375,y:.6875},{x:.9375,y:.6875},{x:.9375,y:.6875},{x:.0625,y:.8125},{x:.0625,y:.8125},{x:.0625,y:.8125},{x:.0625,y:.8125},{x:.0625,y:.8125},{x:.0625,y:.8125},{x:.1875,y:.8125},{x:.1875,y:.8125},{x:.1875,y:.8125},{x:.1875,y:.8125},{x:.1875,y:.8125},{x:.1875,y:.8125},{x:.3125,y:.8125},{x:.3125,y:.8125},{x:.3125,y:.8125},{x:.3125,y:.8125},{x:.3125,y:.8125},{x:.3125,y:.8125},{x:.4375,y:.8125},{x:.4375,y:.8125},{x:.4375,y:.8125},{x:.4375,y:.8125},{x:.4375,y:.8125},{x:.4375,y:.8125},{x:.5625,y:.8125},{x:.5625,y:.8125},{x:.5625,y:.8125},{x:.5625,y:.8125},{x:.5625,y:.8125},{x:.5625,y:.8125},{x:.6875,y:.8125},{x:.6875,y:.8125},{x:.6875,y:.8125},{x:.6875,y:.8125},{x:.6875,y:.8125},{x:.6875,y:.8125},{x:.8125,y:.8125},{x:.8125,y:.8125},{x:.8125,y:.8125},{x:.8125,y:.8125},{x:.8125,y:.8125},{x:.8125,y:.8125},{x:.9375,y:.8125},{x:.9375,y:.8125},{x:.9375,y:.8125},{x:.9375,y:.8125},{x:.9375,y:.8125},{x:.9375,y:.8125},{x:.0625,y:.9375},{x:.0625,y:.9375},{x:.0625,y:.9375},{x:.0625,y:.9375},{x:.0625,y:.9375},{x:.0625,y:.9375},{x:.1875,y:.9375},{x:.1875,y:.9375},{x:.1875,y:.9375},{x:.1875,y:.9375},{x:.1875,y:.9375},{x:.1875,y:.9375},{x:.3125,y:.9375},{x:.3125,y:.9375},{x:.3125,y:.9375},{x:.3125,y:.9375},{x:.3125,y:.9375},{x:.3125,y:.9375},{x:.4375,y:.9375},{x:.4375,y:.9375},{x:.4375,y:.9375},{x:.4375,y:.9375},{x:.4375,y:.9375},{x:.4375,y:.9375},{x:.5625,y:.9375},{x:.5625,y:.9375},{x:.5625,y:.9375},{x:.5625,y:.9375},{x:.5625,y:.9375},{x:.5625,y:.9375},{x:.6875,y:.9375},{x:.6875,y:.9375},{x:.6875,y:.9375},{x:.6875,y:.9375},{x:.6875,y:.9375},{x:.6875,y:.9375},{x:.8125,y:.9375},{x:.8125,y:.9375},{x:.8125,y:.9375},{x:.8125,y:.9375},{x:.8125,y:.9375},{x:.8125,y:.9375},{x:.9375,y:.9375},{x:.9375,y:.9375},{x:.9375,y:.9375},{x:.9375,y:.9375},{x:.9375,y:.9375},{x:.9375,y:.9375}];var x7=class{constructor(t){nt(this,"model");nt(this,"anchors");nt(this,"anchorsTensor");nt(this,"inputSize");nt(this,"inputSizeTensor");nt(this,"doubleInputSizeTensor");this.model=t,this.anchors=sj.map(n=>[n.x,n.y]),this.anchorsTensor=bi(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Er([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Er([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){return ce(()=>{let n=gt(t,[0,0],[-1,2]),r=gt(t,[0,2],[-1,2]),s=Re(Me(n,this.inputSizeTensor),this.anchorsTensor),o=Me(r,this.doubleInputSizeTensor),a=te(Ge(s,o),this.inputSizeTensor),i=te(Re(s,o),this.inputSizeTensor);return v0([a,i],1)})}normalizeLandmarks(t,n){return ce(()=>{let r=Re(Me(ie(t,[-1,7,2]),this.inputSizeTensor),this.anchors[n]);return te(r,this.inputSizeTensor)})}async getBoxes(t,n){let r={};r.batched=this.model.predict(t),r.predictions=ln(r.batched),r.scores=ce(()=>ln(xo(gt(r.predictions,[0,0],[-1,1]))));let s=await r.scores.data();r.boxes=gt(r.predictions,[0,1],[-1,4]),r.norm=this.normalizeBoxes(r.boxes),r.nms=await ht.nonMaxSuppressionAsync(r.norm,r.scores,3*n.hand.maxDetected,n.hand.iouThreshold,n.hand.minConfidence);let o=await r.nms.array(),a=[];for(let i of o){let l=gt(r.norm,[i,0],[1,-1]),u=ce(()=>ie(this.normalizeLandmarks(gt(r.predictions,[i,5],[1,14]),i),[-1,2]));a.push({box:l,palmLandmarks:u,confidence:s[i]})}for(let i of Object.keys(r))ye(r[i]);return a}async estimateHandBounds(t,n){let r=t.shape[1],s=t.shape[2],o=ce(()=>Ge(Me(ht.resizeBilinear(t,[this.inputSize,this.inputSize]),127.5),1)),a=await this.getBoxes(o,n);ye(o);let i=[];if(!a||a.length===0)return i;for(let l of a){let u=await l.box.data(),c=u.slice(0,2),p=u.slice(2,4),d=await l.palmLandmarks.array();ye(l.box),ye(l.palmLandmarks),i.push(rj({startPoint:c,endPoint:p,palmLandmarks:d,confidence:l.confidence},[s/this.inputSize,r/this.inputSize]))}return i}};function A9e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function oj(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return A9e(n)}var aj=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ip(e,t){let n=0;for(let r=0;ra[0]),r=t.map(a=>a[1]),s=[Math.min(...n),Math.min(...r)],o=[Math.max(...n),Math.max(...r)];return{startPoint:s,endPoint:o}}getBoxForPalmLandmarks(t,n){let r=t.map(o=>b7([...o,1],n)),s=this.calculateLandmarksBoundingBox(r);return s3(o3(s),w9e)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),r=s3(o3(n),uj);r.palmLandmarks=[];for(let s=0;s[a[0]*(f[0]-this.inputSize/2),a[1]*(f[1]-this.inputSize/2),a[2]*f[2]]),l=y7(r,[0,0]),u=i.map(f=>[...b7(f,l),f[2]]),c=lj(s),p=[...AA(n),1],d=[ip(p,c[0]),ip(p,c[1])];return u.map(f=>[Math.trunc(f[0]+d[0]),Math.trunc(f[1]+d[1]),Math.trunc(f[2])])}async estimateHands(t,n){let r=!1,s;(this.skipped===0||this.skipped>n.hand.skipFrames||!n.hand.landmarks||!n.skipFrame)&&(s=await this.handDetector.estimateHandBounds(t,n),this.skipped=0),n.skipFrame&&this.skipped++,s&&s.length>0&&(s.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...s],this.storedBoxes.length>0&&(r=!0));let o=[];for(let a=0;a=n.hand.minConfidence/4){let b=ie(x,[-1,3]),A=await b.array();ye(x),ye(b);let v=this.transformRawCoords(A,f,l,d),w=this.getBoxForHandLandmarks(v);this.storedBoxes[a]={...w,confidence:y};let k={landmarks:v,confidence:y,boxConfidence:i.confidence,fingerConfidence:y,box:{topLeft:w.startPoint,bottomRight:w.endPoint}};o.push(k)}else this.storedBoxes[a]=null;ye(x)}else{let l=s3(o3(i),uj),u={confidence:i.confidence,boxConfidence:i.confidence,fingerConfidence:0,box:{topLeft:l.startPoint,bottomRight:l.endPoint},landmarks:[]};o.push(u)}}return this.storedBoxes=this.storedBoxes.filter(a=>a!==null),this.detectedHands=o.length,o.length>n.hand.maxDetected&&(o.length=n.hand.maxDetected),o}};var Ut={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>Ut.nameMapping[e],getPoints:e=>Ut.pointsMapping[e]},Co={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Co.nameMapping[e]},Gt={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>Gt.nameMapping[e]},a3=class{constructor(t){nt(this,"name");nt(this,"curls");nt(this,"directions");nt(this,"weights");nt(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}addCurl(t,n,r){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,r])}addDirection(t,n,r){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,r])}setWeight(t,n){this.weights[t]=n;let r=this.weights.reduce((s,o)=>s+o,0);this.weightsRelative=this.weights.map(s=>s*5/r)}matchAgainst(t,n){let r=0;for(let s in t){let o=t[s],a=this.curls[s];if(typeof a=="undefined"){r+=this.weightsRelative[s];continue}for(let[i,l]of a)if(o===i){r+=l*this.weightsRelative[s];break}}for(let s in n){let o=n[s],a=this.directions[s];if(typeof a=="undefined"){r+=this.weightsRelative[s];continue}for(let[i,l]of a)if(o===i){r+=l*this.weightsRelative[s];break}}return r/10}};var lp=new a3("thumbs up");lp.addCurl(Ut.thumb,Co.none,1);lp.addDirection(Ut.thumb,Gt.verticalUp,1);lp.addDirection(Ut.thumb,Gt.diagonalUpLeft,.25);lp.addDirection(Ut.thumb,Gt.diagonalUpRight,.25);for(let e of[Ut.index,Ut.middle,Ut.ring,Ut.pinky])lp.addCurl(e,Co.full,1),lp.addDirection(e,Gt.horizontalLeft,1),lp.addDirection(e,Gt.horizontalRight,1);var Fr=new a3("victory");Fr.addCurl(Ut.thumb,Co.half,.5);Fr.addCurl(Ut.thumb,Co.none,.5);Fr.addDirection(Ut.thumb,Gt.verticalUp,1);Fr.addDirection(Ut.thumb,Gt.diagonalUpLeft,1);Fr.addCurl(Ut.index,Co.none,1);Fr.addDirection(Ut.index,Gt.verticalUp,.75);Fr.addDirection(Ut.index,Gt.diagonalUpLeft,1);Fr.addCurl(Ut.middle,Co.none,1);Fr.addDirection(Ut.middle,Gt.verticalUp,1);Fr.addDirection(Ut.middle,Gt.diagonalUpLeft,.75);Fr.addCurl(Ut.ring,Co.full,1);Fr.addDirection(Ut.ring,Gt.verticalUp,.2);Fr.addDirection(Ut.ring,Gt.diagonalUpLeft,1);Fr.addDirection(Ut.ring,Gt.horizontalLeft,.2);Fr.addCurl(Ut.pinky,Co.full,1);Fr.addDirection(Ut.pinky,Gt.verticalUp,.2);Fr.addDirection(Ut.pinky,Gt.diagonalUpLeft,1);Fr.addDirection(Ut.pinky,Gt.horizontalLeft,.2);Fr.setWeight(Ut.index,2);Fr.setWeight(Ut.middle,2);var pj=[lp,Fr];var C9e=.7,wh={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function dj(e,t,n,r){let s=(t-r)/(e-n),o=Math.atan(s)*180/Math.PI;return o<=0?o=-o:o>0&&(o=180-o),o}function fj(e,t){if(!e||!t)return[0,0];let n=dj(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let r=dj(e[1],e[2],t[1],t[2]);return[n,r]}function hj(e,t=1){let n=0,r=0,s=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?r=1*t:s=1*t,[n,r,s]}function S9e(e,t,n){let r=e[0]-t[0],s=e[0]-n[0],o=t[0]-n[0],a=e[1]-t[1],i=e[1]-n[1],l=t[1]-n[1],u=e[2]-t[2],c=e[2]-n[2],p=t[2]-n[2],d=Math.sqrt(r*r+a*a+u*u),f=Math.sqrt(s*s+i*i+c*c),h=Math.sqrt(o*o+l*l+p*p),m=(h*h+d*d-f*f)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let x;return g>wh.NO_CURL_START_LIMIT?x=Co.none:g>wh.HALF_CURL_START_LIMIT?x=Co.half:x=Co.full,x}function mj(e,t,n,r){let s;return r===Math.abs(e)?e>0?s=Gt.horizontalLeft:s=Gt.horizontalRight:r===Math.abs(t)?t>0?s=Gt.horizontalLeft:s=Gt.horizontalRight:n>0?s=Gt.horizontalLeft:s=Gt.horizontalRight,s}function gj(e,t,n,r){let s;return r===Math.abs(e)?e<0?s=Gt.verticalDown:s=Gt.verticalUp:r===Math.abs(t)?t<0?s=Gt.verticalDown:s=Gt.verticalUp:n<0?s=Gt.verticalDown:s=Gt.verticalUp,s}function N9e(e,t,n,r,s,o,a,i){let l,u=gj(e,t,n,r),c=mj(s,o,a,i);return u===Gt.verticalUp?c===Gt.horizontalLeft?l=Gt.diagonalUpLeft:l=Gt.diagonalUpRight:c===Gt.horizontalLeft?l=Gt.diagonalDownLeft:l=Gt.diagonalDownRight,l}function T9e(e,t,n,r){let s=e[0]-t[0],o=e[0]-n[0],a=t[0]-n[0],i=e[1]-t[1],l=e[1]-n[1],u=t[1]-n[1],c=Math.max(Math.abs(s),Math.abs(o),Math.abs(a)),p=Math.max(Math.abs(i),Math.abs(l),Math.abs(u)),d=0,f=0,h=0,m=p/(c+1e-5);m>1.5?d+=wh.DISTANCE_VOTE_POWER:m>.66?f+=wh.DISTANCE_VOTE_POWER:h+=wh.DISTANCE_VOTE_POWER;let g=Math.sqrt(s*s+i*i),x=Math.sqrt(o*o+l*l),y=Math.sqrt(a*a+u*u),b=Math.max(g,x,y),A=e[0],v=e[1],w=n[0],k=n[1];b===g?(w=n[0],k=n[1]):b===y&&(A=t[0],v=t[1]);let T=fj([A,v],[w,k]),_=hj(T,wh.TOTAL_ANGLE_VOTE_POWER);d+=_[0],f+=_[1],h+=_[2];for(let S of r){let F=hj(S,wh.SINGLE_ANGLE_VOTE_POWER);d+=F[0],f+=F[1],h+=F[2]}let R;return d===Math.max(d,f,h)?R=gj(l,i,u,p):h===Math.max(f,h)?R=mj(o,s,a,c):R=N9e(l,i,u,p,o,s,a,c),R}function xj(e){let t=[],n=[],r=[],s=[];if(!e)return{curls:r,directions:s};for(let o of Ut.all){let a=Ut.getPoints(o),i=[],l=[];for(let u of a){let c=e[u[0]],p=e[u[1]],d=fj(c,p),f=d[0],h=d[1];i.push(f),l.push(h)}t.push(i),n.push(l)}for(let o of Ut.all){let a=o===Ut.thumb?1:0,i=Ut.getPoints(o),l=e[i[a][0]],u=e[i[a+1][1]],c=e[i[3][1]],p=S9e(l,u,c),d=T9e(l,u,c,t[o].slice(a));r[o]=p,s[o]=d}return{curls:r,directions:s}}function i3(e){if(!e||e.length===0)return null;let t=xj(e),n={};for(let r of Ut.all)n[Ut.getName(r)]={curl:Co.getName(t.curls[r]),direction:Gt.getName(t.directions[r])};return n}function yj(e){let t=[];if(!e||e.length===0)return t;let n=xj(e);for(let r of pj){let s=r.matchAgainst(n.curls,n.directions);s>=C9e&&t.push({name:r.name,confidence:s})}return t}var bj={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Yl,Jl,Aj;async function v7(e,t){let n=await Aj.estimateHands(e,t);if(!n)return[];let r=[];for(let s=0;sn[s].landmarks[p]);let a=n[s].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(a&&a.length>0){for(let c of a)c[0]i[2]&&(i[2]=c[0]),c[1]>i[3]&&(i[3]=c[1]);i[2]-=i[0],i[3]-=i[1],l=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=n[s].box?[Math.trunc(Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.max(0,n[s].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[s].box.bottomRight[0])-Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[s].box.bottomRight[1])-Math.max(0,n[s].box.topLeft[1]))]:[0,0,0,0],l=[n[s].box.topLeft[0]/(e.shape[2]||0),n[s].box.topLeft[1]/(e.shape[1]||0),(n[s].box.bottomRight[0]-n[s].box.topLeft[0])/(e.shape[2]||0),(n[s].box.bottomRight[1]-n[s].box.topLeft[1])/(e.shape[1]||0)];let u=i3(a);r.push({id:s,score:Math.round(100*n[s].confidence)/100,boxScore:Math.round(100*n[s].boxConfidence)/100,fingerScore:Math.round(100*n[s].fingerConfidence)/100,label:"hand",box:i,boxRaw:l,keypoints:a,annotations:o,landmarks:u})}return r}async function w7(e){var n,r,s,o,a,i;Ee.initial&&(Yl=null,Jl=null),!Yl||!Jl?([Yl,Jl]=await Promise.all([e.hand.enabled?yn(an(e.modelBasePath,((n=e.hand.detector)==null?void 0:n.modelPath)||""),{fromTFHub:(((r=e.hand.detector)==null?void 0:r.modelPath)||"").includes("tfhub.dev")}):null,e.hand.landmarks?yn(an(e.modelBasePath,((s=e.hand.skeleton)==null?void 0:s.modelPath)||""),{fromTFHub:(((o=e.hand.skeleton)==null?void 0:o.modelPath)||"").includes("tfhub.dev")}):null]),e.hand.enabled&&(!Yl||!Yl.modelUrl?Ce("load model failed:",((a=e.hand.detector)==null?void 0:a.modelPath)||""):e.debug&&Ce("load model:",Yl.modelUrl),!Jl||!Jl.modelUrl?Ce("load model failed:",((i=e.hand.skeleton)==null?void 0:i.modelPath)||""):e.debug&&Ce("load model:",Jl.modelUrl))):(e.debug&&Ce("cached model:",Yl.modelUrl),e.debug&&Ce("cached model:",Jl.modelUrl));let t=new x7(Yl);return Aj=new A7(t,Jl),[Yl,Jl]}function l3(e,t,n){let r=[e.map(c=>c[0]),e.map(c=>c[1])],s=[Math.max(...r[0]),Math.min(...r[0]),Math.max(...r[1]),Math.min(...r[1])],o=[(s[0]+s[1])/2,(s[2]+s[3])/2],a=Math.max(o[0]-s[1],o[1]-s[3],-o[0]+s[0],-o[1]+s[2])*t,i=[Math.trunc(o[0]-a),Math.trunc(o[1]-a),Math.trunc(2*a),Math.trunc(2*a)],l=[i[0]/n[0],i[1]/n[1],i[2]/n[0],i[3]/n[1]],u=[l[1],l[0],l[3]+l[1],l[2]+l[0]];return{box:i,boxRaw:l,yxBox:u}}var vA=1.5,Cr=[null,null],_9e=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ql=[[0,0],[0,0]],E9e=["hand","fist","pinch","point","face","tip","pinchtip"],k7=0,ix=[0,0],Ei={handBoxes:[],fingerBoxes:[],tmpBoxes:[]},vj={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]};async function wj(e){var t;if(Ee.initial&&(Cr[0]=null),Cr[0])e.debug&&Ce("cached model:",Cr[0].modelUrl);else{lx(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Cr[0]=await yn(an(e.modelBasePath,((t=e.hand.detector)==null?void 0:t.modelPath)||""));let n=Object.values(Cr[0].modelSignature.inputs);Ql[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ql[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,!Cr[0]||!Cr[0].modelUrl?Ce("load model failed:",e.object.modelPath):e.debug&&Ce("load model:",Cr[0].modelUrl)}return Cr[0]}async function kj(e){var t;if(Ee.initial&&(Cr[1]=null),Cr[1])e.debug&&Ce("cached model:",Cr[1].modelUrl);else{Cr[1]=await yn(an(e.modelBasePath,((t=e.hand.skeleton)==null?void 0:t.modelPath)||""));let n=Object.values(Cr[1].modelSignature.inputs);Ql[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ql[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,!Cr[1]||!Cr[1].modelUrl?Ce("load model failed:",e.object.modelPath):e.debug&&Ce("load model:",Cr[1].modelUrl)}return Cr[1]}async function R9e(e,t){let n=[];if(!e||!Cr[0])return n;let r={},s=(e.shape[2]||1)/(e.shape[1]||1),o=Math.min(Math.round((e.shape[1]||0)/8)*8,512),a=Math.round(o*s/8)*8;r.resize=ht.resizeBilinear(e,[o,a]),r.cast=Fe(r.resize,"int32"),[r.rawScores,r.rawBoxes]=await Cr[0].executeAsync(r.cast,_9e),r.boxes=ln(r.rawBoxes,[0,2]),r.scores=ln(r.rawScores,[0]);let i=Vs(r.scores,1),l=0;for(let u=0;uye(u)),Object.keys(r).forEach(u=>ye(r[u])),n.sort((u,c)=>c.score-u.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function I7(e,t,n){let r={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&Cr[1]&&n.hand.landmarks){let s={};if(!t.yxBox)return r;s.crop=ht.cropAndResize(e,[t.yxBox],[0],[Ql[1][0],Ql[1][1]],"bilinear"),s.cast=Fe(s.crop,"float32"),s.div=Me(s.cast,255),[s.score,s.keypoints]=Cr[1].execute(s.div);let o=(await s.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(o))))/100;if(a>=(n.hand.minConfidence||0)){r.fingerScore=a,s.reshaped=ie(s.keypoints,[-1,3]);let i=await s.reshaped.array();r.keypoints=i.map(c=>[t.box[2]*c[0]/Ql[1][0]+t.box[0],t.box[3]*c[1]/Ql[1][1]+t.box[1],(t.box[2]+t.box[3])/2/Ql[1][0]*(c[2]||0)]);let l=l3(r.keypoints,vA,ix);t.box=l.box,t.boxRaw=l.boxRaw,t.yxBox=l.yxBox,r.box=t.box,r.landmarks=i3(r.keypoints);for(let c of Object.keys(vj))r.annotations[c]=vj[c].map(p=>r.landmarks&&r.keypoints[p]?r.keypoints[p]:null);Math.min(t.box[2]/(e.shape[2]||1),t.box[3]/(e.shape[1]||1))>.05&&Ei.tmpBoxes.push(t)}Object.keys(s).forEach(i=>ye(s[i]))}return r}async function C7(e,t){ix=[e.shape[2]||0,e.shape[1]||0];let n=[];return Ei.tmpBoxes=[],t.hand.landmarks||(Ei.fingerBoxes=Ei.handBoxes),t.skipFrame||(Ei.fingerBoxes=[]),k7<(t.hand.skipFrames||0)&&t.skipFrame?(k7++,n=await Promise.all(Ei.fingerBoxes.map(r=>I7(e,r,t)))):(k7=0,n=await Promise.all(Ei.fingerBoxes.map(r=>I7(e,r,t))),n.length!==t.hand.maxDetected&&(Ei.handBoxes=await R9e(e,t),n=await Promise.all(Ei.handBoxes.map(r=>I7(e,r,t))))),Ei.fingerBoxes=[...Ei.tmpBoxes],n}var D9e=1e-7,$9e=1e-4,ux=class{constructor(t,n){this.backend=t,this.dataMover=n,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,n){this.dataIdsCount++,this.data.set(t,n)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},up=class{refCount(t){return Va("refCount")}incRef(t){return Va("incRef")}timerAvailable(){return!0}time(t){return Va("time")}read(t){return Va("read")}readSync(t){return Va("readSync")}numDataIds(){return Va("numDataIds")}disposeData(t,n){return Va("disposeData")}write(t,n,r){return Va("write")}move(t,n,r,s,o){return Va("move")}memory(){return Va("memory")}floatPrecision(){return Va("floatPrecision")}epsilon(){return this.floatPrecision()===32?D9e:$9e}dispose(){return Va("dispose")}};function Va(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function Ij(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,u3(e,t,n)}function F9e(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,r=0;for(;n>0;)r=Math.random()*n|0,n--,u3(e,n,r),u3(t,n,r)}function cx(e,t,n){return Math.max(e,Math.min(t,n))}function O9e(e){return e%2==0?e:e+1}function u3(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function P9e(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function wA(e){V(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function cp(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||Jo(e)&&!n)for(let r=0;r0,n){return new Promise((r,s)=>{let o=0,a=()=>{if(e()){r();return}o++;let i=t(o);if(n!=null&&o>=n){s();return}setTimeout(a,i)};a()})}function U9e(e,t){let n=1,r=-1;for(let o=0;o=0)n*=e[o];else if(e[o]===-1){if(r!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${o}`);r=o}else if(e[o]<0)throw Error(`Shapes can not be < 0. Found ${e[o]} at dim ${o}`);if(r===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!=0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let s=e.slice();return s[r]=t/n,s}function Sr(e,t){let n=t.length;return e=e==null?t.map((r,s)=>s):[].concat(e),V(e.every(r=>r>=-n&&r`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),V(e.every(r=>Jt(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function S7(e,t){let n=[],r=[],s=t!=null&&Array.isArray(t)&&t.length===0,o=t==null||s?null:Sr(t,e).sort(),a=0;for(let i=0;ii)&&e[i]===1&&(n.push(e[i]),r.push(i)),o[a]<=i&&a++}e[i]!==1&&(n.push(e[i]),r.push(i))}return{newShape:n,keptDims:r}}function j9e(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function N7(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function T7(e,t){for(let n=0;nt+=n.length),t}function px(e){return typeof e=="string"||e instanceof String}function Cj(e){return typeof e=="boolean"}function Sj(e){return typeof e=="number"}function dx(e){return Array.isArray(e)?dx(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array?"int32":Sj(e)?"float32":px(e)?"string":Cj(e)?"bool":"float32"}function fx(e){return!!(e&&e.constructor&&e.call&&e.apply)}function hx(e,t){for(let n=t;n=0;--r)n[r]=n[r+1]*e[r+1];return n}function Nj(e,t,n,r=!1){let s=new Array;if(t.length===1){let o=t[0]*(r?2:1);for(let a=0;al*u)*(r?2:1);for(let l=0;ls*o)*(n?2:1);if(r===0)return[];if(r!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return Nj(0,e,t,n)}function kA(e,t){let n=mx(e,t);for(let r=0;rr*s,1);if(t==null||t==="float32")return Ih(e,new Float32Array(n));if(t==="int32")return Ih(e,new Int32Array(n));if(t==="bool")return Ih(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function IA(e){e.forEach(t=>{V(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function K9e(e,t,n){if(t===0)return 0;if(t===1)return e[0];let r=e[e.length-1];for(let s=0;s{let[s,o]=r.split(":");this.urlFlags[s]=Q9e(s,o)})}};function Y9e(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(J9e(t,r[0],r[1]),r.join("="))),t}function J9e(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function Q9e(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function he(){return R7}var R7=null;function _j(e){R7=e}var D7;function $7(){if(D7==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");D7=e}return D7}function eMe(){let e=$7();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function SA(e,t){let n=eMe();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var pp="Abs",eu="Acos",tu="Acosh",Ri="Add",dp="AddN",gx="All",xx="Any",fp="ArgMax",hp="ArgMin",nu="Asin",ru="Asinh",su="Atan",ou="Atanh",au="Atan2",mp="AvgPool",yx="AvgPoolGrad",gp="AvgPool3D",bx="AvgPool3DGrad",xp="BatchMatMul",yp="BatchToSpaceND",Ax="Bincount",Ej="BroadcastTo",f3="BroadcastArgs",bl="Cast",iu="Ceil",lu="ClipByValue",vx="Complex",bp="ComplexAbs",Ap="Concat",vp="Conv2D",wx="Conv2DBackpropFilter",wp="Conv2DBackpropInput",kp="Conv3D",kx="Conv3DBackpropFilterV2",Ix="Conv3DBackpropInputV2",uu="Cos",cu="Cosh",Ip="Cumsum",Cx="CropAndResize",Sx="DenseBincount",Nx="DepthToSpace",Cp="DepthwiseConv2dNative",Tx="DepthwiseConv2dNativeBackpropFilter",_x="DepthwiseConv2dNativeBackpropInput",h3="Diag",Sp="Dilation2D",NA="Dilation2DBackpropInput",TA="Dilation2DBackpropFilter",pu="RealDiv",Ex="Einsum",du="Elu",Rx="EluGrad",fu="Erf",Ch="Equal",hu="Exp",Np="ExpandDims",mu="Expm1",Dx="FFT",$x="Fill",Fx="FlipLeftRight",gu="Floor",xu="FloorDiv",Tp="FusedBatchNorm",_p="GatherV2",Ox="GatherNd",Sh="Greater",yu="GreaterEqual",Al="Identity",Px="IFFT",Mx="Imag",bu="IsFinite",Au="IsInf",vu="IsNan",Ep="LeakyRelu",Nh="Less",Th="LessEqual",zx="LinSpace",wu="Log",ku="Log1p",_h="LogicalAnd",Eh="LogicalNot",Rh="LogicalOr",Rj="LogSoftmax",Rp="LRN",Lx="LRNGrad",Dp="Max",Iu="Maximum",$p="MaxPool",Bx="MaxPoolGrad",Fp="MaxPool3D",Vx="MaxPool3DGrad",Wx="MaxPoolWithArgmax",Op="Mean",Pp="Min",Cu="Minimum",Mp="MirrorPad",Su="Mod",Gx="Multinomial",Nu="Multiply",zp="Neg",Dh="NotEqual",Ux="NonMaxSuppressionV3",jx="NonMaxSuppressionV4",Hx="NonMaxSuppressionV5",Lp="OnesLike",Bp="OneHot",Vp="Pack",Wp="PadV2";var Tu="Pow",Gp="Prelu",qx="Prod",Kx="Range",Xx="Real",_u="Reciprocal",Eu="Relu",Up="Reshape",jp="ResizeNearestNeighbor",Zx="ResizeNearestNeighborGrad",Hp="ResizeBilinear",Yx="ResizeBilinearGrad",Ru="Relu6",qp="Reverse",Du="Round",$u="Rsqrt",Jx="ScatterNd",Kp="Select",Fu="Selu",Xp="Slice",Ou="Sin",Pu="Sinh",Mu="Sign",zu="Sigmoid",Lu="Softplus",Bu="Sqrt",Zp="Sum",Yp="SpaceToBatchND",Jp="SplitV",Qp="Softmax",Qx="SparseFillEmptyRows",ey="SparseReshape",ty="SparseSegmentMean",ny="SparseSegmentSum",ry="SparseToDense",Vu="SquaredDifference",sy="Square",oy="StridedSlice",ay="StringNGrams",iy="StringSplit",ly="StringToHashBucketFast",Wu="Sub",Gu="Tan",Uu="Tanh",vl="Tile",uy="TopK",cy="Transform",ed="Transpose",py="Unique",td="Unpack",nd="UnsortedSegmentSum",rd="ZerosLike",ju="Step",Dj="FromPixels",dy="RotateWithOffset",$h="_FusedMatMul",Fh="FusedConv2D",Oh="FusedDepthwiseConv2D";var m3=SA("kernelRegistry",()=>new Map),F7=SA("gradRegistry",()=>new Map);function O7(e,t){let n=Fj(e,t);return m3.get(n)}function P7(e){return F7.get(e)}function M7(e){let t=m3.entries(),n=[];for(;;){let{done:r,value:s}=t.next();if(r)break;let[o,a]=s,[i]=o.split("_");i===e&&n.push(a)}return n}function g3(e){let{kernelName:t,backendName:n}=e,r=Fj(t,n);m3.has(r)&&Aa(`The kernel '${t}' for backend '${n}' is already registered`),m3.set(r,e)}function $j(e){let{kernelName:t}=e;F7.has(t)&&he().getBool("DEBUG")&&Aa(`Overriding the gradient for '${t}'`),F7.set(t,e)}function Fj(e,t){return`${t}_${e}`}var C={};dn(C,{arraysEqual:()=>Wa,assert:()=>V,assertNonNegativeIntegerDimensions:()=>IA,assertNonNull:()=>wA,assertShapesMatch:()=>c3,bytesFromStringArray:()=>E7,bytesPerElement:()=>p3,checkConversionForErrors:()=>T7,clamp:()=>cx,computeStrides:()=>yl,createScalarValue:()=>iMe,createShuffledIndices:()=>W9e,decodeString:()=>xy,distSquared:()=>z9e,encodeString:()=>gy,fetch:()=>uMe,fingerPrint64:()=>aMe,flatten:()=>cp,getArrayFromDType:()=>N7,getTypedArrayFromDType:()=>j9e,hasEncodingLoss:()=>H9e,hexToLong:()=>_A,indexToLoc:()=>X9e,inferDtype:()=>dx,inferFromImplicitShape:()=>U9e,isBoolean:()=>Cj,isFunction:()=>fx,isInt:()=>Jt,isNumber:()=>Sj,isPromise:()=>CA,isScalarShape:()=>L9e,isString:()=>px,isTypedArray:()=>Jo,isValidDtype:()=>_7,locToIndex:()=>K9e,makeOnesTypedArray:()=>kA,makeZerosNestedTypedArray:()=>q9e,makeZerosTypedArray:()=>mx,nearestDivisor:()=>hx,nearestLargerEven:()=>O9e,now:()=>Bh,parseAxisParam:()=>Sr,randUniform:()=>M9e,repeatedTry:()=>G9e,rightPad:()=>kh,shuffle:()=>Ij,shuffleCombo:()=>F9e,sizeFromShape:()=>bn,sizeToSquarishShape:()=>V9e,squeezeShape:()=>S7,sum:()=>P9e,swap:()=>u3,tanh:()=>B9e,toNestedArray:()=>Ih,toTypedArray:()=>my});var Hj=T1(jj());var zh=Hj.default||Hj;function _A(e){return zh.fromString(e,!0,16)}var qj=_A("c3a5c85c97cb3127"),Lh=_A("b492b66fbe98f273"),Xs=_A("9ae16a3b2f90404f");function B7(e){return e.xor(e.shru(47))}function Kj(e,t,n){let r=e.slice(t,t+n);return zh.fromBytes(Array.from(r),!0,!0)}function zn(e,t){return Kj(e,t,8)}function Xj(e,t){return Kj(e,t,4)}function fs(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function sd(e,t,n=_A("9ddfea08eb382d69")){let r=e.xor(t).mul(n);r=r.xor(r.shru(47));let s=t.xor(r).mul(n);return s=s.xor(s.shru(47)),s=s.mul(n),s}function nMe(e,t,n,r,s,o){s=s.add(e),o=fs(o.add(s).add(r),21);let a=s;return s=s.add(t),s=s.add(n),o=o.add(fs(s,44)),[s.add(r),o.add(a)]}function y3(e,t,n,r){return nMe(zn(e,t),zn(e,t+8),zn(e,t+16),zn(e,t+24),n,r)}function rMe(e,t=e.length){if(t>=8){let n=Xs.add(t*2),r=zn(e,0).add(Xs),s=zn(e,t-8),o=fs(s,37).mul(n).add(r),a=fs(r,25).add(s).mul(n);return sd(o,a,n)}if(t>=4){let n=Xs.add(t*2),r=Xj(e,0);return sd(r.shl(3).add(t),Xj(e,t-4),n)}if(t>0){let n=e[0],r=e[t>>1],s=e[t-1],o=n+(r<<8),a=t+(s<<2);return B7(Xs.mul(o).xor(qj.mul(a))).mul(Xs)}return Xs}function sMe(e,t=e.length){let n=Xs.add(t*2),r=zn(e,0).mul(Lh),s=zn(e,8),o=zn(e,t-8).mul(n),a=zn(e,t-16).mul(Xs);return sd(fs(r.add(s),43).add(fs(o,30)).add(a),r.add(fs(s.add(Xs),18)).add(o),n)}function oMe(e,t=e.length){let n=Xs.add(t*2),r=zn(e,0).mul(Xs),s=zn(e,8),o=zn(e,t-8).mul(n),a=zn(e,t-16).mul(Xs),i=fs(r.add(s),43).add(fs(o,30)).add(a),l=sd(i,r.add(fs(s.add(Xs),18)).add(o),n),u=zn(e,16).mul(n),c=zn(e,24),p=i.add(zn(e,t-32)).mul(n),d=l.add(zn(e,t-24)).mul(n);return sd(fs(u.add(c),43).add(fs(p,30)).add(d),u.add(fs(c.add(r),18)).add(p),n)}function aMe(e,t=e.length){let n=zh.fromNumber(81,!0);if(t<=32)return t<=16?rMe(e,t):sMe(e,t);if(t<=64)return oMe(e,t);let r=n,s=n.mul(Lh).add(113),o=B7(s.mul(Xs).add(113)).mul(Xs),a=[zh.UZERO,zh.UZERO],i=[zh.UZERO,zh.UZERO];r=r.mul(Xs).add(zn(e,0));let l=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do r=fs(r.add(s).add(a[0]).add(zn(e,l+8)),37).mul(Lh),s=fs(s.add(a[1]).add(zn(e,l+48)),42).mul(Lh),r=r.xor(i[1]),s=s.add(a[0]).add(zn(e,l+40)),o=fs(o.add(i[0]),33).mul(Lh),a=y3(e,l,a[1].mul(Lh),r.add(i[0])),i=y3(e,l+32,o.add(i[1]),s.add(zn(e,l+16))),[o,r]=[r,o],l+=64;while(l!==u);let p=Lh.add(o.and(255).shl(1));return l=c,i[0]=i[0].add(t-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),r=fs(r.add(s).add(a[0]).add(zn(e,l+8)),37).mul(p),s=fs(s.add(a[1]).add(zn(e,l+48)),42).mul(p),r=r.xor(i[1].mul(9)),s=s.add(a[0].mul(9).add(zn(e,l+40))),o=fs(o.add(i[0]),33).mul(p),a=y3(e,l,a[1].mul(p),r.add(i[0])),i=y3(e,l+32,o.add(i[1]),s.add(zn(e,l+16))),[o,r]=[r,o],sd(sd(a[0],i[0],p).add(B7(s).mul(qj)).add(o),sd(a[1],i[1],p).add(r),p)}function iMe(e,t){return t==="string"?gy(e):my([e],t)}function lMe(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function my(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=cp(e)),he().getBool("DEBUG")&&T7(e,t),lMe(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let r=0;r{s=r()},a,i=Bh();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(o);else{o();for(let u of s)u.dataSync();a=Promise.resolve({kernelMs:Bh()-i})}if(he().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{cMe(p,c.dtype,t)})}return{kernelName:t,outputs:s,inputs:n,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(t){let{kernelName:n,outputs:r,timeMs:s,inputs:o,extraInfo:a}=t;r.forEach(i=>{Promise.all([i.data(),s,a]).then(l=>{this.logger.logKernelProfile(n,i,l[0],l[1],o,l[2])})})}};function cMe(e,t,n){if(t!=="float32")return!1;for(let r=0;r0?m:""} `}}console.log(`%c${l} %c${i} %c${u}D ${p} %c${c} %c${d} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function Yj(e,t,n){let r={},s={};for(let l=0;lr[m.id]=!0),f=!0,s[u.id]=!0;break}if(f)break}}let o={};o[n.id]=!0;let a={};for(let l=e.length-1;l>=0;l--){let u=e[l],c=u.inputs;for(let p=0;p=0;s--){let o=t[s],a=[];if(o.outputs.forEach(l=>{let u=e[l.id];u!=null?a.push(u):a.push(null)}),o.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${o.kernelName}.`);let i=o.gradient(a);for(let l in o.inputs){if(!(l in i))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(i)}.`);let u=n(()=>i[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${o.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let c=o.inputs[l];if(!Wa(u.shape,c.shape))throw new Error(`Error in gradient for op ${o.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(e[c.id]==null)e[c.id]=u;else{let p=e[c.id];e[c.id]=r(p,u),p.dispose()}}}}var Qj=20,EA=3,W7=7;function eH(e,t,n,r){let s=yl(t),o=pMe(e,t,n,s),a=t.length,i=b3(e,t,n,s,o),l=["Tensor"];return r&&(l.push(` dtype: ${n}`),l.push(` rank: ${a}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(i.map(u=>" "+u).join(` `)),l.join(` `)}function pMe(e,t,n,r){let s=bn(t),o=r[r.length-1],a=new Array(o).fill(0),i=t.length,l=n==="complex64"?DA(e):e;if(i>1)for(let u=0;uQj){let g=EA*a,x=Array.from(e.slice(0,g)),y=Array.from(e.slice((i-EA)*a,i*a));return n==="complex64"&&(x=DA(x),y=DA(y)),["["+x.map((b,A)=>RA(b,s[A],n)).join(", ")+", ..., "+y.map((b,A)=>RA(b,s[i-EA+A],n)).join(", ")+"]"]}let m=n==="complex64"?DA(e):Array.from(e);return["["+m.map((g,x)=>RA(g,s[x],n)).join(", ")+"]"]}let u=t.slice(1),c=r.slice(1),p=r[0]*a,d=[];if(i>Qj){for(let m=0;m`Length of values '${s}' does not match the size inferred by the shape '${this.size}'.`)}if(n==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=r||N7(n,this.size),this.strides=yl(t)}set(t,...n){n.length===0&&(n=[0]),V(n.length===this.rank,()=>`The number of provided coordinates (${n.length}) must match the rank (${this.rank})`);let r=this.locToIndex(n);this.values[r]=t}get(...t){t.length===0&&(t=[0]);let n=0;for(let s of t){if(s<0||s>=this.shape[n]){let o=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(o)}n++}let r=t[t.length-1];for(let s=0;sxy(r))}catch(r){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return t}dataSync(){this.throwIfDisposed();let t=wl().readSync(this.dataId);if(this.dtype==="string")try{return t.map(n=>xy(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t}async bytes(){this.throwIfDisposed();let t=await wl().read(this.dataId);return this.dtype==="string"?t:new Uint8Array(t.buffer)}dispose(){this.isDisposed||(wl().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(t=!1){return yy.print(this,t)}clone(){return this.throwIfDisposed(),yy.clone(this)}toString(t=!1){let n=this.dataSync();return eH(n,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),yy.cast(this,t)}variable(t=!0,n,r){return this.throwIfDisposed(),wl().makeVariable(this,t,n,r)}};Object.defineProperty(Ot,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function Z(){return SA("Tensor",()=>Ot)}Z();var od=class extends Ot{constructor(t,n,r,s){super(t.shape,t.dtype,t.dataId,s);this.trainable=n,this.name=r}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!Wa(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);wl().disposeTensor(this),this.dataId=t.dataId,wl().incRef(this,null)}dispose(){wl().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(od,Symbol.hasInstance,{value:e=>e instanceof Ot&&e.assign!=null&&e.assign instanceof Function});var Ha={};dn(Ha,{assertTypesMatch:()=>hMe,getTensorsInContainer:()=>$A,isTensorInList:()=>mMe,makeTypesMatch:()=>_t});var G7;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(G7||(G7={}));var U7;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(U7||(U7={}));var j7;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(j7||(j7={}));var H7;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(H7||(H7={}));var q7;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(q7||(q7={}));var fMe={float32:H7,int32:U7,bool:j7,complex64:q7};function Or(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return fMe[e][t]}function Vh(e){return Or(e,"int32")}function _t(e,t){if(e.dtype===t.dtype)return[e,t];let n=Or(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function hMe(e,t){V(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function mMe(e,t){return t.some(n=>n.id===e.id)}function $A(e){let t=[],n=new Set;return oH(e,t,n),t}function oH(e,t,n){if(e==null)return;if(e instanceof Ot){t.push(e);return}if(!gMe(e))return;let r=e;for(let s in r){let o=r[s];n.has(o)||(n.add(o),oH(o,t,n))}}function gMe(e){return Array.isArray(e)||typeof e=="object"}function K7(e){return e.kernelName!=null}var X7=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},Wh=class{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new X7}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let n=0;n{n.setupFunc!=null&&n.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){M7(t).forEach(r=>{r.disposeFunc!=null&&r.disposeFunc(this.registry[t])})}initializeBackend(t){let n=this.registryFactory[t];if(n==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let r=n.factory();if(r&&!(r instanceof up)&&typeof r.then=="function"){let s=++this.pendingBackendInitId,o=r.then(a=>s(sthis.registryFactory[n].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let n=0;nthis.startScope(r),()=>this.endScope(s),()=>(s=n(),s instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),s))}scopedRun(t,n,r){t();try{let s=r();return n(),s}catch(s){throw n(),s}}nextTensorId(){return Wh.nextTensorId++}nextVariableId(){return Wh.nextVariableId++}clone(t){let n=z.runKernel(Al,{x:t}),r={x:t},s=a=>({x:()=>{let i="float32",l={x:a},u={dtype:i};return z.runKernel(bl,l,u)}}),o=[];return this.addTapeNode(this.state.activeScope.name,r,[n],s,o,{}),n}runKernel(t,n,r){if(this.backendName==null&&this.backend,!(O7(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:n,attrs:r})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,n,r){let s=this.backend.numDataIds(),o=0;r.forEach(l=>{o+=l.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=s-n-o-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${t}'`)}runKernelFunc(t){let n,r=[],s=this.isTapeOn(),o=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let l,u=K7(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(K7(t)){let{kernelName:h,inputs:m,attrs:g}=t;this.backendName==null&&this.backend;let x=O7(h,this.backendName);V(x!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();l=x.kernelFunc({inputs:m,attrs:g,backend:this.backend});let b=Array.isArray(l)?l:[l];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,y,b);let A=b.map(v=>{if(v.rank!=null)return v;let{dataId:w,shape:k,dtype:I}=v;return this.makeTensorFromDataId(w,k,I)});if(s){let v=this.getTensorsForGradient(h,m,A);r=this.saveTensorsForBackwardMode(v)}return A}}else{let{forwardFunc:h}=t,m=g=>{!s||(r=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();l=this.tidy(()=>h(this.backend,m));let x=Array.isArray(l)?l:[l];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:c,attrs:p}=t,d=K7(t)?null:t.backwardsFunc,f;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?n=i():(f=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(f),n=f.outputs)}),s&&this.addTapeNode(u,c,n,d,r,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-o,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(h=>c[h]!=null?c[h].shape:null),outputShapes:n.map(h=>h.shape),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(l)?n:n[0]}saveTensorsForBackwardMode(t){return t.map(r=>this.keep(this.clone(r)))}getTensorsForGradient(t,n,r){let s=P7(t);if(s!=null){let o=s.inputsToSave||[],a=s.outputsToSave||[],i;s.saveAllInputs?(V(Array.isArray(n),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(n).map(u=>n[u])):i=o.map(u=>n[u]);let l=r.filter((u,c)=>a[c]);return i.concat(l)}return[]}makeTensor(t,n,r,s){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");r=r||"float32",s=s||this.backend;let o=t;r==="string"&&px(t[0])&&(o=t.map(l=>gy(l)));let a=s.write(o,n,r),i=new Ot(n,r,a,this.nextTensorId());if(this.trackTensor(i,s),r==="string"){let l=this.state.tensorInfo.get(a),u=E7(o);this.state.numBytes+=u-l.bytes,l.bytes=u}return i}makeTensorFromDataId(t,n,r,s){r=r||"float32";let o=new Ot(n,r,t,this.nextTensorId());return this.trackTensor(o,s),o}makeVariable(t,n=!0,r,s){r=r||this.nextVariableId().toString(),s!=null&&s!==t.dtype&&(t=t.cast(s));let o=new od(t,n,r,this.nextTensorId());if(this.state.registeredVariables[o.name]!=null)throw new Error(`Variable with name ${o.name} was already registered`);return this.state.registeredVariables[o.name]=o,this.incRef(o,this.backend),o}trackTensor(t,n){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let r=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(r=t.size*p3(t.dtype)),this.state.numBytes+=r,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:n||this.backend,dtype:t.dtype,shape:t.shape,bytes:r})),t instanceof od||this.track(t)}incRef(t,n){this.trackTensor(t,n),this.backend.incRef(t.dataId)}removeDataId(t,n){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===n&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let n=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=n.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let r=t.size*p3(t.dtype);this.state.numBytes-=r}n.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,n.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let n=this.state.registeredVariables[t];this.disposeVariable(n)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let n=this.state.numBytes,r=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(s=>s.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-n,this.state.activeProfile.newTensors=this.state.numTensors-r;for(let s of this.state.activeProfile.kernels)s.kernelTimeMs=await s.kernelTimeMs,s.extraInfo=await s.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(t,n,r,s,o,a){let i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:n,outputs:r,saved:o},l=P7(t);l!=null&&(s=l.gradFunc),s!=null&&(i.gradient=u=>(u=u.map((c,p)=>{if(c==null){let d=r[p],f=mx(d.size,d.dtype);return this.makeTensor(f,d.shape,d.dtype)}return c}),s(u.length>1?u:u[0],o,a))),this.state.activeTape.push(i)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let n={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(n.name=t),this.state.scopeStack.push(n),this.state.activeScope=n}endScope(t){let n=$A(t),r=new Set(n.map(o=>o.id));for(let o=0;o{!o.kept&&o.scopeId===s.id&&this.track(o)})}gradients(t,n,r,s=!1){if(V(n.length>0,()=>"gradients() received an empty list of xs."),r!=null&&r.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${r.dtype}'`);let o=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));V(o instanceof Ot,()=>"The result y returned by f() must be a tensor.");let a=Yj(this.state.activeTape,n,o);if(!s&&a.length===0&&n.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[o.id]=r==null?xMe(o.shape):r,Jj(i,a,u=>this.tidy(u),yMe);let l=n.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:o,grads:l}})}customGrad(t){return V(fx(t),()=>"The f passed in customGrad(f) must be a function."),(...n)=>{V(n.every(i=>i instanceof Ot),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let r,s={};n.forEach((i,l)=>{s[l]=i});let o=(i,l)=>(r=t(...n,l),V(r.value instanceof Ot,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),V(fx(r.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),r.value),a=(i,l)=>{let u=r.gradFunc(i,l),c=Array.isArray(u)?u:[u];V(c.length===n.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),V(c.every(d=>d instanceof Ot),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return c.forEach((d,f)=>{p[f]=()=>d}),p};return this.runKernelFunc({forwardFunc:o,backwardsFunc:a,inputs:s})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}async time(t){let n=Bh(),r=await this.backend.time(t);return r.wallMs=Bh()-n,r}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new X7;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Wh.nextTensorId=0;Wh.nextVariableId=0;function xMe(e){let t=kA(bn(e),"float32");return z.makeTensor(t,e,"float32")}function Z7(){let e=$7();if(e._tfengine==null){let t=new d3(e);e._tfengine=new Wh(t)}return _j(e._tfengine.ENV),nH(()=>e._tfengine),e._tfengine}var z=Z7();function yMe(e,t){let n={a:e,b:t};return z.runKernel(Ri,n)}var Gh={};dn(Gh,{isBrowser:()=>Y7,isMobile:()=>AMe});function bMe(){return typeof navigator!="undefined"&&navigator!=null}function AMe(e){if(e||bMe()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let n=e;return n.userAgentData&&n.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function Y7(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var $i=he();$i.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});$i.registerFlag("IS_BROWSER",()=>Y7());$i.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");$i.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));$i.registerFlag("PROD",()=>!1);$i.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>$i.getBool("DEBUG"));$i.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);$i.registerFlag("IS_TEST",()=>!1);$i.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);$i.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);function Uh(e,t){let n=e;if(Jo(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||Jo(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&he().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&aH(e,r,[]),r}function aH(e,t,n){if(n=n||[],!Array.isArray(e)&&!Jo(e)){V(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}V(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),V(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let r=t.slice(1);for(let s=0;s=0&&(s=r),iH(r,s,t,n),e==null||!Jo(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let l=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${l}'`)}let o=Uh(e,s);!Jo(e)&&!Array.isArray(e)&&(e=[e]);let i=s!=="string"?my(e,s):cp(e,[],!0);return z.makeTensor(i,o,s)}function A3(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((o,a)=>O(o,`${t}[${a}]`,n,r))}var vMe="__op";function L(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+vMe;let s=(...o)=>{z.startScope(n);try{let a=r(...o);return CA(a)&&console.error("Cannot return a Promise inside of tidy."),z.endScope(a),a}catch(a){throw z.endScope(null),a}};return Object.defineProperty(s,"name",{value:n,configurable:!0}),s}function wMe(e,t){let n=O(e,"real","complex"),r=O(t,"imag","complex");c3(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let s={real:n,imag:r};return z.runKernel(vx,s)}var ta=L({complex_:wMe});function ad(e,t,n,r){if(r==null&&(r=dx(e)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!Jo(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){IA(t);let s=bn(t),o=bn(n);V(s===o,()=>`Based on the provided shape, [${t}], the tensor should have ${s} values but has ${o}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!Jo(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?my(e,r):cp(e,[],!0),z.makeTensor(e,t,r)}function Zs(e,t,n){let r=Uh(e,n);return ad(e,t,r,n)}var FA={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var v3=4;async function lH(e,t){let n=[],r=[],s=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);for(let a=0;a{let d=await l.bytes(),f=d.reduce((g,x)=>g+x.length,0)+v3*d.length,h=new Uint8Array(f),m=0;for(let g=0;g{if(t+=o.byteLength,n.push(o.byteLength===o.buffer.byteLength?o:new o.constructor(o)),!(o instanceof Float32Array||o instanceof Int32Array||o instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${o.constructor.name}`)});let r=new Uint8Array(t),s=0;return n.forEach(o=>{r.set(new Uint8Array(o.buffer),s),s+=o.byteLength}),r.buffer}var J7=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function uH(e){return J7?Buffer.byteLength(e):new Blob([e]).size}function cH(e){if(J7)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,s=t.length;r{t+=s.byteLength});let n=new Uint8Array(t),r=0;return e.forEach(s=>{n.set(new Uint8Array(s),r),r+=s.byteLength}),n.buffer}function Q7(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function k3(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}async function Ay(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){let[r,s]=await t(e.weightsManifest);n.weightSpecs=r,n.weightData=s}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),n}function kl(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:uH(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:uH(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function IMe(){let e=n=>{let r=n<<13,s=0;for(;(r&8388608)==0;)s-=8388608,r<<=1;return r&=~8388608,s+=947912704,r|s},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function CMe(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function SMe(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function NMe(){let e=IMe(),t=CMe(),n=SMe();return r=>{let s=new ArrayBuffer(4*r.length),o=new Uint32Array(s);for(let a=0;a>10]+(i&1023)]+t[i>>10];o[a]=l}return new Float32Array(s)}}var Cn=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Cn.instance==null&&(Cn.instance=new Cn),Cn.instance}static registerSaveRouter(t){Cn.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Cn.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Cn.getHandlers(t,"save")}static getLoadHandlers(t,n){return Cn.getHandlers(t,"load",n)}static getHandlers(t,n,r){let s=[];return(n==="load"?Cn.getInstance().loadRouters:Cn.getInstance().saveRouters).forEach(a=>{let i=a(t,r);i!==null&&s.push(i)}),s}},dH=e=>Cn.registerSaveRouter(e),fH=e=>Cn.registerLoadRouter(e),hH=e=>Cn.getSaveHandlers(e),mH=(e,t)=>Cn.getLoadHandlers(e,t);var eD="tensorflowjs",tD=1,jh="models_store",id="model_info_store";function gH(){if(!he().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function nD(e){let t=e.result;t.createObjectStore(jh,{keyPath:"modelPath"}),t.createObjectStore(id,{keyPath:"modelPath"})}var Hu=class{constructor(t){if(this.indexedDB=gH(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,n){return new Promise((r,s)=>{let o=this.indexedDB.open(eD,tD);o.onupgradeneeded=()=>nD(o),o.onsuccess=()=>{let a=o.result;if(n==null){let i=a.transaction(jh,"readonly"),u=i.objectStore(jh).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),s(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));r(u.result.modelArtifacts)},u.onerror=c=>(a.close(),s(u.error)),i.oncomplete=()=>a.close()}else{let i=kl(n),l=a.transaction(id,"readwrite"),u=l.objectStore(id),c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;c.onsuccess=()=>{p=a.transaction(jh,"readwrite");let f=p.objectStore(jh).put({modelPath:this.modelPath,modelArtifacts:n,modelArtifactsInfo:i});f.onsuccess=()=>r({modelArtifactsInfo:i}),f.onerror=h=>{u=l.objectStore(id);let m=u.delete(this.modelPath);m.onsuccess=()=>(a.close(),s(f.error)),m.onerror=g=>(a.close(),s(f.error))}},c.onerror=d=>(a.close(),s(c.error)),l.oncomplete=()=>{p==null?a.close():p.oncomplete=()=>a.close()}}},o.onerror=a=>s(o.error)})}};Hu.URL_SCHEME="indexeddb://";var xH=e=>he().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Hu.URL_SCHEME)?TMe(e.slice(Hu.URL_SCHEME.length)):null;Cn.registerSaveRouter(xH);Cn.registerLoadRouter(xH);function TMe(e){return new Hu(e)}function _Me(e){return e.startsWith(Hu.URL_SCHEME)?e.slice(Hu.URL_SCHEME.length):e}var rD=class{constructor(){this.indexedDB=gH()}async listModels(){return new Promise((t,n)=>{let r=this.indexedDB.open(eD,tD);r.onupgradeneeded=()=>nD(r),r.onsuccess=()=>{let s=r.result,o=s.transaction(id,"readonly"),i=o.objectStore(id).getAll();i.onsuccess=()=>{let l={};for(let u of i.result)l[u.modelPath]=u.modelArtifactsInfo;t(l)},i.onerror=l=>(s.close(),n(i.error)),o.oncomplete=()=>s.close()},r.onerror=s=>n(r.error)})}async removeModel(t){return t=_Me(t),new Promise((n,r)=>{let s=this.indexedDB.open(eD,tD);s.onupgradeneeded=()=>nD(s),s.onsuccess=()=>{let o=s.result,a=o.transaction(id,"readwrite"),i=a.objectStore(id),l=i.get(t),u;l.onsuccess=()=>{if(l.result==null)return o.close(),r(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=i.delete(t),p=()=>{u=o.transaction(jh,"readwrite");let f=u.objectStore(jh).delete(t);f.onsuccess=()=>n(l.result.modelArtifactsInfo),f.onerror=h=>r(l.error)};c.onsuccess=p,c.onerror=d=>(p(),o.close(),r(l.error))}},l.onerror=c=>(o.close(),r(l.error)),a.oncomplete=()=>{u==null?o.close():u.oncomplete=()=>o.close()}},s.onerror=o=>r(s.error)})}};var qu="/",vy="tensorflowjs_models",yH="info",EMe="model_topology",RMe="weight_specs",DMe="weight_data",$Me="model_metadata";function bH(e){return{info:[vy,e,yH].join(qu),topology:[vy,e,EMe].join(qu),weightSpecs:[vy,e,RMe].join(qu),weightData:[vy,e,DMe].join(qu),modelMetadata:[vy,e,$Me].join(qu)}}function AH(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function FMe(e){let t=e.split(qu);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(qu)}function OMe(e){return e.startsWith(Ku.URL_SCHEME)?e.slice(Ku.URL_SCHEME.length):e}var Ku=class{constructor(t){if(!he().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,t==null||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=bH(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let n=JSON.stringify(t.modelTopology),r=JSON.stringify(t.weightSpecs),s=kl(t);try{this.LS.setItem(this.keys.info,JSON.stringify(s)),this.LS.setItem(this.keys.topology,n),this.LS.setItem(this.keys.weightSpecs,r),this.LS.setItem(this.keys.weightData,cH(t.weightData));let o={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(o)),{modelArtifactsInfo:s}}catch(o){throw AH(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${s.modelTopologyBytes}, weightSpecsBytes=${s.weightSpecsBytes}, weightDataBytes=${s.weightDataBytes}.`)}}}async load(){let t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let n={},r=JSON.parse(this.LS.getItem(this.keys.topology));if(r==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);n.modelTopology=r;let s=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(s==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);n.weightSpecs=s;let o=this.LS.getItem(this.keys.modelMetadata);if(o!=null){let i=JSON.parse(o);n.format=i.format,n.generatedBy=i.generatedBy,n.convertedBy=i.convertedBy,i.signature!=null&&(n.signature=i.signature),i.userDefinedMetadata!=null&&(n.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(n.modelInitializer=i.modelInitializer),i.trainingConfig!=null&&(n.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return n.weightData=pH(a),n}};Ku.URL_SCHEME="localstorage://";var vH=e=>he().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ku.URL_SCHEME)?PMe(e.slice(Ku.URL_SCHEME.length)):null;Cn.registerSaveRouter(vH);Cn.registerLoadRouter(vH);function PMe(e){return new Ku(e)}var sD=class{constructor(){V(he().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),V(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let t={},n=vy+qu,r=qu+yH;for(let s=0;s"scheme must not be undefined or null."),t.endsWith(wy)&&(t=t.slice(0,t.indexOf(wy))),V(t.length>0,()=>"scheme must not be an empty string.");let r=Ys.getInstance();V(r.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),r.managers[t]=n}static getManager(t){let n=this.getInstance().managers[t];if(n==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return n}static getSchemes(){return Object.keys(this.getInstance().managers)}};function I3(e){if(e.indexOf(wy)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Ys.getSchemes().join(",")}`);return{scheme:e.split(wy)[0],path:e.split(wy)[1]}}async function wH(e,t,n=!1){V(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=Cn.getLoadHandlers(e);V(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),V(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let s=r[0],o=Cn.getSaveHandlers(t);V(o.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),V(o.length<2,()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`);let a=o[0],i=I3(e).scheme,l=I3(e).path,u=i===I3(e).scheme,c=await s.load();n&&u&&await Ys.getManager(i).removeModel(l);let p=await a.save(c);return n&&!u&&await Ys.getManager(i).removeModel(l),p.modelArtifactsInfo}async function kH(){let e=Ys.getSchemes(),t={};for(let n of e){let r=await Ys.getManager(n).listModels();for(let s in r){let o=n+wy+s;t[o]=r[s]}}return t}async function IH(e){let t=I3(e);return Ys.getManager(t.scheme).removeModel(t.path)}async function CH(e,t){return wH(e,t,!1)}async function SH(e,t){return wH(e,t,!0)}var NH=class{fetch(t,n){return fetch(t,n)}now(){return performance.now()}encode(t,n){if(n!=="utf-8"&&n!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${n}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,n){return new TextDecoder(n).decode(t)}};if(he().get("IS_BROWSER")){he().setPlatform("browser",new NH);try{Ys.registerManager(Ku.URL_SCHEME,new sD)}catch(e){}try{Ys.registerManager(Hu.URL_SCHEME,new rD)}catch(e){}}var MMe={importFetch:()=>TH()},oD;var _H=class{constructor(){this.util=_c("util"),this.textEncoder=new this.util.TextEncoder}fetch(t,n){return he().global.fetch!=null?he().global.fetch(t,n):(oD==null&&(oD=MMe.importFetch()),oD(t,n))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,n){if(n!=="utf-8"&&n!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${n}`);return this.textEncoder.encode(t)}decode(t,n){return t.length===0?"":new this.util.TextDecoder(n).decode(t)}};he().get("IS_NODE")&&he().setPlatform("node",new _H);function et(e,t="float32",n){return t=t||"float32",IA(e),new sn(e,t,n)}function zMe(e,t){let n=O(e,"x","cast");if(!_7(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let r={x:n},s={dtype:t};return z.runKernel(bl,r,s)}var we=L({cast_:zMe});function LMe(e){let n={x:O(e,"x","clone","string_or_numeric")};return z.runKernel(Al,n)}var So=L({clone_:LMe});function EH(e,t=!1){console.log(e.toString(t))}Z7();var BMe={buffer:et,cast:we,clone:So,print:EH};rH(BMe);var na={};dn(na,{browserFiles:()=>$H,browserHTTPRequest:()=>PH,concatenateArrayBuffers:()=>by,copyModel:()=>CH,decodeWeights:()=>w3,encodeWeights:()=>lH,fromMemory:()=>zH,getLoadHandlers:()=>mH,getModelArtifactsForJSON:()=>Ay,getModelArtifactsInfoForJSON:()=>kl,getSaveHandlers:()=>hH,http:()=>N3,isHTTPScheme:()=>S3,listModels:()=>kH,loadWeights:()=>FH,moveModel:()=>SH,registerLoadRouter:()=>fH,registerSaveRouter:()=>dH,removeModel:()=>IH,weightsLoaderFactory:()=>lD,withSaveHandler:()=>LH});var VMe="model",WMe=".json",GMe=".weights.bin";function RH(e){return new Promise(t=>setTimeout(t)).then(e)}var ld=class{constructor(t){if(!he().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(ld.URL_SCHEME)&&(t=t.slice(ld.URL_SCHEME.length)),(t==null||t.length===0)&&(t=VMe),this.modelJsonFileName=t+WMe,this.weightDataFileName=t+GMe}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let n=window.URL.createObjectURL(new Blob([t.weightData],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let r=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=k3(t,r),o=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),a=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=o,await RH(()=>a.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=n,await RH(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:kl(t)}}}};ld.URL_SCHEME="downloads://";var DH=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,n)=>{let r=new FileReader;r.onload=s=>{let o=JSON.parse(s.target.result),a=o.modelTopology;if(a==null){n(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(o.weightsManifest==null){n(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:a});return}let l=Ay(o,u=>this.loadWeights(u));t(l)},r.onerror=s=>n(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),r.readAsText(this.jsonFile)})}loadWeights(t){let n=[],r=[];for(let a of t)n.push(...a.weights),r.push(...a.paths);let s=this.checkManifestAndWeightFiles(t),o=r.map(a=>this.loadWeightsFile(a,s[a]));return Promise.all(o).then(a=>[n,by(a)])}loadWeightsFile(t,n){return new Promise((r,s)=>{let o=new FileReader;o.onload=a=>{let i=a.target.result;r(i)},o.onerror=a=>s(`Failed to weights data from file of path '${t}'.`),o.readAsArrayBuffer(n)})}checkManifestAndWeightFiles(t){let n=[],r=this.weightsFiles.map(o=>Q7(o.name)),s={};for(let o of t)o.paths.forEach(a=>{let i=Q7(a);if(n.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(n.push(i),r.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);s[a]=this.weightsFiles[r.indexOf(i)]});if(n.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${n.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return s}},UMe=e=>he().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ld.URL_SCHEME)?jMe(e.slice(ld.URL_SCHEME.length)):null;Cn.registerSaveRouter(UMe);function jMe(e="model"){return new ld(e)}function $H(e){return new DH(e)}function aD(e,t,n,r){a(e),n=n==null?0:n,r=r==null?1:r,i(n,r);let s=0,o=l=>(l.then(u=>{let c=n+ ++s/e.length*(r-n);return t(c),u}),l);function a(l){V(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function i(l,u){V(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),V(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),V(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(o))}async function iD(e,t){t==null&&(t={});let n=t.fetchFunc==null?he().platform.fetch:t.fetchFunc,r=e.map(p=>n(p,t.requestInit,{isBinary:!0})),s=0,o=.5,i=(t.onProgress==null?await Promise.all(r):await aD(r,t.onProgress,s,o)).map(p=>p.arrayBuffer()),l=.5,u=1;return t.onProgress==null?await Promise.all(i):await aD(i,t.onProgress,l,u)}async function FH(e,t="",n,r){return lD(a=>iD(a,{requestInit:r}))(e,t,n)}function lD(e){return async(t,n="",r)=>{let s=t.map(()=>!1),o={},a=r!=null?r.map(()=>!1):[],i=[];if(t.forEach((f,h)=>{let m=0;f.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,y=FA[x]*bn(g.shape),b=()=>{s[h]=!0,o[h]==null&&(o[h]=[]),o[h].push({manifestEntry:g,groupOffset:m,sizeBytes:y})};r!=null?r.forEach((A,v)=>{A===g.name&&(b(),a[v]=!0)}):b(),i.push(g.name),m+=y})}),!a.every(f=>f)){let f=r.filter((h,m)=>!a[m]);throw new Error(`Could not find weights in manifest with names: ${f.join(", ")}. Manifest JSON has weights with names: ${i.join(", ")}.`)}let l=s.reduce((f,h,m)=>(h&&f.push(m),f),[]),u=[];l.forEach(f=>{t[f].paths.forEach(h=>{let m=n+(n.endsWith("/")?"":"/")+h;u.push(m)})});let c=await e(u),p={},d=0;return l.forEach(f=>{let h=t[f].paths.length,m=0;for(let A=0;A{let v=g.slice(A.groupOffset,A.groupOffset+A.sizeBytes),w=w3(v,[A.manifestEntry]);for(let k in w)p[k]=w[k]}),d+=h}),p}}var HMe="application/octet-stream",qMe="application/json",C3=class{constructor(t,n){if(this.DEFAULT_METHOD="POST",n==null&&(n={}),this.weightPathPrefix=n.weightPathPrefix,this.onProgress=n.onProgress,this.weightUrlConverter=n.weightUrlConverter,n.fetchFunc!=null?(V(typeof n.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=n.fetchFunc):this.fetch=he().platform.fetch,V(t!=null&&t.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(t)&&V(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,n.requestInit!=null&&n.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=n.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let n=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);n.body=new FormData;let r=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],s=k3(t,r);n.body.append("model.json",new Blob([JSON.stringify(s)],{type:qMe}),"model.json"),t.weightData!=null&&n.body.append("model.weights.bin",new Blob([t.weightData],{type:HMe}),"model.weights.bin");let o=await this.fetch(this.path,n);if(o.ok)return{modelArtifactsInfo:kl(t),responses:[o]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${o.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let n;try{n=await t.json()}catch(o){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?a+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":a+=" Please make sure the server is serving valid JSON for this request.",new Error(a)}let r=n.modelTopology,s=n.weightsManifest;if(r==null&&s==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Ay(n,o=>this.loadWeights(o))}async loadWeights(t){let n=Array.isArray(this.path)?this.path[1]:this.path,[r,s]=KMe(n),o=this.weightPathPrefix||r,a=[];for(let c of t)a.push(...c.weights);let i=[],l=[];for(let c of t)for(let p of c.paths)this.weightUrlConverter!=null?l.push(this.weightUrlConverter(p)):i.push(o+p+s);this.weightUrlConverter&&i.push(...await Promise.all(l));let u=await iD(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,by(u)]}};C3.URL_SCHEME_REGEX=/^https?:\/\//;function KMe(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),s=n>t?e.substring(n):"";return[r+"/",s]}function S3(e){return e.match(C3.URL_SCHEME_REGEX)!=null}var OH=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>S3(r)):n=S3(e),n)return N3(e,t)}return null};Cn.registerSaveRouter(OH);Cn.registerLoadRouter(OH);function N3(e,t){return new C3(e,t)}function PH(e,t){return N3(e,t)}var T3=class{constructor(t){this.modelArtifacts=t}async load(){return this.modelArtifacts}},MH=class{constructor(t){this.saveHandler=t}async save(t){return this.saveHandler(t)}};function zH(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new T3(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new T3({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new T3({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function LH(e){return new MH(e)}function XMe(e,t,n=!1,r=!1){let s=O(e,"a","matMul"),o=O(t,"b","matMul");[s,o]=_t(s,o);let a={a:s,b:o},i={transposeA:n,transposeB:r};return z.runKernel(xp,a,i)}var Bt=L({matMul_:XMe});function ZMe(e,t,n=1,r=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let o={indices:O(e,"indices","oneHot","int32")},a={depth:t,onValue:n,offValue:r};return z.runKernel(Bp,o,a)}var ud=L({oneHot_:ZMe});function YMe(e,t){let n=O(e,"x","transpose");if(t==null&&(t=n.shape.map((o,a)=>a).reverse()),V(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(o=>{V(o>=0&&o`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let r={x:n},s={perm:t};return z.runKernel(ed,r,s)}var St=L({transpose_:YMe});function JMe(e,t){let n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(bn(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let s=t.shape,o=s[s.length-1],a=1;for(let p=0;pp/u),1].slice(0,o);return[l,a,u,c]}function BH(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,s=t.rank>1?t.rank-1:1,o=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${s}.`;if(n.rank1?t.shape[r-1]:1,o=n.length,a=1;for(let p=s;peze,computeFlatOffset:()=>nze,computeOutShape:()=>VH,getNormalizedAxes:()=>jH,isSliceContinous:()=>tze,maskToAxes:()=>_3,parseSliceParams:()=>cD,sliceInfo:()=>rze,startForAxis:()=>XH,startIndicesWithElidedDims:()=>HH,stopForAxis:()=>ZH,stopIndicesWithElidedDims:()=>qH,stridesForAxis:()=>KH,stridesWithElidedDims:()=>WH});function eze(e,t,n){let r=e.shape.length;V(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),V(r===n.length,()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`);for(let s=0;s`Error in slice${r}D: begin[${s}] + size[${s}] (${t[s]+n[s]}) would overflow input.shape[${s}] (${e.shape[s]})`)}function _3(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function VH(e,t,n){let r=[];for(let s=0;s0){let f=t[0],h=n+1;c=HH(a,f,h,r,e),p=qH(i,f,h,s,e),d=WH(o,f,h,e)}else for(let f=0;f-1)o[i]=0;else{let l=GH(t,n,i),u=r[l];e&1<-1)o[i]=Number.MAX_SAFE_INTEGER;else{let l=GH(t,n,i),u=r[l];e&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let l=r[s];return a<0&&(a+=l),a=cx(0,a,l-1),a}function ZH(e,t,n,r,s,o){let a=t[s],i=n[s]||1;(e&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let l=r[s];return a<0&&(a+=l),i>0?a=cx(0,a,l):a=cx(-1,a,l-1),a}function tze(e,t,n){let r=n.length;for(let s=0;s1){r=s;break}for(let s=r+1;s0||n[s]!==e[s])return!1;return!0}function nze(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r{V(a!==-1,()=>"slice() does not support negative begin indexing.")});let o;return n==null?o=new Array(s).fill(-1):typeof n=="number"?o=[n,...new Array(s-1).fill(-1)]:n.lengtha>=0?a:(V(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),e.shape[i]-r[i])),[r,o]}function rze(e,t,n,r,s,o,a,i,l){let u=t.slice(),c=n.slice(),p=r;r==null&&(p=new Array(u.length));let d=_3(a);if(d.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(a!==0&&i!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(a!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=e.length-u.length,h=_3(i),m=e.slice();h.forEach(k=>{u[k]=0,c[k]=1,m.splice(k,0,1)});let{begin:g,end:x,strides:y}=jH(m,d,f,u,c,p,s,o,a);u=g,c=x,p=y;let b=_3(l);b.forEach(k=>{c[k]=u[k]+1,p[k]=1});let A=VH(u,c,p),v=A.filter((k,I)=>b.indexOf(I)===-1);return{nonStrided:p.every(k=>k===1),$begin:u,$end:c,$strides:p,size:A,newShape:m,outShape:v}}var ke={};dn(ke,{Serializable:()=>E3,SerializationMap:()=>Xu,registerClass:()=>No});var E3=class{getClassName(){return this.constructor.className}static fromConfig(t,n){return new t(n)}},Xu=class{constructor(){this.classNameMap={}}static getMap(){return Xu.instance==null&&(Xu.instance=new Xu),Xu.instance}static register(t){Xu.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function No(e){V(e.className!=null,()=>"Class being registered does not have the static className property defined."),V(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),V(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Xu.register(e)}function sze(e){he().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}sH(sze);function Zu(){return z}function OA(){return z.memory()}function le(e,t){return z.tidy(e,t)}function ut(e){$A(e).forEach(n=>n.dispose())}function $n(e){return z.keep(e)}function R3(e,t,n=1){return z.registerBackend(e,t,n)}function YH(){return z.backend}function oze(e,t){let n=O(e,"a","add"),r=O(t,"b","add");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(Ri,s)}var Ie=L({add_:oze});function aze(e,t){let n=O(e,"a","floorDiv"),r=O(t,"b","floorDiv");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(xu,s)}var Hh=L({floorDiv_:aze});function ize(e,t){let n=O(e,"a","div"),r=O(t,"b","div");if([n,r]=_t(n,r),n.dtype==="int32"&&r.dtype==="int32")return Hh(n,r);let s={a:n,b:r},o={};return z.runKernel(pu,s,o)}var Pe=L({div_:ize});function lze(e,t){let n=O(e,"a","mul"),r=O(t,"b","mul");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(Nu,s)}var Y=L({mul_:lze});function uze(e){let t=O(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return z.runKernel(bp,n)}else{let n={x:t};return z.runKernel(pp,n)}}var sr=L({abs_:uze});function cze(e){let n={x:O(e,"x","acos")};return z.runKernel(eu,n)}var PA=L({acos_:cze});function pze(e){let n={x:O(e,"x","acosh")};return z.runKernel(tu,n)}var MA=L({acosh_:pze});function dze(e){V(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),V(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((s,o)=>O(s,`tensors${o}`,"addN")),n=t[0];t.forEach(s=>{if(s.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(s=>{if(!Wa(s.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return z.runKernel(dp,r)}var pD=L({addN_:dze});function fze(e,t=null,n=!1){let s={x:O(e,"x","all","bool")},o={axis:t,keepDims:n};return z.runKernel(gx,s,o)}var qh=L({all_:fze});function hze(e,t=null,n=!1){let s={x:O(e,"x","any","bool")},o={axis:t,keepDims:n};return z.runKernel(xx,s,o)}var cd=L({any_:hze});function mze(e,t=0){let r={x:O(e,"x","argMax")},s={axis:t};return z.runKernel(fp,r,s)}var Fi=L({argMax_:mze});function gze(e,t=0){let r={x:O(e,"x","argMin")},s={axis:t};return z.runKernel(hp,r,s)}var zA=L({argMin_:gze});function xze(e){let n={x:O(e,"x","asin")};return z.runKernel(nu,n)}var LA=L({asin_:xze});function yze(e){let n={x:O(e,"x","asinh")};return z.runKernel(ru,n)}var BA=L({asinh_:yze});function bze(e){let n={x:O(e,"x","atan")};return z.runKernel(su,n)}var VA=L({atan_:bze});function Aze(e,t){let n=O(e,"a","atan2"),r=O(t,"b","atan2");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(au,s)}var WA=L({atan2_:Aze});function vze(e){let n={x:O(e,"x","atanh")};return z.runKernel(ou,n)}var GA=L({atanh_:vze});function wze(e,t,n,r,s="NHWC",o){let a=e[3],i=[...t,a],l=QH(s);return Kh(e,i,n,o,r,null,null,l)}function dD(e,t,n,r,s,o,a="channelsLast"){let[i,l]=D3(t),u;if(a==="channelsLast")u=[i,l,e[3],e[3]];else if(a==="channelsFirst")u=[i,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${a}`);return Kh(e,u,n,r,s,o,!1,a)}function kze(e,t,n,r,s,o,a="NDHWC"){let[i,l,u]=hD(t),c,p;if(a==="NDHWC")p="channelsLast",c=[i,l,u,e[4],e[4]];else if(a==="NCDHW")p="channelsFirst",c=[i,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${a}`);return JH(e,c,n,r,s,!1,p,o)}function Kh(e,t,n,r,s,o,a=!1,i="channelsLast"){let[l,u,c,p]=[-1,-1,-1,-1];if(i==="channelsLast")[l,u,c,p]=e;else if(i==="channelsFirst")[l,p,u,c]=e;else throw new Error(`Unknown dataFormat ${i}`);let[d,f,,h]=t,[m,g]=D3(n),[x,y]=D3(r),b=ky(d,x),A=ky(f,y),{padInfo:v,outHeight:w,outWidth:k}=Sze(s,u,c,m,g,b,A,o,i),I=a?h*p:h,N;return i==="channelsFirst"?N=[l,I,w,k]:i==="channelsLast"&&(N=[l,w,k,I]),{batchSize:l,dataFormat:i,inHeight:u,inWidth:c,inChannels:p,outHeight:w,outWidth:k,outChannels:I,padInfo:v,strideHeight:m,strideWidth:g,filterHeight:d,filterWidth:f,effectiveFilterHeight:b,effectiveFilterWidth:A,dilationHeight:x,dilationWidth:y,inShape:e,outShape:N,filterShape:t}}function JH(e,t,n,r,s,o=!1,a="channelsLast",i){let[l,u,c,p,d]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[l,u,c,p,d]=e;else if(a==="channelsFirst")[l,d,u,c,p]=e;else throw new Error(`Unknown dataFormat ${a}`);let[f,h,m,,g]=t,[x,y,b]=hD(n),[A,v,w]=hD(r),k=ky(f,A),I=ky(h,v),N=ky(m,w),{padInfo:T,outDepth:_,outHeight:R,outWidth:S}=Nze(s,u,c,p,x,y,b,k,I,N,i),F=o?g*d:g,B;return a==="channelsFirst"?B=[l,F,_,R,S]:a==="channelsLast"&&(B=[l,_,R,S,F]),{batchSize:l,dataFormat:a,inDepth:u,inHeight:c,inWidth:p,inChannels:d,outDepth:_,outHeight:R,outWidth:S,outChannels:F,padInfo:T,strideDepth:x,strideHeight:y,strideWidth:b,filterDepth:f,filterHeight:h,filterWidth:m,effectiveFilterDepth:k,effectiveFilterHeight:I,effectiveFilterWidth:N,dilationDepth:A,dilationHeight:v,dilationWidth:w,inShape:e,outShape:B,filterShape:t}}function Ize(e,t,n,r,s){r==null&&(r=fD(e,t,n));let o=e[0],a=e[1],i=Xh((o-t+2*r)/n+1,s),l=Xh((a-t+2*r)/n+1,s);return[i,l]}function Cze(e,t,n,r,s,o){s==null&&(s=fD(e,t,r));let a=e[0],i=e[1],l=e[2],u=Xh((a-t+2*s)/r+1,o),c=Xh((i-t+2*s)/r+1,o),p=Xh((l-t+2*s)/r+1,o);return[u,c,p,n]}function fD(e,t,n,r=1){let s=ky(t,r);return Math.floor((e[0]*(n-1)-n+s)/2)}function D3(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function hD(e){return typeof e=="number"?[e,e,e]:e}function ky(e,t){return t<=1?e:e+(e-1)*(t-1)}function Sze(e,t,n,r,s,o,a,i,l){let u,c,p;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let f=Ize([t,n],o,r,e,i);c=f[0],p=f[1]}else if(e==="same"){c=Math.ceil(t/r),p=Math.ceil(n/s);let d=Math.max(0,(c-1)*r+o-t),f=Math.max(0,(p-1)*s+a-n),h=Math.floor(d/2),m=d-h,g=Math.floor(f/2),x=f-g;u={top:h,bottom:m,left:g,right:x,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((t-o+1)/r),p=Math.ceil((n-a+1)/s);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],f=l==="channelsLast"?e[1][1]:e[2][1],h=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:f,left:h,right:m,type:d===0&&f===0&&h===0&&m===0?"VALID":"EXPLICIT"},c=Xh((t-o+d+f)/r+1,i),p=Xh((n-a+h+m)/s+1,i)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:c,outWidth:p}}function Nze(e,t,n,r,s,o,a,i,l,u,c){let p,d,f,h;if(typeof e=="number"){p={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let g=Cze([t,n,r,1],i,1,s,e,c);d=g[0],f=g[1],h=g[2]}else if(e==="same"){d=Math.ceil(t/s),f=Math.ceil(n/o),h=Math.ceil(r/a);let m=(d-1)*s+i-t,g=(f-1)*o+l-n,x=(h-1)*a+u-r,y=Math.floor(m/2),b=m-y,A=Math.floor(g/2),v=g-A,w=Math.floor(x/2),k=x-w;p={top:A,bottom:v,left:w,right:k,front:y,back:b,type:"SAME"}}else if(e==="valid")p={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-i+1)/s),f=Math.ceil((n-l+1)/o),h=Math.ceil((r-u+1)/a);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:p,outDepth:d,outHeight:f,outWidth:h}}function Xh(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function va(e){let[t,n,r]=D3(e);return t===1&&n===1&&r===1}function hs(e,t){return va(e)||va(t)}function QH(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Tze(e,t){let r={x:O(e,"x","reshape","string_or_numeric")},s={shape:t};return z.runKernel(Up,r,s)}var X=L({reshape_:Tze});function _ze(e,t,n,r,s){let o=O(e,"x","avgPool","float32"),a=1;V(hs(n,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`);let i=o,l=!1;o.rank===3&&(l=!0,i=X(o,[1,o.shape[0],o.shape[1],o.shape[2]])),V(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),s!=null&&V(Jt(r),()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=z.runKernel(mp,u,c);return p=we(p,o.dtype),l?X(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Yu=L({avgPool_:_ze});function Eze(e,t,n,r,s,o="NDHWC"){let a=O(e,"x","avgPool3d","float32"),i=a,l=!1;a.rank===4&&(l=!0,i=X(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),V(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),V(o==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${o}`),s!=null&&V(Jt(r),()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:o},p=z.runKernel(gp,u,c);return p=we(p,i.dtype),l?X(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var UA=L({avgPool3d_:Eze});function Rze(e,t=0){V(e.length>=1,()=>"Pass at least one tensor to concat");let n=A3(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(o=>{if(o.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${o.dtype}. `)}),n.length===1)return So(n[0]);let r=n,s={axis:t};return z.runKernel(Ap,r,s)}var on=L({concat_:Rze});function Dze(e){let n={x:O(e,"x","sigmoid")};return z.runKernel(zu,n)}var ra=L({sigmoid_:Dze});function $ze(e,t,n){let r=O(e,"x","slice","string_or_numeric");if(r.rank===0)throw new Error("Slicing scalar is not possible");let s={x:r},o={begin:t,size:n};return z.runKernel(Xp,s,o)}var Tt=L({slice_:$ze});function Fze(e){let n={x:O(e,"x","tanh")};return z.runKernel(Uu,n)}var pd=L({tanh_:Fze});function Oze(e,t,n){let r=O(e,"x","batchToSpaceND"),s=t.reduce((i,l)=>i*l);V(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),V(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),V(r.shape[0]%s==0,()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${s}`);let o={x:r},a={blockShape:t,crops:n};return z.runKernel(yp,o,a)}var Ju=L({batchToSpaceND_:Oze});function eq(e){let t;return e.rank===0||e.rank===1?t=X(e,[1,1,1,e.size]):e.rank===2?t=X(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=X(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function Pze(e,t,n,r,s,o){o==null&&(o=.001);let a=O(e,"x","batchNorm"),i=O(t,"mean","batchNorm"),l=O(n,"variance","batchNorm"),u;s!=null&&(u=O(s,"scale","batchNorm"));let c;r!=null&&(c=O(r,"offset","batchNorm")),V(i.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),V(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),V(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:eq(a),scale:u,offset:c,mean:i,variance:l},f={varianceEpsilon:o},h=z.runKernel(Tp,d,f);return X(h,a.shape)}var qa=L({batchNorm_:Pze});function Mze(e,t,n,r,s,o){let a=O(e,"x","batchNorm"),i=O(t,"mean","batchNorm"),l=O(n,"variance","batchNorm"),u;s!=null&&(u=O(s,"scale","batchNorm"));let c;return r!=null&&(c=O(r,"offset","batchNorm")),V(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),V(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),V(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&V(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&V(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),qa(a,i,l,c,u,o)}var mD=L({batchNorm2d_:Mze});function zze(e,t,n,r,s,o){let a=O(e,"x","batchNorm"),i=O(t,"mean","batchNorm"),l=O(n,"variance","batchNorm"),u;s!=null&&(u=O(s,"scale","batchNorm"));let c;return r!=null&&(c=O(r,"offset","batchNorm")),V(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),V(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),V(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&V(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&V(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),qa(a,i,l,c,u,o)}var gD=L({batchNorm3d_:zze});function Lze(e,t,n,r,s,o){let a=O(e,"x","batchNorm"),i=O(t,"mean","batchNorm"),l=O(n,"variance","batchNorm"),u;s!=null&&(u=O(s,"scale","batchNorm"));let c;return r!=null&&(c=O(r,"offset","batchNorm")),V(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),V(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),V(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&V(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&V(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),qa(a,i,l,c,u,o)}var xD=L({batchNorm4d_:Lze});function Bze(e,t,n){let r=O(e,"x","bincount"),s=O(t,"weights","bincount");V(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),V(n>=0,()=>`size must be non-negative, but got ${n}.`),V(s.size===r.size||s.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${s.shape}.`);let o={x:r,weights:s},a={size:n};return z.runKernel(Ax,o,a)}var jA=L({bincount_:Bze});function Vze(e,t){let n=O(e,"s0","broadcastArgs","int32"),r=O(t,"s1","broadcastArgs","int32");if(n.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${n.rank}`);if(r.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${r.rank}`);let s={s0:n,s1:r};return z.runKernel(f3,s)}var yD=L({broadcastArgs_:Vze});function Wze(e,t){let n=O(e,"broadcastTo","x"),r=n.shape;if(t.some(u=>!(u>0)||u%1!=0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.lengthn.rank){let u=n.shape.slice();for(;u.length=0;u--)if(s[u]===t[u])o[u]=1;else if(n.shape[u]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(o.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return So(n);let i={x:n},l={reps:o};return z.runKernel(vl,i,l)}var Qu=L({broadcastTo_:Wze});function Gze(e){let n={x:O(e,"x","ceil")};return z.runKernel(iu,n)}var HA=L({ceil_:Gze});function Uze(e,t,n){let r=O(e,"x","clipByValue");V(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let s={x:r},o={clipValueMin:t,clipValueMax:n};return z.runKernel(lu,s,o)}var Pr=L({clipByValue_:Uze});function jze(e){return on(e,0)}var bD=L({concat1d_:jze});function Hze(e,t){return on(e,t)}var AD=L({concat2d_:Hze});function qze(e,t){return on(e,t)}var vD=L({concat3d_:qze});function Kze(e,t){return on(e,t)}var wD=L({concat4d_:Kze});function Xze(e,t,n,r,s="NHWC",o=[1,1],a){let i=O(e,"x","conv2d"),l=O(t,"filter","conv2d"),u=i,c=!1;i.rank===3&&(c=!0,u=X(i,[1,i.shape[0],i.shape[1],i.shape[2]])),V(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),V(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),a!=null&&V(Jt(r),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let p=s==="NHWC"?u.shape[3]:u.shape[1];V(p===l.shape[2],()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${l.shape[2]}.`),V(hs(n,o),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`);let d={x:u,filter:l},f={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a},h=z.runKernel(vp,d,f);return c?X(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Js=L({conv2d_:Xze});function Zze(e,t,n,r,s="NWC",o=1,a){let i=O(e,"x","conv1d"),l=O(t,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=X(i,[1,i.shape[0],i.shape[1]])),V(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),V(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),a!=null&&V(Jt(r),()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`),V(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),V(hs(n,o),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${o}'`),V(s==="NWC",()=>`Error in conv1d: got dataFormat of ${s} but only NWC is currently supported.`);let p=X(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=X(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=Js(d,p,[1,n],r,"NHWC",[1,o],a);return c?X(g,[g.shape[2],g.shape[3]]):X(g,[g.shape[0],g.shape[2],g.shape[3]])}var Zh=L({conv1d_:Zze});function Yze(e,t,n,r,s,o="NHWC",a){V(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let i=e,l=t,u=!1;t.rank===3&&(u=!0,l=X(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,e[0],e[1],e[2]]),V(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),V(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),V(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let c=o==="NHWC"?i[3]:i[1],p=o==="NHWC"?l.shape[3]:l.shape[1];V(c===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${n.shape[2]}.`),V(p===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${n.shape[3]}.`),a!=null&&V(Jt(s),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`);let d={dy:l,filter:n},f={strides:r,pad:s,dataFormat:o,dimRoundingMode:a,inputShape:i},h=z.runKernel(wp,d,f);return u?X(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Iy=L({conv2DBackpropInput_:Yze});function Jze(e,t,n,r,s,o){let a=O(e,"x","conv2dTranspose"),i=O(t,"filter","conv2dTranspose");return Iy(n,a,i,r,s,"NHWC",o)}var Yh=L({conv2dTranspose_:Jze});function Qze(e,t,n,r,s="NDHWC",o=[1,1,1]){let a=O(e,"x","conv3d"),i=O(t,"filter","conv3d"),l=a,u=!1;a.rank===4&&(u=!0,l=X(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),V(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),V(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),V(l.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${i.shape[3]}.`),V(hs(n,o),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),V(s==="NDHWC",()=>`Error in conv3d: got dataFormat of ${s} but only NDHWC is currently supported.`);let c={x:l,filter:i},p={strides:n,pad:r,dataFormat:s,dilations:o},d=z.runKernel(kp,c,p);return u?X(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var qA=L({conv3d_:Qze});function eLe(e,t,n,r,s){V(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,a=t,i=!1;t.rank===4&&(i=!0,a=X(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),o=[1,e[0],e[1],e[2],e[3]]);let l=o[4],u=a.shape[4];V(o.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${o.length}.`),V(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),V(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),V(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),V(u===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`);let c={dy:a,filter:n},p={pad:s,strides:r,inputShape:o},d=z.runKernel(Ix,c,p);return i?X(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var $3=L({conv3DBackpropInput_:eLe});function tLe(e,t,n,r,s){let o=O(e,"x","conv3dTranspose"),a=O(t,"filter","conv3dTranspose");return $3(n,o,a,r,s)}var kD=L({conv3dTranspose_:tLe});function nLe(e){let n={x:O(e,"x","cos")};return z.runKernel(uu,n)}var ec=L({cos_:nLe});function rLe(e){let n={x:O(e,"x","cosh")};return z.runKernel(cu,n)}var Jh=L({cosh_:rLe});function sLe(e,t=0,n=!1,r=!1){let o={x:O(e,"x","cumsum")},a={axis:t,exclusive:n,reverse:r};return z.runKernel(Ip,o,a)}var Qh=L({cumsum_:sLe});function oLe(e,t,n,r=!1){let s=O(e,"x","denseBincount"),o=O(t,"weights","denseBincount");V(s.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${s.dtype}`),V(s.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${s.rank}.`),V(n>=0,()=>`size must be non-negative, but got ${n}.`),V(o.size===s.size||o.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${s.shape}, weights shape: ${o.shape}.`);let a={x:s,weights:o},i={size:n,binaryOutput:r};return z.runKernel(Sx,a,i)}var ID=L({denseBincount_:oLe});function aLe(e,t,n="NHWC"){let r=O(e,"x","depthToSpace"),s=n==="NHWC"?r.shape[1]:r.shape[2],o=n==="NHWC"?r.shape[2]:r.shape[3],a=n==="NHWC"?r.shape[3]:r.shape[1];V(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape ${r.shape}`),V(o*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${o} and ${t} for depthToSpace with input shape ${r.shape}`),V(a%(t*t)==0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${r.shape}`);let i={x:r},l={blockSize:t,dataFormat:n};return z.runKernel(Nx,i,l)}var KA=L({depthToSpace_:aLe});function iLe(e,t,n,r,s="NHWC",o=[1,1],a){let i=O(e,"x","depthwiseConv2d"),l=O(t,"filter","depthwiseConv2d"),u=i,c=!1;i.rank===3&&(c=!0,u=X(i,[1,i.shape[0],i.shape[1],i.shape[2]])),V(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),V(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),V(u.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),a!=null&&V(Jt(r),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let p={x:u,filter:l},d={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a},f=z.runKernel(Cp,p,d);return c?X(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Oi=L({depthwiseConv2d_:iLe});function lLe(e,t,n,r,s=[1,1],o="NHWC"){let a=O(e,"x","dilation2d"),i=O(t,"filter","dilation2d");V(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),V(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),V(o==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${o}`);let l=a,u=!1;a.rank===3&&(l=X(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:l,filter:i},p={strides:n,pad:r,dilations:s},d=z.runKernel(Sp,c,p);return u?X(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var XA=L({dilation2d_:lLe});function uLe(e,t){let n=e.length,r=[];for(let s=0;s1&&a===1&&r.unshift(o)}return r}function An(e,t){let n=[];for(let r=0;r1)&&n.unshift(o)}return n}function kt(e,t){let n=[],r=Math.max(e.length,t.length);for(let s=0;s`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);let s=n.rank===1?n.size:n.shape[1],o=r.rank===1?r.size:r.shape[0];if(V(s===o,()=>`Error in dot: inner dimensions of inputs must match, but got ${s} and ${o}.`),n.rank===1&&r.rank===1){let a=X(n,[1,-1]),i=X(r,[-1,1]),l=Bt(a,i);return X(l,[])}else if(n.rank===1&&r.rank===2){let a=X(n,[1,-1]),i=X(r,[r.shape[0],r.shape[1]]),l=Bt(a,i);return X(l,[l.size])}else if(n.rank===2&&r.rank===1){let a=X(r,[-1,1]),i=Bt(n,a);return X(i,[i.size])}else{let a=X(r,[r.shape[0],r.shape[1]]);return Bt(n,a)}}var tq=L({dot_:hLe});function mLe(e,...t){let n=t.map((s,o)=>O(s,`tensors${o}`,"einsum")),r={equation:e};return z.runKernel(Ex,n,r)}var CD=L({einsum_:mLe});function gLe(e){let n={x:O(e,"x","elu")};return z.runKernel(du,n)}var Pi=L({elu_:gLe});function xLe(e){let t=O(e,"x","erf");V(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=we(t,"float32"));let n={x:t};return z.runKernel(fu,n)}var YA=L({erf_:xLe});function yLe(e){let n={x:O(e,"x","exp")};return z.runKernel(hu,n)}var Zr=L({exp_:yLe});function bLe(e,t=0){let n=O(e,"x","expandDims","string_or_numeric");V(t<=n.rank,()=>"Axis must be <= rank of the tensor");let r={input:n},s={dim:t};return z.runKernel(Np,r,s)}var Mr=L({expandDims_:bLe});function ALe(e){let n={x:O(e,"x","expm1")};return z.runKernel(mu,n)}var JA=L({expm1_:ALe});function vLe(e,t){let n=O(e,"x","tile","string_or_numeric");V(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let r={x:n},s={reps:t};return z.runKernel(vl,r,s)}var Yr=L({tile_:vLe});function wLe(e,t,n,r="float32"){t==null&&(t=e);let s=et([e,t],r),o=e<=t?e:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got rank ${o.rank}.`),V(Jt(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let a=o,i=!1;o.rank===3&&(i=!0,a=X(o,[1,o.shape[0],o.shape[1],o.shape[2]]));let l={x:a},u={depthRadius:t,bias:n,alpha:r,beta:s},c=z.runKernel(Rp,l,u);return i?X(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var e2=L({localResponseNormalization_:FLe});function OLe(e){let n={x:O(e,"x","log")};return z.runKernel(wu,n)}var Ns=L({log_:OLe});function PLe(e){let n={x:O(e,"x","log1p")};return z.runKernel(ku,n)}var nm=L({log1p_:PLe});function _D(e,t){V(fx(e),()=>"The f passed in variableGrads(f) must be a function"),V(t==null||Array.isArray(t)&&t.every(u=>u instanceof od),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in z.registeredVariables)t.push(z.registeredVariables[u])}let r=n?t.filter(u=>!u.trainable):null,s=t.length;t=t.filter(u=>u.trainable),V(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${s} variables is trainable.`);let o=!0,{value:a,grads:i}=z.gradients(e,t,null,o);V(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),V(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let l={};return t.forEach((u,c)=>{i[c]!=null&&(l[u.name]=i[c])}),r!=null&&r.forEach(u=>l[u.name]=null),{value:a,grads:l}}function wa(e){return z.customGrad(e)}function MLe(e){let n={x:O(e,"x","neg")};return z.runKernel(zp,n)}var jt=L({neg_:MLe});function zLe(e){let n={x:O(e,"x","softplus")};return z.runKernel(Lu,n)}var Ka=L({softplus_:zLe});function LLe(e){let t=O(e,"x","logSigmoid");return wa(r=>({value:jt(Ka(jt(r))),gradFunc:a=>Y(a,ra(jt(r)))}))(t)}var ED=L({logSigmoid_:LLe});function BLe(e,t=null,n=!1){let s={x:O(e,"x","max")},o={reductionIndices:t,keepDims:n};return z.runKernel(Dp,s,o)}var ms=L({max_:BLe});function VLe(e,t){let n=O(e,"a","sub"),r=O(t,"b","sub");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(Wu,s)}var je=L({sub_:VLe});function WLe(e,t=null,n=!1){let r=O(e,"x","sum");r.dtype==="bool"&&(r=we(r,"int32"));let s={x:r},o={axis:t,keepDims:n};return z.runKernel(Zp,s,o)}var ze=L({sum_:WLe});function GLe(e,t=-1){let n=O(e,"logits","logSoftmax");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return wa((s,o)=>{let a=!0,i=ms(s,t,!0),l=je(s,i),u=je(we(l,"float32"),Ns(ze(Zr(l),t,a)));return o([u]),{value:u,gradFunc:(p,d)=>{let[f]=d,h=!0,m=Zr(f);return je(p,Y(ze(p,t,h),m))}}})(n)}var rm=L({logSoftmax_:GLe});function RD(e,t){for(let n=0;ne[o]);return[n,s]}function Cl(e,t){let n=t.map(r=>1);return nq(e,n,t)}function ULe(e,t,n){V(RD(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function $D(e,t){if(RD(e,t))return null;let n=[];for(let r=0;rn.push(r)),n}function t2(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function jLe(e,t){let n=[];for(let r=t-e;r`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),V(hs(n,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),s!=null&&V(Jt(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=z.runKernel($p,u,c);return l?X(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var sc=L({maxPool_:YLe});function JLe(e,t=[1,1,1],n,r,s,o="NDHWC"){let a=O(e,"x","maxPool3d"),i=a,l=!1;a.rank===4&&(l=!0,i=X(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),V(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),V(o==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${o}`),s!=null&&V(Jt(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${s} but got pad ${r}.`);let u={x:i},c={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:o},p=z.runKernel(Fp,u,c);return l?X(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var n2=L({maxPool3d_:JLe});function QLe(e,t,n,r,s=!1){let a={x:O(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:s},l=z.runKernel(Wx,a,i);return{result:l[0],indexes:l[1]}}var FD=L({maxPoolWithArgmax_:QLe});function eBe(e,t){let n=O(e,"a","maximum"),r=O(t,"b","maximum");[n,r]=_t(n,r),n.dtype==="bool"&&(n=we(n,"int32"),r=we(r,"int32")),kt(n.shape,r.shape);let s={a:n,b:r};return z.runKernel(Iu,s)}var Qs=L({maximum_:eBe});function tBe(e,t=null,n=!1){let s={x:O(e,"x","mean")},o={axis:t,keepDims:n};return z.runKernel(Op,s,o)}var Nn=L({mean_:tBe});function fn(e,t="float32"){if(t==="complex64"){let r=fn(e,"float32"),s=fn(e,"float32");return ta(r,s)}let n=mx(bn(e),t);return z.makeTensor(n,e,t)}function eo(e,t="float32"){if(t==="complex64"){let r=eo(e,"float32"),s=fn(e,"float32");return ta(r,s)}let n=kA(bn(e),t);return z.makeTensor(n,e,t)}function nBe(e,t=null,n=!1){let s={x:O(e,"x","min")},o={axis:t,keepDims:n};return z.runKernel(Pp,s,o)}var dd=L({min_:nBe});function rBe(e,t){let n=O(e,"a","minimum"),r=O(t,"b","minimum");[n,r]=_t(n,r),n.dtype==="bool"&&(n=we(n,"int32"),r=we(r,"int32")),kt(n.shape,r.shape);let s={a:n,b:r};return z.runKernel(Cu,s)}var oc=L({minimum_:rBe});function sBe(e,t,n){V(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let r=O(e,"x","mirrorPad");if(r.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");V(t.length===r.rank,()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`);let s=n==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),V(t[i][0]>=0&&t[i][0]<=r.shape[i]-s&&t[i][1]>=0&&t[i][1]<=r.shape[i]-s,()=>`Padding in dimension ${i} cannot be greater than or equal to ${r.shape[i]-s} or less than 0 for input of shape ${r.shape}`);let o={paddings:t,mode:n},a={x:r};return z.runKernel(Mp,a,o)}var r2=L({mirrorPad_:sBe});function oBe(e,t){let n=O(e,"a","mod"),r=O(t,"b","mod");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(Su,s)}var s2=L({mod_:oBe});function aBe(e){let t=O(e,"x","square"),n={};return z.runKernel("Square",{x:t},n)}var Nt=L({square_:aBe});function iBe(e,t=null,n=!1){e=O(e,"x","moments");let r=Sr(t,e.shape),s=Nn(e,r,n),o=s.shape;n||(o=Cl(s.shape,r));let a=Nt(je(we(e,"float32"),X(s,o))),i=Nn(a,r,n);return{mean:s,variance:i}}var Sy=L({moments_:iBe});function lBe(e,t,n,r=!1){let s=O(e,"logits","multinomial"),o=s.size,a=s.rank;if(o<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${o}.`);if(a>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);n=n||Math.random();let l={logits:a===1?X(s,[1,-1]):s},u={numSamples:t,seed:n,normalized:r},c=z.runKernel(Gx,l,u);return a===1?X(c,[c.size]):c}var OD=L({multinomial_:lBe});function uBe(e,t){let n=O(e,"a","notEqual","string_or_numeric"),r=O(t,"b","notEqual","string_or_numeric");[n,r]=_t(n,r),kt(n.shape,r.shape);let s={a:n,b:r};return z.runKernel(Dh,s)}var Sl=L({notEqual_:uBe});function cBe(e){let n={x:O(e,"x","onesLike")};return z.runKernel(Lp,n)}var Nr=L({onesLike_:cBe});function pBe(e,t,n=0){let r=O(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let s={paddings:t,constantValue:n},o={x:r};return z.runKernel(Wp,o,s)}var zi=L({pad_:pBe});function dBe(e,t,n){let r=O(e,"x","spaceToBatchND");V(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),V(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),V(r.shape.reduce((a,i,l)=>l>0&&l<=t.length?a&&(i+n[l-1][0]+n[l-1][1])%t[l-1]==0:a,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let s={x:r},o={blockShape:t,paddings:n};return z.runKernel(Yp,s,o)}var ac=L({spaceToBatchND_:dBe});function fBe(e,t,n,r,s,o){s==null&&(s=[1,1]),o==null&&(o=1),r===0&&(r="valid");let a=O(e,"x","maxPool"),i=a,l=!1;a.rank===3&&(l=!0,i=X(a,[1,a.shape[0],a.shape[1],a.shape[2]])),V(hs(o,s),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${o} and dilations '${s}'`);let u=dD(i.shape,t,o,s,r),c=[u.dilationHeight,u.dilationWidth],p;r==="same"?p=mBe([u.filterHeight,u.filterWidth],c):p=[[0,0],[0,0]];let d=c[0]===1&&c[1]===1,[f,h]=hBe([u.inHeight,u.inWidth],c,p),m=d?r:"valid",g=d?i:ac(i,c,f),y=(n==="avg"?()=>Yu(g,t,o,m):()=>sc(g,t,o,m))(),b=d?y:Ju(y,c,h);return l?X(b,[b.shape[1],b.shape[2],b.shape[3]]):b}function hBe(e,t,n){let r=n.map(c=>c[0]),s=n.map(c=>c[1]),o=e.concat(r,s),a=t.map((c,p)=>(c-o[p]%c)%c),i=s.map((c,p)=>c+a[p]),l=t.map((c,p)=>[r[p],i[p]]),u=t.map((c,p)=>[0,a[p]]);return[l,u]}function mBe(e,t){let r=e.map((a,i)=>a+(a-1)*(t[i]-1)).map(a=>a-1),s=r.map(a=>Math.floor(a/2)),o=r.map((a,i)=>a-s[i]);return r.map((a,i)=>[s[i],o[i]])}var oq=L({pool_:fBe});function gBe(e,t){let n=O(e,"base","pow"),r=O(t,"exp","pow");[n,r]=_t(n,r);let s={a:n,b:r};return z.runKernel(Tu,s)}var Eo=L({pow_:gBe});function xBe(e,t){let n=O(e,"x","prelu"),r=O(t,"alpha","prelu"),s={x:n,alpha:r};return z.runKernel(Gp,s)}var ic=L({prelu_:xBe});function yBe(e,t=null,n=!1){let r=O(e,"x","prod");r.dtype==="bool"&&(r=we(r,"int32"));let s={x:r},o={axis:t,keepDims:n};return z.runKernel(qx,s,o)}var om=L({prod_:yBe});var UD=T1(GD());var o2=class{constructor(t,n,r,s,o){this.mean=t,this.stdDev=n,this.dtype=r,this.nextVal=NaN,this.truncated=s,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let a=o||Math.random();this.random=UD.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let s=this.nextVal;return this.nextVal=NaN,s}let t,n,r=!1;for(;!r;){let s,o,a;do s=2*this.random()-1,o=2*this.random()-1,a=s*s+o*o;while(a>=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);t=this.mean+this.stdDev*s*i,n=this.mean+this.stdDev*o*i,(!this.truncated||this.isValidTruncated(t))&&(r=!0)}return(!this.truncated||this.isValidTruncated(n))&&(this.nextVal=this.convertValue(n)),this.convertValue(t)}convertValue(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)}isValidTruncated(t){return t<=this.upper&&t>=this.lower}};var jD=class{constructor(t=0,n=1,r,s){if(this.canReturnFloat=()=>this.dtype==null||this.dtype==="float32",this.min=t,this.range=n-t,this.dtype=r,s==null&&(s=Math.random()),typeof s=="number"&&(s=s.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${t} - ${n} <= 1 and dtype is not float`);this.random=UD.alea(s)}convertValue(t){return this.canReturnFloat()?t:Math.round(t)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function CBe(e,t=0,n=1,r,s){if(r!=null&&r==="bool")throw new Error(`Unsupported data type ${r}`);let o=new o2(t,n,r,!1,s),a=et(e,r);for(let i=0;i`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),V(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),V(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),V(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),V(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=l.shape[2],f=l.shape[3];V(u.shape[2]===d*f,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*f}, but got ${u.shape[2]}.`);let h=Oi(c,l,r,s,a,o),g=Js(h,u,1,"valid",a);return p?X(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var i2=L({separableConv2d_:OBe});async function PBe(e,t){let n=O(e,"x","setdiff1d"),r=O(t,"y","setdiff1d");V(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),V(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),V(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);let s=await n.data(),o=await r.data(),a=new Set(o),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),Tt(r,[t],[n])}var u2=L({slice1d_:BBe});function VBe(e,t,n){let r=O(e,"x","slice2d");return V(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),Tt(r,t,n)}var P3=L({slice2d_:VBe});function WBe(e,t,n){let r=O(e,"x","slice3d");return V(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),Tt(r,t,n)}var c2=L({slice3d_:WBe});function GBe(e,t,n){let r=O(e,"x","slice4d");return V(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),Tt(r,t,n)}var Ny=L({slice4d_:GBe});function UBe(e,t=-1){let n=O(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let r={logits:n},s={dim:t};return z.runKernel(Qp,r,s)}var uc=L({softmax_:UBe});function jBe(e){V(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return z.runKernel(Dx,t)}var fm=L({fft_:jBe});function HBe(e){V(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return z.runKernel(Px,t)}var hd=L({ifft_:HBe});function qBe(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let s=X(e,[n,t]);r=hd(s)}else{let s=[n,2*(t-1)],o=X(fd(e),[n,t]),a=X(em(e),[n,t]),i=no(Tt(o,[0,1],[n,t-2]),1),l=Y(no(Tt(a,[0,1],[n,t-2]),1),Ke(-1)),u=on([o,i],1),c=on([a,l],1),p=X(ta(u,c),[s[0],s[1]]);r=hd(p)}if(r=fd(r),e.rank===3&&e.shape[0]!==0){let s=r,o=e.shape[0];r=X(r,[o,r.shape[0]/o,r.shape[1]]),s.dispose()}return r}var p2=L({irfft_:qBe});function KBe(e,t,n=0){let s={x:O(e,"x","split")},o={numOrSizeSplits:t,axis:n};return z.runKernel(Jp,s,o)}var yr=L({split_:KBe});function XBe(e,t){V(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],r=e.size/n,s;if(t!=null&&t0),m=e.shape.map(g=>g);m[e.shape.length-1]=t,s=Tt(e,h,m),n=t}else if(t!=null&&t>n){let h=e.shape.map(m=>m);h[e.shape.length-1]=t-n,s=on([e,fn(h)],e.shape.length-1),n=t}else s=e;let o=Ye(s),a=X(ta(s,o),[r,n]),i=fm(a),l=Math.floor(n/2)+1,u=fd(i),c=em(i),p=yr(u,[l,n-l],u.shape.length-1),d=yr(c,[l,n-l],c.shape.length-1),f=s.shape.slice();return f[s.shape.length-1]=l,X(ta(p[0],d[0]),f)}var d2=L({rfft_:XBe});function ZBe(e){let n={x:O(e,"x","sqrt")};return z.runKernel(Bu,n)}var hn=L({sqrt_:ZBe});function YBe(e,t){let n=O(e,"a","squaredDifference"),r=O(t,"b","squaredDifference");[n,r]=_t(n,r),kt(n.shape,r.shape);let s={a:n,b:r},o={};return z.runKernel(Vu,s,o)}var f2=L({squaredDifference_:YBe});function JBe(e,t){let n=O(e,"x","squeeze");return X(n,S7(n.shape,t).newShape)}var ro=L({squeeze_:JBe});function QBe(e,t=0){let n=A3(e,"tensors","stack","string_or_numeric");V(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&V(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,s={axis:t};return z.runKernel(Vp,r,s)}var or=L({stack_:QBe});function eVe(e,t=0){let r={x:O(e,"x","step")},s={alpha:t};return z.runKernel(ju,r,s)}var Bi=L({step_:eVe});function tVe(e,t,n,r,s=0,o=0,a=0,i=0,l=0){let c={x:O(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:n,strides:r,beginMask:s,endMask:o,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:l};return z.runKernel(oy,c,p)}var h2=L({stridedSlice_:tVe});function nVe(e){let n={x:O(e,"x","tan")};return z.runKernel(Gu,n)}var m2=L({tan_:nVe});function Kn(e,t){wA(e);let n=Uh(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ad(e,null,n,t)}function g2(e,t,n){if(wA(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=Uh(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return ad(e,t,r,n)}function rVe(e,t=1,n=!0){let r=O(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let s=r.shape[r.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>s)throw new Error(`'k' passed to topk() must be <= the last dimension (${s}) but got ${t}`);let o={x:r},a={k:t,sorted:n},[i,l]=z.runKernel(uy,o,a);return{values:i,indices:l}}var x2=L({topk_:rVe});function sVe(e,t=0,n=1,r,s){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let o=new o2(t,n,r,!0,s),a=et(e,r);for(let i=0;i0,()=>"The input tensor must be at least 1D");let r={x:n},s={axis:t},[o,a]=z.runKernel(py,r,s);return{values:o,indices:a}}var Ty=L({unique_:oVe});function aVe(e,t,n){let r=O(e,"x","unsortedSegmentSum"),s=O(t,"segmentIds","unsortedSegmentSum","int32");V(Jt(n),()=>"numSegments must be of dtype int");let o={x:r,segmentIds:s},a={numSegments:n};return z.runKernel(nd,o,a)}var M3=L({unsortedSegmentSum_:aVe});function iVe(e,t=0){let n=O(e,"x","unstack","string_or_numeric");V(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},s={axis:t};return z.runKernel(td,r,s)}var zr=L({unstack_:iVe});function qD(e,t=!0,n,r){return z.makeVariable(e,t,n,r)}function z3(e,t){let n=[];for(let o=0;o2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let s=e.rank>0?e.shape[0]:1,o=e.rank>1?e.shape[1]:1;if(n.length!==o)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${o}.`);let a=t.size;if(!(t.rank===0||t.rank===1&&a===s))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${s}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function pVe(e,t,n,r=0){let s=O(e,"sparseIndices","sparseToDense","int32"),o=O(t,"sparseValues","sparseToDense"),a=O(r,"defaultValue","sparseToDense",o.dtype);wq(s,o,n,a);let i={sparseIndices:s,sparseValues:o,defaultValue:a},l={outputShape:n};return z.runKernel(ry,i,l)}var L3=L({sparseToDense_:pVe});function dVe(e,t){let n=O(t,"indices","gatherND","int32"),s={params:O(e,"x","gatherND","string_or_numeric"),indices:n};return z.runKernel(Ox,s)}var kq=L({gatherND_:dVe});function Iq(e,t){if(t==null)return e.shape.slice();if(Wa(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r`x has to be a floating point tensor since it's going to be scaled, but got a ${s.dtype} tensor instead.`),V(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof Ot?s.clone():s;let o=Iq(s,n),a=1-t,i=Pe(Mi(Ie(Li(o,0,1,"float32",r),a)),a);return Y(s,i)}var Cq=L({dropout_:fVe});var Xa={};dn(Xa,{conv2d:()=>Sq,depthwiseConv2d:()=>Nq,matMul:()=>Tq});function hVe(e,t,n,r,s,o="NHWC",a){let i=e;e.rank===3&&(i=X(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=X(t,[1,t.shape[0],t.shape[1],t.shape[2]])),V(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),V(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),V(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let u=o==="NHWC"?i.shape[3]:i.shape[1],c=o==="NHWC"?l.shape[3]:l.shape[1];V(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),V(c===n[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${n[3]}).`),a!=null&&V(Jt(s),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`);let p={x:i,dy:l},d={strides:r,pad:s,dataFormat:o,dimRoundingMode:a,filterShape:n};return z.runKernel(wx,p,d)}var Ey=L({conv2DBackpropFilter_:hVe});function mm(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return Y(e,Bi(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function gm(e,t){let n=t,r=An(e.shape,t.shape);return r.length>0&&(n=ze(n,r)),X(n,e.shape)}function xm(e,t,n,r){if(t==="linear")return e;if(t==="relu")return to(e);if(t==="elu")return Pi(e);if(t==="relu6")return im(e);if(t==="prelu")return ic(e,n);if(t==="leakyrelu")return nc(e,r);if(t==="sigmoid")return ra(e);throw new Error(`Unknown fused activation ${t}.`)}var ym=(e,t)=>!(e>0)||t==="linear";function mVe({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:o=[1,1],dimRoundingMode:a,bias:i,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(l=l||"linear",ym(z.state.gradientDepth,l)===!1){let v=Js(e,t,n,r,s,o,a);return i!=null&&(v=Ie(v,i)),xm(v,l,u,c)}let p=O(e,"x","conv2d"),d=O(t,"filter","conv2d"),f=p,h=!1;p.rank===3&&(h=!0,f=X(p,[1,p.shape[0],p.shape[1],p.shape[2]])),V(f.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${f.rank}.`),V(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),a!=null&&V(Jt(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`),V(f.shape[3]===d.shape[2],()=>`Error in conv2d: depth of input (${f.shape[3]}) must match input depth for filter ${d.shape[2]}.`),V(hs(n,o),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),V(s==="NHWC",()=>`Error in conv2d: got dataFormat of ${s} but only NHWC is currently supported.`);let m=Kh(f.shape,d.shape,n,o,r,a),g;i!=null&&(g=O(i,"bias","fused conv2d"),[g]=_t(g,p),kt(m.outShape,g.shape));let x;u!=null&&(x=O(u,"prelu weights","fused conv2d"));let y=(v,w)=>{let[k,I,N,T]=w,_=mm(v,N,l);V(va(o),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${o}'`);let R=Iy(I.shape,_,k,n,r),S=Ey(I,_,k.shape,n,r),F=[R,S];if(T!=null){let B=gm(T,_);F.push(B)}return F},b={x:f,filter:d,bias:g,preluActivationWeights:x},A={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a,activation:l,leakyreluAlpha:c};return i==null?wa((w,k,I)=>{let N=z.runKernel(Fh,b,A);return I([k,w,N]),h&&(N=X(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:y}})(f,d):wa((w,k,I,N)=>{let T=z.runKernel(Fh,b,A);return N([k,w,T,I]),h&&(T=X(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:y}})(f,d,g)}var Sq=L({fusedConv2d_:mVe});function gVe(e,t,n,r,s,o=[1,1],a){let i=e;e.rank===3&&(i=X(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=X(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:l},c={strides:r,pad:s,dimRoundingMode:a,dilations:o,filterShape:n};return z.runKernel(Tx,u,c)}var B3=L({depthwiseConv2dNativeBackpropFilter_:gVe});function xVe(e,t,n,r,s,o=[1,1],a){let i=t,l=!1;t.rank===3&&(l=!0,i=X(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:n},c={strides:r,pad:s,dimRoundingMode:a,dilations:o,inputShape:e},p=z.runKernel(_x,u,c);return l?X(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var V3=L({depthwiseConv2dNativeBackpropInput_:xVe});function yVe({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:o=[1,1],dimRoundingMode:a,bias:i,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(ym(z.state.gradientDepth,l)===!1){let v=Oi(e,t,n,r,s,o,a);return i!=null&&(v=Ie(v,i)),xm(v,l,u,c)}let p=O(e,"x","depthwiseConv2d"),d=O(t,"filter","depthwiseConv2d"),f=p,h=!1;p.rank===3&&(h=!0,f=X(p,[1,p.shape[0],p.shape[1],p.shape[2]])),V(f.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${f.rank}.`),V(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),V(f.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${f.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),o==null&&(o=[1,1]),V(hs(n,o),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),a!=null&&V(Jt(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`);let m=Kh(f.shape,d.shape,n,o,r,a,!0),g;i!=null&&(g=O(i,"bias","fused conv2d"),[g]=_t(g,p),kt(m.outShape,g.shape));let x;u!=null&&(x=O(u,"prelu weights","fused depthwiseConv2d"));let y=(v,w)=>{V(va(o),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[k,I,N,T]=w,_=mm(v,N,l),R=V3(I.shape,_,k,n,r,o,a),S=B3(I,_,k.shape,n,r,o,a);if(T!=null){let F=gm(g,_);return[R,S,F]}return[R,S]},b={x:f,filter:d,bias:g,preluActivationWeights:x},A={strides:n,pad:r,dataFormat:s,dilations:o,dimRoundingMode:a,activation:l,leakyreluAlpha:c};return i==null?wa((w,k,I)=>{let N=z.runKernel(Oh,b,A);return I([k,w,N]),h&&(N=X(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:y}})(f,d):wa((w,k,I,N)=>{let T=z.runKernel(Oh,b,A);return N([k,w,T,I]),h&&(T=X(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:y}})(f,d,g)}var Nq=L({fusedDepthwiseConv2d_:yVe});function bVe({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:s,activation:o="linear",preluActivationWeights:a,leakyreluAlpha:i}){if(ym(z.state.gradientDepth,o)===!1){let T=Bt(e,t,n,r);return s!=null&&(T=Ie(T,s)),xm(T,o,a,i)}let l=O(e,"a","fused matMul"),u=O(t,"b","fused matMul");[l,u]=_t(l,u);let c=n?l.shape[l.rank-2]:l.shape[l.rank-1],p=r?u.shape[u.rank-1]:u.shape[u.rank-2],d=n?l.shape[l.rank-1]:l.shape[l.rank-2],f=r?u.shape[u.rank-2]:u.shape[u.rank-1],h=l.shape.slice(0,-2),m=u.shape.slice(0,-2),g=bn(h),x=bn(m);V(l.rank>=2&&u.rank>=2&&l.rank===u.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${u.rank}.`),V(Wa(h,m),()=>`Error in fused matMul: outer dimensions (${h}) and (${m}) of Tensors with shapes ${l.shape} and ${u.shape} must match.`),V(c===p,()=>`Error in fused matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${r} must match.`);let y=l.shape.slice(0,-2).concat([d,f]),b=n?X(l,[g,c,d]):X(l,[g,d,c]),A=r?X(u,[x,f,p]):X(u,[x,p,f]),v;s!=null&&(v=O(s,"bias","fused matMul"),[v]=_t(v,l),kt(y,v.shape));let w;a!=null&&(w=O(a,"prelu weights","fused matMul"));let k=(T,_)=>{let[R,S,F,B]=_,W=mm(X(T,F.shape),F,o),q,K;if(!n&&!r?(q=Bt(W,S,!1,!0),K=Bt(R,W,!0,!1)):!n&&r?(q=Bt(W,S,!1,!1),K=Bt(W,R,!0,!1)):n&&!r?(q=Bt(S,W,!1,!0),K=Bt(R,W,!1,!1)):(q=Bt(S,W,!0,!0),K=Bt(W,R,!0,!0)),s!=null){let J=gm(B,W);return[q,K,J]}else return[q,K]},I={a:b,b:A,bias:v,preluActivationWeights:w},N={transposeA:n,transposeB:r,activation:o,leakyreluAlpha:i};return s==null?wa((_,R,S)=>{let F=z.runKernel($h,I,N);return S([_,R,F]),{value:X(F,y),gradFunc:k}})(b,A):wa((_,R,S,F)=>{let B=z.runKernel($h,I,N);return F([_,R,B,S]),{value:X(B,y),gradFunc:k}})(b,A,v)}var Tq=L({fusedMatMul_:bVe});function AVe(e,t,n,r,s="bilinear",o=0){let a=O(e,"image","cropAndResize"),i=O(t,"boxes","cropAndResize","float32"),l=O(n,"boxInd","cropAndResize","int32"),u=i.shape[0];V(a.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),V(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),V(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),V(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),V(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),V(s==="bilinear"||s==="nearest",()=>`method must be bilinear or nearest, but was ${s}`);let c={image:a,boxes:i,boxInd:l},p={method:s,extrapolationValue:o,cropSize:r};return z.runKernel(Cx,c,p)}var _q=L({cropAndResize_:AVe});function vVe(e){let t=O(e,"image","flipLeftRight","float32");V(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return z.runKernel(Fx,n,{})}var Eq=L({flipLeftRight_:vVe});function wVe(e){let t=O(e,"image","grayscaleToRGB"),n=t.rank-1,r=t.shape[n];V(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),V(r===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${r}.`);let s=new Array(t.rank);return s.fill(1,0,n),s[n]=3,Yr(t,s)}var Rq=L({grayscaleToRGB_:wVe});function kVe(e,t,n=0,r=.5){let s=O(e,"image","rotateWithOffset","float32");V(s.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${s.rank}.`);let o={image:s},a={radians:t,fillValue:n,center:r};return z.runKernel(dy,o,a)}var Dq=L({rotateWithOffset_:kVe});function Za(e,t,n,r,s,o){r==null&&(r=.5),s==null&&(s=Number.NEGATIVE_INFINITY),o==null&&(o=0);let a=e.shape[0];return n=Math.min(n,a),V(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),V(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),V(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),V(t.rank===1,()=>"scores must be a 1D tensor"),V(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),V(0<=o&&o<=1,()=>`softNmsSigma must be in [0, 1], but was '${o}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:o}}function IVe(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let o=O(e,"boxes","nonMaxSuppression"),a=O(t,"scores","nonMaxSuppression"),i=Za(o,a,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let l={maxOutputSize:n,iouThreshold:r,scoreThreshold:s};return z.runKernel(Ux,{boxes:o,scores:a},l)}var $q=L({nonMaxSuppression_:IVe});function Fq(e,t,n){let r=CVe(e,t,n),s=r<0?-(r+1):r;e.splice(s,0,t)}function CVe(e,t,n){return NVe(e,t,n||SVe)}function SVe(e,t){return e>t?1:e>>1);let i=n(t,e[o]);i>0?r=o+1:(s=o,a=!i)}return a?r:-r-1}function W3(e,t,n,r,s){return XD(e,t,n,r,s,0)}function G3(e,t,n,r,s,o){return XD(e,t,n,r,s,0,!1,o,!0)}function U3(e,t,n,r,s,o){return XD(e,t,n,r,s,o,!0)}function XD(e,t,n,r,s,o,a=!1,i=!1,l=!1){let u=[];for(let g=0;gs&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(Oq);let c=o>0?-.5/o:0,p=[],d=[];for(;p.length0;){let g=u.pop(),{score:x,boxIndex:y,suppressBeginIndex:b}=g;if(x=b;--v){let w=TVe(e,y,p[v]);if(w>=r){A=!0;break}if(g.score=g.score*_Ve(r,c,w),g.score<=s)break}g.suppressBeginIndex=p.length,A||(g.score===x?(p.push(y),d.push(g.score)):g.score>s&&Fq(u,g,Oq))}let f=p.length,h=n-f;i&&h>0&&(p.push(...new Array(h).fill(0)),d.push(...new Array(h).fill(0)));let m={selectedIndices:p};return a&&(m.selectedScores=d),l&&(m.validOutputs=f),m}function TVe(e,t,n){let r=e.subarray(t*4,t*4+4),s=e.subarray(n*4,n*4+4),o=Math.min(r[0],r[2]),a=Math.min(r[1],r[3]),i=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),u=Math.min(s[0],s[2]),c=Math.min(s[1],s[3]),p=Math.max(s[0],s[2]),d=Math.max(s[1],s[3]),f=(i-o)*(l-a),h=(p-u)*(d-c);if(f<=0||h<=0)return 0;let m=Math.max(o,u),g=Math.max(a,c),x=Math.min(i,p),y=Math.min(l,d),b=Math.max(x-m,0)*Math.max(y-g,0);return b/(f+h-b)}function _Ve(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function Oq(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function EVe(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let o=O(e,"boxes","nonMaxSuppressionAsync"),a=O(t,"scores","nonMaxSuppressionAsync"),i=Za(o,a,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let l=await Promise.all([o.data(),a.data()]),u=l[0],c=l[1],{selectedIndices:p}=W3(u,c,n,r,s);return o!==e&&o.dispose(),a!==t&&a.dispose(),Kn(p,"int32")}var Pq=EVe;function RVe(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=0){let a=O(e,"boxes","nonMaxSuppression"),i=O(t,"scores","nonMaxSuppression"),l=Za(a,i,n,r,s,o);n=l.maxOutputSize,r=l.iouThreshold,s=l.scoreThreshold,o=l.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:o},p=z.runKernel(Hx,u,c);return{selectedIndices:p[0],selectedScores:p[1]}}var Mq=L({nonMaxSuppressionWithScore_:RVe});async function DVe(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=0){let a=O(e,"boxes","nonMaxSuppressionAsync"),i=O(t,"scores","nonMaxSuppressionAsync"),l=Za(a,i,n,r,s,o);n=l.maxOutputSize,r=l.iouThreshold,s=l.scoreThreshold,o=l.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],p=u[1],{selectedIndices:d,selectedScores:f}=U3(c,p,n,r,s,o);return a!==e&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Kn(d,"int32"),selectedScores:Kn(f)}}var zq=DVe;function $Ve(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=!1){let a=O(e,"boxes","nonMaxSuppression"),i=O(t,"scores","nonMaxSuppression"),l=Za(a,i,n,r,s,null),u=l.maxOutputSize,c=l.iouThreshold,p=l.scoreThreshold,d={boxes:a,scores:i},f={maxOutputSize:u,iouThreshold:c,scoreThreshold:p,padToMaxOutputSize:o},h=z.runKernel(jx,d,f);return{selectedIndices:h[0],validOutputs:h[1]}}var Lq=L({nonMaxSuppressionPadded_:$Ve});async function FVe(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,o=!1){let a=O(e,"boxes","nonMaxSuppressionAsync"),i=O(t,"scores","nonMaxSuppressionAsync"),l=Za(a,i,n,r,s,null),u=l.maxOutputSize,c=l.iouThreshold,p=l.scoreThreshold,[d,f]=await Promise.all([a.data(),i.data()]),{selectedIndices:h,validOutputs:m}=G3(d,f,u,c,p,o);return a!==e&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Kn(h,"int32"),validOutputs:Ke(m,"int32")}}var Bq=FVe;function OVe(e,t,n=!1,r=!1){let s=O(e,"images","resizeBilinear");V(s.rank===3||s.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${s.rank}.`),V(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),V(r===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let o=s,a=!1;s.rank===3&&(a=!0,o=X(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let[]=t,i={images:o},l={alignCorners:n,halfPixelCenters:r,size:t},u=z.runKernel(Hp,i,l);return a?X(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var j3=L({resizeBilinear_:OVe});function PVe(e,t,n=!1,r=!1){let s=O(e,"images","resizeNearestNeighbor");V(s.rank===3||s.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${s.rank}.`),V(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),V(s.dtype==="float32"||s.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),V(r===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let o=s,a=!1;s.rank===3&&(a=!0,o=X(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let[]=t,i={images:o},l={alignCorners:n,halfPixelCenters:r,size:t},u=z.runKernel(jp,i,l);return a?X(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var H3=L({resizeNearestNeighbor_:PVe});function MVe(e,t="binary",n=!1,r=.5){let s=O(e,"image","threshold"),o=.2989,a=.587,i=.114,l=s.shape[0]*s.shape[1],u=Y(Kn([r]),255),c,p,d,f;if(V(s.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${s.rank}.`),V(s.shape[2]===3||s.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${s.shape[2]}.`),V(s.dtype==="int32"||s.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${s.dtype}.`),V(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),s.shape[2]===3){[c,p,d]=yr(s,[1,1,1],-1);let g=Y(c,o),x=Y(p,a),y=Y(d,i);f=Ie(Ie(g,x),y)}else f=e;if(t==="otsu"){let g=jA(we(lm(f),"int32"),Zs([]),256);u=zVe(g,l)}let h=n?_o(f,u):qn(f,u);return we(Y(h,255),"int32")}function zVe(e,t){let n=Kn([-1]),r=Kn([0]),s=Kn([0]),o,a,i,l,u,c;for(let p=0;p`Error in transform: image must be rank 4,but got rank ${a.rank}.`),V(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),V(o==null||o.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${o}.`);let l={image:a,transforms:i},u={interpolation:n,fillMode:r,fillValue:s,outputShape:o};return z.runKernel(cy,l,u)}var Wq=L({transform_:LVe});function BVe(e,t,n){V(t%1==0,()=>`bandPart(): numLower must be an integer, got ${t}.`),V(n%1==0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let r=O(e,"a","bandPart");V(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let s=r.shape,[o,a]=r.shape.slice(-2);if(!(t<=o))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${o}).`);if(!(n<=a))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${a}).`);t<0&&(t=o),n<0&&(n=a);let i=X(lc(0,o,1,"int32"),[-1,1]),l=lc(0,a,1,"int32"),u=je(i,l),c=gs(_o(u,Ke(+t,"int32")),To(u,Ke(-n,"int32"))),p=fn([o,a],r.dtype);return X(or(zr(X(r,[-1,o,a])).map(d=>Sn(c,d,p))),s)}var Gq=L({bandPart_:BVe});function VVe(e){let t;if(Array.isArray(e)){t=!1,V(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let s=e[0].shape[0];for(let o=1;o`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[o].shape[0]} vs. ${s})`)}else t=!0,e=yr(e,e.shape[0],0).map(s=>ro(s,[0]));V(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],r=e;for(let s=0;s{let o=r[s];if(s>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return jq(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),r=zr(X(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),s=[],o=[];r.forEach(l=>{let[u,c]=jq(l,t);s.push(u),o.push(c)});let a=X(or(s,0),e.shape),i=X(or(o,0),e.shape);return[a,i]}}function jq(e,t=!1){return z.tidy(()=>{V(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],r=e.shape[1],s=Cy(n),o=So(e),a=g2([[1]],[1,1]),i=So(a),l=n>=r?r:n;for(let u=0;u{let f=Tt(o,[u,u],[n-u,1]),h=_y(f),m=Tt(o,[u,u],[1,1]),g=Sn(qn(m,0),g2([[-1]]),g2([[1]])),x=je(m,Y(g,h)),y=Pe(f,x);y.shape[0]===1?i=So(a):i=on([a,Tt(y,[1,0],[y.shape[0]-1,y.shape[1]])],0);let b=jt(Pe(Bt(g,x),h)),A=Tt(o,[u,0],[n-u,r]),v=Y(b,i),w=St(i);if(u===0)o=je(A,Bt(v,Bt(w,A)));else{let N=je(A,Bt(v,Bt(w,A)));o=on([Tt(o,[0,0],[u,r]),N],0)}let k=St(v),I=Tt(s,[0,u],[n,s.shape[1]-u]);if(u===0)s=je(I,Bt(Bt(I,i),k));else{let N=je(I,Bt(Bt(I,i),k));s=on([Tt(s,[0,0],[n,u]),N],1)}return[i,o,s]}),ut([c,p,d])}return!t&&n>r&&(s=Tt(s,[0,0],[n,r]),o=Tt(o,[0,0],[r,r])),[s,o]})}var Hq=L({qr_:WVe});function GVe(e,t,n,r){let s=O(e,"indices","sparseFillEmptyRows"),o=O(t,"values","sparseFillEmptyRows"),a=O(n,"denseShape","sparseFillEmptyRows"),i=O(r,"defaultValue","sparseFillEmptyRows",o.dtype);if(s.rank!==2)throw new Error(`Indices should be Tensor2D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${o.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let l={indices:s,values:o,denseShape:a,defaultValue:i},u=z.runKernel(Qx,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var qq=L({sparseFillEmptyRows_:GVe});function UVe(e,t,n){let r=O(e,"inputIndices","sparseReshape"),s=O(t,"inputShape","sparseReshape"),o=O(n,"newShape","sparseReshape");if(r.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${o.shape}`);let a={inputIndices:r,inputShape:s,newShape:o},i=z.runKernel(ey,a);return{outputIndices:i[0],outputShape:i[1]}}var Kq=L({sparseReshape_:UVe});function jVe(e,t,n){let r=O(e,"data","sparseSegmentMean"),s=O(t,"indices","sparseSegmentMean"),o=O(n,"segmentIds","sparseSegmentMean");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape ${o.shape}`);let a={data:r,indices:s,segmentIds:o};return z.runKernel(ty,a)}var Xq=L({sparseSegmentMean_:jVe});function HVe(e,t,n){let r=O(e,"data","sparseSegmentSum"),s=O(t,"indices","sparseSegmentSum"),o=O(n,"segmentIds","sparseSegmentSum");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${s.shape}`);if(o.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape ${o.shape}`);let a={data:r,indices:s,segmentIds:o};return z.runKernel(ny,a)}var Zq=L({sparseSegmentSum_:HVe});function qVe(e,t,n,r,s,o,a,i){let l=O(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=O(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:n,nGramWidths:r,leftPad:s,rightPad:o,padWidth:a,preserveShortSequences:i},p={data:l,dataSplits:u},d=z.runKernel(ay,p,c);return{nGrams:d[0],nGramsSplits:d[1]}}var Yq=L({stringNGrams_:qVe});function KVe(e,t,n=!0){let r=O(e,"input","stringSplit","string"),s=O(t,"delimiter","stringSplit","string");if(r.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${r.shape}`);if(s.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${s.shape}`);let o={skipEmpty:n},a={input:r,delimiter:s},i=z.runKernel(iy,a,o);return{indices:i[0],values:i[1],shape:i[2]}}var Jq=L({stringSplit_:KVe});function XVe(e,t){let n=O(e,"input","stringToHashBucketFast","string"),r={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let s={input:n};return z.runKernel(ly,s,r)}var Qq=L({stringToHashBucketFast_:XVe});var so={flipLeftRight:Eq,grayscaleToRGB:Rq,resizeNearestNeighbor:H3,resizeBilinear:j3,rotateWithOffset:Dq,cropAndResize:_q,nonMaxSuppression:$q,nonMaxSuppressionAsync:Pq,nonMaxSuppressionWithScore:Mq,nonMaxSuppressionWithScoreAsync:zq,nonMaxSuppressionPadded:Lq,nonMaxSuppressionPaddedAsync:Bq,threshold:Vq,transform:Wq},eK={bandPart:Gq,gramSchmidt:Uq,qr:Hq};var y2={sparseFillEmptyRows:qq,sparseReshape:Kq,sparseSegmentMean:Xq,sparseSegmentSum:Zq},q3={stringNGrams:Yq,stringSplit:Jq,stringToHashBucketFast:Qq};var Fs=class extends E3{minimize(t,n=!1,r){let{value:s,grads:o}=this.computeGradients(t,r);if(r!=null){let a=r.map(i=>({name:i.name,tensor:o[i.name]}));this.applyGradients(a)}else this.applyGradients(o);return ut(o),n?s:(s.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(t,n){return _D(t,n)}dispose(){this.iterations_!=null&&ut(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Ke(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(t){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(t){return this.iterations_=(await t[0].tensor.data())[0],t.slice(1)}};Object.defineProperty(Fs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var b2=class extends Fs{constructor(t,n,r=null){super();this.learningRate=t,this.rho=n,this.epsilon=r,this.accumulatedGrads=[],this.accumulatedUpdates=[],r==null&&(this.epsilon=z.backend.epsilon())}applyGradients(t){(Array.isArray(t)?t.map(r=>r.name):Object.keys(t)).forEach((r,s)=>{let o=z.registeredVariables[r],a=!1;this.accumulatedGrads[s]==null&&(this.accumulatedGrads[s]={originalName:`${r}/accum_grad`,variable:le(()=>Ye(o).variable(a))}),this.accumulatedUpdates[s]==null&&(this.accumulatedUpdates[s]={originalName:`${r}/accum_var`,variable:le(()=>Ye(o).variable(a))});let i=Array.isArray(t)?t[s].tensor:t[r];if(i==null)return;let l=this.accumulatedGrads[s].variable,u=this.accumulatedUpdates[s].variable;le(()=>{let c=Ie(Y(l,this.rho),Y(Nt(i),1-this.rho)),p=Y(Pe(hn(Ie(u,this.epsilon)),hn(Ie(l,this.epsilon))),i),d=Ie(Y(u,this.rho),Y(Nt(p),1-this.rho));l.assign(c),u.assign(d);let f=Ie(Y(p,-this.learningRate),o);o.assign(f)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(ut(this.accumulatedGrads.map(t=>t.variable)),ut(this.accumulatedUpdates.map(t=>t.variable)))}async getWeights(){let t=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(t.map(n=>({name:n.originalName,tensor:n.variable})))}async setWeights(t){t=await this.extractIterations(t);let n=t.length/2,r=!1;this.accumulatedGrads=t.slice(0,n).map(s=>({originalName:s.name,variable:s.tensor.variable(r)})),this.accumulatedUpdates=t.slice(n,n*2).map(s=>({originalName:s.name,variable:s.tensor.variable(r)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(t,n){return new t(n.learningRate,n.rho,n.epsilon)}};b2.className="Adadelta";No(b2);var A2=class extends Fs{constructor(t,n=.1){super();this.learningRate=t,this.initialAccumulatorValue=n,this.accumulatedGrads=[]}applyGradients(t){(Array.isArray(t)?t.map(r=>r.name):Object.keys(t)).forEach((r,s)=>{let o=z.registeredVariables[r];if(this.accumulatedGrads[s]==null){let l=!1;this.accumulatedGrads[s]={originalName:`${r}/accumulator`,variable:le(()=>tc(o.shape,this.initialAccumulatorValue).variable(l))}}let a=Array.isArray(t)?t[s].tensor:t[r];if(a==null)return;let i=this.accumulatedGrads[s].variable;le(()=>{let l=Ie(i,Nt(a));i.assign(l);let u=Ie(Y(Pe(a,hn(Ie(l,z.backend.epsilon()))),-this.learningRate),o);o.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&ut(this.accumulatedGrads.map(t=>t.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let n=!1;this.accumulatedGrads=t.map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(t,n){return new t(n.learningRate,n.initialAccumulatorValue)}};A2.className="Adagrad";No(A2);var v2=class extends Fs{constructor(t,n,r,s=null){super();this.learningRate=t,this.beta1=n,this.beta2=r,this.epsilon=s,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],le(()=>{this.accBeta1=Ke(n).variable(),this.accBeta2=Ke(r).variable()}),s==null&&(this.epsilon=z.backend.epsilon())}applyGradients(t){let n=Array.isArray(t)?t.map(r=>r.name):Object.keys(t);le(()=>{let r=je(1,this.accBeta1),s=je(1,this.accBeta2);n.forEach((o,a)=>{let i=z.registeredVariables[o],l=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${o}/m`,variable:le(()=>Ye(i).variable(l))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${o}/v`,variable:le(()=>Ye(i).variable(l))});let u=Array.isArray(t)?t[a].tensor:t[o];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,p=this.accumulatedSecondMoment[a].variable,d=Ie(Y(c,this.beta1),Y(u,1-this.beta1)),f=Ie(Y(p,this.beta2),Y(Nt(u),1-this.beta2)),h=Pe(d,r),m=Pe(f,s);c.assign(d),p.assign(f);let g=Ie(Y(Pe(h,Ie(hn(m),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(Y(this.accBeta1,this.beta1)),this.accBeta2.assign(Y(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&ut(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedSecondMoment!=null&&ut(this.accumulatedSecondMoment.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(t.map(n=>({name:n.originalName,tensor:n.variable})))}async setWeights(t){t=await this.extractIterations(t),le(()=>{this.accBeta1.assign(Eo(this.beta1,this.iterations_+1)),this.accBeta2.assign(Eo(this.beta2,this.iterations_+1))});let n=t.length/2,r=!1;this.accumulatedFirstMoment=t.slice(0,n).map(s=>({originalName:s.name,variable:s.tensor.variable(r)})),this.accumulatedSecondMoment=t.slice(n,n*2).map(s=>({originalName:s.name,variable:s.tensor.variable(r)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(t,n){return new t(n.learningRate,n.beta1,n.beta2,n.epsilon)}};v2.className="Adam";No(v2);var w2=class extends Fs{constructor(t,n,r,s=null,o=0){super();this.learningRate=t,this.beta1=n,this.beta2=r,this.epsilon=s,this.decay=o,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],le(()=>{this.iteration=Ke(0).variable(),this.accBeta1=Ke(n).variable()}),s==null&&(this.epsilon=z.backend.epsilon())}applyGradients(t){let n=Array.isArray(t)?t.map(r=>r.name):Object.keys(t);le(()=>{let r=je(1,this.accBeta1),s=Pe(-this.learningRate,Ie(Y(this.iteration,this.decay),1));n.forEach((o,a)=>{let i=z.registeredVariables[o],l=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${o}/m`,variable:Ye(i).variable(l)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${o}/v`,variable:Ye(i).variable(l)});let u=Array.isArray(t)?t[a].tensor:t[o];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,p=this.accumulatedWeightedInfNorm[a].variable,d=Ie(Y(c,this.beta1),Y(u,1-this.beta1)),f=Y(p,this.beta2),h=sr(u),m=Qs(f,h);c.assign(d),p.assign(m);let g=Ie(Y(Pe(s,r),Pe(d,Ie(m,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ie(this.iteration,1)),this.accBeta1.assign(Y(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&ut(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedWeightedInfNorm!=null&&ut(this.accumulatedWeightedInfNorm.map(t=>t.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(t){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(t,n){return new t(n.learningRate,n.beta1,n.beta2,n.epsilon,n.decay)}};w2.className="Adamax";No(w2);var bm=class extends Fs{constructor(t){super();this.learningRate=t,this.setLearningRate(t)}applyGradients(t){(Array.isArray(t)?t.map(r=>r.name):Object.keys(t)).forEach((r,s)=>{let o=Array.isArray(t)?t[s].tensor:t[r];if(o==null)return;let a=z.registeredVariables[r];le(()=>{let i=Ie(Y(this.c,o),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(t){this.learningRate=t,this.c!=null&&this.c.dispose(),this.c=$n(Ke(-t))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(t){if(t=await this.extractIterations(t),t.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(t,n){return new t(n.learningRate)}};bm.className="SGD";No(bm);var k2=class extends bm{constructor(t,n,r=!1){super(t);this.learningRate=t,this.momentum=n,this.useNesterov=r,this.accumulations=[],this.m=Ke(this.momentum)}applyGradients(t){(Array.isArray(t)?t.map(r=>r.name):Object.keys(t)).forEach((r,s)=>{let o=z.registeredVariables[r];if(this.accumulations[s]==null){let l=!1;this.accumulations[s]={originalName:`${r}/momentum`,variable:le(()=>Ye(o).variable(l))}}let a=this.accumulations[s].variable,i=Array.isArray(t)?t[s].tensor:t[r];i!=null&&le(()=>{let l,u=Ie(Y(this.m,a),i);this.useNesterov?l=Ie(Y(this.c,Ie(i,Y(u,this.m))),o):l=Ie(Y(this.c,u),o),a.assign(u),o.assign(l)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&ut(this.accumulations.map(t=>t.variable))}setMomentum(t){this.momentum=t}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let n=!1;this.accumulations=t.map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(t,n){return new t(n.learningRate,n.momentum,n.useNesterov)}};k2.className="Momentum";No(k2);var I2=class extends Fs{constructor(t,n=.9,r=0,s=null,o=!1){super();if(this.learningRate=t,this.decay=n,this.momentum=r,this.epsilon=s,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=o,s==null&&(this.epsilon=z.backend.epsilon()),t==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(t){(Array.isArray(t)?t.map(r=>r.name):Object.keys(t)).forEach((r,s)=>{let o=z.registeredVariables[r],a=!1;this.accumulatedMeanSquares[s]==null&&(this.accumulatedMeanSquares[s]={originalName:`${r}/rms`,variable:le(()=>Ye(o).variable(a))}),this.accumulatedMoments[s]==null&&(this.accumulatedMoments[s]={originalName:`${r}/momentum`,variable:le(()=>Ye(o).variable(a))}),this.accumulatedMeanGrads[s]==null&&this.centered&&(this.accumulatedMeanGrads[s]={originalName:`${r}/mg`,variable:le(()=>Ye(o).variable(a))});let i=Array.isArray(t)?t[s].tensor:t[r];if(i==null)return;let l=this.accumulatedMeanSquares[s].variable,u=this.accumulatedMoments[s].variable;le(()=>{let c=Ie(Y(l,this.decay),Y(Nt(i),1-this.decay));if(this.centered){let p=this.accumulatedMeanGrads[s].variable,d=Ie(Y(p,this.decay),Y(i,1-this.decay)),f=Pe(Y(i,this.learningRate),hn(je(c,Ie(Nt(d),this.epsilon)))),h=Ie(Y(u,this.momentum),f);l.assign(c),p.assign(d),u.assign(h);let m=je(o,h);o.assign(m)}else{let p=Ie(Y(l,this.decay),Y(Nt(i),1-this.decay)),d=Ie(Y(u,this.momentum),Pe(Y(i,this.learningRate),hn(Ie(p,this.epsilon))));l.assign(p),u.assign(d);let f=je(o,d);o.assign(f)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&ut(this.accumulatedMeanSquares.map(t=>t.variable)),this.accumulatedMeanGrads!=null&&this.centered&&ut(this.accumulatedMeanGrads.map(t=>t.variable)),this.accumulatedMoments!=null&&ut(this.accumulatedMoments.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&t.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(t.map(n=>({name:n.originalName,tensor:n.variable})))}async setWeights(t){t=await this.extractIterations(t);let n=this.centered?t.length/3:t.length/2,r=!1;this.accumulatedMeanSquares=t.slice(0,n).map(s=>({originalName:s.name,variable:s.tensor.variable(r)})),this.accumulatedMoments=t.slice(n,n*2).map(s=>({originalName:s.name,variable:s.tensor.variable(r)})),this.centered&&(this.accumulatedMeanGrads=t.slice(n*2,n*3).map(s=>({originalName:s.name,variable:s.tensor.variable(r)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(t,n){return new t(n.learningRate,n.decay,n.momentum,n.epsilon,n.centered)}};I2.className="RMSProp";No(I2);var cc=class{static sgd(t){return new bm(t)}static momentum(t,n,r=!1){return new k2(t,n,r)}static rmsprop(t,n=.9,r=0,s=null,o=!1){return new I2(t,n,r,s,o)}static adam(t=.001,n=.9,r=.999,s=null){return new v2(t,n,r,s)}static adadelta(t=.001,n=.95,r=null){return new b2(t,n,r)}static adamax(t=.002,n=.9,r=.999,s=null,o=0){return new w2(t,n,r,s,o)}static adagrad(t,n=.1){return new A2(t,n)}};var Am={sgd:cc.sgd,momentum:cc.momentum,adadelta:cc.adadelta,adagrad:cc.adagrad,rmsprop:cc.rmsprop,adamax:cc.adamax,adam:cc.adam};var ZVe=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function C2(){return new Promise(e=>ZVe(()=>e()))}var M={};dn(M,{ERF_A1:()=>iWe,ERF_A2:()=>lWe,ERF_A3:()=>uWe,ERF_A4:()=>cWe,ERF_A5:()=>pWe,ERF_P:()=>aWe,PARALLELIZE_THRESHOLD:()=>K3,SELU_SCALE:()=>YD,SELU_SCALEALPHA:()=>ZD,applyActivation:()=>xm,assertAndGetBroadcastShape:()=>kt,assertAxesAreInnerMostDims:()=>ULe,assertParamsConsistent:()=>YVe,assignToTypedArray:()=>xWe,axesAreInnerMostDims:()=>RD,calculateShapes:()=>QMe,checkEinsumDimSizes:()=>kWe,combineLocations:()=>nq,complexWithEvenIndex:()=>hWe,complexWithOddIndex:()=>mWe,computeConv2DInfo:()=>Kh,computeConv3DInfo:()=>JH,computeDefaultPad:()=>fD,computeDilation2DInfo:()=>wze,computeOptimalWindowSize:()=>QVe,computeOutAndReduceShapes:()=>DD,computeOutShape:()=>JVe,computePool2DInfo:()=>dD,computePool3DInfo:()=>kze,convertConv2DDataFormat:()=>QH,decodeEinsumEquation:()=>vWe,eitherStridesOrDilationsAreOne:()=>hs,expandShapeToKeepDim:()=>Cl,exponent:()=>bWe,exponents:()=>yWe,fromStringArrayToUint8:()=>DWe,fromUint8ToStringArray:()=>RWe,getAxesPermutation:()=>$D,getBroadcastDims:()=>uLe,getComplexWithIndex:()=>gWe,getEinsumComputePath:()=>IWe,getEinsumPermutation:()=>wWe,getFusedBiasGradient:()=>gm,getFusedDyActivation:()=>mm,getImageCenter:()=>eWe,getInnerMostAxes:()=>jLe,getPermuted:()=>nWe,getReductionAxes:()=>An,getReshaped:()=>tWe,getReshapedPermuted:()=>rWe,getSliceBeginCoords:()=>sWe,getSliceSize:()=>oWe,getUndoAxesPermutation:()=>t2,isIdentityPermutation:()=>CWe,log:()=>Z9e,mergeRealAndImagArrays:()=>dWe,prepareAndValidate:()=>JMe,prepareSplitSize:()=>NWe,segment_util:()=>QD,shouldFuse:()=>ym,slice_util:()=>Cs,splitRealAndImagArrays:()=>fWe,tupleValuesAreOne:()=>va,upcastType:()=>Or,validateInput:()=>uD,validateUpdateShape:()=>BH,warn:()=>Aa});function YVe(e,t){let n=e[0].length;e.forEach((s,o)=>{V(s.length===n,()=>`Error in concat${n}D: rank of tensors[${o}] must be the same as the rank of the rest (${n})`)}),V(t>=0&&t`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let r=e[0];e.forEach((s,o)=>{for(let a=0;a`Error in concat${n}D: Shape of tensors[${o}] (${s}) does not match the shape of the rest (${r}) along the non-concatenated axis ${o}.`)})}function JVe(e,t){let n=e[0].slice();for(let r=1;r=t*2+1||a%2==1?o.push(a):s.push(a);r.push(...s),r.push(0),r.push(...o)}return r}function rWe(e,t,n,r=!0){let s=[];r?s.push(e[0]/n):s.push(e[0]*n);for(let o=1;o/g,tK=",",nK="...";function vWe(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(AWe,"").length)/JD.length;if(n<1)throw new Error("Equations without an arrow are not supported.");if(n>1)throw new Error(`Equation must contain exactly one arrow ("${JD}").`);let[r,s]=e.split(JD);V(r.indexOf(nK)===-1,()=>`The ellipsis notation ("${nK}") is not supported yet.`);let o=r.split(tK),a=o.length;if(t!==a)throw new Error(`Expected ${a} input tensors, received ${t}`);if(a>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let d=0;dh.indexOf(f)!==-1))throw new Error(`Output subscripts contain the label ${f} not present in the input subscripts.`);i.indexOf(f)===-1&&i.push(f)}for(let d=0;ds!==-1),{permutationIndices:n,expandDims:r}}function kWe(e,t,n){let r=new Array(e);for(let s=0;s`Expected dimension ${r[t[s][a]]} at axis ${a} of input shaped ${JSON.stringify(o)}, but got dimension ${o[a]}`)}}function IWe(e,t){let n=e,r=[],s=0;e.length===0&&n.push(-1),s=e.length+1;for(let a=0;at===n)}function SWe(e,t){let n=[];for(let r=0;r"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{let s=t.reduce((a,i)=>(i===-1&&(a+=1),a),0);V(s<=1,()=>"There should be only one negative value in split array.");let o=t.indexOf(-1);if(o!==-1){let a=t.reduce((i,l)=>l>0?i+l:i);t[o]=e.shape[n]-a}V(e.shape[n]===t.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}var QD={};dn(QD,{collectGatherOpShapeInfo:()=>EWe,computeOutShape:()=>_We,segOpComputeOptimalWindowSize:()=>TWe});function TWe(e,t){let n=!1,r;for(e<=K3?(r=e,n=!0):r=hx(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=hx(e,r+1);return r}function _We(e,t,n){let r=[],s=e.length;for(let o=0;os))throw new Error(`Expect batchDims in the range of [-${s}, ${s}], but got ${r}`);if(r<0&&(r+=s),r>o)throw new Error(`batchDims (${r}) must be less than rank(x) ( ${o}).`);if(nxy(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function DWe(e){return e.map(t=>gy(t))}var Ts={};dn(Ts,{nonMaxSuppressionV3Impl:()=>W3,nonMaxSuppressionV4Impl:()=>G3,nonMaxSuppressionV5Impl:()=>U3,whereImpl:()=>z3});var X3={kernelName:pp,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,Bi(we(n,"float32"),-1))}}};var rK={kernelName:eu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Nt(we(n,"float32")),s=hn(je(Ke(1),r));return jt(Pe(e,s))}}}};var sK={kernelName:tu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=hn(je(Nt(we(n,"float32")),1));return Pe(e,r)}}}};var oK={kernelName:Ri,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=e,l=An(n.shape,s);return l.length>0&&(i=ze(i,l)),X(i,n.shape)},b:()=>{let i=e,l=An(r.shape,s);return l.length>0&&(i=ze(i,l)),X(i,r.shape)}}}};var aK={kernelName:dp,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,s)=>{n[s]=()=>e.clone()}),n}};var iK={kernelName:fp,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ye(n)}}};var lK={kernelName:hp,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ye(n)}}};var uK={kernelName:nu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,hn(je(Ke(1),Nt(we(n,"float32")))))}}};var cK={kernelName:ru,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=hn(Ie(Ke(1),Nt(we(n,"float32"))));return Pe(e,r)}}}};var pK={kernelName:au,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=Ie(Nt(n),Nt(r)),l=Y(e,Pe(r,i)),u=An(n.shape,s);return u.length>0&&(l=ze(l,u)),X(l,n.shape)},b:()=>{let i=Ie(Nt(n),Nt(r)),l=jt(Y(e,Pe(n,i))),u=An(r.shape,s);return u.length>0&&(l=ze(l,u)),X(l,r.shape)}}}};var dK={kernelName:su,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,Ie(Nt(we(n,"float32")),1))}}};var fK={kernelName:ou,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,je(Ke(1),Nt(we(n,"float32"))))}}};function $We(e,t,n,r,s,o){let a=O(e,"dy","avgPool3dGrad"),i=O(t,"input","avgPool3dGrad"),l=a,u=i,c=!1;i.rank===4&&(c=!0,l=X(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]]),u=X(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),V(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),V(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),o!=null&&V(Jt(s),()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${o} but got pad ${s}.`);let p={dy:l,input:u},d={filterSize:n,strides:r,pad:s,dimRoundingMode:o},f=z.runKernel(bx,p,d);return c?X(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}var hK=L({avgPool3dGrad_:$We});var mK={kernelName:gp,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:o,pad:a,dimRoundingMode:i}=n;return{x:()=>hK(e,r,s,o,a,i)}}};function FWe(e,t,n,r,s){let o=O(e,"dy","avgPoolGrad"),a=O(t,"input","avgPoolGrad");V(a.rank===o.rank,()=>`Rank of input (${a.rank}) does not match rank of dy (${o.rank})`);let i=a,l=o,u=!1;a.rank===3&&(u=!0,i=X(a,[1,a.shape[0],a.shape[1],a.shape[2]]),l=X(o,[1,o.shape[0],o.shape[1],o.shape[2]])),V(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),V(i.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${i.rank}.`);let c={dy:l,input:i},p={filterSize:n,strides:r,pad:s},d=z.runKernel(yx,c,p);return u?X(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var gK=L({avgPoolGrad_:FWe});var xK={kernelName:mp,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:o,pad:a}=n;return{x:()=>gK(e,r,s,o,a)}}};var yK={kernelName:xp,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,s]=t,{transposeA:o,transposeB:a}=n;return!o&&!a?{a:()=>Bt(e,s,!1,!0),b:()=>Bt(r,e,!0,!1)}:!o&&a?{a:()=>Bt(e,s,!1,!1),b:()=>Bt(e,r,!0,!1)}:o&&!a?{a:()=>Bt(s,e,!1,!0),b:()=>Bt(r,e,!1,!1)}:{a:()=>Bt(s,e,!0,!0),b:()=>Bt(e,r,!0,!0)}}};var bK={kernelName:yp,gradFunc:(e,t,n)=>{let{blockShape:r,crops:s}=n;return{x:()=>ac(e,r,s)}}};var AK={kernelName:Ej,gradFunc:(e,t,n)=>{let r=n,s=r.inputShape,o=r.shape,a=Array.from(o);for(let l=s.length-1;l>=0;l--)if(s[l]===o[l])a[l]=1;else if(s[l]!==1)throw new Error(`broadcastTo(): [${s}] cannot be broadcast to [${o}].`);let i=[];for(let l=0;l1&&i.push(l);return{x:()=>ze(e,i,!0)}}};var vK={kernelName:bl,gradFunc:e=>({x:()=>e.clone()})};var wK={kernelName:iu,gradFunc:e=>({x:()=>Ye(e)})};var kK={kernelName:lu,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:s,clipValueMax:o}=n;return{x:()=>Sn(gs(To(r,s),_o(r,o)),e,Ye(e))}}};var IK={kernelName:bp,inputsToSave:["x"],gradFunc:X3.gradFunc};var CK={kernelName:Ap,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(l=>l.shape),{axis:s}=n,o=Sr(s,t[0].shape)[0],a=r.map(l=>l[o]);return yr(e,a,o).map(l=>()=>l)}};var SK={kernelName:vp,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{dilations:o,strides:a,pad:i,dataFormat:l}=n;return V(va(o),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${o}'`),{x:()=>Iy(r.shape,e,s,a,i,l),filter:()=>Ey(r,e,s.shape,a,i,l)}}};var NK={kernelName:wp,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{strides:o,pad:a,dataFormat:i,dimRoundingMode:l}=n;return{dy:()=>Js(e,s,o,a,i,1,l),filter:()=>Ey(e,r,s.shape,o,a,i,l)}}};function OWe(e,t,n,r,s){let o=e;e.rank===4&&(o=X(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let a=t;a.rank===4&&(a=X(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),V(o.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${o.shape}.`),V(a.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${a.shape}.`),V(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),V(o.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${o.shape[4]}) must match input depth in filter (${n[3]}.`),V(a.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${a.shape[4]}) must match output depth for filter (${n[4]}).`);let i={x:o,dy:a},l={strides:r,pad:s,filterShape:n};return z.runKernel(kx,i,l)}var TK=L({conv3DBackpropFilter_:OWe});var _K={kernelName:kp,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:o}=n;V(va(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);let[a,i]=t;return{x:()=>$3(a.shape,e,i,s,o),filter:()=>TK(a,e,i.shape,s,o)}}};var EK={kernelName:uu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(jt(pm(we(n,"float32"))),e)}}};var RK={kernelName:cu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(dm(we(n,"float32")),e)}}};var DK={kernelName:Ip,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s,exclusive:o,reverse:a}=n;return{x:()=>{let i=$D([s],r.rank),l=Qh(e,s,o,!a);return i!=null&&(l=St(l,i)),l}}}};var $K={kernelName:Cp,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:o,dimRoundingMode:a}=n,i=r==null?[1,1]:r;V(va(i),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);let[l,u]=t;return V(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),V(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),V(l.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),V(hs(s,i),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${s} and dilations '${i}'.`),a!=null&&V(Jt(o),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`),{x:()=>V3(l.shape,e,u,s,o,i,a),filter:()=>B3(l,e,u.shape,s,o,i,a)}}};var FK={kernelName:Sp,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,o={x:r,filter:s,dy:e},a={x:r,filter:s,dy:e};return{x:()=>z.runKernel(NA,o,n),filter:()=>z.runKernel(TA,a,n)}}};var OK={kernelName:du,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>z.runKernel(Rx,r)}}};var PK={kernelName:fu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=Y(Zr(jt(Nt(n))),2/Math.sqrt(Math.PI));return{x:()=>Y(e,r)}}};var MK={kernelName:hu,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,n)}}};var zK={kernelName:Np,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>X(e,n.shape)}}};var LK={kernelName:mu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,Zr(n))}}};var BK={kernelName:gu,gradFunc:e=>({x:()=>Ye(e)})};var VK={kernelName:xu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=Pe(e,we(r,"float32")),l=An(n.shape,s);return l.length>0?X(ze(i,l),n.shape):i},b:()=>{let i=Y(e,we(n,"float32")),l=An(r.shape,s);l.length>0&&(i=X(ze(i,l),r.shape));let u=Nt(r);return jt(Pe(i,we(u,"float32")))}}}};var WK={kernelName:Tp,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[s,o,a,i]=t,l=i==null?Ke(1):i,u=An(o.shape,s.shape),c=[];if(o.rank===1){for(let A=0;Ao.rank===1?X(Y(Y(e,Yr(X(f,[1,1,1,o.shape[0]]),c)),l),s.shape):X(Y(Y(e,f),l),s.shape),mean:()=>{let A=Y(Y(f,Ke(-1)),d);return o.rank===1&&(A=ze(A,u)),X(A,o.shape)},variance:()=>{let A=Y(Y(h,p),d);return o.rank===1&&(A=ze(A,u)),X(A,o.shape)},scale:()=>{let A=Y(p,f),v=Y(e,A);return o.rank===1&&(v=ze(v,u)),X(v,o.shape)},offset:()=>{let A=e;return o.rank===1&&(A=ze(A,u)),X(A,o.shape)}}}};var GK={kernelName:_p,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,s]=t,{axis:o}=n,a=Sr(o,r.shape)[0];return{x:()=>{let l=r.shape,u=s.size,c=l.slice(0,a),p=c.length,d=l.slice(o,l.length).slice(1),f=d.length,h=UK(0,p),m=UK(p+1,p+1+f),g=jK([c,[u],d]),x=X(e,g),y=X(s,[u]),b=jK([[p],h,m]),A=St(x,b),v=M3(A,y,r.shape[a]),w=t2(b);return v=St(v,w),v},indices:()=>s}}};function UK(e,t){let n=[];for(let r=e;r{let[n,r]=t;return{a:()=>Ye(n),b:()=>Ye(r)}}};var qK={kernelName:Al,gradFunc:e=>({x:()=>we(e,"float32")})};var KK={kernelName:bu,gradFunc:e=>({x:()=>Ye(e)})};var XK={kernelName:Au,gradFunc:e=>({x:()=>Ye(e)})};var ZK={kernelName:vu,gradFunc:e=>({x:()=>Ye(e)})};var YK={kernelName:Ep,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:s}=n,o=qn(r,0);return{x:()=>Sn(o,e,Y(e,s))}}};var JK={kernelName:ku,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,Ie(n,1))}}};var QK={kernelName:wu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,we(n,"float32"))}}};var eX={kernelName:Rj,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n;return{logits:()=>{let o=!0,a=Zr(r);return je(e,Y(ze(e,s,o),a))}}}};function PWe(e,t,n,r=5,s=1,o=1,a=.5){let i={x:e,y:t,dy:n},l={depthRadius:r,bias:s,alpha:o,beta:a};return z.runKernel(Lx,i,l)}var tX=L({localResponseNormalizationBackprop_:PWe});var nX={kernelName:Rp,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{depthRadius:o,bias:a,alpha:i,beta:l}=n;return{x:()=>tX(r,s,e,o,a,i,l)}}};function Z3(e,t,n,r){return t.rankY(e,we(Ss(n,t),e.dtype))}}var e$={kernelName:Dp,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:s}=r,o=t[0],a=t[1],i=Sr(s,o.shape),l=Z3(e,a,o,i);return{x:()=>l.x()}}};var rX={kernelName:Iu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>Y(e,we(To(n,r),"float32")),b:()=>Y(e,we(tm(n,r),"float32"))}}};function MWe(e,t,n,r,s,o,a){let i=O(e,"dy","maxPool3dGrad"),l=O(t,"input","maxPool3dGrad"),u=O(n,"output","maxPool3dGrad"),c=i,p=l,d=u,f=!1;l.rank===4&&(f=!0,c=X(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),p=X(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),d=X(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),V(c.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`),V(p.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${p.rank}.`),V(d.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${d.rank}.`),a!=null&&V(Jt(o),()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);let h={dy:c,input:p,output:d},m={filterSize:r,strides:s,pad:o,dimRoundingMode:a},g=z.runKernel(Vx,h,m);return f?X(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var sX=L({maxPool3dGrad_:MWe});var oX={kernelName:Fp,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l}=n;return{x:()=>sX(e,r,s,o,a,i,l)}}};function zWe(e,t,n,r,s,o,a){let i=O(e,"dy","maxPoolGrad"),l=O(t,"input","maxPoolGrad"),u=O(n,"output","maxPoolGrad");V(l.rank===i.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${i.rank})`),V(i.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${i.rank}.`),V(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),a!=null&&V(Jt(o),()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);let c={dy:i,input:l,output:u},p={filterSize:r,strides:s,pad:o,dimRoundingMode:a};return z.runKernel(Bx,c,p)}var aX=L({maxPoolGrad_:zWe});var iX={kernelName:$p,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:o,strides:a,pad:i}=n;return{x:()=>aX(e,r,s,o,a,i)}}};var lX={kernelName:Op,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n,o=Sr(s,r.shape),i=DD(r.shape,o)[1],l=bn(i);return{x:()=>{let c=r.shape.slice();o.forEach(f=>{c[f]=1});let p=X(e,c);return Pe(Y(p,eo(r.shape,"float32")),l)}}}};var uX={kernelName:Pp,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:s}=r,[o,a]=t,i=Sr(s,o.shape),l=Z3(e,a,o,i);return{x:()=>l.x()}}};var cX={kernelName:Cu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>Y(e,we(_o(n,r),"float32")),b:()=>Y(e,we(qn(n,r),"float32"))}}};var pX={kernelName:Mp,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,o=s.map(a=>a[0]);return{x:()=>Tt(e,o,r.shape)}}};var dX={kernelName:Su,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=An(n.shape,s);return i.length>0?X(ze(e,i),n.shape):e},b:()=>{let i=Y(e,jt(Mi(Pe(n,r)))),l=An(r.shape,s);return l.length>0?X(ze(i,l),r.shape):i}}}};var fX={kernelName:Nu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=Y(e,we(r,"float32")),l=An(n.shape,s);return l.length>0?X(ze(i,l),n.shape):i},b:()=>{let i=Y(e,we(n,"float32")),l=An(r.shape,s);return l.length>0?X(ze(i,l),r.shape):i}}}};var hX={kernelName:zp,gradFunc:e=>({x:()=>jt(e)})};var mX={kernelName:Bp,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>fn(n.shape,"float32")}}};var gX={kernelName:Lp,gradFunc:e=>({x:()=>Ye(e)})};var xX={kernelName:Vp,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return zr(e,r).map(o=>()=>o)}};var t$={kernelName:Wp,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,o=s.map(a=>a[0]);return{x:()=>Tt(e,o,r.shape)}}};var yX={kernelName:Tu,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,s]=t,o=n,a=r,i=kt(o.shape,a.shape);return{a:()=>{let c=we(a,"float32"),p=Y(e,Y(c,Eo(o,je(c,Ke(1))))),d=An(o.shape,i);return d.length>0&&(p=ze(p,d)),X(p,o.shape)},b:()=>{let c=qn(o,0),p=Sn(c,Ns(o),Ye(o)),d=Y(e,Y(s,p)),f=An(a.shape,i);return f.length>0&&(d=ze(d,f)),X(d,a.shape)}}}};var bX={kernelName:Gp,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,s=qn(n,0);return{x:()=>Sn(s,e,Y(e,r)),alpha:()=>{let o=Sn(s,Ye(e),Y(e,n)),a=An(r.shape,e.shape);return a.length>0&&(o=ze(o,a)),X(o,r.shape)}}}};var AX={kernelName:pu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=Pe(e,we(r,"float32")),l=An(n.shape,s);return l.length>0?X(ze(i,l),n.shape):i},b:()=>{let i=Y(e,we(n,"float32")),l=An(r.shape,s);l.length>0&&(i=X(ze(i,l),r.shape));let u=Nt(r);return jt(Pe(i,we(u,"float32")))}}}};var vX={kernelName:_u,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,jt(Nt(n)))}}};var wX={kernelName:Ru,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=Y(_o(n,6),Bi(n));return{x:()=>Y(e,we(r,"float32"))}}};var kX={kernelName:Eu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,we(Bi(n),"float32"))}}};var IX={kernelName:Up,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>X(e,n.shape)}}};var CX={kernelName:Hp,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>z.runKernel(Yx,s,n)}}};var SX={kernelName:jp,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>z.runKernel(Zx,s,n)}}};var NX={kernelName:qp,gradFunc:(e,t,n)=>{let{dims:r}=n,s=Sr(r,e.shape);return{x:()=>no(e,s)}}};var TX={kernelName:Du,gradFunc:e=>({x:()=>Ye(e)})};var _X={kernelName:$u,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jt(Pe(e,Y(Eo(n,1.5),2)))}}};var EX={kernelName:Kp,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>we(Ye(n),"float32"),t:()=>Y(e,we(n,e.dtype)),e:()=>Y(e,we(rc(n),e.dtype))}}};var RX={kernelName:Fu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=qn(n,Ke(0)),s=Ke(ZD),o=Ke(YD),a=Y(e,o),i=Y(Y(e,s),Zr(we(n,"float32")));return Sn(r,a,i)}}}};var DX={kernelName:zu,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,Y(n,je(Ke(1),n)))}}};var $X={kernelName:Mu,gradFunc:e=>({x:()=>Ye(e)})};var FX={kernelName:Ou,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(ec(we(n,"float32")),e)}}};var OX={kernelName:Pu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(Jh(we(n,"float32")),e)}}};var PX={kernelName:Xp,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:s,size:o}=n,a=r.shape,[i,l]=cD(r,s,o),u=[];for(let c=0;czi(e,u)}}};var MX={kernelName:Qp,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:s}=n,o=!0,a=Y(e,r);return{logits:()=>je(a,Y(ze(a,[s],o),r))}}};var zX={kernelName:Lu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,ra(n))}}};var n$={kernelName:Yp,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:s}=n;return{x:()=>Ju(e,r,s)}}};var r$={kernelName:Jp,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>on(e,r)}}};var LX={kernelName:Bu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,Y(hn(we(n,"float32")),2))}}};var BX={kernelName:sy,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(e,Y(we(n,"float32"),2))}}};var VX={kernelName:Vu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=Ke(2);return{a:()=>Y(e,Y(s,je(n,r))),b:()=>Y(e,Y(s,je(r,n)))}}};var WX={kernelName:ju,gradFunc:e=>({x:()=>Ye(e)})};var GX={kernelName:Wu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=kt(n.shape,r.shape);return{a:()=>{let i=e,l=An(n.shape,s);return l.length>0&&(i=ze(i,l)),X(i,n.shape)},b:()=>{let i=e,l=An(r.shape,s);return l.length>0&&(i=ze(i,l)),X(jt(i),r.shape)}}}};var UX={kernelName:Zp,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,s=r.shape.slice(),{axis:o}=n;Sr(o,r.shape).forEach(u=>{s[u]=1});let i=X(e,s),l=Y(i,eo(r.shape,"float32"));return{x:()=>l}}};var jX={kernelName:Gu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Pe(e,Nt(ec(n)))}}};var HX={kernelName:Uu,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Y(je(Ke(1),Nt(n)),e)}}};var qX={kernelName:vl,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:s}=n;return{x:()=>{let a=Ye(r);if(r.rank===1)for(let i=0;i{let r=n,{perm:s}=r,o=t2(s);return{x:()=>St(e,o)}}};var XX={kernelName:td,gradFunc:(e,t,n)=>{let r=n,{axis:s}=r;return{value:()=>or(e,s)}}};var ZX={kernelName:nd,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>LWe(e,n)}}};function LWe(e,t){let n=Qs(t,Ye(t)),r=Il(e,n),s=To(t,Ke(0,"int32")),o=r.rank-s.rank;for(let i=0;i({x:()=>Ye(e)})};var BWe=[X3,rK,sK,oK,aK,iK,lK,uK,cK,pK,dK,fK,mK,xK,yK,bK,AK,vK,wK,kK,IK,CK,NK,SK,_K,EK,RK,DK,$K,FK,AX,OK,PK,MK,zK,LK,VK,BK,WK,GK,HK,qK,KK,XK,ZK,YK,JK,QK,eX,nX,e$,e$,rX,oX,iX,lX,uX,cX,pX,dX,fX,hX,mX,gX,xX,t$,t$,yX,bX,vX,wX,kX,IX,CX,SX,NX,TX,_X,EX,RX,DX,$X,FX,OX,PX,MX,zX,n$,n$,r$,r$,LX,VX,BX,WX,GX,UX,jX,HX,qX,KX,XX,ZX,YX];for(let e of BWe)$j(e);Z().prototype.abs=function(){return this.throwIfDisposed(),sr(this)};Z().prototype.acos=function(){return this.throwIfDisposed(),PA(this)};Z().prototype.acosh=function(){return this.throwIfDisposed(),MA(this)};Z().prototype.add=function(e){return this.throwIfDisposed(),Ie(this,e)};Z().prototype.all=function(e,t){return this.throwIfDisposed(),qh(this,e,t)};Z().prototype.any=function(e,t){return this.throwIfDisposed(),cd(this,e,t)};Z().prototype.argMax=function(e){return this.throwIfDisposed(),Fi(this,e)};Z().prototype.argMin=function(e){return this.throwIfDisposed(),zA(this,e)};Z().prototype.asScalar=function(){return this.throwIfDisposed(),V(this.size===1,()=>"The array must have only 1 element."),X(this,[])};Z().prototype.asType=function(e){return this.throwIfDisposed(),we(this,e)};Z().prototype.as1D=function(){return this.throwIfDisposed(),X(this,[this.size])};Z().prototype.as2D=function(e,t){return this.throwIfDisposed(),X(this,[e,t])};Z().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),X(this,[e,t,n])};Z().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),X(this,[e,t,n,r])};Z().prototype.as5D=function(e,t,n,r,s){return this.throwIfDisposed(),X(this,[e,t,n,r,s])};Z().prototype.asin=function(){return this.throwIfDisposed(),LA(this)};Z().prototype.asinh=function(){return this.throwIfDisposed(),BA(this)};Z().prototype.atan=function(){return this.throwIfDisposed(),VA(this)};Z().prototype.atan2=function(e){return this.throwIfDisposed(),WA(this,e)};Z().prototype.atanh=function(){return this.throwIfDisposed(),GA(this)};Z().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),Yu(this,e,t,n,r)};Z().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Ju(this,e,t)};Z().prototype.batchNorm=function(e,t,n,r,s){return this.throwIfDisposed(),qa(this,e,t,n,r,s)};Z().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Qu(this,e)};Z().prototype.cast=function(e){return this.throwIfDisposed(),we(this,e)};Z().prototype.ceil=function(){return this.throwIfDisposed(),HA(this)};Z().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),Pr(this,e,t)};Z().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof Ot&&(e=[e]),on([this,...e],t)};Z().prototype.conv1d=function(e,t,n,r,s,o){return this.throwIfDisposed(),Zh(this,e,t,n,r,s,o)};Z().prototype.conv2dTranspose=function(e,t,n,r,s){return this.throwIfDisposed(),Yh(this,e,t,n,r,s)};Z().prototype.conv2d=function(e,t,n,r,s,o){return this.throwIfDisposed(),Js(this,e,t,n,r,s,o)};Z().prototype.cos=function(){return this.throwIfDisposed(),ec(this)};Z().prototype.cosh=function(){return this.throwIfDisposed(),Jh(this)};Z().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),Qh(this,e,t,n)};Z().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),KA(this,e,t)};Z().prototype.depthwiseConv2d=function(e,t,n,r,s,o){return this.throwIfDisposed(),Oi(this,e,t,n,r,s,o)};Z().prototype.dilation2d=function(e,t,n,r,s){return this.throwIfDisposed(),XA(this,e,t,n,r,s)};Z().prototype.divNoNan=function(e){return this.throwIfDisposed(),ZA(this,e)};Z().prototype.div=function(e){return this.throwIfDisposed(),Pe(this,e)};Z().prototype.dot=function(e){return this.throwIfDisposed(),tq(this,e)};Z().prototype.elu=function(){return this.throwIfDisposed(),Pi(this)};Z().prototype.equal=function(e){return this.throwIfDisposed(),Ss(this,e)};Z().prototype.erf=function(){return this.throwIfDisposed(),YA(this)};Z().prototype.exp=function(){return this.throwIfDisposed(),Zr(this)};Z().prototype.expandDims=function(e){return this.throwIfDisposed(),Mr(this,e)};Z().prototype.expm1=function(){return this.throwIfDisposed(),JA(this)};Z().prototype.fft=function(){return this.throwIfDisposed(),fm(this)};Z().prototype.flatten=function(){return this.throwIfDisposed(),X(this,[this.size])};Z().prototype.floor=function(){return this.throwIfDisposed(),Mi(this)};Z().prototype.floorDiv=function(e){return this.throwIfDisposed(),Hh(this,e)};Z().prototype.gather=function(e,t){return this.throwIfDisposed(),Il(this,e,t)};Z().prototype.greaterEqual=function(e){return this.throwIfDisposed(),To(this,e)};Z().prototype.greater=function(e){return this.throwIfDisposed(),qn(this,e)};Z().prototype.ifft=function(){return this.throwIfDisposed(),hd(this)};Z().prototype.irfft=function(){return this.throwIfDisposed(),p2(this)};Z().prototype.isFinite=function(){return this.throwIfDisposed(),SD(this)};Z().prototype.isInf=function(){return this.throwIfDisposed(),ND(this)};Z().prototype.isNaN=function(){return this.throwIfDisposed(),QA(this)};Z().prototype.leakyRelu=function(e){return this.throwIfDisposed(),nc(this,e)};Z().prototype.lessEqual=function(e){return this.throwIfDisposed(),_o(this,e)};Z().prototype.less=function(e){return this.throwIfDisposed(),tm(this,e)};Z().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),e2(this,e,t,n,r)};Z().prototype.logSigmoid=function(){return this.throwIfDisposed(),ED(this)};Z().prototype.logSoftmax=function(e){return this.throwIfDisposed(),rm(this,e)};Z().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),rq(this,e,t)};Z().prototype.log=function(){return this.throwIfDisposed(),Ns(this)};Z().prototype.log1p=function(){return this.throwIfDisposed(),nm(this)};Z().prototype.logicalAnd=function(e){return this.throwIfDisposed(),gs(this,e)};Z().prototype.logicalNot=function(){return this.throwIfDisposed(),rc(this)};Z().prototype.logicalOr=function(e){return this.throwIfDisposed(),sm(this,e)};Z().prototype.logicalXor=function(e){return this.throwIfDisposed(),sq(this,e)};Z().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Bt(this,e,t,n)};Z().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),sc(this,e,t,n,r)};Z().prototype.max=function(e,t){return this.throwIfDisposed(),ms(this,e,t)};Z().prototype.maximum=function(e){return this.throwIfDisposed(),Qs(this,e)};Z().prototype.mean=function(e,t){return this.throwIfDisposed(),Nn(this,e,t)};Z().prototype.min=function(e,t){return this.throwIfDisposed(),dd(this,e,t)};Z().prototype.minimum=function(e){return this.throwIfDisposed(),oc(this,e)};Z().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),r2(this,e,t)};Z().prototype.mod=function(e){return this.throwIfDisposed(),s2(this,e)};Z().prototype.mul=function(e){return this.throwIfDisposed(),Y(this,e)};Z().prototype.neg=function(){return this.throwIfDisposed(),jt(this)};Z().prototype.norm=function(e,t,n){return this.throwIfDisposed(),_y(this,e,t,n)};Z().prototype.notEqual=function(e){return this.throwIfDisposed(),Sl(this,e)};Z().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),ud(this,e,t,n)};Z().prototype.onesLike=function(){return this.throwIfDisposed(),Nr(this)};Z().prototype.pad=function(e,t){return this.throwIfDisposed(),zi(this,e,t)};Z().prototype.pool=function(e,t,n,r,s){return this.throwIfDisposed(),oq(this,e,t,n,r,s)};Z().prototype.pow=function(e){return this.throwIfDisposed(),Eo(this,e)};Z().prototype.prelu=function(e){return this.throwIfDisposed(),ic(this,e)};Z().prototype.prod=function(e,t){return this.throwIfDisposed(),om(this,e,t)};Z().prototype.reciprocal=function(){return this.throwIfDisposed(),a2(this)};Z().prototype.relu=function(){return this.throwIfDisposed(),to(this)};Z().prototype.relu6=function(){return this.throwIfDisposed(),im(this)};Z().prototype.reshapeAs=function(e){return this.throwIfDisposed(),X(this,e.shape)};Z().prototype.reshape=function(e){return this.throwIfDisposed(),X(this,e)};Z().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),j3(this,e,t,n)};Z().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),H3(this,e,t,n)};Z().prototype.reverse=function(e){return this.throwIfDisposed(),no(this,e)};Z().prototype.rfft=function(){return this.throwIfDisposed(),d2(this)};Z().prototype.round=function(){return this.throwIfDisposed(),lm(this)};Z().prototype.rsqrt=function(){return this.throwIfDisposed(),um(this)};Z().prototype.selu=function(){return this.throwIfDisposed(),cm(this)};Z().prototype.separableConv2d=function(e,t,n,r,s,o){return this.throwIfDisposed(),i2(this,e,t,n,r,s,o)};Z().prototype.sigmoid=function(){return this.throwIfDisposed(),ra(this)};Z().prototype.sign=function(){return this.throwIfDisposed(),l2(this)};Z().prototype.sin=function(){return this.throwIfDisposed(),pm(this)};Z().prototype.sinh=function(){return this.throwIfDisposed(),dm(this)};Z().prototype.slice=function(e,t){return this.throwIfDisposed(),Tt(this,e,t)};Z().prototype.softmax=function(e){return this.throwIfDisposed(),uc(this,e)};Z().prototype.softplus=function(){return this.throwIfDisposed(),Ka(this)};Z().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),ac(this,e,t)};Z().prototype.split=function(e,t){return this.throwIfDisposed(),yr(this,e,t)};Z().prototype.sqrt=function(){return this.throwIfDisposed(),hn(this)};Z().prototype.square=function(){return this.throwIfDisposed(),Nt(this)};Z().prototype.squaredDifference=function(e){return this.throwIfDisposed(),f2(this,e)};Z().prototype.squeeze=function(e){return this.throwIfDisposed(),ro(this,e)};Z().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof Ot?[this,e]:[this,...e];return or(n,t)};Z().prototype.step=function(e){return this.throwIfDisposed(),Bi(this,e)};Z().prototype.stridedSlice=function(e,t,n,r,s,o,a,i){return this.throwIfDisposed(),h2(this,e,t,n,r,s,o,a,i)};Z().prototype.sub=function(e){return this.throwIfDisposed(),je(this,e)};Z().prototype.sum=function(e,t){return this.throwIfDisposed(),ze(this,e,t)};Z().prototype.tan=function(){return this.throwIfDisposed(),m2(this)};Z().prototype.tanh=function(){return this.throwIfDisposed(),pd(this)};Z().prototype.tile=function(e){return this.throwIfDisposed(),Yr(this,e)};Z().prototype.toBool=function(){return this.throwIfDisposed(),we(this,"bool")};Z().prototype.toFloat=function(){return this.throwIfDisposed(),we(this,"float32")};Z().prototype.toInt=function(){return this.throwIfDisposed(),we(this,"int32")};Z().prototype.topk=function(e,t){return this.throwIfDisposed(),x2(this,e,t)};Z().prototype.transpose=function(e){return this.throwIfDisposed(),St(this,e)};Z().prototype.unique=function(e){return this.throwIfDisposed(),Ty(this,e)};Z().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),M3(this,e,t)};Z().prototype.unstack=function(e){return this.throwIfDisposed(),zr(this,e)};Z().prototype.where=function(e,t){return this.throwIfDisposed(),Sn(e,this,t)};Z().prototype.zerosLike=function(){return this.throwIfDisposed(),Ye(this)};var s$;function br(){return s$==null&&(s$=YH().epsilon()),s$}function oo(){return"channelsLast"}var sa=class extends Error{constructor(t){super(t);Object.setPrototypeOf(this,sa.prototype)}},Os=class extends Error{constructor(t){super(t);Object.setPrototypeOf(this,Os.prototype)}},ne=class extends Error{constructor(t){super(t);Object.setPrototypeOf(this,ne.prototype)}},st=class extends Error{constructor(t){super(t);Object.setPrototypeOf(this,st.prototype)}},S2=class extends Error{constructor(t){super(t);Object.setPrototypeOf(this,S2.prototype)}};function Ya(e,t){if(Array.isArray(e)){let n=[];for(let r=0;rn.toUpperCase())}var Qa={};function Ry(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function a$(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>a$(t));else{let t=Object.keys(e);for(let n of t){let r=e[n];r!=null&&typeof r=="object"&&(!Array.isArray(r)&&r.type==="ndarray"&&typeof r.value=="number"?e[n]=r.value:a$(r))}}}function Nl(e,t={},n={},r="object",s=!1){if(typeof e=="string"){let o=e,a;if(o in n)a=n[o];else if(o in Qa)a=Qa[o];else if(a=t[o],a==null)throw new ne(`Unknown ${r}: ${e}. This may be due to one of the following reasons: 1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. 2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return a}else{let o=e;if(o.className==null||o.config==null)throw new ne(`${r}: Improper config format: ${JSON.stringify(o)}. 'className' and 'config' must set.`);let a=o.className,i,l;if(a in n?[i,l]=n[a]:a in Qa?[i,l]=Qa.className:a in t&&([i,l]=t[a]),i==null)throw new ne(`Unknown ${r}: ${a}. This may be due to one of the following reasons: 1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. 2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(l!=null){let u={};for(let f of Object.keys(Qa))u[f]=Qa[f];for(let f of Object.keys(n))u[f]=n[f];let c=o.config;c.customObjects=u;let p=Object.assign({},Qa);for(let f of Object.keys(n))Qa[f]=n[f];a$(o.config);let d=l(i,o.config,n,s);return Qa=Object.assign({},p),d}else{let u=Object.assign({},Qa);for(let p of Object.keys(n))Qa[p]=n[p];let c=new i(o.config);return Qa=Object.assign({},u),c}}}function VWe(e,t){return et?1:0}function N2(e,t){return-1*VWe(e,t)}function ei(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function JX(e){if(e==null)throw new ne(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function Tl(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new ne(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function Y3(e,t,n=0,r=1/0){return ka(n>=0),ka(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every(s=>typeof s===t)}function ar(e,t){Array.isArray(e)?(C.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>ar(n,`element ${r+1} of ${t}`))):C.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${QX(e)}.`)}function QX(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>QX(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function eZ(e,t){let n=C.now(),r;return(...o)=>{let a=C.now();return a-nhn(ze(Y(e,e),t,!0)))}var Dy=class extends ke.Serializable{getConfig(){return{}}},Q3=class extends Dy{constructor(t){super();this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=t.maxValue!=null?t.maxValue:this.defaultMaxValue,this.axis=t.axis!=null?t.axis:this.defaultAxis}apply(t){return le(()=>{let n=i$(t,this.axis),r=Pr(n,0,this.maxValue);return Y(t,Pe(r,Ie(br(),n)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};Q3.className="MaxNorm";ke.registerClass(Q3);var eI=class extends Dy{constructor(t){super();this.defaultAxis=0,this.axis=t.axis!=null?t.axis:this.defaultAxis}apply(t){return le(()=>Pe(t,Ie(br(),i$(t,this.axis))))}getConfig(){return{axis:this.axis}}};eI.className="UnitNorm";ke.registerClass(eI);var tI=class extends Dy{apply(t){return to(t)}};tI.className="NonNeg";ke.registerClass(tI);var nI=class extends Dy{constructor(t){super();this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=t.minValue!=null?t.minValue:this.defaultMinValue,this.maxValue=t.maxValue!=null?t.maxValue:this.defaultMaxValue,this.rate=t.rate!=null?t.rate:this.defaultRate,this.axis=t.axis!=null?t.axis:this.defaultAxis}apply(t){return le(()=>{let n=i$(t,this.axis),r=Ie(Y(this.rate,Pr(n,this.minValue,this.maxValue)),Y(1-this.rate,n));return Y(t,Pe(r,Ie(br(),n)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};nI.className="MinMaxNorm";ke.registerClass(nI);var tZ={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Ln(e){return Ry(e)}function nZ(e,t={}){return Nl(e,ke.SerializationMap.getMap().classNameMap,t,"constraint")}function Bn(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in tZ?tZ[e]:e,config:{}};return nZ(n)}else return e instanceof Dy?e:nZ(e)}var rZ=["channelsFirst","channelsLast"],sZ=["nearest","bilinear"],oZ=["valid","same","causal"],aZ=["max","avg"],iZ=["sum","mul","concat","ave"];var $y=new Map;function Fn(e){Tl(rZ,"DataFormat",e)}function lZ(e){Tl(sZ,"InterpolationFormat",e)}function ao(e){Tl(oZ,"PaddingMode",e)}function l$(e){Tl(aZ,"PoolMode",e)}var T2=[],uZ="/";function Vi(e,t){T2.push(e);try{let n=t();return T2.pop(),n}catch(n){throw T2.pop(),n}}function GWe(){return T2.length===0?"":T2.join(uZ)+uZ}function rI(e){if(!cZ(e))throw new Error("Not a valid tensor name: '"+e+"'");return GWe()+e}function sI(e){if(!cZ(e))throw new Error("Not a valid tensor name: '"+e+"'");$y.has(e)||$y.set(e,0);let t=$y.get(e);if($y.set(e,$y.get(e)+1),t>0){let n=`${e}_${t}`;return $y.set(n,1),n}else return e}var UWe=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function cZ(e){return!!e.match(UWe)}function pZ(e){return e===parseInt(e.toString(),10)}function ti(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let s=t;st&&(t=r)}return t}function Ps(e,t){if(t{if(e.shape.length!==2)throw new ne(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=dc(e,1);return oI(n,[1,t,1])})}function fZ(e){let t=[ti(e.shape)];return X(e,t)}function hZ(e){if(e.rank<=1)throw new ne(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],ti(e.shape,1)];return X(e,t)}function fc(e,t,n){return le(()=>{switch(e.rank){case 1:return u2(e,t,n);case 2:return P3(e,[t,0],[n,e.shape[1]]);case 3:return c2(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return Ny(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Tt(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Tt(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new ne(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function u$(e,t,n){return le(()=>{switch(e.rank){case 1:return u2(e,t,n);case 2:return P3(e,[0,t],[e.shape[0],n]);case 3:return c2(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return Ny(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new ne(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function _2(e,t,n,r){return le(()=>{switch(e.rank){case 1:return u2(e,t,n);case 2:switch(r){case 1:return fc(e,t,n);case 2:return u$(e,t,n);default:throw new ne(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return fc(e,t,n);case 2:return c2(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return u$(e,t,n);default:throw new ne(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return fc(e,t,n);case 2:return Ny(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return Ny(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return u$(e,t,n);default:throw new ne(`The axis is not within the rank of the tensor ${r}`)}default:throw new ne(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Fy(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),on(e,t)}function c$(e,t){switch(e.rank){case 1:return bD([e,t]);case 2:return AD([e,t],0);case 3:return vD([e,t],0);case 4:return wD([e,t],0);default:throw new ne(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function oI(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new ne(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Yr(e,t)}function Oy(e,t=0,n=1,r,s){return O3(e,t,n,r,s)}function ni(e,t,n,r){if(e.rank<2||t.rank<2)throw new st(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let s=e.shape.slice(-1)[0],o=t.shape.slice(-2)[0];if(s!==o)throw new st(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2){let s=!1,o=!1;return Xa.matMul({a:e,b:t,transposeA:s,transposeB:o,bias:r?p$(e.rank,r,oo()):null,activation:n})}else{let s=e.shape.slice(),o=s.pop();e=X(e,[-1,o]);let a=t.shape.slice(),i=a.pop(),l=a.pop(),u=[...a,i],c=Array.from({length:t.rank},(h,m)=>m===0?t.rank-2:m<=t.rank-2?m-1:m);t=X(St(t,c),[l,-1]);let p=[...s,...u],d=!1,f=!1;return X(Xa.matMul({a:e,b:t,transposeA:d,transposeB:f,bias:r?p$(e.rank,r,oo()):null,activation:n}),p)}}function aI(e,t,n){return le(()=>(Array.isArray(t)?t=Kn(t,"int32"):t=we(t,"int32"),Il(e,t,n)))}function km(e){return Y(e,e)}function p$(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new ne(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return r.length===1?X(t,[1,r[0],1,1,1]):X(t,[1,r[3],r[0],r[1],r[2]]);if(n==="channelsLast")return r.length===1?X(t,[1,1,1,1,r[0]]):X(t,[1].concat(r))}else if(e===4){if(n==="channelsFirst")return r.length===1?X(t,[1,r[0],1,1]):X(t,[1,r[2],r[0],r[1]]);if(n==="channelsLast")return r.length===1?X(t,[1,1,1,r[0]]):X(t,[1].concat(r))}else if(e===3){if(n==="channelsFirst")return r.length===1?X(t,[1,r[0],1]):X(t,[1,r[1],r[0]]);if(n==="channelsLast")return r.length===1?X(t,[1,1,r[0]]):X(t,[1].concat(r))}else if(e<3)return t;throw new ne(`Unsupported input rank by biasAdd: ${t.rank}`)}function io(e,t,n){return le(()=>(n==null&&(n=oo()),Fn(n),Ie(e,p$(e.rank,t,n))))}function mZ(e,t=1){if(t!==1)throw new st(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Pi(e)}function gZ(e){return le(()=>Pe(e,Ie(sr(e),1)))}function iI(e,t,n,r){return le(()=>Cq(e,t,n,r))}function xZ(e){return le(()=>{let t=Ie(.5,Y(.2,e));return Pr(t,0,1)})}function md(e,t,n=!1){return n?e():t()}var yZ=["fanIn","fanOut","fanAvg"],bZ=["normal","uniform","truncatedNormal"];function jWe(e){Tl(yZ,"FanMode",e)}function HWe(e){Tl(bZ,"Distribution",e)}var Ro=class extends ke.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},lI=class extends Ro{apply(t,n){return fn(t,n)}};lI.className="Zeros";ke.registerClass(lI);var Py=class extends Ro{apply(t,n){return eo(t,n)}};Py.className="Ones";ke.registerClass(Py);var uI=class extends Ro{constructor(t){super();if(typeof t!="object")throw new ne(`Expected argument of type ConstantConfig but got ${t}`);if(t.value===void 0)throw new ne(`config must have value set but got ${t}`);this.value=t.value}apply(t,n){return le(()=>Y(Ke(this.value),eo(t,n)))}getConfig(){return{value:this.value}}};uI.className="Constant";ke.registerClass(uI);var cI=class extends Ro{constructor(t){super();this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=t.minval||this.DEFAULT_MINVAL,this.maxval=t.maxval||this.DEFAULT_MAXVAL,this.seed=t.seed}apply(t,n){return Li(t,this.minval,this.maxval,n)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};cI.className="RandomUniform";ke.registerClass(cI);var pI=class extends Ro{constructor(t){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=t.mean||this.DEFAULT_MEAN,this.stddev=t.stddev||this.DEFAULT_STDDEV,this.seed=t.seed}apply(t,n){if(n=n||"float32",n!=="float32"&&n!=="int32")throw new st(`randomNormal does not support dType ${n}.`);return Oy(t,this.mean,this.stddev,n,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};pI.className="RandomNormal";ke.registerClass(pI);var dI=class extends Ro{constructor(t){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=t.mean||this.DEFAULT_MEAN,this.stddev=t.stddev||this.DEFAULT_STDDEV,this.seed=t.seed}apply(t,n){if(n=n||"float32",n!=="float32"&&n!=="int32")throw new st(`truncatedNormal does not support dType ${n}.`);return hm(t,this.mean,this.stddev,n,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};dI.className="TruncatedNormal";ke.registerClass(dI);var fI=class extends Ro{constructor(t){super();this.gain=t.gain!=null?t.gain:1}apply(t,n){return le(()=>{if(t.length!==2||t[0]!==t[1])throw new ne("Identity matrix initializer can only be used for 2D square matrices.");return Y(this.gain,Cy(t[0]))})}getConfig(){return{gain:this.gain}}};fI.className="Identity";ke.registerClass(fI);function qWe(e,t="channelsLast"){let n,r;if(Fn(t),e.length===2)n=e[0],r=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let s=ti(e,2);n=e[1]*s,r=e[0]*s}else if(t==="channelsLast"){let s=ti(e,0,e.length-2);n=e[e.length-2]*s,r=e[e.length-1]*s}}else{let s=ti(e);n=Math.sqrt(s),r=Math.sqrt(s)}return[n,r]}var lo=class extends Ro{constructor(t){super();if(t.scale<0)throw new ne(`scale must be a positive float. Got: ${t.scale}`);this.scale=t.scale==null?1:t.scale,this.mode=t.mode==null?"fanIn":t.mode,jWe(this.mode),this.distribution=t.distribution==null?"normal":t.distribution,HWe(this.distribution),this.seed=t.seed}apply(t,n){let r=qWe(t),s=r[0],o=r[1],a=this.scale;if(this.mode==="fanIn"?a/=Math.max(1,s):this.mode==="fanOut"?a/=Math.max(1,o):a/=Math.max(1,(s+o)/2),this.distribution==="normal"){let i=Math.sqrt(a);if(n=n||"float32",n!=="float32"&&n!=="int32")throw new st(`${this.getClassName()} does not support dType ${n}.`);return hm(t,0,i,n,this.seed)}else{let i=Math.sqrt(3*a);return Li(t,-i,i,n)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};lo.className="VarianceScaling";ke.registerClass(lo);var E2=class extends lo{constructor(t){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:t==null?null:t.seed})}getClassName(){return lo.className}};E2.className="GlorotUniform";ke.registerClass(E2);var R2=class extends lo{constructor(t){super({scale:1,mode:"fanAvg",distribution:"normal",seed:t==null?null:t.seed})}getClassName(){return lo.className}};R2.className="GlorotNormal";ke.registerClass(R2);var D2=class extends lo{constructor(t){super({scale:2,mode:"fanIn",distribution:"normal",seed:t==null?null:t.seed})}getClassName(){return lo.className}};D2.className="HeNormal";ke.registerClass(D2);var $2=class extends lo{constructor(t){super({scale:2,mode:"fanIn",distribution:"uniform",seed:t==null?null:t.seed})}getClassName(){return lo.className}};$2.className="HeUniform";ke.registerClass($2);var F2=class extends lo{constructor(t){super({scale:1,mode:"fanIn",distribution:"normal",seed:t==null?null:t.seed})}getClassName(){return lo.className}};F2.className="LeCunNormal";ke.registerClass(F2);var O2=class extends lo{constructor(t){super({scale:1,mode:"fanIn",distribution:"uniform",seed:t==null?null:t.seed})}getClassName(){return lo.className}};O2.className="LeCunNormal";ke.registerClass(O2);var hI=class extends Ro{constructor(t){super();if(this.DEFAULT_GAIN=1,this.gain=t.gain==null?this.DEFAULT_GAIN:t.gain,this.seed=t.seed,this.seed!=null)throw new st("Random seed is not implemented for Orthogonal Initializer yet.")}apply(t,n){return le(()=>{if(t.length<2)throw new st("Shape must be at least 2D.");t[0]*t[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${t[0]*t[1]}) elements: Slowness may result.`);let r=t[0]>t[1]?[t[1],t[0]]:t,s=Oy(r,0,1,"float32"),o=eK.gramSchmidt(s);return t[0]>t[1]&&(o=St(o)),Y(this.gain,o)})}getConfig(){return{gain:this.gain,seed:this.seed}}};hI.className="Orthogonal";ke.registerClass(hI);var AZ={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function vZ(e,t={}){return Nl(e,ke.SerializationMap.getMap().classNameMap,t,"initializer")}function vn(e){return Ry(e)}function un(e){if(typeof e=="string"){let t=e in AZ?AZ[e]:e;if(t==="GlorotNormal")return new R2;if(t==="GlorotUniform")return new E2;if(t==="HeNormal")return new D2;if(t==="HeUniform")return new $2;if(t==="LeCunNormal")return new F2;if(t==="LeCunUniform")return new O2;{let n={};return n.className=t,n.config={},vZ(n)}}else return e instanceof Ro?e:vZ(e)}var XWe=0;function mI(){return XWe++}var gI={};function gd(e=""){return e in gI||(gI[e]=0),gI[e]+=1,e+gI[e].toString()}function xI(e){return Array.isArray(e)&&Array.isArray(e[0])}function My(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function bt(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new ne(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function Ft(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new ne(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function zy(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((r,s)=>r*s);return t}var wZ="Variable",yI=class{constructor(t,n="float32",r=wZ,s=!0,o=null){this.dtype=n==null?"float32":n,this.shape=t.shape,this.id=mI(),r=r==null?wZ:r,this.originalName=rI(r),this.name=sI(this.originalName),this.trainable_=s,this.constraint=o,this.val=qD(t,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(t){return this.assertNotDisposed(),ZWe(this.val,t),this.val.id!==t.id&&(this.val.assign(t),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(t){this.trainable_=t,this.val.trainable=t}};function ZWe(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function P2(e){return e.map(t=>t.read())}function Ly(e){e.forEach(t=>{t[0].write(t[1])})}var wn=class{constructor(t){this.dtype=t.dtype,this.shape=t.shape,t.shape!=null?this.ndim=t.shape.length:this.ndim=t.ndim,this.maxNDim=t.maxNDim,this.minNDim=t.minNDim,this.axes=t.axes||{}}},uo=class{constructor(t,n,r,s,o,a,i){this.dtype=t,this.shape=n,this.sourceLayer=r,this.inputs=s,this.callArgs=o,this.outputTensorIndex=i,this.id=mI(),a!=null&&(this.originalName=rI(a),this.name=sI(this.originalName)),this.rank=n.length}},YWe=0,xd=class{constructor(t,n){this.callArgs=n,this.id=YWe++,this.outboundLayer=t.outboundLayer,this.inboundLayers=t.inboundLayers,this.nodeIndices=t.nodeIndices,this.tensorIndices=t.tensorIndices,this.inputTensors=t.inputTensors,this.outputTensors=t.outputTensors,this.inputMasks=t.inputMasks,this.outputMasks=t.outputMasks,this.inputShapes=t.inputShapes,this.outputShapes=t.outputShapes;for(let r of t.inboundLayers)r!=null&&r.outboundNodes.push(this);t.outboundLayer.inboundNodes.push(this)}getConfig(){let t=[];for(let n of this.inboundLayers)n!=null?t.push(n.name):t.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:t,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},JWe=0,It=class extends ke.Serializable{constructor(t={}){super();this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=JWe++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let n=t.name;if(!n){let r=this.getClassName();n=Ja(r)+"_"+gd(r)}if(this.name=n,this.trainable_=t.trainable==null?!0:t.trainable,t.inputShape!=null||t.batchInputShape!=null){let r;if(t.batchInputShape!=null)r=t.batchInputShape;else if(t.inputShape!=null){let o=null;t.batchSize!=null&&(o=t.batchSize),r=[o].concat(t.inputShape)}this.batchInputShape=r;let s=t.dtype;s==null&&(s=t.inputDType),s==null&&(s="float32"),this.dtype=s}t.weights!=null?this.initialWeights=t.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(t,n){return t.name+"_ib-"+n.toString()}getNodeAtIndex(t,n){if(this.inboundNodes.length===0)throw new Os(`The layer has never been called and thus has no defined ${n}.`);if(this.inboundNodes.length<=t)throw new ne(`Asked to get ${n} at node ${t}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[t]}getInputAt(t){return Jr(this.getNodeAtIndex(t,"input").inputTensors)}getOutputAt(t){return Jr(this.getNodeAtIndex(t,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new sa(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(this.inboundNodes.length===0)throw new sa(`Layer ${this.name} is not connected, no input to return.`);return Jr(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new sa(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new sa(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Jr(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(t=>t())}get updates(){return this._updates}get built(){return this._built}set built(t){this._built=t}get trainable(){return this.trainable_}set trainable(t){this._trainableWeights.forEach(n=>n.trainable=t),this.trainable_=t}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(t=>t.trainable):[]}set trainableWeights(t){this._trainableWeights=t}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(t=>!t.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(t){this._nonTrainableWeights=t}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(t){if(t=mn(t),this.inputSpec==null||this.inputSpec.length===0)return;let n=mn(this.inputSpec);if(t.length!==n.length)throw new ne(`Layer ${this.name} expects ${n.length} inputs, but it received ${t.length} input tensors. Input received: ${t}`);for(let r=0;ro.maxNDim)throw new ne(`Input ${r} is incompatible with layer ${this.name}: expected max_ndim=${o.maxNDim}, found ndim=${a}`);if(o.minNDim!=null&&a=0?i[u]:i[i.length+u];if(c!=null&&[c,null].indexOf(p)===-1)throw new ne(`Input ${r} is incompatible with layer ${this.name}: expected axis ${u} of input shape to have value ${c} but got shape ${i}.`)}}if(o.shape!=null)for(let i=0;i{if(!this.built){this.assertInputCompatibility(t);let a=[];for(let i of mn(t))a.push(i.shape);this.build(Jr(a)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&o&&(this._refCount=1)}if(this.assertInputCompatibility(t),o){let a=this.call(t,n),i=mn(a),l=[];for(let u of i)r.indexOf(u)!==-1&&(u=u.clone()),l.push(u);if(a=Jr(l),this.activityRegularizer!=null)throw new st("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return a}else{let a=QWe(t),i=this.computeOutputShape(a),l,u=eGe(t);if(this.warnOnIncompatibleInputShape(Array.isArray(t)?a[0]:a),i!=null&&i.length>0&&Array.isArray(i[0])?l=i.map((c,p)=>new uo(u,c,this,mn(t),n,this.name,p)):l=new uo(u,i,this,mn(t),n,this.name),this.addInboundNode(t,l,null,null,a,i,n),this._refCount++,this.activityRegularizer!=null)throw new st("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return l}})}warnOnIncompatibleInputShape(t){if(this.batchInputShape!=null)if(t.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(t)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let n=!1;this.batchInputShape.forEach((r,s)=>{r!=null&&t[s]!=null&&t[s]!==r&&(n=!0)}),n&&console.warn(`The shape of the input tensor (${JSON.stringify(t)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new sa(`The layer ${this.name} has never been called and thus has no defined output shape.`);let t=[];for(let n of this.inboundNodes){let r=JSON.stringify(n.outputShapes);t.indexOf(r)===-1&&t.push(r)}if(t.length===1){let n=this.inboundNodes[0].outputShapes;return Array.isArray(n)&&Array.isArray(n[0])&&n.length===1?n[0]:n}else throw new sa(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new Os(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return zy(this.weights)}build(t){this.built=!0}getWeights(t=!1){return P2(t?this.trainableWeights:this.weights)}setWeights(t){le(()=>{let n=this.weights;if(n.length!==t.length)throw new ne(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${t.length}, but the layer was expecting ${n.length} weights. Provided weights: ${t}...`);if(n.length===0)return;let r=[],s=P2(n);for(let o=0;oo.apply(u.read())),a==null&&(a=!0),a?this._trainableWeights.push(u):this._nonTrainableWeights.push(u),u}setFastWeightInitDuringBuild(t){this.fastWeightInitDuringBuild=t}addLoss(t){t==null||Array.isArray(t)&&t.length===0||(t=mn(t),this._losses!==void 0&&this._losses!==null&&this.losses.push(...t))}computeOutputShape(t){return t}computeMask(t,n){if(!this.supportsMasking){if(n!=null)if(Array.isArray(n))n.forEach(r=>{if(r!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return n}addInboundNode(t,n,r,s,o,a,i=null){let l=mn(t);n=mn(n),r=mn(r),s=mn(s),o=My(o),a=My(a);let u=[],c=[],p=[];for(let d of l)u.push(d.sourceLayer),c.push(d.nodeIndex),p.push(d.tensorIndex);new xd({outboundLayer:this,inboundLayers:u,nodeIndices:c,tensorIndices:p,inputTensors:l,outputTensors:n,inputMasks:r,outputMasks:s,inputShapes:o,outputShapes:a},i);for(let d=0;dt.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let t=0;return--this._refCount==0&&(t=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:t}}};function QWe(e){e=mn(e);let t=[];for(let n of e)t.push(n.shape);return Jr(t)}function eGe(e){return"float32"}function d$(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let r=t.inboundNodes[n];if(r.inboundLayers.length===0)return r.inputTensors;{let s=[];for(let o=0;o0){let s=await Promise.all(t);for(let o=0;oIe(this.totals[s],Y(o,r)));this.totals[s]=i,a!=null&&a.dispose()}}}async onEpochEnd(t,n){if(n!=null)for(let r of this.params.metrics)this.totals[r]!=null&&(typeof this.totals[r]=="number"?n[r]=this.totals[r]/this.seen:le(()=>{let s=Y(Pe(1,this.seen),this.totals[r]);n[r]=s,this.totals[r].dispose(),$n(n[r])}))}},m$=class extends Im{async onTrainBegin(t){this.epoch=[],this.history={}}async onEpochEnd(t,n){n==null&&(n={}),this.epoch.push(t);for(let r in n)this.history[r]==null&&(this.history[r]=[]),this.history[r].push(n[r])}async syncData(){let t=[],n=[],r=[];for(let o in this.history){let a=this.history[o];for(let i=0;inew g$(r,t))}var oa=class{constructor(){}static registerCallbackConstructor(t,n){C.assert(t>=0&&Number.isInteger(t),()=>`Verbosity level is expected to be an integer >= 0, but got ${t}`),oa.checkForDuplicate(n),oa.constructors[t]==null&&(oa.constructors[t]=[]),oa.constructors[t].push(n)}static checkForDuplicate(t){for(let n in oa.constructors)oa.constructors[+n].forEach(s=>{if(s===t)throw new ne("Duplicate callback constructor.")})}static clear(){oa.constructors={}}static createCallbacks(t){let n=[];for(let r in oa.constructors){let s=+r;t>=s&&n.push(...oa.constructors[s])}return n.map(r=>new r)}};oa.constructors={};function vI(e,t,n,r,s,o,a,i,l){let u=new m$,c=[new IZ,...oa.createCallbacks(t)];e!=null&&c.push(...e),c.push(u);let p=new h$(c);return p.setParams({epochs:n,initialEpoch:r,samples:s,steps:o,batchSize:a,verbose:t,doValidation:i,metrics:l}),{callbackList:p,history:u}}function aa(e,t={},n=!1){return Nl(e,ke.SerializationMap.getMap().classNameMap,t,"layer",n)}function M2(e,t){return le(()=>{e.dtype!=="float32"&&(e=we(e,"float32"));let n=ze(km(e),t,!0),r=tc(n.shape,br()),s=hn(Qs(n,r));return Pe(e,s)})}function Cm(e,t){return le(()=>Nn(km(je(t,e)),-1))}function z2(e,t){return le(()=>Nn(sr(je(t,e)),-1))}function L2(e,t){return le(()=>{let n=je(e,t),r=Pr(sr(e),br(),Number.MAX_VALUE),s=sr(Pe(n,r));return Y(100,Nn(s,-1))})}function nGe(e,t){return le(()=>{let n=Pr(t,br(),Number.MAX_VALUE),r=Ns(Ie(1,n)),s=Pr(e,br(),Number.MAX_VALUE),o=Ns(Ie(1,s));return Nn(km(je(r,o)),-1)})}function rGe(e,t){return le(()=>{let n=Qs(0,je(1,Y(e,t)));return Nn(km(n),-1)})}function sGe(e,t){return le(()=>{let n=Qs(0,je(1,Y(e,t)));return Nn(n,-1)})}function oGe(e,t){return le(()=>{let n=ze(Y(e,t),-1),r=ms(Y(je(1,e),t),-1);return Qs(0,Ie(1,je(r,n)))})}function aGe(e,t){return le(()=>{let n=Math.log(2),r=je(t,e),s=je(Ie(r,Ka(Y(-2,r))),n);return Nn(s,-1)})}function Sm(e,t,n=!1){return le(()=>{if(n)t=uc(t);else{let r=ze(t,t.shape.length-1,!0);t=Pe(t,r)}return t=Pr(t,br(),1-br()),jt(ze(Y(we(e,"float32"),Ns(t)),t.shape.length-1))})}function By(e,t,n=!1){return le(()=>{let r=we(Mi(fZ(e)),"int32");t=Pr(t,br(),1-br());let s=t.shape,o=X(ud(r,s[s.length-1]),s);return Sm(o,t,n)})}function iGe(e,t){if(!C.arraysEqual(e.shape,t.shape))throw new ne(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return le(()=>{let n=to(t),r=jt(sr(t));return Ie(je(n,Y(t,e)),nm(Zr(r)))})}function Vy(e,t){return le(()=>{let n;return n=Pr(t,br(),1-br()),n=Ns(Pe(n,je(1,n))),Nn(iGe(e,n),-1)})}function lGe(e,t){return le(()=>{let n=Pr(e,br(),1),r=Pr(t,br(),1);return ze(Y(e,Ns(Pe(n,r))),-1)})}function uGe(e,t){return le(()=>{let n=Ns(Ie(br(),t));return Nn(je(t,Y(e,n)),-1)})}function wI(e,t){return le(()=>{let n=M2(e,-1),r=M2(t,-1),s=Y(n,r);return jt(ze(s,-1))})}var B2={meanSquaredError:Cm,meanAbsoluteError:z2,meanAbsolutePercentageError:L2,meanSquaredLogarithmicError:nGe,squaredHinge:rGe,hinge:sGe,categoricalHinge:oGe,logcosh:aGe,categoricalCrossentropy:Sm,sparseCategoricalCrossentropy:By,binaryCrossentropy:Vy,kullbackLeiblerDivergence:lGe,poisson:uGe,cosineProximity:wI};function kI(e){if(typeof e=="string"){if(e in B2)return B2[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new ne(t)}else return e}function II(e,t){return le(()=>{let n=Y(.5,Nr(t)),r=wm(qn(t,n),e.dtype);return Nn(Ss(e,r),-1)})}function CI(e,t){return le(()=>wm(Ss(Fi(e,-1),Fi(t,-1)),"float32"))}function cGe(e,t){return le(()=>we(ze(gs(Ss(e,1),Ss(t,1))),"float32"))}function pGe(e,t){return le(()=>we(ze(gs(Ss(e,0),Ss(t,1))),"float32"))}function CZ(e,t){return le(()=>{let n=cGe(e,t),r=pGe(e,t),s=Ie(n,r);return we(Sn(qn(s,0),Pe(n,s),0),"float32")})}function x$(e,t){return Vy(e,t)}function y$(e,t){return e.rank===t.rank&&(e=ro(e,[e.rank-1])),t=Fi(t,-1),t.dtype!==e.dtype&&(t=we(t,e.dtype)),we(Ss(e,t),"float32")}var dGe=Cm,fGe=Cm,hGe=z2,mGe=z2,gGe=L2,xGe=L2,SI=Sm,yGe=wI,b$=By,NI={binaryAccuracy:II,categoricalAccuracy:CI,precision:CZ,categoricalCrossentropy:SI,sparseCategoricalCrossentropy:b$,mse:dGe,MSE:fGe,mae:hGe,MAE:mGe,mape:gGe,MAPE:xGe,cosine:yGe};function SZ(e){if(typeof e=="string"&&e in NI)return NI[e];if(typeof e!="string"&&e!=null)return e;throw new ne(`Unknown metric ${e}`)}function V2(e){if(ka(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(B2))if(B2[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(NI))if(NI[n]===e){t=n;break}return t!==void 0?t:e.name}}function NZ(e){let t={Adagrad:()=>Am.adagrad(.01),Adadelta:()=>Am.adadelta(1,.95,br()),Adam:()=>Am.adam(.001,.9,.999,br()),Adamax:()=>Am.adamax(.002,.9,.999,br(),0),RMSProp:()=>Am.rmsprop(.001,.9,0,br()),SGD:()=>Am.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new ne(`Unknown Optimizer ${e}`)}var TZ=1*1024*1024;function A$(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!v$(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let r=JSON.stringify(e);r.length>TZ&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${r.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${TZ}.`)}}function v$(e){if(e===null)return!0;if(typeof e=="object")if(Object.getPrototypeOf(e)===Object.prototype){let t=Object.keys(e);for(let n of t)if(typeof n!="string"||!v$(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!v$(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function _Z(e,t,n,r=console.log){let s=AGe(e),o=["Layer (type)","Output shape","Param #"];s?(t=t||65,n=n||[.45,.85,1]):(t=t||98,n=n||[.33,.55,.67,1]),n[n.length-1]<=1&&(n=n.map(c=>Math.floor(t*c)));let a;if(!s){o.push("Receives inputs"),a=[];for(let c in e.nodesByDepth)a.push(...e.nodesByDepth[c])}r("_".repeat(t)),TI(o,n,r),r("=".repeat(t));let i=e.layers;for(let c=0;c1||s.length===1&&s[0].inboundLayers.length>1){t=!1;break}r.push(...s)}if(t)for(let s of e.layers){let o=!1;for(let a of s.inboundNodes)if(r.indexOf(a)!==-1)if(o){t=!1;break}else o=!0;if(!t)break}return t}function TI(e,t,n=console.log){let r="";for(let s=0;s0&&(r=r.slice(0,r.length-1)+" "),r+=e[s],r=r.slice(0,t[s]),r+=" ".repeat(t[s]-r.length);n(r)}function vGe(e,t,n){let r;try{r=JSON.stringify(e.outputShape)}catch(i){r="multiple"}let s=e.name,o=e.getClassName(),a=[`${s} (${o})`,r,e.countParams().toString()];TI(a,t,n)}function wGe(e,t,n,r){let s;try{s=JSON.stringify(e.outputShape)}catch(c){s="multiple"}let o=[];for(let c of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(c)===-1))for(let p=0;ph.name),l=[],u=t.names();for(let h of i)u.indexOf(h)!==-1?l.push(t.getValue(h)):l.push(null);r!=null&&(r.maxNumTensors=-1/0,r.minNumTensors=1/0);let c=i.join(",")+"|"+t.names().join(","),p,d;if(w$[c]==null){let h=IGe(a,t);p=h.sorted,d=h.recipientCounts,w$[c]=p,RZ[c]=d}p=w$[c],d={},s||Object.assign(d,RZ[c]);let f=new Gi(t);for(let h=0;hr.maxNumTensors&&(r.maxNumTensors=N),N0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let s=DZ(e[0],t);n=s.sorted,r=s.recipientMap}else{let s=new Set;for(let o of e){let{sorted:a,recipientMap:i}=DZ(o,t);for(let l of a)s.has(l.name)||(n.push(l),s.add(l.name));for(let l in i)r[l]==null&&(r[l]=new Set),i[l].forEach(u=>r[l].add(u))}}return{sorted:n,recipientCounts:CGe(r)}}function CGe(e){let t={};for(let n in e)t[n]=e[n].size;return t}function DZ(e,t){let n=new Set,r=[],s={};for(let i of t.names())n.add(i);let o=[],a=[];for(o.push(e);o.length>0;){let i=o[o.length-1];if(n.has(i.name)){o.pop();continue}let l=a[a.length-1]===o.length-1;if(i.inputs.length===0||l)o.pop(),r.push(i),n.add(i.name),l&&a.pop();else{a.push(o.length-1);for(let u of i.inputs)s[u.name]==null&&(s[u.name]=new Set),s[u.name].add(i.name),!n.has(u.name)&&o.push(u)}}return{sorted:r,recipientMap:s}}function SGe(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;ry.name)}`);ei(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(y=>y.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let y of this.outputs){let b=y.sourceLayer,A=y.nodeIndex,v=y.tensorIndex;this.outputLayers.push(b),this.outputLayersNodeIndices.push(A),this.outputLayersTensorIndices.push(v)}for(let y of this.inputs){let b=y.sourceLayer,A=y.nodeIndex,v=y.tensorIndex;ka(A===0,"input layer has >1 nodes"),ka(v===0,"input layer has >1 tensors"),this.inputLayers.push(b),this.inputLayersNodeIndices.push(A),this.inputLayersTensorIndices.push(v)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;yy.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let n={},r={},s={},o={},a={},i=[],l=(y,b,A,v,w,k)=>{(v==null||w==null||k==null)&&(v=y.sourceLayer,w=y.nodeIndex,k=y.tensorIndex);let I=v.inboundNodes[w];if(A.indexOf(I)!==-1)throw new Os(`The tensor ${y.name} at layer "${v.name}" is part of a cycle.`);if(b.indexOf(I)!==-1)return;this.containerNodes.add(Ia.nodeKey(v,w)),v.id in a||(a[v.id]=Object.keys(a).length),A.indexOf(I)===-1&&A.push(I);let N=I.inboundLayers.length;for(let T=0;T=0;)A.splice(A.indexOf(I),1);i.push(I)},u=[],c=[];for(let y of this.outputs)l(y,u,c);let p=i.slice().reverse();for(let y of p){r[y.id]=y,y.id in n||(n[y.id]=0);let b=n[y.id],A=s[y.outboundLayer.id]==null?0:s[y.outboundLayer.id];b=Math.max(b,A),s[y.outboundLayer.id]=b,o[y.outboundLayer.id]=y.outboundLayer,n[y.id]=b;for(let v=0;vparseInt(y,10)).sort(N2);this.layers=[];for(let y of h){let b=f[y];b.sort((A,v)=>{let w=a[A.id],k=a[v.id];return wk?1:0});for(let A of b)A instanceof Ia&&this.internalContainerRefs.push(A),this.layers.push(A)}this.layersByDepth=f,h=Object.keys(d).map(y=>parseInt(y,10)).sort(N2);let m=this.inputs.slice(),g=[];for(let y of h)for(let b of d[y]){let A=b.outboundLayer;if(A!=null){for(let v of b.inputTensors)if(m.indexOf(v)===-1)throw new Os(`Graph disconnected: cannot obtain value for tensor ${v} at layer "${A.name}". The following previous layers were accessed without issue: ${g}`);for(let v of b.outputTensors)m.push(v);g.push(A.name)}}this.nodesByDepth=d;let x=this.layers.map(y=>y.name);for(let y of x){let b=x.filter(A=>A===y).length;if(b!==1)throw new Os(`The name "${y}" is used ${b} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(x))}this.outboundNodes=[],this.inboundNodes=[],new xd({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(y=>null),outputMasks:this.outputs.map(y=>null),inputShapes:this.inputs.map(y=>y.shape),outputShapes:this.outputs.map(y=>y.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let t={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount==0){for(let n of this.layers)t.numDisposedVariables+=n.dispose().numDisposedVariables;for(let n of this.internalContainerRefs)t.numDisposedVariables+=n.dispose().numDisposedVariables}return t.refCountAfterDispose=this._refCount,t}get trainable(){return this.trainable_}set trainable(t){this.layers.forEach(n=>{n._trainableWeights.forEach(r=>r.trainable=t)}),this.trainable_=t}get trainableWeights(){if(this._trainableWeights.length>0)throw new ne("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let t=[];for(let n of this.layers)t=t.concat(n.trainableWeights);return t}get nonTrainableWeights(){let t=[];for(let n of this.layers)t.push(...n.nonTrainableWeights);if(!this.trainable){let n=[];for(let r of this.layers)n.push(...r.trainableWeights);return n.concat(t)}return t}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(t,n=!0){let r={},s=0;for(let a of this.layers)for(let i of a.weights){if(r[i.originalName]!=null)throw new ne(`Duplicate weight name: ${i.originalName}`);r[i.originalName]=i,s++}let o=[];for(let a in t){let i=a;if(r[a]==null){let l=a.split("/");i=l.slice(0,-2).concat([l[l.length-1]]).join("/")}if(r[i]!=null)o.push([r[i],t[a]]);else if(n)throw new ne(`Provided weight data has no target variable: ${a}`);delete r[i]}if(n){let a=[];for(let i in r)a.push(i);if(a.length>0)throw new ne(`${a.length} of ${s} weights are not set: ${a}`)}Ly(o)}updatedConfig(){let t=this.getConfig(),n={};return n.className=this.getClassName(),n.config=t,n.kerasVersion=`tfjs-layers ${Wy}`,n.backend="TensorFlow.js",n}toJSON(t,n=!0){let r=_I(this.updatedConfig());return n?JSON.stringify(r):r}call(t,n){return le(()=>{t=mn(t);let r=new Gi;for(let s=0;s{t=mn(t);let r;return n==null?r=Ya(null,t.length):r=mn(n),this.runInternalGraph(t,r)[1]})}computeOutputShape(t){let n=My(t);if(n.length!==this.inputLayers.length)throw new ne(`Invalid inputShape argument ${t}: model has ${this.inputLayers.length} tensor inputs.`);let r={};for(let i=0;iparseInt(i,10)).sort(N2);if(s.length>1)for(let i of s){let l=this.nodesByDepth[i];for(let u of l){let c=u.outboundLayer;if(this.inputLayers.map(m=>m.id).indexOf(c.id)!==-1)continue;let p=[];for(let m=0;mparseInt(l,10)).sort(N2);for(let l of s){let u=this.nodesByDepth[l];for(let c of u){let p=c.outboundLayer,d=c.inputTensors,f=c.outputTensors,h=new Array;for(let m of d)m.id in r&&h.push(r[m.id]);if(h.length===d.length){let m={},g,x,y,b;if(c.callArgs!=null&&(m=c.callArgs),h.length===1){let[A,v]=h[0];m.mask==null&&(m.mask=v),y=mn(p.call(A,m)),b=mn(p.computeMask(A,v)),g=[A],x=[v]}else g=h.map(A=>A[0]),x=h.map(A=>A[1]),m.mask==null&&(m.mask=x),y=mn(p.call(g,m)),b=mn(p.computeMask(g,x));if(p.activityRegularizer)throw new st("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let A=0;A{let t=[];for(let n of this.layers)for(let r=0;r0){let m=[];for(let g=0;g0&&g.apply(Jr(y),b)}function u(g){let x=g.name,y=aa(g,n.customObjects!=null?n.customObjects:{});y.setFastWeightInitDuringBuild(s),o[x]=y,g.inboundNodes.forEach(A=>{if(!(A instanceof Array))throw new ne(`Corrupted configuration, expected array for nodeData: ${A}`);i(y,A)})}let c=n.name,p=n.layers;for(let g of p)u(g);for(;!JX(a);)for(let g of p){let x=o[g.name];if(x.name in a){let y=a[x.name];delete a[x.name];for(let b of y)l(x,b)}}let d=[],f=[],h=n.inputLayers;for(let g of h){let x=g[0],y=g[1],b=g[2];ka(x in o);let v=o[x].inboundNodes[y].outputTensors;d.push(v[b])}let m=n.outputLayers;for(let g of m){let x=g[0],y=g[1],b=g[2];ka(x in o);let v=o[x].inboundNodes[y].outputTensors;f.push(v[b])}return new t({inputs:d,outputs:f,name:c})}get stateful(){if(this._stateful)throw new ne("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let t of this.layers)if(t.stateful)return!0;return!1}resetStates(){le(()=>{this.layers.forEach(t=>{t.stateful&&t.resetStates()})})}};function NGe(e,t,n){let r=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(s=>null);if(r===1)return Array.isArray(e)&&e.length===1?e:typeof e=="object"&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let s=[];return t.forEach(o=>{o in e?s.push(e[o]):s.push(null)}),s}else throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function EI(e,t){return NGe(e,t,"classWeight")}async function RI(e,t,n,r){if(t!=null||r!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let s=le(()=>{if(e.shape.length===1)return So(e);if(e.shape.length===2){if(e.shape[1]>1)return Fi(e,1);if(e.shape[1]===1)return X(e,[e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),o=Array.from(await s.data());ut(s);let a=[];return o.forEach(i=>{if(n[i]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${i} exists in the data but not in classWeight`);a.push(n[i])}),Kn(a,"float32")}else return null}function $Z(e,t){return Y(e,t)}var TGe=32;function FZ(e,t){let n,r,s=t;n=s.xs,r=s.ys,C.assert(n!=null&&r!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let o=OZ("input",e.inputNames,n),a=OZ("output",e.outputNames,r),i=o[0].shape[0];C.assert(o.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${o.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),C.assert(a.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${a.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l`Batch size mismatch: input ${e.inputNames[l]} has ${o[l].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);for(let l=0;l`Batch size mismatch: output ${e.outputNames[l]} has ${a[l].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);return{xs:o,ys:a}}function OZ(e,t,n){if(n instanceof Ot)return[n];if(Array.isArray(n))return C.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let r=[];for(let s of t){if(n[s]==null)throw new ne(`The feature data generated by the dataset lacks the required ${e} key '${s}'.`);r.push(n[s])}return r}}function _Ge(e){if(e.length===3)throw new st("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function PZ(e,t,n){let r=n.batchesPerEpoch!=null;if(C.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),C.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),C.assert(n.epochs!=null&&n.epochs>0&&Number.isInteger(n.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`),C.assert(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),C.assert(n.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let s=n.validationData!=null,o,a;if(s)if(MZ(n.validationData))C.assert(n.validationBatches==null||n.validationBatches>0&&Number.isInteger(n.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`);else{let g=_Ge(n.validationData);o=g.xs,a=g.ys}let i=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),u;s?u=l.slice().concat(l.map(g=>"val_"+g)):u=l.slice();let c=AI(n.callbacks,n.yieldEvery),p=n.verbose==null?1:n.verbose,{callbackList:d,history:f}=vI(c,p,n.epochs,null,null,EGe(t,n),null,s,u);d.setModel(e),e.history=f,await d.onTrainBegin(),e.stopTraining_=!1;let h=n.initialEpoch==null?0:n.initialEpoch,m=await t.iterator();for(;h=n.batchesPerEpoch:b.done){if(s){let A;MZ(n.validationData)?A=mn(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):A=mn(e.evaluate(o,a,{batchSize:n.validationBatchSize==null?TGe:n.validationBatchSize,verbose:0}));for(let v=0;v0)throw new st("Verbose mode is not implemented yet.");C.assert(!r||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let a=RGe(t)?t:await t.iterator(),i=0,l=0;for(;r?l{if(u.value){let{xs:c,ys:p}=FZ(e,u.value),d=c.concat(p),f=le(()=>s(d));if(ut(d),l===0)for(let m=0;mIe(o[m],Y(h,g))),l>0&&ut(x)}ut(f),i+=h,++l}return o}),u.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let u=0;u0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function Gy(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>fc(r,t,n-t)):fc(e,t,n-t)}function $I(e,t){return le(()=>e==null?null:Array.isArray(e)?e.map(n=>$I(n,t)):aI(e,t.dtype==="int32"?t:we(t,"int32")))}function FI(e,t){let n=[],r=0,s=null;for(;r=e&&(s=e),n.push([r,s]),r=s;return n}async function DGe(e,t,n,r,s,o,a,i,l,u,c,p,d,f,h){s==null&&(s=32),o==null&&(o=1),c==null&&(c=!0),d==null&&(d=0);let m=!1;if(l!=null&&u!=null&&(m=!0),h!=null&&(m=!0,f==null))throw new ne("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=e.checkNumSamples(n,s,f,"steps_per_epoch"),x;g!=null&&(x=Ps(0,g)),a==null&&(a=1);let{callbackList:y,history:b}=vI(i,a,o,d,g,f,s,m,p);y.setModel(e),e.history=b,await y.onTrainBegin(),e.stopTraining_=!1;for(let A=d;A{let T=k[I][0],_=k[I][1],R=fc(w,T,_-T);N.batch=I,N.size=_-T;let S=$I(n,R),F=t(S);for(let B=0;B0){if(h=!0,r.validationData.length===2)a=r.validationData[0],i=r.validationData[1];else throw r.validationData.length===3?new st("validationData including sample weights is not supported yet."):new ne(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);let k=!0,I=await e.standardizeUserData(a,i,null,null,k,p);l=I[0],u=I[1],m=l.concat(u)}else if(r.validationSplit!=null&&r.validationSplit>0&&r.validationSplit<1){h=!0;let k=Math.floor(s[0].shape[0]*(1-r.validationSplit)),I=s[0].shape[0];l=Gy(s,k,I),s=Gy(s,0,k),u=Gy(o,k,I),o=Gy(o,0,k),m=l.concat(u)}else r.validationSteps!=null&&(h=!0);let g=s.concat(o).concat(c);e.checkTrainableWeightsConsistency();let x=e.makeTrainFunction(),y=e.getDedupedMetricsNames(),b,A;h?(e.makeTestFunction(),b=e.testFunction,A=y.slice().concat(y.map(k=>"val_"+k))):(b=null,m=[],A=y.slice());let v=AI(r.callbacks,r.yieldEvery);return await DGe(e,x,g,y,p,r.epochs,r.verbose,v,b,m,r.shuffle,A,r.initialEpoch,null,null)}finally{e.isTraining=!1,yd(s,t),yd(o,n),yd(l,a),yd(u,i),c!=null&&ut(c)}}function k$(e){let t=[];e instanceof Ot&&(e=[e]);for(let n=0;nn.push(s.id));else if(t!=null)for(let s in t){let o=t[s];n.push(o.id)}let r=[];if(e instanceof Ot)n.indexOf(e.id)===-1&&r.push(e);else if(Array.isArray(e))e.forEach(s=>{n.indexOf(s.id)===-1&&r.push(s)});else if(e!=null)for(let s in e){let o=e[s];n.indexOf(o.id)===-1&&r.push(o)}r.forEach(s=>{s.isDisposed||s.dispose()})}function $Ge(e){return e instanceof Ot}function I$(e){return Array.isArray(e)}function BZ(e){return!$Ge(e)&&!I$(e)}function VZ(e,t,n,r=!0,s=""){if(t==null||t.length===0){if(e!=null){let a=!1;if(I$(e)&&e.length>0)a=!0;else if(BZ(e)){for(let i in e)if(e.hasOwnProperty(i)){a=!0;break}}else a=!0;if(a)throw new ne(`Error when checking model ${s} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(a=>null);let o;if(BZ(e)){e=e,o=[];for(let a of t){if(e[a]==null)throw new ne(`No data provided for "${a}". Need data for each key in: ${t}`);o.push(e[a])}}else if(I$(e)){if(e=e,e.length!==t.length)throw new ne(`Error when checking model ${s}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);o=e}else{if(e=e,t.length>1)throw new ne(`The model ${s} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);o=[e]}if(o=k$(o),n!=null)for(let a=0;a=0&&u!==c)throw new ne(`${s} expected a batch of elements where each example has shape [${n[a].slice(1,n[a].length)}] (i.e.,tensor shape [*,${n[a].slice(1,n[a].length)}]) but the ${s} received an input with ${i.shape[0]} examples, each with shape [${i.shape.slice(1,i.shape.length)}] (tensor shape [${i.shape}])`)}}return o}function FGe(e,t,n){let r=ei(e.map(o=>o.shape[0]));r.sort();let s=ei(t.map(o=>o.shape[0]));if(s.sort(),r.length>1)throw new ne(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(o=>o.shape))}`);if(s.length>1)throw new ne(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(o=>o.shape))}`);if(r.length>0&&s.length>0&&!C.arraysEqual(r,s))throw new ne(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${s[0]} target sample(s).`)}function OGe(e,t,n){let r=[Cm,Vy,Sm];for(let s=0;s1)throw new ne(`The model expects ${t.length} ${s} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);o=[e]}if(n!=null)for(let a=0;a[]);let n;if(typeof e=="string"||typeof e=="function")n=[e];else if(Array.isArray(e)||typeof e=="object")n=e;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);if(Array.isArray(n))return t.map(r=>n);{let r=[];for(let s of t){let o=n.hasOwnProperty(s)?n[s]:[];Array.isArray(o)||(o=[o]),r.push(o)}return r}}var MGe="layers-model",Ui=class extends Ia{constructor(t){super(t);this.isTraining=!1}summary(t,n,r=console.log){if(!this.built)throw new ne("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");_Z(this,t,n,r)}compile(t){if(t.loss==null&&(t.loss=[]),this.loss=t.loss,typeof t.optimizer=="string")this.optimizer_=NZ(t.optimizer),this.isOptimizerOwned=!0;else{if(!(t.optimizer instanceof Fs))throw new ne("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=t.optimizer,this.isOptimizerOwned=!1}let n=[];if(!Array.isArray(t.loss)&&typeof t.loss!="string"&&typeof t.loss!="function"){t.loss=t.loss;for(let a in t.loss)if(this.outputNames.indexOf(a)===-1)throw new ne(`Unknown entry in loss dictionary: "${a}". Only expected the following keys: ${this.outputNames}`);for(let a of this.outputNames)t.loss[a]==null&&console.warn(`Output "${a}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${a} during training`),n.push(kI(t.loss[a]))}else if(Array.isArray(t.loss)){if(t.loss.length!==this.outputs.length)throw new ne(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${t.loss}.`);n=t.loss.map(i=>kI(i))}else{let a=kI(t.loss);this.outputs.forEach(i=>{n.push(a)})}this.lossFunctions=n,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let a=0;a{for(let a=0;a1&&(this.metricsTensors.push([i,a]),this.metricsNames.push(this.outputNames[a]+"_loss"))}});let s=PGe(t.metrics,this.outputNames),o=(a,i,l)=>{this.outputNames.length>1&&(i=this.outputNames[a]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([l,a])};Vi("metric",()=>{for(let a=0;a{let c="",p,d,f;for(let h of u){if(typeof h=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(h)!==-1){let g=this.internalOutputShapes[a];g[g.length-1]===1||this.lossFunctions[a]===Vy?["accuracy","acc"].indexOf(h)!==-1?d=II:["crossentropy","ce"].indexOf(h)!==-1&&(d=x$):this.lossFunctions[a]===By?["accuracy","acc"].indexOf(h)!==-1?d=y$:["crossentropy","ce"].indexOf(h)!==-1&&(d=b$):["accuracy","acc"].indexOf(h)!==-1?d=CI:["crossentropy","ce"].indexOf(h)!==-1&&(d=SI);let x;["accuracy","acc"].indexOf(h)!==-1?x="acc":["crossentropy","ce"].indexOf(h)!==-1&&(x="ce"),f=d,p=c+x}else f=SZ(h),p=c+V2(h);let m;Vi(p,()=>{m=f}),o(a,p,m)}})(i)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(t,n,r={}){let s=r.batchSize==null?32:r.batchSize;DI(s);let o=!0,a=this.standardizeUserDataXY(t,n,o,s);try{let i=a[0].concat(a[1]);this.makeTestFunction();let l=this.testFunction,u=this.testLoop(l,i,s,r.verbose,r.steps);return Jr(u)}finally{yd(a[0],t),yd(a[1],n)}}async evaluateDataset(t,n){return this.makeTestFunction(),zZ(this,t,n)}checkNumSamples(t,n,r,s="steps"){let o;if(r!=null){if(o=null,n!=null)throw new ne(`If ${s} is set, batchSize must be null or undefined.Got batchSize = ${n}`)}else if(t!=null)Array.isArray(t)?o=t[0].shape[0]:o=t.shape[0];else throw new ne(`Either the input data should have a defined shape, or ${s} shoud be specified.`);return o}execute(t,n){if(Array.isArray(n)&&n.length===0)throw new ne("`outputs` is an empty Array, which is not allowed.");let r=Array.isArray(n),s=r?n:[n],o=this.retrieveSymbolicTensors(s),a=new Gi;if(t instanceof Ot&&(t=[t]),Array.isArray(t)){if(t.length!==this.inputs.length)throw new ne(`The number of inputs provided (${t.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let l=0;li.name);for(let i=0;i0){let s=[];throw n.forEach((o,a)=>{o==null&&s.push(t[a])}),new ne(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(s)}`)}return n}predictLoop(t,n=32,r=!1){return le(()=>{let s=this.checkNumSamples(t);if(r)throw new st("Verbose predictLoop() is not implemented yet.");let o=FI(s,n),a=this.outputs.map(i=>[]);for(let i=0;i{let u=o[i][0],c=o[i][1],p=Gy(t,u,c),d=[];if(Array.isArray(p))for(let h=0;ha[c].push(u));return Jr(a.map(i=>on(i,0)))})}predict(t,n={}){let r=k$(t);WZ(r,this.inputNames,this.feedInputShapes,!1);try{let s=n.batchSize==null?32:n.batchSize;return DI(s),this.predictLoop(r,s)}finally{yd(r,t)}}predictOnBatch(t){WZ(t,this.inputNames,this.feedInputShapes,!0);let n=(Array.isArray(t)?t[0]:t).shape[0];return this.predictLoop(t,n)}standardizeUserDataXY(t,n,r=!0,s){if(this.optimizer_==null)throw new Os("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let o=[];for(let a=0;a0&&t[0].shape[0]%s!=0)throw new ne(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${s}. Found: ${t[0].shape[0]} sample(s).`);return[t,n]}async standardizeUserData(t,n,r,s,o=!0,a){let[i,l]=this.standardizeUserDataXY(t,n,o,a);if(r!=null)throw new Error("sample weight is not supported yet.");let u=null;if(s!=null){let c=EI(s,this.outputNames);u=[];for(let p=0;p{let a=this.checkNumSamples(n,r,o,"steps"),i=[];if(s>0)throw new st("Verbose mode is not implemented yet.");if(o!=null)throw new st("steps mode in testLoop() is not implemented yet");{let l=FI(a,r),u=Kn(Ps(0,a));for(let c=0;c1&&(o+=`_${o$(t.slice(0,r),s)}`),n.push(o)}return n}makeTrainFunction(){return t=>{let n=[],r=t.slice(0,this.inputs.length),s=t.slice(this.inputs.length,this.inputs.length+this.outputs.length),o=t.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),a=[],i=()=>{let p=[];for(let m=0;m1&&m{h=Ie(h,m)}),h},l=this.collectedTrainableWeights.map(p=>p.read()),u=!0;return[this.optimizer_.minimize(i,u,l)].concat(a)}}makeTestFunction(){this.testFunction=t=>le(()=>{let n=[],r,s=t.slice(0,this.inputs.length),o=t.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=[];for(let u=0;uJa(n))}else{let n=Object.keys(this.loss);t={};let r=this.loss;for(let s of n)if(typeof r[s]=="string")t[s]=Ja(r[s]);else throw new Error("Serialization of non-string loss is not supported.")}return t}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[Ja(V2(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(t=>Ja(V2(t)));{let t={};for(let n in this.metrics)t[n]=Ja(V2(this.metrics[n]));return t}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(t){if(t.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(t.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(t.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let n=W2(t.optimizer_config),r=aa(n),s;if(typeof t.loss=="string")s=pc(t.loss);else if(Array.isArray(t.loss))s=t.loss.map(a=>pc(a));else if(t.loss!=null){s={};for(let a in t.loss)s[a]=pc(t.loss[a])}let o;if(Array.isArray(t.metrics))o=t.metrics.map(a=>pc(a));else if(t.metrics!=null){o={};for(let a in t.metrics)o[a]=pc(t.metrics[a])}this.compile({loss:s,metrics:o,optimizer:r})}async save(t,n){if(typeof t=="string"){let u=na.getSaveHandlers(t);if(u.length===0)throw new ne(`Cannot find any save handlers for URL '${t}'`);if(u.length>1)throw new ne(`Found more than one (${u.length}) save handlers for URL '${t}'`);t=u[0]}if(t.save==null)throw new ne("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let r=await na.encodeWeights(this.getNamedWeights(n)),s=!1,o=null,i={modelTopology:this.toJSON(o,s),format:MGe,generatedBy:`TensorFlow.js tfjs-layers v${Wy}`,convertedBy:null};if((n==null?!1:n.includeOptimizer)&&this.optimizer!=null){i.trainingConfig=this.getTrainingConfig();let u="optimizer",{data:c,specs:p}=await na.encodeWeights(await this.optimizer.getWeights(),u);r.specs.push(...p),r.data=na.concatenateArrayBuffers([r.data,c])}if(this.userDefinedMetadata!=null){let u=!0;A$(this.userDefinedMetadata,this.name,u),i.userDefinedMetadata=this.userDefinedMetadata}return i.weightData=r.data,i.weightSpecs=r.specs,t.save(i)}setUserDefinedMetadata(t){A$(t,this.name),this.userDefinedMetadata=t}getUserDefinedMetadata(){return this.userDefinedMetadata}};Ui.className="Model";ke.registerClass(Ui);var C$=class extends Ui{};C$.className="Functional";ke.registerClass(C$);var bd=class extends Ui{constructor(t){super({inputs:[],outputs:[]});if(t=t||{},this.trainable=!0,this.built=!1,this.name=t.name!=null?t.name:gd("sequential_"),t.layers!=null)for(let n of t.layers)this.add(n)}checkShape(t){if(t.inboundNodes[0].outputTensors[0].shape.some(r=>r<0))throw new ne(`Negative dimension size caused by adding layer ${t.name} with input shape [${t.inboundNodes[0].inputTensors[0].shape}]`)}add(t){let n=t instanceof bd||t instanceof Ui,r;if(n){if(r=t,r.outputs.length!==1)throw new ne("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(r.inputs.length!==1)throw new ne("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(t.inboundNodes.length===0){if(t.batchInputShape==null)throw new ne("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let s=f$({batchShape:t.batchInputShape,dtype:t.dtype,name:t.name+"_input"});t.apply(s)}if(n)this.outputs=r.outputs,this.inputs=r.inputs;else{if(t.inboundNodes.length!==1)throw new ne(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${t.name} which has ${t.inboundNodes.length} pre-existing inbound connections.`);if(t.inboundNodes[0].outputTensors.length!==1)throw new ne("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[t.inboundNodes[0].outputTensors[0]],this.inputs=d$(this.outputs[0])}this.inboundNodes=[],new xd({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:Ya(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(s=>s.shape),outputShapes:this.outputs[0].shape})}else{let s=t.apply(this.outputs[0]);if(Array.isArray(s))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[s],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(t),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let t=this.layers.length-1;this.layers[t].outboundNodes=[],this.outputs=[this.layers[t].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(t,n){return this.model==null&&this.build(),this.model.call(t,n)}build(t){if(Ft(t),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Ui({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(t,n,r=console.log){this.built||this.build(),super.summary(t,n,r)}setWeights(t){this.model==null&&this.build(),this.model.setWeights(t)}evaluate(t,n,r={}){if(!this.built)throw new Os("The model needs to be compiled before being used.");return this.model.evaluate(t,n,r)}async evaluateDataset(t,n){if(!this.built)throw new Os("The model needs to be compiled before being used.");return this.model.evaluateDataset(t,n)}predict(t,n={}){return this.model==null&&this.build(),this.model.predict(t,n)}predictOnBatch(t){return this.model==null&&this.build(),this.model.predictOnBatch(t)}compile(t){this.build(),this.model.compile(t),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(t){this.model.optimizer=t}async fit(t,n,r={}){if(!this.built)throw new Os("The model needs to be compiled before being used.");return this.model.fit(t,n,r)}async fitDataset(t,n){if(!this.built)throw new Os("The model needs to be compiled before being used.");return this.model.fitDataset(t,n)}async trainOnBatch(t,n){return this.model.trainOnBatch(t,n)}static fromConfig(t,n,r={},s=!1){let o,a={};if(n instanceof Array){if(n[0].className==null||n[0].className==="Merge")throw new ne("Legacy serialization format not supported yet.");o=n}else C.assert(n.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),o=n.layers,delete n.layers,a=n;let i=new t(a);if(!(i instanceof bd))throw new st(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let l of o){let c=aa(l,void 0,s);s&&c.setFastWeightInitDuringBuild(!0),i.add(c)}return i}set stopTraining(t){if(this.model==null)throw new ne("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=t}get stopTraining(){if(this.model==null)throw new ne("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let t=[];for(let n of this.layers){let r={};r.className=n.getClassName(),r.config=n.getConfig(),t.push(r)}return{name:this.name,layers:t}}};bd.className="Sequential";ke.registerClass(bd);var co=class extends ke.Serializable{getConfig(){return{}}},S$=class extends co{apply(t,n=1){return mZ(t,n)}};S$.className="elu";ke.registerClass(S$);var N$=class extends co{apply(t){return cm(t)}};N$.className="selu";ke.registerClass(N$);var T$=class extends co{apply(t){return to(t)}};T$.className="relu";ke.registerClass(T$);var _$=class extends co{apply(t){return le(()=>oc(6,to(t)))}};_$.className="relu6";ke.registerClass(_$);var E$=class extends co{apply(t){return t}};E$.className="linear";ke.registerClass(E$);var R$=class extends co{apply(t){return ra(t)}};R$.className="sigmoid";ke.registerClass(R$);var D$=class extends co{apply(t){return xZ(t)}};D$.className="hardSigmoid";ke.registerClass(D$);var $$=class extends co{apply(t){return Ka(t)}};$$.className="softplus";ke.registerClass($$);var F$=class extends co{apply(t){return gZ(t)}};F$.className="softsign";ke.registerClass(F$);var O$=class extends co{apply(t){return pd(t)}};O$.className="tanh";ke.registerClass(O$);var G2=class extends co{apply(t,n=-1){return uc(t,n)}};G2.className="softmax";ke.registerClass(G2);var P$=class extends co{apply(t,n=-1){return rm(t,n)}};P$.className="logSoftmax";ke.registerClass(P$);var M$=class extends co{apply(t,n=1){return le(()=>Y(ra(Y(t,n)),t))}};M$.className="swish";ke.registerClass(M$);var z$=class extends co{apply(t){return le(()=>Y(t,pd(Ka(t))))}};z$.className="mish";ke.registerClass(z$);function ji(e){return e.getClassName()}function L$(e,t={}){return Nl(e,ke.SerializationMap.getMap().classNameMap,t,"activation")}function Hi(e){if(e==null){let t={};return t.className="linear",t.config={},L$(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},L$(t)}else return e instanceof co?e:L$(e)}function zGe(e){if(e!=null&&typeof e!="object")throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}var B$=class extends ke.Serializable{},OI=class extends B${constructor(t){super();zGe(t),this.l1=t==null||t.l1==null?.01:t.l1,this.l2=t==null||t.l2==null?.01:t.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(t){return le(()=>{let n=fn([1]);return this.hasL1&&(n=Ie(n,ze(Y(this.l1,sr(t))))),this.hasL2&&(n=Ie(n,ze(Y(this.l2,km(t))))),X(n,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(t,n){return new t({l1:n.l1,l2:n.l2})}};OI.className="L1L2";ke.registerClass(OI);var GZ={l1l2:"L1L2"};function nn(e){return Ry(e)}function UZ(e,t={}){return Nl(e,ke.SerializationMap.getMap().classNameMap,t,"regularizer")}function gn(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in GZ?GZ[e]:e,config:{}};return UZ(n)}else return e instanceof B$?e:UZ(e)}var PI=class extends It{constructor(t){super(t==null?{}:t);this.supportsMasking=!0,t!=null&&(this.maxValue=t.maxValue)}call(t,n){t=bt(t);let r=to(t);return this.maxValue!=null&&(r=Pr(r,0,this.maxValue)),r}computeOutputShape(t){return t}getConfig(){let t={maxValue:this.maxValue},n=super.getConfig();return Object.assign(t,n),t}};PI.className="ReLU";ke.registerClass(PI);var MI=class extends It{constructor(t){super(t==null?{}:t);this.DEFAULT_ALPHA=.3,t==null&&(t={}),this.alpha=t.alpha==null?this.DEFAULT_ALPHA:t.alpha}call(t,n){let r=bt(t);return nc(r,this.alpha)}computeOutputShape(t){return t}getConfig(){let t={alpha:this.alpha},n=super.getConfig();return Object.assign(t,n),t}};MI.className="LeakyReLU";ke.registerClass(MI);var zI=class extends It{constructor(t){super(t==null?{}:t);if(this.DEFAULT_ALPHA_INITIALIZER="zeros",t==null&&(t={}),this.supportsMasking=!0,this.alphaInitializer=un(t.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=gn(t.alphaRegularizer),this.alphaConstraint=Bn(t.alphaConstraint),t.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(t.sharedAxes))this.sharedAxes=t.sharedAxes;else if(typeof t.sharedAxes=="number")this.sharedAxes=[t.sharedAxes];else throw new ne(`Expected sharedAxes to be a number or an array of numbers, but got ${t.sharedAxes}`)}build(t){t=Ft(t);let n=t.slice(1);if(this.sharedAxes!=null)for(let s of this.sharedAxes)n[s-1]=1;this.alpha=this.addWeight("alpha",n,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let r={};if(this.sharedAxes!=null)for(let s=1;s(Fn(t),t==="channelsFirst"?St(e,[0,2,3,1]):e))}function V$(e,t){return le(()=>(Fn(t),t==="channelsFirst"?St(e,[0,2,3,4,1]):e))}function LGe(e,t,n,r=1,s="valid",o,a=1){return le(()=>{if(o==null&&(o=oo()),Fn(o),e.shape.length!==3)throw new ne(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new ne(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new ne(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(o==="channelsFirst"&&(e=St(e,[0,2,1])),s==="causal")throw new st("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let i=Zh(e,t,r,s==="same"?"same":"valid","NWC",a);return n!=null&&(i=io(i,n)),i})}function jZ(e,t,n,r=[1,1],s="valid",o,a,i=null){return le(()=>{if(o==null&&(o=oo()),Fn(o),e.rank!==3&&e.rank!==4)throw new ne(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new ne(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=U2(e,o);if(s==="causal")throw new st("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=Xa.conv2d({x:l,filter:t,strides:r,pad:s==="same"?"same":"valid",dilations:a,dataFormat:"NHWC",bias:n,activation:i}),o==="channelsFirst"&&(l=St(l,[0,3,1,2])),l})}function BGe(e,t,n,r=[1,1,1],s="valid",o,a){return le(()=>{if(o==null&&(o=oo()),Fn(o),e.rank!==4&&e.rank!==5)throw new ne(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new ne(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let i=V$(e,o);if(s==="causal")throw new st("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return i=qA(i,t,r,s==="same"?"same":"valid","NDHWC",a),n!=null&&(i=io(i,n)),o==="channelsFirst"&&(i=St(i,[0,4,1,2,3])),i})}var Uy=class extends It{constructor(t,n){super(n);if(this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",Uy.verifyArgs(n),this.rank=t,ar(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new st(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Ad(n.kernelSize,t,"kernelSize"),this.strides=Ad(n.strides==null?1:n.strides,t,"strides"),this.padding=n.padding==null?"valid":n.padding,ao(this.padding),this.dataFormat=n.dataFormat==null?"channelsLast":n.dataFormat,Fn(this.dataFormat),this.activation=Hi(n.activation),this.useBias=n.useBias==null?!0:n.useBias,this.biasInitializer=un(n.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Bn(n.biasConstraint),this.biasRegularizer=gn(n.biasRegularizer),this.activityRegularizer=gn(n.activityRegularizer),this.dilationRate=Ad(n.dilationRate==null?1:n.dilationRate,t,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new ne(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new ne(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new ne(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(t){if(ka("kernelSize"in t,"required key 'kernelSize' not in config"),typeof t.kernelSize!="number"&&!Y3(t.kernelSize,"number",1,3))throw new ne(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(t.kernelSize)}.`)}getConfig(){let t={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:ji(this.activation),useBias:this.useBias,biasInitializer:vn(this.biasInitializer),biasRegularizer:nn(this.biasRegularizer),activityRegularizer:nn(this.activityRegularizer),biasConstraint:Ln(this.biasConstraint)},n=super.getConfig();return Object.assign(t,n),t}},Tm=class extends Uy{constructor(t,n){super(t,n);this.kernel=null,Tm.verifyArgs(n),this.filters=n.filters,ar(this.filters,"filters"),this.kernelInitializer=un(n.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Bn(n.kernelConstraint),this.kernelRegularizer=gn(n.kernelRegularizer)}build(t){t=Ft(t);let n=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[n]==null)throw new ne(`The channel dimension of the input should be defined. Found ${t[n]}`);let r=t[n],s=this.kernelSize.concat([r,this.filters]);this.kernel=this.addWeight("kernel",s,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[n]:r}}],this.built=!0}call(t,n){return le(()=>{t=bt(t);let r,s=this.bias==null?null:this.bias.read(),o=J3(this.activation.getClassName());if(o!=null&&this.rank===2)r=jZ(t,this.kernel.read(),s,this.strides,this.padding,this.dataFormat,this.dilationRate,o);else{if(this.rank===1)r=LGe(t,this.kernel.read(),s,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)r=jZ(t,this.kernel.read(),s,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)r=BGe(t,this.kernel.read(),s,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new st("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(r=this.activation.apply(r))}return r})}computeOutputShape(t){t=Ft(t);let n=[],r=this.dataFormat==="channelsLast"?t.slice(1,t.length-1):t.slice(2);for(let o=0;o 0 but got ${JSON.stringify(t.filters)}`)}},_m=class extends Tm{constructor(t){super(2,t);_m.verifyArgs(t)}getConfig(){let t=super.getConfig();return delete t.rank,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!Y3(t.kernelSize,"number",1,2))throw new ne(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(t.kernelSize)}.`)}};_m.className="Conv2D";ke.registerClass(_m);var Em=class extends Tm{constructor(t){super(3,t);Em.verifyArgs(t)}getConfig(){let t=super.getConfig();return delete t.rank,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!(Array.isArray(t.kernelSize)&&(t.kernelSize.length===1||t.kernelSize.length===3)))throw new ne(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(t.kernelSize)}.`)}};Em.className="Conv3D";ke.registerClass(Em);var WI=class extends _m{constructor(t){super(t);if(this.inputSpec=[new wn({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new ne(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(t){if(t=Ft(t),t.length!==4)throw new ne("Input should have rank 4; Received input shape: "+JSON.stringify(t));let n=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[n]==null)throw new ne("The channel dimension of the inputs should be defined. Found `None`.");let r=t[n],s=this.kernelSize.concat([this.filters,r]);this.kernel=this.addWeight("kernel",s,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new wn({ndim:4,axes:{[n]:r}})],this.built=!0}call(t,n){return le(()=>{let r=bt(t);if(r.shape.length!==4)throw new ne(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${r.shape.length}`);let s=r.shape,o=s[0],a,i;this.dataFormat==="channelsFirst"?(a=2,i=3):(a=1,i=2);let l=s[a],u=s[i],c=this.kernelSize[0],p=this.kernelSize[1],d=this.strides[0],f=this.strides[1],h=qi(l,d,c,this.padding),m=qi(u,f,p,this.padding),g=[o,h,m,this.filters];this.dataFormat!=="channelsLast"&&(r=St(r,[0,2,3,1]));let x=Yh(r,this.kernel.read(),g,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(x=St(x,[0,3,1,2])),this.bias!=null&&(x=io(x,this.bias.read(),this.dataFormat)),this.activation!=null&&(x=this.activation.apply(x)),x})}computeOutputShape(t){t=Ft(t);let n=t.slice(),r,s,o;this.dataFormat==="channelsFirst"?(r=1,s=2,o=3):(r=3,s=1,o=2);let a=this.kernelSize[0],i=this.kernelSize[1],l=this.strides[0],u=this.strides[1];return n[r]=this.filters,n[s]=qi(n[s],l,a,this.padding),n[o]=qi(n[o],u,i,this.padding),n}getConfig(){let t=super.getConfig();return delete t.dilationRate,t}};WI.className="Conv2DTranspose";ke.registerClass(WI);var GI=class extends Em{constructor(t){super(t);if(this.inputSpec=[new wn({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new ne(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(t){if(t=Ft(t),t.length!==5)throw new ne("Input should have rank 5; Received input shape: "+JSON.stringify(t));let n=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[n]==null)throw new ne("The channel dimension of the inputs should be defined. Found `None`.");let r=t[n],s=this.kernelSize.concat([this.filters,r]);this.kernel=this.addWeight("kernel",s,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new wn({ndim:5,axes:{[n]:r}})],this.built=!0}call(t,n){return le(()=>{let r=bt(t);if(r.shape.length!==5)throw new ne(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${r.shape.length}`);let s=r.shape,o=s[0],a,i,l;this.dataFormat==="channelsFirst"?(l=2,a=3,i=4):(l=1,a=2,i=3);let u=s[l],c=s[a],p=s[i],d=this.kernelSize[0],f=this.kernelSize[1],h=this.kernelSize[2],m=this.strides[0],g=this.strides[1],x=this.strides[2],y=qi(u,m,d,this.padding),b=qi(c,g,f,this.padding),A=qi(p,x,h,this.padding),v=[o,y,b,A,this.filters];this.dataFormat!=="channelsLast"&&(r=St(r,[0,2,3,4,1]));let w=kD(r,this.kernel.read(),v,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(w=St(w,[0,4,1,2,3])),this.bias!==null&&(w=io(w,this.bias.read(),this.dataFormat)),this.activation!==null&&(w=this.activation.apply(w)),w})}computeOutputShape(t){t=Ft(t);let n=t.slice(),r,s,o,a;this.dataFormat==="channelsFirst"?(r=1,s=2,o=3,a=4):(r=4,s=1,o=2,a=3);let i=this.kernelSize[0],l=this.kernelSize[1],u=this.kernelSize[2],c=this.strides[0],p=this.strides[1],d=this.strides[2];return n[r]=this.filters,n[s]=qi(n[s],c,i,this.padding),n[o]=qi(n[o],p,l,this.padding),n[a]=qi(n[a],d,u,this.padding),n}getConfig(){let t=super.getConfig();return delete t.dilationRate,t}};GI.className="Conv3DTranspose";ke.registerClass(GI);var W$=class extends Tm{constructor(t,n){super(t,n);if(this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,n.filters==null)throw new ne("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(n.kernelInitializer!=null||n.kernelRegularizer!=null||n.kernelConstraint!=null)throw new ne("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(n.padding!=null&&n.padding!=="same"&&n.padding!=="valid")throw new ne(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(n.padding)}`);this.depthMultiplier=n.depthMultiplier==null?1:n.depthMultiplier,this.depthwiseInitializer=un(n.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=gn(n.depthwiseRegularizer),this.depthwiseConstraint=Bn(n.depthwiseConstraint),this.pointwiseInitializer=un(n.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=gn(n.pointwiseRegularizer),this.pointwiseConstraint=Bn(n.pointwiseConstraint)}build(t){if(t=Ft(t),t.length{t=bt(t);let r;if(this.rank===1)throw new st("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(t=St(t,[0,2,3,1])),r=i2(t,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(r=io(r,this.bias.read(),this.dataFormat)),this.activation!=null&&(r=this.activation.apply(r)),this.dataFormat==="channelsFirst"&&(r=St(r,[0,3,1,2])),r})}getConfig(){let t=super.getConfig();return delete t.rank,delete t.kernelInitializer,delete t.kernelRegularizer,delete t.kernelConstraint,t.depthwiseInitializer=vn(this.depthwiseInitializer),t.pointwiseInitializer=vn(this.pointwiseInitializer),t.depthwiseRegularizer=nn(this.depthwiseRegularizer),t.pointwiseRegularizer=nn(this.pointwiseRegularizer),t.depthwiseConstraint=Ln(this.depthwiseConstraint),t.pointwiseConstraint=Ln(this.pointwiseConstraint),t}};W$.className="SeparableConv";var UI=class extends W${constructor(t){super(2,t)}};UI.className="SeparableConv2D";ke.registerClass(UI);var jy=class extends Tm{constructor(t){super(1,t);jy.verifyArgs(t),this.inputSpec=[{ndim:3}]}getConfig(){let t=super.getConfig();return delete t.rank,delete t.dataFormat,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!Y3(t.kernelSize,"number",1,1))throw new ne(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(t.kernelSize)}.`)}};jy.className="Conv1D";ke.registerClass(jy);var jI=class extends It{constructor(t){super(t);typeof t.cropping=="number"?this.cropping=[[t.cropping,t.cropping],[t.cropping,t.cropping]]:typeof t.cropping[0]=="number"?this.cropping=[[t.cropping[0],t.cropping[0]],[t.cropping[1],t.cropping[1]]]:this.cropping=t.cropping,this.dataFormat=t.dataFormat===void 0?"channelsLast":t.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(t){return this.dataFormat==="channelsFirst"?[t[0],t[1],t[2]-this.cropping[0][0]-this.cropping[0][1],t[3]-this.cropping[1][0]-this.cropping[1][1]]:[t[0],t[1]-this.cropping[0][0]-this.cropping[0][1],t[2]-this.cropping[1][0]-this.cropping[1][1],t[3]]}call(t,n){return le(()=>{if(t=bt(t),this.dataFormat==="channelsLast"){let r=_2(t,this.cropping[0][0],t.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return _2(r,this.cropping[1][0],t.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let r=_2(t,this.cropping[0][0],t.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return _2(r,this.cropping[1][0],t.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let t={cropping:this.cropping,dataFormat:this.dataFormat},n=super.getConfig();return Object.assign(t,n),t}};jI.className="Cropping2D";ke.registerClass(jI);var HI=class extends It{constructor(t){super(t);this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=t.size==null?this.DEFAULT_SIZE:t.size,this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Fn(this.dataFormat),this.interpolation=t.interpolation==null?"nearest":t.interpolation,lZ(this.interpolation)}computeOutputShape(t){if(this.dataFormat==="channelsFirst"){let n=t[2]==null?null:this.size[0]*t[2],r=t[3]==null?null:this.size[1]*t[3];return[t[0],t[1],n,r]}else{let n=t[1]==null?null:this.size[0]*t[1],r=t[2]==null?null:this.size[1]*t[2];return[t[0],n,r,t[3]]}}call(t,n){return le(()=>{let r=bt(t),s=r.shape;if(this.dataFormat==="channelsFirst"){r=St(r,[0,2,3,1]);let o=this.size[0]*s[2],a=this.size[1]*s[3],i=this.interpolation==="nearest"?so.resizeNearestNeighbor(r,[o,a]):so.resizeBilinear(r,[o,a]);return St(i,[0,3,1,2])}else{let o=this.size[0]*s[1],a=this.size[1]*s[2];return this.interpolation==="nearest"?so.resizeNearestNeighbor(r,[o,a]):so.resizeBilinear(r,[o,a])}})}getConfig(){let t={size:this.size,dataFormat:this.dataFormat},n=super.getConfig();return Object.assign(t,n),t}};HI.className="UpSampling2D";ke.registerClass(HI);function VGe(e,t,n=[1,1],r="valid",s,o){return le(()=>{s==null&&(s=oo()),Fn(s);let a=U2(e,s);if(e.rank!==4)throw new ne(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new ne(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return a=Oi(a,t,n,r==="same"?"same":"valid","NHWC",o),s==="channelsFirst"&&(a=St(a,[0,3,1,2])),a})}var qI=class extends Uy{constructor(t){super(2,t);this.depthwiseKernel=null,this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=un(t.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Bn(t.depthwiseConstraint),this.depthwiseRegularizer=gn(t.depthwiseRegularizer)}build(t){if(t=Ft(t),t.length<4)throw new ne(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(t)}.`);let n=this.dataFormat==="channelsFirst"?1:3;if(t[n]==null||t[n]<0)throw new ne(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${t[n]}).`);let r=t[n],s=[this.kernelSize[0],this.kernelSize[1],r,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",s,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[r*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(t,n){return le(()=>{t=bt(t);let r=VGe(t,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(r=io(r,this.bias.read(),this.dataFormat)),this.activation!=null&&(r=this.activation.apply(r)),r})}computeOutputShape(t){t=Ft(t);let n=this.dataFormat==="channelsFirst"?t[2]:t[1],r=this.dataFormat==="channelsFirst"?t[3]:t[2],s=this.dataFormat==="channelsFirst"?t[1]*this.depthMultiplier:t[3]*this.depthMultiplier,o=Do(n,this.kernelSize[0],this.padding,this.strides[0]),a=Do(r,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[t[0],s,o,a]:[t[0],o,a,s]}getConfig(){let t=super.getConfig();return t.depthMultiplier=this.depthMultiplier,t.depthwiseInitializer=vn(this.depthwiseInitializer),t.depthwiseRegularizer=nn(this.depthwiseRegularizer),t.depthwiseConstraint=Ln(this.depthwiseRegularizer),t}};qI.className="DepthwiseConv2D";ke.registerClass(qI);function G$(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new ne("When inputs is an array, neither initialState or constants should be provided");r!=null&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function s(o){return o==null||Array.isArray(o)?o:[o]}return t=s(t),n=s(n),{inputs:e,initialState:t,constants:n}}function U$(e,t,n,r=!1,s,o,a=!1,i=!1){return le(()=>{let l=t.shape.length;if(l<3)throw new ne(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(Ps(2,l));if(t=St(t,u),o!=null)throw new st("The rnn() functoin of the deeplearn.js backend does not support constants yet.");a&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),s!=null&&(s=we(we(s,"bool"),"float32"),s.rank===l-1&&(s=Mr(s,-1)),s=St(s,u)),r&&(t=no(t,0),s!=null&&(s=no(s,0)));let c=[],p,d=n,f=t.shape[0],h=zr(t),m;s!=null&&(m=zr(s));for(let x=0;xe(y,d));if(s==null)p=b[0],d=b[1];else{let A=le(()=>{let v=m[x],w=je(Nr(v),v),k=Ie(Y(b[0],v),Y(d[0],w)),I=d.map((N,T)=>Ie(Y(b[1][T],v),Y(N,w)));return{output:k,newStates:I}});p=A.output,d=A.newStates}i&&c.push(p)}let g;return i&&(g=or(c,1)),[p,g,d]})}var ri=class extends It{constructor(t){super(t);let n;if(t.cell==null)throw new ne("cell property is missing for the constructor of RNN.");if(Array.isArray(t.cell)?n=new q2({cells:t.cell}):n=t.cell,n.stateSize==null)throw new ne("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=n,this.returnSequences=t.returnSequences==null?!1:t.returnSequences,this.returnState=t.returnState==null?!1:t.returnState,this.goBackwards=t.goBackwards==null?!1:t.goBackwards,this._stateful=t.stateful==null?!1:t.stateful,this.unroll=t.unroll==null?!1:t.unroll,this.supportsMasking=!0,this.inputSpec=[new wn({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let t=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return Ps(0,t).map(n=>null)}else return this.states_}setStates(t){this.states_=t}computeOutputShape(t){xI(t)&&(t=t[0]),t=t;let n=this.cell.stateSize;Array.isArray(n)||(n=[n]);let r=n[0],s;if(this.returnSequences?s=[t[0],t[1],r]:s=[t[0],r],this.returnState){let o=[];for(let a of n)o.push([t[0],a]);return[s].concat(o)}else return s}computeMask(t,n){return le(()=>{Array.isArray(n)&&(n=n[0]);let r=this.returnSequences?n:null;if(this.returnState){let s=this.states.map(o=>null);return[r].concat(s)}else return r})}get states(){if(this.states_==null){let t=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,n=[];for(let r=0;ri.shape[i.shape.length-1]),a))throw new ne(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=a.map(i=>new wn({shape:[null,i]}));this.stateful&&this.resetStates()}resetStates(t,n=!1){le(()=>{if(!this.stateful)throw new sa("Cannot call resetStates() on an RNN Layer that is not stateful.");let r=this.inputSpec[0].shape[0];if(r==null)throw new ne("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(s=>fn([r,s])):this.states_=[fn([r,this.cell.stateSize])];else if(t==null)ut(this.states_),this.keptStates!=null&&(ut(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(s=>fn([r,s])):this.states_[0]=fn([r,this.cell.stateSize]);else{if(Array.isArray(t)||(t=[t]),t.length!==this.states_.length)throw new ne(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${t.length} state value(s). Input received: ${t}`);n===!0?this.keptStates.push(this.states_.slice()):ut(this.states_);for(let s=0;s$n(s.clone()))})}apply(t,n){let r=n==null?null:n.initialState,s=n==null?null:n.constants;n==null&&(n={});let o=G$(t,r,s,this.numConstants);t=o.inputs,r=o.initialState,s=o.constants;let a=[],i=[];if(r!=null){n.initialState=r,a=a.concat(r),this.stateSpec=[];for(let u of r)this.stateSpec.push(new wn({shape:u.shape}));i=i.concat(this.stateSpec)}if(s!=null&&(n.constants=s,a=a.concat(s),this.numConstants=s.length),a[0]instanceof uo){let u=[t].concat(a),c=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=c;let d=super.apply(u,n);return this.inputSpec=p,d}else return super.apply(t,n)}call(t,n){return le(()=>{let r=n==null?null:n.mask,s=n==null?null:n.training,o=n==null?null:n.initialState;t=bt(t),o==null&&(this.stateful?o=this.states_:o=this.getInitialState(t));let a=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(o.length!==a)throw new ne(`RNN Layer has ${a} state(s) but was passed ${o.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:s},u=U$((h,m)=>{let g=this.cell.call([h].concat(m),i);return[g[0],g.slice(1)]},t,o,this.goBackwards,r,null,this.unroll,this.returnSequences),c=u[0],p=u[1],d=u[2];this.stateful&&this.resetStates(d,s);let f=this.returnSequences?p:c;return this.returnState?[f].concat(d):f})}getInitialState(t){return le(()=>{let n=fn(t.shape);return n=ze(n,[1,2]),n=dc(n),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(r=>r>1?oI(n,[1,r]):n):this.cell.stateSize>1?[oI(n,[1,this.cell.stateSize])]:[n]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(t)}getConfig(){let t=super.getConfig(),n={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(n.numConstants=this.numConstants);let r=this.cell.getConfig();return this.getClassName()===ri.className&&(n.cell={className:this.cell.getClassName(),config:r}),Object.assign({},r,t,n)}static fromConfig(t,n,r={}){let s=n.cell,o=aa(s,r);return new t(Object.assign(n,{cell:o}))}};ri.className="RNN";ke.registerClass(ri);var Rm=class extends It{},j2=class extends Rm{constructor(t){super(t);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=t.units,ar(this.units,"units"),this.activation=Hi(t.activation==null?this.DEFAULT_ACTIVATION:t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.kernelInitializer=un(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=un(t.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=un(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=gn(t.kernelRegularizer),this.recurrentRegularizer=gn(t.recurrentRegularizer),this.biasRegularizer=gn(t.biasRegularizer),this.kernelConstraint=Bn(t.kernelConstraint),this.recurrentConstraint=Bn(t.recurrentConstraint),this.biasConstraint=Bn(t.biasConstraint),this.dropout=vm([1,Wi([0,t.dropout==null?0:t.dropout])]),this.recurrentDropout=vm([1,Wi([0,t.recurrentDropout==null?0:t.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(t){t=Ft(t),this.kernel=this.addWeight("kernel",[t[t.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(t,n){return le(()=>{if(t=t,t.length!==2)throw new ne(`SimpleRNNCell expects 2 input Tensors, got ${t.length}.`);let r=t[1];t=t[0];let s=n.training==null?!1:n.training;0Nr(t),rate:this.dropout,training:s})),0Nr(r),rate:this.recurrentDropout,training:s}));let o,a=this.dropoutMask,i=this.recurrentDropoutMask;a!=null?o=ni(Y(t,a),this.kernel.read()):o=ni(t,this.kernel.read()),this.bias!=null&&(o=io(o,this.bias.read())),i!=null&&(r=Y(r,i));let l=Ie(o,ni(r,this.recurrentKernel.read()));return this.activation!=null&&(l=this.activation.apply(l)),[l,l]})}getConfig(){let t=super.getConfig(),n={units:this.units,activation:ji(this.activation),useBias:this.useBias,kernelInitializer:vn(this.kernelInitializer),recurrentInitializer:vn(this.recurrentInitializer),biasInitializer:vn(this.biasInitializer),kernelRegularizer:nn(this.kernelRegularizer),recurrentRegularizer:nn(this.recurrentRegularizer),biasRegularizer:nn(this.biasRegularizer),activityRegularizer:nn(this.activityRegularizer),kernelConstraint:Ln(this.kernelConstraint),recurrentConstraint:Ln(this.recurrentConstraint),biasConstraint:Ln(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},t,n)}};j2.className="SimpleRNNCell";ke.registerClass(j2);var KI=class extends ri{constructor(t){t.cell=new j2(t);super(t)}call(t,n){return le(()=>{this.cell.dropoutMask!=null&&(ut(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ut(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let r=n==null?null:n.mask,s=n==null?null:n.training,o=n==null?null:n.initialState;return super.call(t,{mask:r,training:s,initialState:o})})}static fromConfig(t,n){return new t(n)}};KI.className="SimpleRNN";ke.registerClass(KI);var H2=class extends Rm{constructor(t){super(t);if(this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",t.resetAfter)throw new ne("GRUCell does not support reset_after parameter set to true.");this.units=t.units,ar(this.units,"units"),this.activation=Hi(t.activation===void 0?this.DEFAULT_ACTIVATION:t.activation),this.recurrentActivation=Hi(t.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:t.recurrentActivation),this.useBias=t.useBias==null?!0:t.useBias,this.kernelInitializer=un(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=un(t.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=un(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=gn(t.kernelRegularizer),this.recurrentRegularizer=gn(t.recurrentRegularizer),this.biasRegularizer=gn(t.biasRegularizer),this.kernelConstraint=Bn(t.kernelConstraint),this.recurrentConstraint=Bn(t.recurrentConstraint),this.biasConstraint=Bn(t.biasConstraint),this.dropout=vm([1,Wi([0,t.dropout==null?0:t.dropout])]),this.recurrentDropout=vm([1,Wi([0,t.recurrentDropout==null?0:t.recurrentDropout])]),this.implementation=t.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(t){t=Ft(t);let n=t[t.length-1];this.kernel=this.addWeight("kernel",[n,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(t,n){return le(()=>{if(t=t,t.length!==2)throw new ne(`GRUCell expects 2 input Tensors (inputs, h, c), got ${t.length}.`);let r=n.training==null?!1:n.training,s=t[1];t=t[0],0Nr(t),rate:this.dropout,training:r,count:3})),0Nr(s),rate:this.recurrentDropout,training:r,count:3}));let o=this.dropoutMask,a=this.recurrentDropoutMask,i,l,u;0{this.cell.dropoutMask!=null&&(ut(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ut(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let r=n==null?null:n.mask,s=n==null?null:n.training,o=n==null?null:n.initialState;return super.call(t,{mask:r,training:s,initialState:o})})}static fromConfig(t,n){return n.implmentation===0&&(n.implementation=1),new t(n)}};XI.className="GRU";ke.registerClass(XI);var Dm=class extends Rm{constructor(t){super(t);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=t.units,ar(this.units,"units"),this.activation=Hi(t.activation===void 0?this.DEFAULT_ACTIVATION:t.activation),this.recurrentActivation=Hi(t.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:t.recurrentActivation),this.useBias=t.useBias==null?!0:t.useBias,this.kernelInitializer=un(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=un(t.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=un(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=t.unitForgetBias,this.kernelRegularizer=gn(t.kernelRegularizer),this.recurrentRegularizer=gn(t.recurrentRegularizer),this.biasRegularizer=gn(t.biasRegularizer),this.kernelConstraint=Bn(t.kernelConstraint),this.recurrentConstraint=Bn(t.recurrentConstraint),this.biasConstraint=Bn(t.biasConstraint),this.dropout=vm([1,Wi([0,t.dropout==null?0:t.dropout])]),this.recurrentDropout=vm([1,Wi([0,t.recurrentDropout==null?0:t.recurrentDropout])]),this.implementation=t.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(t){var n;t=Ft(t);let r=t[t.length-1];this.kernel=this.addWeight("kernel",[r,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let s;if(this.useBias){if(this.unitForgetBias){let o=this.biasInitializer,a=this.units;s=new(n=class extends Ro{apply(l,u){let c=o.apply([a]),p=new Py().apply([a]),d=o.apply([a*2]);return c$(c$(c,p),d)}},n.className="CustomInit",n)}else s=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,s,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(t,n){return le(()=>{let r=n.training==null?!1:n.training;if(t=t,t.length!==3)throw new ne(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${t.length}.`);let s=t[1],o=t[2];t=t[0],0Nr(t),rate:this.dropout,training:r,count:4})),0Nr(s),rate:this.recurrentDropout,training:r,count:4}));let a=this.dropoutMask,i=this.recurrentDropoutMask,l,u,c,p;0{this.cell.dropoutMask!=null&&(ut(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ut(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let r=n==null?null:n.mask,s=n==null?null:n.training,o=n==null?null:n.initialState;return super.call(t,{mask:r,training:s,initialState:o})})}static fromConfig(t,n){return n.implmentation===0&&(n.implementation=1),new t(n)}};ZI.className="LSTM";ke.registerClass(ZI);var q2=class extends Rm{constructor(t){super(t);this.cells=t.cells}get stateSize(){let t=[];for(let n of this.cells.slice().reverse())Array.isArray(n.stateSize)?t.push(...n.stateSize):t.push(n.stateSize);return t}call(t,n){return le(()=>{t=t;let r=t.slice(1),s=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?s.push(r.splice(0,i.stateSize.length)):s.push(r.splice(0,1));s.reverse();let o=[],a;for(let i=0;i{Vi(`RNNCell_${s}`,()=>{r.build(t),Array.isArray(r.stateSize)?n=r.stateSize[0]:n=r.stateSize,t=[t[0],n]})}),this.built=!0}getConfig(){let t=super.getConfig(),n=o=>({className:o.getClassName(),config:o.getConfig()}),s={cells:this.cells.map(n)};return Object.assign({},t,s)}static fromConfig(t,n,r={}){let s=[];for(let o of n.cells)s.push(aa(o,r));return new t({cells:s})}get trainableWeights(){if(!this.trainable)return[];let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t}get nonTrainableWeights(){let t=[];for(let n of this.cells)t.push(...n.nonTrainableWeights);if(!this.trainable){let n=[];for(let r of this.cells)n.push(...r.trainableWeights);return n.concat(t)}return t}getWeights(){let t=[];for(let n of this.cells)t.push(...n.weights);return P2(t)}setWeights(t){let n=[];for(let r of this.cells){let s=r.weights.length,o=t.splice(s);for(let a=0;aiI(t(),n),a=()=>md(o,t,r);return!s||s<=1?$n(a().clone()):Array(s).fill(void 0).map(a).map(l=>$n(l.clone()))}var WGe=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,r=Object.getOwnPropertySymbols(e);s{if(this.cell.dropoutMask!=null&&(ut(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(ut(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),n&&n.constants)throw new ne("ConvRNN2D cell does not support constants");let r=n==null?null:n.mask,s=n==null?null:n.training,o=n==null?null:n.initialState;return super.call(t,{mask:r,training:s,initialState:o})})}computeOutputShape(t){let n=this.computeSingleOutputShape(t);return this.returnSequences||(n=[n[0],...n.slice(2)]),this.returnState&&(n=[n,...Array(2).fill([t[0],...n.slice(-3)])]),n}getInitialState(t){return le(()=>{let{stateSize:n}=this.cell,r=t.shape,s=this.computeSingleOutputShape(r),o=[s[0],...s.slice(2)],a=fn(o);return Array.isArray(n)?Array(n.length).fill(a):[a]})}resetStates(t,n=!1){le(()=>{if(!this.stateful)throw new sa("Cannot call resetStates() on an RNN Layer that is not stateful.");let r=this.inputSpec[0].shape,s=this.computeSingleOutputShape(r),o=[s[0],...s.slice(2)];if(r[0]==null)throw new ne("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>fn(o)):this.states_=[fn(o)];else if(t==null)ut(this.states_),this.keptStates!=null&&(ut(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>fn(o)):this.states_[0]=fn(o);else{if(Array.isArray(t)||(t=[t]),t.length!==this.states_.length)throw new ne(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${t.length} state value(s). Input received: ${t}`);n?this.keptStates.push(this.states_.slice()):ut(this.states_);for(let i=0;i$n(i.clone()))})}computeSingleOutputShape(t){let{dataFormat:n,filters:r,kernelSize:s,padding:o,strides:a,dilationRate:i}=this.cell,l=n==="channelsFirst",u=t[l?3:2],c=t[l?4:3],p=Do(u,s[0],o,a[0],i[0]),d=Do(c,s[1],o,a[1],i[1]);return[...t.slice(0,2),...l?[r,p,d]:[p,d,r]]}};j$.className="ConvRNN2D";var K2=class extends Dm{constructor(t){let{filters:n,kernelSize:r,strides:s,padding:o,dataFormat:a,dilationRate:i}=t;super(Object.assign({},t,{units:n}));this.filters=n,ar(this.filters,"filters"),this.kernelSize=Ad(r,2,"kernelSize"),this.kernelSize.forEach(l=>ar(l,"kernelSize")),this.strides=Ad(s||1,2,"strides"),this.strides.forEach(l=>ar(l,"strides")),this.padding=o||"valid",ao(this.padding),this.dataFormat=a||"channelsLast",Fn(this.dataFormat),this.dilationRate=Ad(i||1,2,"dilationRate"),this.dilationRate.forEach(l=>ar(l,"dilationRate"))}build(t){var n;t=Ft(t);let r=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[r]==null)throw new ne(`The channel dimension of the input should be defined. Found ${t[r]}`);let s=t[r],o=4,a=this.kernelSize.concat([s,this.filters*o]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*o]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let l;if(this.unitForgetBias){let u=this.biasInitializer,c=this.filters;l=new(n=class extends Ro{apply(d,f){let h=u.apply([c]),m=eo([c]),g=u.apply([c*2]);return Fy([h,m,g])}},n.className="CustomInit",n)}else l=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*o],null,l,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(t,n){return le(()=>{if(t.length!==3)throw new ne(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${t.length}.`);let r=n.training||!1,s=t[0],o=t[1],a=t[2],i=4;0Nr(s),rate:this.dropout,training:r,count:i}));let l=this.dropoutMask,u=(Q,ee,ue)=>!ee||!ee[ue]?Q:Y(ee[ue],Q),c=u(s,l,0),p=u(s,l,1),d=u(s,l,2),f=u(s,l,3);0Nr(o),rate:this.recurrentDropout,training:r,count:i}));let h=this.recurrentDropoutMask,m=u(o,h,0),g=u(o,h,1),x=u(o,h,2),y=u(o,h,3),b=3,[A,v,w,k]=yr(this.kernel.read(),i,b),[I,N,T,_]=this.useBias?yr(this.bias.read(),i):[null,null,null,null];c=this.inputConv(c,A,I,this.padding),p=this.inputConv(p,v,N,this.padding),d=this.inputConv(d,w,T,this.padding),f=this.inputConv(f,k,_,this.padding);let[R,S,F,B]=yr(this.recurrentKernel.read(),i,b);m=this.recurrentConv(m,R),g=this.recurrentConv(g,S),x=this.recurrentConv(x,F),y=this.recurrentConv(y,B);let W=this.recurrentActivation.apply(Ie(c,m)),q=this.recurrentActivation.apply(Ie(p,g)),K=Ie(Y(q,a),Y(W,this.activation.apply(Ie(d,x)))),J=Y(this.recurrentActivation.apply(Ie(f,y)),this.activation.apply(K));return[J,J,K]})}getConfig(){let t=super.getConfig(),{units:n}=t,r=WGe(t,["units"]),s={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},r,s)}inputConv(t,n,r,s){let o=Js(t,n,this.strides,s||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return r?io(o,r,this.dataFormat):o}recurrentConv(t,n){return Js(t,n,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};K2.className="ConvLSTM2DCell";ke.registerClass(K2);var YI=class extends j${constructor(t){let n=new K2(t);super(Object.assign({},t,{cell:n}))}static fromConfig(t,n){return new t(n)}};YI.className="ConvLSTM2D";ke.registerClass(YI);var X2=class extends It{constructor(t){super(t);this.rate=Math.max(Math.min(t.rate,1),0),this.noiseShape=t.noiseShape,this.seed=t.seed,this.supportsMasking=!0}getNoiseShape(t){if(this.noiseShape==null)return this.noiseShape;let n=t.shape,r=[];for(let s=0;s{this.invokeCallHook(t,n);let r=bt(t);if(0iI(r,this.rate,o,this.seed),()=>r,s)}return t})}getConfig(){let t={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},n=super.getConfig();return Object.assign(t,n),t}dispose(){return super.dispose()}};X2.className="Dropout";ke.registerClass(X2);var JI=class extends X2{constructor(t){super(t);this.inputSpec=[{ndim:3}]}getNoiseShape(t){let n=t.shape;return[n[0],1,n[2]]}};JI.className="SpatialDropout1D";ke.registerClass(JI);var QI=class extends It{constructor(t){super(t);if(this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",t.batchInputShape==null&&t.inputShape==null&&t.inputDim!=null){let n=null;t.batchSize!=null&&(n=t.batchSize),this.batchInputShape=[n,t.inputDim]}this.units=t.units,ar(this.units,"units"),this.activation=Hi(t.activation),t.useBias!=null&&(this.useBias=t.useBias),this.kernelInitializer=un(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=un(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Bn(t.kernelConstraint),this.biasConstraint=Bn(t.biasConstraint),this.kernelRegularizer=gn(t.kernelRegularizer),this.biasRegularizer=gn(t.biasRegularizer),this.activityRegularizer=gn(t.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(t){t=Ft(t);let n=t[t.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[n,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:n}}],this.built=!0}computeOutputShape(t){t=Ft(t);let n=t.slice();return n[n.length-1]=this.units,n}call(t,n){return le(()=>{this.invokeCallHook(t,n);let r=bt(t),s=J3(this.activation.getClassName()),o;return s!=null?o=ni(r,this.kernel.read(),s,this.bias?this.bias.read():null):(o=ni(r,this.kernel.read()),this.bias!=null&&(o=io(o,this.bias.read())),this.activation!=null&&(o=this.activation.apply(o))),o})}getConfig(){let t={units:this.units,activation:ji(this.activation),useBias:this.useBias,kernelInitializer:vn(this.kernelInitializer),biasInitializer:vn(this.biasInitializer),kernelRegularizer:nn(this.kernelRegularizer),biasRegularizer:nn(this.biasRegularizer),activityRegularizer:nn(this.activityRegularizer),kernelConstraint:Ln(this.kernelConstraint),biasConstraint:Ln(this.biasConstraint)},n=super.getConfig();return Object.assign(t,n),t}};QI.className="Dense";ke.registerClass(QI);var eC=class extends It{constructor(t){t=t||{};super(t);this.inputSpec=[{minNDim:3}],this.dataFormat=t.dataFormat}computeOutputShape(t){t=Ft(t);for(let n of t.slice(1))if(n==null)throw new ne(`The shape of the input to "Flatten" is not fully defined (got ${t.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[t[0],ti(t,1)]}call(t,n){return le(()=>{this.invokeCallHook(t,n);let r=bt(t);if(this.dataFormat==="channelsFirst"&&r.rank>1){let s=[0];for(let o=2;o{this.invokeCallHook(t,n);let r=bt(t);return this.activation.apply(r)})}getConfig(){let t={activation:ji(this.activation)},n=super.getConfig();return Object.assign(t,n),t}};tC.className="Activation";ke.registerClass(tC);var nC=class extends It{constructor(t){super(t);this.n=t.n,this.inputSpec=[{ndim:2}]}computeOutputShape(t){return[t[0],this.n,t[1]]}call(t,n){return le(()=>(t=bt(t),dZ(t,this.n)))}getConfig(){let t={n:this.n},n=super.getConfig();return Object.assign(t,n),t}};nC.className="RepeatVector";ke.registerClass(nC);var rC=class extends It{constructor(t){super(t);this.targetShape=t.targetShape;for(let n=0;n{this.invokeCallHook(t,n);let r=bt(t),s=r.shape,o=s.slice(0,1).concat(this.fixUnknownDimension(s.slice(1),this.targetShape));return X(r,o)})}getConfig(){let t={targetShape:this.targetShape},n=super.getConfig();return Object.assign(t,n),t}};rC.className="Reshape";ke.registerClass(rC);var sC=class extends It{constructor(t){super(t);if(t.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(t.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${t.dims} instead.`);let n=Ps(1,t.dims.length+1);if(!C.arraysEqual(t.dims.slice().sort(),n))throw new Error("Invalid permutation `dims`: "+JSON.stringify(t.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=t.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new wn({ndim:this.dims.length+1})]}computeOutputShape(t){t=Ft(t);let n=t.slice();return this.dims.forEach((r,s)=>{n[s+1]=t[r]}),n}call(t,n){return St(bt(t),this.dimsIncludingBatch)}getConfig(){let t={dims:this.dims},n=super.getConfig();return Object.assign(t,n),t}};sC.className="Permute";ke.registerClass(sC);var oC=class extends It{constructor(t){super(t==null?{}:t);this.supportsMasking=!0,t!=null?this.maskValue=t.maskValue==null?0:t.maskValue:this.maskValue=0}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),n={maskValue:this.maskValue};return Object.assign(n,t),n}computeMask(t,n){let r=bt(t),s=-1;return cd(Sl(r,this.maskValue),s)}call(t,n){return le(()=>{this.invokeCallHook(t,n);let r=bt(t),s=-1,o=!0,a=cd(Sl(r,this.maskValue),s,o);return Y(r,we(a,r.dtype))})}};oC.className="Masking";ke.registerClass(oC);var aC=class extends It{constructor(t){super(t);if(this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",t.batchInputShape==null&&t.inputShape==null){let n=null;t.batchSize!=null&&(n=t.batchSize),t.inputLength==null?this.batchInputShape=[n,null]:this.batchInputShape=[n].concat(mn(t.inputLength))}this.inputDim=t.inputDim,ar(this.inputDim,"inputDim"),this.outputDim=t.outputDim,ar(this.outputDim,"outputDim"),this.embeddingsInitializer=un(t.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=gn(t.embeddingsRegularizer),this.activityRegularizer=gn(t.activityRegularizer),this.embeddingsConstraint=Bn(t.embeddingsConstraint),this.maskZero=t.maskZero,this.supportsMasking=t.maskZero,this.inputLength=t.inputLength}build(t){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(t){}computeMask(t,n){return le(()=>this.maskZero?(t=bt(t),Sl(t,Ye(t))):null)}computeOutputShape(t){if(t=Ft(t),this.inputLength==null)return[...t,this.outputDim];let n=mn(this.inputLength);if(n.length!==t.length-1)throw new ne(`"inputLength" is ${this.inputLength}, but received input shape has shape ${t}`);{let r=0;for(let s=0;s{this.invokeCallHook(t,n);let r=bt(t);r.dtype!=="int32"&&(r=wm(r,"int32"));let s=aI(this.embeddings.read(),X(r,[r.size]));return X(s,Ft(this.computeOutputShape(r.shape)))})}getConfig(){let t={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:vn(this.embeddingsInitializer),embeddingsRegularizer:nn(this.embeddingsRegularizer),activityRegularizer:nn(this.activityRegularizer),embeddingsConstraint:Ln(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},n=super.getConfig();return Object.assign(t,n),t}};aC.className="Embedding";ke.registerClass(aC);var vd=class extends It{constructor(t){super(t||{});this.supportsMasking=!0}mergeFunction(t){throw new st}computeElementwiseOpOutputShape(t,n){if(t==null||n==null)return null;if(t.length1)throw new ne(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(t)}.`);let r=t[0]==null?null:t[0].slice(1);for(let o=1;oo.length);t.indexOf(null)===-1&&ei(s).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(t,n){return le(()=>{if(t=t,this.reshapeRequired){let r=[],s=t.map(o=>o.rank);if(s.indexOf(null)===-1){let o=Wi(s);for(let a of t){let i=a.rank;for(let l=0;l1){let c=Ps(1,u).concat([0]);r.push(St(l,c)),o=!0}else r.push(l)}let a=this.mergeFunction(r),i=a.rank;if(o){if(i==null){let l=a.shape,u=l.length,c=l[u-1],p=[c].concat(l.slice(0,l.length-1));a=X(St(X(a,[-1,c]),[1,0]),p)}else if(i>1){let l=[i-1].concat(Ps(0,i-1));a=St(a,l)}}return a}}else return this.mergeFunction(t)})}computeOutputShape(t){t=t;let n;t[0]==null?n=null:n=t[0].slice(1);for(let s=1;s{if(n==null)return null;if(!Array.isArray(n))throw new ne("`mask` should be an Array");if(!Array.isArray(t))throw new ne("`inputs` should be an Array");if(n.length!==t.length)throw new ne(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${t.length} vs ${n.length})`);if(n.every(s=>s==null))return null;n=n.map(s=>s==null?s:Mr(s,0));let r=n[0];for(let s=1;s{let n=t[0].clone();for(let r=1;r{let n=t[0].clone();for(let r=1;r{let n=t[0].clone();for(let r=1;r{let n=t[0];for(let r=1;r{let n=t[0];for(let r=1;r1)throw new ne("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(t))}mergeFunction(t){return le(()=>Fy(t,this.axis))}computeOutputShape(t){if(!(Array.isArray(t)&&Array.isArray(t[0])))throw new ne("A `Concatenate` layer should be called on a list of inputs.");let n=t,r=n[0].slice(),s=this.axis<0?r.length+this.axis:this.axis;for(let o of n.slice(1)){if(r[s]==null||o[s]==null){r[s]=null;break}r[s]+=o[s]}return r}computeMask(t,n){if(n==null)return null;if(!Array.isArray(n))throw new ne("`mask` should be an array for Concatenate");if(!Array.isArray(t))throw new ne("`inputs` should be an array for Concatenate");if(n.length!==t.length)throw new ne(`Mismatch in the length of mask (${n.length}) and the legnth of inputs (${t.length})`);return le(()=>{let r=!0;if(n.forEach(a=>{if(a!=null){r=!1;return}}),r)return null;let s=[];for(let a=0;a3||t.shape.length>3)throw new st("batchDot is not implemented for tensors of 4D or higher rank yet");if(C.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),C.assert(e.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof n=="number"&&(n=[n,n]),e.dtype==="complex64"||t.dtype==="complex64")throw new st("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,s=t.shape.length;n==null&&(n=[r-1,s-2]);let o=n;return le(()=>{let a;if(r>s){a=r-s;let l=[];for(let u=0;ur){a=s-r;let l=[];for(let u=0;u0){let l;r>s?l=r+s-3:l=r-1;let u=[];for(let c=l;c"A `Dot` layer should be called on a list of exactly 2 inputs.");let n=t[0],r=t[1];if(n.length>3||r.length>3)throw new st("Dot layer does not support tensors of 4D or higher rank yet.");let s=this.interpretAxes(n,r);if(n[s[0]]!==r[s[1]])throw new ne(`Dimension incompatibility: ${n[s[0]]} !== ${r[s[1]]}`)}mergeFunction(t){if(t.length!==2)throw new ne(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${t.length} input(s).`);let n=t[0],r=t[1],s;return Array.isArray(this.axes)?s=this.axes.map((o,a)=>Z2(o,t[a].shape.length)):s=[Z2(this.axes,n.shape.length),Z2(this.axes,r.shape.length)],this.normalize&&(n=M2(n,s[0]),r=M2(r,s[1])),GGe(n,r,s)}interpretAxes(t,n){let r;return Array.isArray(this.axes)?r=this.axes:r=[Z2(this.axes,t.length),Z2(this.axes,n.length)],r}computeOutputShape(t){C.assert(Array.isArray(t)&&t.length===2&&Array.isArray(t[0])&&Array.isArray(t[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let n=t[0].slice(),r=t[1].slice();if(n.length>3||r.length>3)throw new st("Dot layer does not support tensors of 4D or higher rank yet.");let s=this.interpretAxes(n,r);n.splice(s[0],1),r.splice(s[1],1),r.splice(0,1);let o=n.concat(r);return o.length===1&&o.push(1),o}computeMask(t,n){return null}getConfig(){let t={axes:this.axes,normalize:this.normalize},n=super.getConfig();return Object.assign(t,n),t}};fC.className="Dot";ke.registerClass(fC);var hC=class extends It{constructor(t){super(t);this.supportsMasking=!0,this.stddev=t.stddev}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),n={stddev:this.stddev};return Object.assign(n,t),n}call(t,n){return le(()=>{this.invokeCallHook(t,n);let r=bt(t);return md(()=>Ie(Oy(r.shape,0,this.stddev),r),()=>r,n.training||!1)})}};hC.className="GaussianNoise";ke.registerClass(hC);var mC=class extends It{constructor(t){super(t);this.supportsMasking=!0,this.rate=t.rate}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),n={rate:this.rate};return Object.assign(n,t),n}call(t,n){return le(()=>{this.invokeCallHook(t,n);let r=bt(t);return this.rate>0&&this.rate<1?md(()=>{let o=Math.sqrt(this.rate/(1-this.rate));return Y(r,Oy(r.shape,1,o))},()=>r,n.training||!1):r})}};mC.className="GaussianDropout";ke.registerClass(mC);var gC=class extends It{constructor(t){super(t);this.supportsMasking=!0,this.rate=t.rate,this.noiseShape=t.noiseShape}_getNoiseShape(t){return this.noiseShape||bt(t).shape}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),n={rate:this.rate};return Object.assign(n,t),n}call(t,n){return le(()=>{if(this.rate<1&&this.rate>0){let r=this._getNoiseShape(t);return md(()=>{let o=bt(t),a=1.6732632423543772,i=1.0507009873554805,l=-a*i,u=To(Li(r),this.rate);u=wm(u,"float32");let c=((1-this.rate)*(1+this.rate*l**2))**-.5,p=-c*l*this.rate,d=Ie(Y(o,u),Y(Ie(u,-1),l));return Ie(Y(d,c),p)},()=>bt(t),n.training||!1)}return t})}};gC.className="AlphaDropout";ke.registerClass(gC);function Y2(e,t,n,r,s,o=.001){let a;if(e.rank===2)a=mD(e,t,n,r,s,o);else if(e.rank===3)a=gD(e,t,n,r,s,o);else if(e.rank===4)a=xD(e,t,n,r,s,o);else throw new st(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return a}function UGe(e,t,n,r,s=.001){return le(()=>{let o=Sy(e,r),a=o.mean,i=o.variance;return[Y2(e,a,i,n,t,s),a,i]})}function jGe(e,t,n,r,s=.001){return le(()=>{let o=Sy(e,r),a=o.mean,i=o.variance,l=[];for(let h of Ps(0,e.rank))r.indexOf(h)!==-1?l.push(1):l.push(e.shape[h]);let u=X(a,l),c=X(i,l),p=t==null?null:X(t,l),d=n==null?null:X(n,l);return[Y2(e,u,c,d,p,s),a,i]})}function HGe(e,t,n,r,s=.001){return C.arraysEqual(r.slice().sort(),Ps(0,e.rank-1))?UGe(e,t,n,r,s):jGe(e,t,n,r,s)}var xC=class extends It{constructor(t){t==null&&(t={});super(t);this.supportsMasking=!0,this.axis=t.axis==null?-1:t.axis,this.momentum=t.momentum==null?.99:t.momentum,this.epsilon=t.epsilon==null?.001:t.epsilon,this.center=t.center==null?!0:t.center,this.scale=t.scale==null?!0:t.scale,this.betaInitializer=un(t.betaInitializer||"zeros"),this.gammaInitializer=un(t.gammaInitializer||"ones"),this.movingMeanInitializer=un(t.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=un(t.movingVarianceInitializer||"ones"),this.betaConstraint=Bn(t.betaConstraint),this.gammaConstraint=Bn(t.gammaConstraint),this.betaRegularizer=gn(t.betaRegularizer),this.gammaRegularizer=gn(t.gammaRegularizer)}build(t){t=Ft(t);let n=this.axis>=0?this.axis:this.axis+t.length,r=t[n];if(r==null)throw new ne(`Axis ${n} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(t)}.`);this.inputSpec=[new wn({ndim:t.length,axes:{[n]:r}})];let s=[r];this.scale&&(this.gamma=this.addWeight("gamma",s,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",s,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",s,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",s,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(t,n){return le(()=>{let r=n.training==null?!1:n.training,s=bt(t),o=s.shape,a=o.length,i=Ps(0,a),l=this.axis>=0?this.axis:this.axis+a;i.splice(l,1);let u=Ya(1,a);u[l]=o[l];let c=i.slice();c.sort();let p=!C.arraysEqual(c,Ps(0,a).slice(0,a-1)),d=()=>{if(p){let y=X(this.movingMean.read(),u),b=X(this.movingVariance.read(),u),A=this.center?X(this.beta.read(),u):null,v=this.scale?X(this.gamma.read(),u):null;return Y2(s,y,b,A,v,this.epsilon)}else return Y2(s,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!r)return d();let[f,h,m]=HGe(s,this.gamma.read(),this.beta.read(),i,this.epsilon),g=(y,b,A)=>{le(()=>{let v=1-A,w=y.read(),k=Y(je(w,b),v);y.write(je(w,k))})};return(()=>{g(this.movingMean,h,this.momentum),g(this.movingVariance,m,this.momentum)})(),f})}getConfig(){let t={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:vn(this.betaInitializer),gammaInitializer:vn(this.gammaInitializer),movingMeanInitializer:vn(this.movingMeanInitializer),movingVarianceInitializer:vn(this.movingVarianceInitializer),betaRegularizer:nn(this.betaRegularizer),gammaRegularizer:nn(this.gammaRegularizer),betaConstraint:Ln(this.betaConstraint),gammaConstraint:Ln(this.gammaConstraint)},n=super.getConfig();return Object.assign(t,n),t}};xC.className="BatchNormalization";ke.registerClass(xC);var yC=class extends It{constructor(t){t==null&&(t={});super(t);if(this.axis=t.axis==null?-1:t.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let n of this.axis)if(!Number.isInteger(n))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=t.epsilon==null?.001:t.epsilon,this.center=t.center==null?!0:t.center,this.scale=t.scale==null?!0:t.scale,this.betaInitializer=un(t.betaInitializer||"zeros"),this.gammaInitializer=un(t.gammaInitializer||"ones"),this.betaRegularizer=gn(t.betaRegularizer),this.gammaRegularizer=gn(t.gammaRegularizer),this.supportsMasking=!0}build(t){t=Ft(t);let n=t.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let o=0;o=n)throw new Error(`Invalid axis: ${o}`);if(this.axis.length!==ei(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let r=this.axis.map(o=>t[o]),s=!0;this.scale?this.gamma=this.addWeight("gamma",r,"float32",this.gammaInitializer,this.gammaRegularizer,s):this.gamma=null,this.center?this.beta=this.addWeight("beta",r,"float32",this.betaInitializer,this.betaRegularizer,s):this.beta=null,this.built=!0}call(t,n){let r=bt(t),s=r.shape,o=s.length;return le(()=>{let a=!0,{mean:i,variance:l}=Sy(r,this.axis,a),u=Ya(1,o);for(let m of this.axis)u[m]=s[m];let c=m=>m!=null&&m.shape.length!==o&&this.axis!==[o-1]?X(m,u):m,p=c(this.gamma.read()),d=c(this.beta.read()),f=[],h=[];for(let m=0;m{if(e.rank!==4)throw new ne(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new ne("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=oo()),n!=="channelsLast"&&n!=="channelsFirst")throw new ne(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let r;return n==="channelsFirst"?r=[[0,0],[0,0],t[0],t[1]]:r=[[0,0],t[0],t[1],[0,0]],zi(e,r)})}var bC=class extends It{constructor(t){t==null&&(t={});super(t);if(this.dataFormat=t.dataFormat==null?oo():t.dataFormat,t.padding==null)this.padding=[[1,1],[1,1]];else if(typeof t.padding=="number")this.padding=[[t.padding,t.padding],[t.padding,t.padding]];else{if(t.padding=t.padding,t.padding.length!==2)throw new ne(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${t.padding.length} array.`);let n,r;if(typeof t.padding[0]=="number")n=[t.padding[0],t.padding[0]],r=[t.padding[1],t.padding[1]];else{if(t.padding=t.padding,t.padding[0].length!==2)throw new ne(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${t.padding[0].length} array.`);if(n=t.padding[0],t.padding[1].length!==2)throw new ne(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${t.padding[1].length} array.`);r=t.padding[1]}this.padding=[n,r]}this.inputSpec=[new wn({ndim:4})]}computeOutputShape(t){t=Ft(t);let n,r;return this.dataFormat==="channelsFirst"?(t[2]!=null&&t[2]>=0?n=t[2]+this.padding[0][0]+this.padding[0][1]:n=null,t[3]!=null&&t[3]>=0?r=t[3]+this.padding[1][0]+this.padding[1][1]:r=null,[t[0],t[1],n,r]):(t[1]!=null&&t[1]>=0?n=t[1]+this.padding[0][0]+this.padding[0][1]:n=null,t[2]!=null&&t[2]>=0?r=t[2]+this.padding[1][0]+this.padding[1][1]:r=null,[t[0],n,r,t[3]])}call(t,n){return le(()=>qGe(bt(t),this.padding,this.dataFormat))}getConfig(){let t={padding:this.padding,dataFormat:this.dataFormat},n=super.getConfig();return Object.assign(t,n),t}};bC.className="ZeroPadding2D";ke.registerClass(bC);function AC(e,t,n,r,s,o){return le(()=>{Fn(s),l$(o),ao(r),n==null&&(n=[1,1]),r==null&&(r="valid"),s==null&&(s=oo()),o==null&&(o="max"),e=U2(e,s);let a,i=r==="same"?"same":"valid";return o==="max"?a=sc(e,t,n,i):a=Yu(e,t,n,i),s==="channelsFirst"&&(a=St(a,[0,3,1,2])),a})}function HZ(e,t,n,r,s,o){return le(()=>{Fn(s),l$(o),ao(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),s==null&&(s=oo()),o==null&&(o="max"),e=V$(e,s);let a,i=r==="same"?"same":"valid";return o==="max"?a=n2(e,t,n,i):a=UA(e,t,n,i),s==="channelsFirst"&&(a=St(a,[0,4,1,2,3])),a})}var H$=class extends It{constructor(t){t.poolSize==null&&(t.poolSize=2);super(t);if(typeof t.poolSize=="number")this.poolSize=[t.poolSize];else if(Array.isArray(t.poolSize)&&t.poolSize.length===1&&typeof t.poolSize[0]=="number")this.poolSize=t.poolSize;else throw new ne(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(t.poolSize)}`);if(ar(this.poolSize,"poolSize"),t.strides==null)this.strides=this.poolSize;else if(typeof t.strides=="number")this.strides=[t.strides];else if(Array.isArray(t.strides)&&t.strides.length===1&&typeof t.strides[0]=="number")this.strides=t.strides;else throw new ne(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(t.strides)}`);ar(this.strides,"strides"),this.padding=t.padding==null?"valid":t.padding,ao(this.padding),this.inputSpec=[new wn({ndim:3})]}computeOutputShape(t){t=Ft(t);let n=Do(t[1],this.poolSize[0],this.padding,this.strides[0]);return[t[0],n,t[2]]}call(t,n){return le(()=>{this.invokeCallHook(t,n),t=dc(bt(t),2);let r=this.poolingFunction(bt(t),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return ro(r,[2])})}getConfig(){let t={poolSize:this.poolSize,padding:this.padding,strides:this.strides},n=super.getConfig();return Object.assign(t,n),t}},vC=class extends H${constructor(t){super(t)}poolingFunction(t,n,r,s,o){return Fn(o),ao(s),AC(t,n,r,s,o,"max")}};vC.className="MaxPooling1D";ke.registerClass(vC);var wC=class extends H${constructor(t){super(t)}poolingFunction(t,n,r,s,o){return Fn(o),ao(s),AC(t,n,r,s,o,"avg")}};wC.className="AveragePooling1D";ke.registerClass(wC);var q$=class extends It{constructor(t){t.poolSize==null&&(t.poolSize=[2,2]);super(t);if(this.poolSize=Array.isArray(t.poolSize)?t.poolSize:[t.poolSize,t.poolSize],t.strides==null)this.strides=this.poolSize;else if(Array.isArray(t.strides)){if(t.strides.length!==2)throw new ne(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${t.strides.length}.`);this.strides=t.strides}else this.strides=[t.strides,t.strides];ar(this.poolSize,"poolSize"),ar(this.strides,"strides"),this.padding=t.padding==null?"valid":t.padding,this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Fn(this.dataFormat),ao(this.padding),this.inputSpec=[new wn({ndim:4})]}computeOutputShape(t){t=Ft(t);let n=this.dataFormat==="channelsFirst"?t[2]:t[1],r=this.dataFormat==="channelsFirst"?t[3]:t[2];return n=Do(n,this.poolSize[0],this.padding,this.strides[0]),r=Do(r,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[t[0],t[1],n,r]:[t[0],n,r,t[3]]}call(t,n){return le(()=>(this.invokeCallHook(t,n),this.poolingFunction(bt(t),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let t={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},n=super.getConfig();return Object.assign(t,n),t}},kC=class extends q${constructor(t){super(t)}poolingFunction(t,n,r,s,o){return Fn(o),ao(s),AC(t,n,r,s,o,"max")}};kC.className="MaxPooling2D";ke.registerClass(kC);var IC=class extends q${constructor(t){super(t)}poolingFunction(t,n,r,s,o){return Fn(o),ao(s),AC(t,n,r,s,o,"avg")}};IC.className="AveragePooling2D";ke.registerClass(IC);var K$=class extends It{constructor(t){t.poolSize==null&&(t.poolSize=[2,2,2]);super(t);if(this.poolSize=Array.isArray(t.poolSize)?t.poolSize:[t.poolSize,t.poolSize,t.poolSize],t.strides==null)this.strides=this.poolSize;else if(Array.isArray(t.strides)){if(t.strides.length!==3)throw new ne(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${t.strides.length}.`);this.strides=t.strides}else this.strides=[t.strides,t.strides,t.strides];ar(this.poolSize,"poolSize"),ar(this.strides,"strides"),this.padding=t.padding==null?"valid":t.padding,this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Fn(this.dataFormat),ao(this.padding),this.inputSpec=[new wn({ndim:5})]}computeOutputShape(t){t=Ft(t);let n=this.dataFormat==="channelsFirst"?t[2]:t[1],r=this.dataFormat==="channelsFirst"?t[3]:t[2],s=this.dataFormat==="channelsFirst"?t[4]:t[3];return n=Do(n,this.poolSize[0],this.padding,this.strides[0]),r=Do(r,this.poolSize[1],this.padding,this.strides[1]),s=Do(s,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[t[0],t[1],n,r,s]:[t[0],n,r,s,t[4]]}call(t,n){return le(()=>(this.invokeCallHook(t,n),this.poolingFunction(bt(t),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let t={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},n=super.getConfig();return Object.assign(t,n),t}},CC=class extends K${constructor(t){super(t)}poolingFunction(t,n,r,s,o){return Fn(o),ao(s),HZ(t,n,r,s,o,"max")}};CC.className="MaxPooling3D";ke.registerClass(CC);var SC=class extends K${constructor(t){super(t)}poolingFunction(t,n,r,s,o){return Fn(o),ao(s),HZ(t,n,r,s,o,"avg")}};SC.className="AveragePooling3D";ke.registerClass(SC);var X$=class extends It{constructor(t){super(t);this.inputSpec=[new wn({ndim:3})]}computeOutputShape(t){return[t[0],t[2]]}call(t,n){throw new st}},NC=class extends X${constructor(t){super(t||{})}call(t,n){return le(()=>{let r=bt(t);return Nn(r,1)})}};NC.className="GlobalAveragePooling1D";ke.registerClass(NC);var TC=class extends X${constructor(t){super(t||{})}call(t,n){return le(()=>{let r=bt(t);return ms(r,1)})}};TC.className="GlobalMaxPooling1D";ke.registerClass(TC);var Z$=class extends It{constructor(t){super(t);this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Fn(this.dataFormat),this.inputSpec=[new wn({ndim:4})]}computeOutputShape(t){return t=t,this.dataFormat==="channelsLast"?[t[0],t[3]]:[t[0],t[1]]}call(t,n){throw new st}getConfig(){let t={dataFormat:this.dataFormat},n=super.getConfig();return Object.assign(t,n),t}},_C=class extends Z${call(t,n){return le(()=>{let r=bt(t);return this.dataFormat==="channelsLast"?Nn(r,[1,2]):Nn(r,[2,3])})}};_C.className="GlobalAveragePooling2D";ke.registerClass(_C);var EC=class extends Z${call(t,n){return le(()=>{let r=bt(t);return this.dataFormat==="channelsLast"?ms(r,[1,2]):ms(r,[2,3])})}};EC.className="GlobalMaxPooling2D";ke.registerClass(EC);var Y$=class extends It{constructor(t){super(t);this.layer=t.layer}build(t){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(t){this.layer!=null&&(this.layer.trainable=t)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(t){this.layer.setWeights(t)}getConfig(){let t={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},n=super.getConfig();return Object.assign(t,n),t}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(t)}static fromConfig(t,n,r={}){let s=n.layer,o=aa(s,r);delete n.layer;let a={layer:o};return Object.assign(a,n),new t(a)}},RC=class extends Y${constructor(t){super(t);this.supportsMasking=!0}build(t){if(t=Ft(t),t.length<3)throw new ne(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(t)}`);this.inputSpec=[{shape:t}];let n=[t[0]].concat(t.slice(2));this.layer.built||(this.layer.build(n),this.layer.built=!0),super.build(t)}computeOutputShape(t){t=Ft(t);let n=[t[0]].concat(t.slice(2)),r=this.layer.computeOutputShape(n),s=t[1];return[r[0],s].concat(r.slice(1))}call(t,n){return le(()=>(t=bt(t),U$((a,i)=>[bt(this.layer.call(a,n)),[]],t,[],!1,null,null,!1,!0)[1]))}};RC.className="TimeDistributed";ke.registerClass(RC);function KGe(e){Tl(iZ,"BidirectionalMergeMode",e)}var XGe="concat",DC=class extends Y${constructor(t){super(t);let n=t.layer.getConfig(),r={};r.className=t.layer.getClassName(),r.config=n,this.forwardLayer=aa(r),n.goBackwards=n.goBackwards!==!0;let s={};if(s.className=t.layer.getClassName(),s.config=n,this.backwardLayer=aa(s),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=t.mergeMode===void 0?XGe:t.mergeMode,KGe(this.mergeMode),t.weights)throw new st("weights support is not implemented for Bidirectional layer yet.");this._stateful=t.layer.stateful,this.returnSequences=t.layer.returnSequences,this.returnState=t.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=t.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(t){this._trainable=t,this.forwardLayer!=null&&(this.forwardLayer.trainable=t),this.backwardLayer!=null&&(this.backwardLayer.trainable=t)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(t){let n=t.length,r=Math.floor(n/2);this.forwardLayer.setWeights(t.slice(0,r)),this.backwardLayer.setWeights(t.slice(r))}computeOutputShape(t){let n=this.forwardLayer.computeOutputShape(t);Array.isArray(n)&&Array.isArray(n[0])||(n=[n]),n=n;let r,s,o;return this.returnState&&(o=n.slice(1)),r=n[0],r=r,this.mergeMode==="concat"?(r[r.length-1]*=2,s=[r]):this.mergeMode==null?s=[r,r.slice()]:s=[r],this.returnState?this.mergeMode==null?s.concat(o).concat(o.slice()):[r].concat(o).concat(o.slice()):Jr(s)}apply(t,n){let r=n==null?null:n.initialState,s=n==null?null:n.constants;n==null&&(n={});let o=G$(t,r,s,this.numConstants);if(t=o.inputs,r=o.initialState,s=o.constants,Array.isArray(t)&&(r=t.slice(1),t=t[0]),(r==null||r.length===0)&&s==null)return super.apply(t,n);let a=[],i=[];if(r!=null){let u=r.length;if(u%2>0)throw new ne("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");n.initialState=r,a.push(...r);let c=r.map(p=>new wn({shape:p.shape}));this.forwardLayer.stateSpec=c.slice(0,u/2),this.backwardLayer.stateSpec=c.slice(u/2),i.push(...c)}if(s!=null)throw new st("Support for constants in Bidirectional layers is not implemented yet.");let l=a[0]instanceof uo;for(let u of a)if(u instanceof uo!==l)throw new ne("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(l){let u=[t].concat(a),c=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=c;let d=super.apply(u,n);return this.inputSpec=p,d}else return super.apply(t,n)}call(t,n){return le(()=>{let r=n.initialState,s,o;if(r==null)s=this.forwardLayer.call(t,n),o=this.backwardLayer.call(t,n);else{let l=r.slice(0,r.length/2),u=r.slice(r.length/2);s=this.forwardLayer.call(t,Object.assign(n,{initialState:l})),o=this.backwardLayer.call(t,Object.assign(n,{initialState:u}))}let a;this.returnState&&(Array.isArray(s)&&(a=s.slice(1).concat(o.slice(1))),s=s[0],o=o[0]),this.returnSequences&&(o=no(o,1));let i;return this.mergeMode==="concat"?i=Fy([s,o]):this.mergeMode==="sum"?i=Ie(s,o):this.mergeMode==="ave"?i=Y(.5,Ie(s,o)):this.mergeMode==="mul"?i=Y(s,o):this.mergeMode==null&&(i=[s,o]),this.returnState?this.mergeMode==null?i.concat(a):[i].concat(a):i})}resetStates(t){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(t){Vi(this.forwardLayer.name,()=>{this.forwardLayer.build(t)}),Vi(this.backwardLayer.name,()=>{this.backwardLayer.build(t)}),this.built=!0}computeMask(t,n){Array.isArray(n)&&(n=n[0]);let r;if(this.returnSequences?this.mergeMode==null?r=[n,n]:r=n:this.mergeMode==null?r=[null,null]:r=null,this.returnState){let o=this.forwardLayer.states.map(a=>null);return Array.isArray(r)?r.concat(o).concat(o):[r].concat(o).concat(o)}else return r}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(t),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(t)}getConfig(){let t={mergeMode:this.mergeMode},n=super.getConfig();return Object.assign(t,n),t}static fromConfig(t,n){let r=aa(n.layer);if(delete n.layer,n.numConstants!=null)throw new st("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let s=n;return s.layer=r,new t(s)}};DC.className="Bidirectional";ke.registerClass(DC);var si;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF"})(si||(si={}));var qZ;(function(e){let t;(function(n){n[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(qZ||(qZ={}));var tUe={};function $C(e){return tUe[e]}function D(e,t,n,r,s){let o=t.inputParams[e];if(o&&o.inputIndexStart!==void 0){let i=o.inputIndexStart,l=o.inputIndexEnd===0?void 0:o.inputIndexEnd===void 0?i+1:o.inputIndexEnd;if(o.type==="tensor")return Lr(t.inputNames[o.inputIndexStart],n,r,s);if(o.type==="tensors")return t.inputNames.slice(i,l).map(d=>Lr(d,n,r,s));let u=Lr(t.inputNames.slice(i)[0],n,r,s),c=u.dataSync();return o.type==="number"?c[0]:C.toNestedArray(u.shape,c)}let a=t.attrParams[e];return a&&a.value}function Lr(e,t,n,r){let[s,o]=po(e);if(r!=null){let i=r.getHashTableHandleByName(s);if(i!=null)return i}let a=n.currentContextIds.find(i=>!!t[FC(s,i)]);return a!==void 0?t[FC(s,a)][o]:void 0}function KZ(e,t,n){return t[FC(e,n.currentContextId)]}function Ki(e,t){let[n,r,s]=po(e);return[FC(n,t&&t.currentContextId),r,s]}function FC(e,t){return t?`${e}-${t}`:e}function po(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let n=t[0],r=t.length===3?t[1]:void 0,s=Number(t[t.length-1]);return[n,s,r]}function J2(e,t,n){let r=D("pad",e,t,n);if(r==="explicit"){r=D("explicitPaddings",e,t,n);let s=[[0,0],[0,0],[0,0],[0,0]];for(let o=0;o<4;o++)s[o][0]=r[o*2],s[o][1]=r[o*2+1];return s}return r}function Xi(e){return e.kept?e:So(e)}var J$={};dn(J$,{json:()=>nUe});var nUe=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var Q$={};dn(Q$,{json:()=>rUe});var rUe=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var e6={};dn(e6,{json:()=>sUe});var sUe=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}];var t6={};dn(t6,{json:()=>oUe});var oUe=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}];var n6={};dn(n6,{json:()=>aUe});var aUe=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}];var r6={};dn(r6,{json:()=>iUe});var iUe=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var s6={};dn(s6,{json:()=>lUe});var lUe=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}];var o6={};dn(o6,{json:()=>uUe});var uUe=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}];var a6={};dn(a6,{json:()=>cUe});var cUe=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}];var i6={};dn(i6,{json:()=>pUe});var pUe=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}];var l6={};dn(l6,{json:()=>dUe});var dUe=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var u6={};dn(u6,{json:()=>fUe});var fUe=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}];var c6={};dn(c6,{json:()=>hUe});var hUe=[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}];var p6={};dn(p6,{json:()=>mUe});var mUe=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}];var d6={};dn(d6,{json:()=>gUe});var gUe=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}];var f6={};dn(f6,{json:()=>xUe});var xUe=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var h6={};dn(h6,{json:()=>yUe});var yUe=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}];var m6={};dn(m6,{json:()=>bUe});var bUe=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var g6={};dn(g6,{json:()=>AUe});var AUe=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var OC=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let t=[J$,Q$,e6,t6,n6,r6,s6,o6,a6,i6,l6,u6,c6,p6,d6,f6,h6,m6,g6],n=[].concat(...t.map(r=>r.json));this.opMappers=n.reduce((r,s)=>(r[s.tfOpName]=s,r),{})}transformGraph(t,n={}){let r=t.node,s=[],o=[],a=[],i=r.reduce((m,g)=>(m[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?s.push(m[g.name]):g.op==="Const"?o.push(m[g.name]):(g.input==null||g.input.length===0)&&a.push(m[g.name]),m),{}),l=[],u=[],c={},p={};n!=null&&(c=this.mapSignatureEntries(n.inputs),p=this.mapSignatureEntries(n.outputs));let d=Object.keys(i);d.forEach(m=>{let g=i[m];g.inputNames.forEach((x,y)=>{let[b,,A]=Ki(x),v=i[b];if(v.outputs!=null){let w=v.outputs.indexOf(A);if(w!==-1){let k=`${b}:${w}`;g.inputNames[y]=k}}g.inputs.push(v),v.children.push(g)})}),Object.keys(p).length===0?d.forEach(m=>{let g=i[m];g.children.length===0&&u.push(g)}):Object.keys(p).forEach(m=>{let[g]=Ki(m),x=i[g];x!=null&&(x.signatureKey=p[m],u.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(m=>{let[g]=Ki(m),x=i[g];x&&(x.signatureKey=c[m],l.push(x))}):l=s;let f={};t.library!=null&&t.library.function!=null&&(f=t.library.function.reduce((m,g)=>(m[g.signature.name]=this.mapFunction(g),m),{}));let h={nodes:i,inputs:l,outputs:u,weights:o,placeholders:s,signature:n,functions:f};return a.length>0&&(h.initNodes=a),h}mapSignatureEntries(t){return Object.keys(t||{}).reduce((n,r)=>(n[t[r].name]=r,n),{})}mapNode(t){let n=$C(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});let r={name:t.name,op:t.op,category:n.category,inputNames:(t.input||[]).map(s=>s.startsWith("^")?s.substr(1):s),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr,outputs:n.outputs};return n.inputs!=null&&(r.inputParams=n.inputs.reduce((s,o)=>(s[o.name]={type:o.type,inputIndexStart:o.start,inputIndexEnd:o.end},s),{})),n.attrs!=null&&(r.attrParams=n.attrs.reduce((s,o)=>{let a=o.type,i;switch(o.type){case"string":i=PC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=PC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"string[]":i=GC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=GC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"number":i=zC(t.attr,o.tfName,o.defaultValue||0),i===void 0&&!!o.tfDeprecatedName&&(i=zC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"number[]":i=WC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=WC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"bool":i=MC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=MC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"bool[]":i=jC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=jC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"shape":i=VC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=VC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"shape[]":i=UC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=UC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"dtype":i=LC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=LC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"dtype[]":i=BC(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=BC(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"func":i=ZZ(t.attr,o.tfName,o.defaultValue),i===void 0&&!!o.tfDeprecatedName&&(i=ZZ(t.attr,o.tfDeprecatedName,o.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${o.type} for op: ${t.op}`)}return s[o.name]={value:i,type:a},s},{})),r}mapFunction(t){let n=t.nodeDef,r=[],s=[],o={};n!=null&&(o=n.reduce((p,d)=>(p[d.name]=this.mapNode(d),d.op==="Const"&&s.push(p[d.name]),p),{}));let a=[],i=[];t.signature.inputArg.forEach(p=>{let[d]=Ki(p.name),f={name:d,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:x6(p.type),type:"dtype"}},children:[]};f.signatureKey=p.name,a.push(f),o[d]=f}),Object.keys(o).forEach(p=>{let d=o[p];d.inputNames.forEach((f,h)=>{let[m,,g]=Ki(f),x=o[m];if(x.outputs!=null){let y=x.outputs.indexOf(g);if(y!==-1){let b=`${m}:${y}`;d.inputNames[h]=b}}d.inputs.push(x),x.children.push(d)})});let u=t.ret;t.signature.outputArg.forEach(p=>{let[d,f]=Ki(u[p.name]),h=o[d];h!=null&&(h.defaultOutput=f,i.push(h))});let c=this.mapArgsToSignature(t);return{nodes:o,inputs:a,outputs:i,weights:s,placeholders:r,signature:c}}mapArgsToSignature(t){return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce((n,r)=>(n[r.name]=this.mapArgToTensorInfo(r),n),{}),outputs:t.signature.outputArg.reduce((n,r)=>(n[r.name]=this.mapArgToTensorInfo(r,t.ret),n),{})}}mapArgToTensorInfo(t,n){let r=t.name;return n!=null&&(r=n[r]),{name:r,dtype:t.type}}};function vUe(e){let t=he().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function XZ(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):vUe(e);return t?n:n.toLowerCase()}function PC(e,t,n,r=!1){let s=e[t];return s!=null?XZ(s.s,r):n}function MC(e,t,n){let r=e[t];return r?r.b:n}function zC(e,t,n){let r=e[t]||{},s=r.i!=null?r.i:r.f!=null?r.f:n;return typeof s=="number"?s:parseInt(s,10)}function x6(e){switch(typeof e=="string"&&(e=si[e]),e){case si.DT_FLOAT:return"float32";case si.DT_INT32:case si.DT_INT64:case si.DT_INT8:case si.DT_UINT8:return"int32";case si.DT_BOOL:return"bool";case si.DT_DOUBLE:return"float32";case si.DT_STRING:return"string";default:return null}}function ZZ(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function LC(e,t,n){let r=e[t];return r&&r.type?x6(r.type):n}function BC(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(s=>x6(s)):n}function YZ(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function VC(e,t,n){let r=e[t];return r&&r.shape?YZ(r.shape):n}function WC(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map(s=>typeof s=="number"?s:parseInt(s,10)):n}function GC(e,t,n,r=!1){let s=e[t];return s&&s.list&&s.list.s?s.list.s.map(o=>XZ(o,r)):n}function UC(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(s=>YZ(s)):n}function jC(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var y6=class{constructor(t,n,r){this.node=t,this.tensorMap=n,this.context=r,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(s=>this.getInput(s)),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce((s,o)=>(s[o]=this.getAttr(o),s),{}))}getInput(t){return Lr(t,this.tensorMap,this.context)}getAttr(t,n){let r=this.node.rawAttrs[t];if(r.tensor!=null)return Lr(t,this.tensorMap,this.context);if(r.i!=null||r.f!=null)return zC(this.node.rawAttrs,t,n);if(r.s!=null)return PC(this.node.rawAttrs,t,n);if(r.b!=null)return MC(this.node.rawAttrs,t,n);if(r.shape!=null)return VC(this.node.rawAttrs,t,n);if(r.type!=null)return LC(this.node.rawAttrs,t,n);if(r.list!=null){if(r.list.i!=null||r.list.f!=null)return WC(this.node.rawAttrs,t,n);if(r.list.s!=null)return GC(this.node.rawAttrs,t,n);if(r.list.shape!=null)return UC(this.node.rawAttrs,t,n);if(r.list.b!=null)return jC(this.node.rawAttrs,t,n);if(r.list.type!=null)return BC(this.node.rawAttrs,t,n)}return n}};var JZ=(e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[Ie(D("a",e,t,n),D("b",e,t,n))];case"AddN":return[pD(D("tensors",e,t,n))];case"FloorMod":case"Mod":return[s2(D("a",e,t,n),D("b",e,t,n))];case"Mul":return[Y(D("a",e,t,n),D("b",e,t,n))];case"RealDiv":case"Div":return[Pe(D("a",e,t,n),D("b",e,t,n))];case"DivNoNan":return[ZA(D("a",e,t,n),D("b",e,t,n))];case"FloorDiv":return[Hh(D("a",e,t,n),D("b",e,t,n))];case"Sub":return[je(D("a",e,t,n),D("b",e,t,n))];case"Minimum":return[oc(D("a",e,t,n),D("b",e,t,n))];case"Maximum":return[Qs(D("a",e,t,n),D("b",e,t,n))];case"Pow":return[Eo(D("a",e,t,n),D("b",e,t,n))];case"SquaredDifference":return[f2(D("a",e,t,n),D("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var QZ=(e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[sr(D("x",e,t,n))];case"Acos":return[PA(D("x",e,t,n))];case"Acosh":return[MA(D("x",e,t,n))];case"Asin":return[LA(D("x",e,t,n))];case"Asinh":return[BA(D("x",e,t,n))];case"Atan":return[VA(D("x",e,t,n))];case"Atan2":return[WA(D("x",e,t,n),D("y",e,t,n))];case"Atanh":return[GA(D("x",e,t,n))];case"Ceil":return[HA(D("x",e,t,n))];case"Complex":return[ta(D("real",e,t,n),D("imag",e,t,n))];case"Cos":return[ec(D("x",e,t,n))];case"Cosh":return[Jh(D("x",e,t,n))];case"Elu":return[Pi(D("x",e,t,n))];case"Erf":return[YA(D("x",e,t,n))];case"Exp":return[Zr(D("x",e,t,n))];case"Expm1":return[JA(D("x",e,t,n))];case"Floor":return[Mi(D("x",e,t,n))];case"Log":return[Ns(D("x",e,t,n))];case"Log1p":return[nm(D("x",e,t,n))];case"Imag":return[em(D("x",e,t,n))];case"Neg":return[jt(D("x",e,t,n))];case"Reciprocal":return[a2(D("x",e,t,n))];case"Real":return[fd(D("x",e,t,n))];case"Relu":return[to(D("x",e,t,n))];case"Round":return[lm(D("x",e,t,n))];case"Selu":return[cm(D("x",e,t,n))];case"Sigmoid":return[ra(D("x",e,t,n))];case"Sin":return[pm(D("x",e,t,n))];case"Sign":return[l2(D("x",e,t,n))];case"Sinh":return[dm(D("x",e,t,n))];case"Softplus":return[Ka(D("x",e,t,n))];case"Sqrt":return[hn(D("x",e,t,n))];case"Square":return[Nt(D("x",e,t,n))];case"Tanh":return[pd(D("x",e,t,n))];case"Tan":return[m2(D("x",e,t,n))];case"ClipByValue":return[Pr(D("x",e,t,n),D("clipValueMin",e,t,n),D("clipValueMax",e,t,n))];case"Relu6":return[im(D("x",e,t,n))];case"Rsqrt":return[um(Lr(e.inputNames[0],t,n))];case"Prod":return[om(D("x",e,t,n),D("axes",e,t,n))];case"LeakyRelu":return[nc(D("x",e,t,n),D("alpha",e,t,n))];case"Prelu":return[ic(D("x",e,t,n),D("alpha",e,t,n))];case"IsNan":return[QA(Lr(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function ia(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){C.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let r=0;rn+` Shapes ${e} and ${t} must match`)}}}function eY(e){return!(typeof e=="number"||e.some(t=>t<0))}function Hy(e,t,n){let r=HC(e,n),s=!eY(r);if(s&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(s&&t.forEach(o=>{r=HC(o.shape,r)}),!eY(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function HC(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let r=0;r=0&&o>=0&&s!==o)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=s>=0?s:o}return n}var b6=class{constructor(t,n,r,s,o,a,i){this.name=t,this.dtype=n,this.maxSize=r,this.elementShape=s,this.identicalElementShapes=o,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Ke(0),$n(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(t){this.tensors.forEach(n=>{(t==null||!t.has(n.tensor.id))&&n.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||t>=this.size())throw new Error(`Tried to read from index ${t}, but array size is: ${this.size()}`);let n=this.tensors[t];if(n.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${t} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(n.cleared=!0),n.read=!0,n.tensor}readMany(t){return t.map(n=>this.read(n))}write(t,n){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error(`Tried to write to index ${t}, but array is not resizeable and size is: ${this.maxSize}`);let r=this.tensors[t]||{};if(n.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because the value dtype is ${n.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=n.shape),ia(this.elementShape,n.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${t}.`),r.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been read.`);if(r.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been written.`);r.tensor=n,$n(n),r.written=!0,this.tensors[t]=r}writeMany(t,n){if(t.length!==n.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${t.length} is not the same as tensors size: ${n.length}.`);t.forEach((r,s)=>this.write(r,n[s]))}gather(t,n){if(!!n&&n!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${n}`);if(t)t=t.slice(0,this.size());else{t=[];for(let s=0;s=this.maxSize)throw new Error(`Max index must be < array size (${r} vs. ${this.maxSize})`);this.writeMany(t,zr(n,0))}split(t,n){if(n.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${n.dtype}`);let r=0,s=t.map(l=>(r+=l,r));if(r!==n.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${r}, and tensor's shape is: ${n.shape}`);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${t.length}), and the TensorArray is not marked as dynamically resizeable`);let o=r===0?0:n.size/r,a=[];le(()=>{n=X(n,[1,r,o]);for(let l=0;l{if(r!==o.dtype)throw new Error(`Invalid data types; op elements ${r}, but list elements ${o.dtype}`);ia(n,o.shape,"TensorList shape mismatch: "),$n(o)}),this.idTensor=Ke(0),this.maxNumElements=s,$n(this.idTensor)}get id(){return this.idTensor.id}copy(){return new $m([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(n=>{(t==null||!t.has(n.id))&&n.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,n,r=-1){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(r!==-1&&this.tensors.length!==r)throw new Error(`Operation expected a list with ${r} elements but got a list with ${this.tensors.length} elements.`);ia(t,this.elementShape,"TensorList shape mismatch: ");let s=Hy(this.elementShape,this.tensors,t);return le(()=>{let o=this.tensors.map(a=>X(a,s));return or(o,0)})}popBack(t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let r=Hy(this.elementShape,this.tensors,t),s=this.tensors.pop();return ia(s.shape,t,"TensorList shape mismatch: "),X(s,r)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(ia(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");$n(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);this.tensors.length=t}getItem(t,n,r){if(r!==this.elementDtype)throw new Error(`Invalid data types; op elements ${r}, but list elements ${this.elementDtype}`);if(t<0||t>this.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);ia(this.tensors[t].shape,n,"TensorList shape mismatch: ");let s=Hy(this.elementShape,this.tensors,n);return X(this.tensors[t],s)}setItem(t,n){if(n.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);ia(this.elementShape,n.shape,"TensorList shape mismatch: "),$n(n),this.tensors[t]=n}gather(t,n,r){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);ia(this.elementShape,r,"TensorList shape mismatch: "),t=t.slice(0,this.size());let s=Hy(this.elementShape,this.tensors,r);return t.length===0?Zs([],[0].concat(s)):le(()=>{let o=t.map(a=>X(this.tensors[a],s));return or(o,0)})}concat(t,n){if(!!t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);ia(this.elementShape,n,"TensorList shape mismatch: ");let r=Hy(this.elementShape,this.tensors,n);return this.size()===0?Zs([],[0].concat(r)):le(()=>{let s=this.tensors.map(o=>X(o,r));return on(s,0)})}};function tY(e,t,n){let r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let s=e.shape.slice(1);ia(s,t,"TensorList shape mismatch: ");let o=zr(e);return new $m(o,t,r)}function nY(e,t,n){return new $m([],e,t,n)}function rY(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let s=Math.max(...t);if(r!=null&&r!==-1&&s>=r)throw new Error(`Max index must be < array size (${s} vs. ${r})`);let o=new $m([],n,e.dtype,r),a=zr(e,0);return t.forEach((i,l)=>{o.setItem(i,a[l])}),o}function sY(e,t,n){let r=0,s=t.map(c=>(r+=c,r));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${r}, and tensor's shape is: ${e.shape}`);let o=e.shape.slice(1),a=HC(o,n),i=r===0?0:e.size/r,l=le(()=>{let c=[];e=X(e,[1,r,i]);for(let p=0;p{switch(e.op){case"If":case"StatelessIf":{let r=D("thenBranch",e,t,n),s=D("elseBranch",e,t,n),o=D("cond",e,t,n),a=D("args",e,t,n);return(await o.data())[0]?n.functionMap[r].executeFunctionAsync(a,n.tensorArrayMap,n.tensorListMap):n.functionMap[s].executeFunctionAsync(a,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=D("body",e,t,n),s=D("cond",e,t,n),o=D("args",e,t,n),a=await n.functionMap[s].executeFunctionAsync(o,n.tensorArrayMap,n.tensorListMap),i=o.map(c=>c.id),l=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=o;for(;l[0];){let c=u;u=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let p=u.map(f=>f.id);c.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()});let d=await n.functionMap[s].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);l=await d[0].data(),d.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()})}return u}case"LoopCond":{let r=D("pred",e,t,n);return[Xi(r)]}case"Switch":{let r=D("pred",e,t,n),s=D("data",e,t,n);return s.kept||(s=Xi(s)),(await r.data())[0]?[void 0,s]:[s,void 0]}case"Merge":{let r=e.inputNames.find(s=>Lr(s,t,n)!==void 0);if(r){let s=Lr(r,t,n);return[Xi(s)]}return}case"Enter":{let r=D("frameName",e,t,n),s=D("tensor",e,t,n);return n.enterFrame(r),[Xi(s)]}case"Exit":{let r=D("tensor",e,t,n);return n.exitFrame(),[Xi(r)]}case"NextIteration":{let r=D("tensor",e,t,n);return n.nextIteration(),[Xi(r)]}case"TensorArrayV3":{let r=D("size",e,t,n),s=D("dtype",e,t,n),o=D("elementShape",e,t,n),a=D("dynamicSize",e,t,n),i=D("clearAfterRead",e,t,n),l=D("identicalElementShapes",e,t,n),u=D("name",e,t,n),c=new b6(u,s,r,o,l,a,i);return n.addTensorArray(c),[c.idTensor,Ke(1)]}case"TensorArrayWriteV3":{let r=D("tensorArrayId",e,t,n),s=D("index",e,t,n),o=D("tensor",e,t,n),a=n.getTensorArray(r.id);return a.write(s,o),[a.idTensor]}case"TensorArrayReadV3":{let r=D("tensorArrayId",e,t,n),s=D("index",e,t,n);return[n.getTensorArray(r.id).read(s)]}case"TensorArrayGatherV3":{let r=D("tensorArrayId",e,t,n),s=D("indices",e,t,n),o=D("dtype",e,t,n);return[n.getTensorArray(r.id).gather(s,o)]}case"TensorArrayScatterV3":{let r=D("tensorArrayId",e,t,n),s=D("indices",e,t,n),o=D("tensor",e,t,n),a=n.getTensorArray(r.id);return a.scatter(s,o),[a.idTensor]}case"TensorArrayConcatV3":{let r=D("tensorArrayId",e,t,n),s=n.getTensorArray(r.id),o=D("dtype",e,t,n);return[s.concat(o)]}case"TensorArraySplitV3":{let r=D("tensorArrayId",e,t,n),s=D("tensor",e,t,n),o=D("lengths",e,t,n),a=n.getTensorArray(r.id);return a.split(o,s),[a.idTensor]}case"TensorArraySizeV3":{let r=D("tensorArrayId",e,t,n),s=n.getTensorArray(r.id);return[Ke(s.size(),"int32")]}case"TensorArrayCloseV3":{let r=D("tensorArrayId",e,t,n),s=n.getTensorArray(r.id);return s.clearAndClose(),[s.idTensor]}case"TensorListSetItem":{let r=D("tensorListId",e,t,n),s=D("index",e,t,n),o=D("tensor",e,t,n),a=n.getTensorList(r.id);return a.setItem(s,o),[a.idTensor]}case"TensorListGetItem":{let r=D("tensorListId",e,t,n),s=D("index",e,t,n),o=D("elementShape",e,t,n),a=D("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(s,o,a)]}case"TensorListScatterV2":case"TensorListScatter":{let r=D("indices",e,t,n),s=D("tensor",e,t,n),o=D("elementShape",e,t,n),a=D("numElements",e,t,n),i=rY(s,r,o,a);return n.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r=D("elementShape",e,t,n),s=D("elementDType",e,t,n),o;e.op==="TensorListReserve"?o="numElements":o="maxNumElements";let a=D(o,e,t,n),i=nY(r,s,a);return n.addTensorList(i),[i.idTensor]}case"TensorListGather":{let r=D("tensorListId",e,t,n),s=D("indices",e,t,n),o=D("elementShape",e,t,n),a=D("elementDType",e,t,n);return[n.getTensorList(r.id).gather(s,a,o)]}case"TensorListStack":{let r=D("tensorListId",e,t,n),s=D("elementShape",e,t,n),o=D("elementDType",e,t,n),a=D("numElements",e,t,n);return[n.getTensorList(r.id).stack(s,o,a)]}case"TensorListFromTensor":{let r=D("tensor",e,t,n),s=D("elementShape",e,t,n),o=D("elementDType",e,t,n),a=tY(r,s,o);return n.addTensorList(a),[a.idTensor]}case"TensorListConcat":{let r=D("tensorListId",e,t,n),s=n.getTensorList(r.id),o=D("dtype",e,t,n),a=D("elementShape",e,t,n);return[s.concat(o,a)]}case"TensorListPushBack":{let r=D("tensorListId",e,t,n),s=D("tensor",e,t,n),o=n.getTensorList(r.id);return o.pushBack(s),[o.idTensor]}case"TensorListPopBack":{let r=D("tensorListId",e,t,n),s=D("elementShape",e,t,n),o=D("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(s,o)]}case"TensorListSplit":{let r=D("tensor",e,t,n),s=D("elementShape",e,t,n),o=D("lengths",e,t,n),a=sY(r,o,s);return n.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function aY(e,t,n){let[r,s]=D("fusedOps",e,t,n),o=r==="biasadd",a=!o,i=s==="prelu",l=r==="fusedbatchnorm",u=D("numArgs",e,t,n);if(o){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&o&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let c=D("strides",e,t,n),p=J2(e,t,n),d=D("dataFormat",e,t,n).toUpperCase(),f=D("dilations",e,t,n),[h,m]=D("args",e,t,n);a&&(m=h,h=void 0);let g=D("leakyreluAlpha",e,t,n);return{stride:c,pad:p,dataFormat:d,dilations:f,biasArg:h,preluArg:m,activationFunc:s,leakyreluAlpha:g}}var iY=(e,t,n)=>{switch(e.op){case"Conv1D":{let r=D("stride",e,t,n),s=D("pad",e,t,n),o=D("dataFormat",e,t,n).toUpperCase(),a=D("dilation",e,t,n);return[Zh(D("x",e,t,n),D("filter",e,t,n),r,s,o,a)]}case"Conv2D":{let r=D("strides",e,t,n),s=J2(e,t,n),o=D("dataFormat",e,t,n).toUpperCase(),a=D("dilations",e,t,n);return[Js(D("x",e,t,n),D("filter",e,t,n),[r[1],r[2]],s,o,[a[1],a[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:o,dilations:a,biasArg:i,preluArg:l,activationFunc:u,leakyreluAlpha:c}=aY(e,t,n);return[Xa.conv2d({x:D("x",e,t,n),filter:D("filter",e,t,n),strides:[r[1],r[2]],pad:s,dataFormat:o,dilations:[a[1],a[2]],bias:i,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:o,dilations:a,biasArg:i,preluArg:l,activationFunc:u,leakyreluAlpha:c}=aY(e,t,n);return[Xa.depthwiseConv2d({x:D("x",e,t,n),filter:D("filter",e,t,n),strides:[r[1],r[2]],pad:s,dataFormat:o,dilations:[a[1],a[2]],bias:i,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=D("outputShape",e,t,n),s=D("strides",e,t,n),o=J2(e,t,n);return[Yh(D("x",e,t,n),D("filter",e,t,n),r,[s[1],s[2]],o)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=D("strides",e,t,n),s=J2(e,t,n),o=D("dilations",e,t,n),a=D("dataFormat",e,t,n).toUpperCase();return[Oi(D("input",e,t,n),D("filter",e,t,n),[r[1],r[2]],s,a,[o[1],o[2]])]}case"Conv3D":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("dataFormat",e,t,n).toUpperCase(),a=D("dilations",e,t,n);return[qA(D("x",e,t,n),D("filter",e,t,n),[r[1],r[2],r[3]],s,o,[a[1],a[2],a[3]])]}case"AvgPool":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("kernelSize",e,t,n);return[Yu(D("x",e,t,n),[o[1],o[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("kernelSize",e,t,n);return[sc(D("x",e,t,n),[o[1],o[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("kernelSize",e,t,n),a=D("includeBatchInIndex",e,t,n),{result:i,indexes:l}=FD(D("x",e,t,n),[o[1],o[2]],[r[1],r[2]],s,a);return[i,l]}case"AvgPool3D":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("kernelSize",e,t,n);return[UA(D("x",e,t,n),[o[1],o[2],o[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("kernelSize",e,t,n);return[n2(D("x",e,t,n),[o[1],o[2],o[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=D("strides",e,t,n),s=D("pad",e,t,n),o=D("dilations",e,t,n),a=r[1],i=r[2],l=o[1],u=o[2];return[XA(D("x",e,t,n),D("filter",e,t,n),[a,i],s,[l,u],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};var lY=(e,t,n)=>{switch(e.op){case"Fill":{let r=D("shape",e,t,n),s=D("dtype",e,t,n),o=D("value",e,t,n);return[tc(r,o,s)]}case"LinSpace":{let r=D("start",e,t,n),s=D("stop",e,t,n),o=D("num",e,t,n);return[TD(r,s,o)]}case"Multinomial":{let r=D("logits",e,t,n),s=D("numSamples",e,t,n),o=D("seed",e,t,n);return[OD(r,s,o)]}case"OneHot":{let r=D("indices",e,t,n),s=D("depth",e,t,n),o=D("onValue",e,t,n),a=D("offValue",e,t,n);return[ud(r,s,o,a)]}case"Ones":return[eo(D("shape",e,t,n),D("dtype",e,t,n))];case"OnesLike":return[Nr(D("x",e,t,n))];case"RandomUniform":return[Li(D("shape",e,t,n),D("minval",e,t,n),D("maxval",e,t,n),D("dtype",e,t,n))];case"Range":{let r=D("start",e,t,n),s=D("stop",e,t,n),o=D("step",e,t,n);return[lc(r,s,o,D("dtype",e,t,n))]}case"TruncatedNormal":{let r=D("shape",e,t,n),s=D("mean",e,t,n),o=D("stdDev",e,t,n),a=D("seed",e,t,n);return[hm(r,s,o,D("dtype",e,t,n),a)]}case"Zeros":return[fn(D("shape",e,t,n),D("dtype",e,t,n))];case"ZerosLike":return[Ye(D("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function A6(e,t,n){let r=D("boxes",e,t,n),s=D("scores",e,t,n),o=D("maxOutputSize",e,t,n),a=D("iouThreshold",e,t,n),i=D("scoreThreshold",e,t,n),l=D("softNmsSigma",e,t,n);return{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i,softNmsSigma:l}}var uY=async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i,softNmsSigma:l}=A6(e,t,n),u=await so.nonMaxSuppressionWithScoreAsync(r,s,o,a,i,l);return[u.selectedIndices,u.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i}=A6(e,t,n),l=D("padToMaxOutputSize",e,t,n),u=await so.nonMaxSuppressionPaddedAsync(r,s,o,a,i,l);return[u.selectedIndices,u.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:r,scores:s,maxOutputSize:o,iouThreshold:a,scoreThreshold:i}=A6(e,t,n);return[await so.nonMaxSuppressionAsync(r,s,o,a,i)]}case"Where":{let r=we(D("condition",e,t,n),"bool"),s=[await KD(r)];return r.dispose(),s}case"ListDiff":return HD(D("x",e,t,n),D("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}};var cY=(e,t,n)=>{switch(e.op){case"TopKV2":{let r=D("x",e,t,n),s=D("k",e,t,n),o=D("sorted",e,t,n),a=x2(r,s,o);return[a.values,a.indices]}case"Unique":{let r=D("x",e,t,n),s=Ty(r);return[s.values,s.indices]}case"UniqueV2":{let r=D("x",e,t,n),s=D("axis",e,t,n),o=Ty(r,s);return[o.values,o.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};var pY=(e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=D("default",e,t,n);return[Lr(e.name,t,n)||r];case"Placeholder":return[Lr(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let u=D("x",e,t,n);return[Xi(u)]}case"IdentityN":return D("x",e,t,n).map(u=>Xi(u));case"Snapshot":let s=D("x",e,t,n);return[Xi(s)];case"Shape":return[Kn(D("x",e,t,n).shape,"int32")];case"ShapeN":return D("x",e,t,n).map(u=>Kn(u.shape));case"Size":return[Ke(D("x",e,t,n).size,"int32")];case"Rank":return[Ke(D("x",e,t,n).rank,"int32")];case"NoOp":return[Ke(1)];case"Print":let o=D("x",e,t,n),a=D("data",e,t,n),i=D("message",e,t,n),l=D("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(i);for(let u=0;ut.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Ke(this.size(),"int32")}async import(t,n){this.checkKeyAndValueTensor(t,n);let r=await t.data();return this.tensorMap.forEach(s=>s.dispose()),this.tensorMap.clear(),le(()=>{let s=zr(n),o=r.length,a=s.length;C.assert(o===a,()=>`The number of elements doesn't match, keys has ${o} elements, the values has ${a} elements.`);for(let i=0;i{let s=[];for(let o=0;o{switch(e.op){case"HashTable":case"HashTableV2":{let s=D("keyDType",e,t,n),o=D("valueDType",e,t,n),a=new v6(s,o);return r.addHashTable(e.name,a),[a.handle]}case"LookupTableImport":case"LookupTableImportV2":{let s=D("tableHandle",e,t,n,r),o=D("keys",e,t,n),a=D("values",e,t,n);return[await r.getHashTableById(s.id).import(o,a)]}case"LookupTableFind":case"LookupTableFindV2":{let s=D("tableHandle",e,t,n,r),o=D("keys",e,t,n),a=D("defaultValue",e,t,n);return[await r.getHashTableById(s.id).find(o,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let s=D("tableHandle",e,t,n,r);return[r.getHashTableById(s.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};var fY=(e,t,n)=>{switch(e.op){case"ResizeBilinear":{let r=D("images",e,t,n),s=D("size",e,t,n),o=D("alignCorners",e,t,n),a=D("halfPixelCenters",e,t,n);return[so.resizeBilinear(r,[s[0],s[1]],o,a)]}case"ResizeNearestNeighbor":{let r=D("images",e,t,n),s=D("size",e,t,n),o=D("alignCorners",e,t,n),a=D("halfPixelCenters",e,t,n);return[so.resizeNearestNeighbor(r,[s[0],s[1]],o,a)]}case"CropAndResize":{let r=D("image",e,t,n),s=D("boxes",e,t,n),o=D("boxInd",e,t,n),a=D("cropSize",e,t,n),i=D("method",e,t,n),l=D("extrapolationValue",e,t,n);return[so.cropAndResize(r,s,o,a,i,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};var hY=(e,t,n)=>{switch(e.op){case"Equal":return[Ss(D("a",e,t,n),D("b",e,t,n))];case"NotEqual":return[Sl(D("a",e,t,n),D("b",e,t,n))];case"Greater":return[qn(D("a",e,t,n),D("b",e,t,n))];case"GreaterEqual":return[To(D("a",e,t,n),D("b",e,t,n))];case"Less":return[tm(D("a",e,t,n),D("b",e,t,n))];case"LessEqual":return[_o(D("a",e,t,n),D("b",e,t,n))];case"LogicalAnd":return[gs(D("a",e,t,n),D("b",e,t,n))];case"LogicalNot":return[rc(D("a",e,t,n))];case"LogicalOr":return[sm(D("a",e,t,n),D("b",e,t,n))];case"Select":case"SelectV2":return[Sn(D("condition",e,t,n),D("a",e,t,n),D("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var mY=(e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[Bt(D("a",e,t,n),D("b",e,t,n),D("transposeA",e,t,n),D("transposeB",e,t,n))];case"Einsum":return[CD(D("equation",e,t,n),...D("tensors",e,t,n))];case"Transpose":return[St(D("x",e,t,n),D("perm",e,t,n))];case"_FusedMatMul":let[r,s]=D("fusedOps",e,t,n),o=r==="biasadd",a=s==="prelu",i=D("numArgs",e,t,n),l=D("leakyreluAlpha",e,t,n);if(o){if(a&&i!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!a&&i!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[u,c]=D("args",e,t,n);return[Xa.matMul({a:D("a",e,t,n),b:D("b",e,t,n),transposeA:D("transposeA",e,t,n),transposeB:D("transposeB",e,t,n),bias:u,activation:s,preluActivationWeights:c,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var gY=(e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[qa(D("x",e,t,n),D("mean",e,t,n),D("variance",e,t,n),D("offset",e,t,n),D("scale",e,t,n),D("epsilon",e,t,n))];case"FusedBatchNormV3":return[qa(D("x",e,t,n),D("mean",e,t,n),D("variance",e,t,n),D("offset",e,t,n),D("scale",e,t,n),D("epsilon",e,t,n))];case"LRN":return[e2(D("x",e,t,n),D("radius",e,t,n),D("bias",e,t,n),D("alpha",e,t,n),D("beta",e,t,n))];case"Softmax":return[uc(D("x",e,t,n))];case"LogSoftmax":return[rm(D("x",e,t,n))];case"SparseToDense":return[L3(D("sparseIndices",e,t,n),D("outputShape",e,t,n),D("sparseValues",e,t,n),D("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var xY=(e,t,n)=>{switch(e.op){case"Max":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[ms(D("x",e,t,n),a,i)]}case"Mean":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[Nn(D("x",e,t,n),a,i)]}case"Min":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[dd(D("x",e,t,n),a,i)]}case"Sum":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[ze(D("x",e,t,n),a,i)]}case"All":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[qh(D("x",e,t,n),a,i)]}case"Any":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[cd(D("x",e,t,n),a,i)]}case"ArgMax":{let a=D("axis",e,t,n);return[Fi(D("x",e,t,n),a)]}case"ArgMin":{let a=D("axis",e,t,n);return[zA(D("x",e,t,n),a)]}case"Prod":{let a=D("axis",e,t,n),i=D("keepDims",e,t,n);return[om(D("x",e,t,n),a,i)]}case"Cumsum":{let a=D("axis",e,t,n),i=D("exclusive",e,t,n),l=D("reverse",e,t,n);return[Qh(D("x",e,t,n),a,i,l)]}case"Bincount":let r=D("x",e,t,n),s=D("weights",e,t,n),o=D("size",e,t,n);return[jA(r,s,o)];case"DenseBincount":{let a=D("x",e,t,n),i=D("weights",e,t,n),l=D("size",e,t,n),u=D("binaryOutput",e,t,n);return[ID(a,i,l,u)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};var yY=(e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=D("n",e,t,n),s=D("axis",e,t,n),o=D("tensors",e,t,n);return o=o.slice(0,r),[on(o,s)]}case"Gather":{let r=D("x",e,t,n),s=D("indices",e,t,n);return[Il(r,we(s,"int32"),0)]}case"GatherV2":{let r=D("axis",e,t,n),s=D("batchDims",e,t,n),o=D("x",e,t,n),a=D("indices",e,t,n);return[Il(o,we(a,"int32"),r,s)]}case"Reverse":{let r=D("dims",e,t,n),s=[];for(let a=0;a{let r=D("axis",e,t,n),s=D("tensors",e,t,n),o=s[0].shape,a=ro(s[0]).shape,i=s.map(l=>{let u=C.arraysEqual(l.shape,o);if(!u&&!C.arraysEqual(ro(l).shape,a))throw new Error("the input tensors shape does not match");return u?l:X(l,o)});return[or(i,r)]});case"Unpack":{let r=D("axis",e,t,n),s=D("tensor",e,t,n);return zr(s,r)}case"Tile":{let r=D("reps",e,t,n);return[Yr(D("x",e,t,n),r)]}case"Split":case"SplitV":{let r=D("axis",e,t,n),s=D("numOrSizeSplits",e,t,n),o=D("x",e,t,n);return yr(o,s,r)}case"ScatterNd":{let r=D("indices",e,t,n),s=D("values",e,t,n),o=D("shape",e,t,n);return[vq(r,s,o)]}case"GatherNd":{let r=D("x",e,t,n),s=D("indices",e,t,n);return[kq(r,s)]}case"SparseToDense":{let r=D("sparseIndices",e,t,n),s=D("outputShape",e,t,n),o=D("sparseValues",e,t,n),a=D("defaultValue",e,t,n);return[L3(r,o,s,o.dtype===a.dtype?a:we(a,o.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};var bY=(e,t,n)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:o,reverseIndexMap:a}=y2.sparseFillEmptyRows(D("indices",e,t,n),D("values",e,t,n),D("denseShape",e,t,n),D("defaultValue",e,t,n));return[r,s,o,a]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=y2.sparseReshape(D("inputIndices",e,t,n),D("inputShape",e,t,n),D("newShape",e,t,n));return[r,s]}case"SparseSegmentMean":return[y2.sparseSegmentMean(D("data",e,t,n),D("indices",e,t,n),D("segmentIds",e,t,n))];case"SparseSegmentSum":return[y2.sparseSegmentSum(D("data",e,t,n),D("indices",e,t,n),D("segmentIds",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var AY=(e,t,n)=>{switch(e.op){case"FFT":return[fm(D("x",e,t,n))];case"IFFT":return[hd(D("x",e,t,n))];case"RFFT":return[d2(D("x",e,t,n))];case"IRFFT":return[p2(D("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var vY=(e,t,n)=>{switch(e.op){case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=q3.stringNGrams(D("data",e,t,n),D("dataSplits",e,t,n),D("separator",e,t,n),D("nGramWidths",e,t,n),D("leftPad",e,t,n),D("rightPad",e,t,n),D("padWidth",e,t,n),D("preserveShortSequences",e,t,n));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:o}=q3.stringSplit(D("input",e,t,n),D("delimiter",e,t,n),D("skipEmpty",e,t,n));return[r,s,o]}case"StringToHashBucketFast":return[q3.stringToHashBucketFast(D("input",e,t,n),D("numBuckets",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};var wY=(e,t,n)=>{switch(e.op){case"Cast":return[we(D("x",e,t,n),D("dtype",e,t,n))];case"ExpandDims":{let r=D("axis",e,t,n);return[Mr(D("x",e,t,n),r)]}case"Squeeze":{let r=D("axis",e,t,n);return[ro(D("x",e,t,n),r)]}case"Reshape":return[X(D("x",e,t,n),D("shape",e,t,n))];case"MirrorPad":return[r2(D("x",e,t,n),D("padding",e,t,n),D("mode",e,t,n))];case"PadV2":case"Pad":return[zi(D("x",e,t,n),D("padding",e,t,n),D("constantValue",e,t,n))];case"SpaceToBatchND":{let r=D("blockShape",e,t,n),s=D("paddings",e,t,n);return[ac(D("x",e,t,n),r,s)]}case"BatchToSpaceND":{let r=D("blockShape",e,t,n),s=D("crops",e,t,n);return[Ju(D("x",e,t,n),r,s)]}case"DepthToSpace":{let r=D("blockSize",e,t,n),s=D("dataFormat",e,t,n).toUpperCase();return[KA(D("x",e,t,n),r,s)]}case"BroadcastTo":return[Qu(D("x",e,t,n),D("shape",e,t,n))];case"BroadcastArgs":return[yD(D("s0",e,t,n),D("s1",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function w6(e,t,n,r){let s=((o,a,i)=>{switch(o.category){case"arithmetic":return le(()=>JZ(o,a,i));case"basic_math":return le(()=>QZ(o,a,i));case"control":return oY(o,a,i);case"convolution":return le(()=>iY(o,a,i));case"creation":return le(()=>lY(o,a,i));case"dynamic":return uY(o,a,i);case"evaluation":return le(()=>cY(o,a,i));case"image":return le(()=>fY(o,a,i));case"graph":return le(()=>pY(o,a,i));case"logical":return le(()=>hY(o,a,i));case"matrices":return le(()=>mY(o,a,i));case"normalization":return le(()=>gY(o,a,i));case"reduction":return le(()=>xY(o,a,i));case"slice_join":return le(()=>yY(o,a,i));case"sparse":return le(()=>bY(o,a,i));case"spectral":return le(()=>AY(o,a,i));case"string":return le(()=>vY(o,a,i));case"transformation":return le(()=>wY(o,a,i));case"hash_table":return dY(o,a,i,r);case"custom":let l=$C(o.op);if(l&&l.customExecutor)return l.customExecutor(new y6(o,a,i));throw TypeError(`Custom op ${o.op} is not registered.`);default:throw TypeError(`Unknown op '${o.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return C.isPromise(s)?s.then(o=>[].concat(o)):[].concat(s)}var qC=class{constructor(t={},n={},r={},s={}){this.weightMap=t,this.tensorArrayMap=n,this.tensorListMap=r,this.functionMap=s,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(t,n){return{id:t,frameName:n,iterationId:0}}set currentContext(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let t=[];for(let n=0;nn.id===0&&n.iterationId===0?"":`${n.frameName}-${n.iterationId}`).join("/"):""}enterFrame(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(t){return this.weightMap[t]}addTensorArray(t){this.tensorArrayMap[t.id]=t}getTensorArray(t){return this.tensorArrayMap[t]}addTensorList(t){this.tensorListMap[t.id]=t}getTensorList(t){return this.tensorListMap[t]}dispose(t){for(let n in this.tensorArrayMap)this.tensorArrayMap[n].clearAndClose(t);for(let n in this.tensorListMap)this.tensorListMap[n].clearAndClose(t)}};function k6(e,t,n,r){let s=new Set,o=[],a=null,i=null,l=new Set,u=Object.keys(e).map(d=>po(d)[0]),c=[];r!=null&&(c=r.map(d=>po(d.name)[0]));let p=[...t];for(;p.length>0;){let d=p.pop();if((I6(d)||CUe(d)||SUe(d))&&a==null&&(a=d,i=a.children.map(f=>f.name).filter(f=>s.has(f))),s.add(d.name),n[d.name]==null&&u.indexOf(d.name)===-1&&c.indexOf(d.name)===-1){if(d.inputs.length===0){o.push(d.name);continue}d.inputs.forEach(f=>{l.has(f.name)||(l.add(f.name),p.push(f))})}}return{inputs:e,outputs:t,usedNodes:s,missingInputs:o,dynamicNode:a,syncInputs:i}}function kY(e,t,n){let{usedNodes:r,inputs:s}=n,o=[],a=Object.keys(s).map(c=>po(c)[0]).map(c=>e.nodes[c]),i=e.initNodes;a.forEach(c=>{r.has(c.name)&&o.push(c)}),e.weights.forEach(c=>{r.has(c.name)&&o.push(c)}),i!=null&&i.forEach(c=>{r.has(c.name)&&o.push(c)});let l=new Set,u=[];for(;o.length>0;){let c=o.pop();l.add(c.name),t[c.name]||u.push(c),c.children.forEach(p=>{!l.has(p.name)&&r.has(p.name)&&p.inputs.every(d=>l.has(d.name))&&o.push(p)})}return u}var wUe=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],kUe=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],IUe=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function I6(e){return wUe.indexOf(e.op)>=0}function CUe(e){return kUe.indexOf(e.op)>=0}function SUe(e){return IUe.indexOf(e.op)>=0}var qy=class{constructor(t,n){this.graph=t,this.parent=n,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(r=>{this._functionExecutorMap[r]=new qy(t.functions[r],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(t){let n=Object.keys(t).map(r=>t[r].map(s=>s.id));this._weightIds=[].concat(...n),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let n=t.signatureKey||t.name;return t.defaultOutput?`${n}:${t.defaultOutput}`:n})}get functions(){return Object.keys(this._functions).reduce((t,n)=>(t[n]=this._functions[n].signature,t),{})}getCompilationKey(t,n){let r=t.map(o=>o.name).sort(),s=n.map(o=>o.name).sort();return r.join(this.SEPERATOR)+"--"+s.join(this.SEPERATOR)}compile(t,n){let r=k6(t,n,this.weightMap,this._initNodes),{missingInputs:s,dynamicNode:o,syncInputs:a}=r;if(o!=null)throw new Error(`This execution contains the node '${o.name}', which has the dynamic op '${o.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(s.length>0){let i=n.map(u=>u.name),l=Object.keys(t);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${l}]. Missing the following inputs: [${s}]`)}return kY(this.graph,this.weightMap,r)}execute(t,n){t=this.mapInputs(t);let r=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),n=this.mapOutputs(n),this.checkOutputs(n);let s=r.map(p=>this.graph.nodes[po(p)[0]]),o=n.map(p=>po(p)[0]),a=o.map(p=>this.graph.nodes[p]);a.length===0&&(a=this._outputs);let i=this.getCompilationKey(s,a),l=this.compiledMap.get(i);l==null&&(l=this.compile(t,a),this.compiledMap.set(i,l));let u={},c={};return le(()=>{let p=new qC(this.weightMap,u,c,this.functionExecutorMap),d=Object.assign({},this.weightMap);Object.keys(t).forEach(m=>{let[g,x]=po(m),y=[];y[x]=t[m],d[g]=y});let f=this.getFrozenTensorIds(d),h={};for(let m=0;mLr(m,d,p))})}getFrozenTensorIds(t){let n=[].concat.apply([],Object.keys(t).map(r=>t[r]).map(r=>r.map(s=>s.id)));return new Set(n)}checkTensorForDisposal(t,n,r,s,o,a,i){n.category==="control"||a.indexOf(t)!==-1||(r[t].forEach(l=>{l!=null&&(i[l.id]=(i[l.id]||0)+n.children.length)}),n.inputs.forEach(l=>{if(l.category!=="control"){let u=KZ(l.name,r,s);u!=null&&u.forEach(c=>{if(c&&!c.kept&&!o.has(c.id)){let p=i[c.id];p===1?(c.dispose(),delete i[c.id]):p!=null&&i[c.id]--}})}}))}async executeAsync(t,n){return this._executeAsync(t,n)}async _executeAsync(t,n,r=!1,s={},o={}){r||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),n=this.mapOutputs(n),this.checkOutputs(n));let a=new qC(this.weightMap,s,o,this.functionExecutorMap),i=await this.executeWithControlFlow(t,a,n,r),l=n.map(d=>Lr(d,i,a)),u=l.map(d=>d.id),c=Object.keys(t).map(d=>t[d].id),p=new Set([...u,...c,...this.weightIds]);return Object.keys(i).forEach(d=>{i[d].forEach(h=>{h&&!h.kept&&!h.isDisposed&&!p.has(h.id)&&h.dispose()})}),this.parent==null&&a.dispose(p),l}async executeFunctionAsync(t,n,r){let s=t.reduce((o,a,i)=>(o[this.inputs[i].name]=a,o),{});return this._executeAsync(s,this.outputNodes,!0,n,r)}async executeWithControlFlow(t,n,r,s){let o=Object.keys(t),a=o.map(b=>this.graph.nodes[po(b)[0]]),i=r.map(b=>po(b)[0]),l=i.map(b=>this.graph.nodes[b]);l.length===0&&(l=this._outputs);let{usedNodes:u,missingInputs:c,dynamicNode:p,syncInputs:d}=k6(t,l,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:n.currentContext})),h=Object.assign({},this.weightMap);Object.keys(t).forEach(b=>{let[A,v]=po(b),w=[];w[v]=t[b],h[A]=w});let m={},g=this.getFrozenTensorIds(h),x={};for(;f.length>0;){let b=this.processStack(a,f,n,h,x,g,i,m,u);await Promise.all(b)}p==null&&!s&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let y=l.filter(b=>!I6(b)&&!Lr(b.name,h,n)).map(b=>b.name);if(y.length>0){let b="";throw p!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${o}]. Consider providing the following inputs: [${c}]. ${b}`)}return h}processStack(t,n,r,s,o,a,i,l,u){let c=[];for(;n.length>0;){let p=n.pop();r.currentContext=p.contexts;let d="";if(p.node.op==="Enter"&&D("isConstant",p.node,s,r)&&([d]=Ki(p.node.name,r)),s[p.node.name]==null){let f=w6(p.node,s,r,this._resourceManager);d||([d]=Ki(p.node.name,r));let h=r.currentContext;C.isPromise(f)?c.push(f.then(m=>(s[d]=m,r.currentContext=h,this.checkTensorForDisposal(d,p.node,s,r,a,i,l),this.processChildNodes(p.node,n,r,s,o,u),m))):(s[d]=f,this.checkTensorForDisposal(d,p.node,s,r,a,i,l),this.processChildNodes(p.node,n,r,s,o,u))}else this.processChildNodes(p.node,n,r,s,o,u)}return c}processChildNodes(t,n,r,s,o,a){t.children.forEach(i=>{let[l]=Ki(i.name,r);o[l]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Lr(u,s,r))&&(o[l]=!0,n.push({contexts:r.currentContext,node:i})):i.inputNames.every(u=>!!Lr(u,s,r))&&(o[l]=!0,n.push({contexts:r.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(n=>n.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(n=>{let r=t[n],[s]=po(n),o=this.graph.nodes[s];if(o.attrParams.shape&&o.attrParams.shape.value){let a=o.attrParams.shape.value,i=a.length===r.shape.length&&r.shape.every((l,u)=>a[u]===-1||a[u]===l);C.assert(i,()=>`The shape of dict['${o.name}'] provided in model.execute(dict) must be [${a}], but was [${r.shape}]`)}o.attrParams.dtype&&o.attrParams.dtype.value&&C.assert(r.dtype===o.attrParams.dtype.value,()=>`The dtype of dict['${o.name}'] provided in model.execute(dict) must be ${o.attrParams.dtype.value}, but was ${r.dtype}`)})}mapInputs(t){let n={};for(let r in t)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[r]!=null){let s=this._signature.inputs[r];n[s.name]=t[r]}else n[r]=t[r];return n}checkInputs(t){let n=Object.keys(t).filter(r=>{let[s]=po(r);return this.graph.nodes[s]==null});if(n.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${n}] that are not part of graph`)}mapOutputs(t){return t.map(n=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[n]!=null?this._signature.outputs[n].name:n,{})}checkOutputs(t){t.forEach(n=>{let[r]=po(n);if(!this.graph.nodes[r])throw new Error(`The output '${n}' is not found in the graph`)})}};var C6=class{constructor(t={},n={}){this.hashTableNameToHandle=t,this.hashTableMap=n}addHashTable(t,n){this.hashTableNameToHandle[t]=n.handle,this.hashTableMap[n.id]=n}getHashTableHandleByName(t){return this.hashTableNameToHandle[t]}getHashTableById(t){return this.hashTableMap[t]}dispose(){for(let t in this.hashTableMap)this.hashTableMap[t].clearAndClose(),delete this.hashTableMap[t];for(let t in this.hashTableNameToHandle)this.hashTableNameToHandle[t].dispose(),delete this.hashTableNameToHandle[t]}};var NUe="?tfjs-format=file",TUe="model.json",S6=class{constructor(t,n={}){this.modelUrl=t,this.loadOptions=n,this.version="n/a",n==null&&(this.loadOptions={}),this.resourceManager=new C6}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}findIOHandler(){let t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=na.browserHTTPRequest(t,this.loadOptions);else{let n=na.getLoadHandlers(t,this.loadOptions);if(n.length===0)n.push(na.browserHTTPRequest(t,this.loadOptions));else if(n.length>1)throw new Error(`Found more than one (${n.length}) load handlers for URL '${[t]}'`);this.handler=n[0]}}async load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let t=await this.handler.load();return this.loadSync(t)}loadSync(t){this.artifacts=t;let n=this.artifacts.modelTopology,r;this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null?r=this.artifacts.userDefinedMetadata.signature:r=this.artifacts.signature,this.signature=r,this.version=`${n.versions.producer}.${n.versions.minConsumer}`;let s=na.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new qy(OC.Instance.transformGraph(n,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(s),this.executor.resourceManager=this.resourceManager,t.modelInitializer!=null&&t.modelInitializer.node!=null){let o=OC.Instance.transformGraph(t.modelInitializer);this.initializer=new qy(o),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(t,n){if(typeof t=="string"){let r=na.getSaveHandlers(t);if(r.length===0)throw new Error(`Cannot find any save handlers for URL '${t}'`);if(r.length>1)throw new Error(`Found more than one (${r.length}) save handlers for URL '${t}'`);t=r[0]}if(t.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return t.save(this.artifacts)}predict(t,n){return this.execute(t,this.outputNodes)}normalizeInputs(t){if(!(t instanceof Ot)&&!Array.isArray(t))return t;if(t=Array.isArray(t)?t:[t],t.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${t.length} input tensors.`);return this.inputNodes.reduce((n,r,s)=>(n[r]=t[s],n),{})}normalizeOutputs(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]}execute(t,n){t=this.normalizeInputs(t),n=this.normalizeOutputs(n);let r=this.executor.execute(t,n);return r.length>1?r:r[0]}async executeAsync(t,n){t=this.normalizeInputs(t),n=this.normalizeOutputs(n);let r=await this.executor.executeAsync(t,n);return r.length>1?r:r[0]}convertTensorMapToTensorsMap(t){return Object.keys(t).reduce((n,r)=>(n[r]=[t[r]],n),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function KC(e,t={}){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&e.load==null&&(e.endsWith("/")||(e=e+"/"),e=`${e}${TUe}${NUe}`);let n=new S6(e,t);return await n.load(),n}var aJ=T1($6());var HY=T1($6());function BY(e,t){return VY(e,t)}function VY(e,t,n=new Map,r=new Set){if(e==null)return null;if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let s=t(e);if(s.recurse&&s.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(s.recurse)if(Ky(e)){let o=Array.isArray(e)?[]:{};r.add(e);for(let a in e){let i=e[a],l=VY(i,t,n,r);o[a]=l}return r.delete(e),o}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,s.value),s.value}function WY(e,t=F6){return GY(e,t)}function GY(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let s=t(e);if(s.recurse&&s.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(s.recurse)if(Ky(r)){let o=Array.isArray(r)?[]:{};n.add(r);for(let a in r){let i=e.map(u=>u[a]),l=GY(i,t,n);o[a]=l}return n.delete(r),o}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return s.value}function F6(e){return e===null?null:Ky(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}function Ky(e){let t=!1;if(he().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=LY();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof Ot)&&!(e instanceof Promise)&&!t)}function UY(e){return e==null||PUe(e)||Array.isArray(e)||typeof e=="object"&&e instanceof Ot||C.isTypedArray(e)}function PUe(e){return e===null||typeof e!="object"&&typeof e!="function"}function jY(e){return BY(e,MUe)}function MUe(e){return e instanceof Ot?{value:e.clone(),recurse:!1}:Ky(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var Q2=class{constructor(t){if(this.capacity=t,this.begin=0,this.end=0,t==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(t<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(t),this.doubledCapacity=2*t}wrap(t){for(;t<0;)t+=this.doubledCapacity;return t%this.doubledCapacity}get(t){if(t<0)throw new RangeError("Can't get item at a negative index.");return this.data[t%this.capacity]}set(t,n){if(t<0)throw new RangeError("Can't set item at a negative index.");this.data[t%this.capacity]=n}length(){let t=this.end-this.begin;return t<0&&(t=this.doubledCapacity+t),t}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(t){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,t),this.end=this.wrap(this.end+1)}pushAll(t){for(let n of t)this.push(n)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let t=this.get(this.end);return this.set(this.end,void 0),t}unshift(t){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,t)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),t}shuffleExcise(t){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let n=this.wrap(this.begin+t),r=this.get(n);return this.set(n,this.pop()),r}};var Xy=class extends Q2{constructor(){super(Xy.INITIAL_CAPACITY)}isFull(){return!1}push(t){super.isFull()&&this.expand(),super.push(t)}unshift(t){super.isFull()&&this.expand(),super.unshift(t)}expand(){let t=this.capacity*2,n=new Array(t),r=this.length();for(let s=0;sn===!0)}rowMajorBatch(t,n=!0){return new eJ(this,t,n)}columnMajorBatch(t,n=!0,r=F6){return this.rowMajorBatch(t,n).map(o=>WY(o,r))}concatenate(t,n){return new M6(qY([this,t]),n)}take(t){return t<0||t==null?this:new QY(this,t)}skip(t){return t<0||t==null?this:new JY(this,t)}prefetch(t){return new L6(this,t)}shuffle(t,n){return new oJ(this,t,n)}serial(){return new YY(this)}},XY=class extends _s{constructor(t){super();this.items=t,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let t=this.items[this.trav];return this.trav++,{value:jY(t),done:!1}}},ZY=class extends _s{constructor(t){super();this.nextFn=t}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(t){throw t.message=`Error thrown while iterating through a dataset: ${t.message}`,t}}},YY=class extends _s{constructor(t){super();this.upstream=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},JY=class extends _s{constructor(t,n){super();this.upstream=t,this.maxCount=n,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++ Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},eJ=class extends _s{constructor(t,n,r=!0){super();this.upstream=t,this.batchSize=n,this.enableSmallLastBatch=r,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let t=[];for(;t.length0?{value:t,done:!1}:{value:null,done:!0};t.push(n.value)}return{value:t,done:!1}}},tJ=class extends _s{constructor(t,n){super();this.upstream=t,this.predicate=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let t=await this.upstream.next();if(t.done||this.predicate(t.value))return t;ut(t.value)}}},nJ=class extends _s{constructor(t,n){super();this.upstream=t,this.transform=n}summary(){return`${this.upstream.summary()} -> Map`}async next(){let t=await this.upstream.next();if(t.done)return{value:null,done:!0};let n=Ha.getTensorsInContainer(t.value),r=this.transform(t.value),s=Ha.getTensorsInContainer(r);for(let o of n)Ha.isTensorInList(o,s)||o.dispose();return{value:r,done:!1}}},rJ=class extends _s{constructor(t,n){super();this.upstream=t,this.handler=n,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(t){if(!this.handler(t))return{value:null,done:!0}}}},P6=class extends _s{constructor(t,n){super();this.upstream=t,this.transform=n}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let t=await this.upstream.next();if(t.done)return{value:null,done:!0};let n=Ha.getTensorsInContainer(t.value),r=await this.transform(t.value),s=Ha.getTensorsInContainer(r);for(let o of n)Ha.isTensorInList(o,s)||o.dispose();return{value:r,done:!1}}},ZC=class extends _s{constructor(){super();this.outputQueue=new Xy,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.outputQueue.length()===0;)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},sJ=class extends ZC{constructor(t,n){super();this.upstream=t,this.transform=n}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let t=await this.upstream.next();if(t.done)return!1;let n=Ha.getTensorsInContainer(t.value),r=this.transform(t.value),s=Ha.getTensorsInContainer(r);this.outputQueue.pushAll(r);for(let o of n)Ha.isTensorInList(o,s)||o.dispose();return!0}},M6=class extends _s{constructor(t,n){super();this.baseErrorHandler=n,this.lastRead=null,this.iterator=null,this.moreIterators=t}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(t){if(await t,this.iterator==null){let r=await this.moreIterators.next();if(r.done)return{value:null,done:!0};this.iterator=r.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let n=await this.iterator.next();return n.done?(this.iterator=null,this.readFromChain(t)):n}},z6;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(z6||(z6={}));var L6=class extends _s{constructor(t,n){super();this.upstream=t,this.bufferSize=n,this.buffer=new Q2(n)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let t=this.upstream.next();this.buffer.push(t)}}next(){return this.refill(),this.buffer.shift()}},oJ=class extends L6{constructor(t,n,r){super(t,n);this.upstream=t,this.windowSize=n,this.upstreamExhausted=!1,this.random=HY.alea(r||C.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}randomInt(t){return Math.floor(this.random()*t)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let t=this.chooseIndex(),n=await this.buffer.shuffleExcise(t);if(n.done)this.upstreamExhausted=!0;else return this.refill(),n}return{value:null,done:!0}}};var Zy=class{constructor(){this.size=null}batch(t,n=!0){let r=this;C.assert(t>0,()=>`batchSize needs to be positive, but it is ${t}`);let s;return this.size===1/0||this.size==null?s=this.size:n?s=Math.ceil(this.size/t):s=Math.floor(this.size/t),Zi(async()=>(await r.iterator()).columnMajorBatch(t,n,LUe),s)}concatenate(t){let n=this,r;return this.size===1/0||t.size===1/0?r=1/0:this.size!=null&&t.size!=null?r=this.size+t.size:r=null,Zi(async()=>(await n.iterator()).concatenate(await t.iterator()),r)}filter(t){let n=this,r;return this.size===1/0?r=1/0:r=null,Zi(async()=>(await n.iterator()).filter(s=>le(()=>t(s))),r)}async forEachAsync(t){return(await this.iterator()).forEachAsync(t)}map(t){let n=this;return Zi(async()=>(await n.iterator()).map(r=>le(()=>t(r))),this.size)}mapAsync(t){let n=this;return Zi(async()=>(await n.iterator()).mapAsync(t),this.size)}prefetch(t){if(t==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let n=this;return Zi(async()=>(await n.iterator()).prefetch(t),this.size)}repeat(t){let n=this,r;return this.size!=null&&t>0?r=this.size*t:t===0?r=0:this.size!=null&&(t===void 0||t<0)?r=1/0:r=null,Zi(async()=>{let s=O6(async()=>({value:await n.iterator(),done:!1}));return KY(s.take(t))},r)}skip(t){let n=this,r;return this.size!=null&&t>=0&&this.size>=t?r=this.size-t:this.size!=null&&(this.size(await n.iterator()).skip(t),r)}shuffle(t,n,r=!0){if(t==null||t<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let s=this,o=aJ.alea(n||C.now().toString());return Zi(async()=>{let a=o.int32();return r&&(a+=o.int32()),(await s.iterator()).shuffle(t,a.toString())},this.size)}take(t){let n=this,r;return this.size!=null&&this.size>t?r=t:this.size!=null&&this.size<=t?r=this.size:r=null,Zi(async()=>(await n.iterator()).take(t),r)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Zy.MAX_BUFFER_SIZE=1e4;function Zi(e,t=null){return new class extends Zy{constructor(){super(...arguments);this.size=t}async iterator(){return e()}}}function LUe(e){if(e===null)return null;let t=e[0];return UY(t)?{value:BUe(e),recurse:!1}:{value:null,recurse:!0}}function BUe(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof Ot?or(e):Zs(e)}var Qen=Symbol("out"),etn=Symbol("field"),ttn=Symbol("quote"),ntn=Symbol("quoteafterquote"),rtn=Symbol("quoteinquote");function Se(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&C.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var ZUe=Ts.whereImpl,Yy=class extends up{constructor(){super();this.blockSize=48,this.firstUse=!0,this.data=new ux(this,Zu())}nextDataId(){return Yy.nextDataId++}write(t,n,r){this.firstUse&&(this.firstUse=!1,he().get("IS_NODE")&&M.warn(` ============================ Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details. ============================`));let s={id:this.nextDataId()};return this.data.set(s,{values:t,dtype:r,refCount:1}),s}makeTensorInfo(t,n,r){let s;if(n==="string"&&r!=null&&r.length>0&&C.isString(r[0])){let o=r.map(a=>C.encodeString(a));s=this.write(o,t,n)}else s=this.write(r,t,n);return{dataId:s,shape:t,dtype:n}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let n=this.data.get(t);n.refCount++}decRef(t){if(this.data.has(t)){let n=this.data.get(t);n.refCount--}}move(t,n,r,s,o){this.data.set(t,{values:n,dtype:s,refCount:o})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:n,complexTensorInfos:r}=this.data.get(t);if(n==="complex64"){let s=this.readSync(r.real.dataId),o=this.readSync(r.imag.dataId);return M.mergeRealAndImagArrays(s,o)}return this.data.get(t).values}bufferSync(t){let n=this.readSync(t.dataId),r=n;if(t.dtype==="string")try{r=n.map(s=>C.decodeString(s))}catch(s){throw new Error("Failed to decode encoded string bytes into utf-8")}return et(t.shape,t.dtype,r)}makeOutput(t,n,r){let s=this.write(t,n,r);return Zu().makeTensorFromDataId(s,n,r,this)}disposeData(t,n=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!n&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:r}=this.data.get(t);r!=null&&(this.disposeData(r.real.dataId,!0),this.disposeData(r.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let n=C.now();return t(),{kernelMs:C.now()-n}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(t){Se([t],"where");let n=this.readSync(t.dataId);return ZUe(t.shape,n)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Yy.nextDataId=0;var cF={};dn(cF,{addImpl:()=>V6,bincountImpl:()=>e1,bincountReduceImpl:()=>YC,ceilImpl:()=>W6,concatImpl:()=>JC,equalImpl:()=>G6,expImpl:()=>j6,expm1Impl:()=>q6,floorImpl:()=>K6,gatherNdImpl:()=>QC,gatherV2Impl:()=>eS,greaterEqualImpl:()=>Z6,greaterImpl:()=>X6,lessEqualImpl:()=>J6,lessImpl:()=>Y6,linSpaceImpl:()=>tS,logImpl:()=>Q6,maxImpl:()=>nS,maximumImpl:()=>eF,minimumImpl:()=>tF,multiplyImpl:()=>ev,negImpl:()=>nF,notEqualImpl:()=>rF,prodImpl:()=>sF,rangeImpl:()=>rS,rsqrtImpl:()=>oF,sigmoidImpl:()=>RJ,simpleAbsImpl:()=>B6,sliceImpl:()=>iF,sparseFillEmptyRowsImpl:()=>sS,sparseReshapeImpl:()=>oS,sparseSegmentReductionImpl:()=>n1,sqrtImpl:()=>FJ,squaredDifferenceImpl:()=>lF,stridedSliceImpl:()=>aS,stringNGramsImpl:()=>iS,stringSplitImpl:()=>lS,stringToHashBucketFastImpl:()=>uS,subImpl:()=>uF,tileImpl:()=>cS,topKImpl:()=>pS,transposeImpl:()=>t1,uniqueImpl:()=>dS});function B6(e){let t=new Float32Array(e.length);for(let n=0;n{let{x:t}=e.inputs,n=e.backend;Se(t,"abs");let r=new Float32Array(C.sizeFromShape(t.shape)),s=n.data.get(t.dataId).values;return r=B6(s),n.makeOutput(r,t.shape,"float32")},iJ={kernelName:pp,backendName:"cpu",kernelFunc:YUe};function Pt(e){return(t,n,r,s,o)=>{let a=M.assertAndGetBroadcastShape(t,n),i=a.length,l=C.computeStrides(a),u=C.sizeFromShape(a),c=C.getTypedArrayFromDType(o,u),p=t.length,d=n.length,f=C.computeStrides(t),h=C.computeStrides(n),m=M.getBroadcastDims(t,a),g=M.getBroadcastDims(n,a);if(m.length+g.length===0)for(let x=0;xb[k]=0);let A=C.locToIndex(b,p,f),v=y.slice(-d);g.forEach(k=>v[k]=0);let w=C.locToIndex(v,d,h);c[x]=e(r[A],s[w])}return[c,a]}}function Br(e){let{inputs:t,backend:n}=e,{real:r,imag:s}=t,o=n.data.get(r.dataId).values,a=n.data.get(s.dataId).values,i=n.makeTensorInfo(r.shape,"complex64"),l=n.data.get(i.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",o),imag:n.makeTensorInfo(s.shape,"float32",a)},i}var lJ={kernelName:vx,backendName:"cpu",kernelFunc:Br};function Jy(e,t,n="float32"){if(n==="complex64"){let s=Jy(e,t,"float32"),o=Jy(e,t,"float32");return Br({inputs:{real:s,imag:o},backend:e})}let r=C.makeZerosTypedArray(C.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function Es(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var uJ={kernelName:Al,backendName:"cpu",kernelFunc:Es};function oi(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.data.get(r.dataId).complexTensorInfos.real,o=n.data.get(s.dataId).values;return n.makeTensorInfo(s.shape,s.dtype,o)}var cJ={kernelName:Xx,backendName:"cpu",kernelFunc:oi};function ai(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:o}=r;if(o==="complex64"){if(s.dtype==="complex64")return Es({inputs:{x:s},backend:n});let a=Jy(n,s.shape,s.dtype),i=ai({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),l=Br({inputs:{real:i,imag:a},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i),l}if(s.dtype==="complex64"){let a=oi({inputs:{input:s},backend:n}),i=ai({inputs:{x:a},backend:n,attrs:{dtype:o}});return n.disposeIntermediateTensorInfo(a),i}if(!C.hasEncodingLoss(s.dtype,o)){let a=Es({inputs:{x:s},backend:n});return{dataId:a.dataId,shape:a.shape,dtype:o}}if(o==="int32"){let a=n.data.get(s.dataId).values,i=Int32Array.from(a);return n.makeTensorInfo(s.shape,"int32",i)}if(o==="bool"){let a=n.data.get(s.dataId).values,i=C.toTypedArray([0],s.dtype),[l,u]=Pt((c,p)=>c!==p?1:0)(s.shape,[],a,i,"bool");return n.makeTensorInfo(u,"bool",l)}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${o}`)}var pJ={kernelName:bl,backendName:"cpu",kernelFunc:ai};function Ht(e,t,n,r){return n==null?({inputs:s,backend:o})=>{let{a,b:i}=s,l=o;Se([a,i],e);let u=l.data.get(a.dataId).values,c=l.data.get(i.dataId).values,p=a.dtype==="string"?M.fromUint8ToStringArray(u):u,d=a.dtype==="string"?M.fromUint8ToStringArray(c):c,f=r||a.dtype,[h,m]=t(a.shape,i.shape,p,d,f);return l.makeTensorInfo(m,f,h)}:({inputs:s,backend:o})=>{let{a,b:i}=s,l=o;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=ai({inputs:{x:a},backend:l,attrs:{dtype:"complex64"}}),c=l.data.get(u.dataId),p=c.complexTensorInfos.real,d=c.complexTensorInfos.imag,f=l.data.get(p.dataId).values,h=l.data.get(d.dataId).values,m=ai({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(m.dataId),x=g.complexTensorInfos.real,y=g.complexTensorInfos.imag,b=l.data.get(x.dataId).values,A=l.data.get(y.dataId).values,[v,w,k]=n(a.shape,i.shape,f,h,b,A),I=l.makeTensorInfo(k,"float32",v),N=l.makeTensorInfo(k,"float32",w),T=Br({inputs:{real:I,imag:N},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(I),l.disposeIntermediateTensorInfo(N),T}else{let u=l.data.get(a.dataId).values,c=l.data.get(i.dataId).values,p=r||a.dtype,[d,f]=t(a.shape,i.shape,u,c,p);return l.makeTensorInfo(f,p,d)}}}function Qy(e){return(t,n,r,s,o,a)=>{let i=M.assertAndGetBroadcastShape(t,n),l=C.sizeFromShape(i),u=i.length,c=C.computeStrides(i),p=C.getTypedArrayFromDType("float32",l),d=C.getTypedArrayFromDType("float32",l),f=M.getBroadcastDims(t,i),h=M.getBroadcastDims(n,i),m=M.mergeRealAndImagArrays(r,s),g=M.mergeRealAndImagArrays(o,a),x=t.length,y=C.computeStrides(t),b=n.length,A=C.computeStrides(n);if(f.length+h.length===0)for(let v=0;vk[R]=0);let I=C.locToIndex(k,x,y),N=w.slice(-b);h.forEach(R=>N[R]=0);let T=C.locToIndex(N,b,A),_=e(m[I*2],m[I*2+1],g[T*2],g[T*2+1]);p[v]=_.real,d[v]=_.imag}return[p,d,i]}}var V6=Pt((e,t)=>e+t),JUe=Qy((e,t,n,r)=>({real:e+n,imag:t+r})),xc=Ht(Ri,V6,JUe),dJ={kernelName:Ri,backendName:"cpu",kernelFunc:xc};function e1(e,t,n,r,s){let o=C.sizeFromShape(r),a=C.makeZerosTypedArray(s,n);for(let i=0;i=s||(o>0?a[l]+=t[i]:a[l]+=1)}return a}function YC(e,t,n,r=!1){let s=e.shape[0],o=e.shape[1],a=et([s,n],t.dtype);for(let i=0;i=n||(r?a.set(1,i,u):t.size>0?a.set(a.get(i,u)+t.get(i,l),i,u):a.set(a.get(i,u)+1,i,u))}return a}function fo(e){return(t,n,r)=>{let s=C.getTypedArrayFromDType(n,t.length);for(let o=0;o{let{x:a}=r;if(Se(a,e),a.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=o,l=i.data.get(a.dataId).values,u=C.sizeFromShape(a.shape),c=n||a.dtype,p=C.getArrayFromDType(c,u);for(let d=0;d{let{x:a}=r;if(Se(a,e),a.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=o,l=i.data.get(a.dataId).values,u=n||a.dtype,c=t(l,u,s);return i.makeTensorInfo(a.shape,u,c)}}var W6=fo(e=>Math.ceil(e)),QUe=ii(iu,W6),fJ={kernelName:iu,backendName:"cpu",kernelFunc:QUe};function JC(e,t,n,r){let s=C.getArrayFromDType(n,C.sizeFromShape(t));if(r&&n!=="string"){let o=0;e.forEach(a=>{let i=C.sizeFromShape(a.shape);s.set(a.vals,o),o+=i})}else{let o=0;e.forEach(a=>{let i=n==="string"?M.fromUint8ToStringArray(a.vals):a.vals,l=0;for(let u=0;ue===t?1:0),U6=Ht(Ch,G6,null,"bool"),hJ={kernelName:Ch,backendName:"cpu",kernelFunc:U6};var j6=fo(e=>Math.exp(e)),H6=ii(hu,j6),mJ={kernelName:hu,backendName:"cpu",kernelFunc:H6};var q6=fo(e=>Math.expm1(e)),eje=ii(mu,q6),gJ={kernelName:mu,backendName:"cpu",kernelFunc:eje};var K6=fo(e=>Math.floor(e)),tje=ii(gu,K6),xJ={kernelName:gu,backendName:"cpu",kernelFunc:tje};function QC(e,t,n,r,s,o,a,i,l){let u=et([r,o],n);for(let c=0;c=l/o)throw new Error(`Invalid indices: ${p} does not index into ${i}`);for(let f=0;fe>t?1:0),nje=Ht(Sh,X6,null,"bool"),yJ={kernelName:Sh,backendName:"cpu",kernelFunc:nje};var Z6=Pt((e,t)=>e>=t?1:0),rje=Ht(yu,Z6,null,"bool"),bJ={kernelName:yu,backendName:"cpu",kernelFunc:rje};var Y6=Pt((e,t)=>ee<=t?1:0),oje=Ht(Th,J6,null,"bool"),vJ={kernelName:Th,backendName:"cpu",kernelFunc:oje};function tS(e,t,n){let r=(t-e)/(n-1),s=C.makeZerosTypedArray(n,"float32");s[0]=e;for(let o=1;oMath.log(e)),aje=ii(wu,Q6),wJ={kernelName:wu,backendName:"cpu",kernelFunc:aje};function nS(e,t,n,r){let s=C.getTypedArrayFromDType(r,C.sizeFromShape(n));for(let o=0;oi)&&(i=u)}s[o]=i}return s}var eF=Pt((e,t)=>Math.max(e,t)),ije=Ht(Iu,eF),kJ={kernelName:Iu,backendName:"cpu",kernelFunc:ije};var tF=Pt((e,t)=>Math.min(e,t)),lje=Ht(Cu,tF),IJ={kernelName:Cu,backendName:"cpu",kernelFunc:lje};var ev=Pt((e,t)=>e*t),uje=Qy((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),Om=Ht(Nu,ev,uje),CJ={kernelName:Nu,backendName:"cpu",kernelFunc:Om};function nF(e,t,n){let r=C.createScalarValue(-1,n);return ev([],t,r,e,n)}function cje(e){let{inputs:t,backend:n}=e,{x:r}=t;Se(r,"neg");let s=n.data.get(r.dataId).values,[o,a]=nF(s,r.shape,r.dtype);return n.makeTensorInfo(a,r.dtype,o)}var SJ={kernelName:zp,backendName:"cpu",kernelFunc:cje};var rF=Pt((e,t)=>e!==t?1:0),pje=Ht(Dh,rF,null,"bool"),NJ={kernelName:Dh,backendName:"cpu",kernelFunc:pje};function t1(e,t,n,r,s){let o=t.length,a=C.sizeFromShape(t),i=C.computeStrides(t),l=C.computeStrides(s),u=C.getTypedArrayFromDType(n,C.sizeFromShape(s));for(let c=0;cn.disposeIntermediateTensorInfo(y)),n.makeTensorInfo(x,g,h)}var _J={kernelName:qx,backendName:"cpu",kernelFunc:dje};function rS(e,t,n,r){let s=e===t,o=e1;if(s||o||a)return C.makeZerosTypedArray(0,r);let i=Math.abs(Math.ceil((t-e)/n)),l=C.makeZerosTypedArray(i,r);t1/Math.sqrt(e)),fje=ii($u,oF),EJ={kernelName:$u,backendName:"cpu",kernelFunc:fje};var RJ=fo(e=>1/(1+Math.exp(-e))),aF=pt(zu,e=>1/(1+Math.exp(-e))),DJ={kernelName:zu,backendName:"cpu",kernelFunc:aF};function iF(e,t,n,r,s){let o=Cs.isSliceContinous(r,t,n),a=C.sizeFromShape(n),i=C.computeStrides(r);if(o){let p=Cs.computeFlatOffset(t,i);return s==="string"?e.slice(p,p+a):e.subarray(p,p+a)}let l=s==="string"?M.fromUint8ToStringArray(e):e,u=et(r,s,l),c=et(n,s);for(let p=0;ph+t[m]);c.set(u.get(...f),...d)}return s==="string"?M.fromStringArrayToUint8(c.values):c.values}function li(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,size:a}=r;Se(s,"slice");let[i,l]=Cs.parseSliceParams(s,o,a);Cs.assertParamsValid(s,i,l);let u=n.data.get(s.dataId).values,c=iF(u,i,l,s.shape,s.dtype);return n.makeTensorInfo(l,s.dtype,c)}var $J={kernelName:Xp,backendName:"cpu",kernelFunc:li};function sS(e,t,n,r,s,o,a){let i=t[0],l=o[0],u=new Array(l),c=new Array(i),p=t[1];if(l===0){if(i!==0)throw new Error(`Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${i}`);let g=C.getArrayFromDType(n,0),x=C.getArrayFromDType(s,0);return[g,[0,p],x,u,c]}let d=!0,f=0,h=new Array(l).fill(0);for(let g=0;g=l)throw new Error(`indices(${g}, 0) is invalid: ${x} >= ${l}`);++h[x],d=d&&x>=f,f=x}let m=!0;for(let g=0;g0&&(h[g]+=h[g-1])}if(m&&d){let g=e,x=r;for(let y=0;y0){f[d-1]=1;for(let g=d-2;g>=0;--g)f[g]=f[g+1]*r[g+1]}let h=[];if(i>0){h[i-1]=1;for(let g=i-2;g>=0;--g)h[g]=h[g+1]*l[g+1]}let m=C.getArrayFromDType(n,a*i);for(let g=0;g0?s[i-1]+1:0;if(p<0)throw new Error("segment ids must be >= 0");let d=t.slice();d[0]=p;let f=d.reduce((b,A)=>b*A,1),h=C.getArrayFromDType(n,f);if(i===0)return p>0&&h.fill(a),[h,d];if(p<=0)throw new Error("segment ids must be >= 0");let m=0,g=1,x=0,y=s[m];for(;;){let b=0;if(g=b)throw new Error("segment ids are not increasing")}if(y<0||y>=p)throw new Error(`Segment id ${y} out of range [0, ${p}), possibly because segmentIds input is not sorted.`);y>x&&h.fill(a,x*u,y*u);for(let A=m;A=l[0])throw new Error(`Bad: indices[${A}] == ${r[A]} out of range [0, ${l[0]})`);for(let w=0;wi)break}return xMath.sqrt(e)),hje=pt(Bu,e=>Math.sqrt(e)),OJ={kernelName:Bu,backendName:"cpu",kernelFunc:hje};var lF=Pt((e,t)=>{let n=e-t;return n*n}),mje=Ht(Vu,lF),PJ={kernelName:Vu,backendName:"cpu",kernelFunc:mje};function aS(e,t,n,r){let s=et(e,t.dtype);for(let o=0;o0?0:i-l),f=0;f+=u*this.leftPad.length;for(let y=0;yy.forEach(b=>m[g++]=b);for(let y=0;y0){x(t[d+p-1]);for(let y=0;y0){let l=n[0];if(l!==0)throw new Error(`First split value must be 0, got ${l}`);for(let u=1;u=l;if(c=c&&n[u]<=r,!c)throw new Error(`Invalid split value ${n[u]}, must be in [${l}, ${r}]`);l=n[u]}if(l!==r)throw new Error(`Last split value must be data size. Expected ${r}, got ${l}`)}let o=s-1,a=C.getArrayFromDType("int32",s);if(r===0||s===0){let l=new Array(r);for(let u=0;u<=o;++u)a[u]=0;return[l,a]}a[0]=0;for(let l=1;l<=o;++l){let u=n[l]-n[l-1],c=0;this.nGramWidths.forEach(p=>{c+=this.getNumNGrams(u,p)}),this.preserveShort&&u>0&&c===0&&(c=1),a[l]=a[l-1]+c}let i=new Array(a[o]);for(let l=0;l{let d=n[l+1]-n[l],f=this.getNumNGrams(d,p);this.createNGrams(t,u,i,c,f,p),c+=f}),this.preserveShort&&c===a[l]){let p=n[l+1]-n[l];if(p===0)continue;let d=p+2*this.padWidth,f=1;this.createNGrams(t,u,i,c,f,d)}}return[i,a]}};function iS(e,t,n,r,s,o,a,i){return new MJ(n,r,s,o,a,i).compute(e,t)}function gje(e,t,n,r){if(!e.length)return;if(t.length===0){for(let o=0;oe-t),xje=Qy((e,t,n,r)=>({real:e-n,imag:t-r})),tv=Ht(Wu,uF,xje),zJ={kernelName:Wu,backendName:"cpu",kernelFunc:tv};function cS(e,t){let n=new Array(e.rank);for(let s=0;s{let n=t.value-e.value;return n===0?e.index-t.index:n};function LJ(e,t,n=0,r=e.length-1){for(;r>n;){if(r-n>600){let i=r-n+1,l=t-n+1,u=Math.log(i),c=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(l-i/2),d=Math.max(n,Math.floor(t-l*c/i+p)),f=Math.min(r,Math.floor(t+(i-l)*c/i+p));LJ(e,t,d,f)}let s=e[t],o=n,a=r;for(C.swap(e,n,t),nv(e[r],s)>0&&C.swap(e,n,r);o0;)a=a-1}nv(e[n],s)===0?C.swap(e,n,a):(a=a+1,C.swap(e,a,r)),a<=t&&(n=a+1),t<=a&&(r=a-1)}}function pS(e,t,n,r,s){let o=t[t.length-1],[a,i]=[e.length/o,o],l=C.getTypedArrayFromDType(n,a*r),u=C.getTypedArrayFromDType("int32",a*r);for(let p=0;ph[b]={value:y,index:b}),r{for(let g=0;gnew Yy,1);var pF=pt(du,e=>e>=0?e:Math.exp(e)-1),BJ={kernelName:du,backendName:"cpu",kernelFunc:pF};function dF(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:o}=r;Se([s],"leakyRelu");let a=C.sizeFromShape(s.shape),i=n.data.get(s.dataId).values,l=C.getTypedArrayFromDType("float32",a);for(let u=0;ue<0?t*e:e);function fF(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t;Se([r,s],"prelu");let o=n.data.get(r.dataId).values,a=n.data.get(s.dataId).values,[i,l]=yje(r.shape,s.shape,o,a,r.dtype);return n.makeTensorInfo(l,r.dtype,i)}var WJ={kernelName:Gp,backendName:"cpu",kernelFunc:fF};var hF=pt(Eu,e=>Math.max(0,e)),GJ={kernelName:Eu,backendName:"cpu",kernelFunc:hF};var mF=pt(Ru,e=>Math.min(Math.max(0,e),6)),UJ={kernelName:Ru,backendName:"cpu",kernelFunc:mF};function r1(e,t,n,r,s){if(n==="linear")return Es({inputs:{x:t},backend:e});if(n==="relu")return hF({inputs:{x:t},backend:e});if(n==="elu")return pF({inputs:{x:t},backend:e});if(n==="relu6")return mF({inputs:{x:t},backend:e});if(n==="prelu")return fF({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return dF({inputs:{x:t},backend:e,attrs:{alpha:s}});if(n==="sigmoid")return aF({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function Mt(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{shape:o}=r,a=C.sizeFromShape(s.shape),i=C.inferFromImplicitShape(o,a),l=C.sizeFromShape(i);C.assert(a===l,()=>`The new shape (${i}) has ${l} elements and the old shape (${s.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),n.incRef(s.dataId);let u=n.data.get(s.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,p=u.complexTensorInfos.imag;c.shape=i,p.shape=i}return{dataId:s.dataId,shape:i,dtype:s.dtype}}var jJ={kernelName:Up,backendName:"cpu",kernelFunc:Mt};function gF(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o}=t,{transposeA:a,transposeB:i}=r;Se([s,o],"matMul");let l=s.shape.length,u=o.shape.length,c=a?s.shape[l-2]:s.shape[l-1],p=i?o.shape[u-1]:o.shape[u-2],d=a?s.shape[l-1]:s.shape[l-2],f=i?o.shape[u-2]:o.shape[u-1],h=s.shape.slice(0,-2),m=o.shape.slice(0,-2),g=C.sizeFromShape(h),x=C.sizeFromShape(m),y=g===x||g===1||x===1;C.assert(l>=2&&u>=2&&y,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${h}) and (${m}).`);let A=(g>x?s.shape.slice(0,-2):o.shape.slice(0,-2)).concat([d,f]);C.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${s.shape} and ${o.shape} and transposeA=${a} and transposeB=${i} must match.`);let v=a?[g,c,d]:[g,d,c],w=i?[x,f,p]:[x,p,f],k=Mt({inputs:{x:s},backend:n,attrs:{shape:v}}),I=Mt({inputs:{x:o},backend:n,attrs:{shape:w}}),N=a?k.shape[1]:k.shape[2],T=a?k.shape[2]:k.shape[1],_=i?I.shape[1]:I.shape[2],R=Math.max(g,x),S=n.data.get(k.dataId).values,F=n.data.get(I.dataId).values,B=C.computeStrides(k.shape),W=C.computeStrides(I.shape),[q,K,J]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Q,ee,ue]=i?[1,W[1],W[0]]:[W[1],1,W[0]],re=T*_,de=et([R,T,_],k.dtype),fe=de.values,me=n.blockSize;for(let xe=0;xeMath.acos(e)),KJ={kernelName:eu,backendName:"cpu",kernelFunc:Aje};var vje=pt(tu,e=>Math.acosh(e)),XJ={kernelName:tu,backendName:"cpu",kernelFunc:vje};function wje(e){let{inputs:t,backend:n}=e,r=t;Se(t,"addN");let s=r.map(i=>n.data.get(i.dataId).values),o=et(r[0].shape,r[0].dtype),a=o.values;for(let i=0;iy&&(y=v,b=A)}f[g]=b}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(c,"int32",f)}var QJ={kernelName:fp,backendName:"cpu",kernelFunc:Cje};function Sje(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o}=r;Se(s,"argMin");let a=C.parseAxisParam(o,s.shape),i=M.getAxesPermutation(a,s.shape.length),l=s,u=[];i!=null&&(l=dr({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(l),a=M.getInnerMostAxes(a.length,l.shape.length)),a=[a[0]],M.assertAxesAreInnerMostDims("argMin",a,l.shape.length);let[c,p]=M.computeOutAndReduceShapes(l.shape,a),d=C.sizeFromShape(c),f=C.makeZerosTypedArray(d,"int32"),h=C.sizeFromShape(p),m=n.data.get(l.dataId).values;for(let g=0;gn.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(c,"int32",f)}var eQ={kernelName:hp,backendName:"cpu",kernelFunc:Sje};var Nje=pt(nu,e=>Math.asin(e)),tQ={kernelName:nu,backendName:"cpu",kernelFunc:Nje};var Tje=pt(ru,e=>Math.asinh(e)),nQ={kernelName:ru,backendName:"cpu",kernelFunc:Tje};var _je=pt(su,e=>Math.atan(e)),rQ={kernelName:su,backendName:"cpu",kernelFunc:_je};var Eje=Pt((e,t)=>Math.atan2(e,t)),Rje=Ht(au,Eje),sQ={kernelName:au,backendName:"cpu",kernelFunc:Rje};var Dje=pt(ou,e=>Math.atanh(e)),oQ={kernelName:ou,backendName:"cpu",kernelFunc:Dje};function s1(e,t,n,r,s,o){let a=s.strideHeight,i=s.strideWidth,l=s.dilationHeight,u=s.dilationWidth,c=s.effectiveFilterHeight,p=s.effectiveFilterWidth,d=s.padInfo.top,f=s.padInfo.left,h=o==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=et(s.outShape,n),g=m.values,x=s.outShape[1]*s.outShape[2]*s.outShape[3],y=s.outShape[2]*s.outShape[3],b=s.outShape[3];for(let A=0;Aq?q=fe:o==="avg"&&(K+=fe,J++)}if(isNaN(q))break}let Q=R+S*b+k;g[Q]=o==="avg"?K/J:q}}}return m}function fS(e,t,n,r,s=!1,o=!1){let a=et(r.outShape,"int32"),i=r.strideHeight,l=r.strideWidth,u=r.dilationHeight,c=r.dilationWidth,p=r.effectiveFilterHeight,d=r.effectiveFilterWidth,f=r.padInfo.top,h=r.padInfo.left,m=et(t,n,e);for(let g=0;gT&&(T=W,s?_=o?((g*r.inHeight+R)*r.inWidth+F)*r.inChannels+x:(R*r.inWidth+F)*r.inChannels+x:_=S*d+B)}}a.set(_,g,y,w,x)}}return a}function hS(e,t,n,r,s,o){let a=s.strideDepth,i=s.strideHeight,l=s.strideWidth,u=s.dilationDepth,c=s.dilationHeight,p=s.dilationWidth,d=s.effectiveFilterDepth,f=s.effectiveFilterHeight,h=s.effectiveFilterWidth,m=s.padInfo.front,g=s.padInfo.top,x=s.padInfo.left,y=o==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,b=et(s.outShape,n),A=b.values,v=s.outShape[1]*s.outShape[2]*s.outShape[3]*s.outShape[4],w=s.outShape[2]*s.outShape[3]*s.outShape[4],k=s.outShape[3]*s.outShape[4],I=s.outShape[4];for(let N=0;NNe?Ne=it:o==="avg"&&(_e+=it,Oe++),isNaN(Ne))break}if(isNaN(Ne))break}if(isNaN(Ne))break}let Ve=xe+R;A[Ve]=o==="avg"?_e/Oe:Ne}}}}return b}function aQ(e,t){let n=et(t.outShape,"int32"),r=t.strideDepth,s=t.strideHeight,o=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,p=t.effectiveFilterWidth,d=t.padInfo.front,f=t.padInfo.top,h=t.padInfo.left;for(let m=0;m=S&&(S=ee,F=W*c*p+K*c+Q)}}}n.set(F,m,x,v,N,g)}}}return n}function $je(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;Se(s,"avgPool");let{filterSize:o,strides:a,pad:i,dimRoundingMode:l}=r,u=1;C.assert(M.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=M.computePool2DInfo(s.shape,o,a,u,i,l),p;if(c.filterWidth===1&&c.filterHeight===1&&C.arraysEqual(c.inShape,c.outShape))p=Es({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,f=C.computeStrides(s.shape),h=s1(d,s.shape,s.dtype,f,c,"avg");p=n.makeTensorInfo(c.outShape,s.dtype,h.values)}return p}var iQ={kernelName:mp,backendName:"cpu",kernelFunc:$je};function Fje(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=r;Se(s,"avgPool3d");let c=M.computePool3DInfo(s.shape,o,a,1,i,l,u),p=n.data.get(s.dataId).values,d=hS(p,s.shape,s.dtype,C.computeStrides(s.shape),c,"avg");return n.makeTensorInfo(d.shape,"float32",d.values)}var lQ={kernelName:gp,backendName:"cpu",kernelFunc:Fje};function Oje(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=r;Se([s,o],"avgPool3DGrad");let c=M.computePool3DInfo(o.shape,a,i,1,l,u),p=c.strideDepth,d=c.strideHeight,f=c.strideWidth,h=c.filterDepth,m=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,y=c.dilationHeight,b=c.dilationWidth,A=c.effectiveFilterDepth,v=c.effectiveFilterHeight,w=c.effectiveFilterWidth,k=A-1-c.padInfo.front,I=w-1-c.padInfo.left,N=v-1-c.padInfo.top,T=et(o.shape,"float32"),_=1/(h*m*g),R=n.bufferSync(s);for(let S=0;S=c.outDepth||Math.floor(re)!==re))for(let de=0;de=c.outHeight||Math.floor(fe)!==fe))for(let me=0;me=c.outWidth||Math.floor(xe)!==xe)continue;ee+=R.get(S,re,fe,xe,F)}}}T.set(ee*_,S,B,W,q,F)}return n.makeTensorInfo(T.shape,T.dtype,T.values)}var uQ={kernelName:bx,backendName:"cpu",kernelFunc:Oje};function Pje(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o;Se([s,o],"avgPoolGrad");let{filterSize:i,strides:l,pad:u}=r,c=M.computePool2DInfo(a.shape,i,l,1,u),p=c.strideHeight,d=c.strideWidth,f=c.filterHeight,h=c.filterWidth,m=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,y=c.effectiveFilterWidth,b=y-1-c.padInfo.left,A=x-1-c.padInfo.top,v=et(a.shape,"float32"),w=1/(f*h),k=n.data.get(s.dataId).values,I=et(s.shape,"float32",k);for(let N=0;N=c.outHeight||Math.floor(q)!==q))for(let K=0;K=c.outWidth||Math.floor(J)!==J)continue;B+=I.get(N,q,J,T)}}v.set(B*w,N,_,R,T)}return n.makeTensorInfo(v.shape,v.dtype,v.values)}var cQ={kernelName:yx,backendName:"cpu",kernelFunc:Pje};function Mje(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,scale:o,offset:a,mean:i,variance:l}=t;C.assert(i.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),C.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),C.assert(o==null||i.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Se([s,i,l,o,a],"batchNorm");let{varianceEpsilon:u}=r;u==null&&(u=.001);let c=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values,d=n.data.get(l.dataId).values,f=o?n.data.get(o.dataId).values:new Float32Array([1]),h=a?n.data.get(a.dataId).values:new Float32Array([0]),m=new Float32Array(c.length),g=h.length,x=f.length,y=d.length,b=p.length,A=0,v=0,w=0,k=0;for(let I=0;I=g&&(A=0),v>=b&&(v=0),w>=x&&(w=0),k>=y&&(k=0);return n.makeTensorInfo(s.shape,s.dtype,m)}var pQ={kernelName:Tp,backendName:"cpu",kernelFunc:Mje};function zje(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,crops:a}=r;Se([s],"batchToSpaceND");let i=o.reduce((x,y)=>x*y),l=M.getReshaped(s.shape,o,i),u=M.getPermuted(l.length,o.length),c=M.getReshapedPermuted(s.shape,o,i),p=M.getSliceBeginCoords(a,o.length),d=M.getSliceSize(c,a,o.length),f=Mt({inputs:{x:s},backend:n,attrs:{shape:l}}),h=dr({inputs:{x:f},backend:n,attrs:{perm:u}}),m=Mt({inputs:{x:h},backend:n,attrs:{shape:c}}),g=li({inputs:{x:m},backend:n,attrs:{begin:p,size:d}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),g}var dQ={kernelName:yp,backendName:"cpu",kernelFunc:zje};function Lje(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:o}=t,{size:a}=r,i=n.data.get(s.dataId).values,l=n.data.get(o.dataId).values,u=e1(i,l,o.dtype,o.shape,a);return n.makeTensorInfo([a],o.dtype,u)}var fQ={kernelName:Ax,backendName:"cpu",kernelFunc:Lje};function Bje(e){let{inputs:t,backend:n}=e,{s0:r,s1:s}=t,o=n.data.get(r.dataId).values,a=n.data.get(s.dataId).values,i=M.assertAndGetBroadcastShape(Array.from(o),Array.from(a));return n.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var hQ={kernelName:f3,backendName:"cpu",kernelFunc:Bje};var Vje=pt(lu,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(C.sizeFromShape(t.shape)),s=n.data.get(t.dataId),o=s.complexTensorInfos.real,a=s.complexTensorInfos.imag,i=n.data.get(o.dataId).values,l=n.data.get(a.dataId).values;for(let u=0;um.shape),o);if(C.sizeFromShape(a)===0)return n.makeTensorInfo(a,t[0].dtype,[]);let i=t.filter(m=>C.sizeFromShape(m.shape)>0);if(i.length===1)return Es({inputs:{x:i[0]},backend:n});let l=i.map(m=>m.shape);if(M.assertParamsConsistent(l,o),i[0].dtype==="complex64"){let m=i.map(A=>oi({inputs:{input:A},backend:n})),g=i.map(A=>_l({inputs:{input:A},backend:n})),x=wd({inputs:m,backend:n,attrs:{axis:o}}),y=wd({inputs:g,backend:n,attrs:{axis:o}}),b=Br({inputs:{real:x,imag:y},backend:n});return m.forEach(A=>n.disposeIntermediateTensorInfo(A)),g.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.disposeIntermediateTensorInfo(x),n.disposeIntermediateTensorInfo(y),b}let u=i.map(m=>{let g=C.sizeFromShape(m.shape.slice(o));return Mt({inputs:{x:m},backend:n,attrs:{shape:[-1,g]}})}),c=u.map(m=>({vals:n.data.get(m.dataId).values,shape:m.shape}));a=M.computeOutShape(u.map(m=>m.shape),1);let p=u[0].shape[0]===1,d=JC(c,a,t[0].dtype,p),f=M.computeOutShape(i.map(m=>m.shape),o),h=n.makeTensorInfo(f,t[0].dtype,d);return u.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var yQ={kernelName:Ap,backendName:"cpu",kernelFunc:wd};function xF(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dataFormat:l,dilations:u,dimRoundingMode:c}=r;Se([s,o],"conv2d");let p=M.convertConv2DDataFormat(l),d=M.computeConv2DInfo(s.shape,o.shape,a,u,i,c,!1,p),f=d.filterHeight,h=d.filterWidth,m=d.dilationHeight,g=d.dilationWidth,x=d.padInfo.left,y=d.padInfo.top,b=d.dataFormat==="channelsLast",A=new sn(d.outShape,s.dtype),v=C.computeStrides(s.shape),w=C.computeStrides(o.shape),k=v[0],I=b?v[1]:v[2],N=b?v[2]:1,T=b?1:v[1],_=A.strides[0],R=b?A.strides[1]:A.strides[2],S=b?A.strides[2]:1,F=b?1:A.strides[1],B=n.data.get(s.dataId).values,W=n.data.get(o.dataId).values,q=A.values;for(let K=0;K=d.inHeight)continue;let me=de*w[0],xe=J+fe*I;for(let Ne=0;Ne=d.inWidth)continue;let At=me+Ve*w[1],ft=xe+He*N,dt=At;for(let ct=0;ct=u.inDepth)continue;let K=W*N[0],J=_+q*I[1];for(let Q=0;Q=u.inHeight)continue;let fe=K+re*N[1],me=J+de*I[2];for(let xe=0;xe=u.inWidth)continue;let He=fe+Oe*N[2],At=me+Ve*u.inChannels,ft=He;for(let dt=0;dtMath.cos(e)),CQ={kernelName:uu,backendName:"cpu",kernelFunc:Kje};var Xje=pt(cu,e=>Math.cosh(e)),SQ={kernelName:cu,backendName:"cpu",kernelFunc:Xje};function Zje(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:o,boxInd:a}=t,{cropSize:i,method:l,extrapolationValue:u}=r,[c,p,d,f]=s.shape,h=o.shape[0],[m,g]=i,x=et([h,m,g,f],"float32"),y=n.data.get(o.dataId).values,b=n.data.get(a.dataId).values,A=n.data.get(s.dataId).values,v=C.computeStrides(s.shape),w=C.computeStrides(x.shape);for(let k=0;k=c)continue;let F=m>1?(_-N)*(p-1)/(m-1):0,B=g>1?(R-T)*(d-1)/(g-1):0;for(let W=0;W1?N*(p-1)+W*F:.5*(N+_)*(p-1);if(q<0||q>p-1){for(let K=0;K1?T*(d-1)+ee*B:.5*(T+R)*(d-1);if(ue<0||ue>d-1){for(let me=0;me1?T*(d-1)+K*B:.5*(T+R)*(d-1);if(J<0||J>d-1){for(let ue=0;uex+h-y-1:(x,y)=>x+y;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`),C.assert(o>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${o}`);let i=s.shape[0],l=s.shape[1],u=s.shape[2],c=s.shape[3],p=l*o,d=u*o,f=c/(o*o),h=n.data.get(s.dataId).values,m=new Float32Array(i*p*d*f),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${d}'`);let f=M.computeConv2DInfo(s.shape,o.shape,a,d,i,u,!0),{filterHeight:h,filterWidth:m,dilationHeight:g,dilationWidth:x,padInfo:y}=f,b=y.left,A=y.top,v=f.outChannels/f.inChannels,w=new sn(f.outShape,s.dtype),k=n.data.get(s.dataId).values,I=n.data.get(o.dataId).values,N=w.values;for(let T=0;T=f.inHeight)continue;let K=W*p[0],J=_+q*c[1];for(let Q=0;Q=f.inWidth)continue;let fe=K+re*p[1],me=J+de*f.inChannels,xe=ee,Ne=fe;for(let _e=0;_e{let{x:r,filter:s}=e,{strides:o,pad:a,dilations:i}=n,l=t,u=l.data.get(r.dataId).values,c=r.shape.length,p=l.data.get(s.dataId).values,d=s.shape.length,{batchSize:f,inHeight:h,inWidth:m,inChannels:g,outHeight:x,outWidth:y,padInfo:b,strideHeight:A,strideWidth:v,filterHeight:w,filterWidth:k,dilationHeight:I,dilationWidth:N,outShape:T}=M.computeDilation2DInfo(r.shape,s.shape,o,a,"NHWC",i),_=C.sizeFromShape(T),R=T.length,S=C.getArrayFromDType(r.dtype,_);for(let B=0;B=0&&de=0&&meee&&(ee=_e)}}}let ue=C.locToIndex([B,W,K,Q],R,C.computeStrides(T));S[ue]=ee}}}return{dataId:l.write(C.toTypedArray(S,r.dtype),T,r.dtype),shape:T,dtype:r.dtype}}};var PQ={kernelName:TA,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:o}=e,{strides:a,pad:i,dilations:l}=n,u=t,c=C.toNestedArray(r.shape,u.data.get(r.dataId).values),p=C.toNestedArray(s.shape,u.data.get(s.dataId).values),{batchSize:d,inHeight:f,inWidth:h,inChannels:m,outHeight:g,outWidth:x,padInfo:y,strideHeight:b,strideWidth:A,filterHeight:v,filterWidth:w,dilationHeight:k,dilationWidth:I,outShape:N}=M.computeDilation2DInfo(r.shape,s.shape,a,i,"NHWC",l);C.assert(o.rank===N.length,()=>`Error in ${TA}, dy must have the same rank as output ${N.length}, but got ${o.rank}`);let T=C.toNestedArray(N,u.data.get(o.dataId).values),_=C.makeZerosNestedTypedArray(s.shape,s.dtype);for(let S=0;S=0&&re=0&&feJ&&(J=me,Q=ue,ee=de)}}}_[Q][ee][K]+=T[S][F][W][K]}}}return{dataId:u.write(C.toTypedArray(_,r.dtype),s.shape,s.dtype),shape:s.shape,dtype:s.dtype}}};var MQ={kernelName:NA,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:o}=e,{strides:a,pad:i,dilations:l}=n,u=t,c=C.toNestedArray(r.shape,u.data.get(r.dataId).values),p=C.toNestedArray(s.shape,u.data.get(s.dataId).values),{batchSize:d,inHeight:f,inWidth:h,inChannels:m,outHeight:g,outWidth:x,padInfo:y,strideHeight:b,strideWidth:A,filterHeight:v,filterWidth:w,dilationHeight:k,dilationWidth:I,outShape:N}=M.computeDilation2DInfo(r.shape,s.shape,a,i,"NHWC",l);C.assert(o.rank===N.length,()=>`Error in ${NA}, dy must have the same rank as output ${N.length}, but got ${o.rank}`);let T=C.toNestedArray(N,u.data.get(o.dataId).values),_=C.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S=0&&re=0&&feJ&&(J=me,Q=re,ee=fe)}}}_[S][Q][ee][K]+=T[S][F][W][K]}}}return{dataId:u.write(C.toTypedArray(_,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function yc(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r;Se(s,"sum");let i;s.dtype==="bool"?i=ai({inputs:{x:s},backend:n,attrs:{dtype:"int32"}}):i=Es({inputs:{x:s},backend:n});let l=i.shape.length,u=C.parseAxisParam(o,i.shape),c=M.getAxesPermutation(u,l),p=u,d=i;c!=null&&(d=dr({inputs:{x:i},backend:n,attrs:{perm:c}}),p=M.getInnerMostAxes(p.length,l)),M.assertAxesAreInnerMostDims("sum",p,d.shape.length);let[f,h]=M.computeOutAndReduceShapes(d.shape,p),m=M.upcastType(d.dtype,"int32"),g=Jy(n,f,m),x=C.sizeFromShape(h),y=n.data.get(g.dataId).values,b=n.data.get(d.dataId).values;for(let A=0;A=0&&(d=yc({inputs:{x:d},backend:n,attrs:{axis:u[m]-(a.length-f),keepDims:!1}}),h.push(d)),f--)}for(let m of h)m!==d&&n.disposeIntermediateTensorInfo(m);return d}var LQ={kernelName:Ex,backendName:"cpu",kernelFunc:rHe};function sHe(e){let{inputs:t,backend:n}=e,{dy:r,y:s}=t;Se([r,s],"eluGrad");let o=new Float32Array(C.sizeFromShape(s.shape)),a=n.data.get(s.dataId).values,i=n.data.get(r.dataId).values;for(let l=0;l=1?o[l]=i[l]:o[l]=i[l]*(u+1)}return n.makeTensorInfo(s.shape,"float32",o)}var BQ={kernelName:Rx,backendName:"cpu",kernelFunc:sHe};var oHe=M.ERF_P,aHe=M.ERF_A1,iHe=M.ERF_A2,lHe=M.ERF_A3,uHe=M.ERF_A4,cHe=M.ERF_A5,pHe=pt(fu,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+oHe*n);return t*(1-((((cHe*r+uHe)*r+lHe)*r+iHe)*r+aHe)*r*Math.exp(-n*n))}),VQ={kernelName:fu,backendName:"cpu",kernelFunc:pHe};function o1(e){let{inputs:t,backend:n,attrs:r}=e,{input:s}=t,{dim:o}=r,a=s.shape.length,i=s.shape.slice(),l=o;return o<0&&(C.assert(-(a+1)<=o,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+o+1),i.splice(l,0,1),Mt({inputs:{x:s},backend:n,attrs:{shape:i}})}var WQ={kernelName:Np,backendName:"cpu",kernelFunc:o1};var dHe=Pt((e,t)=>e/t),rv=Ht(pu,dHe),sv={kernelName:pu,backendName:"cpu",kernelFunc:rv};function mS(e,t,n){let r=e.shape,s=r[0],o=r[1],a=n.data.get(e.dataId),i=a.complexTensorInfos.real,l=a.complexTensorInfos.imag,u=[s,o],c=C.sizeFromShape(u),p=C.getTypedArrayFromDType("float32",c),d=C.getTypedArrayFromDType("float32",c);for(let g=0;g{let{image:r}=e,s=n,o=C.getTypedArrayFromDType(r.dtype,C.sizeFromShape(r.shape)),[a,i,l,u]=r.shape,c=s.data.get(r.dataId).values;for(let d=0;d=0&&bMath.floor(e/t)),bHe=Ht(xu,yHe,null,"int32"),HQ={kernelName:xu,backendName:"cpu",kernelFunc:bHe};function AHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=r,m=xF({inputs:{x:s,filter:o},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d}});if(a){let g=m;m=xc({inputs:{a:m,b:a},backend:n}),n.disposeIntermediateTensorInfo(g)}if(f){let g=m;m=r1(n,m,f,i,h),n.disposeIntermediateTensorInfo(g)}return m}var qQ={kernelName:Fh,backendName:"cpu",kernelFunc:AHe};function vHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=r,m=yF({inputs:{x:s,filter:o},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d}});if(a){let g=m;m=xc({inputs:{a:m,b:a},backend:n}),n.disposeIntermediateTensorInfo(g)}if(f){let g=m;m=r1(n,m,f,i,h),n.disposeIntermediateTensorInfo(g)}return m}var KQ={kernelName:Oh,backendName:"cpu",kernelFunc:vHe};function wHe(e){let{inputs:t,backend:n}=e,{params:r,indices:s}=t,o=C.sizeFromShape(r.shape),a=s.shape,i=a[a.length-1],[l,u,c,p]=M.prepareAndValidate(r,s);if(u===0)return n.makeTensorInfo(l,r.dtype,[]);let d=n.data.get(s.dataId).values,f=n.bufferSync(r),h=QC(d,f,r.dtype,u,i,c,p,r.shape,o);return n.makeTensorInfo(l,r.dtype,h.values)}var XQ={kernelName:Ox,backendName:"cpu",kernelFunc:wHe};function kHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,indices:o}=t,{axis:a,batchDims:i}=r;Se([s,o],"gatherV2");let l=i;i==null&&(l=0);let u=C.sizeFromShape(o.shape),c=C.parseAxisParam(a,s.shape)[0],p=M.segment_util.collectGatherOpShapeInfo(s,o,c,l),d=Mt({inputs:{x:s},backend:n,attrs:{shape:[p.batchSize,p.outerSize,p.dimSize,p.sliceSize]}}),f=Mt({inputs:{x:o},backend:n,attrs:{shape:[p.batchSize,u/p.batchSize]}}),h=[p.batchSize,p.outerSize,u/p.batchSize,p.sliceSize],m=n.bufferSync(f),g=n.bufferSync(d),x=eS(g,m,h);return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),n.makeTensorInfo(p.outputShape,x.dtype,x.values)}var ZQ={kernelName:_p,backendName:"cpu",kernelFunc:kHe};function IHe(e){let{inputs:t,backend:n}=e,{input:r}=t,s=C.sizeFromShape(r.shape),o=r.shape[r.shape.length-1],a=s/o,i=Mt({inputs:{x:r},backend:n,attrs:{shape:[a,o]}}),l=mS(i,!0,n),u=Mt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var YQ={kernelName:Px,backendName:"cpu",kernelFunc:IHe};var CHe=pt(bu,e=>Number.isFinite(e)?1:0,"bool"),JQ={kernelName:bu,backendName:"cpu",kernelFunc:CHe};var SHe=pt(Au,e=>Math.abs(e)===1/0?1:0,"bool"),QQ={kernelName:Au,backendName:"cpu",kernelFunc:SHe};var NHe=pt(vu,e=>Number.isNaN(e)?1:0,"bool"),eee={kernelName:vu,backendName:"cpu",kernelFunc:NHe};function THe(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:o}=n,a=tS(r,s,o);return t.makeTensorInfo([a.length],"float32",a)}var tee={kernelName:zx,backendName:"cpu",kernelFunc:THe};var _He=pt(ku,e=>Math.log1p(e)),nee={kernelName:ku,backendName:"cpu",kernelFunc:_He};var EHe=Pt((e,t)=>e&&t),RHe=Ht(_h,EHe,null,"bool"),ree={kernelName:_h,backendName:"cpu",kernelFunc:RHe};var DHe=pt(Eh,e=>e?0:1,"bool"),see={kernelName:Eh,backendName:"cpu",kernelFunc:DHe};var $He=Pt((e,t)=>e||t),FHe=Ht(Rh,$He,null,"bool"),oee={kernelName:Rh,backendName:"cpu",kernelFunc:FHe};function OHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:o,bias:a,alpha:i,beta:l}=r;Se(s,"LRN");let u=s.shape[3],c=u-1,p=n.data.get(s.dataId).values,d=C.sizeFromShape(s.shape),f=new Float32Array(d);function h(m){let g=m%u,x=m-g+Math.max(0,g-o),y=m-g+Math.min(g+o,c),b=0;for(;x<=y;x++){let A=p[x];b+=A*A}return b}for(let m=0;m`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=M.computePool2DInfo(s.shape,o,a,u,i,l),p;if(c.filterWidth===1&&c.filterHeight===1&&C.arraysEqual(c.inShape,c.outShape))p=Es({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,f=C.computeStrides(s.shape),h=s1(d,s.shape,s.dtype,f,c,"max");p=n.makeTensorInfo(c.outShape,s.dtype,h.values)}return p}var uee={kernelName:$p,backendName:"cpu",kernelFunc:MHe};function zHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=r;Se(s,"maxPool3d");let c=M.computePool3DInfo(s.shape,o,a,1,i,l,u),p=n.data.get(s.dataId).values,d=hS(p,s.shape,s.dtype,C.computeStrides(s.shape),c,"max");return n.makeTensorInfo(d.shape,"float32",d.values)}var cee={kernelName:Fp,backendName:"cpu",kernelFunc:zHe};function LHe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=r;Se([s,o],"maxPool3DGrad");let c=M.computePool3DInfo(o.shape,a,i,1,l,u),p=n.bufferSync(o),d=aQ(p,c),f=c.strideDepth,h=c.strideHeight,m=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,y=c.dilationWidth,b=c.effectiveFilterDepth,A=c.effectiveFilterHeight,v=c.effectiveFilterWidth,w=b-1-c.padInfo.front,k=v-1-c.padInfo.left,I=A-1-c.padInfo.top,N=et(o.shape,"float32"),T=n.bufferSync(s);for(let _=0;_=c.outDepth||Math.floor(ee)!==ee))for(let ue=0;ue=c.outHeight||Math.floor(re)!==re))for(let de=0;de=c.outWidth||Math.floor(fe)!==fe)continue;let me=b*A*v-1-d.get(_,ee,re,fe,R),xe=Q*A*v+ue*v+de,Ne=me===xe?1:0;if(Ne===0)continue;J+=T.get(_,ee,re,fe,R)*Ne}}}N.set(J,_,S,F,B,R)}return n.makeTensorInfo(N.shape,N.dtype,N.values)}var pee={kernelName:Vx,backendName:"cpu",kernelFunc:LHe};function BHe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o,output:a}=t,i=o;Se([o,a],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:p}=r,d=M.computePool2DInfo(i.shape,l,u,1,c,p),f=n.data.get(i.dataId).values,h=et(d.outShape,i.dtype,fS(f,i.shape,i.dtype,d).values),m=d.strideHeight,g=d.strideWidth,x=d.dilationHeight,y=d.dilationWidth,b=d.effectiveFilterHeight,A=d.effectiveFilterWidth,v=A-1-d.padInfo.left,w=b-1-d.padInfo.top,k=et(i.shape,"float32"),I=n.data.get(s.dataId).values,N=et(s.shape,"float32",I);for(let T=0;T=d.outHeight||Math.floor(K)!==K))for(let J=0;J=d.outWidth||Math.floor(Q)!==Q)continue;let ee=b*A-1-h.get(T,K,Q,_),ue=q*A+J,re=ee===ue?1:0;if(re===0)continue;W+=N.get(T,K,Q,_)*re}}k.set(W,T,R,S,_)}return n.makeTensorInfo(k.shape,k.dtype,k.values)}var dee={kernelName:Bx,backendName:"cpu",kernelFunc:BHe};function fee(e,t,n,r,s){let o=C.computeStrides(t),a=s1(e,t,n,o,s,"max"),i=fS(e,t,n,s,!0,r);return[a.values,i.values]}var hee={kernelName:Wx,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:o,pad:a,includeBatchInIndex:i}=t,l=n;Se(r,"MaxPoolWithArgmax");let u=l.data.get(r.dataId).values,c=M.computePool2DInfo(r.shape,s,o,[1,1],a),[p,d]=fee(u,r.shape,r.dtype,i,c),f=l.write(p,c.outShape,r.dtype),h=l.write(d,c.outShape,r.dtype);return[{dataId:f,shape:c.outShape,dtype:r.dtype},{dataId:h,shape:c.outShape,dtype:"int32"}]}};function VHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=C.parseAxisParam(o,s.shape),u=M.computeOutAndReduceShapes(s.shape,i)[1],c=C.sizeFromShape(u),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([c]));p.push(d);let f=ai({inputs:{x:s},backend:n,attrs:{dtype:"float32"}});p.push(f);let h=rv({inputs:{a:f,b:d},backend:n});p.push(h);let m=yc({inputs:{x:h},backend:n,attrs:{axis:o,keepDims:a}});return p.forEach(g=>n.disposeIntermediateTensorInfo(g)),m}var mee={kernelName:Op,backendName:"cpu",kernelFunc:VHe};function WHe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r;Se(s,"min");let i=C.parseAxisParam(o,s.shape),l=i,u=M.getAxesPermutation(l,s.shape.length),c=s;u!=null&&(c=dr({inputs:{x:s},backend:n,attrs:{perm:u}}),l=M.getInnerMostAxes(l.length,s.shape.length)),M.assertAxesAreInnerMostDims("min",l,c.shape.length);let[p,d]=M.computeOutAndReduceShapes(c.shape,l),f=C.sizeFromShape(d),h=C.makeZerosTypedArray(C.sizeFromShape(p),c.dtype),m=n.data.get(c.dataId).values;for(let x=0;xb[0]+s.shape[A]+b[1]),l=o.map(b=>b[0]),u=o.map((b,A)=>b[0]+s.shape[A]),c=a==="reflect"?0:1,p=n.data.get(s.dataId).values,d=s.shape.length,f=C.computeStrides(s.shape),h=C.sizeFromShape(i),m=i.length,g=C.computeStrides(i),x=C.getTypedArrayFromDType(s.dtype,h);for(let b=0;b=u[w]&&(A[w]=(u[w]-1)*2-A[w]+c);A=A.map((w,k)=>w-l[k]);let v=C.locToIndex(A,d,f);x[b]=p[v]}return{dataId:n.write(x,i,s.dtype),shape:i,dtype:s.dtype}}var xee={kernelName:Mp,backendName:"cpu",kernelFunc:GHe};var UHe=Pt((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),jHe=Ht(Su,UHe),yee={kernelName:Su,backendName:"cpu",kernelFunc:jHe};var Aee=T1(GD());function vF(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:o}=r,a=s.shape.length,i=o;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let l=C.parseAxisParam([i],s.shape),u=AF({inputs:{x:s},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),c=M.expandShapeToKeepDim(u.shape,l),p=Mt({inputs:{x:u},backend:n,attrs:{shape:c}}),d=tv({inputs:{a:s,b:p},backend:n}),f=H6({inputs:{x:d},backend:n}),h=yc({inputs:{x:f},backend:n,attrs:{axis:l,keepDims:!1}}),m=Mt({inputs:{x:h},backend:n,attrs:{shape:c}}),g=rv({inputs:{a:f,b:m},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),g}var bee={kernelName:Qp,backendName:"cpu",kernelFunc:vF};function HHe(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:o,seed:a,normalized:i}=r;Se(s,"multinomial");let l=i?s:vF({inputs:{logits:s},backend:n,attrs:{dim:-1}}),u=l.shape[0],c=l.shape[1],p=n.data.get(l.dataId).values,d=[u,o],f=C.makeZerosTypedArray(C.sizeFromShape(d),"int32");for(let h=0;h=0&&c[p]{C.assertShapesMatch(o,c.shape,"All tensors passed to stack must have matching shapes"),C.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=t.map(c=>{let p=o1({inputs:{input:c},backend:n,attrs:{dim:s}});return i.push(p),p}),u=wd({inputs:l,backend:n,attrs:{axis:s}});return i.forEach(c=>n.disposeIntermediateTensorInfo(c)),u}var _ee={kernelName:Vp,backendName:"cpu",kernelFunc:wF};function eqe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:o,constantValue:a}=r;Se(s,"pad");let i=o.map((y,b)=>y[0]+s.shape[b]+y[1]),l=o.map(y=>y[0]),u=n.data.get(s.dataId).values,c=C.sizeFromShape(s.shape),p=s.shape.length,d=C.computeStrides(s.shape),f=C.sizeFromShape(i),h=i.length,m=C.computeStrides(i),g=C.getTypedArrayFromDType(s.dtype,f);a!==0&&g.fill(a);for(let y=0;yw+l[k]),v=C.locToIndex(A,h,m);g[v]=u[y]}return{dataId:n.write(g,i,s.dtype),shape:i,dtype:s.dtype}}var gS={kernelName:Wp,backendName:"cpu",kernelFunc:eqe};var tqe=Pt((e,t)=>Math.pow(e,t)),nqe=Ht(Tu,tqe),Eee={kernelName:Tu,backendName:"cpu",kernelFunc:nqe};function rqe(e){let{backend:t,attrs:n}=e,{start:r,stop:s,dtype:o,step:a}=n,i=rS(r,s,a,o);return t.makeTensorInfo([i.length],o,i)}var Ree={kernelName:Kx,backendName:"cpu",kernelFunc:rqe};var sqe=pt(_u,e=>1/e),Dee={kernelName:_u,backendName:"cpu",kernelFunc:sqe};function oqe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:o,halfPixelCenters:a,size:i}=r;Se(s,"resizeBilinear");let l=C.computeStrides(s.shape),[u,c]=i,[p,d,f,h]=s.shape,m=n.data.get(s.dataId).values,g=new Float32Array(C.sizeFromShape([p,u,c,h])),x=[o&&u>1?d-1:d,o&&c>1?f-1:f],y=[o&&u>1?u-1:u,o&&c>1?c-1:c],b=0,A=x[0]/y[0],v=x[1]/y[1];for(let w=0;w1?u-1:u,a&&f>1?c-1:c],g=[a&&d>1?d-1:d,a&&f>1?f-1:f],x=m[0]/g[0],y=m[1]/g[1],b=n.data.get(o.dataId).values,A=0;for(let v=0;v1?d-1:d,o&&c>1?f-1:f],y=[o&&u>1?u-1:u,o&&c>1?c-1:c],b=x[0]/y[0],A=x[1]/y[1],v=0;for(let w=0;w1?c-1:c,a&&h>1?p-1:p],y=[a&&f>1?f-1:f,a&&h>1?h-1:h],b=x[0]/y[0],A=x[1]/y[1],v=1/b,w=1/A,k=Math.ceil(v)*2+2,I=Math.ceil(w)*2+2;for(let N=0;N=f)continue;let re=T+ue*l[1],de=ue*b,fe=Math.min(c-1,a?Math.round(de):Math.floor(de));if(_===fe)for(let me=0;me=h)continue;let Ne=re+xe*l[2],_e=xe*A,Oe=Math.min(p-1,a?Math.round(_e):Math.floor(_e));B===Oe&&(Q+=g[Ne+J])}}m[W+J]=Q}}}}return n.makeTensorInfo(s.shape,s.dtype,m)}var Pee={kernelName:Zx,backendName:"cpu",kernelFunc:lqe};function uqe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:o}=r;Se(s,"reverse");let a=s.shape.length,i=C.parseAxisParam(o,s.shape);if(a===0)return Es({inputs:{x:s},backend:n});let l=new sn(s.shape,s.dtype),u=n.bufferSync(s);for(let c=0;cd[f]=s.shape[f]-1-d[f]),l.set(u.get(...d),...p)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var Mee={kernelName:qp,backendName:"cpu",kernelFunc:uqe};var zee={kernelName:dy,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:o,center:a}=t,i=n,l=C.getTypedArrayFromDType(r.dtype,C.sizeFromShape(r.shape)),[u,c,p,d]=r.shape,[f,h]=M.getImageCenter(a,c,p),m=255,g=Math.sin(s),x=Math.cos(s),y=i.data.get(r.dataId).values;for(let A=0;A=0&&F=0&&B{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1}),Lee={kernelName:Du,backendName:"cpu",kernelFunc:cqe};function xS(e,t,n,r,s,o,a,i,l,u){let c=[r/s,s],p=e.values,d=t.values;if(r===0)return et(n,t.dtype);let f=et(c,t.dtype);f.values.fill(l);for(let h=0;h=r/s)throw new Error(`Invalid indices: ${m} does not index into ${n}`);for(let x=0;x1||s.shape.length===1?1:C.sizeFromShape(s.shape.slice(1));for(let h=0;he>=0?hqe*e:fqe*(Math.exp(e)-1)),Wee={kernelName:Fu,backendName:"cpu",kernelFunc:mqe};var gqe=pt(Mu,e=>e<0?-1:e>0?1:0),Gee={kernelName:Mu,backendName:"cpu",kernelFunc:gqe};var xqe=pt(Ou,e=>Math.sin(e)),Uee={kernelName:Ou,backendName:"cpu",kernelFunc:xqe};var yqe=pt(Pu,e=>Math.sinh(e)),jee={kernelName:Pu,backendName:"cpu",kernelFunc:yqe};var bqe=11920928955078125e-23,Hee=Math.log(bqe)+2,Aqe=pt(Lu,e=>{let t=e>-Hee,n=eNumber(g)))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}var Xee={kernelName:Qx,backendName:"cpu",kernelFunc:wqe};function kqe(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:s,newShape:o}=t;if(r.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${o.shape}`);let a=Array.from(n.data.get(s.dataId).values),i=n.data.get(r.dataId).values,l=Array.from(n.data.get(o.dataId).values),[u,c,p]=oS(i,r.shape,r.dtype,a,l);return[n.makeTensorInfo(c,r.dtype,u),n.makeTensorInfo([p.length],o.dtype,new Int32Array(p))]}var Zee={kernelName:ey,backendName:"cpu",kernelFunc:kqe};function Iqe(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,l=n.data.get(o.dataId).values,[u,c]=n1(a,r.shape,r.dtype,i,l,!0);return n.makeTensorInfo(c,r.dtype,u)}var Yee={kernelName:ty,backendName:"cpu",kernelFunc:Iqe};function Cqe(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,l=n.data.get(o.dataId).values,[u,c]=n1(a,r.shape,r.dtype,i,l);return n.makeTensorInfo(c,r.dtype,u)}var Jee={kernelName:ny,backendName:"cpu",kernelFunc:Cqe};function Sqe(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:o,defaultValue:a}=t,{outputShape:i}=r,{sliceRank:l,numUpdates:u,sliceSize:c,strides:p,outputSize:d}=M.calculateShapes(o,s,i),f=!1,h=n.bufferSync(s),m=n.bufferSync(o),g=n.data.get(a.dataId).values[0],x=xS(h,m,i,d,c,u,l,p,g,f);return n.makeTensorInfo(i,x.dtype,x.values)}var Qee={kernelName:ry,backendName:"cpu",kernelFunc:Sqe};function Nqe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:o,axis:a}=r,i=C.parseAxisParam(a,s.shape)[0],l=M.prepareSplitSize(s,o,i),u=new Array(s.shape.length).fill(0),c=s.shape.slice();return l.map(p=>{let d=[...c];d[i]=p;let f=li({inputs:{x:s},backend:n,attrs:{begin:u,size:d}});return u[i]+=p,f})}var ete={kernelName:Jp,backendName:"cpu",kernelFunc:Nqe};var tte={kernelName:sy,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;Se(n,"square");let s=r.data.get(n.dataId).values,o=new Float32Array(s.length);for(let i=0;i{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),nte={kernelName:ju,backendName:"cpu",kernelFunc:Tqe};function _qe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,end:a,strides:i,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:d}=r;Se(s,"stridedSlice");let{nonStrided:f,$begin:h,$strides:m,size:g,newShape:x,outShape:y}=Cs.sliceInfo(s.shape,o,a,i,l,u,c,p,d),b=Mt({inputs:{x:s},backend:n,attrs:{shape:x}}),A;if(f){let w=li({inputs:{x:b},backend:n,attrs:{begin:h,size:g}});A=Mt({inputs:{x:w},backend:n,attrs:{shape:y}}),n.disposeIntermediateTensorInfo(w)}else if(y.some(w=>w===0))A=n.makeTensorInfo(y,s.dtype,[]);else{let w=n.bufferSync(b),k=aS(y,w,m,h);A=n.makeTensorInfo(k.shape,k.dtype,k.values)}let v=Mt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(A),v}var rte={kernelName:oy,backendName:"cpu",kernelFunc:_qe};function Eqe(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:o,leftPad:a,rightPad:i,padWidth:l,preserveShortSequences:u}=r,{data:c,dataSplits:p}=t,d=n.data.get(c.dataId).values,f=n.data.get(p.dataId).values,[h,m]=iS(d,f,s,o,a,i,l,u);return[n.makeTensorInfo([h.length],"string",h),n.makeTensorInfo(p.shape,"int32",m)]}var ste={kernelName:ay,backendName:"cpu",kernelFunc:Eqe};function Rqe(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:s}=r,{input:o,delimiter:a}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(o.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${o.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=n.data.get(o.dataId).values,l=n.data.get(a.dataId).values[0],[u,c,p]=lS(i,l,s),d=c.length;return[n.makeTensorInfo([d,2],"int32",u),n.makeTensorInfo([d],"string",c),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var ote={kernelName:iy,backendName:"cpu",kernelFunc:Rqe};function Dqe(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:s}=r,{input:o}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(s<=0)throw new Error("Number of buckets must be at least 1");let a=n.data.get(o.dataId).values,i=uS(a,s);return n.makeTensorInfo(o.shape,"int32",i)}var ate={kernelName:ly,backendName:"cpu",kernelFunc:Dqe};var $qe=pt(Gu,e=>Math.tan(e)),ite={kernelName:Gu,backendName:"cpu",kernelFunc:$qe};var Fqe=pt(Uu,e=>Math.tanh(e)),lte={kernelName:Uu,backendName:"cpu",kernelFunc:Fqe};function Oqe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reps:o}=r;Se(s,"tile");let a=cS(n.bufferSync(s),o);return n.makeTensorInfo(a.shape,a.dtype,a.values)}var ute={kernelName:vl,backendName:"cpu",kernelFunc:Oqe};function Pqe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{k:o,sorted:a}=r;Se(s,"topk");let i=n.data.get(s.dataId).values,[l,u]=pS(i,s.shape,s.dtype,o,a);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var cte={kernelName:uy,backendName:"cpu",kernelFunc:Pqe};function Mqe(e){let{inputs:t,attrs:n,backend:r}=e,{image:s,transforms:o}=t,{interpolation:a,fillMode:i,fillValue:l,outputShape:u}=n,[c,p,d,f]=s.shape,[h,m]=u!=null?u:[p,d],g=[c,h,m,f],x=C.computeStrides(s.shape),y=x[0],b=x[1],A=x[2],v=C.getTypedArrayFromDType(s.dtype,C.sizeFromShape(g));v.fill(l);let w=r.data.get(s.dataId).values,k=r.data.get(o.dataId).values;for(let N=0;Nt-1)if(t<=1)n=0;else{let r=2*t;n-=r*Math.trunc(n/r),n>=t&&(n=r-n-1)}return C.clamp(0,n,t-1)}function Lqe(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let r=t-1;n+=t*(Math.trunc(-n/r)+1)}else if(n>t-1)if(t<=1)n=0;else{let r=t-1;n-=t*Math.trunc(n/r)}return C.clamp(0,n,t-1)}function Bqe(e,t){return e}function Vqe(e,t){return C.clamp(0,e,t-1)}function iv(e,t,n,r,s,o,a,i,l,u,c){let p=a*r+i*s+l*o+u;return 0<=i&&in.disposeIntermediateTensorInfo(h)),f}var mte={kernelName:nd,backendName:"cpu",kernelFunc:Hqe};var qqe=[qJ,iJ,KJ,XJ,dJ,ZJ,YJ,JJ,QJ,eQ,tQ,nQ,rQ,sQ,oQ,iQ,lQ,uQ,cQ,HJ,pQ,dQ,fQ,hQ,pJ,fJ,mQ,lJ,gQ,yQ,AQ,vQ,bQ,kQ,IQ,wQ,CQ,SQ,NQ,TQ,_Q,EQ,RQ,DQ,$Q,FQ,OQ,MQ,PQ,sv,LQ,BJ,BQ,hJ,VQ,mJ,WQ,gJ,GQ,UQ,jQ,xJ,HQ,qQ,KQ,XQ,ZQ,yJ,bJ,uJ,YQ,xQ,JQ,QQ,eee,VJ,AJ,vJ,tee,wJ,nee,ree,see,oee,aee,iee,kJ,uee,cee,pee,dee,hee,lee,mee,gee,IJ,xee,yee,vee,CJ,SJ,wee,kee,Iee,NJ,Cee,Tee,_ee,gS,Eee,WJ,_J,Ree,cJ,Dee,GJ,UJ,jJ,$ee,Fee,Oee,Pee,Mee,zee,Lee,EJ,Bee,Vee,Wee,DJ,Gee,Uee,jee,$J,bee,qee,Kee,Xee,Zee,Yee,Jee,Qee,ete,OJ,tte,PJ,nte,rte,ste,ote,ate,zJ,zQ,ite,lte,ute,cte,TJ,pte,fte,hte,mte,See];for(let e of qqe)g3(e);var Pm={},kF={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function gte(e,t){Pm[e]=t}function Ca(e){if(!(e in Pm)){let n=Xqe(e);if(n!==null)Pm[e]=n;else return console.log("Could not get context for WebGL version",e),null}let t=Pm[e];return t.isContextLost()?(delete Pm[e],Ca(e)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),Pm[e])}function Kqe(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function Xqe(e){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=Kqe(e);return t.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Pm[e]},!1),e===1?t.getContext("webgl",kF)||t.getContext("experimental-webgl",kF):t.getContext("webgl2",kF)}var kd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(kd||(kd={}));var Rs;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(Rs||(Rs={}));var xs;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(xs||(xs={}));function Mm(e,t){return[t,e]}function xte(e,t){return e*t}function lv(e){let t=C.sizeFromShape(e),n=Math.ceil(t/4);return C.sizeToSquarishShape(n)}function El(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function yte(e,t){let[n,r]=El(e,t);return n*r*4}function uv(e,t){let n=e,r,s,o,a,i,l,u,c,p,d;return he().getNumber("WEBGL_VERSION")===2?(r=n.R32F,s=n.R16F,o=n.RGBA16F,a=n.RGBA32F,i=n.RED,u=4,c=1,p=n.HALF_FLOAT,d=n.FLOAT):(r=e.RGBA,s=e.RGBA,o=e.RGBA,a=n.RGBA,i=e.RGBA,u=4,c=4,p=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT),l=e.RGBA,{internalFormatFloat:r,internalFormatHalfFloat:s,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:p,textureTypeFloat:d}}function ot(e,t){let n=t();return he().getBool("DEBUG")&&Zqe(e),n}function Zqe(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+Qqe(e,t))}var Yqe=596e-10,Jqe=65504;function bte(e){return!!(he().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||Yqee.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function Ate(e,t){let n=bc(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ot(e,()=>e.shaderSource(n,t)),ot(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function vte(e,t){let n=bc(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ot(e,()=>e.shaderSource(n,t)),ot(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw tKe(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var eKe=/ERROR: [0-9]+:([0-9]+):/g;function tKe(e,t){let n=eKe.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let r=+n[1],s=e.split(` `),o=s.length.toString().length+2,a=s.map((p,d)=>C.rightPad((d+1).toString(),o)+p),i=0;for(let p=0;pe.createProgram(),"Unable to create WebGLProgram.")}function kte(e,t){if(ot(e,()=>e.linkProgram(t)),e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function yS(e,t){if(ot(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function Ite(e,t){let n=bc(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ot(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ot(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function Cte(e,t){let n=bc(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ot(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),ot(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function Ste(e){return bc(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Nte(e,t){let n=he().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let r=`[${e}x${t}]`;throw new Error("Requested texture size "+r+" is invalid.")}if(e>n||t>n){let r=`[${e}x${t}]`,s=`[${n}x${n}]`;throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+s+".")}}function Tte(e){return bc(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function IF(e,t,n,r,s,o,a){let i=e.getAttribLocation(t,n);return i===-1?!1:(ot(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),ot(e,()=>e.vertexAttribPointer(i,s,e.FLOAT,!1,o,a)),ot(e,()=>e.enableVertexAttribArray(i)),!0)}function nKe(e,t,n){sKe(e,n),ot(e,()=>e.activeTexture(e.TEXTURE0+n)),ot(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function _te(e,t,n){return bc(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function Ete(e,t,n){return e.getUniformLocation(t,n)}function Rte(e,t,n,r){ot(e,()=>nKe(e,t,r)),ot(e,()=>e.uniform1i(n,r))}function bS(e,t,n){ot(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),ot(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function CF(e,t){ot(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ot(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function pv(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+rKe(e,t))}function rKe(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function bc(e,t,n){let r=ot(e,()=>t());if(r==null)throw new Error(n);return r}function sKe(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(rn){let s=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${s}.`)}}function Id(e,t=2){return C.sizeFromShape(e.slice(0,e.length-t))}function Cd(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function AS(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[Id(e),...Cd(e)]),t}function Dte(e,t=!1){let n=he().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((s,o)=>o>=e.length-2?C.nearestLargerEven(e[o]):e[o]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=C.squeezeShape(e).newShape);let r=C.sizeFromShape(e);if(e.length<=1&&r<=n)return[1,r];if(e.length===2&&e[0]<=n&&e[1]<=n)return e;if(e.length===3&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(e.length===3&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){let s=Id(e),o=2,a=2;return e.length&&([o,a]=Cd(e)),r=s*(o/2)*(a/2),C.sizeToSquarishShape(r).map(i=>i*2)}return C.sizeToSquarishShape(r)}function vS(e){return e%2==0}function zm(e,t){if(e=e.slice(-2),t=t.slice(-2),C.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let n=e.slice(-1)[0],r=t.slice(-1)[0];if(n===r||vS(n)&&vS(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&vS(e[0])&&vS(t[0])}var SF,NF;function $te(e){if(SF==null){let t=Ca(e);SF=t.getParameter(t.MAX_TEXTURE_SIZE)}return SF}function Fte(e){if(NF==null){let t=Ca(e);NF=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,NF)}function Ote(e){if(e===0)return 0;let t,n=Ca(e);return Sa(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:Sa(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function Sa(e,t){return e.getExtension(t)!=null}function TF(e){try{if(Ca(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Pte(e){if(e===0)return!1;let t=Ca(e);if(e===1){if(!Sa(t,"OES_texture_float"))return!1}else if(!Sa(t,"EXT_color_buffer_float"))return!1;return _F(t)}function Mte(e){if(e===0)return!1;let t=Ca(e);if(e===1){if(!Sa(t,"OES_texture_float")||!Sa(t,"WEBGL_color_buffer_float"))return!1}else{if(Sa(t,"EXT_color_buffer_float"))return _F(t);let r="EXT_color_buffer_half_float";if(Sa(t,r)){let s=t.getExtension(r);return oKe(t,s)}return!1}return _F(t)}function _F(e){let t=uv(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,r,s,0,t.textureFormatFloat,t.textureTypeFloat,null);let o=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,o),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let a=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(o),a}function oKe(e,t){let n=uv(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);let s=1,o=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,s,o,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let a=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,a),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(a),i}function zte(e){return e!==2?!1:Ca(e).fenceSync!=null}function Rl(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&C.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var yt=he();yt.registerFlag("HAS_WEBGL",()=>yt.getNumber("WEBGL_VERSION")>0);yt.registerFlag("WEBGL_VERSION",()=>TF(2)?2:TF(1)?1:0);yt.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);yt.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>yt.get("WEBGL_VERSION")===2);yt.registerFlag("WEBGL_CPU_FORWARD",()=>!0);yt.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);yt.registerFlag("WEBGL_PACK",()=>yt.getBool("HAS_WEBGL"));yt.registerFlag("WEBGL_PACK_NORMALIZATION",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_CLIP",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_PACK_REDUCE",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_LAZILY_UNPACK",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_CONV_IM2COL",()=>yt.getBool("WEBGL_PACK"));yt.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>$te(yt.getNumber("WEBGL_VERSION")));yt.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>Fte(yt.getNumber("WEBGL_VERSION")));yt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=yt.getNumber("WEBGL_VERSION");return e===0?0:Ote(e)});yt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>yt.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Gh.isMobile());yt.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>Pte(yt.getNumber("WEBGL_VERSION")));yt.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>yt.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:yt.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));yt.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>Mte(yt.getNumber("WEBGL_VERSION")));yt.registerFlag("WEBGL_FENCE_API_ENABLED",()=>zte(yt.getNumber("WEBGL_VERSION")));yt.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>yt.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);yt.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});yt.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Gh.isMobile()&&yt.getBool("IS_CHROME")?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});yt.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);yt.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);yt.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);yt.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);function Vn(){let e,t,n,r,s,o,a,i,l,u;return he().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",s="texture",o="outputColor",a="out vec4 outputColor;",i=` bool isnan_custom(float val) { return (val > 0.0 || val < 0.0) ? false : val != 0.0; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan_custom(val.x), isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); } #define isnan(value) isnan_custom(value) `,l="",u=` #define round(value) newRound(value) int newRound(float value) { return int(floor(value + 0.5)); } ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `):(e="",t="attribute",n="varying",r="varying",s="texture2D",o="gl_FragColor",a="",i=` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); } `,l=` uniform float INFINITY; bool isinf(float val) { return abs(val) == INFINITY; } bvec4 isinf(vec4 val) { return equal(abs(val), vec4(INFINITY)); } `,u=` int round(float value) { return int(floor(value + 0.5)); } ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:s,output:o,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:l,defineRound:u}}function Yi(e,t,n="index"){let r=C.computeStrides(t);return r.map((s,o)=>{let a=`int ${e[o]} = ${n} / ${s}`,i=o===r.length-1?`int ${e[o+1]} = ${n} - ${e[o]} * ${s}`:`index -= ${e[o]} * ${s}`;return`${a}; ${i};`}).join("")}function Lm(e,t,n="index"){let r=C.computeStrides(t);return r.map((s,o)=>{let a=`int ${e[o]} = ${n} / outShapeStrides[${o}]`,i=o===r.length-1?`int ${e[o+1]} = ${n} - ${e[o]} * outShapeStrides[${o}]`:`index -= ${e[o]} * outShapeStrides[${o}]`;return`${a}; ${i};`}).join("")}function aKe(e,t){let n=e.length,r=e.map(o=>`${t}[${o}]`),s=new Array(n-1);s[n-2]=r[n-1];for(let o=n-3;o>=0;--o)s[o]=`(${s[o+1]} * ${r[o+1]})`;return s}function Lte(e,t,n="index"){let r=e.map((o,a)=>a),s=aKe(r,t);return s.map((o,a)=>{let i=`int ${e[a]} = ${n} / ${s[a]}`,l=a===s.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * ${s[a]}`:`index -= ${e[a]} * ${s[a]}`;return`${i}; ${l};`}).join("")}function a1(e){let t=C.computeStrides(e).map(n=>n.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } `}function i1(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `}var wS=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; lowp vec4 encode_float(highp float v) { if (isnan(v)) { return vec4(255, 255, 255, 255); } highp float av = abs(v); if(av < FLOAT_MIN) { return vec4(0.0, 0.0, 0.0, 0.0); } else if(v > FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 127.0) / 255.0; } else if(v < -FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 255.0) / 255.0; } highp vec4 c = vec4(0,0,0,0); highp float e = floor(log2(av)); highp float m = exp2(fract(log2(av))) - 1.0; c[2] = floor(128.0 * m); m -= c[2] / 128.0; c[1] = floor(32768.0 * m); m -= c[1] / 32768.0; c[0] = floor(8388608.0 * m); highp float ebias = e + 127.0; c[3] = floor(ebias / 2.0); ebias -= c[3] * 2.0; c[2] += floor(ebias) * 128.0; c[3] += 128.0 * step(0.0, -v); return c / 255.0; } `;var{getBroadcastDims:Bte}=M;function Vte(e,t,n){let r=[];if(e.forEach(f=>{let h=C.sizeFromShape(f.shapeInfo.logicalShape);if(f.shapeInfo.isUniform?r.push(`uniform float ${f.name}${h>1?`[${h}]`:""};`):(r.push(`uniform sampler2D ${f.name};`),r.push(`uniform int offset${f.name};`)),n.enableShapeUniforms){let{uniformShape:m}=kS(n.packedInputs,f.shapeInfo.logicalShape,f.shapeInfo.texShape);switch(m.length){case 1:r.push(`uniform int ${f.name}Shape;`);break;case 2:r.push(`uniform ivec2 ${f.name}Shape;`);break;case 3:r.push(`uniform ivec3 ${f.name}Shape;`);break;case 4:r.push(`uniform ivec4 ${f.name}Shape;`);break;default:break}r.push(`uniform ivec2 ${f.name}TexShape;`)}}),n.enableShapeUniforms){switch(t.logicalShape.length){case 1:r.push("uniform int outShape;");break;case 2:r.push("uniform ivec2 outShape;"),r.push("uniform int outShapeStrides;");break;case 3:r.push("uniform ivec3 outShape;"),r.push("uniform ivec2 outShapeStrides;");break;case 4:r.push("uniform ivec4 outShape;"),r.push("uniform ivec3 outShapeStrides;");break;default:break}r.push("uniform ivec2 outTexShape;")}n.customUniforms&&n.customUniforms.forEach(f=>{r.push(`uniform ${f.type} ${f.name}${f.arrayIndex?`[${f.arrayIndex}]`:""};`)});let s=r.join(` `),o=e.map(f=>iKe(f,t,n.packedInputs,n.enableShapeUniforms)).join(` `),a=t.texShape,i=Vn(),l=cKe(i),u,c,p=fKe(i);return t.isPacked?(u=lKe(t.logicalShape,a,n.enableShapeUniforms),c=dKe(i)):(u=uKe(t.logicalShape,a,n.enableShapeUniforms),c=pKe(i)),n.packedInputs&&(p+=xKe),[p,l,c,s,u,o,n.userCode].join(` `)}function l1(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return _Ke(e,t);case 1:return RKe(e,t);case 2:return $Ke(e,t);case 3:return OKe(e,t);case 4:return MKe(e,t);case 5:return zKe(e);case 6:return LKe(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function Wte(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return TKe(e);case 1:return EKe(e,t);case 2:return DKe(e,t);case 3:return FKe(e,t);default:return PKe(e,t)}}function iKe(e,t,n=!1,r){let s="";n?s+=Wte(e,r):s+=l1(e,r);let o=e.shapeInfo.logicalShape,a=t.logicalShape;return o.length<=a.length&&(n?s+=BKe(e,t):s+=VKe(e,t)),s}function lKe(e,t,n){switch(e.length){case 0:return Gte();case 1:return yKe(e,t,n);case 2:return SKe(e,t,n);case 3:return AKe(e,t,n);default:return wKe(e,t,n)}}function uKe(e,t,n){switch(e.length){case 0:return Gte();case 1:return bKe(e,t,n);case 2:return NKe(e,t,n);case 3:return vKe(e,t,n);case 4:return kKe(e,t,n);case 5:return IKe(e,t);case 6:return CKe(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function cKe(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } `}function pKe(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } `}function dKe(e){return` void setOutput(vec4 val) { ${e.output} = val; } `}function fKe(e){return`${e.version} precision highp float; precision highp int; precision highp sampler2D; ${e.varyingFs} vec2 resultUV; ${e.defineOutput} const vec2 halfCR = vec2(0.5, 0.5); struct ivec5 { int x; int y; int z; int w; int u; }; struct ivec6 { int x; int y; int z; int w; int u; int v; }; uniform float NAN; ${e.defineSpecialNaN} ${e.defineSpecialInf} ${e.defineRound} int imod(int x, int y) { return x - y * (x / y); } int idiv(int a, int b, float sign) { int res = a / b; int mod = imod(a, b); if (sign < 0. && mod != 0) { res -= 1; } return res; } //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW #define HASHSCALE1 443.8975 float random(float seed){ vec2 p = resultUV * seed; vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.x + p3.y) * p3.z); } ${hKe} ${mKe} ${gKe} `}var hKe=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texelIndex = index / 2; int texR = texelIndex / texNumC; int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,mKe=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); int texR = texelIndex / texNumC; int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,gKe=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2); int texR = index / texNumC; int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `,xKe=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? (modCoord.y == 0. ? frag.r : frag.g) : (modCoord.y == 0. ? frag.b : frag.a); } float getChannel(vec4 frag, int dim) { float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } `;function Gte(){return` int getOutputCoords() { return 0; } `}function yKe(e,t,n){let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return r[0]===1?n?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } `:` int getOutputCoords() { return 2 * int(resultUV.x * ${r[1]}.0); } `:r[1]===1?n?` int getOutputCoords() { return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0)); } `:` int getOutputCoords() { return 2 * int(resultUV.y * ${r[0]}.0); } `:n?` int getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]})); return 2 * (resTexRC.x * ${r[1]} + resTexRC.y); } `}function bKe(e,t,n){return t[0]===1?n?` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } `:` int getOutputCoords() { return int(resultUV.x * ${t[1]}.0); } `:t[1]===1?n?` int getOutputCoords() { return int(resultUV.y * float(outTexShape[0])); } `:` int getOutputCoords() { return int(resultUV.y * ${t[0]}.0); } `:n?` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); return resTexRC.x * outTexShape[1] + resTexRC.y; } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); return resTexRC.x * ${t[1]} + resTexRC.y; } `}function AKe(e,t,n){if(n)return` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); int index = resTexRC.x * packedTexShape[1] + resTexRC.y; int b = index / texelsInBatch; index -= b * texelsInBatch; int r = 2 * (index / texelsInLogicalRow); int c = imod(index, texelsInLogicalRow) * 2; return ivec3(b, r, c); } `;let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],s=Math.ceil(e[2]/2),o=s*Math.ceil(e[1]/2);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]})); int index = resTexRC.x * ${r[1]} + resTexRC.y; int b = index / ${o}; index -= b * ${o}; int r = 2 * (index / ${s}); int c = imod(index, ${s}) * 2; return ivec3(b, r, c); } `}function vKe(e,t,n){if(n)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; ${Lm(["r","c","d"],e)} return ivec3(r, c, d); } `;let r=Yi(["r","c","d"],e);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); int index = resTexRC.x * ${t[1]} + resTexRC.y; ${r} return ivec3(r, c, d); } `}function wKe(e,t,n){if(n)return` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); int index = resTexRC.x * packedTexShape[1] + resTexRC.y; int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0)); int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0)); int texelsInBatchN = texelsInBatch * outShape[1]; int b2 = index / texelsInBatchN; index -= b2 * texelsInBatchN; int b = index / texelsInBatch; index -= b * texelsInBatch; int r = 2 * (index / texelsInLogicalRow); int c = imod(index, texelsInLogicalRow) * 2; return ivec4(b2, b, r, c); } `;let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],s=Math.ceil(e[e.length-1]/2),o=s*Math.ceil(e[e.length-2]/2),a=o,i="",l="b, r, c";for(let u=2;u=1?c="coords = 0;":c=i.map(y=>`coords.${p[y+u]} = 0;`).join(` `);let d="";a<2&&o>0?d="coords":d=e.shapeInfo.logicalShape.map((y,b)=>`coords.${p[b+u]}`).join(", ");let f="return outputValue;",m=C.sizeFromShape(e.shapeInfo.logicalShape)===1,x=C.sizeFromShape(t.logicalShape)===1;if(o===1&&!m&&!x)f=` return vec4(outputValue.xy, outputValue.xy); `;else if(m&&!x)a===1?f=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:f=` return vec4(outputValue.x); `;else if(i.length){let y=o-2,b=o-1;i.indexOf(y)>-1&&i.indexOf(b)>-1?f="return vec4(outputValue.x);":i.indexOf(y)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(b)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${s}() { ${l} coords = getOutputCoords(); ${c} vec4 outputValue = get${r}(${d}); ${f} } `}function VKe(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),s="get"+r+"AtOutCoords",o=t.texShape,a=e.shapeInfo.texShape,i=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&i===l&&e.shapeInfo.flatOffset==null&&C.arraysEqual(a,o))return` float ${s}() { return sampleTexture(${n}, resultUV); } `;let u=Ct(l),c=Bte(e.shapeInfo.logicalShape,t.logicalShape),p=l-i,d,f=["x","y","z","w","u","v"];i===0?d="":l<2&&c.length>=1?d="coords = 0;":d=c.map(m=>`coords.${f[m+p]} = 0;`).join(` `);let h="";return l<2&&i>0?h="coords":h=e.shapeInfo.logicalShape.map((m,g)=>`coords.${f[g+p]}`).join(", "),` float ${s}() { ${u} coords = getOutputCoords(); ${d} return get${r}(${h}); } `}function Ct(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function kS(e,t,n){let{newShape:r,keptDims:s}=C.squeezeShape(t),o=t.length,a=e&&o===3&&t[0]===1,i=a?t.slice(1):r,l=!e&&o>1&&!C.arraysEqual(t,n)&&r.lengthe[n]).join(", ")}function Ute(e,t,n,r){let s=n.map((b,A)=>{let v={logicalShape:b.shape,texShape:b.isUniform?null:b.texData.texShape,isUniform:b.isUniform,isPacked:b.isUniform?!1:b.texData.isPacked,flatOffset:null};return b.texData!=null&&b.texData.slice!=null&&b.texData.slice.flatOffset>0&&(v.flatOffset=b.texData.slice.flatOffset),{name:t.variableNames[A],shapeInfo:v}}),o=s.map(b=>b.shapeInfo),a={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},i=Vte(s,a,t),l=e.createProgram(i),u=null,c=e.getUniformLocation(l,"NAN",!1);he().getNumber("WEBGL_VERSION")===1&&(u=e.getUniformLocation(l,"INFINITY",!1));let p=!1,d={},f={},h={};for(let b=0;b{y[A]=e.getUniformLocation(l,b.name,p)}),{program:t,source:i,webGLProgram:l,uniformLocations:d,customUniformLocations:y,inShapeInfos:o,outShapeInfo:a,infLoc:u,nanLoc:c,inShapesLocations:f,inTexShapesLocations:h,outShapeLocation:m,outShapeStridesLocation:x,outTexShapeLocation:g}}function jte(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((n,r)=>{let s=n.logicalShape,o=t[r],a=o.shape;if(!C.arraysEqual(s,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${s} and ${a} must match`);if(n.isUniform&&o.isUniform)return;let i=n.texShape,l=o.isUniform?null:o.texData.texShape;if(!C.arraysEqual(i,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${l} must match`)})}function Hte(e,t,n,r,s){t.program.enableShapeUniforms||(jte(t.inShapeInfos,n),jte([t.outShapeInfo],[r]));let o=r.texData.texture,a=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(o,a[0],a[1]):e.setOutputMatrixTexture(o,a[0],a[1]),e.setProgram(t.webGLProgram),he().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((l,u)=>{let c=t.program.variableNames[u],p=t.uniformLocations[c],d=t.uniformLocations[`offset${c}`],f=t.inShapesLocations[`${c}Shape`],h=t.inTexShapesLocations[`${c}TexShape`];if(f){let{uniformShape:m}=kS(t.program.packedInputs,l.shape,l.texData.texShape);switch(m.length){case 1:e.gl.uniform1iv(f,new Int32Array(m));break;case 2:e.gl.uniform2iv(f,new Int32Array(m));break;case 3:e.gl.uniform3iv(f,new Int32Array(m));break;case 4:e.gl.uniform4iv(f,new Int32Array(m));break;default:break}}if(h&&e.gl.uniform2i(h,l.texData.texShape[0],l.texData.texShape[1]),p!=null){if(l.isUniform){if(C.sizeFromShape(l.shape)<2)e.gl.uniform1f(p,l.uniformValues[0]);else{let m=l.uniformValues;m instanceof Float32Array||(m=new Float32Array(m)),e.gl.uniform1fv(p,m)}return}l.texData.slice!=null&&d!=null&&e.gl.uniform1i(d,l.texData.slice.flatOffset),e.setInputMatrixTexture(l.texData.texture,p,u)}});let i=t.outShapeLocation;if(i)switch(r.shape.length){case 1:e.gl.uniform1iv(i,new Int32Array(r.shape));break;case 2:e.gl.uniform2iv(i,new Int32Array(r.shape));break;case 3:e.gl.uniform3iv(i,new Int32Array(r.shape));break;case 4:e.gl.uniform4iv(i,new Int32Array(r.shape));break;default:break}if(t.outShapeStridesLocation){let l=C.computeStrides(r.shape);switch(r.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(l));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(l));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(l));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,r.texData.texShape[0],r.texData.texShape[1]),t.program.customUniforms&&s&&t.program.customUniforms.forEach((l,u)=>{let c=t.customUniformLocations[u],p=s[u];if(l.type==="float")e.gl.uniform1fv(c,p);else if(l.type==="vec2")e.gl.uniform2fv(c,p);else if(l.type==="vec3")e.gl.uniform3fv(c,p);else if(l.type==="vec4")e.gl.uniform4fv(c,p);else if(l.type==="int")e.gl.uniform1iv(c,p);else if(l.type==="ivec2")e.gl.uniform2iv(c,p);else if(l.type==="ivec3")e.gl.uniform3iv(c,p);else if(l.type==="ivec4")e.gl.uniform4iv(c,p);else throw Error(`uniform type ${l.type} is not supported yet.`)}),e.executeProgram()}function qte(e,t,n){let r="";t.concat(n).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!a.isUniform){let l=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:p}=kS(e.packedInputs,a.shape,l),d="",f="",h="";if(c.length===1&&e.packedInputs){let v=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];d=`${v[0]>1}_${v[1]>1}`}else if(c.length===2&&!e.packedInputs)f=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!e.packedInputs){let v=C.computeStrides(c);h=`${v[0]===l[1]}_${v[v.length-1]===l[1]}`}let m=a.shape.length,g=c.length===2&&C.arraysEqual(a.shape,l),x=C.sizeFromShape(a.shape)===1,y=M.getBroadcastDims(a.shape,n.shape),b=!e.packedInputs&&m===n.shape.length&&C.arraysEqual(l,n.texData.texShape),A=e.packedInputs||c.length>2?"":`${l[0]>1}_${l[1]>1}`;r+=`${m}_${b}_${u?p:""}_${c.length}_${x}_${y}_${g}_${d}_${f}_${h}_${A}_${i}`}else{let l=a.isUniform?"uniform":a.texData.texShape;r+=`${a.shape}_${l}_${i}`}});let s=e.userCode,o=e.constructor.name;return o+="_"+r+"_"+s+`${he().getNumber("WEBGL_VERSION")}`,o}function Xn(e){return he().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var EF=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=kd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Vn();this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?Lm(["r","c","d"],t):Yi(["r","c","d"],t)} return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getA(rc.x, rc.y, rc.z); } ${n.output} = result; } `}};var RF=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=kd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Vn();this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?Lm(["r","c","d"],t):Yi(["r","c","d"],t)} return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); } ${n.output} = result; } `}};var DF=class{constructor(t){this.variableNames=["A"],this.outTexUsage=Rs.DOWNLOAD;let n=Vn();this.outputShape=t,this.userCode=` ${wS} void main() { float x = getAAtOutCoords(); ${n.output} = encode_float(x); } `}};var $F=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Rs.DOWNLOAD;let n=Vn();this.outputShape=t,this.userCode=` ${wS} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${n.output} = encode_float(x); } `}};var FF=class{constructor(t,n=!1){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let r=Vn();this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length);let s="result";n&&(s="floor(result * 255. + 0.5)"),this.userCode=` ${this.enableShapeUniforms?i1():a1(t)} void main() { ivec3 coords = getOutputCoords(); int flatIndex = getFlatIndex(coords); int offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / texShape[1]; int c = imod(flatIndex, texShape[1]); vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); vec4 values = ${r.texture2D}(A, uv); float result; if(offset == 0) { result = values[0]; } else if(offset == 1) { result = values[1]; } else if(offset == 2) { result = values[2]; } else { result = values[3]; } ${r.output} = vec4(${s}, 0., 0., 0.); } `}};var OF=class{constructor(t,n=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let r=Vn();this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length);let s="",o="result";n&&(o="floor(result * 255. + 0.5)");for(let a=0;a<=1;a++)for(let i=0;i<=1;i++){let l=a*2+i;s+=` localCoords = coords; if(localCoords[2] + ${i} < ${this.enableShapeUniforms?"outShape[2]":`${t[2]}`}) { localCoords[2] += ${i}; if (localCoords[1] + ${a} < ${this.enableShapeUniforms?"outShape[1]":`${t[1]}`}) { localCoords[1] += ${a}; flatIndex = getFlatIndex(localCoords); offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / texShape[1]; int c = imod(flatIndex, texShape[1]); vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); values = ${r.texture2D}(A, uv); if (offset == 0) { result[${l}] = values[0]; } else if (offset == 1) { result[${l}] = values[1]; } else if (offset == 2) { result[${l}] = values[2]; } else { result[${l}] = values[3]; } } } `}this.userCode=` ${this.enableShapeUniforms?i1():a1(t)} void main() { ivec3 coords = getOutputCoords(); vec4 result = vec4(0.); int flatIndex, r, c, offset; ivec3 localCoords; vec2 uv; vec4 values; ${s} ${r.output} = ${o}; } `}};function Kte(e){let t=Vn(),n=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; ${t.varyingVs} vec2 resultUV; void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`;return Ate(e,n)}function Xte(e){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return Ite(e,t)}function Zte(e){let t=new Uint16Array([0,1,2,2,1,3]);return Cte(e,t)}function dv(e,t,n,r,s,o){Nte(t,n);let a=Ste(e),i=e.TEXTURE_2D;return ot(e,()=>e.bindTexture(i,a)),ot(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ot(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ot(e,()=>e.texParameteri(i,e.TEXTURE_MIN_FILTER,e.NEAREST)),ot(e,()=>e.texParameteri(i,e.TEXTURE_MAG_FILTER,e.NEAREST)),ot(e,()=>e.texImage2D(i,0,r,t,n,0,s,o,null)),ot(e,()=>e.bindTexture(e.TEXTURE_2D,null)),a}function PF(e){return e.internalFormatFloat}function Yte(e,t,n,r){let[s,o]=Mm(t,n);return dv(e,s,o,PF(r),r.textureFormatFloat,e.FLOAT)}function MF(e){return e.internalFormatHalfFloat}function Jte(e,t,n,r){let[s,o]=Mm(t,n);return dv(e,s,o,MF(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function zF(e){return e.downloadTextureFormat}function Qte(e,t,n,r){let[s,o]=Mm(t,n);return dv(e,s,o,zF(r),e.RGBA,e.UNSIGNED_BYTE)}function LF(e){return e.internalFormatPackedFloat}function ene(e,t,n,r){let[s,o]=El(t,n);return dv(e,s,o,LF(r),e.RGBA,e.FLOAT)}function BF(e){return e.internalFormatPackedHalfFloat}function tne(e,t,n,r){let[s,o]=El(t,n);return dv(e,s,o,BF(r),e.RGBA,r.textureTypeHalfFloat)}function nne(e,t,n){let r=0,s=3*4,o=3*4+2*4;return ot(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),IF(e,t,"clipSpacePos",n,3,o,r)&&IF(e,t,"uv",n,2,o,s)}function rne(e,t,n,r,s,o){ot(e,()=>e.bindTexture(e.TEXTURE_2D,t));let a,i,l;s instanceof Uint8Array?(a=new Uint8Array(n*r*4),i=e.UNSIGNED_BYTE,l=e.RGBA):(a=new Float32Array(n*r*4),i=e.FLOAT,l=o.internalFormatPackedFloat),a.set(s),ot(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,i,a)),ot(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function sne(e,t,n){ot(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?ot(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):ot(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),ot(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function one(e,t,n,r){let s=e.createBuffer();ot(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,s));let i=4*4*t*n;return ot(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,i,e.STREAM_READ)),ot(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),ot(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),s}function ane(e,t,n){let r=e,s=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,s),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),s}function ine(e,t,n,r){let[s,o]=Mm(t,n),a=4,i=new Uint8Array(xte(t*n,a));return ot(e,()=>e.readPixels(0,0,s,o,r.downloadTextureFormat,e.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function lne(e,t,n,r,s,o,a,i){let l=e,u=new Float32Array(yte(o,a));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function une(e,t,n){let r=new Float32Array(t*n*4);return ot(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var VF=class{constructor(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let n=he().getNumber("WEBGL_VERSION");t!=null?(this.gl=t,gte(n,t)):this.gl=Ca(n);let r="WEBGL_color_buffer_float",s="EXT_color_buffer_half_float";if(he().getNumber("WEBGL_VERSION")===1){let o="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=cv(this.gl,o),Sa(this.gl,a))this.textureHalfFloatExtension=cv(this.gl,a);else if(he().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(r),Sa(this.gl,s))this.colorBufferHalfFloatExtension=cv(this.gl,s);else if(he().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(r="EXT_color_buffer_float",Sa(this.gl,r))this.colorBufferFloatExtension=this.gl.getExtension(r);else if(Sa(this.gl,s))this.colorBufferHalfFloatExtension=this.gl.getExtension(s);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Xte(this.gl),this.indexBuffer=Zte(this.gl),this.framebuffer=Tte(this.gl),this.textureConfig=uv(this.gl,this.textureHalfFloatExtension)}get debug(){return he().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let t=this.gl;ot(t,()=>t.finish()),ot(t,()=>t.bindFramebuffer(t.FRAMEBUFFER,null)),ot(t,()=>t.deleteFramebuffer(this.framebuffer)),ot(t,()=>t.bindBuffer(t.ARRAY_BUFFER,null)),ot(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)),ot(t,()=>t.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(t,n){return this.throwIfDisposed(),Yte(this.gl,t,n,this.textureConfig)}createFloat16MatrixTexture(t,n){return this.throwIfDisposed(),Jte(this.gl,t,n,this.textureConfig)}createUnsignedBytesMatrixTexture(t,n){return this.throwIfDisposed(),Qte(this.gl,t,n,this.textureConfig)}uploadPixelDataToTexture(t,n){this.throwIfDisposed(),sne(this.gl,t,n)}uploadDenseMatrixToTexture(t,n,r,s){this.throwIfDisposed(),rne(this.gl,t,n,r,s,this.textureConfig)}createFloat16PackedMatrixTexture(t,n){return this.throwIfDisposed(),tne(this.gl,t,n,this.textureConfig)}createPackedMatrixTexture(t,n){return this.throwIfDisposed(),ene(this.gl,t,n,this.textureConfig)}deleteMatrixTexture(t){this.throwIfDisposed(),this.outputTexture===t&&(CF(this.gl,this.framebuffer),this.outputTexture=null),ot(this.gl,()=>this.gl.deleteTexture(t))}downloadByteEncodedFloatMatrixFromOutputTexture(t,n,r){return this.downloadMatrixDriver(t,()=>ine(this.gl,n,r,this.textureConfig))}downloadPackedMatrixFromBuffer(t,n,r,s,o,a){return lne(this.gl,t,n,r,s,o,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(t,n){return ane(this.gl,t,n)}createBufferFromTexture(t,n,r){this.bindTextureToFrameBuffer(t);let s=one(this.gl,n,r,this.textureConfig);return this.unbindTextureToFrameBuffer(),s}createAndWaitForFence(){let t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let n,r;if(he().getBool("WEBGL_FENCE_API_ENABLED")){let s=t,o=s.fenceSync(s.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),r=()=>{let a=s.clientWaitSync(o,0,0);return a===s.ALREADY_SIGNALED||a===s.CONDITION_SATISFIED},n=o}else he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(n=this.beginQuery(),this.endQuery(),r=()=>this.isQueryAvailable(n,he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):r=()=>!0;return{query:n,isFencePassed:r}}downloadMatrixFromPackedTexture(t,n,r){return this.downloadMatrixDriver(t,()=>une(this.gl,n,r))}createProgram(t){this.throwIfDisposed();let n=this.gl,r=vte(n,t);this.vertexShader==null&&(this.vertexShader=Kte(n));let s=wte(n);return ot(n,()=>n.attachShader(s,this.vertexShader)),ot(n,()=>n.attachShader(s,r)),kte(n,s),this.debug&&yS(n,s),this.vertexAttrsAreBound||(this.setProgram(s),this.vertexAttrsAreBound=nne(n,this.program,this.vertexBuffer)),s}deleteProgram(t){this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&ot(this.gl,()=>this.gl.deleteProgram(t))}setProgram(t){this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&yS(this.gl,this.program),ot(this.gl,()=>this.gl.useProgram(t))}getUniformLocation(t,n,r=!0){return this.throwIfDisposed(),r?_te(this.gl,t,n):Ete(this.gl,t,n)}getAttributeLocation(t,n){return this.throwIfDisposed(),ot(this.gl,()=>this.gl.getAttribLocation(t,n))}getUniformLocationNoThrow(t,n){return this.throwIfDisposed(),this.gl.getUniformLocation(t,n)}setInputMatrixTexture(t,n,r){this.throwIfDisposed(),this.throwIfNoProgram(),Rte(this.gl,t,n,r)}setOutputMatrixTexture(t,n,r){this.setOutputMatrixTextureDriver(t,r,n)}setOutputPackedMatrixTexture(t,n,r){this.throwIfDisposed();let[s,o]=El(n,r);this.setOutputMatrixTextureDriver(t,s,o)}setOutputMatrixWriteRegion(t,n,r,s){this.setOutputMatrixWriteRegionDriver(r,t,s,n)}setOutputPackedMatrixWriteRegion(t,n,r,s){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&yS(this.gl,this.program),pv(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let t=this.gl;this.debug&&this.debugValidate(),ot(t,()=>t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ot(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=cv(this.gl,he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let r=this.gl,s=this.getQueryTimerExtensionWebGL2(),o=r.createQuery();return r.beginQuery(s.TIME_ELAPSED_EXT,o),o}let t=this.getQueryTimerExtensionWebGL1(),n=t.createQueryEXT();return t.beginQueryEXT(t.TIME_ELAPSED_EXT,n),n}endQuery(){if(he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2();n.endQuery(r.TIME_ELAPSED_EXT);return}let t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(t){return await C.repeatedTry(()=>this.disposed||this.isQueryAvailable(t,he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(t,he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(t,n){if(n===0)return null;if(n===2){let r=this.gl;return r.getQueryParameter(t,r.QUERY_RESULT)/1e6}else{let r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(t,n){if(n===0)return!0;if(n===2){let r=this.gl,s=this.getQueryTimerExtensionWebGL2(),o=r.getQueryParameter(t,r.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(s.GPU_DISJOINT_EXT)),o&&!this.disjoint}else{let r=this.getQueryTimerExtensionWebGL1(),s=r.getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),s&&!this.disjoint}}pollFence(t){return new Promise(n=>{this.addItemToPoll(()=>t.isFencePassed(),()=>n())})}pollItems(){let t=WKe(this.itemsToPoll.map(n=>n.isDoneFn));for(let n=0;n<=t;++n){let{resolveFn:r}=this.itemsToPoll[n];r()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}addItemToPoll(t,n){this.itemsToPoll.push({isDoneFn:t,resolveFn:n}),!(this.itemsToPoll.length>1)&&C.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(t){this.throwIfDisposed(),bS(this.gl,t,this.framebuffer),this.debug&&pv(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(bS(this.gl,this.outputTexture,this.framebuffer),this.debug&&pv(this.gl)):CF(this.gl,this.framebuffer)}downloadMatrixDriver(t,n){this.bindTextureToFrameBuffer(t);let r=n();return this.unbindTextureToFrameBuffer(),r}setOutputMatrixTextureDriver(t,n,r){this.throwIfDisposed();let s=this.gl;bS(s,t,this.framebuffer),this.debug&&pv(s),this.outputTexture=t,ot(s,()=>s.viewport(0,0,n,r)),ot(s,()=>s.scissor(0,0,n,r))}setOutputMatrixWriteRegionDriver(t,n,r,s){this.throwIfDisposed(),ot(this.gl,()=>this.gl.scissor(t,n,r,s))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function WKe(e){let t=0;for(;t`${e}.${n}`)}function ir(e,t){return t===1?[e]:WF(e,t)}function Kne(e,t){if(e===1)return"rc";let n="";for(let r=0;r ${t[0]}`;let r="";for(let s=e-2;s= ${t[s]}`,s= ${t}; bool rEdge = rp1 >= ${n}; `}function HKe(e,t){let n=e.length,r=GKe(n,t);return n===1?`getA(rc), rc + 1 >= ${e[0]} ? 0. : getA(rc + 1), 0, 0`:`getA(${r[0]}), cEdge ? 0. : getA(${r[1]}), rEdge ? 0. : getA(${r[2]}), rEdge || cEdge ? 0. : getA(${r[3]})`}var fv=class{constructor(t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length);let r="";for(let s=0;s<4;s++){let o="thisRC = rc;";s%2==1&&(o+="thisRC.z += 1;"),s>1&&(o+="thisRC.y += 1;"),r+=` ${o} ${s>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); result[${s}] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${s>0?"}":""} `}this.userCode=` ${qKe(n,this.enableShapeUniforms)} ${this.enableShapeUniforms?i1():a1(t)} void main() { ivec3 rc = getOutputCoords(); vec4 result = vec4(0.); ivec3 thisRC; int rows = ${this.enableShapeUniforms?"outShape[1]":t[1]}; int cols = ${this.enableShapeUniforms?"outShape[2]":t[2]}; ${r} setOutput(result); } `}};function qKe(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { ${t?Lte(["r","c","d"],"inputShape"):Yi(["r","c","d"],e)} return ivec3(r, c, d); } `}var UF=class{constructor(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(t,n,r){let s=Zne(n,r),o=Yne(t,s,r);o in this.freeTextures||(this.freeTextures[o]=[]),o in this.usedTextures||(this.usedTextures[o]=[]);let a=Xne(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,r);if(this.freeTextures[o].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let l=this.freeTextures[o].shift();return this.usedTextures[o].push(l),l}let i;return s===xs.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):s===xs.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):s===xs.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):s===xs.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):s===xs.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[o].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(t,n,r,s){if(this.freeTextures==null)return;let o=Zne(r,s),a=Yne(n,o,s);a in this.freeTextures||(this.freeTextures[a]=[]);let i=Xne(n,o,this.gpgpu.gl,this.gpgpu.textureConfig,s),l=he().get("WEBGL_DELETE_TEXTURE_THRESHOLD");l!==-1&&this._numBytesAllocated>l?(this.gpgpu.deleteMatrixTexture(t),this._numBytesAllocated-=i):(this.freeTextures[a].push(t),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u.indexOf(t);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${t})`);let n=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*n)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let t in this.freeTextures)this.freeTextures[t].forEach(n=>{this.gpgpu.deleteMatrixTexture(n)});for(let t in this.usedTextures)this.usedTextures[t].forEach(n=>{this.gpgpu.deleteMatrixTexture(n)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function KKe(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F)return 16;if(t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;throw new Error(`Unknown internal format ${t}`)}function Xne(e,t,n,r,s){let o=XKe(t,r),a;if(s){let[l,u]=El(e[0],e[1]);a=l*u}else{let[l,u]=Mm(e[0],e[1]);a=l*u}let i=KKe(n,o);return a*i}function XKe(e,t){switch(e){case xs.PACKED_2X2_FLOAT32:return LF(t);case xs.PACKED_2X2_FLOAT16:return BF(t);case xs.UNPACKED_FLOAT32:return PF(t);case xs.UNPACKED_FLOAT16:return MF(t);case xs.PACKED_4X1_UNSIGNED_BYTE:return zF(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function ZKe(e){return he().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?xs.PACKED_2X2_FLOAT32:xs.UNPACKED_FLOAT32:e?xs.PACKED_2X2_FLOAT16:xs.UNPACKED_FLOAT16}function Zne(e,t){if(e===Rs.UPLOAD)return xs.PACKED_2X2_FLOAT32;if(e===Rs.RENDER||e==null)return ZKe(t);if(e===Rs.DOWNLOAD||e===Rs.PIXELS)return xs.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function Yne(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var $o=class{constructor(t,n){this.variableNames=["A"],this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${n} } void main() { float x = getAAtOutCoords(); float y = unaryOperation(x); setOutput(y); } `}},Qr="if (isnan(x)) return x;",Jne="return x;",jF="return abs(x);";var Qne="return (x >= 0.0) ? x : (exp(x) - 1.0);",ere=Qr+` return (x < 0.0) ? 0.0 : x; `,tre=Qr+` return (x < 0.0) ? 0.0 : min(6.0, x); `,hv="return x;",nre="return 1.0 / (1.0 + exp(-1.0 * x));";var rre="return x;",sre=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; `,ore=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,are=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,ire="return 1.0 / (1.0 + exp(-1.0 * x));",Ji=class{constructor(t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${n} } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `}};var HF=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t;let n=t.length,r=ir("rc",n),s=Ct(n),o=Kne(n,r),a=r.slice(-2),i=n<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` void main() { ${s} rc = getOutputCoords(); vec4 packedInput = getA(${o}); setOutput(getChannel(packedInput, ${i})); } `}};var YKe=Ts.whereImpl,JKe=1e-7,QKe=1e-4,NS={};function eXe(e){return e in NS||(NS[e]={}),NS[e]}var tXe=he().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),nXe=600;function rXe(){return he().global.screen==null?1024:he().global.screen.height*he().global.screen.width*window.devicePixelRatio*nXe/1024/1024}var d1=class extends up{constructor(t){super();if(this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!he().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(t==null){let n=Ca(he().getNumber("WEBGL_VERSION"));this.binaryCache=eXe(he().getNumber("WEBGL_VERSION")),this.gpgpu=new VF(n),this.canvas=n.canvas,this.gpgpuCreatedLocally=!0}else this.gpgpu=t,this.binaryCache={},this.gpgpuCreatedLocally=!1,this.canvas=t.gl.canvas;this.textureManager=new UF(this.gpgpu),this.numMBBeforeWarning=rXe(),this.texData=new ux(this,Zu())}nextDataId(){return d1.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}write(t,n,r){if((he().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||he().getBool("DEBUG"))&&this.checkNumericalProblems(t),r==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let s={id:this.nextDataId()};return this.texData.set(s,{shape:n,dtype:r,values:t,usage:Rs.UPLOAD,refCount:1}),s}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let n=this.texData.get(t);n.refCount++}decRef(t){if(this.texData.has(t)){let n=this.texData.get(t);n.refCount--}}move(t,n,r,s,o){if(he().getBool("DEBUG")&&this.checkNumericalProblems(n),s==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:r,dtype:s,values:n,usage:Rs.UPLOAD,refCount:o})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let n=this.texData.get(t),{values:r,dtype:s,complexTensorInfos:o,slice:a,shape:i,isPacked:l}=n;if(a!=null){let d;l?d=new Ji(i,hv):d=new $o(i,hv);let f=this.runWebGLProgram(d,[{dataId:t,shape:i,dtype:s}],s),h=this.readSync(f.dataId);return this.disposeIntermediateTensorInfo(f),h}if(r!=null)return this.convertAndCacheOnCPU(t);if(s==="string")return r;let u=this.activeTimers!=null,c;u&&(c=C.now());let p;if(s==="complex64"){let d=this.readSync(o.real.dataId),f=this.readSync(o.imag.dataId);p=M.mergeRealAndImagArrays(d,f)}else p=this.getValuesFromTexture(t);return u&&(this.downloadWaitMs+=C.now()-c),this.convertAndCacheOnCPU(t,p)}async read(t){if(this.pendingRead.has(t)){let h=this.pendingRead.get(t);return new Promise(m=>h.push(m))}let n=this.texData.get(t),{values:r,shape:s,slice:o,dtype:a,complexTensorInfos:i,isPacked:l}=n;if(o!=null){let h;l?h=new Ji(s,hv):h=new $o(s,hv);let m=this.runWebGLProgram(h,[{dataId:t,shape:s,dtype:a}],a),g=this.read(m.dataId);return this.disposeIntermediateTensorInfo(m),g}if(r!=null)return this.convertAndCacheOnCPU(t);if(!he().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&he().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,c;if(a!=="complex64"&&he().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(t);let h=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(h.texture,...lv(s))}this.pendingRead.set(t,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(a==="complex64"){let h=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),m=h[0],g=h[1];p=M.mergeRealAndImagArrays(m,g)}else if(u==null)p=this.getValuesFromTexture(t);else{let h=C.sizeFromShape(s);p=this.gpgpu.downloadFloat32MatrixFromBuffer(u,h)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let h=this.gpgpu.gl;ot(h,()=>h.deleteBuffer(u))}let d=this.convertAndCacheOnCPU(t,p),f=this.pendingRead.get(t);return this.pendingRead.delete(t),f.forEach(h=>h(d)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&Zu().removeDataId(t,this),this.pendingDeletes--),d}bufferSync(t){let n=this.readSync(t.dataId),r=n;if(t.dtype==="string")try{r=n.map(s=>C.decodeString(s))}catch(s){throw new Error("Failed to decode encoded string bytes into utf-8")}return et(t.shape,t.dtype,r)}checkNumericalProblems(t){if(t!=null)for(let n=0;n0}async time(t){let n=this.activeTimers,r=[],s=!1;this.programTimersStack==null?(this.programTimersStack=r,s=!0):this.activeTimers.push(r),this.activeTimers=r,t();let o=C.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),a=C.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=n,s&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let l=await Promise.all(o);i.kernelMs=C.sum(l),i.getExtraProfileInfo=()=>l.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:C.now(),endMs:null}}endTimer(t){return he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=C.now(),t)}async getQueryTime(t){if(he().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let n=t;return n.endMs-n.startMs}disposeData(t,n=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(n?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!n&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:r}=this.texData.get(t);return r!=null&&(this.disposeData(r.real.dataId,n),this.disposeData(r.imag.dataId,n)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:n,dtype:r,texShape:s,usage:o,isPacked:a,slice:i}=this.texData.get(t),l=i&&i.origDataId||t,u=this.dataRefCount.get(l);u>1?this.dataRefCount.set(l,u-1):(this.dataRefCount.delete(l),n!=null&&(this.numBytesInGPU-=this.computeBytes(s,r),this.textureManager.releaseTexture(n,s,o,a)));let c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,n=tXe){return he().getBool("WEBGL_CPU_FORWARD")&&t.every(r=>this.texData.get(r.dataId).texture==null&&C.sizeFromShape(r.shape)0&&C.isString(r[0])){let o=r.map(a=>C.encodeString(a));s=this.write(o,t,n)}else s=this.write(r,t,n);return this.texData.get(s).usage=null,{dataId:s,shape:t,dtype:n}}makeOutput(t,n,r){let{dataId:s}=this.makeTensorInfo(t,n,r);return Zu().makeTensorFromDataId(s,t,n,this)}unpackTensor(t){let n=new HF(t.shape);return this.runWebGLProgram(n,[t],t.dtype)}packTensor(t){let n=new GF(t.shape),r=!0;return this.runWebGLProgram(n,[t],t.dtype,null,r)}packedReshape(t,n){let r=[Id(t.shape),...Cd(t.shape)],s={dtype:t.dtype,shape:r,dataId:t.dataId},o=[Id(n),...Cd(n)],a=new fv(o,r),i=!0,l=[r],u=this.runWebGLProgram(a,[s],t.dtype,l,i);return{dataId:u.dataId,shape:n,dtype:u.dtype}}decode(t){let n=this.texData.get(t),{isPacked:r,shape:s,dtype:o}=n,a=AS(s),i,l=lv(a);r?i=new RF(a):i=new EF(a);let u=!0,c=[l],p=this.runWebGLProgram(i,[{shape:a,dtype:o,dataId:t}],o,c,u);return{dtype:o,shape:s,dataId:p.dataId}}runWebGLProgram(t,n,r,s,o=!1){let a=this.makeTensorInfo(t.outputShape,r),i=this.texData.get(a.dataId);if(t.packedOutput&&(i.isPacked=!0),t.outPackingScheme===kd.DENSE){let g=lv(t.outputShape);i.texShape=g.map(x=>x*2)}if(t.outTexUsage!=null&&(i.usage=t.outTexUsage),C.sizeFromShape(a.shape)===0)return i.values=C.getTypedArrayFromDType(a.dtype,0),a;let l=[],u=n.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let x=this.texData.get(g.dataId);if(x.texture==null){if(!t.packedInputs&&C.sizeFromShape(g.shape)<=he().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:x.values};t.packedInputs&&(x.isPacked=!0,x.shape=g.shape)}else if(!!x.isPacked!=!!t.packedInputs)g=x.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),x=this.texData.get(g.dataId);else if(x.isPacked&&!zm(x.shape,g.shape)){let y=g,b=g.shape;g.shape=x.shape,g=this.packedReshape(g,b),l.push(g),x=this.texData.get(g.dataId),y.shape=b}return this.uploadToGPU(g.dataId),{shape:g.shape,texData:x,isUniform:!1}});this.uploadToGPU(a.dataId);let c={shape:a.shape,texData:i,isUniform:!1},p=qte(t,u,c),d=this.getAndSaveBinary(p,()=>Ute(this.gpgpu,t,u,c)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),Hte(this.gpgpu,d,u,c,s),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),f&&(h=this.endTimer(h),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(h)}));let m=he().get("WEBGL_FLUSH_THRESHOLD");if(m>0){let g=C.now();g-this.lastGlFlushTime>m&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!he().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&o===!1){let g=this.unpackTensor(a);return this.disposeIntermediateTensorInfo(a),g}return a}compileAndRun(t,n,r,s,o=!1){return r=r||n[0].dtype,this.runWebGLProgram(t,n,r,s,o)}getAndSaveBinary(t,n){return t in this.binaryCache||(this.binaryCache[t]=n()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(he().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(n=>{this.gpgpu.deleteProgram(this.binaryCache[n].webGLProgram),delete this.binaryCache[n]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=le(()=>{if(!he().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=he().getBool("DEBUG");he().set("DEBUG",!1);let n=this.abs(Ke(1e-8)).dataSync()[0];if(he().set("DEBUG",t),n>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?JKe:QKe}uploadToGPU(t){let n=this.texData.get(t),{shape:r,dtype:s,values:o,texture:a,usage:i,isPacked:l}=n;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=C.now());let p=n.texShape;if(p==null&&(p=Dte(r,l),n.texShape=p),o!=null){let d=AS(r),f,h=p[1],m=p[0],g=o instanceof Uint8Array;l?([h,m]=El(p[0],p[1]),f=new OF(d,g)):f=new FF(d,g);let x=this.makeTensorInfo([m,h],s);g?this.texData.get(x.dataId).usage=Rs.PIXELS:this.texData.get(x.dataId).usage=Rs.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),h,m,o);let y=[[m,h]],b=!0,A=this.runWebGLProgram(f,[x],s,y,b),v=this.texData.get(A.dataId);n.texture=v.texture,n.texShape=v.texShape,n.isPacked=v.isPacked,n.usage=v.usage,this.disposeIntermediateTensorInfo(x),this.texData.delete(A.dataId),n.values=null,u&&(this.uploadWaitMs+=C.now()-c)}else{let d=this.acquireTexture(p,i,s,l);n.texture=d}}convertAndCacheOnCPU(t,n){let r=this.texData.get(t),{dtype:s}=r;return this.releaseGPUData(t),n!=null&&(r.values=sXe(n,s)),r.values}acquireTexture(t,n,r,s){if(this.numBytesInGPU+=this.computeBytes(t,r),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let o=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${o} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(t,n,s)}computeBytes(t,n){return t[0]*t[1]*C.bytesPerElement(n)}};d1.nextDataId=0;function sXe(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let n=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let r=0;rnew d1,2);var TS=` if (isnan(a)) return a; if (isnan(b)) return b; `;var ui=class{constructor(t,n,r){this.variableNames=["A","B"],this.outputShape=M.assertAndGetBroadcastShape(n,r),this.enableShapeUniforms=Xn(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${t} } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `}};var Sd=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;var Qi=class{constructor(t,n,r,s=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=M.assertAndGetBroadcastShape(n,r);let o=this.outputShape.length;this.enableShapeUniforms=Xn(o);let a="";if(s)if(o===0||C.sizeFromShape(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; `;else if(a=` ${Ct(o)} coords = getOutputCoords(); `,o===1)this.enableShapeUniforms?a+=` result.y = (coords + 1) >= outShape ? 0. : result.y; result.z = 0.; result.w = 0.; `:a+=` result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; `;else{let l=ir("coords",o);this.enableShapeUniforms?a+=` bool nextRowOutOfBounds = (${l[o-2]} + 1) >= outShape[${o} - 2]; bool nextColOutOfBounds = (${l[o-1]} + 1) >= outShape[${o} - 1]; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `:a+=` bool nextRowOutOfBounds = (${l[o-2]} + 1) >= ${this.outputShape[o-2]}; bool nextColOutOfBounds = (${l[o-1]} + 1) >= ${this.outputShape[o-1]}; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `}this.userCode=` vec4 binaryOperation(vec4 a, vec4 b) { ${t} } void main() { vec4 a = getAAtOutCoords(); vec4 b = getBAtOutCoords(); vec4 result = binaryOperation(a, b); ${a} setOutput(result); } `}};function lr(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var lre={kernelName:Al,backendName:"webgl",kernelFunc:lr};function Fo(e){let{inputs:t,backend:n}=e,{real:r,imag:s}=t,o=n.makeTensorInfo(r.shape,"complex64"),a=n.texData.get(o.dataId),i=lr({inputs:{x:r},backend:n}),l=lr({inputs:{x:s},backend:n});return a.complexTensorInfos={real:i,imag:l},o}var ure={kernelName:vx,backendName:"webgl",kernelFunc:Fo};var qF="return (a < 0.) ? b * a : a;",KF=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function oXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:o}=r,a=n.makeTensorInfo([],"float32",C.createScalarValue(o,"float32")),i=he().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qi(KF,s.shape,a.shape):new ui(qF,s.shape,a.shape),l=n.runWebGLProgram(i,[s,a],s.dtype);return n.disposeIntermediateTensorInfo(a),l}var cre={kernelName:Ep,backendName:"webgl",kernelFunc:oXe};var XF="return (a < 0.) ? b * a : a;",ZF=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function aXe(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,o=he().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qi(ZF,r.shape,s.shape):new ui(XF,r.shape,s.shape);return n.runWebGLProgram(o,[r,s],r.dtype)}var pre={kernelName:Gp,backendName:"webgl",kernelFunc:aXe};var _S="if (isnan(x)) return x;",dre=` if (isnan(a)) return a; if (isnan(b)) return b; `,fre=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;function Xe({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:s,backend:o})=>{let{x:a}=s,i=o,l=r||a.dtype;if(i.shouldExecuteOnCPU([a])&&n!=null){let p=i.texData.get(a.dataId),d=n(p.values,l);return i.makeTensorInfo(a.shape,l,d)}let u=he().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,c;return u?c=new Ji(a.shape,t):c=new $o(a.shape,e),i.runWebGLProgram(c,[a],l)}}function Qt({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:s,dtype:o}){return({inputs:a,backend:i})=>{let{a:l,b:u}=a,c=i;if(r&&l.dtype==="complex64"){let h=c.texData.get(l.dataId),m=c.texData.get(u.dataId),[g,x]=[[h.complexTensorInfos.real,m.complexTensorInfos.real],[h.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(b=>{let[A,v]=b,w={dataId:A.dataId,dtype:A.dtype,shape:l.shape},k={dataId:v.dataId,dtype:v.dtype,shape:u.shape},I=new ui(e,l.shape,u.shape);return c.runWebGLProgram(I,[w,k],Or(A.dtype,v.dtype))}),y=Fo({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),y}let p=o||Or(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||c.shouldExecuteOnCPU([l,u]))&&s!=null){let h=c.texData.get(l.dataId).values,m=c.texData.get(u.dataId).values,g=l.dtype==="string"?M.fromUint8ToStringArray(h):h,x=l.dtype==="string"?M.fromUint8ToStringArray(m):m,[y,b]=s(l.shape,u.shape,g,x,p),A=c.makeTensorInfo(b,p),v=c.texData.get(A.dataId);return v.values=y,A}let d=he().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,f;return d?f=new Qi(t,l.shape,u.shape,n):f=new ui(e,l.shape,u.shape),c.runWebGLProgram(f,[l,u],p)}}function Nd(e,t=!1){if(e==="linear")return t?rre:Jne;if(e==="relu")return t?ore:ere;if(e==="elu")return t?sre:Qne;if(e==="relu6")return t?are:tre;if(e==="prelu")return t?ZF:XF;if(e==="leakyrelu")return t?KF:qF;if(e==="sigmoid")return t?ire:nre;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var mv=class{constructor(t,n,r,s=!1,o=!1,a=!1,i=null,l=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=r,this.enableShapeUniforms=Xn(this.outputShape.length);let c=s?t[1]:t[2],p=Math.ceil(c/2),d=s?"i * 2, rc.y":"rc.y, i * 2",f=o?"rc.z, i * 2":"i * 2, rc.z",h=s?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],m=o?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",x="";i&&(l?g=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:u?g=`vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${i} }`:g=`vec4 activation(vec4 x) { ${i} }`,x="result = activation(result);");let y=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),l&&this.variableNames.push("preluActivationWeights"),u&&this.variableNames.push("leakyreluAlpha");let b="rc.x",A="rc.x";t[0]`The new shape (${l}) has ${u} elements and the old shape (${s.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(s.dataId);return c.isPacked&&!zm(s.shape,l)&&!(c.texture!==null&&zm(c.shape,l))?gre(s,l,a):(a.incRef(s.dataId),{dataId:s.dataId,shape:l,dtype:s.dtype})}var xre={kernelName:Up,backendName:"webgl",kernelFunc:$e};var RS=class{constructor(t,n){this.variableNames=["x"];let{windowSize:r,batchSize:s,inSize:o,outSize:a}=t;this.outputShape=[s,a];let i=Math.floor(r/4)*4,l=r%4,u="sumValue += dot(values, ones);";if(n!=null){let p=1/n;u=`sumValue += dot(values * ${C.isInt(p)?p.toPrecision(2):p}, ones);`}let c="";o%r>0&&(c=` if (inIdx < 0 || inIdx >= ${o}) { return 0.0; } `),this.userCode=` const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { ${c} return getX(batch, inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * ${r}; float sumValue = 0.0; for (int i = 0; i < ${i}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${u} } int inIdx = inOffset + ${i}; if (${l===1}) { vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0); ${u} } else if (${l===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), 0.0, 0.0); ${u} } else if (${l===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), 0.0); ${u} } setOutput(sumValue); } `}};var JF=class{constructor(t,n){this.variableNames=["x"];let{windowSize:r,batchSize:s,inSize:o,outSize:a}=t;this.outputShape=[s,a];let i="0.0",l="";n==="prod"?i="1.0":n==="min"?(i="1.0 / 1e-20",l="min"):n==="max"&&(i="-1.0 / 1e-20",l="max");let u=`${n}(${n}(${n}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;n==="sum"?u="sumValue":n==="prod"?u="prodValue":n==="all"?u="allValue":n==="any"&&(u="anyValue");let c=Math.floor(r/4)*4,p=r%4,d=` if (${n==="sum"}) { sumValue += dot(values, ones); } else if (${n==="prod"}) { vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); prodValue *= tmp[0] * tmp[1]; } else { minMaxValue = ${l}(values, minMaxValue); if (${n==="min"} || ${n==="max"}) { minMaxValue = ${l}(values, minMaxValue); bvec4 isNaN = isnan(values); if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) { minMaxValue = vec4(NAN); } } } `,f="vec4";n==="all"?(i="1.0",d=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); `,f="bvec4"):n==="any"&&(i="0.0",d=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); `,f="bvec4");let h="";o%r>0&&(h=` if (inIdx < 0 || inIdx >= ${o}) { return initializationValue; } `),this.userCode=` const float initializationValue = ${i}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { ${h} return getX(batch, inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * ${r}; vec4 minMaxValue = vec4(${i}); float prodValue = 1.0; float sumValue = 0.0; float allValue = 1.0; float anyValue = 0.0; for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; ${f} values = ${f}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${d} } int inIdx = inOffset + ${c}; if (${p===1}) { ${f} values = ${f}( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); ${d} } else if (${p===2}) { ${f} values = ${f}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); ${d} } else if (${p===3}) { ${f} values = ${f}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); ${d} } setOutput(${u}); } `}};function iXe(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],r=M.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function la(e,t,n,r){let s=iXe(e.shape),o=e;for(let a=0;a6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let s=0;s6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let s=Ct(this.rank),o=WF("rc",this.rank),a=new Array(this.rank);for(let c=0;c=2&&c>=2&&b,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${m}) and (${g}).`);let v=(x>y?e.shape.slice(0,-2):t.shape.slice(0,-2)).concat([f,h]);C.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`);let w=n?[x,p,f]:[x,f,p],k=r?[y,h,d]:[y,d,h],I=$e({inputs:{x:e},backend:s,attrs:{shape:w}}),N=$e({inputs:{x:t},backend:s,attrs:{shape:k}}),T=[I,N],_=Math.max(x,y),R=n?I.shape[1]:I.shape[2],S=o!=null,F=a!=null,B=l==="leakyrelu",W=l!=null?Nd(l,!0):null,q=S||F||B||W!=null,K;if((f===1||h===1)&&R>t8&&q===!1){let Q=I,ee=N;n&&(Q=On({inputs:{x:I},backend:s,attrs:{perm:[0,2,1]}}),T.push(Q)),r&&(ee=On({inputs:{x:N},backend:s,attrs:{perm:[0,2,1]}}),T.push(ee));let ue=h!==1,re=h===1,de=Q;ue&&(de=$e({inputs:{x:Q},backend:s,attrs:{shape:[_,R,1]}}),T.push(de));let fe=h===1?2:1,me=ee;re&&(me=$e({inputs:{x:ee},backend:s,attrs:{shape:[_,1,R]}}),T.push(me));let xe=gv({inputs:{a:de,b:me},backend:s});K=Wm({inputs:{x:xe},backend:s,attrs:{axis:fe,keepDims:!0}}),T.push(xe)}else{let Q=Or(e.dtype,t.dtype),ee=new mv(w,k,[_,f,h],n,r,S,W,F,B),ue=[I,N];if(o!=null&&ue.push(o),F&&ue.push(a),B){let re=s.makeTensorInfo([],"float32",C.createScalarValue(i,"float32"));ue.push(re),T.push(re)}K=s.runWebGLProgram(ee,ue,Q)}let J=$e({inputs:{x:K},backend:s,attrs:{shape:v}});T.push(K);for(let Q of T)s.disposeIntermediateTensorInfo(Q);return J}function uXe(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o,bias:a,preluActivationWeights:i}=t,{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:p}=r;return Gm({a:s,b:o,transposeA:l,transposeB:u,backend:n,bias:a,preluActivationWeights:i,leakyreluAlpha:p,activation:c})}var vre={kernelName:$h,backendName:"webgl",kernelFunc:uXe};var wre="return abs(x);";function cXe(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&r.dtype!=="complex64"){let o=n.texData.get(r.dataId),a=CS(o.values);return n.makeTensorInfo(r.shape,r.dtype,a)}let s;return he().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new Ji(r.shape,wre):s=new $o(r.shape,wre),n.runWebGLProgram(s,[r],r.dtype)}var kre={kernelName:pp,backendName:"webgl",kernelFunc:cXe};var pXe=Qr+` if (abs(x) > 1.) { return NAN; } return acos(x); `,dXe=Xe({opSnippet:pXe}),Ire={kernelName:eu,backendName:"webgl",kernelFunc:dXe};var fXe=Qr+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,hXe=Xe({opSnippet:fXe}),Cre={kernelName:tu,backendName:"webgl",kernelFunc:hXe};var Sre="return a + b;",mXe=Qt({opSnippet:Sre,packedOpSnippet:Sre,supportsComplex:!0,cpuKernelImpl:cne}),Nre={kernelName:Ri,backendName:"webgl",kernelFunc:mXe};var n8=class{constructor(t,n){this.outputShape=[],this.outputShape=t,this.variableNames=n.map((o,a)=>`T${a}`);let r=[];this.variableNames.forEach(o=>{r.push(`float v${o} = get${o}AtOutCoords();`)});let s=this.variableNames.map(o=>`v${o}`).join(" + ");this.userCode=` void main() { ${r.join(` `)} float result = ${s}; setOutput(result); } `}};var r8=class{constructor(t,n){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=n.map((o,a)=>`T${a}`);let r=[];this.variableNames.forEach(o=>{r.push(`vec4 v${o} = get${o}AtOutCoords();`)});let s=this.variableNames.map(o=>`v${o}`).join(" + ");this.userCode=` void main() { ${r.join(` `)} vec4 result = ${s}; setOutput(result); } `}};function DS(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return lr({inputs:{x:r[0]},backend:n});if(r.length>he().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let l=Math.floor(r.length/2),u=DS({inputs:r.slice(0,l),backend:n}),c=DS({inputs:r.slice(l),backend:n});return DS({inputs:[u,c],backend:n})}let s=r.map(l=>l.dtype).reduce((l,u)=>Or(l,u)),o=r.map(l=>l.shape),i=he().getBool("WEBGL_PACK")?new r8(r[0].shape,o):new n8(r[0].shape,o);return n.runWebGLProgram(i,r,s)}var Tre={kernelName:dp,backendName:"webgl",kernelFunc:DS};function gXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=s.shape.length,l=C.parseAxisParam(o,s.shape),u=l,c=M.getAxesPermutation(u,i),p=s;c!=null&&(p=On({inputs:{x:s},backend:n,attrs:{perm:c}}),u=M.getInnerMostAxes(u.length,i)),M.assertAxesAreInnerMostDims("all",u,i);let[d,f]=M.computeOutAndReduceShapes(p.shape,u),h=C.sizeFromShape(f),m=$e({inputs:{x:p},backend:n,attrs:{shape:[-1,h]}}),g=la(m,m.dtype,"all",n),x;if(a){let y=M.expandShapeToKeepDim(d,l);x=$e({inputs:{x:g},backend:n,attrs:{shape:y}})}else x=$e({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),c!=null&&n.disposeIntermediateTensorInfo(p),x}var _re={kernelName:gx,backendName:"webgl",kernelFunc:gXe};function xXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=s.shape.length,l=C.parseAxisParam(o,s.shape),u=l,c=M.getAxesPermutation(u,i),p=s;c!=null&&(p=On({inputs:{x:s},backend:n,attrs:{perm:c}}),u=M.getInnerMostAxes(u.length,i)),M.assertAxesAreInnerMostDims("any",u,i);let[d,f]=M.computeOutAndReduceShapes(p.shape,u),h=C.sizeFromShape(f),m=$e({inputs:{x:p},backend:n,attrs:{shape:[-1,h]}}),g=la(m,m.dtype,"any",n),x;if(a){let y=M.expandShapeToKeepDim(d,l);x=$e({inputs:{x:g},backend:n,attrs:{shape:y}})}else x=$e({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),c!=null&&n.disposeIntermediateTensorInfo(p),x}var Ere={kernelName:xx,backendName:"webgl",kernelFunc:xXe};var s8=class{constructor(t,n,r){this.variableNames=["A"];let{windowSize:s,batchSize:o,outSize:a}=t;r||this.variableNames.push("bestIndicesA"),this.outputShape=[o,a];let i=n==="max"?">":"<",l=r?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * ${s}; int bestIndex = inOffset; float bestValue = getA(batch, bestIndex); for (int i = 0; i < ${s}; i++) { int inIdx = ${l}; float candidate = getA(batch, inIdx); if (candidate ${i} bestValue) { bestValue = candidate; bestIndex = inIdx; } } setOutput(float(bestIndex)); } `}};var o8=class{constructor(t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,C.assert(t.length>2,()=>`Packed arg${r.charAt(0).toUpperCase()+r.slice(1)} supports only inputs with rank above 2.`);let o=t[t.length-1],a=Math.ceil(o/n);this.outputShape=t.slice(0,-1),a>1&&this.outputShape.push(a),s||this.variableNames.push("bestIndicesA");let i=this.outputShape,l=i.length,u=Ct(l),c=ir("coords",l),p,d;if(a===1){d=l+1;let I=Ct(d);p=` ${I} sourceLocR = ${I}(${c.join()}, 0); ++${c[l-1]}; ${I} sourceLocG = ${I}(${c.join()}, 0); ++${c[l-2]}; ${I} sourceLocA = ${I}(${c.join()}, 0); --${c[l-1]}; ${I} sourceLocB = ${I}(${c.join()}, 0); --${c[l-2]};`}else d=l,p=` ${u} sourceLocR = coords; ++${c[l-1]}; ${u} sourceLocG = coords; ++${c[l-2]}; ${u} sourceLocA = coords; --${c[l-1]}; ${u} sourceLocB = coords; --${c[l-2]};`;let f=["x","y","z","w","u","v"].slice(0,d),h="."+f[d-1],m=f.map(I=>"int "+I),g=ir("sourceLocR",d-1).concat("inIdx.r"),x=ir("sourceLocG",d-1).concat("inIdx.g"),y=ir("sourceLocB",d-1).concat("inIdx.b"),b=ir("sourceLocA",d-1).concat("inIdx.a"),A=r==="max"?"greaterThan":"lessThan",v=s?"":` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${y.join()}), getBestIndicesAChannel(${b.join()})));`,w=`vec4( getAChannel(${g.join()}), hasNextCol ? getAChannel(${x.join()}) : 0., hasNextRow ? getAChannel(${y.join()}) : 0., hasNextRow && hasNextCol ? getAChannel(${b.join()}) : 0.)`,k=s?"":` float getBestIndicesAChannel(${m.join()}) { return getChannel(getBestIndicesA(${f.join()}), vec2(${f.slice(-2).join()})); }`;this.userCode=` float getAChannel(${m.join()}) { return getChannel(getA(${f.join()}), vec2(${f.slice(-2).join()})); } ${k} void main() { ${u} coords = getOutputCoords(); bool hasNextCol = ${c[l-1]} < ${i[l-1]-1}; bool hasNextRow = ${c[l-2]} < ${i[l-2]-1}; ${p} ivec4 srcIdx = ivec4(sourceLocR${h}, sourceLocG${h}, sourceLocB${h}, sourceLocA${h}) * ${n}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = ${w}; for (int i = 0; i < ${n}; i++) { inIdx = srcIdx; ${v} vec4 candidate = ${w}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(${A}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); bestValue = vec4(replace.x ? candidate.x : bestValue.x, replace.y ? candidate.y : bestValue.y, replace.z ? candidate.z : bestValue.z, replace.w ? candidate.w : bestValue.w); bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace)); srcIdx++; } setOutput(bestIndex); } `}};function Rre(e,t,n,r=null){let s=t.shape[0],o=t.shape[1];r!=null&&(s=r.shape[0],o=r.shape[1]);let a=M.computeOptimalWindowSize(o),i={windowSize:a,inSize:o,batchSize:s,outSize:Math.ceil(o/a)},l=new s8(i,n,r==null),u=[t];r!=null&&u.push(r);let c=e.runWebGLProgram(l,u,"int32");if(c.shape[1]===1)return c;let p=Rre(e,t,n,c);return e.disposeIntermediateTensorInfo(c),p}function Dre(e,t,n,r=null){let s=r!=null?r.shape:t.shape,o=s[s.length-1],a=M.computeOptimalWindowSize(o),i=new o8(s,a,n,r==null),l=r==null?[t]:[t,r],u=e.runWebGLProgram(i,l,"int32");if(u.shape.length===t.shape.length){let c=Dre(e,t,n,u);return e.disposeIntermediateTensorInfo(u),c}return u}function $S(e,t,n,r){let s=[n];if(M.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),s,t.shape.length),!he().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let o=[],a=e.texData.get(t.dataId),i=a!==null&&a.isPacked,l=t;i&&(l=e.unpackTensor(t),o.push(l));let[u,c]=M.computeOutAndReduceShapes(l.shape,s),p=C.sizeFromShape(c),d=$e({inputs:{x:l},backend:e,attrs:{shape:[-1,p]}});o.push(d);let f=Rre(e,d,r);o.push(f);let h=$e({inputs:{x:f},backend:e,attrs:{shape:u}});return o.forEach(m=>e.disposeIntermediateTensorInfo(m)),h}return Dre(e,t,r)}function yXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o}=r,a=C.parseAxisParam(o,s.shape),i=M.getAxesPermutation(a,s.shape.length),l=s,u=[];i!=null&&(l=On({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(l),a=M.getInnerMostAxes(a.length,l.shape.length)),M.assertAxesAreInnerMostDims("argMax",[a[0]],l.shape.length);let c=$S(n,l,a[0],"max");return u.forEach(p=>n.disposeIntermediateTensorInfo(p)),c}var $re={kernelName:fp,backendName:"webgl",kernelFunc:yXe};function bXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o}=r,a=C.parseAxisParam(o,s.shape),i=M.getAxesPermutation(a,s.shape.length),l=s,u=[];i!=null&&(l=On({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(l),a=M.getInnerMostAxes(a.length,l.shape.length)),M.assertAxesAreInnerMostDims("argMin",[a[0]],l.shape.length);let c=$S(n,l,a[0],"min");return u.forEach(p=>n.disposeIntermediateTensorInfo(p)),c}var Fre={kernelName:hp,backendName:"webgl",kernelFunc:bXe};var AXe=Qr+` if (abs(x) > 1.) { return NAN; } return asin(x); `,vXe=Xe({opSnippet:AXe}),Ore={kernelName:nu,backendName:"webgl",kernelFunc:vXe};var wXe=Qr+"return log(x + sqrt(x * x + 1.0));",kXe=Xe({opSnippet:wXe}),Pre={kernelName:ru,backendName:"webgl",kernelFunc:kXe};var IXe=Qr+` return atan(x); `,CXe=Xe({opSnippet:IXe}),Mre={kernelName:su,backendName:"webgl",kernelFunc:CXe};var SXe=dre+` return atan(a, b); `,NXe=` vec4 result = atan(a, b); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+fre+` return result; `,TXe=Qt({opSnippet:SXe,packedOpSnippet:NXe}),zre={kernelName:au,backendName:"webgl",kernelFunc:TXe};var _Xe=Qr+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,EXe=Xe({opSnippet:_Xe}),Lre={kernelName:ou,backendName:"webgl",kernelFunc:EXe};var Dl=class{constructor(t,n,r,s=!1,o=!1){if(this.variableNames=["x"],n==="avg"&&r)throw new Error("Cannot compute positions for average pool.");let a=t.filterWidth,i=t.strideHeight,l=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,p=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=t.padInfo.top,h=t.padInfo.left;this.outputShape=t.outShape;let m=n==="avg",g=`((batch * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + d`,x=`(xR * ${t.inWidth} + xC) * ${t.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),r){let I=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${l}); const ivec2 pads = ivec2(${f}, ${h}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; float avgValue = 0.0; for (int wR = 0; wR < ${p}; wR += ${u}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC += ${c}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${t.inWidth}) { continue; } float value = getX(batch, xR, xC, d); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${I} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${s?o?g:x:`wR * ${d} + wC`}; } } } setOutput(float(minMaxPosition)); } `;return}let b="max",A=`${n}(${n}(${n}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;n==="avg"&&(A="avgValue / count");let v=Math.floor(a/4)*4,w=a%4,k=` if (${m}) { avgValue += dot(values, ones); } else { minMaxValue = ${b}(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${l}); const ivec2 pads = ivec2(${f}, ${h}); const float initializationValue = ${y}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xR, int xC, int d) { if (xC < 0 || xC >= ${t.inWidth}) { return initializationValue; } count += 1.0; return getX(batch, xR, xC, d); } void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined vec4 minMaxValue = vec4(${y}); float avgValue = 0.0; count = 0.0; for (int wR = 0; wR < ${p}; wR += ${u}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int wC = 0; wC < ${v}; wC += 4) { int xC = xCCorner + wC * ${c}; vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), getValue(batch, xR, xC + 2 * ${c}, d), getValue(batch, xR, xC + 3 * ${c}, d) ); ${k} } int xC = xCCorner + ${v}; if (${w===1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); ${k} } else if (${w===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), initializationValue, initializationValue ); ${k} } else if (${w===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), getValue(batch, xR, xC + 2 * ${c}, d), initializationValue ); ${k} } } setOutput(${A}); } `}},Um=class{constructor(t,n,r,s=!1,o=!1){if(this.variableNames=["x"],n==="avg"&&r)throw new Error("Cannot compute positions for average pool.");let a=t.filterWidth,i=t.strideDepth,l=t.strideHeight,u=t.strideWidth,c=t.dilationDepth,p=t.dilationHeight,d=t.dilationWidth,f=t.effectiveFilterDepth,h=t.effectiveFilterHeight,m=t.effectiveFilterWidth,g=t.padInfo.front,x=t.padInfo.top,y=t.padInfo.left;this.outputShape=t.outShape;let b=n==="avg",A="0.0";if(b||(A="-1.0 / 1e-20"),r){let T=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${l}, ${u}); const ivec3 pads = ivec3(${g}, ${x}, ${y}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; for (int wD = 0; wD < ${f}; wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${t.inDepth}) { continue; } for (int wR = 0; wR < ${h}; wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int wC = 0; wC < ${m}; wC += ${d}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${t.inWidth}) { continue; } float value = getX(batch, xD, xR, xC, ch); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${T} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${s?o?`(((batch * ${t.inDepth} + xD) * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`((xD * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`wD * ${h} * ${m} + wR * ${m} + wC`}; } } } } setOutput(float(minMaxPosition)); } `;return}let v="max",w=`${n}(${n}(${n}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;n==="avg"&&(w="avgValue / count");let k=Math.floor(a/4)*4,I=a%4,N=` if (${b}) { avgValue += dot(values, ones); } else { minMaxValue = ${v}(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(${i}, ${l}, ${u}); const ivec3 pads = ivec3(${g}, ${x}, ${y}); const float initializationValue = ${A}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xD, int xR, int xC, int ch) { if (xC < 0 || xC >= ${t.inWidth}) { return initializationValue; } count += 1.0; return getX(batch, xD, xR, xC, ch); } void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). // ? = to be determined vec4 minMaxValue = vec4(${A}); float avgValue = 0.0; count = 0.0; for (int wD = 0; wD < ${f}; wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${t.inDepth}) { continue; } for (int wR = 0; wR < ${h}; wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int wC = 0; wC < ${k}; wC += 4) { int xC = xCCorner + wC * ${d}; vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${d}, ch), getValue(batch, xD, xR, xC + 2 * ${d}, ch), getValue(batch, xD, xR, xC + 3 * ${d}, ch) ); ${N} } int xC = xCCorner + ${k}; if (${I===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); ${N} } else if (${I===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${d}, ch), initializationValue, initializationValue ); ${N} } else if (${I===3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${d}, ch), getValue(batch, xD, xR, xC + 2 * ${d}, ch), initializationValue ); ${N} } } setOutput(${w}); } } `}};function RXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;Rl(s,"avgPool");let{filterSize:o,strides:a,pad:i,dimRoundingMode:l}=r,u=1;C.assert(M.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=M.computePool2DInfo(s.shape,o,a,u,i,l);if(c.filterWidth===1&&c.filterHeight===1&&C.arraysEqual(c.inShape,c.outShape))return lr({inputs:{x:s},backend:n});let p=new Dl(c,"avg",!1);return n.runWebGLProgram(p,[s],"float32")}var Bre={kernelName:mp,backendName:"webgl",kernelFunc:RXe};function DXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=r,c=[1,1,1],p=M.computePool3DInfo(s.shape,o,a,c,i,l,u),d=new Um(p,"avg",!1);return n.runWebGLProgram(d,[s],"float32")}var Vre={kernelName:gp,backendName:"webgl",kernelFunc:DXe};var a8=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let n=t.filterHeight,r=t.filterWidth,s=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,l=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=l-1-t.padInfo.top,p=u-1-t.padInfo.left,d=1/(n*r);this.userCode=` const ivec2 pads = ivec2(${c}, ${p}); const float avgMultiplier = float(${d}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${l}; wR += ${a}) { float dyR = float(dyRCorner + wR) / ${s}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${u}; wC+= ${i}) { float dyC = float(dyCCorner + wC) / ${o}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); dotProd += dyValue * avgMultiplier; } } setOutput(dotProd); } `}},i8=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let n=t.filterDepth,r=t.filterHeight,s=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,l=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,p=t.effectiveFilterDepth,d=t.effectiveFilterHeight,f=t.effectiveFilterWidth,h=p-1-t.padInfo.front,m=d-1-t.padInfo.top,g=f-1-t.padInfo.left,x=1/(n*r*s);this.userCode=` const ivec3 pads = ivec3(${h}, ${m}, ${g}); const float avgMultiplier = float(${x}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < ${p}; wD += ${l}) { float dyD = float(dyDCorner + wD) / ${o}.0; if (dyD < 0.0 || dyD >= ${t.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${d}; wR += ${u}) { float dyR = float(dyRCorner + wR) / ${a}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${f}; wC += ${c}) { float dyC = float(dyCCorner + wC) / ${i}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); dotProd += dyValue * avgMultiplier; } } } setOutput(dotProd); } `}};function $Xe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o,{filterSize:i,strides:l,pad:u,dimRoundingMode:c}=r,p=[1,1,1],d=M.computePool3DInfo(a.shape,i,l,p,u,c),f=new i8(d);return n.runWebGLProgram(f,[s],a.dtype)}var Wre={kernelName:bx,backendName:"webgl",kernelFunc:$Xe};function FXe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o;Rl([s,o],"avgPoolGrad");let{filterSize:i,strides:l,pad:u}=r,c=M.computePool2DInfo(a.shape,i,l,1,u),p=new a8(c);return n.runWebGLProgram(p,[s],a.dtype)}var Gre={kernelName:yx,backendName:"webgl",kernelFunc:FXe};function OXe(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:o}=t,{transposeA:a,transposeB:i}=r;return Gm({a:s,b:o,transposeA:a,transposeB:i,backend:n})}var Ure={kernelName:xp,backendName:"webgl",kernelFunc:OXe};var l8=class{constructor(t,n,r,s,o,a){this.outputShape=[],this.variableNames=["x","mean","variance"],M.assertAndGetBroadcastShape(t,n),M.assertAndGetBroadcastShape(t,r);let i="0.0";s!=null&&(M.assertAndGetBroadcastShape(t,s),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let l="1.0";o!=null&&(M.assertAndGetBroadcastShape(t,o),this.variableNames.push("scale"),l="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); float variance = getVarianceAtOutCoords(); float offset = ${i}; float scale = ${l}; float inv = scale * inversesqrt(variance + float(${a})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } `}};var u8=class{constructor(t,n,r,s,o,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],M.assertAndGetBroadcastShape(t,n),M.assertAndGetBroadcastShape(t,r);let i="vec4(0.0)";s!=null&&(M.assertAndGetBroadcastShape(t,s),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let l="vec4(1.0)";o!=null&&(M.assertAndGetBroadcastShape(t,o),this.variableNames.push("scale"),l="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${l}; vec4 x = getXAtOutCoords(); vec4 mean = getMeanAtOutCoords(); vec4 variance = getVarianceAtOutCoords(); vec4 inv = scale * inversesqrt(variance + vec4(${a})); setOutput((x - mean) * inv + offset); } `}};var PXe=({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:s,variance:o,offset:a,scale:i}=e;C.assert(s.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),C.assert(a==null||s.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),C.assert(i==null||s.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let u=[r,s,o],c=null;a!=null&&(c=a.shape,u.push(a));let p=null;i!=null&&(p=i.shape,u.push(i));let d=he().getBool("WEBGL_PACK_NORMALIZATION")?new u8(r.shape,s.shape,o.shape,c,p,l):new l8(r.shape,s.shape,o.shape,c,p,l);return t.runWebGLProgram(d,u,u[0].dtype)},jre={kernelName:Tp,backendName:"webgl",kernelFunc:PXe};var c8=class{constructor(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;let n=Ct(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let r=MXe(this.rank),s,o=t.map((a,i)=>`sourceLoc.${p8[i]} = start[${i}] + coords.${p8[i]};`);s=` ${n} sourceLoc; ${n} coords = getOutputCoords(); ${o.join(` `)} `,this.userCode=` void main() { ${s} setOutput(getSource(${r})); } `}},p8=["x","y","z","w","u","v"];function MXe(e){if(e===1)return"sourceLoc";if(e<=6)return p8.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var d8=class{constructor(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=Ct(this.rank),r=ir("coords",this.rank),s=ir("sourceLoc",this.rank),o=this.rank===1?"sourceLoc":`vec2(${s.slice(-2).join()})`,a=`getChannel(getSource(${s.join()}), ${o})`,i=` result.x = ${a}; if (++${r[this.rank-1]} < ${t[this.rank-1]}) { ++${s[this.rank-1]}; result.y = ${a}; --${s[this.rank-1]}; } `,l=this.rank===1?"":` --${r[this.rank-1]}; if (++${r[this.rank-2]} < ${t[this.rank-2]}) { ++${s[this.rank-2]}; result.z = ${a}; if (++${r[this.rank-1]} < ${t[this.rank-1]}) { ++${s[this.rank-1]}; result.w = ${a}; } } `,u=this.rank<=4?`sourceLoc = coords + ${n}(${t.map((c,p)=>`start[${p}]`).join()});`:t.map((c,p)=>`${s[p]} = ${r[p]} + start[${p}];`).join(` `);this.userCode=` void main() { ${n} coords = getOutputCoords(); ${n} sourceLoc; ${u} vec4 result = vec4(0.); ${i} ${l} setOutput(result); } `}};function zXe(e,t,n,r){let s=r.texData.get(e.dataId),o=r.makeTensorInfo(n,e.dtype),a=r.texData.get(o.dataId);Object.assign(a,s),a.refCount=1,a.shape=n,a.dtype=e.dtype;let i=Cs.computeFlatOffset(t,C.computeStrides(e.shape));s.slice&&(i+=s.slice.flatOffset),a.slice={flatOffset:i,origDataId:s.slice&&s.slice.origDataId||e.dataId};let l=r.dataRefCount.get(a.slice.origDataId)||1;return r.dataRefCount.set(a.slice.origDataId,l+1),o}function el(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,size:a}=r,[i,l]=Cs.parseSliceParams(s,o,a);if(Cs.assertParamsValid(s,i,l),C.sizeFromShape(l)===0)return n.makeTensorInfo(l,s.dtype,[]);if(n.shouldExecuteOnCPU([s])||s.dtype==="string"){let p=n.texData.get(s.dataId),d=Pne(p.values,i,l,s.shape,s.dtype);return n.makeTensorInfo(l,s.dtype,d)}let{isPacked:u}=n.texData.get(s.dataId),c=Cs.isSliceContinous(s.shape,i,l);if(u||!c){let p=he().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new d8(l):new c8(l),d=[i];return n.runWebGLProgram(p,[s],s.dtype,d)}return n.uploadToGPU(s.dataId),zXe(s,i,l,n)}var Hre={kernelName:Xp,backendName:"webgl",kernelFunc:el};var LXe=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,crops:a}=r;C.assert(s.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=o.reduce((y,b)=>y*b),l=M.getReshaped(s.shape,o,i),u=M.getPermuted(l.length,o.length),c=M.getReshapedPermuted(s.shape,o,i),p=M.getSliceBeginCoords(a,o.length),d=M.getSliceSize(c,a,o.length),f=[],h=$e({inputs:{x:s},backend:n,attrs:{shape:l}}),m=On({inputs:{x:h},backend:n,attrs:{perm:u}}),g=$e({inputs:{x:m},backend:n,attrs:{shape:c}}),x=el({inputs:{x:g},backend:n,attrs:{begin:p,size:d}});return f.push(h),f.push(m),f.push(g),f.forEach(y=>n.disposeIntermediateTensorInfo(y)),x},qre={kernelName:yp,backendName:"webgl",kernelFunc:LXe};function BXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:o}=t,{size:a}=r,i=n.readSync(s.dataId),l=n.readSync(o.dataId),u=IS(i,l,o.dtype,o.shape,a);return n.makeTensorInfo([a],o.dtype,u)}var Kre={kernelName:Ax,backendName:"webgl",kernelFunc:BXe};var VXe="return float(a != b);",f8=Qt({opSnippet:VXe,cpuKernelImpl:Rne,dtype:"bool"}),Xre={kernelName:Dh,backendName:"webgl",kernelFunc:f8};function Ac(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.texData.get(r.dataId);return lr({inputs:{x:s.complexTensorInfos.real},backend:n})}var Zre={kernelName:Xx,backendName:"webgl",kernelFunc:Ac};var WXe="return float(int(x));";function Yre(e,t){let n=new $o(e.shape,WXe),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function h8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:o}=r;if(o==="complex64"){if(s.dtype==="complex64")return lr({inputs:{x:s},backend:n});let a=fn(s.shape),i=h8({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),l=Fo({inputs:{real:i,imag:a},backend:n});return a.dispose(),n.disposeIntermediateTensorInfo(i),l}if(s.dtype==="complex64"){let a=Ac({inputs:{input:s},backend:n}),i=h8({inputs:{x:a},backend:n,attrs:{dtype:o}});return n.disposeIntermediateTensorInfo(a),i}if(!C.hasEncodingLoss(s.dtype,o)){let a=lr({inputs:{x:s},backend:n});return{dataId:a.dataId,shape:a.shape,dtype:o}}if(o==="int32")return Yre(s,n);if(o==="bool"){let a=n.makeTensorInfo([],"bool",C.getTypedArrayFromDType("bool",1)),l=f8({inputs:{a:s,b:a},backend:n});return n.disposeIntermediateTensorInfo(a),l}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${o}`)}var Jre={kernelName:bl,backendName:"webgl",kernelFunc:h8};var Qre="return ceil(x);",GXe=Xe({opSnippet:Qre,packedOpSnippet:Qre,cpuKernelImpl:dne}),ese={kernelName:iu,backendName:"webgl",kernelFunc:GXe};var m8=class{constructor(t){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=` void main() { float value = getAAtOutCoords(); if (isnan(value)) { setOutput(value); return; } setOutput(clamp(value, minVal, maxVal)); } `}};var g8=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=` void main() { vec4 value = getAAtOutCoords(); if (any(isnan(value))) { setOutput(value); return; } setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } `}};function UXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:o,clipValueMax:a}=r,i;he().getBool("WEBGL_PACK_CLIP")?i=new g8(s.shape):i=new m8(s.shape);let l=[[o],[a]];return n.runWebGLProgram(i,[s],s.dtype,l)}var tse={kernelName:lu,backendName:"webgl",kernelFunc:UXe};var x8=class{constructor(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); float mx = max(re, im); // sadly the length function in glsl is not underflow-safe // (at least not on Intel GPUs). So the safe solution is // to ensure underflow-safety in all cases. setOutput( mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } `}};function nse(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function jXe(e){let{inputs:t,backend:n}=e,{x:r}=t,s=n.texData.get(r.dataId),o=new x8(r.shape),a=[nse(r,s.complexTensorInfos.real),nse(r,s.complexTensorInfos.imag)];return n.runWebGLProgram(o,a,a[0].dtype)}var rse={kernelName:bp,backendName:"webgl",kernelFunc:jXe};var y8=class{constructor(t){this.outputShape=[],this.outputShape=M.computeOutShape(t,1),this.variableNames=t.map((a,i)=>`T${i}`);let n=new Array(t.length-1);n[0]=t[0][1];for(let a=1;a`T${g}`);let l=new Array(t.length-1);l[0]=t[0][n];for(let m=1;m= ${l[m-1]}) { return getChannel( getT${m}(${FS(i,u,g)}), vec2(${FS(c,u,g)})); }`}let f=l.length,h=l[l.length-1];d+=` return getChannel( getT${f}(${FS(i,u,h)}), vec2(${FS(c,u,h)}));`,this.userCode=` float getValue(${i.map(m=>"int "+m)}) { ${d} } void main() { ${o} coords = getOutputCoords(); vec4 result = vec4(getValue(${a}), 0., 0., 0.); ${a[s-1]} = ${a[s-1]} + 1; if (${a[s-1]} < ${r[s-1]}) { result.g = getValue(${a}); } ${a[s-2]} = ${a[s-2]} + 1; if (${a[s-2]} < ${r[s-2]}) { result.a = getValue(${a}); } ${a[s-1]} = ${a[s-1]} - 1; if (${a[s-2]} < ${r[s-2]} && ${a[s-1]} < ${r[s-1]}) { result.b = getValue(${a}); } setOutput(result); } `}};function FS(e,t,n){let r=e.indexOf(t);return e.map((o,a)=>a===r?`${o} - ${n}`:o).join()}function jm(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.texData.get(r.dataId);return lr({inputs:{x:s.complexTensorInfos.imag},backend:n})}var sse={kernelName:Mx,backendName:"webgl",kernelFunc:jm};function Hm(e,t,n){let r=e[0].dtype;if(r==="complex64"){let c=e.map(m=>Ac({inputs:{input:m},backend:n})),p=e.map(m=>jm({inputs:{input:m},backend:n})),d=Hm(c,t,n),f=Hm(p,t,n),h=Fo({inputs:{real:d,imag:f},backend:n});return c.forEach(m=>n.disposeIntermediateTensorInfo(m)),p.forEach(m=>n.disposeIntermediateTensorInfo(m)),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),h}let s=n.shouldExecuteOnCPU(e);if(r==="string"&&(s=!0),s){let c=e.map(x=>{let y=C.sizeFromShape(x.shape.slice(t));return $e({inputs:{x},backend:n,attrs:{shape:[-1,y]}})}),p=c.map(x=>({vals:n.readSync(x.dataId),shape:x.shape})),d=M.computeOutShape(c.map(x=>x.shape),1),f=c[0].shape[0]===1,h=fne(p,d,r,f),m=M.computeOutShape(e.map(x=>x.shape),t),g=n.makeTensorInfo(m,r,h);return c.forEach(x=>n.disposeIntermediateTensorInfo(x)),g}if(e.length>he().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let c=Math.floor(e.length/2),p=Hm(e.slice(0,c),t,n),d=Hm(e.slice(c),t,n),f=Hm([p,d],t,n);return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),f}if(he().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let c=new b8(e.map(p=>p.shape),t);return n.runWebGLProgram(c,e,r)}let{tensors2D:o,outShape:a}=HXe(e,t,n),i=new y8(o.map(c=>c.shape)),l=n.runWebGLProgram(i,o,r);o.forEach(c=>n.disposeIntermediateTensorInfo(c));let u=$e({inputs:{x:l},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(l),u}function HXe(e,t,n){let r=M.computeOutShape(e.map(o=>o.shape),t);return{tensors2D:e.map(o=>$e({inputs:{x:o},attrs:{shape:[-1,C.sizeFromShape(o.shape.slice(t))]},backend:n})),outShape:r}}function A8(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r,o=C.parseAxisParam(s,t[0].shape)[0],a=M.computeOutShape(t.map(u=>u.shape),o);if(C.sizeFromShape(a)===0)return n.makeTensorInfo(a,t[0].dtype,[]);let i=t.filter(u=>C.sizeFromShape(u.shape)>0);if(i.length===1)return lr({inputs:{x:i[0]},backend:n});let l=i.map(u=>u.shape);return M.assertParamsConsistent(l,o),Hm(i,o,n)}var ose={kernelName:Ap,backendName:"webgl",kernelFunc:A8};var xv=class{constructor(t,n=!1,r=null,s=!1,o=!1){this.variableNames=["x","W"],this.outputShape=t.outShape;let a=t.padInfo.top,i=t.padInfo.left,l=t.strideHeight,u=t.strideWidth,c=t.dilationHeight,p=t.dilationWidth,d=t.filterHeight,f=t.filterWidth,h=Math.floor(t.inChannels/4)*4,m=t.inChannels%4,g=t.dataFormat==="channelsLast",x=g?1:2,y=g?2:3,b=g?3:1,A="",v="";r&&(s?A=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${r} }`:o?A=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${r} }`:A=` float activation(float x) { ${r} } `,v="result = activation(result);");let w=n?"result += getBiasAtOutCoords();":"";n&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),o&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${A} const ivec2 strides = ivec2(${l}, ${u}); const ivec2 pads = ivec2(${a}, ${i}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d2 = coords[${b}]; ivec2 xRCCorner = ivec2(coords[${x}], coords[${y}]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${d}; wR++) { int xR = xRCorner + wR * ${c}; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int wC = 0; wC < ${f}; wC++) { int xC = xCCorner + wC * ${p}; if (xC < 0 || xC >= ${t.inWidth}) { continue; } for (int d1 = 0; d1 < ${h}; d1 += 4) { vec4 wValues = vec4( getW(wR, wC, d1, d2), getW(wR, wC, d1 + 1, d2), getW(wR, wC, d1 + 2, d2), getW(wR, wC, d1 + 3, d2) ); if (${g}) { vec4 xValues = vec4( getX(batch, xR, xC, d1), getX(batch, xR, xC, d1 + 1), getX(batch, xR, xC, d1 + 2), getX(batch, xR, xC, d1 + 3) ); dotProd += dot(xValues, wValues); } else { vec4 xValues = vec4( getX(batch, d1, xR, xC), getX(batch, d1 + 1, xR, xC), getX(batch, d1 + 2, xR, xC), getX(batch, d1 + 3, xR, xC) ); dotProd += dot(xValues, wValues); } } if (${m===1}) { if (${g}) { dotProd += getX(batch, xR, xC, ${h}) * getW(wR, wC, ${h}, d2); } else { dotProd += getX(batch, ${h}, xR, xC) * getW(wR, wC, ${h}, d2); } } else if (${m===2}) { vec2 wValues = vec2( getW(wR, wC, ${h}, d2), getW(wR, wC, ${h} + 1, d2) ); if (${g}) { vec2 xValues = vec2( getX(batch, xR, xC, ${h}), getX(batch, xR, xC, ${h} + 1) ); dotProd += dot(xValues, wValues); } else { vec2 xValues = vec2( getX(batch, ${h}, xR, xC), getX(batch, ${h} + 1, xR, xC) ); dotProd += dot(xValues, wValues); } } else if (${m===3}) { vec3 wValues = vec3( getW(wR, wC, ${h}, d2), getW(wR, wC, ${h} + 1, d2), getW(wR, wC, ${h} + 2, d2) ); if (${g}) { vec3 xValues = vec3( getX(batch, xR, xC, ${h}), getX(batch, xR, xC, ${h} + 1), getX(batch, xR, xC, ${h} + 2) ); dotProd += dot(xValues, wValues); } else { vec3 xValues = vec3( getX(batch, ${h}, xR, xC), getX(batch, ${h} + 1, xR, xC), getX(batch, ${h} + 2, xR, xC) ); dotProd += dot(xValues, wValues); } } } } float result = dotProd; ${w} ${v} setOutput(result); } `}},v8=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let n=t.padInfo.front,r=t.padInfo.top,s=t.padInfo.left,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,l=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,p=t.filterDepth,d=t.filterHeight,f=t.filterWidth,h=Math.floor(t.inChannels/4)*4,m=t.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${o}, ${a}, ${i}); const ivec3 pads = ivec3(${n}, ${r}, ${s}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d2 = coords.u; ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xFCorner = xFRCCorner.x; int xRCorner = xFRCCorner.y; int xCCorner = xFRCCorner.z; // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; for (int wF = 0; wF < ${p}; wF++) { int xF = xFCorner + wF * ${l}; if (xF < 0 || xF >= ${t.inDepth}) { continue; } for (int wR = 0; wR < ${d}; wR++) { int xR = xRCorner + wR * ${u}; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int wC = 0; wC < ${f}; wC++) { int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${t.inWidth}) { continue; } for (int d1 = 0; d1 < ${h}; d1 += 4) { vec4 xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), getX(batch, xF, xR, xC, d1 + 2), getX(batch, xF, xR, xC, d1 + 3) ); vec4 wValues = vec4( getW(wF, wR, wC, d1, d2), getW(wF, wR, wC, d1 + 1, d2), getW(wF, wR, wC, d1 + 2, d2), getW(wF, wR, wC, d1 + 3, d2) ); dotProd += dot(xValues, wValues); } if (${m===1}) { dotProd += getX(batch, xF, xR, xC, ${h}) * getW(wF, wR, wC, ${h}, d2); } else if (${m===2}) { vec2 xValues = vec2( getX(batch, xF, xR, xC, ${h}), getX(batch, xF, xR, xC, ${h} + 1) ); vec2 wValues = vec2( getW(wF, wR, wC, ${h}, d2), getW(wF, wR, wC, ${h} + 1, d2) ); dotProd += dot(xValues, wValues); } else if (${m===3}) { vec3 xValues = vec3( getX(batch, xF, xR, xC, ${h}), getX(batch, xF, xR, xC, ${h} + 1), getX(batch, xF, xR, xC, ${h} + 2) ); vec3 wValues = vec3( getW(wF, wR, wC, ${h}, d2), getW(wF, wR, wC, ${h} + 1, d2), getW(wF, wR, wC, ${h} + 2, d2) ); dotProd += dot(xValues, wValues); } } } } setOutput(dotProd); } `}};var w8=class{constructor(t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=t,this.enableShapeUniforms=Xn(this.outputShape.length);let{dataFormat:r}=n,s=Vn(),o=r==="channelsLast",a=o?0:1,i=o?1:2,l=this.enableShapeUniforms?"if(blockIndex < outShape[1] && pos < outShape[0]) {":`if(blockIndex < ${t[1]} && pos < ${t[0]}) {`,u="";for(let c=0;c<=1;c++)for(let p=0;p<=1;p++)u+=` blockIndex = rc.y + ${p}; pos = rc.x + ${c}; ${l} offsetY = int(blockIndex / outWidth) * stride[0] - pad[0]; d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow); if(d0 < inputShape[${a}] && d0 >= 0) { // Use custom imod instead mod. On Intel GPU, mod may generate // unexpected value. // https://github.com/tensorflow/tfjs/issues/5447 offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1]; d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) / inChannels); if(d1 < inputShape[${i}] && d1 >= 0) { ch = imod(pos, inChannels); if (${o}) { innerDims = vec2(d1, ch); result[${c*2+p}] = getChannel( getA(d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); result[${c*2+p}] = getChannel( getA(ch, int(innerDims.x), int(innerDims.y)), innerDims); } } } } `;this.userCode=` void main() { ivec2 rc = getOutputCoords(); vec4 result = vec4(0); int blockIndex, pos, offsetY, d0, offsetX, d1, ch; vec2 innerDims; ${u} ${s.output} = result; } `}};function OS({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:o=null,leakyreluAlpha:a=0,activation:i=null}){let l=e.shape,u=r.texData.get(e.dataId),c=n.inChannels,p=l[0]*l[1]*l[2],d=n.outChannels,f=n.dataFormat==="channelsLast",h=!1,m=!1,g,x=[];if(!((p===1||d===1)&&c>t8)&&u.isPacked&&f&&u.texture!=null&&l[2]%2!=0&&C.arraysEqual(u.shape.slice(-3),l.slice(-3))){let A=l[0]*l[1]*(l[2]+1),v={dataId:e.dataId,shape:[1,A,n.inChannels],dtype:e.dtype},w=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,C.assert(zm(u.shape,v.shape),()=>`packed reshape ${u.shape} to ${v.shape} isn't free`);let k=$e({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});x.push(k);let I=Gm({a:v,b:k,backend:r,transposeA:h,transposeB:m,bias:s,activation:i,preluActivationWeights:o,leakyreluAlpha:a}),N=r.texData.get(I.dataId);C.assert(N.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=w,N.shape=n.outShape,g=lr({inputs:{x:I},backend:r}),g.shape=n.outShape,x.push(I)}else{let A=f?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],v=$e({inputs:{x:e},backend:r,attrs:{shape:[1,A,n.inChannels]}}),w=$e({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),k=Gm({a:v,b:w,transposeA:h,transposeB:m,backend:r,bias:s,activation:i,preluActivationWeights:o,leakyreluAlpha:a});g=$e({inputs:{x:k},backend:r,attrs:{shape:n.outShape}}),x.push(v),x.push(w),x.push(k)}for(let A of x)r.disposeIntermediateTensorInfo(A);return g}function PS({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:o=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:l,filterHeight:u,inChannels:c,outWidth:p,outHeight:d,dataFormat:f}=n,h=f==="channelsLast",m=l*u*c,g=d*p,x=[m,g],y=!0,b=!1,A=[],v=$e({inputs:{x:e},backend:r,attrs:{shape:e.shape.slice(1)}}),w=$e({inputs:{x:t},backend:r,attrs:{shape:[1,m,C.sizeFromShape(t.shape)/m]}});A.push(v),A.push(w);let k=new w8(x,n),I=[v.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],N=r.runWebGLProgram(k,[v],"float32",I),T=$e({inputs:{x:N},backend:r,attrs:{shape:[1,x[0],x[1]]}});A.push(N),A.push(T);let _=s!=null,R=o!=null,S=i==="leakyrelu",F=i?Nd(i,!0):null,B=new mv(T.shape,w.shape,[1,g,n.outChannels],y,b,_,F,R,S),W=[T,w];if(s&&W.push(s),R&&W.push(o),S){let Q=r.makeTensorInfo([],"float32",C.createScalarValue(a,"float32"));W.push(Q),A.push(Q)}let q=r.runWebGLProgram(B,W,"float32"),K=h?[1,d,p,n.outChannels]:[1,n.outChannels,d,p],J=$e({inputs:{x:q},backend:r,attrs:{shape:K}});A.push(q);for(let Q of A)r.disposeIntermediateTensorInfo(Q);return J}function qXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dataFormat:l,dilations:u,dimRoundingMode:c}=r,p=M.convertConv2DDataFormat(l),d=M.computeConv2DInfo(s.shape,o.shape,a,u,i,c,!1,p),f;if(d.filterHeight===1&&d.filterWidth===1&&d.dilationHeight===1&&d.dilationWidth===1&&d.strideHeight===1&&d.strideWidth===1&&(d.padInfo.type==="SAME"||d.padInfo.type==="VALID"))f=OS({x:s,filter:o,convInfo:d,backend:n});else if(he().getBool("WEBGL_CONV_IM2COL")&&s.shape[0]===1)f=PS({x:s,filter:o,convInfo:d,backend:n});else{let m=new xv(d);f=n.runWebGLProgram(m,[s,o],"float32")}let h=$e({inputs:{x:f},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(f),h}var ase={kernelName:vp,backendName:"webgl",kernelFunc:qXe};var k8=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let n=t.strideHeight,r=t.strideWidth,s=t.padInfo.top,o=t.padInfo.left,a=t.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int d2 = coords.w; // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int b = 0; b < ${t.batchSize}; b++) { for (int yR = 0; yR < ${t.outHeight}; yR++) { int xR = wR + yR * ${n} - ${s}; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int yC = 0; yC < ${t.outWidth}; yC++) { int xC = wC + yC * ${r} - ${o}; if (xC < 0 || xC >= ${t.inWidth}) { continue; } if (${a}) { float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } else { float dyValue = getDy(b, d2, yR, yC); float xValue = getX(b, d1, xR, xC); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}},I8=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let n=t.filterHeight,r=t.filterWidth,s=t.strideHeight,o=t.strideWidth,a=t.dataFormat==="channelsLast",i=n-1-t.padInfo.top,l=r-1-t.padInfo.left,u=a?1:2,c=a?2:3,p=a?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${l}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[${p}]; ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${n}; wR++) { float dyR = float(dyRCorner + wR) / ${s}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${n} - 1 - wR; for (int wC = 0; wC < ${r}; wC++) { float dyC = float(dyCCorner + wC) / ${o}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${r} - 1 - wC; for (int d2 = 0; d2 < ${t.outChannels}; d2++) { if (${a}) { float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } else { float xValue = getDy(batch, d2, idyR, idyC); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}},C8=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let n=t.strideDepth,r=t.strideHeight,s=t.strideWidth,o=t.padInfo.front,a=t.padInfo.top,i=t.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; int wR = coords.y; int wC = coords.z; int d1 = coords.w; int d2 = coords.u; float dotProd = 0.0; for (int b = 0; b < ${t.batchSize}; b++) { for (int yF = 0; yF < ${t.outDepth}; yF++) { int xF = wF + yF * ${n} - ${o}; if (xF < 0 || xF >= ${t.inDepth}) { continue; } for (int yR = 0; yR < ${t.outHeight}; yR++) { int xR = wR + yR * ${r} - ${a}; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int yC = 0; yC < ${t.outWidth}; yC++) { int xC = wC + yC * ${s} - ${i}; if (xC < 0 || xC >= ${t.inWidth}) { continue; } float dyValue = getDy(b, yF, yR, yC, d2); float xValue = getX(b, xF, xR, xC, d1); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}},S8=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let n=t.filterDepth,r=t.filterHeight,s=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,l=n-1-t.padInfo.front,u=r-1-t.padInfo.top,c=s-1-t.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${l}, ${u}, ${c}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyFCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; float dotProd = 0.0; for (int wF = 0; wF < ${n}; wF++) { float dyF = float(dyFCorner + wF) / ${o}.0; if (dyF < 0.0 || dyF >= ${t.outDepth}.0 || fract(dyF) > 0.0) { continue; } int idyF = int(dyF); int wFPerm = ${n} - 1 - wF; for (int wR = 0; wR < ${r}; wR++) { float dyR = float(dyRCorner + wR) / ${a}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${r} - 1 - wR; for (int wC = 0; wC < ${s}; wC++) { float dyC = float(dyCCorner + wC) / ${i}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${s} - 1 - wC; for (int d2 = 0; d2 < ${t.outChannels}; d2++) { float xValue = getDy(batch, idyF, idyR, idyC, d2); float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}};function KXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:o}=t,{strides:a,pad:i,dataFormat:l,dimRoundingMode:u,filterShape:c}=r,p=M.convertConv2DDataFormat(l),d=M.computeConv2DInfo(s.shape,c,a,1,i,u,!1,p),f=new k8(d);return n.runWebGLProgram(f,[s,o],"float32")}var ise={kernelName:wx,backendName:"webgl",kernelFunc:KXe};function XXe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:o}=t,{inputShape:a,strides:i,pad:l,dataFormat:u,dimRoundingMode:c}=r,p=M.convertConv2DDataFormat(u),d=M.computeConv2DInfo(a,o.shape,i,1,l,c,!1,p),f=new I8(d);return n.runWebGLProgram(f,[s,o],"float32")}var lse={kernelName:wp,backendName:"webgl",kernelFunc:XXe};function ZXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dilations:l}=r,u=M.computeConv3DInfo(s.shape,o.shape,a,l,i),c=new v8(u);return n.runWebGLProgram(c,[s,o],"float32")}var use={kernelName:kp,backendName:"webgl",kernelFunc:ZXe};function YXe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:o}=t,{strides:a,pad:i,filterShape:l}=r,u=M.computeConv3DInfo(s.shape,l,a,1,i),c=new C8(u);return n.runWebGLProgram(c,[s,o],"float32")}var cse={kernelName:kx,backendName:"webgl",kernelFunc:YXe};function JXe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:o}=t,{pad:a,strides:i,inputShape:l}=r,u=M.computeConv3DInfo(l,o.shape,i,1,a),c=new S8(u);return n.runWebGLProgram(c,[s,o],"float32")}var pse={kernelName:Ix,backendName:"webgl",kernelFunc:JXe};var QXe=_S+` return cos(x); `,eZe=Xe({opSnippet:QXe}),dse={kernelName:uu,backendName:"webgl",kernelFunc:eZe};var tZe=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `,nZe=Xe({opSnippet:tZe}),fse={kernelName:cu,backendName:"webgl",kernelFunc:nZe};var N8=class{constructor(t,n,r,s,o){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,l,u]=t,[c]=n,[p,d]=r;this.outputShape=[c,p,d,u];let f=s==="bilinear"?1:0,[h,m]=[`${i-1}.0`,`${l-1}.0`],[g,x,y]=p>1?[`${(i-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[b,A,v]=d>1?[`${(l-1)/(d-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=` const float height_ratio = float(${g}); const float width_ratio = float(${b}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int y = coords[1]; int x = coords[2]; int d = coords[3]; // get box vals float y1 = getBoxes(b,0); float x1 = getBoxes(b,1); float y2 = getBoxes(b,2); float x2 = getBoxes(b,3); // get image in batch index int bInd = round(getBoxInd(b)); if(bInd < 0 || bInd >= ${a}) { return; } float height_scale = ${x}; float width_scale = ${A}; float in_y = ${y}; if( in_y < 0.0 || in_y > ${h} ) { setOutput(float(${o})); return; } float in_x = ${v}; if( in_x < 0.0 || in_x > ${m} ) { setOutput(float(${o})); return; } vec2 sourceFracIndexCR = vec2(in_x,in_y); if(${f} == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d); float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d); float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d); float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d); vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR); float top = topLeft + (topRight - topLeft) * fracCR.x; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x; float newValue = top + (bottom - top) * fracCR.y; setOutput(newValue); } else { // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestCR = ivec2(floor( sourceFracIndexCR + vec2(0.5,0.5))); float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d); setOutput(newValue); } } `}};var rZe=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:o,boxInd:a}=t,{cropSize:i,method:l,extrapolationValue:u}=r,c=new N8(s.shape,o.shape,i,l,u);return n.runWebGLProgram(c,[s,o,a],"float32")},hse={kernelName:Cx,backendName:"webgl",kernelFunc:rZe};var MS=class{constructor(t,n,r){this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}],this.outputShape=t;let s=t.length,o=n?"0.0":`getX(${mse(s,"coords")})`,a=t[t.length-1],i="",l="";n?(i=r?`end != ${a-1}`:"end != 0",l=r?"end + 1":"end - 1"):(i=r?`end + pow2 < ${a}`:"end >= pow2",l=r?"end + pow2":"end - pow2"),this.userCode=` void main() { ${Ct(s)} coords = getOutputCoords(); int end = ${gse(s,"coords")}; float val = ${o}; int pow2 = int(pow(2.0, index)); if (${i}) { int idx = ${l}; ${gse(s,"coords")} = idx; val += getX(${mse(s,"coords")}); } setOutput(val); } `}};function mse(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function gse(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function sZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,exclusive:a,reverse:i}=r,l=s.shape.length,u=M.getAxesPermutation([o],l),c=s;u!=null&&(c=On({inputs:{x:s},backend:n,attrs:{perm:u}}));let p=M.getInnerMostAxes(1,l)[0];if(p!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${s.shape.length-1} but got axis=${o}`);let d=c.shape[p],f=lr({inputs:{x:c},backend:n});for(let h=0;h<=Math.ceil(Math.log2(d))-1;h++){let m=new MS(c.shape,!1,i),g=[[h]],x=f;f=n.runWebGLProgram(m,[f],f.dtype,g),n.disposeIntermediateTensorInfo(x)}if(a){let h=new MS(c.shape,a,i),m=f;f=n.runWebGLProgram(h,[f],f.dtype),n.disposeIntermediateTensorInfo(m)}if(u!=null){let h=M.getUndoAxesPermutation(u),m=On({inputs:{x:f},backend:n,attrs:{perm:h}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(c),m}return f}var xse={kernelName:Ip,backendName:"webgl",kernelFunc:sZe};function oZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:o}=t,{size:a,binaryOutput:i}=r;if(s.shape.length===1){let l=n.readSync(s.dataId),u=n.readSync(o.dataId),c=IS(l,u,o.dtype,o.shape,a);return n.makeTensorInfo([a],o.dtype,c)}else if(s.shape.length===2){let l=n.bufferSync(s),u=n.bufferSync(o),c=pne(l,u,a,i);return n.makeTensorInfo(c.shape,o.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${s.shape.length}.`)}var yse={kernelName:Sx,backendName:"webgl",kernelFunc:oZe};var T8=class{constructor(t,n,r){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=n,this.dataFormat=r,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int h = ${this.getHeightCoordString()}; int w = ${this.getWidthCoordString()}; int d = ${this.getDepthCoordString()}; int in_h = h / ${n}; int offset_h = imod(h, ${n}); int in_w = w / ${n}; int offset_w = imod(w, ${n}); int offset_d = (offset_h * ${n} + offset_w) * ${this.getOutputDepthSize()}; int in_d = d + offset_d; float result = ${this.getInputSamplingString()}; setOutput(result); } `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function aZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockSize:o,dataFormat:a}=r;C.assert(o>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${o}`);let i=s.shape[0],l=a==="NHWC"?s.shape[1]:s.shape[2],u=a==="NHWC"?s.shape[2]:s.shape[3],c=a==="NHWC"?s.shape[3]:s.shape[1],p=l*o,d=u*o,f=c/(o*o),h=a==="NHWC"?[i,p,d,f]:[i,f,p,d],m=new T8(h,o,a);return n.runWebGLProgram(m,[s],s.dtype)}var bse={kernelName:Nx,backendName:"webgl",kernelFunc:aZe};var yv=class{constructor(t,n=!1,r=null,s=!1,o=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=t.outShape,this.enableShapeUniforms=Xn(this.outputShape.length);let a=t.filterHeight,i=t.filterWidth,l=t.outChannels/t.inChannels,u="",c="";r&&(s?u=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${r} }`:o?u=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${r} }`:u=` float activation(float x) { ${r} } `,c="result = activation(result);");let p=n?"result += getBiasAtOutCoords();":"";n&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),o&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${u} void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; ivec2 xRCCorner = coords.yz * strides - pads; int d2 = coords.w; int d1 = d2 / ${l}; int q = d2 - d1 * ${l}; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations. for (int wR = 0; wR < ${a}; wR++) { int xR = xRCorner + wR * dilations[0]; if (xR < 0 || xR >= inDims[0]) { continue; } for (int wC = 0; wC < ${i}; wC++) { int xC = xCCorner + wC * dilations[1]; if (xC < 0 || xC >= inDims[1]) { continue; } float xVal = getX(batch, xR, xC, d1); float wVal = getW(wR, wC, d1, q); dotProd += xVal * wVal; } } float result = dotProd; ${p} ${c} setOutput(result); } `}};var bv=class{constructor(t,n=!1,r=null,s=!1,o=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=t.outShape,this.enableShapeUniforms=Xn(this.outputShape.length);let a=t.outChannels/t.inChannels,i=t.padInfo.left,l=t.strideWidth,u=t.dilationWidth,c=t.filterHeight,p=t.filterWidth,d=p,f=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x=0 && xR < inDims[0]) { `;for(let y=0;y<(d+1)/2;y++){let b=y*2;if(f+=` xC = xCCorner + ${b*u}; `,l===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { xTexelC${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } `,u===1&&b>0?f+=` xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy); `:f+=` xCOffset = xC + 1 - 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { previous.zw = vec2(0.0); } xC${b} = vec4(previous.zw, xTexelC${b}.xy); } else { xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy); } `):f+=` if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } xC${b} = xTexelC${b}; `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { xTexelC${b+1}.zw = vec2(0.0); } xTexelC${b+1}Ready = 1; } `,u>1&&(f+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); xTexelC${b}Ready = 1; } `),f+=` xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy); `):A===1?f+=` xC${b+1} = xTexelC${b}; `:f+=` xCOffset = xC + ${A}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${b+1}.zw = vec2(0.0); } xTexelC${b+1}Ready = 1; } xC${b+1} = xTexelC${b+1}; `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { xTexelC${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xC + 1, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xC + 2 >= inDims[1]) { xTexelC${b+1}.zw = vec2(0.0); } xTexelC${b+1}Ready = 1; } xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw); `,b+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy); `)):(f+=` if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } xCOffset = xC + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${b+1}.zw = vec2(0.); } xTexelC${b+1}Ready = 1; } xC${b} = vec4( xTexelC${b}.xy, xTexelC${b+1}.xy); `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let p=M.computeConv2DInfo(s.shape,o.shape,a,c,i,u,!0),d;he().getBool("WEBGL_PACK_DEPTHWISECONV")&&p.strideWidth<=2&&p.outChannels/p.inChannels==1?d=new bv(p):d=new yv(p);let f=[[p.padInfo.top,p.padInfo.left],[p.strideHeight,p.strideWidth],[p.dilationHeight,p.dilationWidth],[p.inHeight,p.inWidth]];return n.runWebGLProgram(d,[s,o],"float32",f)}var Ase={kernelName:Cp,backendName:"webgl",kernelFunc:iZe};var _8=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let n=t.strideHeight,r=t.strideWidth,s=t.padInfo.top,o=t.padInfo.left,a=t.outChannels/t.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int dm = coords.w; int d2 = d1 * ${a} + dm; float dotProd = 0.0; // TO DO: Vec4 over the batch size for (int b = 0; b < ${t.batchSize}; b++) { for (int yR = 0; yR < ${t.outHeight}; yR++) { int xR = wR + yR * ${n} - ${s}; if (xR < 0 || xR >= ${t.inHeight}) { continue; } for (int yC = 0; yC < ${t.outWidth}; yC++) { int xC = wC + yC * ${r} - ${o}; if (xC < 0 || xC >= ${t.inWidth}) { continue; } float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } } } setOutput(dotProd); } `}},E8=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let n=t.filterHeight,r=t.filterWidth,s=t.strideHeight,o=t.strideWidth,a=n-1-t.padInfo.top,i=r-1-t.padInfo.left,l=t.outChannels/t.inChannels;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = coords.yz - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; float dotProd = 0.0; for (int wR = 0; wR < ${n}; wR++) { float dyR = float(dyRCorner + wR) / ${s}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${n} - 1 - wR; for (int wC = 0; wC < ${r}; wC++) { float dyC = float(dyCCorner + wC) / ${o}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${r} - 1 - wC; // TO DO: Vec4 over the channelMul for (int dm = 0; dm < ${l}; dm++) { int d2 = d1 * ${l} + dm; float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, dm); dotProd += xValue * wValue; } } } setOutput(dotProd); } `}};function lZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:o}=t,{strides:a,dilations:i,pad:l,dimRoundingMode:u,filterShape:c}=r,p=M.computeConv2DInfo(s.shape,c,a,i,l,u,!0),d=new _8(p);return n.runWebGLProgram(d,[s,o],"float32")}var vse={kernelName:Tx,backendName:"webgl",kernelFunc:lZe};function uZe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:o}=t,{strides:a,dilations:i,pad:l,dimRoundingMode:u,inputShape:c}=r,p=M.computeConv2DInfo(c,o.shape,a,i,l,u,!0),d=new E8(p);return n.runWebGLProgram(d,[s,o],"float32")}var wse={kernelName:_x,backendName:"webgl",kernelFunc:uZe};var R8=class{constructor(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } `}};function cZe(e){let{inputs:t,backend:n}=e,{x:r}=t,s=[...r.shape,...r.shape],o=C.sizeFromShape(r.shape),a=$e({inputs:{x:r},backend:n,attrs:{shape:[o]}}),i=new R8(o),l=n.runWebGLProgram(i,[a],a.dtype),u=$e({inputs:{x:l},backend:n,attrs:{shape:s}});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(l),u}var kse={kernelName:h3,backendName:"webgl",kernelFunc:cZe};var D8=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let{inHeight:n,inWidth:r,padInfo:s,strideHeight:o,strideWidth:a,filterHeight:i,filterWidth:l,dilationHeight:u,dilationWidth:c}=t,{top:p,left:d}=s;this.userCode=` const ivec2 strides = ivec2(${o}, ${a}); const ivec2 pads = ivec2(${p}, ${d}); const float neg_infinity = -3.4e38; void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.w; ivec2 outTopLeftCorner = coords.yz * strides - pads; int hBeg = outTopLeftCorner.x; int wBeg = outTopLeftCorner.y; float curVal = neg_infinity; for (int h = 0; h < ${i}; h++) { int hIn = hBeg + h * ${u}; if (hIn >= 0 && hIn < ${n}) { for (int w = 0; w < ${l}; w++) { int wIn = wBeg + w * ${c}; if (wIn >= 0 && wIn < ${r}) { float xVal = getX(batch, hIn, wIn, d1); float wVal = getW(h, w, d1); float val = xVal + wVal; if (val > curVal) { curVal = val; } } } } } float result = curVal; setOutput(result); } `}};function pZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o}=t,{strides:a,pad:i,dilations:l}=r,u=M.computeDilation2DInfo(s.shape,o.shape,a,i,"NHWC",l),c,p=new D8(u);c=n.runWebGLProgram(p,[s,o],"float32");let d=$e({inputs:{x:c},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(c),d}var Ise={kernelName:Sp,backendName:"webgl",kernelFunc:pZe};function dZe(e){let{inputs:t,backend:n,attrs:r}=e,{equation:s}=r,o=t,{allDims:a,summedDims:i,idDims:l}=M.decodeEinsumEquation(s,o.length);M.checkEinsumDimSizes(a.length,l,o);let{path:u,steps:c}=M.getEinsumComputePath(i,l),p=c.length,d=null,f=a.length,h=[];for(let m=0;m=0&&(d=Wm({inputs:{x:d},backend:n,attrs:{axis:u[m]-(a.length-f),keepDims:!1}}),h.push(d)),f--)}for(let m of h)m!==d&&n.disposeIntermediateTensorInfo(m);return d}var Cse={kernelName:Ex,backendName:"webgl",kernelFunc:dZe};var fZe="return (x >= 0.0) ? x : (exp(x) - 1.0);",hZe=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; `,mZe=Xe({opSnippet:fZe,packedOpSnippet:hZe}),Sse={kernelName:du,backendName:"webgl",kernelFunc:mZe};var gZe="return (b >= 1.0) ? a : a * (b + 1.0);",xZe=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,yZe=e=>{let{inputs:t,backend:n}=e,{dy:r,y:s}=t,o=he().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qi(xZe,r.shape,s.shape):new ui(gZe,r.shape,s.shape);return n.runWebGLProgram(o,[r,s],r.dtype)},Nse={kernelName:Rx,backendName:"webgl",kernelFunc:yZe};var bZe=` return vec4(equal(a, b)); `,AZe="return float(a == b);",vZe=Qt({opSnippet:AZe,packedOpSnippet:bZe,dtype:"bool",cpuKernelImpl:hne}),Tse={kernelName:Ch,backendName:"webgl",kernelFunc:vZe};var wZe=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = ${M.ERF_P}; float a1 = ${M.ERF_A1}; float a2 = ${M.ERF_A2}; float a3 = ${M.ERF_A3}; float a4 = ${M.ERF_A4}; float a5 = ${M.ERF_A5}; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); `,kZe=Xe({opSnippet:wZe}),_se={kernelName:fu,backendName:"webgl",kernelFunc:kZe};var Ese="return exp(x);",$8=Xe({opSnippet:Ese,packedOpSnippet:Ese,cpuKernelImpl:mne}),Rse={kernelName:hu,backendName:"webgl",kernelFunc:$8};function zS(e){let{inputs:t,attrs:n,backend:r}=e,{dim:s}=n,{input:o}=t,a=o.shape.length,i=o.shape.slice(),l=s;return s<0&&(C.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+s+1),i.splice(l,0,1),$e({inputs:{x:o},backend:r,attrs:{shape:i}})}var Dse={kernelName:Np,backendName:"webgl",kernelFunc:zS};var $se="return exp(x) - 1.0;",IZe=Xe({opSnippet:$se,packedOpSnippet:$se,cpuKernelImpl:gne}),Fse={kernelName:mu,backendName:"webgl",kernelFunc:IZe};var LS=class{constructor(t,n,r){this.variableNames=["real","imag"];let s=n[1];this.outputShape=n;let o=r?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=r?`${s}.0`:"1.0",i;if(t==="real")i="return real * expR - imag * expI;";else if(t==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${t}.`);this.userCode=` const float exponentMultiplier = ${o}; float unaryOpComplex(float real, float expR, float imag, float expI) { ${i} } float mulMatDFT(int batch, int index) { float indexRatio = float(index) / float(${s}); float exponentMultiplierTimesIndexRatio = exponentMultiplier * indexRatio; float result = 0.0; for (int i = 0; i < ${s}; i++) { // x = (-2|2 * PI / N) * index * i; float x = exponentMultiplierTimesIndexRatio * float(i); float expR = cos(x); float expI = sin(x); float real = getReal(batch, i); float imag = getImag(batch, i); result += unaryOpComplex(real, expR, imag, expI) / ${a}; } return result; } void main() { ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } `}};function BS(e,t,n){let r=n.texData.get(e.dataId),s=C.sizeFromShape(e.shape),o=e.shape[e.shape.length-1],a=s/o,i=$e({inputs:{x:e},backend:n,attrs:{shape:[a,o]}}),l=i.shape,u=new LS("real",l,t),c=new LS("imag",l,t),p=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:l},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:l}],d=n.runWebGLProgram(u,p,"float32"),f=n.runWebGLProgram(c,p,"float32"),h=Fo({inputs:{real:d,imag:f},backend:n});n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f);let m=$e({inputs:{x:h},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(h),m}function CZe(e){let{inputs:t,backend:n}=e,{input:r}=t;return BS(r,!1,n)}var Ose={kernelName:Dx,backendName:"webgl",kernelFunc:CZe};var F8=class{constructor(t,n){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=t,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } `}};function vc(e){let{backend:t,attrs:n}=e,{shape:r,value:s}=n,{dtype:o}=n;if(o=o||C.inferDtype(s),o==="string"){let a=C.getArrayFromDType(o,C.sizeFromShape(r));return a.fill(s),t.makeTensorInfo(r,o,a)}else{let a=new F8(r,s),i=[[s]];return t.runWebGLProgram(a,[],o,i)}}var Pse={kernelName:$x,backendName:"webgl",kernelFunc:vc};var O8=class{constructor(t){this.variableNames=["Image"],this.outputShape=[];let n=t[2];this.outputShape=t,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; int coordX = ${n} - x - 1; float outputValue; if(coordX >= 0 && coordX < ${n}) { outputValue = getImage(coords[0], coords[1], coordX, coords[3]); } else { outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); } setOutput(outputValue); } `}};var Mse={kernelName:Fx,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,s=new O8(n.shape);return r.runWebGLProgram(s,[n],n.dtype)}};var zse="return floor(x);",SZe=Xe({opSnippet:zse,packedOpSnippet:zse,cpuKernelImpl:xne}),Lse={kernelName:gu,backendName:"webgl",kernelFunc:SZe};var NZe=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); if (ib != 0) { // Windows (D3D) wants guaranteed non-zero int division at compile-time. return float(idiv(ia, ib, s)); } else { return NAN; } `,TZe=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); ivec4 result = ivec4(0); vec4 s = sign(a) * sign(b); // Windows (D3D) wants guaranteed non-zero int division at compile-time. if (cond[0]) { result[0] = idiv(ia[0], ib[0], s[0]); } if (cond[1]) { result[1] = idiv(ia[1], ib[1], s[1]); } if (cond[2]) { result[2] = idiv(ia[2], ib[2], s[2]); } if (cond[3]) { result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); `,_Ze=Qt({opSnippet:NZe,packedOpSnippet:TZe,dtype:"int32"}),Bse={kernelName:xu,backendName:"webgl",kernelFunc:_Ze};var P8=class{constructor(t){this.variableNames=["A"];let n=Vn(),[r,s]=t;this.outputShape=t,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${s}.0, ${r}.0); vec4 values = ${n.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } setOutput(floor(value * 255.0 + 0.5)); } `}};var M8=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let n=Vn(),[r,s]=t;this.outputShape=t,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec4 result = vec4(0.); for(int row=0; row<=1; row++) { for(int col=0; col<=1; col++) { texC = coords[1] + row; depth = coords[2] + col; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${s}.0, ${r}.0); vec4 values = ${n.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } result[row * 2 + col] = floor(value * 255.0 + 0.5); } } ${n.output} = result; } `}};var Vse={kernelName:Dj,backendName:"webgl",kernelFunc:EZe},f1;function EZe(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:s}=t,{numChannels:o}=r,a=typeof HTMLVideoElement!="undefined"&&s instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&s instanceof HTMLImageElement,[l,u]=a?[s.videoWidth,s.videoHeight]:[s.width,s.height],c=[u,l],p=[u,l,o];(i||a)&&(f1==null&&(f1=document.createElement("canvas").getContext("2d")),f1.canvas.width=l,f1.canvas.height=u,f1.drawImage(s,0,0,l,u),s=f1.canvas);let d=n.makeTensorInfo(c,"int32");n.texData.get(d.dataId).usage=Rs.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(d.dataId),s);let f=he().getBool("WEBGL_PACK")?new M8(p):new P8(p),h=n.runWebGLProgram(f,[d],"int32");return n.disposeData(d.dataId),h}function RZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:d,activation:f,leakyreluAlpha:h}=r,m=M.convertConv2DDataFormat(c),g=M.computeConv2DInfo(s.shape,o.shape,l,p,u,d,!1,m),x,y=[];if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=OS({x:s,filter:o,convInfo:g,backend:n,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:h});else if(he().getBool("WEBGL_CONV_IM2COL")&&s.shape[0]===1)x=PS({x:s,filter:o,convInfo:g,backend:n,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:h});else{let A=a!=null,v=i!=null,w=f==="leakyrelu",k=f?Nd(f,!1):null,I=new xv(g,A,k,v,w),N=[s,o];if(a&&N.push(a),i&&N.push(i),w){let T=n.makeTensorInfo([],"float32",C.createScalarValue(h,"float32"));N.push(T),y.push(T)}x=n.runWebGLProgram(I,N,"float32")}let b=$e({inputs:{x},backend:n,attrs:{shape:g.outShape}});return y.push(x),y.forEach(A=>n.disposeIntermediateTensorInfo(A)),b}var Wse={kernelName:Fh,backendName:"webgl",kernelFunc:RZe};function DZe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:o,bias:a,preluActivationWeights:i}=t,{strides:l,pad:u,dilations:c,dimRoundingMode:p,activation:d,leakyreluAlpha:f}=r,h=[],m=c;m==null&&(m=[1,1]),C.assert(M.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let g=M.computeConv2DInfo(s.shape,o.shape,l,m,u,p,!0),x=he().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels==1,y=d?Nd(d,x):null,b=[s,o],A=a!=null,v=i!=null,w=d==="leakyrelu";if(A&&b.push(a),v&&b.push(i),w){let T=n.makeTensorInfo([],"float32",C.createScalarValue(f,"float32"));b.push(T),h.push(T)}let k;x?k=new bv(g,A,y,v,w):k=new yv(g,A,y,v,w);let I=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],N=n.runWebGLProgram(k,b,"float32",I);return h.forEach(T=>n.disposeIntermediateTensorInfo(T)),N}var Gse={kernelName:Oh,backendName:"webgl",kernelFunc:DZe};var z8=class{constructor(t,n,r){this.sliceDim=t,this.strides=n,this.variableNames=["x","indices"],this.outputShape=r;let s=Ct(n.length),o=Ct(r.length),a=this.sliceDim>1?"strides[j]":"strides";this.userCode=` ${s} strides = ${s}(${this.strides}); void main() { ${o} coords = getOutputCoords(); int flattenIndex = 0; for (int j = 0; j < ${this.sliceDim}; j++) { int index = round(getIndices(coords[0], j)); flattenIndex += index * ${a}; } setOutput(getX(flattenIndex, coords[1])); } `}};function $Ze(e){let{inputs:t,backend:n}=e,{params:r,indices:s}=t,o=s.shape,a=o[o.length-1],i=C.sizeFromShape(r.shape),[l,u,c,p]=M.prepareAndValidate(r,s),d=$e({inputs:{x:s},backend:n,attrs:{shape:[u,a]}}),f=$e({inputs:{x:r},backend:n,attrs:{shape:[C.sizeFromShape(r.shape)/c,c]}});if(n.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let x=n.readSync(s.dataId),y=n.bufferSync(r),b=yne(x,y,r.dtype,u,a,c,p,r.shape,i);return n.makeTensorInfo(l,r.dtype,b.values)}let h=new z8(a,p,[u,c]),m=n.runWebGLProgram(h,[f,d],f.dtype),g=$e({inputs:{x:m},backend:n,attrs:{shape:l}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),g}var Use={kernelName:Ox,backendName:"webgl",kernelFunc:$Ze};var L8=class{constructor(t,n){this.variableNames=["A","indices"],this.outputShape=n,this.rank=n.length;let r=Ct(this.rank),s=FZe(t,2);this.userCode=` void main() { ${r} resRC = getOutputCoords(); setOutput(getA(${s})); } `}};function FZe(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let s=0;sn.disposeIntermediateTensorInfo(v)),n.makeTensorInfo(u.outputShape,A.dtype,A.values)}let m=new L8(d.shape,h),g=n.runWebGLProgram(m,[d,f],d.dtype);p.push(g);let x=$e({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return p.forEach(y=>n.disposeIntermediateTensorInfo(y)),x}var jse={kernelName:_p,backendName:"webgl",kernelFunc:B8};var OZe="return float(a > b);",PZe=` return vec4(greaterThan(a, b)); `,MZe=Qt({opSnippet:OZe,packedOpSnippet:PZe,cpuKernelImpl:Ane,dtype:"bool"}),Hse={kernelName:Sh,backendName:"webgl",kernelFunc:MZe};var zZe="return float(a >= b);",LZe=` return vec4(greaterThanEqual(a, b)); `,BZe=Qt({opSnippet:zZe,packedOpSnippet:LZe,dtype:"bool",cpuKernelImpl:vne}),qse={kernelName:yu,backendName:"webgl",kernelFunc:BZe};function VZe(e){let{inputs:t,backend:n}=e,{input:r}=t;return BS(r,!0,n)}var Kse={kernelName:Px,backendName:"webgl",kernelFunc:VZe};var WZe="return float(!isnan(x) && !isinf(x));",GZe=Xe({opSnippet:WZe,dtype:"bool"}),Xse={kernelName:bu,backendName:"webgl",kernelFunc:GZe};var UZe="return float(isinf(x));",jZe=Xe({opSnippet:UZe,dtype:"bool"}),Zse={kernelName:Au,backendName:"webgl",kernelFunc:jZe};var HZe="return float(isnan(x));",qZe=Xe({opSnippet:HZe,dtype:"bool"}),Yse={kernelName:vu,backendName:"webgl",kernelFunc:qZe};var KZe="return float(a < b);",XZe=` return vec4(lessThan(a, b)); `,ZZe=Qt({opSnippet:KZe,packedOpSnippet:XZe,cpuKernelImpl:wne,dtype:"bool"}),Jse={kernelName:Nh,backendName:"webgl",kernelFunc:ZZe};var YZe="return float(a <= b);",JZe=` return vec4(lessThanEqual(a, b)); `,QZe=Qt({opSnippet:YZe,packedOpSnippet:JZe,cpuKernelImpl:kne,dtype:"bool"}),Qse={kernelName:Th,backendName:"webgl",kernelFunc:QZe};function eYe(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:o}=n,a=Ine(r,s,o);return t.makeTensorInfo([a.length],"float32",a)}var eoe={kernelName:zx,backendName:"webgl",kernelFunc:eYe};var tYe=`if (x < 0.0) return NAN; return log(x);`,nYe=` vec4 result = log(x); vec4 isNaN = vec4(lessThan(x, vec4(0.0))); result.r = isNaN.r == 1.0 ? NAN : result.r; result.g = isNaN.g == 1.0 ? NAN : result.g; result.b = isNaN.b == 1.0 ? NAN : result.b; result.a = isNaN.a == 1.0 ? NAN : result.a; return result; `,rYe=Xe({opSnippet:tYe,packedOpSnippet:nYe,cpuKernelImpl:Cne}),toe={kernelName:wu,backendName:"webgl",kernelFunc:rYe};var sYe="return log(1.0 + x);",oYe=Xe({opSnippet:sYe}),noe={kernelName:ku,backendName:"webgl",kernelFunc:oYe};var aYe="return float(a >= 1.0 && b >= 1.0);",iYe=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,lYe=Qt({opSnippet:aYe,packedOpSnippet:iYe,dtype:"bool"}),roe={kernelName:_h,backendName:"webgl",kernelFunc:lYe};var uYe="return float(!(x >= 1.0));",cYe=Xe({opSnippet:uYe}),soe={kernelName:Eh,backendName:"webgl",kernelFunc:cYe};var pYe="return float(a >= 1.0 || b >= 1.0);",dYe=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,fYe=Qt({opSnippet:pYe,packedOpSnippet:dYe,dtype:"bool"}),ooe={kernelName:Rh,backendName:"webgl",kernelFunc:fYe};var V8=class{constructor(t,n,r,s,o){this.variableNames=["x"],this.outputShape=[];let a=n,i=t[3]-1;this.outputShape=t;let l,u=`float(${r}) + float(${s}) * sum`;o===.5?l=`inversesqrt(${u})`:o===1?l=`1.0/(${u})`:l=`exp(log(${u}) * float(-${o}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; int d = coords[3]; float x = getX(b, r, c, d); float sum = 0.0; for (int j = -${a}; j <= ${a}; j++) { int idx = d + j; if (idx >= 0 && idx <= ${i}) { float z = getX(b, r, c, idx); sum += z * z; } } float val = x * ${l}; setOutput(val); } `}};var W8=class{constructor(t,n,r,s,o){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=n,i=t[3]-1;this.outputShape=t;let l,u=`float(${r}) + float(${s}) * sum`;o===.5?l=`inversesqrt(${u})`:o===1?l=`1.0/(${u})`:l=`exp(log(${u}) * float(-${o}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; int r = coords.y; int c = coords.z; int d = coords.w; bool hasNextCol = d < ${this.outputShape[3]}; bool hasNextRow = c < ${this.outputShape[2]}; vec4 sum = vec4(0.); vec4 xFragAtOutputCoords = getX(b, r, c, d); vec4 xAtOutputCoords = vec4( getChannel(xFragAtOutputCoords, vec2(c, d)), hasNextCol ? getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0, hasNextRow ? getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0, (hasNextRow && hasNextCol) ? getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0 ); int firstChannel = d - ${a}; vec2 cache = vec2(0.); if(firstChannel >= 0){ vec4 firstChannelFrag = getX(b, r, c, firstChannel); cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel)); if(hasNextRow){ cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel)); } } ivec2 depth = ivec2(d, d + 1); for (int j = - ${a}; j <= ${a}; j++) { ivec2 idx = depth + j; bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i})); bool depthInRange = aboveLowerBound.x && belowUpperBound.x; bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; if(depthInRange || depthPlusOneInRange){ vec4 z = vec4(0.); vec4 xFragAtCurrentDepth; z.xz = cache.xy; if(depthPlusOneInRange && hasNextCol){ xFragAtCurrentDepth = idx.y != d ? getX(b, r, c, idx.y) : xFragAtOutputCoords; z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); if(hasNextRow){ z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); } } cache.xy = z.yw; sum += z * z; } } vec4 result = xAtOutputCoords * ${l}; setOutput(result); } `}};var hYe=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:o,bias:a,alpha:i,beta:l}=r,u=he().getBool("WEBGL_PACK_NORMALIZATION")?new W8(s.shape,o,a,i,l):new V8(s.shape,o,a,i,l);return n.runWebGLProgram(u,[s],s.dtype)},aoe={kernelName:Rp,backendName:"webgl",kernelFunc:hYe};var G8=class{constructor(t,n,r,s,o){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=n,this.bias=r,this.alpha=s,this.beta=o,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; float result = 0.0; for (int d = 0; d < ${this.depth}; ++d) { int depthBegin = int(max(0.0, float(d - ${n}))); int depthEnd = int(min(float(${this.depth}), float(d + ${n} + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = ${this.depth}; float norm = 0.0; for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd) { norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); } else { break; } } norm = float(${s}) * norm + float(${r}); for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){ if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd){ float dyi = -2.0 * float(${s}) * float(${o}) * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d) / norm; if (k == d) { dyi += pow(norm, -1.0 * ${o}); } if (k == coords[3]) { dyi *= getDy(b, r, c, d); result += dyi; } } else { break; } } } setOutput(result); } `}};var mYe=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s,y:o,dy:a}=t,{depthRadius:i,bias:l,alpha:u,beta:c}=r,p=new G8(s.shape,i,l,u,c);return n.runWebGLProgram(p,[s,o,a],s.dtype)},ioe={kernelName:Lx,backendName:"webgl",kernelFunc:mYe};function loe(e,t,n,r){let s=C.sizeFromShape(t),a=C.sizeFromShape(e.shape)/s,i=$e({inputs:{x:e},attrs:{shape:[a,s]},backend:r}),l=la(i,e.dtype,"max",r),u=$e({inputs:{x:l},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(l),u}function U8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reductionIndices:o,keepDims:a}=r,i=s.shape.length,l=C.parseAxisParam(o,s.shape),u=l,c=M.getAxesPermutation(u,i),p=c!=null,d=n.shouldExecuteOnCPU([s]),f=s;if(p){if(d){let b=n.texData.get(f.dataId).values,A=new Array(i);for(let k=0;k`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=M.computePool2DInfo(s.shape,o,a,u,i,l);if(c.filterWidth===1&&c.filterHeight===1&&C.arraysEqual(c.inShape,c.outShape))return lr({inputs:{x:s},backend:n});let p=new Dl(c,"max",!1);return n.runWebGLProgram(p,[s],s.dtype)}var poe={kernelName:$p,backendName:"webgl",kernelFunc:bYe};function AYe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:o,strides:a,pad:i,dataFormat:l,dimRoundingMode:u}=r,c=[1,1,1],p=M.computePool3DInfo(s.shape,o,a,c,i,u,l),d=new Um(p,"max",!1);return n.runWebGLProgram(d,[s],s.dtype)}var doe={kernelName:Fp,backendName:"webgl",kernelFunc:AYe};var j8=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let n=t.strideHeight,r=t.strideWidth,s=t.dilationHeight,o=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=o-1-t.padInfo.top,l=a-1-t.padInfo.left,u=o*a-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${l}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${o}; wR += ${s}) { float dyR = float(dyRCorner + wR) / ${n}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${a}; wC++) { float dyC = float(dyCCorner + wC) / ${r}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); int maxPosValue = ${u} - int(getMaxPos(b, idyR, idyC, d)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wR * ${a} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } setOutput(dotProd); } `}},H8=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let n=t.strideDepth,r=t.strideHeight,s=t.strideWidth,o=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,l=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,p=l-1-t.padInfo.front,d=u-1-t.padInfo.top,f=c-1-t.padInfo.left,h=l*u*c-1;this.userCode=` const ivec3 pads = ivec3(${p}, ${d}, ${f}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < ${l}; wD += ${o}) { float dyD = float(dyDCorner + wD) / ${n}.0; if (dyD < 0.0 || dyD >= ${t.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${u}; wR += ${a}) { float dyR = float(dyRCorner + wR) / ${r}.0; if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${c}; wC += ${i}) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${t.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); int maxPosValue = ${h} - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wD * ${u} * ${c} + wR * ${c} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } } setOutput(dotProd); } `}};function vYe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o}=t,a=o,{filterSize:i,strides:l,pad:u,dimRoundingMode:c}=r,p=[1,1,1],d=M.computePool3DInfo(a.shape,i,l,p,u,c),f=new Um(d,"max",!0),h=n.runWebGLProgram(f,[a],a.dtype),m=new H8(d),g=n.runWebGLProgram(m,[s,h],a.dtype);return n.disposeIntermediateTensorInfo(h),g}var foe={kernelName:Vx,backendName:"webgl",kernelFunc:vYe};function wYe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:o,output:a}=t,i=o;Rl([o,a],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:p}=r,d=M.computePool2DInfo(i.shape,l,u,1,c,p),f=!0,h=new Dl(d,"max",f),m=n.runWebGLProgram(h,[i],i.dtype),g=new j8(d),x=n.runWebGLProgram(g,[s,m],i.dtype);return n.disposeIntermediateTensorInfo(m),x}var hoe={kernelName:Bx,backendName:"webgl",kernelFunc:wYe};function moe(e,t,n,r){let s=new Dl(n,"max",!1),o=r.runWebGLProgram(s,[e],"float32");s=new Dl(n,"max",!0,!0,t);let a=r.runWebGLProgram(s,[e],"float32");return[o,a]}var goe={kernelName:Wx,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:o,pad:a,includeBatchInIndex:i}=t,l=n;C.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];C.assert(M.eitherStridesOrDilationsAreOne(o,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${u}'`);let c=M.computePool2DInfo(r.shape,s,o,u,a),[p,d]=moe(r,i,c,l);return[p,d]}};function xoe(e,t,n,r){let s=C.sizeFromShape(t),a=C.sizeFromShape(e.shape)/s,i=$e({inputs:{x:e},attrs:{shape:[a,s]},backend:r}),l=la(i,"float32","mean",r),u=$e({inputs:{x:l},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(l),u}var yoe={kernelName:Op,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:s,axis:o}=t,a=n,i=r.shape.length,l=C.parseAxisParam(o,r.shape),u=l,c=M.getAxesPermutation(u,i),p=c!=null,d=a.shouldExecuteOnCPU([r]),f=[],h=r;if(p){if(d){let A=a.texData.get(h.dataId).values,v=new Array(i);for(let I=0;Ic[0]+t[p]+c[1]);let s=t.length,o=Ct(s),a=n.map(c=>c[0]).join(","),i=n.map((c,p)=>c[0]+t[p]).join(","),l=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,s),u=r==="reflect"?0:1;if(s===1){this.userCode=` int start = ${a}; int end = ${i}; void main() { int outC = getOutputCoords(); if (outC < start) { outC = start * 2 - outC - ${u}; } else if(outC >= end) { outC = (end - 1) * 2 - outC + ${u}; } setOutput(getX(outC - start)); } `;return}this.userCode=` ${o} start = ${o}(${a}); ${o} end = ${o}(${i}); void main() { ${o} outC = getOutputCoords(); for (int i = 0; i < ${s}; i++) { if (outC[i] < start[i]) { outC[i] = start[i] * 2 - outC[i] - ${u}; } else if(outC[i] >= end[i]) { outC[i] = (end[i] - 1) * 2 - outC[i] + ${u}; } } ${o} coords = outC - start; setOutput(getX(${l})); } `}};var K8=class{constructor(t,n,r){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n.map((h,m)=>h[0]+t[m]+h[1]);let s=t.length,o=Ct(s),a=n.map(h=>h[0]).join(","),i=n.map((h,m)=>h[0]+t[m]).join(","),l=ir("rc",s),u=ir("source",s),c=`${l[s-1]} < ${this.outputShape[s-1]}`,p=s===1?"source":`vec2(${u.slice(-2).join()})`,d=r==="reflect"?0:1,f="";if(s===1){let h=` ${o} source = rc; if (source < start) { source = start * 2 - source - ${d}; } else if (source >= end) { source = (end - 1) * 2 - source + ${d}; } source -= start; `;f=` ${o} rc = outputLoc; ${h} result[0] = getChannel(getX(${u.join()}), ${p}); ${l[s-1]} += 1; if(${c}) { ${h} result[1] = getChannel(getX(${u.join()}), ${p}); } `}else{let h=` ${o} source = rc; ${o} lt = ${o}(lessThan(source, start)); ${o} gte = ${o}(greaterThanEqual(source, end)); ${o} orig = 1 - (lt + gte); source = orig * source + lt * (start * 2 - source - ${d}) + gte * ((end - 1) * 2 - source + ${d}); source -= start; `;f=` ${o} rc = outputLoc; ${h} result[0] = getChannel(getX(${u.join()}), ${p}); ${l[s-1]} += 1; if(${c}) { ${h} result[1] = getChannel(getX(${u.join()}), ${p}); } rc = outputLoc; ${l[s-2]} += 1; if(${l[s-2]} < ${this.outputShape[s-2]}) { ${h} result[2] = getChannel(getX(${u.join()}), ${p}); ${l[s-1]} += 1; if(${c}) { ${h} result[3] = getChannel(getX(${u.join()}), ${p}); } } `}this.userCode=` const ${o} start = ${o}(${a}); const ${o} end = ${o}(${i}); void main() { ${o} outputLoc = getOutputCoords(); vec4 result = vec4(0.); ${f} setOutput(result); } `}};var NYe=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:s,mode:o}=n,a=he().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new K8(r.shape,s,o):new q8(r.shape,s,o);return t.runWebGLProgram(a,[r],r.dtype)},voe={kernelName:Mp,backendName:"webgl",kernelFunc:NYe};var TYe=`if (b == 0.0) return NAN; return mod(a, b);`,_Ye=` vec4 result = mod(a, b); vec4 isNaN = vec4(equal(b, vec4(0.0))); `+Sd+` return result; `,EYe=Qt({opSnippet:TYe,packedOpSnippet:_Ye}),woe={kernelName:Su,backendName:"webgl",kernelFunc:EYe};var X8=class{constructor(t,n,r){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[t,r],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; float r = random(seed); float cdf = 0.0; for (int i = 0; i < ${n-1}; i++) { cdf += getProbs(batch, i); if (r < cdf) { setOutput(float(i)); return; } } // If no other event happened, last event happened. setOutput(float(${n-1})); } `}};var RYe=` if (a == b) { return 1.0; }; return a / b;`,DYe=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; if(a.x == b.x) { result.x = 1.; } if(a.y == b.y) { result.y = 1.; } if(a.z == b.z) { result.z = 1.; } if(a.w == b.w) { result.w = 1.; } return result; `,Z8=Qt({opSnippet:RYe,packedOpSnippet:DYe,checkOutOfBounds:!0}),koe={kernelName:pu,backendName:"webgl",kernelFunc:Z8};var Ioe="return a - b;",Y8=Qt({opSnippet:Ioe,packedOpSnippet:Ioe,supportsComplex:!0,cpuKernelImpl:Une}),Coe={kernelName:Wu,backendName:"webgl",kernelFunc:Y8};function J8(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:o}=r,a=C.parseAxisParam([o],s.shape),i=U8({inputs:{x:s},backend:n,attrs:{reductionIndices:a,keepDims:!1}}),l=M.expandShapeToKeepDim(i.shape,a),u=$e({inputs:{x:i},backend:n,attrs:{shape:l}}),c=Y8({inputs:{a:s,b:u},backend:n}),p=$8({inputs:{x:c},backend:n}),d=Wm({inputs:{x:p},backend:n,attrs:{axis:a,keepDims:!1}}),f=$e({inputs:{x:d},backend:n,attrs:{shape:l}}),h=Z8({inputs:{a:p,b:f},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),h}var Soe={kernelName:Qp,backendName:"webgl",kernelFunc:J8};function $Ye(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:o,seed:a,normalized:i}=r,l=i?s:J8({inputs:{logits:s},backend:n,attrs:{dim:s.shape.length-1}}),u=l.shape[0],c=l.shape[1],p=new X8(u,c,o),d=[[a]],f=n.runWebGLProgram(p,[l],"int32",d);return i||n.disposeIntermediateTensorInfo(l),f}var Noe={kernelName:Gx,backendName:"webgl",kernelFunc:$Ye};var Toe="return -x;";function FYe(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let o=n.texData.get(r.dataId),[a,i]=Ene(o.values,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,a)}let s;return he().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new Ji(r.shape,Toe):s=new $o(r.shape,Toe),n.runWebGLProgram(s,[r],r.dtype)}var _oe={kernelName:zp,backendName:"webgl",kernelFunc:FYe};var OYe=Ts.nonMaxSuppressionV3Impl;function PYe(e){M.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:o}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l}=r,u=n.readSync(s.dataId),c=n.readSync(o.dataId),{selectedIndices:p}=OYe(u,c,a,i,l);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}var Eoe={kernelName:Ux,backendName:"webgl",kernelFunc:PYe};var MYe=Ts.nonMaxSuppressionV4Impl;function zYe(e){M.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:o}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l,padToMaxOutputSize:u}=r,c=n.readSync(s.dataId),p=n.readSync(o.dataId),{selectedIndices:d,validOutputs:f}=MYe(c,p,a,i,l,u);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([f]))]}var Roe={kernelName:jx,backendName:"webgl",kernelFunc:zYe};var LYe=Ts.nonMaxSuppressionV5Impl;function BYe(e){M.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:o}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l,softNmsSigma:u}=r,c=n.readSync(s.dataId),p=n.readSync(o.dataId),d=a,f=i,h=l,m=u,{selectedIndices:g,selectedScores:x}=LYe(c,p,d,f,h,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var Doe={kernelName:Hx,backendName:"webgl",kernelFunc:BYe};var Q8=class{constructor(t,n,r,s){this.variableNames=["indices"],this.outputShape=[t,n],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${s}), float(${r}), float(index == coords.y))); } `}};var VYe=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{depth:o,onValue:a,offValue:i}=r,l=C.sizeFromShape(s.shape),u=new Q8(l,o,a,i),c=$e({inputs:{x:s},backend:n,attrs:{shape:[l]}}),p=n.runWebGLProgram(u,[c],s.dtype);n.disposeIntermediateTensorInfo(c);let d=[...s.shape,o],f=$e({inputs:{x:p},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(p),f},$oe={kernelName:Bp,backendName:"webgl",kernelFunc:VYe};function Av(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let s=Ac({inputs:{input:r},backend:n}),o=Av({inputs:{x:s},backend:n}),a=jm({inputs:{input:r},backend:n}),i=Av({inputs:{x:a},backend:n}),l=Fo({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i),l}else return vc({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var Foe={kernelName:rd,backendName:"webgl",kernelFunc:Av};function Ooe(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(r.dtype==="complex64"){let s=Ac({inputs:{input:r},backend:n}),o=Ooe({inputs:{x:s},backend:n}),a=jm({inputs:{input:r},backend:n}),i=Av({inputs:{x:a},backend:n}),l=Fo({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i),l}else return vc({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var Poe={kernelName:Lp,backendName:"webgl",kernelFunc:Ooe};function WYe(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return zS({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let o=t[0].shape,a=t[0].dtype;t.forEach(c=>{C.assertShapesMatch(o,c.shape,"All tensors passed to stack must have matching shapes"),C.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=t.map(c=>{let p=zS({inputs:{input:c},backend:n,attrs:{dim:s}});return i.push(p),p}),u=A8({inputs:l,backend:n,attrs:{axis:s}});return i.forEach(c=>n.disposeIntermediateTensorInfo(c)),u}var Moe={kernelName:Vp,backendName:"webgl",kernelFunc:WYe};var eO=class{constructor(t,n,r){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=n.map((u,c)=>u[0]+t[c]+u[1]);let s=t.length,o=Ct(s),a=n.map(u=>u[0]).join(","),i=n.map((u,c)=>u[0]+t[c]).join(","),l=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,s);if(s===1){this.userCode=` int start = ${a}; int end = ${i}; void main() { int outC = getOutputCoords(); if (outC < start || outC >= end) { setOutput(value); } else { setOutput(getX(outC - start)); } } `;return}this.userCode=` ${o} start = ${o}(${a}); ${o} end = ${o}(${i}); void main() { ${o} outC = getOutputCoords(); if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { setOutput(value); } else { ${o} coords = outC - start; setOutput(getX(${l})); } } `}};var tO=class{constructor(t,n,r){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=n.map((m,g)=>m[0]+t[g]+m[1]);let s=t.length,o=Ct(s),a=n.map(m=>m[0]).join(","),i=n.map((m,g)=>m[0]+t[g]).join(","),l=ir("rc",s),u=ir("source",s),c=`${l[s-1]} < ${this.outputShape[s-1]}`,p=s===1?"source":`vec2(${u.slice(-2).join()})`,d=[`${o} rc = outputLoc;`,`${l[s-1]} += 1; if(${c}) { `,s===1?"":`} rc = outputLoc; ${l[s-2]} += 1; if(${l[s-2]} < ${this.outputShape[s-2]}) {`,s===1?"":` ${l[s-1]} += 1; if(${c}) {`],f=s===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let m=0,g=s===1?2:4;m{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:o,constantValue:a}=r;if(C.sizeFromShape(s.shape)===0){let u=o.map((c,p)=>c[0]+s.shape[p]+c[1]);return vc({backend:n,attrs:{shape:u,value:a,dtype:s.dtype}})}let i=he().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new tO(s.shape,o,a):new eO(s.shape,o,a),l=[[a]];return n.runWebGLProgram(i,[s],s.dtype,l)},zoe={kernelName:Wp,backendName:"webgl",kernelFunc:nO};var GYe=` if(a < 0.0 && floor(b) < b){ return NAN; } if (b == 0.0) { return 1.0; } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); `,UYe=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); `+Sd+` return result; `,jYe=Qt({opSnippet:GYe,packedOpSnippet:UYe}),Loe={kernelName:Tu,backendName:"webgl",kernelFunc:jYe};function HYe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:o,keepDims:a}=r,i=s.shape.length,l=[],u=C.parseAxisParam(o,s.shape),c=u,p=M.getAxesPermutation(c,i),d=s;p!=null&&(d=On({inputs:{x:s},backend:n,attrs:{perm:p}}),c=M.getInnerMostAxes(c.length,i),l.push(d)),M.assertAxesAreInnerMostDims("prod",c,i);let f;if(n.shouldExecuteOnCPU([d])){let h=n.texData.get(d.dataId).values,{outVals:m,outShape:g,outDtype:x}=Dne(d.shape,d.dtype,h,c);f=n.makeTensorInfo(g,x,m)}else{let[h,m]=M.computeOutAndReduceShapes(d.shape,c),g=C.sizeFromShape(m),x=$e({inputs:{x:d},backend:n,attrs:{shape:[-1,g]}}),y=Vh(s.dtype),b=la(x,y,"prod",n);f=$e({inputs:{x:b},backend:n,attrs:{shape:h}}),l.push(x),l.push(b)}if(a){l.push(f);let h=M.expandShapeToKeepDim(f.shape,u);f=$e({inputs:{x:f},backend:n,attrs:{shape:h}})}return l.forEach(h=>n.disposeIntermediateTensorInfo(h)),f}var Boe={kernelName:qx,backendName:"webgl",kernelFunc:HYe};var rO=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:o,dtype:a}=n,i=$ne(r,s,o,a);return t.makeTensorInfo([i.length],a,i)},Voe={kernelName:Kx,backendName:"webgl",kernelFunc:rO};var qYe="return 1.0 / x;",KYe=Xe({opSnippet:qYe}),Woe={kernelName:_u,backendName:"webgl",kernelFunc:KYe};var XYe=Qr+` return (x < 0.0) ? 0.0 : x; `,ZYe=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,YYe=Xe({opSnippet:XYe,packedOpSnippet:ZYe}),Goe={kernelName:Eu,backendName:"webgl",kernelFunc:YYe};var JYe=Qr+` return (x < 0.0) ? 0.0 : min(6.0, x); `,QYe=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,eJe=Xe({opSnippet:JYe,packedOpSnippet:QYe}),Uoe={kernelName:Ru,backendName:"webgl",kernelFunc:eJe};var sO=class{constructor(t,n,r,s,o){this.variableNames=["A"],this.outputShape=[];let[a,i,l,u]=t;this.outputShape=[a,n,r,u];let c=[s&&n>1?i-1:i,s&&r>1?l-1:l],p=[s&&n>1?n-1:n,s&&r>1?r-1:r],d;o?d="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/p[0]}, ${c[1]/p[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${l}.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = ${d}; // Compute the four integer indices. ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0))); ivec2 sourceCeilRC = ivec2( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d); float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d); float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d); float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d); vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC); float top = topLeft + (topRight - topLeft) * fracRC.y; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y; float newValue = top + (bottom - top) * fracRC.x; setOutput(newValue); } `}};var oO=class{constructor(t,n,r,s,o){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,l,u]=t;this.outputShape=[a,n,r,u];let c=[s&&n>1?i-1:i,s&&r>1?l-1:l],p=[s&&n>1?n-1:n,s&&r>1?r-1:r],d;o?d="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/p[0]}, ${c[1]/p[1]}, ${c[1]/p[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${l}.0, ${l}.0); float getAValue(int b, int r, int c, int d) { return getChannel(getA(b, r, c, d), vec2(c, d)); } void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; // Calculate values for next column in yRC.z. ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. vec3 sourceFracIndexRC = ${d}; // Compute the four integer indices. ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0))); ivec3 sourceCeilRC = ivec3( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < ${u-1}; bool hasNextRow = coords.z < ${r-1}; // In parallel, construct four corners for all four components in // packed 2x2 cell. vec4 topLeft = vec4( getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 bottomLeft = vec4( getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 topRight = vec4( getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0); vec4 bottomRight = vec4( getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0); vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC); vec4 top = mix(topLeft, topRight, fracRC.yyzz); vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz); vec4 newValue = mix(top, bottom, fracRC.x); setOutput(newValue); } `}};function tJe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:o,halfPixelCenters:a,size:i}=r,[l,u]=i,c=he().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new oO(s.shape,l,u,o,a):new sO(s.shape,l,u,o,a);return n.runWebGLProgram(c,[s],"float32")}var joe={kernelName:Hp,backendName:"webgl",kernelFunc:tJe};var aO=class{constructor(t,n,r){this.variableNames=["dy"],this.outputShape=[],this.outputShape=n;let[,s,o]=n,[,a,i]=t,l=[r&&a>1?s-1:s,r&&i>1?o-1:o],u=[r&&a>1?a-1:a,r&&i>1?i-1:i],c=l[0]/u[0],p=l[1]/u[1],d=1/c,f=1/p,h=Math.ceil(d)*2+2,m=Math.ceil(f)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(${c}); const float widthScale = float(${p}); const float invHeightScale = float(${d}); const float invWidthScale = float(${f}); const int winHeight = int(${h}); const int winWidth = int(${m}); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(startRLerp - float(winHeight / 2)); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(startCLerp - float(winWidth / 2)); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= ${a}) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= ${i}) { continue; } float dxR = float(dyR) * heightScale; int topDxRIndex = int(floor(dxR)); int bottomDxRIndex = int(min(ceil(dxR), ${s-1}.0)); float dxRLerp = dxR - float(topDxRIndex); float inverseDxRLerp = 1.0 - dxRLerp; float dxC = float(dyC) * widthScale; int leftDxCIndex = int(floor(dxC)); int rightDxCIndex = int(min(ceil(dxC), ${o-1}.0)); float dxCLerp = dxC - float(leftDxCIndex); float inverseDxCLerp = 1.0 - dxCLerp; if (r == topDxRIndex && c == leftDxCIndex) { // topLeft accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; } if (r == topDxRIndex && c == rightDxCIndex) { // topRight accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; } if (r == bottomDxRIndex && c == leftDxCIndex) { // bottomLeft accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; } if (r == bottomDxRIndex && c == rightDxCIndex) { // bottomRight accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; } } } // End loop over dy setOutput(accumulator); } `}};function nJe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:o}=t,{alignCorners:a}=r,i=new aO(o.shape,s.shape,a);return n.runWebGLProgram(i,[o],o.dtype)}var Hoe={kernelName:Yx,backendName:"webgl",kernelFunc:nJe};var iO=class{constructor(t,n,r,s,o){this.variableNames=["A"],this.outputShape=[];let[a,i,l,u]=t;this.outputShape=[a,n,r,u];let c=[s&&n>1?i-1:i,s&&r>1?l-1:l],p=[s&&n>1?n-1:n,s&&r>1?r-1:r],d=s?"0.5":"0.0",f;o?f="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":f="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/p[0]}, ${c[1]/p[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${l}.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = ${f}; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${d}))); float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); setOutput(newValue); } `}};var lO=class{constructor(t,n,r,s,o){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,l,u]=t;this.outputShape=[a,n,r,u];let c=[s&&n>1?i-1:i,s&&r>1?l-1:l],p=[s&&n>1?n-1:n,s&&r>1?r-1:r],d=s?"0.5":"0.0",f;o?f="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":f="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/p[0]}, ${c[1]/p[1]}, ${c[1]/p[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${l}.0, ${l}.0); float getAValue(int b, int r, int c, int d) { return getChannel(getA(b, r, c, d), vec2(c, d)); } void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; // Calculate values for next column in yRC.z. ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. vec3 sourceFracIndexRC = ${f}; // Compute the coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${d}))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < ${u-1}; bool hasNextRow = coords.z < ${r-1}; vec4 newValue = vec4( getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d), hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0); setOutput(newValue); } `}};function rJe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:o,halfPixelCenters:a,size:i}=r,[l,u]=i,c=he().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new lO(s.shape,l,u,o,a):new iO(s.shape,l,u,o,a);return n.runWebGLProgram(c,[s],s.dtype)}var qoe={kernelName:jp,backendName:"webgl",kernelFunc:rJe};var uO=class{constructor(t,n,r){this.variableNames=["dy"],this.outputShape=[],this.outputShape=n;let[,s,o]=n,[,a,i]=t,l=[r&&a>1?s-1:s,r&&i>1?o-1:o],u=[r&&a>1?a-1:a,r&&i>1?i-1:i],c=l[0]/u[0],p=l[1]/u[1],d=1/c,f=1/p,h=Math.ceil(d)*2+2,m=Math.ceil(f)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(${c}); const float widthScale = float(${p}); const float invHeightScale = float(${d}); const float invWidthScale = float(${f}); const int winHeight = int(${h}); const int winWidth = int(${m}); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(floor(startRLerp - float(winHeight / 2))); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(floor(startCLerp - float(winWidth / 2))); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= ${a}) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= ${i}) { continue; } float sourceFracRow = float(${l[0]}) * (float(dyR) / float(${u[0]})); float sourceFracCol = float(${l[1]}) * (float(dyC) / float(${u[1]})); int sourceNearestRow = int(min( float(int(${s}) - 1), ${r} ? float(round(sourceFracRow)) : float(floor(sourceFracRow)))); int sourceNearestCol = int(min( float(int(${o}) - 1), ${r} ? float(round(sourceFracCol)) : float(floor(sourceFracCol)))); if (r == sourceNearestRow && c == sourceNearestCol) { accumulator += getDy(b, dyR, dyC, d); } } } // End loop over dy setOutput(accumulator); } `}};function sJe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:o}=t,{alignCorners:a}=r,i=new uO(o.shape,s.shape,a);return n.runWebGLProgram(i,[o],o.dtype)}var Koe={kernelName:Zx,backendName:"webgl",kernelFunc:sJe};var cO=class{constructor(t,n){this.variableNames=["x"];let r=t.length;if(r>4)throw new Error(`WebGL backend: Reverse of rank-${r} tensor is not yet supported`);if(this.outputShape=t,r===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${t[0]} - coord - 1)); } `;return}let s=i=>n.indexOf(i)!==-1&&t[i]!==1?`${t[i]} - coords[${i}] - 1`:`coords[${i}]`,o=t.map((i,l)=>s(l)).join(","),a=Ct(r);this.userCode=` void main() { ${a} coords = getOutputCoords(); setOutput(getX(${o})); } `}};var pO=class{constructor(t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let r=t.length;if(r>4)throw new Error(`WebGL backend: Reverse of rank-${r} tensor is not yet supported`);this.outputShape=t;let s=ir("rc",r),o=`${s[r-1]} + 1 < ${this.outputShape[r-1]}`,a=`${s[r-2]} + 1 < ${this.outputShape[r-2]}`,i=Ct(r);r===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); result.r = getChannel(getX(${t[0]} - rc - 1), ${t[0]} - rc - 1); if(${o}){ result.g = getChannel(getX(${t[0]} - (rc + 1) - 1), ${t[0]} - (rc + 1) - 1); } setOutput(result); } `:this.userCode=` void main() { ${i} rc = getOutputCoords(); vec4 result = vec4(0.); result.r = ${l(s.slice())}; if(${o}){ result.g = ${u(s.slice())}; } if(${a}) { result.b = ${c(s.slice())}; if(${o}) { result.a = ${p(s.slice())}; } } setOutput(result); } `;function l(h){return d(h)}function u(h){return h[r-1]="("+h[r-1]+" + 1)",d(h)}function c(h){return h[r-2]="("+h[r-2]+" + 1)",d(h)}function p(h){return h[r-1]="("+h[r-1]+" + 1)",h[r-2]="("+h[r-2]+" + 1)",d(h)}function d(h){let m=t.map((y,b)=>f(b,h)),g=m.join(","),x=m.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${x}))`}function f(h,m){return n.indexOf(h)!==-1&&t[h]!==1?`${t[h]} - ${m[h]} - 1`:`${m[h]}`}}};function oJe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:o}=r,a=s.shape.length,i=C.parseAxisParam(o,s.shape);if(a===0)return lr({inputs:{x:s},backend:n});let l=he().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new pO(s.shape,i):new cO(s.shape,i);return n.runWebGLProgram(l,[s],s.dtype)}var Xoe={kernelName:qp,backendName:"webgl",kernelFunc:oJe};var dO=class{constructor(t,n){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let r=t[1],s=t[2];this.outputShape=t;let o="";typeof n=="number"?o=`float outputValue = ${n.toFixed(2)};`:o=` vec3 fill = vec3(${n.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; int y = coords[1]; float coordXFloat = (float(x) - params[0]) * params[3] - (float(y) - params[1]) * params[2]; float coordYFloat = (float(x) - params[0]) * params[2] + (float(y) - params[1]) * params[3]; int coordX = int(round(coordXFloat + params[0])); int coordY = int(round(coordYFloat + params[1])); ${o} if(coordX >= 0 && coordX < ${s} && coordY >= 0 && coordY < ${r}) { outputValue = getImage(coords[0], coordY, coordX, coords[3]); } setOutput(outputValue); } `}};var Zoe={kernelName:dy,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:o,center:a}=t,i=n,l=new dO(r.shape,o),[u,c]=M.getImageCenter(a,r.shape[1],r.shape[2]),p=[[u,c,Math.sin(s),Math.cos(s)]];return i.runWebGLProgram(l,[r],r.dtype,p)}};var aJe=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); if ((x - base) < 0.5) { return floor(x); } else if ((x - base) > 0.5) { return ceil(x); } else { if (mod(base, 2.0) == 0.0) { return base; } else { return base + 1.0; } } `,iJe=Xe({opSnippet:aJe}),Yoe={kernelName:Du,backendName:"webgl",kernelFunc:iJe};var lJe="return inversesqrt(x);",uJe=Xe({opSnippet:lJe,cpuKernelImpl:Fne}),Joe={kernelName:$u,backendName:"webgl",kernelFunc:uJe};var vv=class{constructor(t,n,r,s,o,a,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let l=Ct(o.length),u=Ct(a.length),c="";r===1?c="i":r===2&&(c="i, j");let p=`getIndices(${c})`,d="";s===1?d="i":s===2&&(d="i, coords[1]");let f=`getUpdates(${d})`,h=n>1?"strides[j]":"strides";this.userCode=` ${l} strides = ${l}(${o}); void main() { ${u} coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < ${t}; i++) { int flattenedIndex = 0; for (int j = 0; j < ${n}; j++) { int index = round(${p}); flattenedIndex += index * ${h}; } if (flattenedIndex == coords[0]) { sum += ${f}; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } `}};function cJe(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s,updates:o}=t,{shape:a}=r,{sliceRank:i,numUpdates:l,sliceSize:u,strides:c,outputSize:p}=M.calculateShapes(o,s,a),d=[p/u,u];if(p===0)return n.makeTensorInfo(a,s.dtype);let f=$e({inputs:{x:s},backend:n,attrs:{shape:[l,i]}}),h=$e({inputs:{x:o},backend:n,attrs:{shape:[l,u]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new vv(l,i,f.shape.length,h.shape.length,c,d),x=n.runWebGLProgram(g,[h,f,m],h.dtype),y=$e({inputs:{x},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(x),n.disposeIntermediateTensorInfo(m),y}var Qoe={kernelName:Jx,backendName:"webgl",kernelFunc:cJe};var fO=class{constructor(t,n,r){this.variableNames=["c","a","b"],this.outputShape=n;let s,o;if(r>4)throw Error(`Where for rank ${r} is not yet supported`);if(r===1)o="resRC",s="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],l=[],u=[];for(let c=0;c= 1.0) { setOutput(getA(${o})); } else { setOutput(getB(${o})); } } `}};function pJe(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:o}=t,a=new fO(r.shape.length,s.shape,s.shape.length);return n.runWebGLProgram(a,[r,s,o],Or(s.dtype,o.dtype))}var eae={kernelName:Kp,backendName:"webgl",kernelFunc:pJe};var dJe=` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 float scaleAlpha = ${M.SELU_SCALEALPHA}; float scale = ${M.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `,fJe=Xe({opSnippet:dJe}),tae={kernelName:Fu,backendName:"webgl",kernelFunc:fJe};var nae="return 1.0 / (1.0 + exp(-1.0 * x));",hJe=Xe({opSnippet:nae,packedOpSnippet:nae,cpuKernelImpl:One}),rae={kernelName:zu,backendName:"webgl",kernelFunc:hJe};var mJe=` if (isnan(x)) { return 0.0; } return sign(x); `,gJe=Xe({opSnippet:mJe}),sae={kernelName:Mu,backendName:"webgl",kernelFunc:gJe};var xJe=_S+` return sin(x); `,yJe=Xe({opSnippet:xJe}),oae={kernelName:Ou,backendName:"webgl",kernelFunc:yJe};var bJe=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `,AJe=Xe({opSnippet:bJe}),aae={kernelName:Pu,backendName:"webgl",kernelFunc:AJe};var vJe=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; bool too_large = x > -threshold; bool too_small = x < threshold; float result; float exp_x = exp(x); if (too_large){ result = x; } else if (too_small){ result = exp_x; } else{ result = log(exp_x + 1.0); } return result; `,wJe=Xe({opSnippet:vJe}),iae={kernelName:Lu,backendName:"webgl",kernelFunc:wJe};var kJe=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:o,paddings:a}=r;C.assert(s.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=o.reduce((x,y)=>x*y),l=[[0,0]];l.push(...a);for(let x=1+o.length;xn.disposeIntermediateTensorInfo(x)),g},lae={kernelName:Yp,backendName:"webgl",kernelFunc:kJe};function IJe(e){let{inputs:t,backend:n}=e,{indices:r,values:s,denseShape:o,defaultValue:a}=t;if(o.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${o.shape}`);if(r.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${r.shape}`);if(s.shape.length!==1)throw new Error(`Values must be a vector, saw: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw: ${a.shape}`);let i=n.readSync(r.dataId),l=n.readSync(s.dataId),u=n.readSync(o.dataId),c=n.readSync(a.dataId)[0],[p,d,f,h,m]=Mne(i,r.shape,r.dtype,l,s.dtype,u,c);return[n.makeTensorInfo(d,r.dtype,p),n.makeTensorInfo([d[0]],s.dtype,f),n.makeTensorInfo([h.length],"bool",new Uint8Array(h.map(g=>Number(g)))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}var uae={kernelName:Qx,backendName:"webgl",kernelFunc:IJe};function CJe(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:s,newShape:o}=t;if(r.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${o.shape}`);let a=Array.from(n.readSync(s.dataId)),i=n.readSync(r.dataId),l=Array.from(n.readSync(o.dataId)),[u,c,p]=zne(i,r.shape,r.dtype,a,l);return[n.makeTensorInfo(c,r.dtype,u),n.makeTensorInfo([p.length],o.dtype,new Int32Array(p))]}var cae={kernelName:ey,backendName:"webgl",kernelFunc:CJe};function SJe(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.readSync(r.dataId),i=n.readSync(s.dataId),l=n.readSync(o.dataId),[u,c]=SS(a,r.shape,r.dtype,i,l,!0);return n.makeTensorInfo(c,r.dtype,u)}var pae={kernelName:ty,backendName:"webgl",kernelFunc:SJe};function NJe(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:o}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(o.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${o.shape}`);let a=n.readSync(r.dataId),i=n.readSync(s.dataId),l=n.readSync(o.dataId),[u,c]=SS(a,r.shape,r.dtype,i,l);return n.makeTensorInfo(c,r.dtype,u)}var dae={kernelName:ny,backendName:"webgl",kernelFunc:NJe};function TJe(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:o,defaultValue:a}=t,{outputShape:i}=r,{sliceRank:l,numUpdates:u,strides:c,outputSize:p}=M.calculateShapes(o,s,i),d=!1,f=new vv(u,l,s.shape.length,o.shape.length,c,[p,1],d),h=n.runWebGLProgram(f,[o,s,a],o.dtype),m=$e({inputs:{x:h},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(h),m}var fae={kernelName:ry,backendName:"webgl",kernelFunc:TJe};function _Je(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:o,axis:a}=r,i=C.parseAxisParam(a,s.shape)[0],l=M.prepareSplitSize(s,o,i),u=s.shape.length,c=new Array(u).fill(0),p=s.shape.slice();return l.map(d=>{let f=[...p];f[i]=d;let h=el({inputs:{x:s},backend:n,attrs:{begin:c,size:f}});return c[i]+=d,h})}var hae={kernelName:Jp,backendName:"webgl",kernelFunc:_Je};var mae="return sqrt(x);",EJe=Xe({opSnippet:mae,packedOpSnippet:mae,cpuKernelImpl:Lne}),gae={kernelName:Bu,backendName:"webgl",kernelFunc:EJe};var RJe="return x * x;",DJe=Xe({opSnippet:RJe}),xae={kernelName:sy,backendName:"webgl",kernelFunc:DJe};var yae="return (a - b) * (a - b);",$Je=Qt({opSnippet:yae,packedOpSnippet:yae}),bae={kernelName:Vu,backendName:"webgl",kernelFunc:$Je};function FJe({inputs:e,attrs:t,backend:n}){let{x:r}=e,s=Qr+` return x > 0.0 ? 1.0 : float(${t.alpha}); `,o=new $o(r.shape,s);return n.runWebGLProgram(o,[r],r.dtype)}var Aae={kernelName:ju,backendName:"webgl",kernelFunc:FJe};var hO=class{constructor(t,n,r){this.variableNames=["x"],this.outputShape=r;let s=r.length,o=Ct(r.length),a=Ct(r.length),i="";if(s===1)i="coords * strides + begin";else{let l=0;i=r.map((u,c)=>(l++,r.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${l-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=` ${o} begin = ${o}(${t}); ${o} strides = ${o}(${n}); void main() { ${a} coords = getOutputCoords(); setOutput(getX(${i})); } `}};function OJe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:o,end:a,strides:i,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:d}=r,{nonStrided:f,$begin:h,$strides:m,size:g,newShape:x,outShape:y}=Cs.sliceInfo(s.shape,o,a,i,l,u,c,p,d),b=$e({inputs:{x:s},backend:n,attrs:{shape:x}}),A;if(f){let w=el({inputs:{x:b},backend:n,attrs:{begin:h,size:g}});A=$e({inputs:{x:w},backend:n,attrs:{shape:y}}),n.disposeIntermediateTensorInfo(w)}else if(y.some(w=>w===0))A=n.makeTensorInfo(y,s.dtype,[]);else if(n.shouldExecuteOnCPU([b])){let I=n.texData.get(b.dataId).values,N=et(b.shape,b.dtype,I),T=Bne(y,N,m,h);A=n.makeTensorInfo(y,b.dtype,T.values)}else{let k=new hO(h,m,y);A=n.runWebGLProgram(k,[b],b.dtype)}let v=$e({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(A),v}var vae={kernelName:oy,backendName:"webgl",kernelFunc:OJe};function PJe(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:o,leftPad:a,rightPad:i,padWidth:l,preserveShortSequences:u}=r,{data:c,dataSplits:p}=t,d=n.readSync(c.dataId),f=n.readSync(p.dataId),[h,m]=Vne(d,f,s,o,a,i,l,u);return[n.makeTensorInfo([h.length],"string",h),n.makeTensorInfo(p.shape,"int32",m)]}var wae={kernelName:ay,backendName:"webgl",kernelFunc:PJe};function MJe(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:s}=r,{input:o,delimiter:a}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(o.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${o.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=n.readSync(o.dataId),l=n.readSync(a.dataId)[0],[u,c,p]=Wne(i,l,s),d=c.length;return[n.makeTensorInfo([d,2],"int32",u),n.makeTensorInfo([d],"string",c),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var kae={kernelName:iy,backendName:"webgl",kernelFunc:MJe};function zJe(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:s}=r,{input:o}=t;if(o.dtype!=="string")throw new Error("Input must be of datatype string");if(s<=0)throw new Error("Number of buckets must be at least 1");let a=n.readSync(o.dataId),i=Gne(a,s);return n.makeTensorInfo(o.shape,"int32",i)}var Iae={kernelName:ly,backendName:"webgl",kernelFunc:zJe};var LJe="return tan(x);",BJe=Xe({opSnippet:LJe}),Cae={kernelName:Gu,backendName:"webgl",kernelFunc:BJe};var VJe=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `,WJe=Xe({opSnippet:VJe}),Sae={kernelName:Uu,backendName:"webgl",kernelFunc:WJe};var mO=class{constructor(t,n){this.variableNames=["A"];let r=new Array(t.length);for(let a=0;a5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let s=0;s5){let l=n.readSync(s.dataId),u=s.dtype==="string"?l.map(d=>C.decodeString(d)):l,c=et(s.shape,s.dtype,u),p=jne(c,o);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let a=new mO(s.shape,o);return n.runWebGLProgram(a,[s],s.dtype)}var Nae={kernelName:vl,backendName:"webgl",kernelFunc:gO};var xO=class{constructor(t){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=t,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int elemIdx = coords[1]; // We compare elements pair-wise within a group of size 2 * inc. // The comparing rule for each group alternates between ascending // and descending. Within each group, we compare each pair at // positions i and i+inc. To decide whether an element at position i // is x0 or x1, we mod it by 2 * inc, if the result is smaller than // inc, it is in the first half of the group, we denote it as x0, // otherwise we denote it as x1. // For example, as shown in the Bitonic top K paper referenced above, // Figure5(a) shows that element[1] is in the // second half of the group when group size is 2, but it is in the // first half of the group when group size is 4. bool isFirstInPair = imod(elemIdx, 2 * inc) < inc; int i = isFirstInPair ? elemIdx : elemIdx - inc; int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc)); float x0 = i0 < n ? getX(batch, i0) : negativeInf; float x1 = i1 < n ? getX(batch, i1) : negativeInf; // Denotes which direction indices are in (ascending or descending). bool reverse = imod(elemIdx, 2 * dir) >= dir; bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0); if (reverse == isGreater) { // Elements in opposite order of direction int iTemp = i0; i0 = i1; i1 = iTemp; } if (isFirstInPair) { setOutput(float(i0)); } else { setOutput(float(i1)); } } `}},yO=class{constructor(t){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=t,this.userCode=` void main() { // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... ivec2 coords = getOutputCoords(); int batch = coords[0]; int elemIdx = coords[1]; // The output size is half of the previous size. // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4), // we only need to output the indices at positions |, the indices at // positions _ can be thrown away, see Figure5(b) After Phase 2 // (Merge phase) in the Bitonic Top K paper referenced above. // For example, the paper shows we only need to output the orange bars. // The output sequence should look like this | | | | | | | |. // Because the sequence is halved, to map the output index back // to the previous sequence to find the corresponding value, // we need to double the index. When we double the index, // we basically interpolate a position, so 2i looks like // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position // of each 2k positions by - elemIdx % k. E.g. for output at // index 4,5,6,7, we want to get the corresponding element at // original index 8,9,10,11, for output at index 8,9,10,11, // we want to get the corresponding element at original index // 16,17,18,19, so on and so forth. int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k)); int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k)); float x0 = getX(batch, i0); float x1 = i1 < n ? getX(batch, i1) : x0; setOutput(x0 >= x1 ? float(i0) : float(i1)); } `}};function qm(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function Tae(e){let t=1;for(;tl){let T=n.readSync(s.dataId),[_,R]=Hne(T,u,s.dtype,o,a);return[n.makeTensorInfo(_.shape,_.dtype,_.values),n.makeTensorInfo(R.shape,R.dtype,R.values)]}if(o===0)return u[u.length-1]=0,[n.makeTensorInfo(u,s.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(c===1)return[s,vc({attrs:{shape:u,dtype:"int32",value:0},backend:n})];let p=n.texData.get(s.dataId),d=p!==null&&p.isPacked,f=d?n.unpackTensor(s):s,m=C.sizeFromShape(u)/c,g=$e({inputs:{x:f},attrs:{shape:[m,c]},backend:n});d&&qm(n,f);let x=Tae(o),y=Tae(c),b=null,A=()=>b===null?[g,g]:[g,b],v=(T,_,R)=>{let S=A(),F=new xO(R),W=[[c],[b===null?1:0],[Number.NEGATIVE_INFINITY],[T],[_]],q=b;b=n.runWebGLProgram(F,S,"int32",W),qm(n,q)};for(let T=1;T=1;R/=2)v(_,R,[m,y])}for(let T=y;T>x;T/=2){let _=A(),R=new yO([m,T/2]),F=[[c],[b===null?1:0],[x]],B=b;b=n.runWebGLProgram(R,_,"int32",F),qm(n,B);let W=x/2,q=W*2;for(let K=W;K>=1;K/=2)v(q,K,b.shape)}let w=b;b=el({inputs:{x:b},backend:n,attrs:{begin:0,size:[m,o]}}),qm(n,w);let k=B8({inputs:{x:g,indices:b},backend:n,attrs:{axis:1,batchDims:1}});qm(n,g);let I=u.slice(0,-1);I.push(o),w=b,b=$e({inputs:{x:b},attrs:{shape:I},backend:n}),qm(n,w);let N=k;return k=$e({inputs:{x:k},attrs:{shape:I},backend:n}),qm(n,N),[k,b]}var _ae={kernelName:uy,backendName:"webgl",kernelFunc:UJe};var bO=class{constructor(t,n,r,s,o,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=r==="nearest"?1:2,l;switch(s){case"constant":l=1;break;case"reflect":l=2;break;case"wrap":l=3;break;case"nearest":l=4;break;default:l=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${l} == 2) { if (inCoord < 0.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz2 = 2.0 * len; if (inCoord < sz2) { inCoord = sz2 * float(int(float(-inCoord / sz2))) + inCoord; } inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0; } } else if (inCoord > len - 1.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz2 = 2.0 * len; inCoord -= sz2 * float(int(float(inCoord / sz2))); if (inCoord >= len) { inCoord = sz2 - inCoord - 1.0; } } } return clamp(inCoord, 0.0, len - 1.0); } else if (${l} == 3) { if (inCoord < 0.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz = len - 1.0; inCoord += len * (float(int(float(-inCoord / sz))) + 1.0); } } else if (inCoord > len - 1.0) { if (len <= 1.0) { inCoord = 0.0; } else { float sz = len - 1.0; inCoord -= len * float(int(float(inCoord / sz))); } } return clamp(inCoord, 0.0, len - 1.0); } else if (${l} == 4) { return clamp(outCoord, 0.0, len - 1.0); } else { return outCoord; } } float readWithFillValue(int batch, int coordY, int coordX, int channel) { float outputValue; if (0 <= coordY && coordY < ${t} && 0 <= coordX && coordX < ${n}) { outputValue = getImage(batch, coordY, coordX, channel); } else { outputValue = float(${o}); } return outputValue; } void main() { ivec4 coords = getOutputCoords(); float outputValue; int batch = coords[0]; int x = coords[2]; int y = coords[1]; int channel = coords[3]; float xf = float(x); float yf = float(y); float a1 = getTransforms(batch, 0); float a2 = getTransforms(batch, 1); float a3 = getTransforms(batch, 2); float b1 = getTransforms(batch, 3); float b2 = getTransforms(batch, 4); float b3 = getTransforms(batch, 5); float c1 = getTransforms(batch, 6); float c2 = getTransforms(batch, 7); float projection = c1 * xf + c2 * yf + 1.0; if (projection == 0.0) { outputValue = float(${o}); } else { float inX = (a1 * xf + a2 * yf + a3) / projection; float inY = (b1 * xf + b2 * yf + b3) / projection; float mapX = mapCoord(inX, float(${n})); float mapY = mapCoord(inY, float(${t})); if (${i} == 1) { int coordY = int(round(mapY)); int coordX = int(round(mapX)); outputValue = readWithFillValue(batch, coordY, coordX, channel); } else { float yFloor = floor(mapY); float xFloor = floor(mapX); float yCeil = yFloor + 1.0; float xCeil = xFloor + 1.0; float valueYFloor = (xCeil - mapX) * readWithFillValue(batch, int(yFloor), int(xFloor), channel) + (mapX - xFloor) * readWithFillValue(batch, int(yFloor), int(xCeil), channel); float valueYCeil = (xCeil - mapX) * readWithFillValue(batch, int(yCeil), int(xFloor), channel) + (mapX - xFloor) * readWithFillValue(batch, int(yCeil), int(xCeil), channel); outputValue = (yCeil - mapY) * valueYFloor + (mapY - yFloor) * valueYCeil; } } setOutput(outputValue); } `}};function jJe(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,transforms:o}=t,{interpolation:a,fillMode:i,fillValue:l,outputShape:u}=r,[c,p,d,f]=s.shape,[h,m]=u!=null?u:[p,d],g=[c,h,m,f],x=new bO(p,d,a,i,l,g);return n.runWebGLProgram(x,[s,o],"float32")}var Eae={kernelName:cy,backendName:"webgl",kernelFunc:jJe};function HJe(e){let{inputs:t,attrs:n,backend:r}=e,{axis:s}=n,{x:o}=t;Rl(o,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=r.readSync(o.dataId),{outputValues:i,outputShape:l,indices:u}=qne(a,s,o.shape,o.dtype);return[r.makeTensorInfo(l,o.dtype,i),r.makeTensorInfo([u.length],"int32",u)]}var Rae={kernelName:py,backendName:"webgl",kernelFunc:HJe};function qJe(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:o}=r;o<0&&(o+=s.shape.length);let a=s,i=a.shape.length,l=s.shape[o],u=new Array(i-1),c=0;for(let m=0;mn.disposeIntermediateTensorInfo(m)),h}var Dae={kernelName:td,backendName:"webgl",kernelFunc:qJe};var AO=class{constructor(t,n){this.variableNames=["x","segmentIds"];let r=t.windowSize,s=t.batchSize,o=t.inSize,a=t.numSegments,i=a*Math.ceil(o/r);this.outputShape=[s,i];let l="0.0",u="sumValue",c=Math.floor(r/4)*4,p=r%4,d=` sumValue += dot(values, segFilter); `,f="";o%r>0&&(f=` if (inIdx < 0 || inIdx >= ${o}) { return initializationValue; } `);let h="";o%r>0&&(h=` if (inIdx < 0 || inIdx >= ${o}) { return -1.0; } `),this.userCode=` const float initializationValue = ${l}; float getValue(int batch, int inIdx) { ${f} return getX(batch, inIdx); } float getSegmentIdAtIndex(int inIdx) { ${h} return getSegmentIds(inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = int(floor(float(outIdx) / float( ${a})) * float(${r})); int currentSeg = int(mod(float(outIdx), float(${a}))); float sumValue = 0.0; for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 ); ${d} } int inIdx = inOffset + ${c}; if (${p===1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, 0, 0, 0 ); ${d} } else if (${p===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, 0, 0 ); ${d} } else if (${p===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, 0 ); ${d} } setOutput(${u}); } `}};function KJe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:o}=t,{numSegments:a}=r,i=s.shape.length,l=[],u=0,c=M.getAxesPermutation([u],i),p=s;c!=null&&(p=On({inputs:{x:s},backend:n,attrs:{perm:c}}),l.push(p),u=M.getInnerMostAxes(1,i)[0]);let d=M.segment_util.computeOutShape(p.shape,u,a),f=C.sizeFromShape([p.shape[u]]),h=$e({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}});l.push(h);let m=Vh(s.dtype),g=(A,v,w,k,I)=>{let N=A.shape[0],T=A.shape[1],_=M.segment_util.segOpComputeOptimalWindowSize(T,I),R={windowSize:_,inSize:T,batchSize:N,numSegments:I},S=new AO(R,v),F=n.compileAndRun(S,[A,w],k);if(l.push(F),F.shape[1]===I)return F;let B=rO({backend:n,attrs:{start:0,stop:I,step:1,dtype:"float32"}}),W=gO({inputs:{x:B},backend:n,attrs:{reps:[T/_]}});return l.push(B),l.push(W),g(F,v,W,k,I)},x=g(h,"unsortedSegmentSum",o,m,a),y=$e({inputs:{x},backend:n,attrs:{shape:d}}),b=y;if(c!=null){l.push(y);let A=M.getUndoAxesPermutation(c);b=On({inputs:{x:b},backend:n,attrs:{perm:A}})}return l.forEach(A=>n.disposeIntermediateTensorInfo(A)),b}var $ae={kernelName:nd,backendName:"webgl",kernelFunc:KJe};var XJe=[aoe,ioe,vre,kre,Ire,Cre,Nre,Tre,_re,Ere,$re,Fre,Ore,Pre,zre,Mre,Lre,Vre,Bre,Wre,Gre,Ure,jre,qre,Kre,Jre,ese,tse,rse,ure,ose,ise,lse,ase,cse,pse,use,dse,fse,hse,xse,yse,bse,vse,wse,Ase,kse,Ise,Cse,Sse,Nse,Tse,_se,Rse,Dse,Fse,Ose,Pse,Mse,Lse,Bse,Vse,Wse,Gse,Use,jse,Hse,qse,lre,Kse,sse,Xse,Zse,Yse,cre,Jse,Qse,eoe,noe,toe,roe,soe,ooe,uoe,doe,poe,foe,hoe,goe,coe,yoe,boe,Aoe,voe,woe,Noe,mre,_oe,Eoe,Roe,Doe,Xre,$oe,Poe,Moe,zoe,Loe,pre,Boe,Voe,Zre,koe,Woe,Uoe,Goe,xre,joe,Hoe,qoe,Koe,Xoe,Zoe,Yoe,Joe,Qoe,eae,tae,rae,sae,oae,aae,Hre,Soe,iae,lae,uae,cae,pae,dae,fae,hae,gae,xae,bae,Aae,vae,wae,kae,Iae,Coe,bre,Cae,Sae,Nae,_ae,Eae,Are,Rae,Dae,$ae,Foe];for(let e of XJe)g3(e);var Fae=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPalm","rightPalm","leftIndex","rightIndex","leftPinky","rightPinky","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftThumb","leftHand","rightThumb","rightHand"],Oae={leftLeg:["leftHip","leftKnee","leftAnkle","leftHeel","leftFoot"],rightLeg:["rightHip","rightKnee","rightAnkle","rightHeel","rightFoot"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist","leftPalm"],rightArm:["rightShoulder","rightElbow","rightWrist","rightPalm"],leftHand:[],rightHand:[],head:[]};var Pae={initial:!0},es=[null,null],_d=[[0,0],[0,0]],vO=Number.MAX_SAFE_INTEGER,wO,kO=null,Ed=[[0,0],[0,0],[0,0],[0,0]];async function Mae(e){var t,n;if(Pae.initial&&(es[0]=null),!es[0]&&((t=e.body.detector)==null?void 0:t.modelPath)){es[0]=await KC(an(e.modelBasePath,((n=e.body.detector)==null?void 0:n.modelPath)||""));let r=Object.values(es[0].modelSignature.inputs);_d[0][0]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[1].size):0,_d[0][1]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[2].size):0,!es[0]||!es[0].modelUrl?Ce("load model failed:",e.object.modelPath):e.debug&&Ce("load model:",es[0].modelUrl)}else e.debug&&es[0]&&Ce("cached model:",es[0].modelUrl);return es[0]}async function zae(e){var t;if(Pae.initial&&(es[1]=null),es[1])e.debug&&Ce("cached model:",es[1].modelUrl);else{es[1]=await KC(an(e.modelBasePath,e.body.modelPath||""));let n=Object.values(es[1].modelSignature.inputs);_d[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,_d[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,((t=e.body.modelPath)==null?void 0:t.includes("lite"))?wO=["ld_3d","output_segmentation","output_heatmap","world_3d","output_poseflag"]:wO=["Identity","Identity_2","Identity_3","Identity_4","Identity_1"],!es[1]||!es[1].modelUrl?Ce("load model failed:",e.object.modelPath):e.debug&&Ce("load model:",es[1].modelUrl)}return es[1]}function ZJe(e,t){let n=e.map(a=>a.position[0]),r=e.map(a=>a.position[1]),s=[Math.min(...n),Math.min(...r),Math.max(...n)-Math.min(...n),Math.max(...r)-Math.min(...r)],o=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{keypointsBox:s,keypointsBoxRaw:o}}async function YJe(e){let t={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;Ed=[[0,0],[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],t.pad=zi(e,Ed),t.resize=so.resizeBilinear(t.pad,[_d[1][0],_d[1][1]]);let n=Pe(t.resize,255);return Object.keys(t).forEach(r=>ut(t[r])),n}function JJe(e,t){for(let n of e)n.position=[n.position[0]*(t[0]+Ed[2][0]+Ed[2][1])/t[0]-Ed[2][0],n.position[1]*(t[1]+Ed[1][0]+Ed[1][1])/t[1]-Ed[1][0],n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],n.position[2]];return e}async function QJe(e,t,n){var p;let r={};r.input=await YJe(e),[r.ld,r.segmentation,r.heatmap,r.world,r.poseflag]=await((p=es[1])==null?void 0:p.execute(r.input,wO));let s=await r.ld.data(),o=[],a=5;for(let d=0;dd+=f.score,0)/o.length)/100;if(i<(t.body.minConfidence||0))return null;let l=JJe(o,n),u=ZJe(l,[n[0],n[1]]);Object.keys(r).forEach(d=>ut(r[d]));let c={};for(let[d,f]of Object.entries(Oae)){let h=[];for(let m=0;my.part===f[m]),x=l.find(y=>y.part===f[m+1]);g&&x&&g.score>(t.body.minConfidence||0)&&x.score>(t.body.minConfidence||0)&&h.push([g.position,x.position])}c[d]=h}return{id:0,score:i,box:u.keypointsBox,boxRaw:u.keypointsBoxRaw,keypoints:l,annotations:c}}async function IO(e,t){let n=[e.shape[2]||0,e.shape[1]||0];return vO<(t.body.skipFrames||0)&&t.skipFrame?vO++:(kO=await QJe(e,t,n),vO=0),kO?[kO]:[]}var Lae=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Bae={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var ts,ci=[],CO=[0,0,0,0],SO=[0,0,0,0],VS=0,NO=Number.MAX_SAFE_INTEGER;async function TO(e){return Ee.initial&&(ts=null),ts?e.debug&&Ce("cached model:",ts.modelUrl):(ts=await yn(an(e.modelBasePath,e.body.modelPath||"")),!ts||!ts.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",ts.modelUrl)),ts}function eQe(e,t){let[n,r]=e.shape;return ce(()=>{let s=(i,l)=>Ge(i,te(Me(i,at(l,"int32")),at(l,"int32"))),o=ie(e,[r*n]),a=Wo(o,0).dataSync()[0];if(a>t){let i=xi(o,0),l=s(i,n).dataSync()[0],u=Me(i,at(n,"int32")).dataSync()[0];return[l,u,a]}return[0,0,a]})}async function _O(e,t){var n;return NO<(((n=t.body)==null?void 0:n.skipFrames)||0)&&t.skipFrame&&Object.keys(ci).length>0?(NO++,[{id:0,score:VS,box:CO,boxRaw:SO,keypoints:ci,annotations:{}}]):(NO=0,new Promise(async r=>{var p;let s=ce(()=>{if(!(ts==null?void 0:ts.inputs[0].shape))return null;let d=ht.resizeBilinear(e,[ts.inputs[0].shape[2],ts.inputs[0].shape[1]],!1);return te(d,2).sub(1)}),o;if(t.body.enabled&&(o=await(ts==null?void 0:ts.predict(s))),ye(s),o){ci.length=0;let d=o.squeeze();ye(o);let f=d.unstack(2);ye(d);for(let h=0;h(((p=t.body)==null?void 0:p.minConfidence)||0)&&ci.push({score:Math.round(100*x)/100,part:Lae[h],positionRaw:[m/ts.inputs[0].shape[2],g/ts.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/ts.inputs[0].shape[2]),Math.round(e.shape[1]*g/ts.inputs[0].shape[1])]})}f.forEach(h=>ye(h))}VS=ci.reduce((d,f)=>f.score>d?f.score:d,0);let a=ci.map(d=>d.position[0]),i=ci.map(d=>d.position[1]);CO=[Math.min(...a),Math.min(...i),Math.max(...a)-Math.min(...a),Math.max(...i)-Math.min(...i)];let l=ci.map(d=>d.positionRaw[0]),u=ci.map(d=>d.positionRaw[1]);SO=[Math.min(...l),Math.min(...u),Math.max(...l)-Math.min(...l),Math.max(...u)-Math.min(...u)];let c={};for(let[d,f]of Object.entries(Bae)){let h=[];for(let m=0;my.part===f[m]),x=ci.find(y=>y.part===f[m+1]);g&&x&&g.score>(t.body.minConfidence||0)&&x.score>(t.body.minConfidence||0)&&h.push([g.position,x.position])}c[d]=h}r([{id:0,score:VS,box:CO,boxRaw:SO,keypoints:ci,annotations:c}])}))}var EO=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],RO={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var ns,Km=0,Rd=[],DO=Number.MAX_SAFE_INTEGER,Na=[];async function Vae(e){return Ee.initial&&(ns=null),ns?e.debug&&Ce("cached model:",ns.modelUrl):(lx(["size"],e),ns=await yn(an(e.modelBasePath,e.body.modelPath||"")),!ns||!ns.modelUrl?Ce("load model failed:",e.body.modelPath):e.debug&&Ce("load model:",ns.modelUrl)),Km=ns.inputs[0].shape?ns.inputs[0].shape[2]:0,Km===-1&&(Km=256),ns}function Wae(e){let t=e.map(i=>i.position[0]),n=e.map(i=>i.position[1]),r=[Math.min(...t),Math.min(...n),Math.max(...t)-Math.min(...t),Math.max(...n)-Math.min(...n)],s=e.map(i=>i.positionRaw[0]),o=e.map(i=>i.positionRaw[1]),a=[Math.min(...s),Math.min(...o),Math.max(...s)-Math.min(...s),Math.max(...o)-Math.min(...o)];return[r,a]}async function Gae(e,t,n,r){let s=e[0][0];Na.length=0;let o=0;for(let c=0;ct.body.minConfidence){let p=[(r[3]-r[1])*s[c][1]+r[1],(r[2]-r[0])*s[c][0]+r[0]];Na.push({score:Math.round(100*o)/100,part:EO[c],positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}o=Na.reduce((c,p)=>p.score>c?p.score:c,0);let a=[],[i,l]=Wae(Na),u={};for(let[c,p]of Object.entries(RO)){let d=[];for(let f=0;fg.part===p[f]),m=Na.find(g=>g.part===p[f+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}u[c]=d}return a.push({id:0,score:o,box:i,boxRaw:l,keypoints:Na,annotations:u}),a}async function Uae(e,t,n,r){let s=[];for(let o=0;ot.body.minConfidence){Na.length=0;for(let p=0;p<17;p++){let d=a[3*p+2];if(d>t.body.minConfidence){let f=[(r[3]-r[1])*a[3*p+1]+r[1],(r[2]-r[0])*a[3*p+0]+r[0]];Na.push({part:EO[p],score:Math.round(100*d)/100,positionRaw:f,position:[Math.round((n.shape[2]||0)*f[0]),Math.round((n.shape[1]||0)*f[1])]})}}let[l,u]=Wae(Na),c={};for(let[p,d]of Object.entries(RO)){let f=[];for(let h=0;hx.part===d[h]),g=Na.find(x=>x.part===d[h+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&f.push([m.position,g.position])}c[p]=f}s.push({id:o,score:i,boxRaw:u,box:l,keypoints:[...Na],annotations:c})}}return s.sort((o,a)=>a.score-o.score),s.length>t.body.maxDetected&&(s.length=t.body.maxDetected),s}async function $O(e,t){return!ns||!(ns==null?void 0:ns.inputs[0].shape)?[]:new Promise(async n=>{let r={},s=[];t.skipFrame||(Rd.length=0),DO++;for(let o=0;oye(r[l]))}if(s.length!==t.body.maxDetected&&DO>(t.body.skipFrames||0)){r.resized=ht.resizeBilinear(e,[Km,Km],!1),r.cast=Fe(r.resized,"int32"),r.res=await(ns==null?void 0:ns.predict(r.cast));let o=await r.res.array();s=r.res.shape[2]===17?await Gae(o,t,e,[0,0,1,1]):await Uae(o,t,e,[0,0,1,1]),Object.keys(r).forEach(a=>ye(r[a])),Rd.length=0,DO=0}if(t.skipFrame){Rd.length=0;for(let o=0;o10){let a=s[o].keypoints.map(l=>l.position),i=l3(a,1.5,[e.shape[2],e.shape[1]]);Rd.push([...i.yxBox])}}n(s)})}var h1=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var ua,WS=[],FO=Number.MAX_SAFE_INTEGER,GS=2.5;async function jae(e){if(!ua||Ee.initial){ua=await yn(an(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ua.modelSignature.inputs);if(ua.inputSize=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):null,!ua.inputSize)throw new Error(`cannot determine model inputSize: ${e.object.modelPath}`);!ua||!ua.modelUrl?Ce("load model failed:",e.object.modelPath):e.debug&&Ce("load model:",ua.modelUrl)}else e.debug&&Ce("cached model:",ua.modelUrl);return ua}async function tQe(e,t,n,r){let s=0,o=[];for(let u of[1,2,4])ce(async()=>{var g,x;let c=u*13,p=(g=e.find(y=>y.shape[1]===c**2&&y.shape[2]===h1.length))==null?void 0:g.squeeze(),d=(x=e.find(y=>y.shape[1]===c**2&&y.shape[2]r.object.minConfidence&&b!==61){let v=(.5+Math.trunc(y%c))/c,w=(.5+Math.trunc(y/c))/c,k=h[y].map(B=>B*(c/u/t)),[I,N]=[v-GS/u*k[0],w-GS/u*k[1]],[T,_]=[v+GS/u*k[2]-I,w+GS/u*k[3]-N],R=[I,N,T,_];R=R.map(B=>Math.max(0,Math.min(B,1)));let S=[R[0]*n[0],R[1]*n[1],R[2]*n[0],R[3]*n[1]],F={id:s++,score:Math.round(100*A)/100,class:b+1,label:h1[b].label,box:S.map(B=>Math.trunc(B)),boxRaw:R};o.push(F)}}});e.forEach(u=>ye(u));let a=o.map(u=>[u.boxRaw[1],u.boxRaw[0],u.boxRaw[3],u.boxRaw[2]]),i=o.map(u=>u.score),l=[];if(a&&a.length>0){let u=await ht.nonMaxSuppressionAsync(a,i,r.object.maxDetected,r.object.iouThreshold,r.object.minConfidence);l=await u.data(),ye(u)}return o=o.filter((u,c)=>l.includes(c)).sort((u,c)=>c.score-u.score),o}async function OO(e,t){return FO<(t.object.skipFrames||0)&&t.skipFrame&&WS.length>0?(FO++,WS):(FO=0,!Ee.kernels.includes("mod")||!Ee.kernels.includes("sparsetodense")?WS:new Promise(async n=>{let r=[e.shape[2],e.shape[1]],s=ht.resizeBilinear(e,[ua.inputSize,ua.inputSize],!1),o=Me(s,255),a=o.transpose([0,3,1,2]);ye(o),ye(s);let i;t.object.enabled&&(i=await ua.predict(a)),ye(a);let l=await tQe(i,ua.inputSize,r,t);WS=l,n(l)}))}var pi,Xm=0,US=[],PO=Number.MAX_SAFE_INTEGER;async function Hae(e){if(Ee.initial&&(pi=null),pi)e.debug&&Ce("cached model:",pi.modelUrl);else{lx(["floormod"],e),pi=await yn(an(e.modelBasePath,e.object.modelPath||""));let t=Object.values(pi.modelSignature.inputs);Xm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0,!pi||!pi.modelUrl?Ce("load model failed:",e.object.modelPath):e.debug&&Ce("load model:",pi.modelUrl)}return pi}async function nQe(e,t,n){if(!e)return[];let r=[],s=await e.array(),o=ln(e);ye(e);let a=_r(o,6,1);ye(o);let i=vs([a[1],a[0],a[3],a[2]],1),l=ln(i);ye(i);let u=ln(a[4]),c=ln(a[5]);a.forEach(h=>ye(h));let p=await ht.nonMaxSuppressionAsync(l,u,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);ye(l),ye(u),ye(c);let d=await p.data();ye(p);let f=0;for(let h of d){let m=Math.trunc(100*s[0][h][4])/100,g=s[0][h][5],x=h1[g].label,[y,b]=[s[0][h][0]/Xm,s[0][h][1]/Xm],A=[y,b,s[0][h][2]/Xm-y,s[0][h][3]/Xm-b],v=[Math.trunc(A[0]*t[0]),Math.trunc(A[1]*t[1]),Math.trunc(A[2]*t[0]),Math.trunc(A[3]*t[1])];r.push({id:f++,score:m,class:g,label:x,box:v,boxRaw:A})}return r}async function MO(e,t){return PO<(t.object.skipFrames||0)&&t.skipFrame&&US.length>0?(PO++,US):(PO=0,!Ee.kernels.includes("mod")||!Ee.kernels.includes("sparsetodense")?US:new Promise(async n=>{let r=[e.shape[2],e.shape[1]],s=ht.resizeBilinear(e,[Xm,Xm]),o=t.object.enabled?pi==null?void 0:pi.execute(s,["tower_0/detections"]):null;ye(s);let a=await nQe(o,r,t);US=a,n(a)}))}var Ta,zO=!1;async function LO(e){return!Ta||Ee.initial?(Ta=await yn(an(e.modelBasePath,e.segmentation.modelPath||"")),!Ta||!Ta.modelUrl?Ce("load model failed:",e.segmentation.modelPath):e.debug&&Ce("load model:",Ta.modelUrl)):e.debug&&Ce("cached model:",Ta.modelUrl),Ta}async function qae(e,t,n){var m,g;if(zO)return{data:[],canvas:null,alpha:null};zO=!0,Ta||await LO(n);let r=rx(e,n),s=((m=r.canvas)==null?void 0:m.width)||0,o=((g=r.canvas)==null?void 0:g.height)||0;if(!r.tensor)return{data:[],canvas:null,alpha:null};let a={};a.resize=ht.resizeBilinear(r.tensor,[Ta.inputs[0].shape?Ta.inputs[0].shape[1]:0,Ta.inputs[0].shape?Ta.inputs[0].shape[2]:0],!1),ye(r.tensor),a.norm=Me(a.resize,255),a.res=Ta.predict(a.norm),a.squeeze=ln(a.res,0),a.squeeze.shape[2]===2?(a.softmax=Jf(a.squeeze),[a.bg,a.fg]=Vs(a.softmax,2),a.expand=kr(a.fg,2),a.pad=kr(a.expand,0),a.crop=ht.cropAndResize(a.pad,[[0,0,.5,.5]],[0],[s,o]),a.data=ln(a.crop,0)):a.data=ht.resizeBilinear(a.squeeze,[o,s]);let i=Array.from(await a.data.data());if(Ee.node&&!Ee.Canvas&&typeof ImageData=="undefined")return n.debug&&Ce("canvas support missing"),Object.keys(a).forEach(x=>ye(a[x])),{data:i,canvas:null,alpha:null};let l=Zo(s,o);await Mo.toPixels(a.data,l);let u=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(u.filter=`blur(${n.segmentation.blur}px)`);let c=u.getImageData(0,0,s,o),p=Zo(s,o),d=p.getContext("2d");r.canvas&&d.drawImage(r.canvas,0,0),d.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(d.filter=`blur(${n.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let f=d.getImageData(0,0,s,o);for(let x=0;xye(a[x])),zO=!1,{data:i,canvas:h||p,alpha:l}}var Dd;var jDn=Number.MAX_SAFE_INTEGER;async function Kae(e){return Ee.initial&&(Dd=null),Dd?e.debug&&Ce("cached model:",Dd.modelUrl):(Dd=await yn(an(e.modelBasePath,e.face.agegenderrace.modelPath)),!Dd||!Dd.modelUrl?Ce("load model failed:",e.face.agegenderrace.modelPath):e.debug&&Ce("load model:",Dd.modelUrl)),Dd}var wv=class{constructor(){nt(this,"age",null);nt(this,"agegenderrace",null);nt(this,"blazeposedetect",null);nt(this,"blazepose",null);nt(this,"centernet",null);nt(this,"efficientpose",null);nt(this,"embedding",null);nt(this,"emotion",null);nt(this,"facedetect",null);nt(this,"faceiris",null);nt(this,"facemesh",null);nt(this,"faceres",null);nt(this,"gender",null);nt(this,"handpose",null);nt(this,"handskeleton",null);nt(this,"handtrack",null);nt(this,"movenet",null);nt(this,"nanodet",null);nt(this,"posenet",null);nt(this,"segmentation",null)}};function BO(e){for(let t of Object.keys(e.models))e.models[t]=null}async function Xae(e){var t,n,r,s,o,a,i,l,u,c,p,d,f,h,m,g,x,y,b,A,v,w,k,I,N,T,_,R,S,F;Ee.initial&&BO(e),e.config.hand.enabled&&(!e.models.handpose&&((n=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:n.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await w7(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((s=(r=e.config.hand.detector)==null?void 0:r.modelPath)==null?void 0:s.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await w7(e.config))),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=$U(e.config)),e.config.face.enabled&&((o=e.config.face.mesh)==null?void 0:o.enabled)&&!e.models.facemesh&&(e.models.facemesh=WU(e.config)),e.config.face.enabled&&((a=e.config.face.iris)==null?void 0:a.enabled)&&!e.models.faceiris&&(e.models.faceiris=OU(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((l=(i=e.config.hand.detector)==null?void 0:i.modelPath)==null?void 0:l.includes("handtrack"))&&(e.models.handtrack=wj(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((c=(u=e.config.hand.detector)==null?void 0:u.modelPath)==null?void 0:c.includes("handtrack"))&&(e.models.handskeleton=kj(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(p=e.config.body)==null?void 0:p.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=tj(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((h=(f=e.config.body)==null?void 0:f.modelPath)==null?void 0:h.includes("efficientpose"))&&(e.models.efficientpose=TO(e.config)),e.config.body.enabled&&!e.models.blazepose&&((g=(m=e.config.body)==null?void 0:m.modelPath)==null?void 0:g.includes("blazepose"))&&(e.models.blazepose=zae(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&((x=e.config.body.detector)==null?void 0:x.modelPath)&&((b=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:b.includes("blazepose"))&&(e.models.blazeposedetect=Mae(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((v=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:v.includes("efficientpose"))&&(e.models.efficientpose=TO(e.config)),e.config.body.enabled&&!e.models.movenet&&((k=(w=e.config.body)==null?void 0:w.modelPath)==null?void 0:k.includes("movenet"))&&(e.models.movenet=Vae(e.config)),e.config.object.enabled&&!e.models.nanodet&&((N=(I=e.config.object)==null?void 0:I.modelPath)==null?void 0:N.includes("nanodet"))&&(e.models.nanodet=jae(e.config)),e.config.object.enabled&&!e.models.centernet&&((_=(T=e.config.object)==null?void 0:T.modelPath)==null?void 0:_.includes("centernet"))&&(e.models.centernet=Hae(e.config)),e.config.face.enabled&&((R=e.config.face.emotion)==null?void 0:R.enabled)&&!e.models.emotion&&(e.models.emotion=KU(e.config)),e.config.face.enabled&&((S=e.config.face.description)==null?void 0:S.enabled)&&!e.models.faceres&&(e.models.faceres=HU(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=LO(e.config)),e.config.face.enabled&&((F=e.config.face.agegenderrace)==null?void 0:F.enabled)&&!e.models.agegenderrace&&(e.models.agegenderrace=Kae(e.config));for await(let B of Object.keys(e.models))e.models[B]&&typeof e.models[B]!="undefined"&&(e.models[B]=await e.models[B])}async function Zae(e){let t=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"];for(let n of Object.keys(e.models))if(e.models[n]){let r=[];Array.isArray(e.models[n])?r=e.models[n].filter(s=>s!==null).map(s=>s&&s.executor?s:s.model):r=[e.models[n]];for(let s of r){if(!s){e.config.debug&&Ce("model marked as loaded but not defined:",n);continue}let o=[],a=s==null?void 0:s.executor;if(a&&a.graph.nodes)for(let l of Object.values(a.graph.nodes)){let u=l.op.toLowerCase();o.includes(u)||o.push(u)}else!a&&e.config.debug&&Ce("model signature not determined:",n);let i=[];for(let l of o)!t.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&i.push(l);i.length>0&&e.config.debug&&Ce("model validation:",n,i)}}}var fr={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function rQe(){let e=fr.gl;!e||(fr.extensions=e.getSupportedExtensions())}async function Yae(e){var t;if(e.config.backend==="humangl"&&(fr.name in zo().registry&&(!fr.gl||!fr.gl.getParameter(fr.gl.VERSION))&&(Ce("error: humangl backend invalid context"),BO(e)),!l_(fr.name))){try{fr.canvas=await Zo(100,100)}catch(r){Ce("error: cannot create canvas:",r);return}try{fr.gl=(t=fr.canvas)==null?void 0:t.getContext("webgl2",fr.webGLattr),fr.canvas&&(fr.canvas.addEventListener("webglcontextlost",async r=>{Ce("error: humangl:",r.type),Ce("possible browser memory leak using webgl"),e.emit("error")}),fr.canvas.addEventListener("webglcontextrestored",r=>{Ce("error: humangl context restored:",r)}),fr.canvas.addEventListener("webglcontextcreationerror",r=>{Ce("error: humangl context create:",r)}))}catch(r){Ce("error: cannot get WebGL context:",r);return}try{I5(2,fr.gl)}catch(r){Ce("error: cannot set WebGL context:",r);return}try{let r=new $5(fr.gl);y0(fr.name,()=>new Y0(r),fr.priority)}catch(r){Ce("error: cannot register WebGL backend:",r);return}try{zl("webgl").forEach(s=>{let o={...s,backendName:fr.name};Mc(o)})}catch(r){Ce("error: cannot update WebGL backend registration:",r);return}let n=sl().getGPGPUContext?sl().getGPGPUContext().gl:null;if(n)Ce(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{Ce("error: no current gl context:",n,fr.gl);return}try{Da.set("WEBGL_VERSION",2)}catch(r){Ce("error: cannot set WebGL backend flags:",r);return}rQe(),Ce("backend registered:",fr.name)}}async function jS(e,t=!1){if(e.state="backend",t||Ee.initial||e.config.backend&&e.config.backend.length>0&&gi()!==e.config.backend){let n=en();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&Ce("running inside web worker"),Ee.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&Ce("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),Ee.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&Ce(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),Ee.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")Ce("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let s=await navigator.gpu.requestAdapter();e.config.debug&&Ce("enumerated webgpu adapter:",s)}e.config.backend==="humangl"&&await Yae(e);let r=Object.keys(zo().registryFactory);if(e.config.debug&&Ce("available backends:",r),r.includes(e.config.backend)||(Ce(`error: backend ${e.config.backend} not found in registry`),e.config.backend=Ee.node?"tensorflow":"webgl",e.config.debug&&Ce(`override: setting backend ${e.config.backend}`)),e.config.debug&&Ce("setting backend:",e.config.backend),e.config.backend==="wasm"){if(e.config.debug&&Ce("wasm path:",e.config.wasmPath),typeof(bh==null?void 0:bh.setWasmPaths)!="undefined")await bU(e.config.wasmPath);else throw new Error("wasm backend is not loaded");let s=await be().getAsync("WASM_HAS_SIMD_SUPPORT"),o=await be().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");e.config.debug&&Ce(`wasm execution: ${s?"SIMD":"no SIMD"} ${o?"multithreaded":"singlethreaded"}`),e.config.debug&&!s&&Ce("warning: wasm simd support is not enabled")}try{await S9(e.config.backend),await Xw()}catch(s){return Ce("error: cannot set backend:",e.config.backend,s),!1}}if(gi()==="humangl"&&(Da.set("CHECK_COMPUTATION_FOR_ERRORS",!1),Da.set("WEBGL_CPU_FORWARD",!0),Da.set("WEBGL_PACK_DEPTHWISECONV",!1),Da.set("WEBGL_USE_SHAPES_UNIFORMS",!0),Da.set("CPU_HANDOFF_SIZE_THRESHOLD",128),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(Ce("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),Da.set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),sl().getGPGPUContext)){let r=await sl().getGPGPUContext().gl;e.config.debug&&Ce(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}gi()==="webgpu"&&Da.set("WEBGPU_USE_GLSL",!0),C9(),await Xw(),e.performance.backend=Math.trunc(en()-n),e.config.backend=gi(),K5(),e.env=Ee}return!0}function lx(e,t){for(let n of e){let r={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&Ce("kernelFunc",n,t.backend)}};Mc(r)}Ee.kernels=zl(gi()).map(n=>n.kernelName.toLowerCase())}var wc={color:"rgba(173, 216, 230, 0.6)",labelColor:"rgba(173, 216, 230, 1)",shadowColor:"black",font:'small-caps 14px "Segoe UI"',lineHeight:18,lineWidth:4,pointSize:2,roundRect:8,drawPoints:!1,drawLabels:!0,drawBoxes:!0,drawPolygons:!0,drawGaze:!0,fillPolygons:!1,useDepth:!0,useCurves:!1,bufferedOutput:!0},Zm=e=>{if(e&&e.getContext)return e.getContext("2d");throw new Error("invalid canvas")},HS=e=>Math.round(e*180/Math.PI);function VO(e,t,n,r=0,s){e.fillStyle=s.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:s.color,e.beginPath(),e.arc(t,n,s.pointSize,0,2*Math.PI),e.fill()}function kv(e,t,n,r,s,o){if(e.beginPath(),o.useCurves){let a=(t+t+r)/2,i=(n+n+s)/2;e.ellipse(a,i,r/2,s/2,0,0,2*Math.PI)}else e.lineWidth=o.lineWidth,e.moveTo(t+o.roundRect,n),e.lineTo(t+r-o.roundRect,n),e.quadraticCurveTo(t+r,n,t+r,n+o.roundRect),e.lineTo(t+r,n+s-o.roundRect),e.quadraticCurveTo(t+r,n+s,t+r-o.roundRect,n+s),e.lineTo(t+o.roundRect,n+s),e.quadraticCurveTo(t,n+s,t,n+s-o.roundRect),e.lineTo(t,n+o.roundRect),e.quadraticCurveTo(t,n,t+o.roundRect,n),e.closePath();e.stroke()}function Jae(e,t=[],n){if(!(t===void 0||t.length===0)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let r of t){let s=r[2]||0;e.strokeStyle=n.useDepth&&s?`rgba(${127.5+2*s}, ${127.5-2*s}, 255, 0.3)`:n.color,e.fillStyle=n.useDepth&&s?`rgba(${127.5+2*s}, ${127.5-2*s}, 255, 0.3)`:n.color,e.lineTo(r[0],Math.round(r[1]))}e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function sQe(e,t=[],n){if(!(t===void 0||t.length===0)){if(!n.useCurves||t.length<=2){Jae(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let r=0;r1&&l[1].length>0){let u=i[1]>0?`#${i[1]}`:"",c=`${i[0]} ${u}: ${l[1]}`;r.shadowColor&&r.shadowColor!==""&&(s.fillStyle=r.shadowColor,s.fillText(c,8,2+o*r.lineHeight)),s.fillStyle=r.labelColor,s.fillText(c,6,0+o*r.lineHeight),o+=1}}}async function GO(e,t,n){var o,a,i,l;let r=os(wc,n);if(!t||!e)return;let s=Zm(e);for(let u of t){s.font=r.font,s.strokeStyle=r.color,s.fillStyle=r.color,r.drawBoxes&&kv(s,u.box[0],u.box[1],u.box[2],u.box[3],r);let c=[];if(c.push(`face: ${Math.trunc(100*u.score)}%`),u.genderScore&&c.push(`${u.gender||""} ${Math.trunc(100*u.genderScore)}%`),u.age&&c.push(`age: ${u.age||""}`),u.iris&&c.push(`distance: ${u.iris}`),u.emotion&&u.emotion.length>0){let p=u.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);p.length>3&&(p.length=3),c.push(p.join(" "))}u.rotation&&u.rotation.angle&&u.rotation.gaze&&(u.rotation.angle.roll&&c.push(`roll: ${HS(u.rotation.angle.roll)}\xB0 yaw:${HS(u.rotation.angle.yaw)}\xB0 pitch:${HS(u.rotation.angle.pitch)}\xB0`),u.rotation.gaze.bearing&&c.push(`gaze: ${HS(u.rotation.gaze.bearing)}\xB0`)),c.length===0&&c.push("face"),s.fillStyle=r.color;for(let p=c.length-1;p>=0;p--){let d=Math.max(u.box[0],0),f=p*r.lineHeight+u.box[1];r.shadowColor&&r.shadowColor!==""&&(s.fillStyle=r.shadowColor,s.fillText(c[p],d+5,f+16)),s.fillStyle=r.labelColor,s.fillText(c[p],d+4,f+15)}if(s.lineWidth=1,u.mesh&&u.mesh.length>0){if(r.drawPoints)for(let p of u.mesh)VO(s,p[0],p[1],p[2],r);if(r.drawPolygons){if(s.lineWidth=1,u.mesh.length>450)for(let p=0;pu.mesh[f]);Jae(s,d,r)}if(u.annotations&&u.annotations.leftEyeIris&&u.annotations.leftEyeIris[0]){s.strokeStyle=r.useDepth?"rgba(255, 200, 255, 0.3)":r.color,s.beginPath();let p=Math.abs(u.annotations.leftEyeIris[3][0]-u.annotations.leftEyeIris[1][0])/2,d=Math.abs(u.annotations.leftEyeIris[4][1]-u.annotations.leftEyeIris[2][1])/2;s.ellipse(u.annotations.leftEyeIris[0][0],u.annotations.leftEyeIris[0][1],p,d,0,0,2*Math.PI),s.stroke(),r.fillPolygons&&(s.fillStyle=r.useDepth?"rgba(255, 255, 200, 0.3)":r.color,s.fill())}if(u.annotations&&u.annotations.rightEyeIris&&u.annotations.rightEyeIris[0]){s.strokeStyle=r.useDepth?"rgba(255, 200, 255, 0.3)":r.color,s.beginPath();let p=Math.abs(u.annotations.rightEyeIris[3][0]-u.annotations.rightEyeIris[1][0])/2,d=Math.abs(u.annotations.rightEyeIris[4][1]-u.annotations.rightEyeIris[2][1])/2;s.ellipse(u.annotations.rightEyeIris[0][0],u.annotations.rightEyeIris[0][1],p,d,0,0,2*Math.PI),s.stroke(),r.fillPolygons&&(s.fillStyle=r.useDepth?"rgba(255, 255, 200, 0.3)":r.color,s.fill())}if(r.drawGaze&&((a=(o=u.rotation)==null?void 0:o.gaze)==null?void 0:a.strength)&&((l=(i=u.rotation)==null?void 0:i.gaze)==null?void 0:l.bearing)&&u.annotations.leftEyeIris&&u.annotations.rightEyeIris&&u.annotations.leftEyeIris[0]&&u.annotations.rightEyeIris[0]){s.strokeStyle="pink",s.beginPath();let p=[u.annotations.leftEyeIris[0][0]+Math.sin(u.rotation.gaze.bearing)*u.rotation.gaze.strength*u.box[3],u.annotations.leftEyeIris[0][1]+Math.cos(u.rotation.gaze.bearing)*u.rotation.gaze.strength*u.box[2]];s.moveTo(u.annotations.leftEyeIris[0][0],u.annotations.leftEyeIris[0][1]),s.lineTo(p[0],p[1]);let d=[u.annotations.rightEyeIris[0][0]+Math.sin(u.rotation.gaze.bearing)*u.rotation.gaze.strength*u.box[3],u.annotations.rightEyeIris[0][1]+Math.cos(u.rotation.gaze.bearing)*u.rotation.gaze.strength*u.box[2]];s.moveTo(u.annotations.rightEyeIris[0][0],u.annotations.rightEyeIris[0][1]),s.lineTo(d[0],d[1]),s.stroke()}}}}}async function UO(e,t,n){var o;let r=os(wc,n);if(!t||!e)return;let s=Zm(e);s.lineJoin="round";for(let a=0;a0)for(let a of o.keypoints)s.fillStyle=r.useDepth?`rgba(${127.5+2*(a[2]||0)}, ${127.5-2*(a[2]||0)}, 255, 0.5)`:r.color,VO(s,a[0],a[1],0,r);if(r.drawLabels&&o.annotations){let a=(i,l)=>{!i||i.length===0||!i[0]||(s.fillStyle=r.useDepth?`rgba(${127.5+2*i[i.length-1][2]}, ${127.5-2*i[i.length-1][2]}, 255, 0.5)`:r.color,s.fillText(l,i[i.length-1][0]+4,i[i.length-1][1]+4))};s.font=r.font,a(o.annotations.index,"index"),a(o.annotations.middle,"middle"),a(o.annotations.ring,"ring"),a(o.annotations.pinky,"pinky"),a(o.annotations.thumb,"thumb"),a(o.annotations.palm,"palm")}if(r.drawPolygons&&o.annotations){let a=i=>{if(!(!i||i.length===0||!i[0]))for(let l=0;l0?l-1:0][0],i[l>0?l-1:0][1]),s.lineTo(i[l][0],i[l][1]),s.stroke()};s.lineWidth=r.lineWidth,a(o.annotations.index),a(o.annotations.middle),a(o.annotations.ring),a(o.annotations.pinky),a(o.annotations.thumb)}}}async function HO(e,t,n){let r=os(wc,n);if(!t||!e)return;let s=Zm(e);s.lineJoin="round",s.font=r.font;for(let o of t)if(r.drawBoxes){if(s.strokeStyle=r.color,s.fillStyle=r.color,kv(s,o.box[0],o.box[1],o.box[2],o.box[3],r),r.drawLabels){let a=`${o.label} ${Math.round(100*o.score)}%`;r.shadowColor&&r.shadowColor!==""&&(s.fillStyle=r.shadowColor,s.fillText(a,o.box[0]+3,1+o.box[1]+r.lineHeight,o.box[2])),s.fillStyle=r.labelColor,s.fillText(a,o.box[0]+2,0+o.box[1]+r.lineHeight,o.box[2])}s.stroke()}}async function Qae(e,t,n){let r=os(wc,n);if(!t||!e)return;let s=Zm(e);s.lineJoin="round",s.font=r.font;for(let o=0;o{let t=(p,d)=>Math.atan2(p[1]-d[1],p[0]-d[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],r=1,s=e.mesh[33][2]>e.mesh[263][2],o=s?e.mesh[473]:e.mesh[468],a=s?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],i=s?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(a[0]-o[0])/i[0]-n[0],r*(o[1]-a[1])/i[1]-n[1]],u=Math.sqrt(l[0]**2+l[1]**2);return u=Math.min(u,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:u}},nie=(e,t)=>{let n=g=>{let x=Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]);return g[0]/=x,g[1]/=x,g[2]/=x,g},r=(g,x)=>{let y=g[0]-x[0],b=g[1]-x[1],A=g[2]-x[2];return[y,b,A]},s=(g,x)=>{let y=g[1]*x[2]-g[2]*x[1],b=g[2]*x[0]-g[0]*x[2],A=g[0]*x[1]-g[1]*x[0];return[y,b,A]},o=g=>{let[x,y,b,A,v,w,k,I,N]=g,T,_,R;return A<1?A>-1?(R=Math.asin(A),_=Math.atan2(-k,x),T=Math.atan2(-w,v)):(R=-Math.PI/2,_=-Math.atan2(I,N),T=0):(R=Math.PI/2,_=Math.atan2(I,N),T=0),isNaN(T)&&(T=0),isNaN(_)&&(_=0),isNaN(R)&&(R=0),{pitch:2*-T,yaw:2*-_,roll:2*-R}},a=g=>{let x=(b,A,v,w)=>Math.atan2(w-A,v-b);return{pitch:x(g[10][1],g[10][2],g[152][1],g[152][2]),yaw:x(g[33][0],g[33][2],g[263][0],g[263][2]),roll:x(g[33][0],g[33][1],g[263][0],g[263][1])}},i=e.meshRaw;if(!i||i.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let l=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,u=[i[10],i[152],i[234],i[454]].map(g=>[g[0]*t[0]/l,g[1]*t[1]/l,g[2]]),c=n(r(u[1],u[0])),p=n(r(u[3],u[2])),d=n(s(p,c));p=s(c,d);let f=[p[0],p[1],p[2],c[0],c[1],c[2],d[0],d[1],d[2]],h=o(f),m=i.length===478?oQe(e):{bearing:0,strength:0};return{angle:h,matrix:f,gaze:m}};var qO=async(e,t)=>{var p,d,f,h;let n,r,s,o,a,i,l,u=[];e.state="run:face",n=en();let c=await VU(t,e.config);if(e.performance.face=Math.trunc(en()-n),!t.shape||t.shape.length!==4)return[];if(!c)return[];for(let m=0;m0&&c[m].annotations.rightEyeIris.length>0&&c[m].annotations.leftEyeIris[0]!==null&&c[m].annotations.rightEyeIris[0]!==null?Math.max(Math.abs(c[m].annotations.leftEyeIris[3][0]-c[m].annotations.leftEyeIris[1][0]),Math.abs(c[m].annotations.rightEyeIris[4][1]-c[m].annotations.rightEyeIris[2][1]))/t.shape[2]:0,y=e.config.face.detector.return?ln(c[m].tensor):null;ye(c[m].tensor),c[m].tensor&&delete c[m].tensor,u.push({...c[m],id:m,age:l.age,gender:l.gender,genderScore:l.genderScore,embedding:l.descriptor,emotion:a,iris:x!==0?Math.trunc(500/x/11.7)/100:0,rotation:g,tensor:y}),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),u};var rie=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),s=e[n].keypoints.find(l=>l.part==="rightWrist"),o=e[n].keypoints.find(l=>l.part==="nose");o&&r&&s&&r.position.yl.part==="leftShoulder"),i=e[n].keypoints.find(l=>l.part==="rightShoulder");a&&i&&t.push({body:n,gesture:`leaning ${a.position.y>i.position.y?"left":"right"}`})}return t},sie=e=>{if(!e)return[];let t=[];for(let n=0;n450){let r=e[n].mesh[33][2]-e[n].mesh[263][2];Math.abs(r)<10?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${r<0?"left":"right"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let a=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));a>10&&t.push({face:n,gesture:`mouth ${Math.trunc(a)}% open`});let i=e[n].mesh[152][2];Math.abs(i)>10&&t.push({face:n,gesture:`head ${i<0?"up":"down"}`})}return t},oie=e=>{if(!e)return[];let t=[];for(let n=0;n.06||p>.06)&&(u=!1),d>.06&&t.push({iris:n,gesture:"looking right"}),p>.06&&t.push({iris:n,gesture:"looking left"});let f=Math.abs(e[n].mesh[145][1]-e[n].annotations.rightEyeIris[0][1])/e[n].box[3],h=Math.abs(e[n].mesh[374][1]-e[n].annotations.leftEyeIris[0][1])/e[n].box[3];(h<.01||f<.01||h>.022||f>.022)&&(u=!1),(h<.01||f<.01)&&t.push({iris:n,gesture:"looking down"}),(h>.022||f>.022)&&t.push({iris:n,gesture:"looking up"}),u&&t.push({iris:n,gesture:"looking center"})}return t},aie=e=>{if(!e)return[];let t=[];for(let n=0;n0){let s=r.reduce((a,i)=>a.position[2]a.position[1]((n-1)*vt.body[I].box[S]+R)/n),T=e.body[I].boxRaw.map((R,S)=>((n-1)*vt.body[I].boxRaw[S]+R)/n),_=e.body[I].keypoints.map((R,S)=>({score:R.score,part:R.part,position:[vt.body[I].keypoints[S]?((n-1)*vt.body[I].keypoints[S].position[0]+R.position[0])/n:R.position[0],vt.body[I].keypoints[S]?((n-1)*vt.body[I].keypoints[S].position[1]+R.position[1])/n:R.position[1]],positionRaw:[vt.body[I].keypoints[S]?((n-1)*vt.body[I].keypoints[S].positionRaw[0]+R.positionRaw[0])/n:R.position[0],vt.body[I].keypoints[S]?((n-1)*vt.body[I].keypoints[S].positionRaw[1]+R.positionRaw[1])/n:R.position[1]]}));vt.body[I]={...e.body[I],box:N,boxRaw:T,keypoints:_}}if(!vt.hand||e.hand.length!==vt.hand.length)vt.hand=JSON.parse(JSON.stringify(e.hand));else for(let I=0;I((n-1)*vt.hand[I].box[F]+S)/n),T=e.hand[I].boxRaw.map((S,F)=>((n-1)*vt.hand[I].boxRaw[F]+S)/n);vt.hand[I].keypoints.length!==e.hand[I].keypoints.length&&(vt.hand[I].keypoints=e.hand[I].keypoints);let _=e.hand[I].keypoints&&e.hand[I].keypoints.length>0?e.hand[I].keypoints.map((S,F)=>S.map((B,W)=>((n-1)*(vt.hand[I].keypoints[F][W]||1)+(B||0))/n)):[],R={};if(Object.keys(vt.hand[I].annotations).length!==Object.keys(e.hand[I].annotations).length&&(vt.hand[I].annotations=e.hand[I].annotations),e.hand[I].annotations)for(let S of Object.keys(e.hand[I].annotations))R[S]=e.hand[I].annotations[S]&&e.hand[I].annotations[S][0]?e.hand[I].annotations[S].map((F,B)=>F.map((W,q)=>((n-1)*vt.hand[I].annotations[S][B][q]+W)/n)):null;vt.hand[I]={...e.hand[I],box:N,boxRaw:T,keypoints:_,annotations:R}}if(!vt.face||e.face.length!==vt.face.length)vt.face=JSON.parse(JSON.stringify(e.face));else for(let I=0;I((n-1)*vt.face[I].box[S]+R)/n),T=e.face[I].boxRaw.map((R,S)=>((n-1)*vt.face[I].boxRaw[S]+R)/n),_={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};_.matrix=(r=e.face[I].rotation)==null?void 0:r.matrix,_.angle={roll:((n-1)*(((o=(s=vt.face[I].rotation)==null?void 0:s.angle)==null?void 0:o.roll)||0)+(((i=(a=e.face[I].rotation)==null?void 0:a.angle)==null?void 0:i.roll)||0))/n,yaw:((n-1)*(((u=(l=vt.face[I].rotation)==null?void 0:l.angle)==null?void 0:u.yaw)||0)+(((p=(c=e.face[I].rotation)==null?void 0:c.angle)==null?void 0:p.yaw)||0))/n,pitch:((n-1)*(((f=(d=vt.face[I].rotation)==null?void 0:d.angle)==null?void 0:f.pitch)||0)+(((m=(h=e.face[I].rotation)==null?void 0:h.angle)==null?void 0:m.pitch)||0))/n},_.gaze={bearing:((n-1)*(((x=(g=vt.face[I].rotation)==null?void 0:g.gaze)==null?void 0:x.bearing)||0)+(((b=(y=e.face[I].rotation)==null?void 0:y.gaze)==null?void 0:b.bearing)||0))/n,strength:((n-1)*(((v=(A=vt.face[I].rotation)==null?void 0:A.gaze)==null?void 0:v.strength)||0)+(((k=(w=e.face[I].rotation)==null?void 0:w.gaze)==null?void 0:k.strength)||0))/n},vt.face[I]={...e.face[I],rotation:_,box:N,boxRaw:T}}if(!vt.object||e.object.length!==vt.object.length)vt.object=JSON.parse(JSON.stringify(e.object));else for(let I=0;I((n-1)*vt.object[I].box[R]+_)/n),T=e.object[I].boxRaw.map((_,R)=>((n-1)*vt.object[I].boxRaw[R]+_)/n);vt.object[I]={...e.object[I],box:N,boxRaw:T}}if(e.persons){let I=e.persons;if(!vt.persons||I.length!==vt.persons.length)vt.persons=JSON.parse(JSON.stringify(I));else for(let N=0;N((n-1)*vt.persons[N].box[_]+T)/n)}return e.gesture&&(vt.gesture=e.gesture),e.performance&&(vt.performance=e.performance),vt}function qS(e,t,n={order:2}){let r=0;for(let s=0;sF.box[0]&&k.box[0]F.box[1]&&k.box[1]+k.box[3]I.body.box[0]&&F.box[0]+F.box[2]I.body.box[1]&&F.box[1]+F.box[3]I.body.box[0]&&F.box[1]+F.box[3]>I.body.box[1]&&F.box[1]+F.box[3]{F&&F.length===4&&(N.push(F[0],F[0]+F[2]),T.push(F[1],F[1]+F[3]))};_((x=I.face)==null?void 0:x.box),_((y=I.body)==null?void 0:y.box),_((A=(b=I.hands)==null?void 0:b.left)==null?void 0:A.box),_((w=(v=I.hands)==null?void 0:v.right)==null?void 0:w.box);let R=Math.min(...N),S=Math.min(...T);I.box=[R,S,Math.max(...N)-R,Math.max(...T)-S],s&&s[1]&&s[2]&&(I.boxRaw=[I.box[0]/s[2],I.box[1]/s[1],I.box[2]/s[2],I.box[3]/s[1]]),a.push(I)}return a}var KS=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob IxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigoKCgoKCgoKCgoKCgo KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgBAAEAAwEhAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAE EQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZH SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEB AQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXET IjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFla Y2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG x8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+qaKACigApGOKAML Xp8xlF5A7V4X8RtYs7PzfNImnx8sa8Kp9z3q2tEgp6angWs62ZZ5CTGoJ6DArGNz5p+UrID6EUrF PUlW1EuN0XNW7PQ2L5j3JnoKXN0KijqNP0eYoqXBdgPuuo+ZPeupisWn2Jd4+0r924XgsQOCff3/ AJ1FzRKxDqGii6m3siiQ8F1XGfXI6YNWLfRbiRQMkcZI9fpTDluT2/h6Qy8gDPbtmtG38JeY480Z 5zSLUTZg8M28YwYxjAArXtdPt402qgHbpSaLWhma3o0Uqk7Nx9DWLaaVblgPs6qRyds2M/gRSQp9 zZOni2iWS2hlQ+kjYz9OMGrdjq89vIPPVhj+8M/lQyDq9P1WOYBlMZz1AOD+VdDaTiReOKulK0jO tHmi0WDTlr0TyxRVhT8tJjIX+9SUxHXUV553BRQAVBcPhSBTSuxPY86+IGti0s5I7dsORy9fM3i6 8e8mfDO5P90ZrWWiJicNPpZZtxV/xrW0jQt4DOv6Vk2dEEdTY6BHuB25rpbPSo0QARjP0qTRI17W wA/hFaMWmoQMgflQXYsDS142rU9tpqqenfNA7GgtihxkdKuRW6qMY/GkDZY8sY4Ap4hXbyB+VArk EtuH4wPyrk/EGkOm+a3jw3suRQLc5i38SX9hJ9nnY+XnBUdPyNdFY6pa3KkkAE9l6f8AfJ/pSJT6 GhDmI+Zb4ZRycdv6ium0nUhKFydrelTsNnS2829RnrVgV6NKXNG55lWPLIM81Op+WrZkRMfmNNzT A7GivPO4KKAEY4XNYWt3vkwPg4OK0giJdjw/xrqhm87Zs8tc7pX5A+leSajf6aHYJ50kn4AZpTep rBWRm2Vobm4BXfyehPFdnpmnBFUY5rI2SN63tlToK0YI+KZpFF+3QdavwoKTLtoW0Toaswpk5pCb LCxipAhoIuP2dKevHXoaYDylRyxhlwRQI4nxVoCXWZI1GfpXGtbSWjYPGP73+NIGupt6TqMsLruZ ih4xnP5V09mQ+JLd8gn0xSYJnVaVdkook69K34zuUGunDS3Rx4qOzHVIp4rrOMY3NJQI7GivPO8K KAILt9kZrz3xlebYiu8KCCWb0XvW0NFch6ysfO3jLVjfXLIn+pQkKorl7WxNxIPl71g2dUUdpo+l pBGvHPet23iC8ihFosrxirkHQUFo0IF4FXI1O726CpKLacCrMJoJLYHAPpTwucHpSRJJ5e4AZI9x UqpxzVpCuOC8cUpQUMRnXttuB4rjNdsYyeVwfXpmpGmcvcQyafMCFJjPY10eg34BUg4DcZP8jUO4 HaRq3lLNF+IHet7R7jz7c56rwa2wz9+xhiVeFy/T1PFegeaNPWigDsc0ZrzzvDNIaAM7VpNqdegr xL4l6kywyRhseZ19lrdfAZL4jxYg3Fw20d63tJsdrDI5rm3Z3R0R0Mce1eKnQYAplIkWrMJ45oZS NO3PHbNXIyfpSGWowSOasxLUiZdjFSqtNEMkUemKlAGKsRJjAppFAiORMjmsTVrNZEO4cfSoZSOD 1eJ7WXBUzQZ+7nkfSo7e2Ei+ZaMzxntjBX2NSU1Y6/wxqojiEFzkA8KTXYaUoWRyv3W5rSjpNHPX +BmpSg8V6J5gUUAdhRXnneFFAGHrTfu5PpXzj8S70/aZtxzztXFbv4DKHxHI+H4GZiz9zxXXW8G3 GBXMjvLRXAx0oPGPSmMVeOnWrMTYpFI0bcg1fh54xmgovRcD3qxETSIZcRvzp+/BpEkqsBUqsM9K q4Em4Gkxk0yRGXrVW6i8yFhkg+tJjRxGsWrxllkUMh9eK5uMz6bcebbnfG33kPcVkay2OntPKuo0 nhXI67c8qa7Lw3c+adjcEDGK1paSRhVV4s6A0or0jyRRQ1AHX0V553hRQBz+vNtt5z3xXzX8Qbdm uic5YnOMdK3l8JnTXvlbwpYl+WySOgrp5YfLOOB9O1c62O7qQkc+9RsKChFPWp4DluOlSykaNruH ArUgHShFNF2NT1qxGO3NBmyxGcE1N2560CFzjrUysO9JAPDDjFOVuKoQuSRTWouBkazbCa3cd8cV wF7IISQccHBzUSWpV9C3o1x5b5GAjdQD1rs9DjC3kckbEhqKfxIzn8LOupRXqnkPccBSkUAzraK8 87wooA5rxMSI3HqK8B8bQl9Q8sffY5b/AAraXwkUviNrw9pH2W1ViMMRTdRjw4HpWNtDti9TPc4P FQs2M5qdyyMHLcfjV63HTAoBGtap0wK0YxigpsuRDtVhVYd6GQydVwwIqdRnqKCR23I5pCMUW6gD YNKuetAEise9KTxQBWuFyhrznxNZkXjFeN3I+tTIZg2OqmzmxNF0PO3vXp/g2+hukVl4zyPanTXv JmVR+60dpThXpnlPceopWFAbnV0V553hSGgRynjC5FujOey14Ssp1HxNmTnc+a3kvcIpv37HoEYQ QmMdVHSsnVbYJF5jVk0dsNzlruVIsl2wKxbjWrVHILjg1CRbZJb+ILHPzyhfStODWLQgFJFYd+el UJM27HUIXxhga1Y5lLVLKLkMnoauxnPPrSEx7ShF+Y/n2qrc6xBbhizDAqkK1zJuvG9nbg8ZA681 ly/Ei052RO3uKAsZlx8QGd8xxvt9Aa1NH8dK7AXMcip64zigdkdrZX8F7EJLdwwNXMkrz1qRMRly CK4TxmpidWI49felPYSOMmi80NIoOV6qRzXYeA5SskYPfirpfEjGr8LPWVHyD6U4CvQPL3ZItOYc UDOoNFeed4Uhpks4H4iE/Z5MeleMeGULeLgjds10S+BGdL+Jc9OSBU2Huc5Nc74yvUtrcDBrJnZF 63PJdXvLy/lKWw46bvQVz82jXhkLO5Y+9ZlsYthcRnbIjY9R3q3awTRkEM3WmJI6C0ea3dGRsr1x XY6TqW9FLHnjrUs0izpLK5DDjofSta3ckH09KRUkZuuTvFGdvPauE1Y3U6Mqbssf/rUxHPTaJPK2 ZmJPbBqzY6DCZh5xJC9s9aBJHU6dpemJjfEmfetJtI0+VPkUr/unFOxdiextHs33W07YHQHk11mk Xb3KbZ1xIvcd6LEyWho4Nct41sTPYb16ipexCPPZN+wYGCvH1rrPAEJmvkPoc1VL4kZVvgZ6yFwK cBXoHkkqinFaVyzo80GuE7WJRQSziPiGdthK5HQV4x4J/wBI8WPIewNdEvgRNL42emO/yj1UHNef eNpRczbC+I17DvWT2OqJxc0sMK4TCisy41q0hfEkqj8aixdwTXNOlwvmqD9anS9tXH7uVG+hosO4 /wC0oOhrR0+6G4YNIEzsNEuCxAPNdjZruA4xxUmjINSjURksOlcbqFykbnjFA1sYGoassaknCqO5 rl7rxhGm7yBnBxuJq0rkSlYpw+NLlsfd5P8AerVsvHEqSBHwPVgcgVpyMyVXU3rXxcHYETAk+hru /DWti6ZSTyOKzZqndHaxvvUGq2rQ+dYyqR24qWI8dvbr7LqDxyDAzXpvw6FvIxePGSM06Xxoyr/A zviKFHNegeX1J41zUhXioGbuaSuM6wpCaBHG/EcA6HN/exxXjXw2jL67cv8A3Qa6H8CFR+NnoWpO I4XI44rxLxrqjQzSEsQM1gdSPM9U1uR1YbmWIdXHf2rmpIb67YS28UrRlsLI3c/jW0VZGUpO5pW1 jfLNOjahawzwReYI5cjzMkDavHJ5/SrVv9uhtPtVxCPLBwzxnlT9KGghLU3tKvvPjHzbl7EGuisJ GRxWLOg7nRXJEbDjmvSNK+aFSfSoZr0KutRkphc4NcRrdkVjL9aVio7Hk3iqS8ubhrWzUlsZY9kG cZNc5D4aee5MclzJIFTzHAO0MfatqSOWu7bFS1srDUZEis0vIZoUxPvfcC+4/dx2xjr712XiTwXb WmlQ6hol3cRhoFd4rlg3zY5wR0GelavQwjq7GD4etdVvSnk2wAB+9v8A8mvcfA2kXiRo0/UdcDis ZnTTulqeoWqbUAJqWUb42X1FZlnjfjSwlGrr5S/eNdD4RkvLAAQ4yRyaUZcruVKl7TQ9I0G+mnzH ckFwM8VuIK7ac3KF2eXiKapz5UWYxipNtMyNejNch0jSar3cjR27uoyQCRVRWom9DxTx54gu5fMi lbKdMVjfCZPNlv5v9rFbVHpYqjGzbOn8SzFI9o715L4u0r7arYzk+lYdTqSujy7U/C0u4vHk+WwO xuh9q3J9dgvbdVukMV1EwbDDgn04rZMwlHoZ+orZ6hfQ3RWVnQYCgZAq+8U0ln5NtBsV2yxYcfgK JtW0CnB31LlroVwJ1nQLGDjeP7w+lb0dsFxjrWB0tHS6NuWPJ6A16ToUm63T3Gallr4S7cxiTjrX PaxaF7dlVeSMUhxZ5jd+H7qCa4eF3DSE5x3zXN3Wk6jbyeaiFWUY6ZyPStYS5SalPmVipFbX0E4c W0alvmPHJrag0rVvEE6LdljGpG2NRtQD+tW5XMI0uU9M8NeFo9PiQhecDIIrtrOMIoG3H4VlJm9t C6CB06VPGM1IHLeItGS6uw+ORT7e3jsbQvj7gzUNam0JaWE+HN7NqOqX80n3FO1RXo8YzXdS+BHk 4z+KyzGPapcU2YIv7qQtiuaxvcaWqG4O6FwfSrS1JbPnrxoxkv7qIfejcitj4V2f2exumI+8+aKn xHTT+G5d8Txlm4rjLxMsQwzWT3OiK0Mm6sEkVsAcjFc1d+FEmlGwEDPQVopaEuOpr6f4ZWNAu3tW vHpAj5ZQcUFIWaDjGMVUMQ3cVDBmvbhY7QAV2nh+T/R1yeKhlrY31+b61FcQK6nIoJMi401WblRi qr6PCw5UYq9y+YgOgWzNkRrx3xWjp+nx2v3FQcelAbmko9anQ4GBUNisPHWr1qMrQhS2K11HvmYV hamcxSRZ5xRIqluS/DKAQQXZxyXrvo2FdlL4EeZjH+/ZbjNSZpswLNBrE1Gt7VE4ODVIlnh/j61F j4lmeTGyUbq6LwdEqWbeX0YbhSqfEddP4Bddj4JIrhL5d8h7VjI6oLQqKNzelWre3yc4/ClFjaL6 wqBxxUUxwCKu5BmXRA6c+9ZjP83FSBoQuPs4BrsNBlUW659KmRrDY6G1lyQtW3Hy0lqQ1qVJnAbm oy3b9KYJCqRj3o4zRctIlhjLHmpSuOBRbQOpLGpPFaES7UqkZzKN1KsEc87/AHUUmvPLTVGv72aQ k7WJwKmRrQ3ud74Ltilgz4++2a6iNDXdS0gjyMU71my7GpqTbxSbMki3SViajTTHqkSeR/GeyZmg nQHkEE1S+F+oPPavBL96I4/Cia1udVF+4dVrkW+Fq8+v4tjMDWUkdVJ6WM0cNV+F+MVmjUcZgqnP 1qpNNnkcVRLiZtxIS1UzzIF7mghlxUZpVQdq6nTVdAoAOKzkbQWhvwM6gMM1twOJYx3NOJE11Kt1 H1/pVVlwBkk+9NocXoOQ45FPj+fkUJFF2NSB700v/hTEty5ZpkjvVyUgcCq6GM9zC14/8Se6GcZQ 1574Xs5WkI2HBPHFQ1dm1KSSZ7Rotn9l0+KPHIHNacae1dy0Vjxaj5ptlhVp+2s2CJ9ppCKzuWNx zSFc1SYrHNeNdIGpaYw25ZeRXmvheyk0jVpEdcLJ0q3ZxNKTa0O3vQHg/DNcHrsJDmsmjspnNzNt fFIJ24GazOhC+azDmgZIOOKBsp3J2qSaZodubq58yQ4QAnmhGT3NO18pb7BORmu205LfYpyKVkWp Oxr5gKYWoIZWgfGfloFq1qTPLubnGO1RPtxg4P0oBAkY/hBz6VNDDkZ6AU0W2WSdqkdKr9ZOaGSj VtcLHmnOcgmmYvcz7mBLy3MbdD1q9ouiRK6bUAVeelOC1InPlidSsWMDFOCEdq3uefykqrinYqGy rFvApMVka2DAowKAsMkRXQqwyDXn/iWyitNQ3qPl6itIvRoF8RXinW4tQ6HI6GuW8SIVBPalc6qe 5x9x97r3qruwTjrWZ0ksZ9TUmcDNAmZ9/wAoao63rR0+w22MLPtAzt6mghmfofiB76LdJBJBIp5D d/oa7bSdWLIPnpDi9TM8TeKdas51XTbIyxd3J/pXS+E/EFxqNoFu7do5OmD60maHWrnZyDRkn/69 MlEyOR0xntVoNx+FUgYjPxg4FLCuWDZyKQr2RoRnP0qO+nEFpJITgAUzLqZnhu6+0rknOTXpOmwJ Fbrt5yMmnHYyr6Oxb2ijaKLnPYMClwKQWK3n0hn+lachHOJ9pNNN0apQFzsY10a4v4hXQh0xpieQ MA1XLZNjhK80cT8OdV+3Wl3A7ZZJCw+hrR1qLcjZ/CsbnfHRnFXseHJArOYYbrUs1uPhYbuatqFP ByfSkMq3UIINYkto+87Tx6GkSxfsDbflGD7CtTw/pk4nzITtPIFMFudsukh4Rxz71paTpKwP5jcn 0qTRy0NORMDgVCqewoJTJgAoxjntTiTu7fWmFxAcnn1q3EPl+X8KZMi4gKqB1Peob/Tv7Us5bfeU yOoq4R5nYxqT5I8xieH9J1DTbvyJELRg8ODwa9Ms5mSFV9BWiptbnNVrKdmif7Q1KLg96XIZc5Is pNL5pqeUrmMtZs0jzV08phchaY00zH1p2ZNxjS1g+LdJOt6U9ssmxjyGp2urDjLlaZzng/wUPDqz TSTmWeTrjpVjVk3Rvjr2rnqQ5dDvo1XUd2cTqSNk9OKxXGCeKxZ1DAxHTr2q5C/y8GokUhsz54qu uCxzSQjQ0+FZblR2ro4bZYiMVQ0dBb7Qi5x0qzuG5QOh71LYErDufpSeWrHnimIXbjkUjLkH1Hem gGxryc+tXI19KYmWegq9YLiLJ7mtqS945cS7QsWehqxA9dEjz4krPSxyZqbFFhGxUm6smjRM55Lk HvSvNxXTY57kLT+9MNwKdhXGm5FIbkU7Bca1wMEVhaiuQcVhXWiZ14R6tHGanGBI2OtYkqEHjgVy s9ErEeo6UBsHipKEZs5qpPdRxcbhx70NCSuybTNWihc5brW9Fq6vjMnFSdEIdDRi8RRKygZbHFbu m6nb3RA3gMegNJhOm0jbXGOoxTuCc1Rz3FyoGKawz9KaAVcZqeMgCmIkB4FaUTbYwB6V00Fuzixb 0SFMuDU8Mlbs4UPeXHeiOXkUrDuXYnyKk3cVk0ap6HMxxketSMhrcwRC0dMMZFMQ3yzSeVQAeUaz 9Vj8uPd271nVV4m+GdpnHX67pCeKyLtBtNcR6xlk9RVeWTb3qRnO6trgttyIfm71z7ai8j7/AJmN DNqUVa5Yi1AnjynHuBV+11YJhWWXcP8AZNSzqgmaEerSsf3NtIQP4mGKtRavdRgMIpVI9KjU0a7n R6T43uYQI7qN2Tpkqciu503VVuQGAYZHQjFVc4alPlZrpKGAznpTwxOc9+lWjIlUACnM4XApiLNk nmvnsK0NvpXZRVonmYqV52GsmanhXitTmFkSiJTSAvwrxUxXIrJ7miOfjf1pzNWxkRlqYWpgJupu 6gQbuahvIxPA6eo4pNXVioS5WmefakGhndH4INZs5DJXA10PaTurmLO21uKpSZqGMoXGnRzBiyjd 9Kx5rcQS428fSkjanLoaOliHGZFB56VswW+mtPufcBsGOAfmxz+tFkd8HpoaUx09FAtFY8DO71qb Sms/Nb7RbecG6AEjFLS5c78t+p0djpVs9wsyQiJAdyr1rW+zqjErzSe559Sbk9S3C+MA1bjbgE1S MSXzMVG0vNUI2tPKrAuCMnrVzNd0PhR49W/O2xrHmp4TxVMzQshpIzzQBehqesnuaI5VGzT2bitz FEbNTC1ADS1JupgG6l3UAc14s04yR/aYRll+8BXCtLncDXFWjys9TCz5oW7GddH5qqNzWDOgQnC8 VSuo1kHzAGkPYopEY2+RWxV23Vzj5G/Kg3jWaNazhZuqNXS6TaKhB2c0jR1nJWOlhOxRxU4YkCgx Y0OQatQyDbyaaFYe8uF4NY3iC9ltbVGj43NTIL3h7WzMihjzXVQXYYDdW9Cf2WcOJpfaRZ3g9KsQ mupnCLIabGeaAL0LcVY3cVmzRHIxtUhetzEjZqjLUAIWpN1ArhupwagAfDKQ3Q1594v0c2bm6tx+ 5Y8j+6ayrR5onThp8s7dzkZjuqAAmuBnqC7c0iwgtzSA0rWzjfGRW3ZadDu4AoNYo2rfS4v7orSh 05UA2r0pDbsTm29KRottBNyJ0wpJ9KhD7f6U0ikNWffIFBz60zVUW52ow4UcUN6EPcx44WsbgOmd ua7TT5Bd24KHnFKnLlZFSN4koluLdueRWvp14swweG9DXoxldHlTjYtzGoo25qzEvwtUxas2jRPQ 5CNqkLVsYoYzUzdQA3dSFqBBmnqaBhuqhriCXTpVIzxUz+Fl03aSPI9QTypW2/dz0qKNw3SvOPZR Mqin8VLKRcs3O4Cuk0w/MDjt1NBtHY6O2IIHY1pxgFaETIRwMkjtVSUEk4570MlFW5bap6dKzWm8 1tqH8aY+hp2FvGoGayNevVt7/ap4xzUvYjqTLtvLPcvJxSaVcyWsxTnFZlnT2t15xHmCtOBYwQy4 B9q7cPO+jPPxFO2qLEj5HWo42+aus4HpoX4W4FTF+KlotbHII9SFuK0MUNZqiLUDE3UbqBBupwag Bc1DefPbyD/ZND2KjujyPWlKzuPesRZjHJXms9lMuw3StjnmphKDSLTJ7OfE3JrpbO4GQc9qlnRA 3LO82k5NbFvdADkjBoCSHyXIIIzgVQvdRigT7wzjgUzO1jHknlvG7qnp61etYFQDIpCZoqVijzXn 3iC8EmsOuaCGb/heR/s0ijkVv6fbxy3QMg5xmsnuX0Ldzut3+UYTPWk+2GJSe+M1pFtamcldalmx 1eO4XaThhWnC+TXqR2PHqL3maUJ4qRjxSEjj42qXdxVmaGs1MJoATfSbqBAG5p6mgAzTJTmNvpQU tzzHXY83D/U1zF5FhjgV5r3Pa6FMsV5HWnLe7RhqBRdmTwagN2d2K2rPU1C5LAnPrUs6Iysbdrq6 f3gK0BrUKj/WClY05iM6xLOcQAj3NT29uznfKSzHuadzNu7NSBFjHNSm5VO9IRnajqoWMhTzXFtA bvUfMduSeg702Qz0rS7FbTToQFwzjJqaGTFyfK5PQViyzUuFmuIdgGABya5u/vTaN5cnUHFUmLoZ zyskwlgJweSK6zQdUEwVJeGr0aUrxPLxEfe0OrhPAqVjxWhznGRtUwatDK4jNxURbmkAm6jNABup 6tQAFqhupNtu59qUnZFwV5JHnWsHdIx96w5lz15rzT2uhRmt85xWbcxMnUGmZlB0bdxmrNvFIcfM 350mWjbs7YkDJY/jW5ZWW4jikWkdNp9mqYJFaJdEHHakUULu/VB1rLn1Ld/FgetMGYd/qWSQmSa0 /AemS32pfa7piLeLkg9z6UmQtz0W7uQ2cZx0A9BVzR7cAea6j2rPqX0L99KRat5A6Dk1wOoKZ52a YfMORTYRLujiGWEq6/NWza2yKQVHNdOHerRy4laJo6TTnbbtb8KuM3Fdh5z3OJjbmpt3FaMxAtUZ agBN1GaQBzTwaAAms3VbjERUGsa07RsdeFpuUuY4jUjljWTKK4j02RE4IpJYFk6imQkVl0xWarsO mAEcUi0bNnZBR0rWtoguMCkUi21wI161mXuocEKaYXMS4u+pY/hVCSWSY4HT0pEmlouiSahdpEBl mOceleiwWcNjClvHgJH97Hc1EmVFFi3Czy7mwIl/WtJbjP7uLgd/apQ2VNVvtsBhiPzdK5S4nAuR nqOCaTGi9pcytPlU+XpmumtWII44rah8ZjiNIXRuWeNvvViQ/LXpJWPJbu7nCRvVkNxVsxBmqJmo EPiXca0YLMuOlJsuKuPlsSi5IrNuG8s4HWs5VEkbwoOTKsk+FJY4rC1K53k1xTk5O7PSpwVNWRzt 4cms+WpKICtSLTETQj5q0YeBSGiys23pUguGxQMq3E59ayrm4x3yaAKiRtO2WPHcmhruKFxFajzZ ScA44qRHoXhuMaLpxaUg6hcDLMf4F9KlhuDeXGASIl+8azZslYma68y48m1+7nFW5rtbRNhb5z1p iMKbUg0zuW4A4rPgb7VdKXOMmpA7HRbMS7nUYiUda0lkQOBngVrS+JGdbWLRt2bAx5BqeQ/LXpnj PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,XS=` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA AhEBAxEB/8QAGwABAAIDAQEAAAAAAAAAAAAAAAEDAgQFBgf/xABDEAEAAgECBAMECQIDBgUFAQAA AQIDBBEFEiExE0FRBiJhcRQjMkJSgZGhsWLBJDNyFSVTY3OSNEPR4fAHFjWCokT/xAAYAQEAAwEA AAAAAAAAAAAAAAAAAQIDBP/EACARAQEBAQADAQEBAQEBAAAAAAABAhEDITFBEjJRIhP/2gAMAwEA AhEDEQA/APqYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAKNTq8OkxzfNkisQC8eb1XtRNbzXT4q7eU2nu0MntRq/D8StMccvW29ZmdvgjsTyvZjxOLj +s8WLxn8TFPXs6Oj9oct7c14rkxz22nrB2I49KOdTjelmszfmpMeUxv/AA28OqwZ4icWWtt/SUi4 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmdo3nsPNe0Pt Fh09Z0+DNWL7+9O/7A3eJcZppsV5raI27esvH6jX5ddM25p79Ilo59VbUZOe2Tm/PeGvfPfT2iKR PLv1+DO678XmW/a97U6TtOyzTbTF538/T9WjTNecm9a7126tqk3rSYxY5ta1plRZqZNXGjyZcPXl mZmsx+qjBrsuO16xM7eXRt04JrdTltk5OWJnfaWf0a2lty5MdZnfzSn+WOHiOutFpjHa9e8bQ2fp +alYy462pk7zXbuxjPesbRS0f6ZZV1ET1tErzXFLHo+A+1ddZf6NrI8PJHa1vN6iJi0bxMTHwfOa zhzd61v1846utwniM6DUdb3nBaNrVmd9vjC/ZVePYirBqMWppz4rxaPgtEAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAItaK1m09ojcHnvarjM8P0vh49+a/eY8ng9D h1fGM1rxjtGPfvbzdbjuTJxHX48cTPNltM/KsS9Dw7S49Jp6UpHaGe2vjz1y9J7LYK13vHWe7bj2 ex1tvM80ekuxW3RnW3Vm6P5jRx8H0+OYmMcb+bapo8GKPdpC6bQwtdHU8JpWkdJ/JweL6e23iU67 d4dubSqyVi9Zi0bwIs68XGp36TtEq7ZJmZmevzdbifCKWtbJinkt6eTgZPFw32t+sRurbWVzxs1y Rv6T8V1NZNPtfq0seTm+Kevr+SZuxXjvaPiV8N4viycto9HseG6+uu08W6Rkj7UPmFck1tE1nlmP Ld3eA8V8HVVi1pjq6Ma/pnqce/ERMTETHaUrKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAADW19+TQ5p/p2bLS4v04Zmt5VjeQeJ4bjnLqsupv+Ka1+ERLv4reTmcNxcuC vy3l0qdI2hlr66sT02ot0ZV7qqrInruzrVZLGSZ37JjqgYTG0K5lbaFVhDT1Ub456RPweY4hixWi eSdpjvD1eWejz3FNHWYtkpvFo9EIseb3tS3SerOms22rfpPqZKzvvHSYUz70TExG6Gdbs2rljeJ/ Mx5L0vEzPaelnOi98c9J2bFNTFpit47+a+PVUvx9T9nOIfT+GV5p3yY/ds67wvsXqpxau+G09Lx+ r3TqrEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV4ljnLw3U0jvO O0fs2lWqyUw6XLkyfYrWZkHldBEV09eveG3Fq1mI3jd4vPrOIaid8G9MP3Y38k6fNrt/rMk9Ou8s tfXXn49rGWInuy8SO/k5Gl1E3rG/fzbOe94wTy99mbRvTrMOOvNfJWsesywniukrG/jU6fF43WYN TmtEeJtEQ06aSmK2+bNtEd+qfSO17unF9Hmvy1y13XWyVmN4tExLxVK8PmNq5NrT58zawam+m/yc 0Xj8NpRYSvQZ7xEOdqI3rPozxayNRXe0ct/ON03jmrKB5nV4q1yTO20Obmv4c+cx8HoeI6WZpNoj q83niYmYscU0r8aJ6T1n49zeJ+Meqm1drb9J+Kd5p136StGVem9l9TbHxLDFp7W7+sS+q1nesT6w +PcAzVjiGHftzQ+v4f8AJpv6On8jH9ZgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAABp8VrW/C9TW0ztOO3b5Nxp8VmI4bn37TWYB8f1HFtTfUfR9FWJmsdZ9I7MtJxDX5s d8ta1y0xzteaR2277rcuhycP12SceLxMeWNpjttHwlu8I0mfQ1y+D7k5YmJmY36T36Ka43z/AF1t cI1ds+qxVj7/AEej19PCw9HJ4NoK4OIU5Y35YmZdzVTGebVZabx5jJS+Tmns81rNLm1Wrzc9rVw4 Yibbem72mXTTS0w0M3BvEta1bWrM95ie5EanY87wXgNOL6XPfxraXLhra/W28bR/dzYzarBqJxRe bzE7Rt5vWU9n8mPHOGmS0Ypnea1naJb+k9ncNLR7u2y/WcxXO4TOoyUrN6zD0FaW5Y3hu49FiwUi KxCvLMR0hlW0jn6ukWw3iXjOJzbDlneOj3GaN6zDzfFOH+LE7SRGo83XNSZ2lbG2/WfdlvaT2cy6 rNFInlrv1mfJ37cK4PwTTxOoidRm2+/2/KFuyMp47XB4LivXiunrH2b2iH2qn2K/J8x4fGDNxTSZ 9Nh8OviRvTyfT6xtWI+DeXs9MNZubypASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAOZx6/LoOWPvWiHTcf2hiZ0e8fc2mf1E5+vP/AEeuSd7RC2uKtI6QjHfeINTfwtPf Jvty9WPfbt/lucP03gxfJf7d/wBoReYpm97zaNeLb4Ims9Nt94auDjem1Wo5PFi1onylS+1o7l8V bxvtupjDMdNkYtXS1+Stt+m63xImEJ4xjHER2ZxMUjeUTO3VRmydBbjLJqPi08mbeVOXJPq1sl5Q Vbkz9+rRy35rxHqzmZlVEe/Ez5LRlW5iyfR6zffaIjq1OSNZps2a21rZInafSPJhxGMl9LStLRWM lorM/A4dkrWbYfLZC2W/7K6eubX6b4RzT+W76K8b7G6X62cu3Sten59nsm3j+OXz3/0ANGIAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0OIYfpOHPijvNNo+fdvtXJO18k/ /OwPFYbz2ls3jx8VqW6xMdWPEdP9D4lkx/dt79flLLHbkxTPwY6nt2512ORTRzE2x4/dpE7cvkme E4IrW3hRMxO8THRtU1FKWtvtvK2upx22rzRCtXkqzh2jtF7ZbT122b01ndnpuWuP3Z3+Ky20qDVv fauzVy3mejZzNK8dVjqi87KLRLYtXruqvXzkQp7Qoid88R6rcl+WGlW0/Sa22mfhCZOq2x082ix6 jkm822pO8VrPdr4dNObVeDo8XW3uzMbzK+mvxT7szE27cvnu9j7PcNjSaXx8mOIzZevbrEeic5tN +SZnpt8J4fHD9HXHO3PPW0x/DeBtJxx29vaAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAKNRim9Z5e89Nl4DzXtVh5babURHrSf7f3ec1+qnDorWrvvt5Pccb0n0zhmWk Rvevv1+cPE2rGTFNZU26PFfxwa5dVkjelI2772nZnX6bbrEUq3o0d678u8wmuDL2ittvVjXdneeK cGv4jpJ6U56+kS7+j118+GLXpakzHaWlp9NNY3tv+bbiYiNoQy1y30uyZJlrWmZnuym6q1iIJnop yW2Te8bdWnnypQqzZOadokiIpSZntWN5lrxki19vNRxrUeBwnNNd+fJEY6/OejXLn3Xe/wDp9wyn E8uo4lqqxblv7lJ26T6vpD5X7G8QycKzeBMbzMRM1/FH/wA/h9QwZ6ajDXLitvWzRgsAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeL45w+dDrZvWv1OWd4+E+j2jX 12jx67TWw5Y6T2nzifU+rZ1y9eHwzDYxxEy18+DJodXfT5o96vafWPVbjyxDn1OOzHudbM0rt2UW iI69mVtRXZq5tREb9VUoy2iIlRbJ0UX1VZ6btTLrI7V6yk62M2oisT1c7JmtkttVMUyZp6x0beDS RWOvdKijDimvWd3G9pNRMfRcNfvZOb9Hpb0itJeP47k/3hgjaZnbaP1XxWW3T0movbNS0W645nbf 0nrMPpXs3xamoxdJiLbe/X1n8Uf3fKsOTw4jbaXo+EarJhtGTHMxeJ6xH7Sti9Zaj6x3HM4NxXFx DS1mtoi8dJrv2l011QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AGjxLhODieOIye7kr9m8d4eM4to9RwjPXFa0ZIvG9bR0fQXmPbDFvTTZPOJmEWS/V8bs9R43NxLL G8eFbePg1bajU5/s0l1ceKLx1hbjwRE9mOpx0y2uRTSZsm3PMw2aaKtIjo6kYo9EXpET0hVLXxYK xC6MZvyx1lFs0RHfaPiCnU12pLyHGNDbUajBekWma2npWN3p8+opa20e9LSyZLxExTlpM+vdOdcZ a9tPS8MyUvFrzWlI6727u1pYxYrbVmb7x+TQx6au3Nqcl7/0rcmW9axGnwZJj1novmxnZXV0fFp4 ZxLBPgTGK8xzXr5fOH0bFlpmxVyY7Rato3iYfNuG2x56Wrqa8s2jz+7Lu8O12bS6jkwzN6THNNI6 tvrN68Y4rxlx1vHa0bskAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA4XtTTm0OKfTJ/aXdcL2pyRGjwU362yb7fkJz9eTxxyZJjyltRXzUZK7TFtl9Lbwy06YzrHwa+ fJFd/wCVt8m0bQ0eS2qzcm+1K/an+zNZFL5M1pjFXeI72ky48eGnPkvNp27+TPU6nHpMfLXaIjpE erk5dRMxOfN1mPeisfshW1ne1a1577Y6x5R3U0zze31FOWI6ze0byU098kRlzbxM9qrMlPDpyRMR Md5Vt/Ihp5898mWZm1pjftE91uCt7fCI7dWeHDEW3t723l6rslqxWZnasR+SYhFbzhnfxJ2jyeq9 lcGXWZcmW0zWKxHLaI7794eJx5fpfEKabT8t8l5isddo3l9S4VjrwrRUwzSJt3tav3pdOL6Y6dXD j8HFWm+/KsU4NRXPvtWazHquWVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAa+fXYNP9u8b+kdZBsDkZOO135cWOZn4y5Wu4xqctbe9y19Kp4njt6vi+PDm8DFMWybbzPlV 5PiGtz67UxbNbeKTtWIjaIXYpnwuaftT5tXJT3vmi1pMsrU5qIrG1V1a+5DCa7b9GFbRr5J6Wnbt Cu+Wmk0m8956z8ZWZNorbfzcbX5rZslazPux3hUt41NTntktObJ13+zX1bek01r4/HzVm0bxPXy/ +bNfDgjVa2uOY92kdfg6ufJOKvLXtttVVSqbcta2vM7zXtHpLQy5ZtMd+vWd+7Zy3mdJHXra3f0c vUarw7zFY5rT2hH1Lavnrgx81p3U49Pk4nE5L35MO/StfNRXR5tXnrS8W67WvfyiPSPi7uLHFK1p jrtSsbR5Lc4RzsXBaYreP4l45esRD2HD9fnw6evvWvO3Tfr0aGk0U55ra0TFInv6uzgrXFXlx0i0 77RPlC83Yj+JW7oddqr6vHzTTw9/f6dod+L1t9m0T8pcbFSmPHER3892W0zPuz+jSbVvidkcqmfP Sel7bekrI4n4dZnPWIrHeYnZee2Wpy8dEaml4npNZblw5qzb8M9JbYgAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAABEzFYmZnaI7yCXL1XGa0jJXT0571nbee27DiXEprp8nhbxG20W8 5cbD0ikfnKO+urTPvjoZdXqctdsmTaPSvRpWmsdZ6yztfaGplvv3lWW1tyRlz1x0vkn7Vo5atTNe Y0+1o79V2KsZsvX7Ne5mwxnyTNvsx2iGneM/rCdRSuOsTasTt5kRFtpjqmOH4t4nk7estiMNa97R Hwhna0iuKTEdmGWa4672nZtRele1N59Zlq6vLOSsYorEc07qcW65euzRvtXvPZy52naZ7ujr6fXV rWdukREK8+njHgmZmPc67bq6ivVWhxxgxZLztNrT1mZ/SP4VZs0zaOvfp84WUtNsXLvtv3699+rU z7+Jtt5qURqMnPpctaR1rMSw4ZoK57eNk6xHaJRh97Ltt7lo5Z+L1HAPZvVauZ2nFTSzMTzeJEz8 to6xPfvsZntPZ9rXxabmxzefdrv0j1dXh/BcmstW1qxTHHasR3+b0GPhGl+kWmd64dNEVjf73T7X y8vy+Ddx6O3iRakxTH5RXrMw1/lX+3Itw2MFIraN48qRHdZi0cUjmmPen9noox1iO0fNzdXEYrTt stcmd9aX0bJ+HePmiKTitO8TMLZ1cVjrMfqpz6ys4pjfrPRWZ9rXXptUit6zO+23VyaRHEc05L1/ w9J9ys/en1ljqdVbwYw452tlnl3jyjzbmmiMeKtYjpEbLeTXPUU8ee/+qjJpsV5rbkrFqzE1tEbT DpYNbW21Mnu29fKWna0KbqTdjXXjld0cvQ63ltGHNPSfs2n+HUbS9c2s2UASqAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAOVxPWe99HpP8ArmP4b+r1EabT3yT3iOkesvMVtN7za07zad5l XV5GmM9vVfEstvDx0jtaVVMlq+UJ18b5cMRvPeSuK87bUt+i2Z3PtG7zXpjkzXt6R+TXyTMzvM7t ydHqZ+zhv1+Cv/ZuqvPTHMfOYaTMil1a1K2vHSLTELq2v+KWzThGo84rH5rq8JzedqR+ZeI7WnOS 34pYTafWXR/2Pln/AMyrKOCWnvmiPyR6O1y9585lhWJvl557Q6eo4T4dYiMvW3b3UanhldHpJtGX e09unmjsT7eb1l4trI2t0hsZfrdNO0bzy+nzU20/+NmkzO9esz+TZxWis9dttvPv+Tn21jjaW8zn 26bTG3mp1M/Wzv3t0jyWXiKZJmsTERaZhXXDbNl8WaztWenxZLstPp5pau8frDtVrNMM5cfTfpMf 3aunxxbes9d/R09Dp8ebJi09ptFr3jtt2WyrW9wy1Jx132mK+Xq9PotT0iIU19ntLtExa3T47T+q 6nBaYvsZstZ+cT/LeMnUi0TXffo1s2m8Ws2/OIMWk5Jib5L328rS2t94Sh5TV4ppklpW6PT6rh+P NbebTHyas8E081mZy5P2W6OFhjxNTE/hr/LoRO0Kvo9dPqctKzMxEx1la5t3tdnjnMs4noievcrO yZjeFF1OSnNV0OG62cn1GWffj7Mz5w05joovzY7xes7TE7w0xrjPeex6Ua+j1UarBFu1o6Wj0lsN 3JfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrU5o0+nvlt92P3BxuM6nxNRGCs+7Tv8 2hToxm1r3m9utrTvMsonqyt7XTmcja0u3O6FMfi5t/u0/lzdJM81p9O3zdvHTwsUR5+bfPqOfX1h dqV+3O7bs1+T31oqmI3TEM4rvCdkDGIIhlFd2daboS0NXG2bD6bufxXU1vlmu/u4us/N0+L1tTSx kr9qk7w89j1FNZMV3jxLzvaJ8mer+LSOZqK2xZotbvljfr/89U453rXt9lse081xZtNjx7TGKu0t DHlrevSevaN5Y6+tJ8c7VRNMt63n3ub+6/R54rERMztDYy4a5omclYmfxKcenrjtHLvtPrCnVmdb eFe3JXmjy6eS/DrMuLVYsta9Mdt++6qLxO+0dEc8UmInr18iUfReHcXrqccb9Z27Q61Lb13eJ9nc 1Z35rTvE9avY4bTkpG8xEfB05vYxqybc07R281naGMREdoT5JQqy9mply7Q3bV3iXG1eXw7TWSka c258t7+tpT5/BjT7MfHqndz12Z+M4lMMKyziUJJiN1WSu9fku23RaOgKNJqbaTU1t9yelo+D0cTE xEx1iXmM1Nt3W4PqvFweDaffx9vjDbGvxz+TP66QDRiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAOJxzU73rp6z296zsZMkYsdr2naKxvLyObNOfNfJbvad1dXkaeOdpvsc2yuZVzfbfqybutwu s5s8R92J3dvJb3tnO4HSMegtmt3nfZvYp8SZl0z45NfSK7onH1bNcfRFqnUKJr0Y7dVtq7prjEsK 0XVpEM6028mW20IHK41aPo3J6zs4ODhdcvPnvExFevNXpMOrxi/PlrTee7PLX6Pwa09uaNlKtHg9 dM3z5d7ReOu02nu0JzZMfblrv5R5uvrcdImZ26T1mYhxs1Os7RH93PZ7axuafNfLitvbaYU3yZYt PXs9NwHhui1HBa5LVicsb81onrEuVqNNSuS8Y67dZ6xPZa59Il9uX41vEitImZme3q2Kxbxora0T Md/ROSa4Ztkj7c9OafL5LuGYubmyX3iu/TfbdSfVnpvZLT/XZK233+Mbbva1xRXyiPk8pwbH4N6T adq5a71n0tD1WDL4tPe6Xr0tDpz8YVnJHWEXYxbqlBedoef4tW0XraO09HdyztSZcbUz43C+ee9b SVMaeOfqq7+jGckQ1Yz7+7v2RN/WXPXZPjci2+2yyJaVMuy+uSJlA2d+pNoVRbeDcSxyTE+TDDlt pdRXLTynrHrDOyiyZeVFnY9TjvXJjres71tG8MnJ4Nqt4tp7T1jrV1nRL1x2cvABKAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHJ49qfD09cNZ97JPX5PPw2uI6j6Vrsl/ux7tfk1mWr7dOM8iLdm vfebREefRsWldw7SxqNbWbR7lPesrn3Vteo7dYjDpMGCvfbeXQ0uLlxRLRxROfUc34p6fCHYrXlr EejqrjY8uzCYW7MZjdVKqK9VlaxCYrsnYExBMRMJRPZA8/xPHtmpP9W2xx76vhWOInvt/C7ike7N vwzE9kcapGfhlevTaFbFo8RqJ5vy8/RoW09ek0msxHfp3dzNoLzp4zUmZpMbT8HJyYJi20X2n0lh ZY1li/RaidBF4w2mK3jrHaFGp1lN+tptPp5IjBkid5mIp16TKu0abBPv33vPlM7z+iPdFNcWXU5I tkrNce/b1W5db1nTaf3ax9q0fxDW1ebNk2phty1mOu09VOm8W19orEz23j1TwfSeERFuEYMddptW d43dvBn21eKJ75KbW+cf/JcTgMxXTb3nbljz+TpcPmc2uyZO1KRtVtGVdi0bx07qJnllsRO6rNTe N4XVamsy8mnvPwc3R2jPwe8TPbdlxXNOPSZfhWWpwO85OFzv57qrODkzeHntSe8Sn6Rv0a3EZ218 8nXekfr1a0ZLVnqx19dWb6demXybOO7lYMvNMdW9S/VVLo0us7tPHdtUtEwJiZU3jq2Jhham8CVG PNODNTJXvWd3qcWSubFXJWd4tG8PK3pPd1OB6veLaa89Y61/u2xfxh5c/rsgNHOAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAANLimq+i6O0xPv392rdeZ4rq/pOqnlnelOkIt5F8Z7Wj27I2I6sb25YY V1ImY3dbQ08LRc23vZp2j5OJG+XJWle9p2h6HHtbJXFT7OOIpX+7TxT31j5rycdTh+Dpz+XaG/sw w18PHWseULN2trBE9UcrJKBhFU7JAQi0dEomegNDUYovM7x3jb5tO1ZvpbaTLtzRExWfWPJ08kbT Ex5NXWYYyV5omYtHWJieyeDzuizfRs19Jn6TM7Ru1uMcJxZqTkw+5f4ebqa7SV1MR4tdrx2vEfy1 axqsNOTLjnLXytVXi3Xj8+nmsxTLM16d5npPyUzpekTtSK+U7vS6vQ/SYmK1vWPS1HOn2dvvvvE/ tDO5XlcO+LbfHSd/W3o6/BdDOXPTnj3Kz38rS6Wm4FNrRyRzTH3p6RH/AKvR8L4dXSzE3jmtHn5I mbfqLV+m4dbLSsZInHjr3iI6zLpYaxS01rHuxHRHiT9mv6s67Vj1aqL6326MrWiYa+/Q54BxPaGe XRZpj8MquB4+Xg8zPnB7SX30to379GxpK1xcHiKz5IS8xr8PLPixH2bftLTy05o6dHYyVjLhy0t1 izjZa3pMVv3iO/qz1G2L+NbSajbNyW7xLsY8kTDz+fJXFqKZN4iZnafi6WHL0iYlStI7OO+7axW2 crFl7dW9jvE9ULN+J3ZbdFGOy+AYWpEqN7afNXLj+1Wd23KrJVMvCzseh0+auow1yU7WhY4fCdV4 OadPefcvPuz6S7jol649Tl4AJVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV581NPhtkvO0R+4NPi2 r8DB4dJ9+/7Q83Po2NTqLanNbLfvPaPSFDHV66sZ5ET0hRknyW2lTtMyouz0c8usx2n7s7vScKwx zc1vu/y85p+maJh6Th+SOWeveXR4/wDLm8v+nX5mUWa9bbrInolmu5jdTNkxYFk2Isr3TuCzeGMz +THdEyDDJO9Ja823rt2XWnya946pGvktDXta0ztWu/ybvLE9dkcoOf4GbJPWK1j49VmLh9JtE33v Mevb9G7WsW8l1ccREISophiJ2jpDYpijbaOjOuOJ8ujOdqxsgVcsUjaETYvbaFFrgu5lVsm0yUtu ryg43H5m+GIj1XcJzePoL4pnrWGtxmfchr8JvfHS1622if3QljzTTLes+qrNjrkiYtCzPMxnm095 YZJ6boS5teB49Tqscza97VtvWvlv8V/FOF34RrIxTM2xXjelp/eHoeA6XnzReY3ivX/0dfivDcfE 9HbDbaLx1pb0lOs+jO7K8Lis3cN+0NKcd9PmthzV5clJ2mF9J9GHHVL108dm1SznYr/Ft0tuhLb8 mNohFbMhLWy0mJ3rPXvDvcO1karBG8/WV6Wj+7kWrvDDBlvpdRGSnbzj1hpjX4z8mOx6UYYstc2O uSk71tG7Ns5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2jeXneJ62dVl5KT9VTt8Z9W9xbWclPo+O fft9qfSHEU1pv48ftYST23ZTDC/p0YtlVuvVjMbM5+LCZjYGWGdrTPxiHY4ffaf3cjTxz1v6xMS6 Olty2iXVj/Dk8n+ndrkhnGRo1v8AFdW3RCrZ5uiYsqrboncSu508yjmZRYQt50TfowYTbYGVrKrT uTZjvukQnYhMIGVY2ZxPVWyrHVCWzXpVXkt3TE7Va+W4K7X3jv1auTNy3jdba0RZpamfroQN7Hk3 6wr1GTaN2OOJiu6Mu98NvgDi8Wy74d/yZ8PiPAiO2zU4nb6qIn1bugjfFE/ASp1ke9u15mbbRDZ1 Mb823kx0Ontn1OOkedoJCvT8I03gaKsz9q/WW+isRWsVjtHRKyrhe0XCfpWL6Vgr9fjjrEfeh5fF feH0V5Dj3DPoOo+k4a/U5J6xH3ZZ7z3228evytOk7NvFbo0cdols47bSybt7HbddHVqUs2aW3Qnq xVeu8LILR3SlZw3V/R8nhXn6u0/pLuPMXjeHT4Zruf6jLPvR9mZ8/g1xrvpz+TH7HUAaMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAABRq9VXSYJyW79qx6yvmdo3l5viGs+maqYrO+OnSvx+KLeLZz2te1rZL2v ed7WneZYWnZl5K72YV1xEyxmeqJljzIEWlVkszvbZp5soN3h2SJz3pP3odCnuWmPRxuERfJrZmtZ mtY96fR28kbX3dXj/wAuTyf6bmK+9YX1s0cNtm3Sd4LFY2K23W1s16StiUJW7bp22RW3RluBuruz mWEgrmCGWyNkoExKE1QlPmsqRDKeyBjaejWy2W3ttDUyz1QKslvehVqKTNosyyTvELabXptIJpaP B39Ia2mz+JGpr51jdZefDx2hzuHZObNq58poJaGtjxJ2+LoaKP8ADRPo5+T3skx5OhpOmC0fBNQ0 5yTbn+bt8A0u9raiY6RHLVwY62mI6zMvaaHBGn0mPHt1iN5+aYVsACBXqMFNTgviyxvW0bSsAeE1 mkvw7V2w5Ote9besJx2er4rw2nEdNNekZa9aW9JeQjnxZLYskTW9Z2mJY7zz26fHrrdpbZsY7NGt mxjvso1b9NmUwpx33XRO4K7VUTE1nmrvEx1bVo2VWiJE/XY4frY1WPlt0y17x6/FuPM0m+HJGTHO 1qu9pNVXVYt46Xj7VfRtnXXL5MfzexsALsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHM4jxOMFJphmJv529Dq ZLfjDjPEIx450+K3v2+1MeUOHSOWFc3nJkmZnf4yujpVlqunOeFpV2nctLCZUXRM7MJtsWlRkv3Q ky5NmpWt9RnrixVm17TtEQnJabXisRMzPSIew9n+CRoccajURvqLx5/chfOest642OGcIpoOG2w7 ROW9d72+LQvXevyejcPUU5M+SvpLeOataraw2a0dLbLqTtK1G3Es4lVWWUSoldFtmcXUbpidgXzK GEW3TuCUSncnsDFMMLSms9EC6J6FpVzbZE5ALy0809ZbFr9GtfrEoFMzuuwz0Ueey3HbaBLDXe7i tMOfwWnP9I+NZbuttvhs1uBRtXPb4SDm3iIvf57N7Dbl0VrS5+XrltEd+Z1Jx7cNms9N4TURRw3T +PrcO3WszEvZOD7P6aYiMlvu16S7y1QAIAABxOPcLnUY/pWCv1tI96I+9DtgmXl68Biy7/NtUu3+ O8HnFa2s0tfd75KR5fFyMWTdhrPHVnX9R0cd21S3Rzsdm1iuqs256wrmGcT0RYSx5d047X02SMmO esd49YRE9WcdSXhZ2O1p89NRji9J+cei1xMc3wXi+KZj1j1dTTaqmor06WjvWW+ddcu8XK8BZmAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMMmWmKu952UZ9XFZmuP3revlDTtzWnmvO8q3XGmfHb9ZanV3yxtWeWn7y4es vPNtDqZJ6Ts5mppvdl/XXRMyfGvSNlu/RVvtOzLfoipLT1VTKbSpvfogRkvtDVyZOhkyvQcA4Dzz XV6yvTvTHMfvK+c9U3rkW+zvA/D21urr789cdZ8vi9KDb45rejl8Rry6iJ/FV1HP4vXbBTJEfYt1 +UpiHM295bXsqrO9l8QkZ0lZEqqLeyBZHZLGvZkhIndADKJ3TMoqWQMZ6pjsxll2jsCLSrmU2lFY 36gieyu0LJk3jbsga0wdqzK20QpyztQGprL/AFMrOE05NLkt6qdVWZxNrSe5o9vWBLiUjnzXn0vL q555dHt8HOwV928/1z/LpzXxbYccRvzTB+jucOwxh0dI22mY3ltIrHLWIjyjZKyoAAAAACJiJjaY 3iXleM8InR5J1GniZw2n3oj7s/8Ao9Wi9a3rNbRE1mNpifNFnVs65XhcWTdt47bnFuF24dm8TFEz p7T0/pn0a+HJux1OOrOux08d1ndqY7tillVkzExLOk7yd4YxGwluViJhE45raL0na0dtlWO0+bZr 1TKi+2zptZGTamT3b/tLacvJjiY3XaTWdYxZZ6/dtPm1zrv1z78fPcbwC7EAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhkyV xUm152iAZWtFazNp2iGhm1Vss8uP3aevnKrNntqLdelI7VRHRnrX/HRjx/tZREVjZXeybW6KbWZt pCZ6S08tN7Nmbb7zCrJtyoS5145bSx5mWafelr3tsKmS/o08uXyhlly7RPV2+AcBnPNdZrK+53pS fP4ytnPVda4y4BwHxOXV6uvu96Unz+MvVxG0bQRG0bR2G0nHLb2gCUDX12LxtFmpHeazt82wT1gH mMN4tWs+rcr2aEV8DU5sM/cvO3yb+O0csLUTSdrLphRE8tlkZI7Atr2ZMazDJVKTYSCawi7Ksq7z 1QERvLK3ZGPrKbyCrbdnMcsbeaa18/RhvvM7oGEwTG0JmYYTIML22a2e28xELM19oURPNO4lOem+ n3ZY5+prVnMc2GYU4/L4A0a15cNf6rz/AC6fC6+NxCPOuOu/5tHJTbHj+F5/l1+BYumXJMd9o3/d MRXYASgAAAAAAABhlxUz4rY8lYtS0bTEvH8R4ffhmo6bzhtPu29Pg9mq1Gnx6rDbFmrzVsizq2df zXkMWTeIbNL7tbXaHLwzUctvexWn3bmPL8WFnHVL326VZ91MfFVjvvVlz79kLrcf2m7j7bNHH3bl J2SirLQoy4t1++7G0dBC/RanxI8PJPv18/WG241+alovSdrV6w6mDNGfFF4/OPSW2b1zeTPL1aAs zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAVZ9RXBTe3WZ7R6iZOpzZq4ac1p+UermZMl89+a/byj0Ra9815ted59PQ32hlrXXRjH DpCLX6ML5NlNsm/ZRqstfdXzbsZt06sLZNvNB1Za8RDWyZdo7q8udq5Mu/mIMt4md2lmy7JzZuWJ dHgfBL8RvGo1MTXTxPSPx/8AstJ1XWpIs4BwSdbeNVqq/URPu0n73/s9hEREbRG0QUpWlYrWIisR tER5JbSccur2gCUAAAAPM8Sry8Uyz67fwuxbzVPGsE49XGbvF42V4M0TEL33ERnktsxpk3sumK2j admFdPFZ33VS2Mdui2J3UU6LYlFSsN2O5NkCyJ6K7T1TEsbAsxdpReerKkTFGMxvYEz0rsqtbbpC b2VT1QEzuwtbaGUxspuJU3neWdKoiu8rq12gCI92YatLcublnzbEz1aOptyZqTuDHLfxN6R0+t5X qdJhjBp6UiPLeXl9NSMnEKxHa1+bb8nrlvxUAAAAAAAAAAABTqtNj1eC2LLXeto/R43VabJw/VTh ydY+7b1h7ho8V4dXiGlmvbJXrS3xRZ1fGv5rzeHN02bEW3cys3xZJx5ImtqztMS3MeTeGFjqlb2O 8btql3NpbZtYsnSBLeiWfdTjtutid+ghherHS5p0+f3vsX6T8Fkw181d4lMvEWdnHaGnw/UeNh5L T7+PpPxbjdyWcvAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAo1Oprgr63ntAmTqdRqK4K9etp7Q5d7Wy2m953lNrWyWm953mVd77R0 Za1104xxlN9lV8qnJl2a9s3xUXX2ybsJyRDWtl3YWydEC+2VRkzeW6q+T4tbJm+KRdfK1cmWZnlr vNp7RC/R6HU8SycmCk7ed57Q9ZwvgOn4fEXtHi5/O9o7fJaZ6z1uRyOEezVstq6jiEbV71xevzer rWtKxWsRFY6REeSRrJxz22gCUAAAAAANbX6aNVpL0npMRvWfSXlKamsRMVvXm+EvZXjmpaPWHzfL oNRjzXicfWJ8phfPxFejx72x7xMzK+sXiNoiXlq+Pi6fWV/VfTNqfLJl/WTg9Pji8R70LqvMV1Gq j/zcv6yz+lanzzZP1lWpelTET6S81Gp1P/Gyf90s412rjtnyfqql6asREdWM9+jz9eJ6yP8Az7uh odZqMt458tpB1JvEViI3/RhzRt13/R1MNaziiZiJn5K9ZNceKZiIiQcu/WekT+iYrWI3lzdTrs+8 8uW0fJzcur1Np/zsn6g79phVaIeetqNR/wAXJ/3SwnUaj/i5P+6UD0ldonum161h5mNRqP8Ai5P1 lNtRqJjacuT9Qd22WN5aGeZyZd/KHJy59RHbLf8AVq31Gp/4uT9ZEvS8Lr/vSs2npzRtL1z53wK+ oza/HW2XJNd99pmX0Rb8VAAAAAAAAAAAAAAcHj/C5yV+l4I9+v24jzj1cLFk8nu5jeNpeW41wmdL knU6ev1Vp96sfdn/ANFdTrXG+eq1q5F2LLtbZoY8m8d11bbSydErsYsm+zZrO/zcnBm226uhiyRK EtrvCrJDOJTeu8A1MWX6Lqq5N/dnpb5O5ExMbx2cPNTeJb/DM/iYPDtPvY+nzhri/jDy5/W6AuwA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N mtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm 9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N IpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W MYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2 +To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql o+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37 O99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE TE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1 L7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4 izsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt 1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb V5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum L37+HHaPm9DSlaVitKxWsdohI0Y22gAgAAAAAAAAAABXnyRhw3yT92Nwef4xm8bVzET0rPJH5d12 CvLhho3rN9RWs9Z23n5y6O21YhrVYbdGOCfrrLPJRpv863zVS6FS09SvZj3lVZZRdPSqmnSWdrIE ebOkK4ldTsgW1WKqd1oMZhEVZyRAImOjGI6rJ7IiATNd46qL02bHkiaxaoNGY2n4ImPgtyV2n0Vo Gvlx7x2beiyTk08RPevSVUxux00+Fn2n7N+n5rRFb4AAAAAAAAAAAAAAACLVres1tETWekxKQHlu L8InR2nPp43wz3j8P/s5dLveWrFqzW0bxPeJeV4xwmdFec+CJnDM9Y/CrY1xv8qvTZ+WYdbDk5oh 5zHk283U0eo3jaZZ2N5XYjrCnLSJhOK+8d1kxvCqzSwZvousrb7k9LfJ3nB1OLeJdLhufx9LEWn3 6e7LXN9Ofy5/W4AuxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAETaKxMzO0Qi9646Ta07RDmZ9VbPbaOlI7Qi3i+c3TPUaqcu9adKfy0722ZXvFa9 XO1OrjrESxt66ZJmcjPUanlidmhkzTZVfLN5VWvsC2b7R3U3yqrZZtO1esz2h2+F+zWTUcuXXTNM feKR3n5+iZLVbqRzNJo9TxHLyaekz62ntD1fDOA6fQbZL7Zc/wCKY6R8odLBgxabFGPDSKUjyiFj SZkYa3aALKAAAAAAAAAAAAAADQ4pl2pTFH3p3n5Q33E12Tn1eSfKscsLZ+orS00eJqbW+Lfnu1tF XaJnZsz3WpCfsyp00fWSvmPdVYOmSUDd8kR3InoQosy7JmUX7MdwZ17ro7KKT1XRPRAsrO0rYndr 79V1ZBaQiJ6JgCSIJASwrO07MpV2nqBlrv1a1o2bf2qtfLXaQUTO0sb05o3jv3ZXhjS20xEphW5h yeJjjf7UdJWNKLziyRePsz0lux1SgAQAAAAAAAAAAAAAADG9K5KTS8Rato2mJZAPIcU4ZbQZuekT OC3afT4NXFkmlntc2GmoxWx5K71tG0vHa/RX0GpmlutJ61t6wrY2xr8dXS5uesN+tt4ef0eaa223 2dnHk3juyreM81OaFGiy/RtZET9jJ7s/2bdutd2jqKeic3iNTsd8a2h1H0jTVtP2o6W+bZbOO+gA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABje9cdJt adohGTLXFTmvO0fy52bJfU23t0pHaqLeL5xdK9Rnvqb+cUjtCi94xxvK3JetKuHrdZvaa1ljb10y cnIs1Wt3naJc++TmVWvMz1YWybfMGdsm3eWek0mo4jm8PT0mfW3lDf4V7P5tdMZdRviwfvZ6/TaX DpMMYsFIpWPTzXmf+steT8jn8L4Dp+HxF77Zc/4pjpHydYGjC3oAAAAAAAAAAAAAAAAADG9opS1p 7RG7zszN6WtPe0zLua+3Joss/wBOzhzG2OsL5+IrY09dsSyYRijbHEMvOChb7KjF0yS2LQ169Mso S24noyrPVXWejNVKbTuw3T3REdQWU6LYlVvsyiUDPfqupPRr79VuOQX1lZEqoZxIMksd0gT2VT0l bPZVbuCaW8i8bwr32WxbcGnkjaZa9p2ndv5qbw5+aNugLItF6TEtvTX5sMb969HMpfazc0d9stqe vVZDdAQAAAAAAAAAAAAAAAADV1+iprtPOO/2u9bektoB4TJTJpNRbHkja1Z6uto8viVht+0HDvpG H6Tjj6zHHvbecONw7Ltfkmeqmo6Ma69DXbbZTkr1mGWO3RneOaGbZRoM30fVzSelMnT83aef1FZ7 x3h1tBqfpGnjmn369LNc3sc3kzy9bQCzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAa+q1dNNXr7157VhGp1Xh70x+9f9ocy283m1p5rz3mVbrjXHjt91lz 5c9+fJ1nyjyhdM8lZlOOIiqrUXikd+kMreunnI5XEdX4dZiZcG+XmtNl/F83PeeWWHDOGanieSKY q+5H2rz2hMzWd1Iqx1yajJXHhrNrW6REeb1nCPZumn2z62Ivl7xTyr/6uhwzhGn4Zj2xxzZJ+1kn vLoNJnjHW7TbbsAszAAAAAAAAAAAAAAAAAAAAaPFrbaSK/itEOXt0rDf4xb/ACa/GZacRvaF58Q2 IjasQnzPIhCU92tMbZGzHmotG10C6nZkwpPRmipIllEbMIZIE7solgmJBnCyk9VMM6z1BtVllEqK z0WRILYlluriWcSDJVbusV27gwInaSWM9ECyZ3hqamnSWxFmOSOaqRx725bNnSZNs9J+OynVY+WZ YYr7TE+nVaIr0Ais81Yn1hKAAAAAAAAAAAAAAAAAABExvG09peU4nov9n66L0j6q/WPg9Y1OJaON ZpL0+9HWs/EWzeVz9PbmrEtnyc3h9reHy26TWdnSr2YX6657ijLXpLX0+onSamL/AHJ6W+Tbv2aW ekTv16JzeI1Ox6KJiYiY7Slz+E6jxdN4dp3vj6fl5Og2clnKACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2jeQRMxEbzO0Q08uqtkma4ulfO3r8lefUePMxWf cjy9WvlzVxV6T1Z61/x0Y8f7Wc7Ur1lqVy+LqOWJ2hp6rXddon5rOF1tfmz5OkT0qzb8dWbxjp1c biuuilJ5Z6r+IcQrixzEy8zl1E6rNt1tMztFY81sztU1eRucN4ffi2p5esRM72n0h7rS6XFo8FcO CkVpX082nwXh3+z9FWLxHi36328vg6TZyW9ABAAAAAAAAAAAAAAAAAAAAAADj8Unm1tK/hqppHvw y1k8/EMk+m0GOPeafiFpCZYwolnXspvHvLa9mF46gmnZmwozRUiUCBKYYsoBLOFbKAX0llEqqyzi QXRLOJVRLOOwLIljZMEgrlhKyYYTAK5nZPN0RZjugUanHzVlz6xtLq361c+9eXItPpXX0dubTU+E bL2lw2++O1fSW6m/VYAISAAAAAAAAAAAAAAAAAp1GbwcfTreelYEydcuMcRrM/L9nnlsV6wqpi2r tv133mfWVkRyRtEdGFva7MzkYZNoamWN4bV4mYa9qztKIujhVppxGI8r1mJegeZpknBqKZY+7L0t LRekWrO8TG8Ns/HJ5ZypAWZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAADS12fp4VJ6z9qVuq1HgUiI+3bpDl589cOKZmevqprXPTbx477rDJlrhr1nq4+s182tMRP RqaziXiZJrWekNG17ZbxWJ336M5LXRbI3dLTJrs07RMY6fan1dHLrowY+X7MVjt6N3R6Kul0EbWm s7bz8Z+LnabQX43r7Y53php/mXj+Dnv0f1JO1x/8ZxbUzj02O15mfLtD13AvZqnDds+pmMmo26el XX0Wh0/D8EYtNjilY7+s/NstpOOTW7QBKgAAAAAAAAAAAAAAAAAAAAAADG88tLW9I3BwJtz6nNf1 vK/DHVqYJ3pzT5y3MPZeojOWMQylEKpTVjZnDCwkqzYQyRRICATCITAJZQxhMAshnEq4ZQC2srKq qrIBZCWNZZgwswmFloVyCu0dFcx1WyrtCBhv5NTPHXds2U5o3hIz4ffbPt+KHUcTSW5c9Jme0u2v VYAKpAAAAAAAAAAAAAAAAYZctcVOa35R6tLrltN795/YvknNqrfhpPLH92V5isd9mWq6fHjk6rn0 ZxG8KK5Jm/wbVZiYZtqrmkqL023bkxvCiY3lJHNyRG81mHS4Rn5sNsNp64+3yaWaNrzOzHBl+i6q mT7s9J+S+ay8mex6EIneN47SNXKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAImYiJme0JafEs3h6fkidrZOn5eaLeJk7eOdm1Hi2vmtPTry/CHmOJcUvmvOPF1n09Pm 6HF9ZGm01qxO3R5vSY7XwzmzTy47zzTEd7en5Mfvt2/PURWdo3tvPrPlKymbktFqTtMTvHzbOLDG f63JXbFX7FdnoODcDprZpq9TjiMMTvSn4vj8l5fxnrk91saPSa7i2hpOfbTVt5x1m0fLydzR6PDo dPGHBXasd585n1lsRERG0dIF5OOe6tAEqgAAAAAAAAAAAAAAAAAAAAAAADX11+TRZrf0y2Gjxe22 gtH4piP3TPpXKwxtjhuYo9xq442iIblI2pC1RET2ILd9kxCqRjZmwlCSEohIJAQAAJZISDKGUd2M MoBnVbVVCyAWVWeSuqyOwIlXZZKue4MJV2WWYT2QKbKL9YlfdRdIo35b7/Hd3KTzUrPrDh27uxpb c2mpPwX/ABX9XAKpAAAAAAAAAAAAAACekTIp1eTwtJmv+GkyJn1oafeazbfpMzLR4jq/o8b823zX 6XNF8ERCvTcNpxLV5LauvPhx9Irv3lhztdtv8TtaWLicXrt03jzjzb2k1nid56ty3s/w+a7Uwzjn 1raejlarhmbhl/FpbxMO/fzj5p/ixSeXOvTtRfeI280ZI26tfDm3pWe63LaZx7qtGvniJ6tPLvOK fOa9WzbJvTbza02jl3n5SSljscK1MajSxWZ96nSW88xw/VfQ9XMT9nfa3yemid43jtLeXsce88qQ EqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADia3UTm1l4j7OP3Y/u 7Vp2rM+kPJW1PhYcmS0+9MzKm/jbwz31weMzbV8UppazPL9q0/BF4rk1GLDSNqxPWPhCnHmnNrtT qPKteWPm6U6OdHaZvO+SaRNvhv12Ub/q3FhtrNVj0uKOt56z6R5y9zix1w4qY6RtWsREOJ7L6OKa S2rvX6zNM7T6Vh3mmZyOfya7eACzIAAAAAAAAAAAAAAAAAAAAAAAAAAczjVvqMVfW/8AZ03I41bf Lp6/OVs/UVrY47NyOzUxd4bUJpEbb3Z7IiOrKIVSjZhMLJYyhKIgmGUQSDESIEbJEgQmCITEAmGU IiGUAyhZVhDOoM4Wx2VQtqBKuyyWEgqlhKyyuyBVaGtkbNmvk7A15l1eH2300R6TMORPSXT4ZO+O 8fFefEX63gEAAAAAAAAAAAAAAAq1WPxdLlp+Kkx+y1Fvsz8gjhaDauGK8sx07y3OE3m1tT6RaP4c vU6yMNKUx73zT0ilY3l2eF6a+m0kRl/zbzz3+Ez5M8z26fJruW6wzYq5sV8d43raNpZjRzPPaTmx 5b6bJ9rHO3zb2WJ8GWPEscY9bgzxH2t62n19GWW0eHOzHU5XbjXZ1x8WTnz2iZ7S2M1IjH2+LX0V KTqs8zO9ot0j8nUthi1J3UaOFMTfLFo6xMbS9BwHWTqdHOO8+/hnln5eTjYMFo1WTH5VnePzXcIm 2k4zlpPSmXy/hfF5eMfJns69OA2cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAADG/2LfJ874rW845mubliY7bPoto5qzHrDz0+yePNF41OotaJ7RWNtpV1OtfHqZ715fhu j8adNpcVfeyzE2/vLuanhOu1nEctIxTTFa/+ZPbZ3eHcF0vDbTfFE2yzG03t32+DokynXl9+leDB TTYKYccbUpWIhYCzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAcXjE/4zDH9M/wAu04XF5/3jj/0f3Wz9 RUYmzDWxS2I7FSyjuzY1ZKpRKEygEwiWUIkGIk2QJNhKQhMIhkCYZQxhlAMoZwwZwgWQshVCyATL CWc9ldpBhZXLOVdpQK7NfJPRdaWvknoDVvPvOnwuel4+TlXn3nS4VPvXj4QtEV0wAAAAAAAAAAAA AAAAAVV02CmTxK4qRf8AFFeq0AAAanEsfPpZmO9Ji0NDLfkwdOsulrumiyzHlVzJrz4Ovoy26vB8 cTBa9NffLtMY77Rv8Yegx5ImkKdJoY1HC81Y+3OSbVn0mGGkmbY45u6tnrrTOu2xGO0RxCd+nNVj qKxTV1vH2pjaGtnyzXXYdo96ZmGXEMk15b7/AGZiVerWPTYckZcNbx5wzc7hGbnxXxzPWk7x8pdF 0S9jh1OXgAlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAcPjEf4/FP9H93ccXjMf4vDP9Mx+62fqKrx+S+GvibEFSsqyYwlVK ZYsmIMoRKYJQIPIEiQ2ATCUQygCGUIhMAyhnDCGUIFkLIV1ZxIMpVWWSrsCuyqyyyq09ECq8tfJK 66jJ2Bp5J6upwn7dv9Lk5J951uE/av8AJaIrqAAAAAAAAAAAAAAAAAAAAAAq1Mc2myxPnWf4cmtu XT9fR0tffk0WSe28bfq5Wbamm3326MtunwfK6PCv/AxPraZ/dz9PO97/AOqf5dHhdZrw7Dv3mOb9 XOxRFM+avpe38mvkPHf/AFWlrKba7Tzt99ZxKkfR7euyNXMTrtPHfa0z+zPiM/UR8Zj+Wbdu8HpN M2bfzrV13M4dO2pyR61dNvj44/J/oAWZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj8bj63BPzdhyeNx0wz8ZWz9RWri7Nmv VrYu0NmqaRZHZlDGGSiwxZSgCEkCBCQSCQBMJRCYgEsoYx3Z17AlMIhlCBnDOGEM4AlhZZKq4KrK 7LLKrIFN2vdfZReAaObu6/CO9vk5OePR1uEd7fJeIrqAIAAAAAAAAAAAAAAAAAAAAGtxCk5NFliI 3mI32+XVyNTyZOHTee946PQKPoeDffw4777eW/yVs60xv+ZxOnr4Okx1t05KRv8Ao41Z5q3yed5m XY1szXRZ5jvFJ/hxItP0aOSN9q7yrtr4f2tHFM5+KT16Yq/vK/iGSbXw4vO14UcPx5MGfNbPG18m 1oj4THRsTw7VanPXVYpi3gzMcnrvCnG11JOupwuN8+a3pEQ6jT4divjxWnJExa09pbjbM5HHu90A JUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAHM41H1GOf6nTc/jEf4Ws+lls/UX45uGekNujTwdm5RNIthKIZKLDFlsiQIShIC EgCUJ7AmGTGO7IDzZQhMSDJMMYZQgZwzhhDOATuqssmVdgVWVWWyqtCBTeVF19lF+wNLNG7q8I+9 8nLyupwnt+S8RXUAQAAAAAAAAAAAAAAAAAAAAAAItWL1mto3iY2lyrcLyUxzix2ia2nvPeK+jrCL OrTVnxpanhuPPemSs8l6RtE7dJj0ldpNP9GwRSZ3neZmV4cR/Vs4AJQAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHi1d9H M+kt5ra+vPoskfDdOfqK4mn7Q3aNHBPZu0W0RdDOGFWcKLCJZeTGQQlCQSgASBsCYZQxhlAJTAmA TsmAgGcM4YQyjsgRLC3VnaVcgwsrt3Z2V2QK7tbJ1bN5a9waeWO7p8Knt8nNyebpcK8vkvlFdQBA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9RXmwZI+ErEWjesx6wQeZwejeo0cccuW8 elpblJaaRGxVnCuss4ZrMvJEgCAASISCQIBlCYYpieoM0wx8k7gzIRueYM4Z79FcSy3QEsLJmWFp BjaVVpZWlXMoGNmvkXXlr3kGtknu6XCf7OXkl1OEdl8orqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAHmskcmtzV/rls0U62OXiWX4zErcc9GmkRfWVkSqqziWayxCPIANwBIhIJSxS CRG6dwZwlhEs4BluMdzfqgZxLLdXuy3AmVdpZTKuZBjaVVpWWV2QlhZRdfZRcGpl7urwfrzfJy8r rcH61vPyWitdMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHA4nHLxKZ9awnH2ZcY jbW459aq8fZpfiI2IZwrqzhmsz3Ebm4JN0AMhCQSIASndiAziWUSriWcAyRujc80DM3RCfIETLCW UsZEsJYSslXZAwlTddPZTkBp5e7r8Gj6rJPxhx8k9Xa4PG2C8/FaK10QAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAcfjcbZMFvnDWx9m5x2PqcNvS+zSxT7sNPxH62YZQwqzhRZO6UCB KUAJTux3SDIRuAncQAmJZRLBMSgZ7iIAZRKd2DICUSlAljLCYWMLIFVukNfI2bNbIDTyT7zu8Ijb Sz/qcG/2nf4T/wCE/wD2WnxWt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHL9oL +Hw2cm28VvEuPptfgyVj6yIn0no7/FtJfW8NzYMe3PaPd39d3iMug1WktNc2C9dvPbeP1aZ9xF+v T471tHu2iflK2HkqWmvaZj5Surqc9Ps5bx+alTHqYHm68S1Vf/NmfnC2vGNTXvyT84Ql6A3cSvHM sfaxVn5Ssrxyv3sM/lKB1xza8bwT3pePyWV4tpZ+/MfOEjfGrXiGlt2zV/PotrqcN/s5aT/+wLRj FontMSlAlKEgndO6IAZQljDIEgeQljLCzOVdkCu/SGrkbF56NPNeKxMzMRHxENe0+89DwuNtHHzl 5PJr8NcnLW3Pbf7r1nCZm2gpae8zMrz4i/W6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAETETG0xukB4HVaeMHEtRi26RedvkyjBSfX9W77QYvC4xz7dMlYlrU7M929dWJLFc6aPK0q 7YLxPS0S22FlP6q38Zac0yR92s/KVc3tHfFf8tpbcsLRvB/dR/8ALLVnU0r9uL1+dZI1mnmdvGpv 6TOy6ym+Oto2tWJ+cJ/tW+KLK5KW+zes/KU7tG+h01p64qx8Y6NXNo6Y+uPJlp8rLf0rfG7MXtHa 0x8pZxqs9e2a8f8A7Oj7HaTHn0+f6RWM23LETfr6vRW4PoL99NT8ui7F4+vEdXXtnt+fVbXjGsr/ AOZE/OsPS29nuH27YrV+VpeV9pdPXhOtw49NG9Mld55+vXcTPd42I47qo7xSfyWV9oM8d8VJ/VxM d8l46xWF9cV7en6o/qLfxp2I9ob+eCv/AHMo9op89P8A/wBORGmyT5R+qfo2X8P7n9Q/jTsx7RR5 6ef+4/8AuHftg/8A6cWcOSO9J/WEbWr3pY7Efzp2Lcfv5YK/9zWy8d1E/ZpSv5Oba1/+Hb9lc+LP bFt87I7E/wAabWbiurvEx4nL/pjZzc2bJkn372t85ZXx55/BX85lucC0vPxnTxlnnjm32mOiZqUu LJ2p4TwnVavNWaYbRTfre0bQ99pcH0bT0xb78vmtiIiNojaErMwAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAHnfarF7umzRHaZrLjYrdIen9ocPi8JyTt1xzF4eUw23rCm3R4r6bMy wt6kdTaWLdjswmNoZontsCm0K5XWjopnuDC0dGpqG5bs08/daKV672MjbSaif6oh6Z5f2LtvptRX 0tEvUN3Jfo8f7cYve0eX4zV7B5z20xc/C8eSPuZIRficfXlcPaG7ino08HWIbePpLF2NuiyOyrHK 3fZFSwuovHVfaVF4QK5YWTM9UT0EKry6Ps1Tn4zjn8NZn9nOtLseydObiWW34cf918fWfk+PYANn KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq1WKM+ly4p+/WYeBxTNd6zG0xO0 vobw3FcP0bi2em20Tbmj5Srr418V9sa2Z7qKyzi07MXUylhaU7yjqhLCeiq3ddaFNxFYW7NLNG8t zya+WO6Va9J7FW66mvwidnrXiPY3Ny8RyUn71Jj9Ht3RPjk19HK9pMHj8D1ER3rHN+jqqtTjjNps uOe16zAifXzfTz7kNyndpYazS9qT0mszDdoxrsi6m8LazMq6zDOsq1ZEyrt1WWlXaUCqyq0rbKbi Fdp6PReyFd8uqv8ACsfy83aXrPZHHto89/xX2/SP/dpj6y8vx6EBq5gAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAB5n2q03LfDqqx39y39npmlxbS/TOG5se29tuavzgWzeV4mtui2 O3RRSY2hdVhqO2MvI36iu9lUsrSrvDHn6spnmSiq5jooyV6tq1VV69RC32byTh43h8otMx+r6I+Z aK/g8TwX7bXh9Mid4iW+fjl8n1ICWb57xLBOm4zqse20Tbmj8+qKdnS9q8PhcTw5tumSm0/OHMxz 0Za+uzx3sX1t0Zxurr1ZxvspWiZYWZbsbT0QK7KLrZVZJFaqt5vbezNOTg9J/FaZeJns93wCvLwb T/GJn92uGHldIBowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuAPA67F9H4l qMW20VvO3yRWW97T4fC4rXJHSMtI/WGhVlue3b473K2KzMML4+62tujG9pnozXaOSOVFMnVbmq1t trJRW5E7wwvUxTvCyY6CHOt7moxz6Wh9PxTzYaT61h8x1MbZK/OH0zTf+Fxf6I/htj45vL9WgLMn mvbPFvocGWO9L7fq85p5maw9d7VYvE4JkmPu2if3eW0+PasdFNOnxfF1Y2hlykRsmY+LJ0MZjZXa eq2eyi8oQTO0KLdZWzPRjWu6VaqtHR73g0bcI0sf0Q8Nkq93wqNuFaWP+XDTDDytwBowAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAef9q8HNpcGaI60vtPyl56k9Iew49j8ThGe PwxFv0l4zH2U26fDfTYiyJljvsjf4sm6vJ1hrXjq2MkqLdZEVbgbMx0auGdmzNt6iHN1Ub5af6of TdPG2nxx6Vj+HzaaTm1+nx/iyVj930ysbViPRrj45vL9SAuyc7j1efguqj+jd4/T33rD3HEcPj8O 1GP8WOY/Z4TTT7sKadHhbcsZnaCJ3TPZk6VdrKbTutmP0U2nqgrGOsr8deiuI2X09EqKM1dt3uuG f/jdN/06/wAPE546S9rwud+Gaaf+XH8NMMPK2wGjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABrcRp4nDtRWPPHP8PCYusPoWSvNjtX1iYfPuWaXtX8MzCuvjfw32siu8ptXoxi 0wy5t4YulReqmazu2skbquURWFInddM7VYRGyL291KFnCcfj8e0le/Lbmn8n0N4b2Ur4nHLWmPsY 5e5a5+OXyXugBZmiY3iY9Xz7NjnTa3Ph/BeYj5PoTxftFg8Hjk2iOmWkW/Psrr418V5WrWd2faFc V2jdnEMXWxntupmN7NiYU27iWML6dVMVnddjgVqMsdHr+CW5uE6f4Rt+7yuSsTDv+zWXn0WTHP3L /tK+GHl+O0A1c4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Dn93W56/wDM t/L3z59qp24jn+OS38lnpr4r7ZxHQ2TEstt3PXUrt27K57rr1VT0BjKnJPRbMqMs7QlV2fYvHvrd VknyrEfu9m8f7FZI8fVU85iJewbT45NfQBKo817W4eulzxHaZrL0rje09ItwqbfhtBVs3leai8RD KLw1sduesL606dWFdsZT1jdhNeq6K9DlhCVUU6s4jZnt1YzAhnM71dH2bycmszY/K1d/0c6OzY4R fwuK4p8rTstn6z8k7HrwGzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHz3 Vxvr80/8y38voTwGpj/F5/8AqT/JfjTx/WVeyY6FPspc9dZPVXaOq2WEwIUTVRmjo2rNfLHRI3vZ DJycXtX8dZh7t879nsnhcbwz23tt+r6I2nxyb+gCVBzuPY/E4PqI9K7ui19fTxNBnp60n+Aj5/pJ 3jZu1aOnnltMNussdfXbm+l3ZM9URHREdZVXTuT1Nk7boQiOkJw28PU47/htEp5eivJPLMTCZ9Vv x7mJ3iJ9UqNHk8XR4b+tIXuhxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD weqjbWZ4/wCZP8vePCaz/wDIaiP+Zb+UX408f0r9lOxWOifJhXWjfyYWllPRXYQxnrCrJHRd3YZI 6A1NJecHEsN/S0T+76bE7xE+r5dk93LW3pL6ZpMni6PDf8VIn9m2fjm8s9rgFmQxvHNS0esbMiew PnHLyai9fS0w2aNfUTtrs3+uf5bGPqy068fF227KtSsdFlKqNGMV6myyY6sbdIQI8tlOWOi6Jhhk j3RD0vA8nicMx9etZmHRcT2Zyb6XNT8N9/2dt0T449T2AJVAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAHhdfG3E9TH9cvdPEcXjk4zqI/q3L8aeP6xr2TsxpLOekMK6mFo6qpXSrm OqBixvHSVmzC4OfqK7S9/wAByeLwbTW9K7fo8Fqo6Paeyl+fglI/Da0NcMPK7QC7AAB8313TiOf/ AKk/y2MHWrX4jG3E9R/1Lfyv0/aFNOrHxuU7LI7MMayGTVlHWUXhNe6Z6wIUsb9d1m20q7dkDpez N9tRqKT5xEvRvKez9+Xis1/FSYerb5+OTyf6AFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAB43j9eXjN/jWJ/Z7J5L2mry8Upb8VIF8f6aGOey2eynHvOy7bowrrYSxZSwQJ2YXZ 92N4BoanrEvVexmTm4blr+HJ/aHltRHSXofYm/1Wrp5RaJaYY+X49WA0c4AD51xONuKan/qW/lbp +0MOLRtxbU/9SU4J7KadWPjep2WQrr2WRPRk1TvsndXMpiRCb9FNu0rbTuqvKBscCjfi9PhWZeue V9n434rafTHL1TfPxy+T/QAszAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmv avHtfTZfnV6VxPajHzcNrf8ABeJFs/XnMcr4no18c+6vr2YadkY2YM57sEDLyY37Mo7MMnYGlqO0 vQ+xNfqNVb1tEfs87qZ2rL0/sVX/AHdnt65P7Q0wx8vx6UBo5wAHz/jUbcX1PT78qtO2vaCnJxjP 8Zif2amnnspp04+OjWejKJ6MKdmcMmyJn4m5ZHzEVPMwtJv0VZLbQDqezcb8RzT6Y/7vUPM+ytZt n1OTyiIh6Ztn45N/6AFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABocbxeLw nUR5xXm/Rvq8+OMuDJjntaswEeBxT0bNZ6NatZpNqz3rO0rqsdO3PxlaWEMpY+aqWXkryT0ZT2V3 7A0dVPuy9f7G124NM/iyT/Z4zWT7sw957MYfB4Fp4/FE2/WWmGHldcBowAAeM9qKcvFeb8VIly9P 0nq7ntbTbVYL+tJj93CwT76unR4/jo0nozhhTsy3Y1sWljM9Ce7HyQIm3RRlttVbaWrnt0Sh6n2U x8vD8mSfv3/h3XN4Bi8Lg2nj8Uc36y6TeOPXugCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAPD8RxeBxXUU26Tbmj8+quro+02Lw+I4ssdslNvzhzazvDPbq8d7GW7Dfqz2VzG 0s2qd+iu/Zn5Ksk9BVztX1mI8930zh2LwOHabH+HHWP2fNYp4+vwYvxXiP3fUqxtWIjyjZtj45/L faQFmQADzftfj3w6fJ6WmHmsP23rvaqnNwqLfhvEvIYZ+sV038bo0noy36MK9oZQxrdMyrlnMbMZ QKrS1M07zEestq/RRjr4utwY/wAV4j91p9V18fQdJj8LR4ccfdpEfsuREbREJbuMAAAAAAAAAAAA BAJAAAAEAJEAJQAJQAJEAJQAJQAJEACUJAQlAJEAJQAJQJAAAEAJEAJBAAAJAABAJEJAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwvanDzaPFmjvjv8A tLztJ3h7HjGHx+FainnFeaPnHV4vFbeIU038VbHeGF+kso7Mb9mTdhKnLK3dRm7SIrHhGPxeP6Sv 9cT/AHfSnz72Zx+J7Q45/BWZ/Z9BbZ+OXyfQBZQABzeP4/E4NqI9Ii36S8Ng/wAx9C4jTxOH6ivr jn+Hz3B/mQi/GvjdCnWNlsdI2V07LIlg6USrt2ZzZXMoFV+zPhGLxeOaavpbm/RVltEN72Yx+Jxm b7dKUmf7L5+s9/HtRA2cqRACRACRACRACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCQQCRACRACRCQBCQBCQB ACRACRACRACRACL1i9LVntMbPATTwdRkxT3pea/u+gPE8Xx+DxrPHlaYt+qNfGvjvtXXsi0dOrKk dEXjZg6VMtbP2bMtXUdpEV0/Y2nNxbNf8OP+727xvsXH+N1U/wBEfy9k3nxyb+gCVQAGOWvNivX1 rMPnGGOXNNfOJ2fSZ6w+dZKeHxDPX8N7R+6L8a+L63KdoZ7q6zvEMpnowdKJ6ywmWUyqvIKM0vQ+ x+D6rU55+9aKx+TzWa36vbezmDwODYenW+95/Nphj5L6dQBo5wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEiAAAEoA AAAAAAAAAAAAAEAkEAkRuAkQbgkQAkQAkQAkQAl5T2nx8nEMOT8dNv0l6pwfarHvpcGWPu32/WCr YvK4mOem6b9mGKd4Z3idmFdka0y1c892zfpMtLPaNpEV6D2Kj/Eauf6YeweQ9ieuTVz8K/3evbT4 5NfQBKoAA8FxCvJxrUx/XMvevD8Zry8fz/Haf2RfjTx/6RSOnRMyypHu9kXjowrqVSrvPRnZVl6V kK0775MsUjvadn0nT4ow6bFijtSsVfPuFYvpPGtNTy54mfy6vorXDm8l9pEC7JIgBIgBIgBIgBIg BIgBIhIAgBIhIAgBIgBIIBIAAhIAhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAA AAAAAAAAABAJQkAEAAAAAAAAAAjc3BIjdG4Mkbo5kcwMjdhzHMDPc3V8xzAs3N1fMjmBZubq+Y5g Wbm6vmOYFm5ur5jmBZubq+Y5gWbm6vmOYFm5ur5jmBZubq+Y5gWbm6vmTzAz3N2HMnmBlu5ftFTx OEZJ/DMW/d0t2rxKni8N1FPWkiZ9eS08e7Cy8dGGn6UhZaJljXZGnmc3UT3dPP2cnUT78xCIV6j2 H/8A9c/6f7vXPI+w8bU1U+vL/d63du5NfUiDcVSIAS8b7RV5eOb/AIqRL2TyXtNX/e2KfXH/AHlF +NPH/pr4+2xcxx0hFpY11K7R16KM32ZWz3UaidqSgrc9kcPicWyZJjfw6T+727y3sXh2xarN+K0V h6lvPjj3e0ASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAAkQAkQAkAAAAAAAAAAAAAAA EgAAAAAAAAAAAAAAAAAAAAAgAAABKDcAN0bgkY8xzAyRux5kcwM9zdXNkTcFm6OZXzMeYFvMibKu ZHMC2bo51U2RuC2bom6rc3BZzom6sBZzI52ADPnOdggFnMc6skFnMc6rc3BbznOp3RzAv50c6nml HMC/nOf4qOY5wX85zqOc5wbHOc7X5znBsc6edr85zg2ec52vzpi4NjmY5bROG+/bllVzsNTk5dLl n0pP8BHmMHWNmzt0aum8obm08vVjfrtnxztR0mXHzTvaZdjVRMTLkZo6yiFen9iZ2pqY/wBP93rN 3kPY+/LfPX1rE/u9XzN3HfqzdO6vmTuIZ7m7Hc3Bnu8t7TR/vHBP9E/y9Pu837SV31umn+if5Rfi /j/01MMb1hjkrtKzBG0bMsmOZY11tOYamr6Und0LUc7XT7u3rJPqL8er9lcPhcFpbzyWm39v7O00 +FYvA4Zpsc94xxu227jv1IAgAAAAAAAAABKAAAASgASgBIgBIgBIgBIhIAAAAAAAAAAAAAAAAAAC UACUJAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAg3AEbomQZbo3YzLGbAz3RNlc3YzcFs2YzdVN2 M2Bdzom6nmNwW86JurTAMuY3REJ2BB1ZRVMVBhsbSsiqeUFXLucq3lTygp5TlXcpygp5TlXcpygp 5TlXcqOUFXKjlXcrGYBXysdlswiYBVMdUTCyY6sZBWxlnMMZgGLGZZSwkDdHMiWO4MuY5mEyjcFn N1OdVzHMC3nTzqeY5gX85zqOZPMC+Lqdbk20eb/RKOZr8QybaK/XvtH7iZ9aGlp2luzT3fg19NHS OjbmPcYX67XH1XSZ9XIzRvMuzrK7zLkZYmYnciunb9lZ5dTk+OP+71cXeP8AZnJ/ip2nf3J/l6iL /Fu5L9bMWZczXi6YuIbEWTzKIuyiwLt3nuO25uI4a/hx7/rLuczg8TicvFLbfdpEK6+NPH/phhjo stLGkctUWnoxrrU3j1cnWTzZq1jzl1clo5Zcu8c+txR63iP3Tn6pv4+g4o5cVI9IiGe7CJ2iE7t3 GyN2O6dwSINwSISAlAAlACRAAlAAlACRACRCQAAAAAAAAAASgASISAAAAAAAAAAAAACQAAAAAAAA AAAAAASAAAAAAAAAAAAAAAAIAAAQCAJljuljsCJlhMs9mOwMJYys5TkBVsjZdyHICrZPKt5E8oK4 qmKrOVOwMIqyirPY2Bjyp2ZbAI2NmSARsbMgEbI2ZAMdjZICNkbMkSCNmOzJEgx2YyzljMAwlhKy WEwCuWErJhhMArlhLOWEgxljMpljIImWMyTKJA3N0IBO5vux3NwZbnMx3NwZczT4jf3MdPW27a3a fJOq1XNP2KdIRfi+J2trSYfcjeF+Wm1OicVeWIiN9kai8xjY12ORqultnI1Ecsujq79XP1FovWYI rTgeq+j8QrWZ+3Mx+r2UXeC0WG2Ti2kiN5mL807eUREvbzbaejefHJv62Iv8WUXa0WTFhVtRdlF2 rz9WUXBtc7jR9dqc2T1ttHyhvZMvJitb0jdq6XHNcNenWVN3028U99WRj6Kb02be3Tq18/SN2Lpc 3UdN9nOmZrqKX/DaJ/d0svvTLRzV3jomK6+Pd1vvWJj0ZczT0mXxNJht60hfFnQ4qu3N1cWTEgs3 Tur5k7gz3N2O5uDM3Y7m4MtxBuCQASIASIASAAAAAAACRCQAAAAAAAAEoSAAAAAAAAAAAlAAlCQA AAAAAAAAAAASAAAAAAAAAAAAIASgAAAEJAQJQCNkbMgGOyOVnsAw5TlZ7GwMOVPKy2NgY7GzIBGx skA2AAAAAAAAAAQkBAEghEskAxYzDPZGwK5hjMLJhjMAqmGEwumrCagomFcw2JqqtUFEsLLrV82F o7gqljKyYYTGwMZRKUSCAQAboJnaN5Bjkneu0d5W4ccViIiOzHFWbTzNumP1Zarr8eeRMbxDW1Mx NO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h 2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te pSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7 cvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7 mZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA AAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA hGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J qx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI XRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy RHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX qNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX kaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P ya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC ExKJgBnEpiyvdlEgsizKLKollFgWxLKJVRLKJBbEp3VxLKJBnuMWQJEbpBIAAAJAAAABIAAAAAAA lAJAAAAAAAAAAAAAASAAAAAAAAAAAAAJAAAABAJABAlAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA AAABAJQAAAAgAABAAI2EoBGyJhkgGPKxmqxAKpownHC+YRMdN5BrTj67R3bOn01o7p01Iv71u89o b9a7LfBTfS1vWI2jf12VfQPSW8KX2mas+NC2iv6xMNfJpMnLtEbuuxtMRCtzF55NR5rPps1N/ctP y6uHreE6nXZ4pak48X3rT06fB7fNeI33cbX6mI32R/MWu7XF116aDSRhxbRERs8f499bkyZeeKae kzE2mdon81/tfxDLGOunwbzlzbx08oaHBvZHJlx48mrvaa94pu04y617576rNGLRRM0397JEd/lu 9Dw/S3x4qxffo6mm4NjwUiKY4iI9Ib1dHFY6QIaNabbrYrLfrpJtaK1rMzPZb/s+05IpP59OyLeJ k7eNfRaOc1ue32I7fGXYpi5Y77M8OGMeOKxHSFsU3Y29deZMzirl6dlVvhLatCjJHeYQv1rXnps1 8k9/VsW6qLVmZIi1rzitlvFKRvaZ2h6TSaenC9FFY+3brM+sqeG8Prp4+kZ+lvuxPkr1mqm95nfp DXM459676a2q1dsV7XietvNno78+CJn1cjX6mOeIm0bR33dfRU5NJjidt9t5afjG/V6JZ7I2QMNh nyo2BhsMuVG3wAhMSbbQRAMolnE+iuGUSCyJZRKuGUSCyJZK4llEgyZMYTuCUsYSCQASISAAAlCQ AAAAAAEoASCASAAAAAAAAAAAAlACRACQAAAAAAAAAEgCEoASCAAAAAAAAAAAAAAAAAAAAAAABAAA AAAAAAAISAIAAAAAAQAAACASgAAAQJAQAAhIDHZhln3do7z0WS18mWsajHjmes7pg3dNi5aRMNqO yvDHTpPRaigHZhN4hHRlaVN59JY3zRENLUavaO+yq0iNVlitJ6vNcR1MVi0zO0era1/Ea0rPvbz5 PM5MWp45qvo2GZrhmfrsnpHpHzTCseEcM/2vrr8Q1Eb4qzy44nziPN63HpYiIiI7LNHoqabBTFii IpSNohuVxrKtWMEejPwY9G1FFmHB4mWJn7MdfnIM9JpIx15to5pbUaas/a6rqViI7MxPxqX0UT1r O3wVzpbR2hviP5i03Y5s6a879FNtHljydhExCv8AMTPJXBnRZbz0iG5ptFjwe/l96zctMVamTJtE yTMibu1VrdTzRMR0j0ed4lr64MVpm0RERvMz5NvX62uOJ69XhOKX1HH9bHDtFvNYnfJeOy0Z2ojX 6jjnEq6fRUmccTvN/J9H0eKcOnx45neaxEbubwHgOHg+milI3vP2resu3Wu0JQmITsmISDHZHKz2 JgFc1RMLJhGwK9iIZ7MZgEdgmAEwyiWCdwWRLKJVxKYsC2JTuriWUSDNlEsIlMAySx3SCRCQSIAS AAACRACQAAAAAAASIASAAAAAAAAAAAAAAACRACRACQASIAAAAAAAAAAAAAAAAAAAAAAAAQCUAAAA AAAAAAIAAAAAAAAQAAAAAACBICBICAAEJAQJQCJcLjuS2ny6fPG/LWdpd1o8T0X07SXx/e7wCdJx Wa0jmneHQpxPDMdZmJfNtZm49weZrh0/j4o7VtSZ2+Uw0/8A7o49k92vBLc/ntFohFW9PqGXimOI 6Tu1L8T3eCx6r2t1O3JwvHjifO99v7t/Bwf2l1PXU6rS6eJ8qUm8x+so5TsekzcSjbvs4mt4rzW5 K2mbT0itesy2cHsvbvqtbmyz5xERWP2jd1tJwrTaONsOKtZ8585+cnDrzmn4Rq+IZObUROHD32n7 Vv8A0ej0uhxaXFGPFSK1j0bkY4jyZRVZVXFGUVWbGwKsk8mObekNrSW3pWf1a2aYjHbm7bNnQ1id PW0TvuDdhJEbQABMsLW2R0ZTMQrvfbz2YWzVhpanUxEd0dWkW5c8R5uXxDX1w4pnfr5Q19XxKuOJ 2neXltVqtVxbV/RdJ715+1bypANfiOu1HENV9C0MTfNeesx2rD1PAeBYuE6aKx72W3W9/WVnBuB4 eF4dqRzZbdb5J72l160WVK02ZxCYhOwI23TsnY2BGxsnYBjsiYZsZBjMMZZSgGEolMsQDdG6NwZ7 piVe6YkFsSziVMWZRILolMSriWUSCyJTuwhMSDMRCQSI3SAlACRCQAAEoAEoASAAAAAAAAACUACR ACQAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAABAAAAAAAAAAAAACBKAAAAAAAQ JQAAAhICEbJAYTWJ7wx8KvpC0BV4ceieWGewDHlNmWwCNjZICNhIDmcZredBecdpiY69FXCOLW+i UiZidukulmxxlx2paN4mNng+K4+I8Hy2yaTfl37TXetoCPfRxfp1qi3F48ofKMvtvxak8s6LDv61 rZji9rPaLUf5PC+bfttS0q8q3p9W/wBrRMdpUZuKdN99nzvFqPbTVz7nD8OKs+do2/mW3h4D7Xaq ZnPrtNpqz35aRaYOHY9Zk4pNt9rR+rl6zi+OnS+WN57Rv1lXp/YrNaYtruL6zNPnGO3hxP6O5w/2 f0HDuun09Yv55Le9afznqcOvO4tBreMTHu30unnva0bWt8on+70nDuE4OHYYx4Kbesz3tPrMuhGO IjpDOKrK9YVpsyiGUQnYGOyUgI2SlAIEmwMWMs9kTAMJYzDOYRMArmGErZhhMArlHmzmGMwDE3Ts bAbs4swj5pgFkSziVcM4BZEsolXDKAZwyhjCYBkACQhIAAAAAAAJAAAAAAAAAAAAAAAAAAAShIAA AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ 2Q==`;async function aQe(e){let t=(s,o="application/octet-stream")=>fetch(`data:${o};base64,${s}`).then(a=>a.blob()),n,r;switch(e.config.warmup){case"face":n=await t(KS);break;case"body":case"full":n=await t(XS);break;default:n=null}if(n){let s=await createImageBitmap(n);r=await e.detect(s,e.config),s.close()}return r}async function iQe(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+KS;break;case"full":case"body":n="data:image/jpeg;base64,"+XS;break;default:n=null}let r;typeof Image!="undefined"?r=new Image:Ee.Image&&(r=new Ee.Image),r.onload=async()=>{let s=Zo(r.naturalWidth,r.naturalHeight);if(!s)Ce("Warmup: Canvas not found"),t({});else{let o=s.getContext("2d");o&&o.drawImage(r,0,0);let a=await e.image(s),i=await e.detect(a.tensor,e.config);t(i)}},n?r.src=n:t(null)})}async function lQe(e){let t=s=>Buffer.from(s,"base64"),n;if(e.config.warmup==="face"&&(n=t(KS)),(e.config.warmup==="body"||e.config.warmup==="full")&&(n=t(XS)),!n)return null;let r;if(typeof void 0!="undefined"){let s=(void 0).decodeJpeg(n),o=s.expandDims(0);e.tf.dispose(s),r=await e.detect(o,e.config),e.tf.dispose(o)}else e.config.debug&&Ce("Warmup tfjs-node not loaded");return r}async function pie(e,t){let n=en();if(e.state="warmup",t&&(e.config=os(e.config,t)),!e.config.warmup||e.config.warmup==="none")return{error:"null"};let r;return new Promise(async s=>{typeof createImageBitmap=="function"?r=await aQe(e):typeof Image!="undefined"||Ee.Canvas!==void 0?r=await iQe(e):r=await lQe(e);let o=en();e.config.debug&&Ce("Warmup",e.config.warmup,Math.round(o-n),"ms"),e.emit("warmup"),s(r)})}var m1,Iv,Cv,ZS,fie=class{constructor(t){nt(this,"version");nt(this,"config");nt(this,"result");nt(this,"state");nt(this,"process");nt(this,"tf");nt(this,"env");nt(this,"draw");nt(this,"models");nt(this,"events");nt(this,"faceTriangulation");nt(this,"faceUVMap");nt(this,"performance");E1(this,m1,void 0);E1(this,Iv,void 0);E1(this,Cv,void 0);nt(this,"gl");nt(this,"analyze",(...t)=>{if(!_1(this,Iv))return;let n=this.tf.engine().state.numTensors,r=_1(this,m1);R1(this,m1,n);let s=n-r;s!==0&&Ce(...t,s)});E1(this,ZS,t=>{if(!_1(this,Cv))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof Vt))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});nt(this,"similarity",lie);nt(this,"distance",qS);nt(this,"match",uie);nt(this,"emit",t=>{var n;this.events&&this.events.dispatchEvent&&((n=this.events)==null||n.dispatchEvent(new Event(t)))});K5(),this.env=Ee,Ec.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${qw}/dist/`,Ec.modelBasePath=this.env.browser?"../models/":"file://models/",Ec.backend=this.env.browser?"humangl":"tensorflow",this.version=qR,Object.defineProperty(this,"version",{value:qR}),this.config=JSON.parse(JSON.stringify(Ec)),Object.seal(this.config),t&&(this.config=os(this.config,t)),this.tf=bh,this.state="idle",R1(this,m1,0),R1(this,Iv,!1),R1(this,Cv,!1),this.performance={backend:0,load:0,image:0,frames:0,cached:0,changed:0,total:0,draw:0},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new wv,this.draw={options:wc,canvas:(n,r)=>eie(n,r),face:(n,r,s)=>GO(n,r,s),body:(n,r,s)=>UO(n,r,s),hand:(n,r,s)=>jO(n,r,s),gesture:(n,r,s)=>WO(n,r,s),object:(n,r,s)=>HO(n,r,s),person:(n,r,s)=>Qae(n,r,s),all:(n,r,s)=>tie(n,r,s)},this.result={face:[],body:[],hand:[],gesture:[],object:[],performance:{},timestamp:0,persons:[]},this.process={tensor:null,canvas:null},this.faceTriangulation=GU,this.faceUVMap=UU,this.gl=fr,this.emit("create")}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(Ec)),this.config.backend=t}validate(t){return kT(Ec,t||this.config)}image(t){return rx(t,this.config)}async segmentation(t,n){return qae(t,n,this.config)}enhance(t){return a7(t)}async init(){await jS(this,!0),await this.tf.ready(),vU(this.env)}async load(t){this.state="load";let n=en(),r=Object.values(this.models).filter(a=>a).length;t&&(this.config=os(this.config,t)),Ee.initial&&(this.config.debug&&Ce(`version: ${this.version}`),this.config.debug&&Ce(`tfjs version: ${this.tf.version_core}`),await jS(this)||Ce("error: backend check failed"),await Xw(),this.env.browser&&(this.config.debug&&Ce("configuration:",this.config),this.config.debug&&Ce("tf flags:",this.tf.ENV.flags))),await Xae(this),Ee.initial&&this.config.debug&&Ce("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),Ee.initial=!1,Object.values(this.models).filter(a=>a).length!==r&&(await Zae(this),this.emit("load"));let o=Math.trunc(en()-n);o>(this.performance.load||0)&&(this.performance.load=o)}next(t=this.result){return iie(t)}async warmup(t){return pie(this,t)}async detect(t,n){return this.state="detect",new Promise(async r=>{var x,y,b,A,v,w,k,I,N,T,_,R,S,F,B,W,q,K,J,Q,ee,ue;this.state="config";let s,o;this.config=os(this.config,n),this.state="check";let a=_1(this,ZS).call(this,t);a&&(Ce(a,t),r({error:a}));let i=en();await jS(this),await this.load(),s=en(),this.state="image";let l=rx(t,this.config);if(this.process=l,this.performance.image=Math.trunc(en()-s),this.analyze("Get Image:"),!l.tensor){this.config.debug&&Ce("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.emit("image"),s=en(),this.config.skipFrame=await kU(this.config,l.tensor),this.performance.frames||(this.performance.frames=0),this.performance.cached||(this.performance.cached=0),this.performance.frames++,this.config.skipFrame&&this.performance.cached++,this.performance.changed=Math.trunc(en()-s),this.analyze("Check Changed:");let u=[],c=[],p=[],d=[];this.state="detect:face",this.config.async?(u=this.config.face.enabled?qO(this,l.tensor):[],this.performance.face&&delete this.performance.face):(s=en(),u=this.config.face.enabled?await qO(this,l.tensor):[],o=Math.trunc(en()-s),o>0&&(this.performance.face=o)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(u=await u),this.analyze("Start Body:"),this.state="detect:body";let f=this.config.body.maxDetected===-1?os(this.config,{body:{maxDetected:this.config.face.enabled?1*u.length:1}}):this.config;this.config.async?(((x=this.config.body.modelPath)==null?void 0:x.includes("posenet"))?c=this.config.body.enabled?g7(l.tensor,f):[]:((y=this.config.body.modelPath)==null?void 0:y.includes("blazepose"))?c=this.config.body.enabled?IO(l.tensor,f):[]:((b=this.config.body.modelPath)==null?void 0:b.includes("efficientpose"))?c=this.config.body.enabled?_O(l.tensor,f):[]:((A=this.config.body.modelPath)==null?void 0:A.includes("movenet"))&&(c=this.config.body.enabled?$O(l.tensor,f):[]),this.performance.body&&delete this.performance.body):(s=en(),((v=this.config.body.modelPath)==null?void 0:v.includes("posenet"))?c=this.config.body.enabled?await g7(l.tensor,f):[]:((w=this.config.body.modelPath)==null?void 0:w.includes("blazepose"))?c=this.config.body.enabled?await IO(l.tensor,f):[]:((k=this.config.body.modelPath)==null?void 0:k.includes("efficientpose"))?c=this.config.body.enabled?await _O(l.tensor,f):[]:((I=this.config.body.modelPath)==null?void 0:I.includes("movenet"))&&(c=this.config.body.enabled?await $O(l.tensor,f):[]),o=Math.trunc(en()-s),o>0&&(this.performance.body=o)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?os(this.config,{hand:{maxDetected:this.config.face.enabled?2*u.length:1}}):this.config;this.config.async?(((T=(N=this.config.hand.detector)==null?void 0:N.modelPath)==null?void 0:T.includes("handdetect"))?p=this.config.hand.enabled?v7(l.tensor,h):[]:((R=(_=this.config.hand.detector)==null?void 0:_.modelPath)==null?void 0:R.includes("handtrack"))&&(p=this.config.hand.enabled?C7(l.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(s=en(),((F=(S=this.config.hand.detector)==null?void 0:S.modelPath)==null?void 0:F.includes("handdetect"))?p=this.config.hand.enabled?await v7(l.tensor,h):[]:((W=(B=this.config.hand.detector)==null?void 0:B.modelPath)==null?void 0:W.includes("handtrack"))&&(p=this.config.hand.enabled?await C7(l.tensor,h):[]),o=Math.trunc(en()-s),o>0&&(this.performance.hand=o)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?(((q=this.config.object.modelPath)==null?void 0:q.includes("nanodet"))?d=this.config.object.enabled?OO(l.tensor,this.config):[]:((K=this.config.object.modelPath)==null?void 0:K.includes("centernet"))&&(d=this.config.object.enabled?MO(l.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(s=en(),((J=this.config.object.modelPath)==null?void 0:J.includes("nanodet"))?d=this.config.object.enabled?await OO(l.tensor,this.config):[]:((Q=this.config.object.modelPath)==null?void 0:Q.includes("centernet"))&&(d=this.config.object.enabled?await MO(l.tensor,this.config):[]),o=Math.trunc(en()-s),o>0&&(this.performance.object=o)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([u,c,p,d]=await Promise.all([u,c,p,d])),this.state="detect:gesture";let m=[];this.config.gesture.enabled&&(s=en(),m=[...sie(u),...rie(c),...aie(p),...oie(u)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=Math.trunc(en()-s)),this.performance.total=Math.trunc(en()-i);let g=((ue=(ee=this.process)==null?void 0:ee.tensor)==null?void 0:ue.shape)||[];this.result={face:u,body:c,hand:p,gesture:m,object:d,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),get persons(){return cie(u,c,p,m,g)}},ye(l.tensor),this.emit("detect"),this.state="idle",r(this.result)})}};m1=new WeakMap,Iv=new WeakMap,Cv=new WeakMap,ZS=new WeakMap;return uQe;})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2019 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============================================================================= */ /** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2021 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2021 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** @license See the LICENSE file. */