mirror of https://github.com/vladmandic/human
5038 lines
1.3 MiB
5038 lines
1.3 MiB
|
|
/*
|
|
Human library
|
|
homepage: <https://github.com/vladmandic/human>
|
|
author: <https://github.com/vladmandic>'
|
|
*/
|
|
|
|
var S6=Object.create,ch=Object.defineProperty,T6=Object.getPrototypeOf,E6=Object.prototype.hasOwnProperty,C6=Object.getOwnPropertyNames,R6=Object.getOwnPropertyDescriptor,j2=e=>ch(e,"__esModule",{value:!0}),ct=(e,t)=>()=>(t||(t={exports:{}},e(t.exports,t)),t.exports),G2=(e,t)=>{j2(e);for(var n in t)ch(e,n,{get:t[n],enumerable:!0})},F6=(e,t,n)=>{if(j2(e),t&&typeof t=="object"||typeof t=="function")for(let r of C6(t))!E6.call(e,r)&&r!=="default"&&ch(e,r,{get:()=>t[r],enumerable:!(n=R6(t,r))||n.enumerable});return e},Ve=e=>e&&e.__esModule?e:F6(ch(e!=null?S6(T6(e)):{},"default",{value:e,enumerable:!0}),e),M6=ct(e=>{var t=6;function n(u){let h={strides:[u/16,u/8],anchors:[2,6]},d=[];for(let p=0;p<h.strides.length;p++){let f=h.strides[p],m=Math.floor((u+f-1)/f),A=Math.floor((u+f-1)/f),y=h.anchors[p];for(let g=0;g<m;g++){let w=f*(g+.5);for(let x=0;x<A;x++){let _=f*(x+.5);for(let b=0;b<y;b++)d.push([_,w])}}}return d}var r=u=>{u.startEndTensor.dispose(),u.startPoint.dispose(),u.endPoint.dispose()},a=u=>({startEndTensor:u,startPoint:Me(u,[0,0],[-1,2]),endPoint:Me(u,[0,2],[-1,2])}),s=(u,h)=>{let d=W(u.startPoint,h),p=W(u.endPoint,h),f=jl([d,p],1);return a(f)};function i(u,h,d){let p=Me(u,[0,1],[-1,2]),f=oe(p,h),m=Me(u,[0,3],[-1,2]),A=Te(m,d),y=Te(f,d),g=Te(A,2),w=_e(y,g),x=oe(y,g),_=W(w,d),b=W(x,d);return jl([_,b],1)}function o(u,h){return U(()=>{let d=u.box?u.box:u;return s(d,h).startEndTensor.squeeze()})}var l=class{constructor(u,h){this.blazeFaceModel=u,this.width=h.face.detector.inputSize,this.height=h.face.detector.inputSize,this.anchorsData=n(h.face.detector.inputSize),this.anchors=dr(this.anchorsData),this.inputSize=nn([this.width,this.height]),this.config=h,this.scaleFaces=.8}async getBoundingBoxes(u){if(!u||u.isDisposedInternal||u.shape.length!==4||u.shape[1]<1||u.shape[2]<1)return null;let[h,d,p]=U(()=>{let w=u.resizeBilinear([this.width,this.height]),x=_e(w.div(127.5),1),_=this.blazeFaceModel.predict(x),b;if(Array.isArray(_)){let C=_.sort((O,B)=>O.size-B.size),$=dt([C[0],C[2]],2),D=dt([C[1],C[3]],2);b=dt([D,$],1).squeeze(0)}else b=_.squeeze();let T=i(b,this.anchors,this.inputSize),S=Me(b,[0,0],[-1,1]),N=Qn(S).squeeze();return[b,T,N]}),f=await Ot.nonMaxSuppressionAsync(d,p,this.config.face.detector.maxFaces,this.config.face.detector.iouThreshold,this.config.face.detector.scoreThreshold),m=f.arraySync();f.dispose();let A=m.map(w=>Me(d,[w,0],[1,-1])).map(w=>{let x=w.arraySync();return w.dispose(),x}),y=p.dataSync(),g=[];for(let w=0;w<A.length;w++){let x=m[w],_=y[x];if(_>this.config.face.detector.minConfidence){let b=a(A[w]),T=this.anchorsData[x],S=U(()=>Me(h,[x,t-1],[1,-1]).squeeze().reshape([t,-1]));g.push({box:b,landmarks:S,anchor:T,confidence:_})}}return h.dispose(),d.dispose(),p.dispose(),h.dispose(),{boxes:g,scaleFactor:[u.shape[2]/this.width,u.shape[1]/this.height]}}async estimateFaces(u){let{boxes:h,scaleFactor:d}=await this.getBoundingBoxes(u),p=[];for(let f of h){let m=f.landmarks.arraySync(),A=o(f,d),y=s.arraySync(),g=f.probability.arraySync(),w=f.anchor,[x,_]=d,b=m.map(S=>[(S[0]+w[0])*x,(S[1]+w[1])*_]),T={topLeft:y.slice(0,2),bottomRight:y.slice(2),landmarks:b,probability:g};r(f.box),f.landmarks.dispose(),f.probability.dispose(),A.dispose(),p.push(T)}return p}};async function c(u){let h=await pr(u.face.detector.modelPath,{fromTFHub:u.face.detector.modelPath.includes("tfhub.dev")}),d=new l(h,u);return Ye(`load model: ${u.face.detector.modelPath.match(/\/(.*)\./)[1]}`),d}e.load=c,e.BlazeFaceModel=l,e.disposeBox=r}),$6=ct(e=>{function t(o,l){let c=[o.startPoint[0]*l[0],o.startPoint[1]*l[1]],u=[o.endPoint[0]*l[0],o.endPoint[1]*l[1]];return{startPoint:c,endPoint:u}}e.scaleBoxCoordinates=t;function n(o){return[Math.abs(o.endPoint[0]-o.startPoint[0]),Math.abs(o.endPoint[1]-o.startPoint[1])]}e.getBoxSize=n;function r(o){return[o.startPoint[0]+(o.endPoint[0]-o.startPoint[0])/2,o.startPoint[1]+(o.endPoint[1]-o.startPoint[1])/2]}e.getBoxCenter=r;function a(o,l,c){let u=l.shape[1],h=l.shape[2],d=[[o.startPoint[1]/u,o.startPoint[0]/h,o.endPoint[1]/u,o.endPoint[0]/h]];return Ot.cropAndResize(l,d,[0],c)}e.cutBoxFromImageAndResize=a;function s(o,l=1.5){let c=r(o),u=n(o),h=[l*u[0]/2,l*u[1]/2],d=[c[0]-h[0],c[1]-h[1]],p=[c[0]+h[0],c[1]+h[1]];return{startPoint:d,endPoint:p,landmarks:o.landmarks}}e.enlargeBox=s;function i(o){let l=r(o),c=n(o),u=Math.max(...c)/2,h=[l[0]-u,l[1]-u],d=[l[0]+u,l[1]+u];return{startPoint:h,endPoint:d,landmarks:o.landmarks}}e.squarifyBox=i}),D6=ct(e=>{e.IDENTITY_MATRIX=[[1,0,0],[0,1,0],[0,0,1]];function t(d){return d-2*Math.PI*Math.floor((d+Math.PI)/(2*Math.PI))}e.normalizeRadians=t;function n(d,p){let f=Math.PI/2-Math.atan2(-(p[1]-d[1]),p[0]-d[0]);return t(f)}e.computeRotation=n;function r(d){return d*180/Math.PI}e.radToDegrees=r;function a(d,p){return[[1,0,d],[0,1,p],[0,0,1]]}function s(d,p){let f=0;for(let m=0;m<d.length;m++)f+=d[m]*p[m];return f}e.dot=s;function i(d,p){let f=[];for(let m=0;m<d.length;m++)f.push(d[m][p]);return f}e.getColumnFrom2DArr=i;function o(d,p){let f=[],m=d.length;for(let A=0;A<m;A++){f.push([]);for(let y=0;y<m;y++)f[A].push(s(d[A],i(p,y)))}return f}function l(d,p){let f=Math.cos(d),m=Math.sin(d),A=[[f,-m,0],[m,f,0],[0,0,1]],y=a(p[0],p[1]),g=o(y,A),w=a(-p[0],-p[1]);return o(g,w)}e.buildRotationMatrix=l;function c(d){let p=[[d[0][0],d[1][0]],[d[0][1],d[1][1]]],f=[d[0][2],d[1][2]],m=[-s(p[0],f),-s(p[1],f)];return[p[0].concat(m[0]),p[1].concat(m[1]),[0,0,1]]}e.invertTransformMatrix=c;function u(d,p){return[s(d,p[0]),s(d,p[1])]}e.rotatePoint=u;function h(d,p){return Math.sqrt((d[0]-p[0])**2+(d[1]-p[1])**2)}e.xyDistanceBetweenPoints=h}),q2=ct(e=>{var t={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]},n=[{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]}],r=[[.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]],a=[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],s=[0,1,36,0,36,17,1,2,41,1,41,36,2,3,31,2,31,41,3,4,48,3,48,31,4,5,48,5,6,48,6,7,59,6,59,48,7,8,58,7,58,59,8,9,56,8,56,57,8,57,58,9,10,55,9,55,56,10,11,54,10,54,55,11,12,54,12,13,54,13,14,35,13,35,54,14,15,46,14,46,35,15,16,45,15,45,46,16,26,45,17,36,18,18,37,19,18,36,37,19,38,20,19,37,38,20,39,21,20,38,39,21,39,27,22,42,23,22,27,42,23,43,24,23,42,43,24,44,25,24,43,44,25,45,26,25,44,45,27,39,28,27,28,42,28,39,29,28,29,42,29,31,30,29,30,35,29,40,31,29,35,47,29,39,40,29,47,42,30,31,32,30,32,33,30,33,34,30,34,35,31,50,32,31,40,41,31,48,49,31,49,50,32,51,33,32,50,51,33,51,34,34,52,35,34,51,52,35,46,47,35,52,53,35,53,54,36,41,37,37,40,38,37,41,40,38,40,39,42,47,43,43,47,44,44,46,45,44,47,46,48,60,49,48,59,60,49,61,50,49,60,61,50,62,51,50,61,62,51,62,52,52,63,53,52,62,63,53,64,54,53,63,64,54,64,55,55,65,56,55,64,65,56,66,57,56,65,66,57,66,58,58,67,59,58,66,67,59,67,60,60,67,61,61,66,62,61,67,66,62,66,63,63,65,64,63,66,65,21,27,22],i=[0,8,7,7,8,1,2,10,9,9,10,3,17,0,18,18,0,7,18,7,19,19,7,1,19,1,11,19,11,20,21,3,22,21,9,3,20,9,21,20,2,9,20,11,2,23,17,18,25,21,22,24,19,20,24,18,19,24,20,21,24,23,18,24,21,25,11,12,4,11,4,13,1,12,11,11,13,2,12,14,4,4,14,13,14,5,15,14,15,6,12,5,14,14,6,13,8,12,1,2,13,10,8,26,12,10,13,27,26,5,12,13,6,27,0,26,8,10,27,3,5,32,16,16,32,6,5,30,32,6,32,31,26,30,5,27,6,31,0,28,26,3,27,29,17,28,0,3,29,22,23,28,17,22,29,25,28,30,26,27,31,29],o=[0,4,1,2,4,3,4,5,6],l=[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],c=[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],u=[33,133,362,263,1,78,308];e.MESH_ANNOTATIONS=t,e.MESH_TO_IRIS_INDICES_MAP=n,e.TRI468=a,e.TRI68=s,e.TRI33=i,e.TRI7=o,e.UV468=r,e.UV68=l.map(h=>r[h]),e.UV33=c.map(h=>r[h]),e.UV7=u.map(h=>r[h])}),O6=ct(e=>{var t=Ve($6()),n=Ve(D6()),r=Ve(q2()),a=468,s=13,i=[s,r.MESH_ANNOTATIONS.midwayBetweenEyes[0]],o=3,l=2,c=[o,l],u=r.MESH_ANNOTATIONS.leftEyeLower0,h=[u[0],u[u.length-1]],d=r.MESH_ANNOTATIONS.rightEyeLower0,p=[d[0],d[d.length-1]],f=3,m=4,A=71,y=76;function g(x,_,b,T){for(let S=0;S<r.MESH_TO_IRIS_INDICES_MAP.length;S++){let{key:N,indices:C}=r.MESH_TO_IRIS_INDICES_MAP[S],$=r.MESH_ANNOTATIONS[`${b}${N}`];if(T==null||T.includes(N))for(let D=0;D<C.length;D++){let O=C[D];x[$[D]]=[_[O][0],_[O][1],(_[O][2]+x[$[D]][2])/2]}}}var w=class{constructor(x,_,b,T){this.storedBoxes=[],this.runsWithoutFaceDetector=0,this.boundingBoxDetector=x,this.meshDetector=_,this.irisModel=b,this.meshWidth=T.face.mesh.inputSize,this.meshHeight=T.face.mesh.inputSize,this.irisSize=T.face.iris.inputSize,this.irisEnlarge=2.3,this.skipped=0,this.detectedFaces=0}transformRawCoords(x,_,b,T){let S=t.getBoxSize({startPoint:_.startPoint,endPoint:_.endPoint}),N=[S[0]/this.meshWidth,S[1]/this.meshHeight],C=x.map(H=>[N[0]*(H[0]-this.meshWidth/2),N[1]*(H[1]-this.meshHeight/2),H[2]]),$=b!==0?n.buildRotationMatrix(b,[0,0]):n.IDENTITY_MATRIX,D=b!==0?C.map(H=>[...n.rotatePoint(H,$),H[2]]):C,O=b!==0?n.invertTransformMatrix(T):n.IDENTITY_MATRIX,B=[...t.getBoxCenter({startPoint:_.startPoint,endPoint:_.endPoint}),1];return D.map(H=>[H[0]+n.dot(B,O[0]),H[1]+n.dot(B,O[1]),H[2]])}getLeftToRightEyeDepthDifference(x){let _=x[h[0]][2],b=x[p[0]][2];return _-b}getEyeBox(x,_,b,T,S=!1){let N=t.squarifyBox(t.enlargeBox(this.calculateLandmarksBoundingBox([x[b],x[T]]),this.irisEnlarge)),C=t.getBoxSize(N),$=Ot.cropAndResize(_,[[N.startPoint[1]/this.meshHeight,N.startPoint[0]/this.meshWidth,N.endPoint[1]/this.meshHeight,N.endPoint[0]/this.meshWidth]],[0],[this.irisSize,this.irisSize]);return S&&($=Ot.flipLeftRight($)),{box:N,boxSize:C,crop:$}}getEyeCoords(x,_,b,T=!1){let S=[];for(let N=0;N<y;N++){let C=x[N*3],$=x[N*3+1],D=x[N*3+2];S.push([(T?1-C/this.irisSize:C/this.irisSize)*b[0]+_.startPoint[0],$/this.irisSize*b[1]+_.startPoint[1],D])}return{rawCoords:S,iris:S.slice(A)}}getAdjustedIrisCoords(x,_,b){let T=x[r.MESH_ANNOTATIONS[`${b}EyeUpper0`][f]][2],S=x[r.MESH_ANNOTATIONS[`${b}EyeLower0`][m]][2],N=(T+S)/2;return _.map((C,$)=>{let D=N;return $===2?D=T:$===4&&(D=S),[C[0],C[1],D]})}async predict(x,_){let b=!1,T;if((this.skipped===0||this.skipped>_.face.detector.skipFrames||!_.face.mesh.enabled||!_.videoOptimized)&&(T=await this.boundingBoxDetector.getBoundingBoxes(x),this.skipped=0),_.videoOptimized&&this.skipped++,T&&T.boxes&&(!_.face.mesh.enabled||T.boxes.length!==this.detectedFaces&&this.detectedFaces!==_.face.detector.maxFaces)){this.storedBoxes=[],this.detectedFaces=0;for(let N of T.boxes)this.storedBoxes.push({startPoint:N.box.startPoint.dataSync(),endPoint:N.box.endPoint.dataSync(),landmarks:N.landmarks,confidence:N.confidence});this.storedBoxes.length>0&&(b=!0)}if(b){if(!T||!T.boxes||T.boxes.length===0)return this.storedBoxes=[],this.detectedFaces=0,null;for(let N=0;N<this.storedBoxes.length;N++){let C=t.scaleBoxCoordinates({startPoint:this.storedBoxes[N].startPoint,endPoint:this.storedBoxes[N].endPoint},T.scaleFactor),$=t.enlargeBox(C),D=t.squarifyBox($),O=this.storedBoxes[N].landmarks.arraySync(),B=this.storedBoxes[N].confidence;this.storedBoxes[N]={...D,confidence:B,landmarks:O}}this.runsWithoutFaceDetector=0}T&&T.boxes&&T.boxes.forEach(N=>{N.box.startPoint.dispose(),N.box.endPoint.dispose(),N.landmarks.dispose()});let S=U(()=>this.storedBoxes.map((N,C)=>{let $,D=0,O;if(_.face.detector.rotation){let[ae,de]=N.landmarks.length>=a?i:c;D=n.computeRotation(N.landmarks[ae],N.landmarks[de]);let ue=t.getBoxCenter({startPoint:N.startPoint,endPoint:N.endPoint}),me=[ue[0]/x.shape[2],ue[1]/x.shape[1]],ye=Ot.rotateWithOffset(x,D,0,me);O=n.buildRotationMatrix(-D,ue),$=t.cutBoxFromImageAndResize({startPoint:N.startPoint,endPoint:N.endPoint},ye,[this.meshHeight,this.meshWidth]).div(255)}else{O=n.IDENTITY_MATRIX;let ae=x.clone();$=t.cutBoxFromImageAndResize({startPoint:N.startPoint,endPoint:N.endPoint},ae,[this.meshHeight,this.meshWidth]).div(255)}if(!_.face.mesh.enabled)return{coords:null,box:N,faceConfidence:null,confidence:N.confidence,image:$};let[,B,H]=this.meshDetector.predict($),X=B.dataSync()[0];if(X<_.face.detector.minConfidence)return null;let Z=K(H,[-1,3]).arraySync();if(_.face.iris.enabled){let{box:ae,boxSize:de,crop:ue}=this.getEyeBox(Z,$,h[0],h[1],!0),{box:me,boxSize:ye,crop:be}=this.getEyeBox(Z,$,p[0],p[1]),Ne=this.irisModel.predict(dt([ue,be])).dataSync(),Re=Ne.slice(0,y*3),{rawCoords:Oe,iris:qe}=this.getEyeCoords(Re,ae,de,!0),et=Ne.slice(y*3),{rawCoords:We,iris:it}=this.getEyeCoords(et,me,ye),Ue=this.getLeftToRightEyeDepthDifference(Z);Math.abs(Ue)<30?(g(Z,Oe,"left"),g(Z,We,"right")):Ue<1?g(Z,Oe,"left",["EyeUpper0","EyeLower0"]):g(Z,We,"right",["EyeUpper0","EyeLower0"]);let ot=this.getAdjustedIrisCoords(Z,qe,"left"),ut=this.getAdjustedIrisCoords(Z,it,"right");Z=Z.concat(ot).concat(ut)}let ee=this.transformRawCoords(Z,N,D,O),Y=t.enlargeBox(this.calculateLandmarksBoundingBox(ee)),ie=t.squarifyBox(Y),re=dr(ee),ne={coords:re,box:Y,faceConfidence:X,confidence:N.confidence,image:$};return _.face.mesh.returnRawData&&(ne.rawCoords=Z),this.storedBoxes[C]={...ie,landmarks:re.arraySync(),confidence:N.confidence,faceConfidence:X},ne}));return S=S.filter(N=>N!==null),this.detectedFaces=S.length,S}calculateLandmarksBoundingBox(x){let _=x.map(N=>N[0]),b=x.map(N=>N[1]),T=[Math.min(..._),Math.min(...b)],S=[Math.max(..._),Math.max(...b)];return{startPoint:T,endPoint:S,landmarks:x}}};e.Pipeline=w}),z6=ct(e=>{var t=Ve(M6()),n=Ve(O6()),r=Ve(q2()),a=class{constructor(o,l,c,u){this.facePipeline=new n.Pipeline(o,l,c,u),this.config=u}async estimateFaces(o,l){let c=await this.facePipeline.predict(o,l),u=[];for(let h of c||[]){if(h.isDisposedInternal)continue;let d=h.coords?h.coords.arraySync():null,p=h.rawCoords,f={};if(d&&d.length>0)for(let y of Object.keys(r.MESH_ANNOTATIONS))f[y]=r.MESH_ANNOTATIONS[y].map(g=>d[g]);let m=l.face.mesh.returnRawData&&h.box?{topLeft:h.box.startPoint,bottomRight:h.box.endPoint}:null,A=h.box?[Math.max(0,h.box.startPoint[0]),Math.max(0,h.box.startPoint[1]),Math.min(o.shape[2],h.box.endPoint[0])-h.box.startPoint[0],Math.min(o.shape[1],h.box.endPoint[1])-h.box.startPoint[1]]:0;u.push({confidence:h.confidence||0,box:A,mesh:d,boxRaw:m,meshRaw:p,annotations:f,image:h.image?Tr(h.image):null}),h.coords&&h.coords.dispose(),h.image&&h.image.dispose()}return u}},s=[null,null,null];async function i(o){s=await Promise.all([!s[0]&&o.face.enabled?t.load(o):null,!s[1]&&o.face.mesh.enabled?pr(o.face.mesh.modelPath,{fromTFHub:o.face.mesh.modelPath.includes("tfhub.dev")}):null,!s[2]&&o.face.iris.enabled?pr(o.face.iris.modelPath,{fromTFHub:o.face.iris.modelPath.includes("tfhub.dev")}):null]);let l=new a(s[0],s[1],s[2],o);return o.face.mesh.enabled&&Ye(`load model: ${o.face.mesh.modelPath.match(/\/(.*)\./)[1]}`),o.face.iris.enabled&&Ye(`load model: ${o.face.iris.modelPath.match(/\/(.*)\./)[1]}`),l}e.load=i,e.MediaPipeFaceMesh=a,e.triangulation=r.TRI468}),Gl=ct(e=>{var t={};function n(r,a){if(!a||!a.kernels)return;let s=5,i=a.kernels.filter(u=>u.kernelTimeMs>0).reduce((u,h)=>u+=h.kernelTimeMs,0),o=a.kernels.map((u,h)=>(u.id=h,u)).filter(u=>u.kernelTimeMs>0).sort((u,h)=>h.kernelTimeMs-u.kernelTimeMs),l=a.kernels.map((u,h)=>(u.id=h,u)).filter(u=>u.totalBytesSnapshot>0).sort((u,h)=>h.totalBytesSnapshot-u.totalBytesSnapshot);o.length>s&&(o.length=s),l.length>s&&(l.length=s);let c={newBytes:a.newBytes,newTensors:a.newTensors,peakBytes:a.peakBytes,numKernelOps:a.kernels.length,timeKernelOps:i,slowestKernelOps:o,largestKernelOps:l};t[r]=c,Ye("Human profiler",r,c)}e.run=n}),P6=ct(e=>{var t=Ve(Gl()),n={},r={age:0},a=Number.MAX_SAFE_INTEGER;async function s(o){return n.age||(n.age=await pr(o.face.age.modelPath),Ye(`load model: ${o.face.age.modelPath.match(/\/(.*)\./)[1]}`)),n.age}async function i(o,l){return n.age?a<l.face.age.skipFrames&&l.videoOptimized&&r.age&&r.age>0?(a++,r):(l.videoOptimized?a=0:a=Number.MAX_SAFE_INTEGER,new Promise(async c=>{let u=Ot.resizeBilinear(o,[l.face.age.inputSize,l.face.age.inputSize],!1),h=W(u,[255]);$e(u);let d,p={};if(!l.profile)l.face.age.enabled&&(d=await n.age.predict(h));else{let f=l.face.age.enabled?await ql(()=>n.age.predict(h)):{};d=f.result.clone(),f.result.dispose(),t.run("age",f)}if(h.dispose(),d){let f=d.dataSync();p.age=Math.trunc(10*f[0])/10}d.dispose(),r=p,c(p)})):null}e.predict=i,e.load=s}),L6=ct(e=>{var t=Ve(Gl()),n={},r={gender:""},a=Number.MAX_SAFE_INTEGER,s=!1,i=[.2989,.587,.114];async function o(c){return n.gender||(n.gender=await pr(c.face.gender.modelPath),s=n.gender.inputs[0].shape[3]===1,Ye(`load model: ${c.face.gender.modelPath.match(/\/(.*)\./)[1]}`)),n.gender}async function l(c,u){return n.gender?a<u.face.gender.skipFrames&&u.videoOptimized&&r.gender!==""?(a++,r):(u.videoOptimized?a=0:a=Number.MAX_SAFE_INTEGER,new Promise(async h=>{let d=Ot.resizeBilinear(c,[u.face.gender.inputSize,u.face.gender.inputSize],!1),p;s?p=U(()=>{let[A,y,g]=sn(d,3,3),w=W(A,i[0]),x=W(y,i[1]),_=W(g,i[2]);return hh([w,x,_]).sub(.5).mul(2)}):p=W(d,[255]),$e(d);let f,m={};if(!u.profile)u.face.gender.enabled&&(f=await n.gender.predict(p));else{let A=u.face.gender.enabled?await ql(()=>n.gender.predict(p)):{};f=A.result.clone(),A.result.dispose(),t.run("gender",A)}if(p.dispose(),f){let A=f.dataSync();if(s){let y=Math.trunc(100*Math.abs(A[0]-A[1]))/100;y>u.face.gender.minConfidence&&(m.gender=A[0]>A[1]?"female":"male",m.confidence=y)}else{let y=Math.trunc(200*Math.abs(A[0]-.5))/100;y>u.face.gender.minConfidence&&(m.gender=A[0]<=.5?"female":"male",m.confidence=Math.min(.99,y))}}f.dispose(),r=m,h(m)})):null}e.predict=l,e.load=o}),W6=ct(e=>{var t=Ve(Gl()),n=["angry","disgust","fear","happy","sad","surprise","neutral"],r={},a=[],s=Number.MAX_SAFE_INTEGER,i=[.2989,.587,.114],o=1;async function l(u){return r.emotion||(r.emotion=await pr(u.face.emotion.modelPath),Ye(`load model: ${u.face.emotion.modelPath.match(/\/(.*)\./)[1]}`)),r.emotion}async function c(u,h){return r.emotion?s<h.face.emotion.skipFrames&&h.videoOptimized&&a.length>0?(s++,a):(h.videoOptimized?s=0:s=Number.MAX_SAFE_INTEGER,new Promise(async d=>{let p=Ot.resizeBilinear(u,[h.face.emotion.inputSize,h.face.emotion.inputSize],!1),[f,m,A]=sn(p,3,3);p.dispose();let y=W(f,i[0]),g=W(m,i[1]),w=W(A,i[2]);f.dispose(),m.dispose(),A.dispose();let x=hh([y,g,w]);y.dispose(),g.dispose(),w.dispose();let _=U(()=>x.sub(.5).mul(2));x.dispose();let b=[];if(h.face.emotion.enabled){let T;if(h.profile){let S=await ql(()=>r.emotion.predict(_));T=S.result.dataSync(),S.result.dispose(),t.run("emotion",S)}else{let S=await r.emotion.predict(_);T=S.dataSync(),$e(S)}for(let S=0;S<T.length;S++)o*T[S]>h.face.emotion.minConfidence&&b.push({score:Math.min(.99,Math.trunc(100*o*T[S])/100),emotion:n[S]});b.sort((S,N)=>N.score-S.score)}_.dispose(),a=b,d(b)})):null}e.predict=c,e.load=l}),B6=ct(e=>{var t=Ve(Gl()),n={};async function r(i){return n.embedding||(n.embedding=await pr(i.face.embedding.modelPath),Ye(`load model: ${i.face.embedding.modelPath.match(/\/(.*)\./)[1]}`)),n.embedding}function a(i,o){if((i==null?void 0:i.length)!==(o==null?void 0:o.length))return 0;let l=2,c=10*i.map((u,h)=>u-o[h]).reduce((u,h)=>u+h**l,0)**(1/l);return Math.trunc(1e3*(1-c))/1e3}async function s(i,o){return n.embedding?new Promise(async l=>{let c=Ot.resizeBilinear(i,[o.face.embedding.inputSize,o.face.embedding.inputSize],!1),u=[];if(o.face.embedding.enabled)if(o.profile){let h=await ql(()=>n.embedding.predict({img_inputs:c}));u=[...h.result.dataSync()],h.result.dispose(),t.run("emotion",h)}else{let h=await n.embedding.predict({img_inputs:c});u=[...h.dataSync()],$e(h)}c.dispose(),l(u)}):null}e.predict=s,e.simmilarity=a,e.load=r}),V6=ct(e=>{var t=[-123.15,-115.9,-103.06];function n(s){let[i,o,l,c]=s;return{offsets:i,heatmap:o,displacementFwd:l,displacementBwd:c}}function r(s){let[i,o,l,c]=s;return{offsets:l,heatmap:c,displacementFwd:i,displacementBwd:o}}var a=class{constructor(s){this.model=s}predict(s,i){return U(()=>{let o=(i.body.modelType==="ResNet"?s.toFloat().add(t):s.toFloat().div(127.5).sub(1)).expandDims(0),l=this.model.predict(o).map(u=>u.squeeze([0])),c=i.body.modelType==="ResNet"?r(l):n(l);return{heatmapScores:c.heatmap.sigmoid(),offsets:c.offsets,displacementFwd:c.displacementFwd,displacementBwd:c.displacementBwd}})}dispose(){this.model.dispose()}};e.BaseModel=a}),U6=ct(e=>{function t(r){return Math.floor(r/2)}var n=class{constructor(r,a){this.priorityQueue=new Array(r),this.numberOfElements=-1,this.getElementValue=a}enqueue(r){this.priorityQueue[++this.numberOfElements]=r,this.swim(this.numberOfElements)}dequeue(){let r=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,r}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(r){for(;r>0&&this.less(t(r),r);)this.exchange(r,t(r)),r=t(r)}sink(r){for(;2*r<=this.numberOfElements;){let a=2*r;if(a<this.numberOfElements&&this.less(a,a+1)&&a++,!this.less(r,a))break;this.exchange(r,a),r=a}}getValueAt(r){return this.getElementValue(this.priorityQueue[r])}less(r,a){return this.getValueAt(r)<this.getValueAt(a)}exchange(r,a){let s=this.priorityQueue[r];this.priorityQueue[r]=this.priorityQueue[a],this.priorityQueue[a]=s}};e.MaxHeap=n}),H6=ct(e=>{var t=Ve(U6());function n(a,s,i,o,l,c){let[u,h]=c.shape,d=!0,p=Math.max(i-l,0),f=Math.min(i+l+1,u);for(let m=p;m<f;++m){let A=Math.max(o-l,0),y=Math.min(o+l+1,h);for(let g=A;g<y;++g)if(c.get(m,g,a)>s){d=!1;break}if(!d)break}return d}function r(a,s,i){let[o,l,c]=i.shape,u=new t.MaxHeap(o*l*c,({score:h})=>h);for(let h=0;h<o;++h)for(let d=0;d<l;++d)for(let p=0;p<c;++p){let f=i.get(h,d,p);f<a||n(p,f,h,d,s,i)&&u.enqueue({score:f,part:{heatmapY:h,heatmapX:d,id:p}})}return u}e.buildPartWithScoreQueue=r}),Xl=ct(e=>{e.partNames=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],e.NUM_KEYPOINTS=e.partNames.length,e.partIds=e.partNames.reduce((n,r,a)=>(n[r]=a,n),{});var t=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]];e.connectedPartIndices=t.map(([n,r])=>[e.partIds[n],e.partIds[r]]),e.poseChain=[["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"]],e.partChannels=["left_face","right_face","right_upper_leg_front","right_lower_leg_back","right_upper_leg_back","left_lower_leg_front","left_upper_leg_front","left_upper_leg_back","left_lower_leg_back","right_feet","right_lower_leg_front","left_feet","torso_front","torso_back","right_upper_arm_front","right_upper_arm_back","right_lower_arm_back","left_lower_arm_front","left_upper_arm_front","left_upper_arm_back","left_lower_arm_back","right_hand","right_lower_arm_front","left_hand"]}),X2=ct(e=>{var t=Ve(Xl());function n(c,u,h,d){return{y:d.get(c,u,h),x:d.get(c,u,h+t.NUM_KEYPOINTS)}}e.getOffsetPoint=n;function r(c,u,h){let{heatmapY:d,heatmapX:p,id:f}=c,{y:m,x:A}=n(d,p,f,h);return{x:c.heatmapX*u+A,y:c.heatmapY*u+m}}e.getImageCoords=r;function a(c,u){let h=new Array(u);for(let d=0;d<u;d++)h[d]=c;return h}e.fillArray=a;function s(c,u,h){return c<u?u:c>h?h:c}e.clamp=s;function i(c,u,h,d){let p=h-c,f=d-u;return p*p+f*f}e.squaredDistance=i;function o(c,u){return{x:c.x+u.x,y:c.y+u.y}}e.addVectors=o;function l(c,u,h){return{y:s(c.y,u,h),x:s(c.x,u,h)}}e.clampVector=l}),j6=ct(e=>{var t=Ve(Xl());function n(l,c){let u=c.shape[0],h=new Float32Array(u);for(let d=0;d<u;d++){let p=c.get(d,0),f=c.get(d,1);h[d]=l.get(p,f,d)}return h}e.getPointsConfidence=n;function r(l,c,u,h){return{y:h.get(l,c,u),x:h.get(l,c,u+t.NUM_KEYPOINTS)}}function a(l,c){let u=[];for(let h=0;h<t.NUM_KEYPOINTS;h++){let d=l.get(h,0).valueOf(),p=l.get(h,1).valueOf(),{x:f,y:m}=r(d,p,h,c);u.push(m),u.push(f)}return dr(u,[t.NUM_KEYPOINTS,2])}e.getOffsetVectors=a;function s(l,c,u){return U(()=>l.toTensor().mul(Ee(c,"int32")).toFloat().add(a(l,u)))}e.getOffsetPoints=s;function i(l,c){return U(()=>{let u=l.div(Ee(c,"int32"));return l.sub(u.mul(Ee(c,"int32")))})}function o(l){let[c,u,h]=l.shape;return U(()=>{let d=l.reshape([c*u,h]).argMax(0),p=d.div(Ee(u,"int32")).expandDims(1),f=i(d,u).expandDims(1);return dt([p,f],1)})}e.argmax2d=o}),K2=ct(e=>{var t=Ve(Xl()),n=Ve(X2()),r=Ve(j6()),a=t.poseChain.map(([d,p])=>[t.partIds[d],t.partIds[p]]),s=a.map(([,d])=>d),i=a.map(([d])=>d);function o(d,p,f){let m=f.shape[2]/2;return{y:f.get(p.y,p.x,d),x:f.get(p.y,p.x,m+d)}}function l(d,p,f,m){return{y:n.clamp(Math.round(d.y/p),0,f-1),x:n.clamp(Math.round(d.x/p),0,m-1)}}function c(d,p,f,m,A,y,g,w=2){let[x,_]=m.shape,b=l(p.position,y,x,_),T=o(d,b,g),S=n.addVectors(p.position,T);for(let $=0;$<w;$++){let D=l(S,y,x,_),O=n.getOffsetPoint(D.y,D.x,f,A);S=n.addVectors({x:D.x*y,y:D.y*y},{x:O.x,y:O.y})}let N=l(S,y,x,_),C=m.get(N.y,N.x,f);return{position:S,part:t.partNames[f],score:C}}function u(d,p,f,m,A,y){let g=p.shape[2],w=s.length,x=new Array(g),{part:_,score:b}=d,T=n.getImageCoords(_,m,f);x[_.id]={score:b,part:t.partNames[_.id],position:T};for(let S=w-1;S>=0;--S){let N=s[S],C=i[S];x[N]&&!x[C]&&(x[C]=c(S,x[N],C,p,f,m,y))}for(let S=0;S<w;++S){let N=i[S],C=s[S];x[N]&&!x[C]&&(x[C]=c(S,x[N],C,p,f,m,A))}return x}e.decodePose=u;async function h(d,p,f){let m=0,A=r.argmax2d(d),y=await Promise.all([d.buffer(),p.buffer(),A.buffer()]),g=y[0],w=y[1],x=y[2],_=r.getOffsetPoints(x,f.body.outputStride,w),b=await _.buffer(),T=Array.from(r.getPointsConfidence(g,x)).map((N,C)=>(m+=N,{position:{y:b.get(C,0),x:b.get(C,1)},part:t.partNames[C],score:N})),S=T.filter(N=>N.score>f.body.scoreThreshold);return A.dispose(),_.dispose(),{keypoints:S,score:m/T.length}}e.decodeSinglePose=h}),G6=ct(e=>{var t=Ve(H6()),n=Ve(K2()),r=Ve(X2()),a=1;function s(l,c,{x:u,y:h},d){return l.some(({keypoints:p})=>{let f=p[d].position;return r.squaredDistance(h,u,f.y,f.x)<=c})}function i(l,c,u){return u.reduce((h,{position:d,score:p},f)=>(s(l,c,d,f)||(h+=p),h),0)/u.length}function o(l,c,u,h,d){let p=[],f=t.buildPartWithScoreQueue(d.body.scoreThreshold,a,l),m=d.body.nmsRadius^2;for(;p.length<d.body.maxDetections&&!f.empty();){let A=f.dequeue(),y=r.getImageCoords(A.part,d.body.outputStride,c);if(s(p,m,y,A.part.id))continue;let g=n.decodePose(A,l,c,d.body.outputStride,u,h),w=i(p,m,g);w>d.body.scoreThreshold&&p.push({keypoints:g,score:w})}return p}e.decodeMultiplePoses=o}),Z2=ct(e=>{var t=Ve(Xl());function n(d,p,f){return d<f||p<f}function r(d,p){return t.connectedPartIndices.reduce((f,[m,A])=>(n(d[m].score,d[A].score,p)||f.push([d[m],d[A]]),f),[])}e.getAdjacentKeyPoints=r;var{NEGATIVE_INFINITY:a,POSITIVE_INFINITY:s}=Number;function i(d){return d.reduce(({maxX:p,maxY:f,minX:m,minY:A},{position:{x:y,y:g}})=>({maxX:Math.max(p,y),maxY:Math.max(f,g),minX:Math.min(m,y),minY:Math.min(A,g)}),{maxX:a,maxY:a,minX:s,minY:s})}e.getBoundingBox=i;function o(d){let{minX:p,minY:f,maxX:m,maxY:A}=i(d);return[{x:p,y:f},{x:m,y:f},{x:m,y:A},{x:p,y:A}]}e.getBoundingBoxPoints=o;async function l(d){return Promise.all(d.map(p=>p.buffer()))}e.toTensorBuffers3D=l;function c(d,p,f){return{score:d.score,keypoints:d.keypoints.map(({score:m,part:A,position:y})=>({score:m,part:A,position:{x:y.x*f,y:y.y*p}}))}}e.scalePose=c;function u(d,[p,f]){let m=d.squeeze(0),A=m.resizeBilinear([p,f]);return m.dispose(),A}e.resizeTo=u;function h(d,[p,f],[m,A]){return d.map(y=>c(y,p/m,f/A))}e.scaleAndFlipPoses=h}),q6=ct(e=>{var t=Ve(V6()),n=Ve(G6()),r=Ve(K2()),a=Ve(Z2());async function s(c,u,h){return new Promise(async d=>{let p=c.shape[1],f=c.shape[2],m=await a.toTensorBuffers3D([u.heatmapScores,u.offsets,u.displacementFwd,u.displacementBwd]),A=m[0],y=m[1],g=m[2],w=m[3],x=await n.decodeMultiplePoses(A,y,g,w,h),_=a.scaleAndFlipPoses(x,[p,f],[h.body.inputSize,h.body.inputSize]);d(_)})}async function i(c,u,h){return new Promise(async d=>{let p=c.shape[1],f=c.shape[2],m=[await r.decodeSinglePose(u.heatmapScores,u.offsets,h)],A=a.scaleAndFlipPoses(m,[p,f],[h.body.inputSize,h.body.inputSize]);d(A)})}var o=class{constructor(c){this.baseModel=c}async estimatePoses(c,u){let h=a.resizeTo(c,[u.body.inputSize,u.body.inputSize]),d=this.baseModel.predict(h,u),p=u.body.maxDetections<2?await i(c,d,u):await s(c,d,u);return d.heatmapScores.dispose(),d.offsets.dispose(),d.displacementFwd.dispose(),d.displacementBwd.dispose(),h.dispose(),p}dispose(){this.baseModel.dispose()}};e.PoseNet=o;async function l(c){let u=await pr(c.body.modelPath),h=new t.BaseModel(u);return Ye(`load model: ${c.body.modelPath.match(/\/(.*)\./)[1]}`),new o(h)}e.load=l}),X6=ct(e=>{var t=Ve(q6()),n=Ve(Xl()),r=Ve(Z2());e.load=t.load,e.PoseNet=t.PoseNet,e.partChannels=n.partChannels,e.partIds=n.partIds,e.partNames=n.partNames,e.poseChain=n.poseChain,e.getAdjacentKeyPoints=r.getAdjacentKeyPoints,e.getBoundingBox=r.getBoundingBox,e.getBoundingBoxPoints=r.getBoundingBoxPoints,e.scaleAndFlipPoses=r.scaleAndFlipPoses,e.scalePose=r.scalePose}),Z6=ct(e=>{var t=class{constructor(n,r,a){this.model=n,this.anchors=a.map(s=>[s.x_center,s.y_center]),this.anchorsTensor=dr(this.anchors),this.inputSizeTensor=nn([r,r]),this.doubleInputSizeTensor=nn([r*2,r*2])}normalizeBoxes(n){return U(()=>{let r=Me(n,[0,0],[-1,2]),a=Me(n,[0,2],[-1,2]),s=oe(Te(r,this.inputSizeTensor),this.anchorsTensor),i=Te(a,this.doubleInputSizeTensor),o=W(_e(s,i),this.inputSizeTensor),l=W(oe(s,i),this.inputSizeTensor);return jl([o,l],1)})}normalizeLandmarks(n,r){return U(()=>{let a=oe(Te(n.reshape([-1,7,2]),this.inputSizeTensor),this.anchors[r]);return W(a,this.inputSizeTensor)})}async getBoxes(n,r){let a=this.model.predict(n),s=a.squeeze();a.dispose();let i=U(()=>Qn(Me(s,[0,0],[-1,1])).squeeze()),o=i.dataSync(),l=Me(s,[0,1],[-1,4]),c=this.normalizeBoxes(l);l.dispose();let u=await Ot.nonMaxSuppressionAsync(c,o,r.hand.maxHands,r.hand.iouThreshold,r.hand.scoreThreshold),h=u.arraySync();i.dispose(),u.dispose();let d=[];for(let p of h)if(o[p]>=r.hand.minConfidence){let f=Me(c,[p,0],[1,-1]),m=Me(s,[p,5],[1,14]),A=U(()=>this.normalizeLandmarks(m,p).reshape([-1,2]));m.dispose(),d.push({box:f,palmLandmarks:A,confidence:o[p]})}return s.dispose(),c.dispose(),d}async estimateHandBounds(n,r){let a=n.shape[1],s=n.shape[2],i=U(()=>n.resizeBilinear([r.hand.inputSize,r.hand.inputSize]).div(127.5).sub(1)),o=await this.getBoxes(i,r);i.dispose();let l=[];if(!o||o.length===0)return l;for(let c of o){let u=c.box.dataSync(),h=u.slice(0,2),d=u.slice(2,4),p=c.palmLandmarks.arraySync();c.box.dispose(),c.palmLandmarks.dispose(),l.push(K6({startPoint:h,endPoint:d,palmLandmarks:p,confidence:c.confidence},[s/r.hand.inputSize,a/r.hand.inputSize]))}return l}};e.HandDetector=t}),e4=ct(e=>{var t=5,n=1.65,r=[0,5,9,13,17,1,2],a=0,s=2,i=class{constructor(o,l,c){this.handDetector=o,this.landmarkDetector=l,this.inputSize=c,this.storedBoxes=[],this.skipped=0,this.detectedHands=0}getBoxForPalmLandmarks(o,l){let c=o.map(h=>Y2([...h,1],l)),u=this.calculateLandmarksBoundingBox(c);return df(pf(u),t)}getBoxForHandLandmarks(o){let l=this.calculateLandmarksBoundingBox(o),c=df(pf(l),n);c.palmLandmarks=[];for(let u=0;u<r.length;u++)c.palmLandmarks.push(o[r[u]].slice(0,2));return c}transformRawCoords(o,l,c,u){let h=hf(l),d=[h[0]/this.inputSize,h[1]/this.inputSize,(h[0]+h[1])/this.inputSize/2],p=o.map(w=>[d[0]*(w[0]-this.inputSize/2),d[1]*(w[1]-this.inputSize/2),d[2]*w[2]]),f=J2(c,[0,0]),m=p.map(w=>[...Y2(w,f),w[2]]),A=Q6(u),y=[...dh(l),1],g=[Za(y,A[0]),Za(y,A[1])];return m.map(w=>[w[0]+g[0],w[1]+g[1],w[2]])}async estimateHands(o,l){let c=!1,u;(this.skipped===0||this.skipped>l.hand.skipFrames||!l.hand.landmarks||!l.videoOptimized)&&(u=await this.handDetector.estimateHandBounds(o,l),this.skipped=0),l.videoOptimized&&this.skipped++,u&&u.length>0&&(u.length!==this.detectedHands&&this.detectedHands!==l.hand.maxHands||!l.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...u],this.storedBoxes.length>0&&(c=!0));let h=[];for(let d=0;d<this.storedBoxes.length;d++){let p=this.storedBoxes[d];if(p)if(l.hand.landmarks){let f=l.hand.rotation?Y6(p.palmLandmarks[a],p.palmLandmarks[s]):0,m=dh(p),A=[m[0]/o.shape[2],m[1]/o.shape[1]],y=l.hand.rotation?Ot.rotateWithOffset(o,f,0,A):o.clone(),g=J2(-f,m),w=c?this.getBoxForPalmLandmarks(p.palmLandmarks,g):p,x=J6(w,y,[this.inputSize,this.inputSize]),_=x.div(255);x.dispose(),y.dispose();let[b,T]=await this.landmarkDetector.predict(_);_.dispose();let S=b.dataSync()[0];if(b.dispose(),S>=l.hand.minConfidence){let N=K(T,[-1,3]),C=N.arraySync();T.dispose(),N.dispose();let $=this.transformRawCoords(C,w,f,g),D=this.getBoxForHandLandmarks($);this.storedBoxes[d]=D;let O={landmarks:$,confidence:S,box:{topLeft:D.startPoint,bottomRight:D.endPoint}};h.push(O)}else this.storedBoxes[d]=null;T.dispose()}else{let f=df(pf(p),n),m={confidence:p.confidence,box:{topLeft:f.startPoint,bottomRight:f.endPoint}};h.push(m)}}return this.storedBoxes=this.storedBoxes.filter(d=>d!==null),this.detectedHands=h.length,h}calculateLandmarksBoundingBox(o){let l=o.map(d=>d[0]),c=o.map(d=>d[1]),u=[Math.min(...l),Math.min(...c)],h=[Math.max(...l),Math.max(...c)];return{startPoint:u,endPoint:h}}};e.HandPipeline=i}),t4=ct(e=>{e.anchors=[{w:1,h:1,x_center:.015625,y_center:.015625},{w:1,h:1,x_center:.015625,y_center:.015625},{w:1,h:1,x_center:.046875,y_center:.015625},{w:1,h:1,x_center:.046875,y_center:.015625},{w:1,h:1,x_center:.078125,y_center:.015625},{w:1,h:1,x_center:.078125,y_center:.015625},{w:1,h:1,x_center:.109375,y_center:.015625},{w:1,h:1,x_center:.109375,y_center:.015625},{w:1,h:1,x_center:.140625,y_center:.015625},{w:1,h:1,x_center:.140625,y_center:.015625},{w:1,h:1,x_center:.171875,y_center:.015625},{w:1,h:1,x_center:.171875,y_center:.015625},{w:1,h:1,x_center:.203125,y_center:.015625},{w:1,h:1,x_center:.203125,y_center:.015625},{w:1,h:1,x_center:.234375,y_center:.015625},{w:1,h:1,x_center:.234375,y_center:.015625},{w:1,h:1,x_center:.265625,y_center:.015625},{w:1,h:1,x_center:.265625,y_center:.015625},{w:1,h:1,x_center:.296875,y_center:.015625},{w:1,h:1,x_center:.296875,y_center:.015625},{w:1,h:1,x_center:.328125,y_center:.015625},{w:1,h:1,x_center:.328125,y_center:.015625},{w:1,h:1,x_center:.359375,y_center:.015625},{w:1,h:1,x_center:.359375,y_center:.015625},{w:1,h:1,x_center:.390625,y_center:.015625},{w:1,h:1,x_center:.390625,y_center:.015625},{w:1,h:1,x_center:.421875,y_center:.015625},{w:1,h:1,x_center:.421875,y_center:.015625},{w:1,h:1,x_center:.453125,y_center:.015625},{w:1,h:1,x_center:.453125,y_center:.015625},{w:1,h:1,x_center:.484375,y_center:.015625},{w:1,h:1,x_center:.484375,y_center:.015625},{w:1,h:1,x_center:.515625,y_center:.015625},{w:1,h:1,x_center:.515625,y_center:.015625},{w:1,h:1,x_center:.546875,y_center:.015625},{w:1,h:1,x_center:.546875,y_center:.015625},{w:1,h:1,x_center:.578125,y_center:.015625},{w:1,h:1,x_center:.578125,y_center:.015625},{w:1,h:1,x_center:.609375,y_center:.015625},{w:1,h:1,x_center:.609375,y_center:.015625},{w:1,h:1,x_center:.640625,y_center:.015625},{w:1,h:1,x_center:.640625,y_center:.015625},{w:1,h:1,x_center:.671875,y_center:.015625},{w:1,h:1,x_center:.671875,y_center:.015625},{w:1,h:1,x_center:.703125,y_center:.015625},{w:1,h:1,x_center:.703125,y_center:.015625},{w:1,h:1,x_center:.734375,y_center:.015625},{w:1,h:1,x_center:.734375,y_center:.015625},{w:1,h:1,x_center:.765625,y_center:.015625},{w:1,h:1,x_center:.765625,y_center:.015625},{w:1,h:1,x_center:.796875,y_center:.015625},{w:1,h:1,x_center:.796875,y_center:.015625},{w:1,h:1,x_center:.828125,y_center:.015625},{w:1,h:1,x_center:.828125,y_center:.015625},{w:1,h:1,x_center:.859375,y_center:.015625},{w:1,h:1,x_center:.859375,y_center:.015625},{w:1,h:1,x_center:.890625,y_center:.015625},{w:1,h:1,x_center:.890625,y_center:.015625},{w:1,h:1,x_center:.921875,y_center:.015625},{w:1,h:1,x_center:.921875,y_center:.015625},{w:1,h:1,x_center:.953125,y_center:.015625},{w:1,h:1,x_center:.953125,y_center:.015625},{w:1,h:1,x_center:.984375,y_center:.015625},{w:1,h:1,x_center:.984375,y_center:.015625},{w:1,h:1,x_center:.015625,y_center:.046875},{w:1,h:1,x_center:.015625,y_center:.046875},{w:1,h:1,x_center:.046875,y_center:.046875},{w:1,h:1,x_center:.046875,y_center:.046875},{w:1,h:1,x_center:.078125,y_center:.046875},{w:1,h:1,x_center:.078125,y_center:.046875},{w:1,h:1,x_center:.109375,y_center:.046875},{w:1,h:1,x_center:.109375,y_center:.046875},{w:1,h:1,x_center:.140625,y_center:.046875},{w:1,h:1,x_center:.140625,y_center:.046875},{w:1,h:1,x_center:.171875,y_center:.046875},{w:1,h:1,x_center:.171875,y_center:.046875},{w:1,h:1,x_center:.203125,y_center:.046875},{w:1,h:1,x_center:.203125,y_center:.046875},{w:1,h:1,x_center:.234375,y_center:.046875},{w:1,h:1,x_center:.234375,y_center:.046875},{w:1,h:1,x_center:.265625,y_center:.046875},{w:1,h:1,x_center:.265625,y_center:.046875},{w:1,h:1,x_center:.296875,y_center:.046875},{w:1,h:1,x_center:.296875,y_center:.046875},{w:1,h:1,x_center:.328125,y_center:.046875},{w:1,h:1,x_center:.328125,y_center:.046875},{w:1,h:1,x_center:.359375,y_center:.046875},{w:1,h:1,x_center:.359375,y_center:.046875},{w:1,h:1,x_center:.390625,y_center:.046875},{w:1,h:1,x_center:.390625,y_center:.046875},{w:1,h:1,x_center:.421875,y_center:.046875},{w:1,h:1,x_center:.421875,y_center:.046875},{w:1,h:1,x_center:.453125,y_center:.046875},{w:1,h:1,x_center:.453125,y_center:.046875},{w:1,h:1,x_center:.484375,y_center:.046875},{w:1,h:1,x_center:.484375,y_center:.046875},{w:1,h:1,x_center:.515625,y_center:.046875},{w:1,h:1,x_center:.515625,y_center:.046875},{w:1,h:1,x_center:.546875,y_center:.046875},{w:1,h:1,x_center:.546875,y_center:.046875},{w:1,h:1,x_center:.578125,y_center:.046875},{w:1,h:1,x_center:.578125,y_center:.046875},{w:1,h:1,x_center:.609375,y_center:.046875},{w:1,h:1,x_center:.609375,y_center:.046875},{w:1,h:1,x_center:.640625,y_center:.046875},{w:1,h:1,x_center:.640625,y_center:.046875},{w:1,h:1,x_center:.671875,y_center:.046875},{w:1,h:1,x_center:.671875,y_center:.046875},{w:1,h:1,x_center:.703125,y_center:.046875},{w:1,h:1,x_center:.703125,y_center:.046875},{w:1,h:1,x_center:.734375,y_center:.046875},{w:1,h:1,x_center:.734375,y_center:.046875},{w:1,h:1,x_center:.765625,y_center:.046875},{w:1,h:1,x_center:.765625,y_center:.046875},{w:1,h:1,x_center:.796875,y_center:.046875},{w:1,h:1,x_center:.796875,y_center:.046875},{w:1,h:1,x_center:.828125,y_center:.046875},{w:1,h:1,x_center:.828125,y_center:.046875},{w:1,h:1,x_center:.859375,y_center:.046875},{w:1,h:1,x_center:.859375,y_center:.046875},{w:1,h:1,x_center:.890625,y_center:.046875},{w:1,h:1,x_center:.890625,y_center:.046875},{w:1,h:1,x_center:.921875,y_center:.046875},{w:1,h:1,x_center:.921875,y_center:.046875},{w:1,h:1,x_center:.953125,y_center:.046875},{w:1,h:1,x_center:.953125,y_center:.046875},{w:1,h:1,x_center:.984375,y_center:.046875},{w:1,h:1,x_center:.984375,y_center:.046875},{w:1,h:1,x_center:.015625,y_center:.078125},{w:1,h:1,x_center:.015625,y_center:.078125},{w:1,h:1,x_center:.046875,y_center:.078125},{w:1,h:1,x_center:.046875,y_center:.078125},{w:1,h:1,x_center:.078125,y_center:.078125},{w:1,h:1,x_center:.078125,y_center:.078125},{w:1,h:1,x_center:.109375,y_center:.078125},{w:1,h:1,x_center:.109375,y_center:.078125},{w:1,h:1,x_center:.140625,y_center:.078125},{w:1,h:1,x_center:.140625,y_center:.078125},{w:1,h:1,x_center:.171875,y_center:.078125},{w:1,h:1,x_center:.171875,y_center:.078125},{w:1,h:1,x_center:.203125,y_center:.078125},{w:1,h:1,x_center:.203125,y_center:.078125},{w:1,h:1,x_center:.234375,y_center:.078125},{w:1,h:1,x_center:.234375,y_center:.078125},{w:1,h:1,x_center:.265625,y_center:.078125},{w:1,h:1,x_center:.265625,y_center:.078125},{w:1,h:1,x_center:.296875,y_center:.078125},{w:1,h:1,x_center:.296875,y_center:.078125},{w:1,h:1,x_center:.328125,y_center:.078125},{w:1,h:1,x_center:.328125,y_center:.078125},{w:1,h:1,x_center:.359375,y_center:.078125},{w:1,h:1,x_center:.359375,y_center:.078125},{w:1,h:1,x_center:.390625,y_center:.078125},{w:1,h:1,x_center:.390625,y_center:.078125},{w:1,h:1,x_center:.421875,y_center:.078125},{w:1,h:1,x_center:.421875,y_center:.078125},{w:1,h:1,x_center:.453125,y_center:.078125},{w:1,h:1,x_center:.453125,y_center:.078125},{w:1,h:1,x_center:.484375,y_center:.078125},{w:1,h:1,x_center:.484375,y_center:.078125},{w:1,h:1,x_center:.515625,y_center:.078125},{w:1,h:1,x_center:.515625,y_center:.078125},{w:1,h:1,x_center:.546875,y_center:.078125},{w:1,h:1,x_center:.546875,y_center:.078125},{w:1,h:1,x_center:.578125,y_center:.078125},{w:1,h:1,x_center:.578125,y_center:.078125},{w:1,h:1,x_center:.609375,y_center:.078125},{w:1,h:1,x_center:.609375,y_center:.078125},{w:1,h:1,x_center:.640625,y_center:.078125},{w:1,h:1,x_center:.640625,y_center:.078125},{w:1,h:1,x_center:.671875,y_center:.078125},{w:1,h:1,x_center:.671875,y_center:.078125},{w:1,h:1,x_center:.703125,y_center:.078125},{w:1,h:1,x_center:.703125,y_center:.078125},{w:1,h:1,x_center:.734375,y_center:.078125},{w:1,h:1,x_center:.734375,y_center:.078125},{w:1,h:1,x_center:.765625,y_center:.078125},{w:1,h:1,x_center:.765625,y_center:.078125},{w:1,h:1,x_center:.796875,y_center:.078125},{w:1,h:1,x_center:.796875,y_center:.078125},{w:1,h:1,x_center:.828125,y_center:.078125},{w:1,h:1,x_center:.828125,y_center:.078125},{w:1,h:1,x_center:.859375,y_center:.078125},{w:1,h:1,x_center:.859375,y_center:.078125},{w:1,h:1,x_center:.890625,y_center:.078125},{w:1,h:1,x_center:.890625,y_center:.078125},{w:1,h:1,x_center:.921875,y_center:.078125},{w:1,h:1,x_center:.921875,y_center:.078125},{w:1,h:1,x_center:.953125,y_center:.078125},{w:1,h:1,x_center:.953125,y_center:.078125},{w:1,h:1,x_center:.984375,y_center:.078125},{w:1,h:1,x_center:.984375,y_center:.078125},{w:1,h:1,x_center:.015625,y_center:.109375},{w:1,h:1,x_center:.015625,y_center:.109375},{w:1,h:1,x_center:.046875,y_center:.109375},{w:1,h:1,x_center:.046875,y_center:.109375},{w:1,h:1,x_center:.078125,y_center:.109375},{w:1,h:1,x_center:.078125,y_center:.109375},{w:1,h:1,x_center:.109375,y_center:.109375},{w:1,h:1,x_center:.109375,y_center:.109375},{w:1,h:1,x_center:.140625,y_center:.109375},{w:1,h:1,x_center:.140625,y_center:.109375},{w:1,h:1,x_center:.171875,y_center:.109375},{w:1,h:1,x_center:.171875,y_center:.109375},{w:1,h:1,x_center:.203125,y_center:.109375},{w:1,h:1,x_center:.203125,y_center:.109375},{w:1,h:1,x_center:.234375,y_center:.109375},{w:1,h:1,x_center:.234375,y_center:.109375},{w:1,h:1,x_center:.265625,y_center:.109375},{w:1,h:1,x_center:.265625,y_center:.109375},{w:1,h:1,x_center:.296875,y_center:.109375},{w:1,h:1,x_center:.296875,y_center:.109375},{w:1,h:1,x_center:.328125,y_center:.109375},{w:1,h:1,x_center:.328125,y_center:.109375},{w:1,h:1,x_center:.359375,y_center:.109375},{w:1,h:1,x_center:.359375,y_center:.109375},{w:1,h:1,x_center:.390625,y_center:.109375},{w:1,h:1,x_center:.390625,y_center:.109375},{w:1,h:1,x_center:.421875,y_center:.109375},{w:1,h:1,x_center:.421875,y_center:.109375},{w:1,h:1,x_center:.453125,y_center:.109375},{w:1,h:1,x_center:.453125,y_center:.109375},{w:1,h:1,x_center:.484375,y_center:.109375},{w:1,h:1,x_center:.484375,y_center:.109375},{w:1,h:1,x_center:.515625,y_center:.109375},{w:1,h:1,x_center:.515625,y_center:.109375},{w:1,h:1,x_center:.546875,y_center:.109375},{w:1,h:1,x_center:.546875,y_center:.109375},{w:1,h:1,x_center:.578125,y_center:.109375},{w:1,h:1,x_center:.578125,y_center:.109375},{w:1,h:1,x_center:.609375,y_center:.109375},{w:1,h:1,x_center:.609375,y_center:.109375},{w:1,h:1,x_center:.640625,y_center:.109375},{w:1,h:1,x_center:.640625,y_center:.109375},{w:1,h:1,x_center:.671875,y_center:.109375},{w:1,h:1,x_center:.671875,y_center:.109375},{w:1,h:1,x_center:.703125,y_center:.109375},{w:1,h:1,x_center:.703125,y_center:.109375},{w:1,h:1,x_center:.734375,y_center:.109375},{w:1,h:1,x_center:.734375,y_center:.109375},{w:1,h:1,x_center:.765625,y_center:.109375},{w:1,h:1,x_center:.765625,y_center:.109375},{w:1,h:1,x_center:.796875,y_center:.109375},{w:1,h:1,x_center:.796875,y_center:.109375},{w:1,h:1,x_center:.828125,y_center:.109375},{w:1,h:1,x_center:.828125,y_center:.109375},{w:1,h:1,x_center:.859375,y_center:.109375},{w:1,h:1,x_center:.859375,y_center:.109375},{w:1,h:1,x_center:.890625,y_center:.109375},{w:1,h:1,x_center:.890625,y_center:.109375},{w:1,h:1,x_center:.921875,y_center:.109375},{w:1,h:1,x_center:.921875,y_center:.109375},{w:1,h:1,x_center:.953125,y_center:.109375},{w:1,h:1,x_center:.953125,y_center:.109375},{w:1,h:1,x_center:.984375,y_center:.109375},{w:1,h:1,x_center:.984375,y_center:.109375},{w:1,h:1,x_center:.015625,y_center:.140625},{w:1,h:1,x_center:.015625,y_center:.140625},{w:1,h:1,x_center:.046875,y_center:.140625},{w:1,h:1,x_center:.046875,y_center:.140625},{w:1,h:1,x_center:.078125,y_center:.140625},{w:1,h:1,x_center:.078125,y_center:.140625},{w:1,h:1,x_center:.109375,y_center:.140625},{w:1,h:1,x_center:.109375,y_center:.140625},{w:1,h:1,x_center:.140625,y_center:.140625},{w:1,h:1,x_center:.140625,y_center:.140625},{w:1,h:1,x_center:.171875,y_center:.140625},{w:1,h:1,x_center:.171875,y_center:.140625},{w:1,h:1,x_center:.203125,y_center:.140625},{w:1,h:1,x_center:.203125,y_center:.140625},{w:1,h:1,x_center:.234375,y_center:.140625},{w:1,h:1,x_center:.234375,y_center:.140625},{w:1,h:1,x_center:.265625,y_center:.140625},{w:1,h:1,x_center:.265625,y_center:.140625},{w:1,h:1,x_center:.296875,y_center:.140625},{w:1,h:1,x_center:.296875,y_center:.140625},{w:1,h:1,x_center:.328125,y_center:.140625},{w:1,h:1,x_center:.328125,y_center:.140625},{w:1,h:1,x_center:.359375,y_center:.140625},{w:1,h:1,x_center:.359375,y_center:.140625},{w:1,h:1,x_center:.390625,y_center:.140625},{w:1,h:1,x_center:.390625,y_center:.140625},{w:1,h:1,x_center:.421875,y_center:.140625},{w:1,h:1,x_center:.421875,y_center:.140625},{w:1,h:1,x_center:.453125,y_center:.140625},{w:1,h:1,x_center:.453125,y_center:.140625},{w:1,h:1,x_center:.484375,y_center:.140625},{w:1,h:1,x_center:.484375,y_center:.140625},{w:1,h:1,x_center:.515625,y_center:.140625},{w:1,h:1,x_center:.515625,y_center:.140625},{w:1,h:1,x_center:.546875,y_center:.140625},{w:1,h:1,x_center:.546875,y_center:.140625},{w:1,h:1,x_center:.578125,y_center:.140625},{w:1,h:1,x_center:.578125,y_center:.140625},{w:1,h:1,x_center:.609375,y_center:.140625},{w:1,h:1,x_center:.609375,y_center:.140625},{w:1,h:1,x_center:.640625,y_center:.140625},{w:1,h:1,x_center:.640625,y_center:.140625},{w:1,h:1,x_center:.671875,y_center:.140625},{w:1,h:1,x_center:.671875,y_center:.140625},{w:1,h:1,x_center:.703125,y_center:.140625},{w:1,h:1,x_center:.703125,y_center:.140625},{w:1,h:1,x_center:.734375,y_center:.140625},{w:1,h:1,x_center:.734375,y_center:.140625},{w:1,h:1,x_center:.765625,y_center:.140625},{w:1,h:1,x_center:.765625,y_center:.140625},{w:1,h:1,x_center:.796875,y_center:.140625},{w:1,h:1,x_center:.796875,y_center:.140625},{w:1,h:1,x_center:.828125,y_center:.140625},{w:1,h:1,x_center:.828125,y_center:.140625},{w:1,h:1,x_center:.859375,y_center:.140625},{w:1,h:1,x_center:.859375,y_center:.140625},{w:1,h:1,x_center:.890625,y_center:.140625},{w:1,h:1,x_center:.890625,y_center:.140625},{w:1,h:1,x_center:.921875,y_center:.140625},{w:1,h:1,x_center:.921875,y_center:.140625},{w:1,h:1,x_center:.953125,y_center:.140625},{w:1,h:1,x_center:.953125,y_center:.140625},{w:1,h:1,x_center:.984375,y_center:.140625},{w:1,h:1,x_center:.984375,y_center:.140625},{w:1,h:1,x_center:.015625,y_center:.171875},{w:1,h:1,x_center:.015625,y_center:.171875},{w:1,h:1,x_center:.046875,y_center:.171875},{w:1,h:1,x_center:.046875,y_center:.171875},{w:1,h:1,x_center:.078125,y_center:.171875},{w:1,h:1,x_center:.078125,y_center:.171875},{w:1,h:1,x_center:.109375,y_center:.171875},{w:1,h:1,x_center:.109375,y_center:.171875},{w:1,h:1,x_center:.140625,y_center:.171875},{w:1,h:1,x_center:.140625,y_center:.171875},{w:1,h:1,x_center:.171875,y_center:.171875},{w:1,h:1,x_center:.171875,y_center:.171875},{w:1,h:1,x_center:.203125,y_center:.171875},{w:1,h:1,x_center:.203125,y_center:.171875},{w:1,h:1,x_center:.234375,y_center:.171875},{w:1,h:1,x_center:.234375,y_center:.171875},{w:1,h:1,x_center:.265625,y_center:.171875},{w:1,h:1,x_center:.265625,y_center:.171875},{w:1,h:1,x_center:.296875,y_center:.171875},{w:1,h:1,x_center:.296875,y_center:.171875},{w:1,h:1,x_center:.328125,y_center:.171875},{w:1,h:1,x_center:.328125,y_center:.171875},{w:1,h:1,x_center:.359375,y_center:.171875},{w:1,h:1,x_center:.359375,y_center:.171875},{w:1,h:1,x_center:.390625,y_center:.171875},{w:1,h:1,x_center:.390625,y_center:.171875},{w:1,h:1,x_center:.421875,y_center:.171875},{w:1,h:1,x_center:.421875,y_center:.171875},{w:1,h:1,x_center:.453125,y_center:.171875},{w:1,h:1,x_center:.453125,y_center:.171875},{w:1,h:1,x_center:.484375,y_center:.171875},{w:1,h:1,x_center:.484375,y_center:.171875},{w:1,h:1,x_center:.515625,y_center:.171875},{w:1,h:1,x_center:.515625,y_center:.171875},{w:1,h:1,x_center:.546875,y_center:.171875},{w:1,h:1,x_center:.546875,y_center:.171875},{w:1,h:1,x_center:.578125,y_center:.171875},{w:1,h:1,x_center:.578125,y_center:.171875},{w:1,h:1,x_center:.609375,y_center:.171875},{w:1,h:1,x_center:.609375,y_center:.171875},{w:1,h:1,x_center:.640625,y_center:.171875},{w:1,h:1,x_center:.640625,y_center:.171875},{w:1,h:1,x_center:.671875,y_center:.171875},{w:1,h:1,x_center:.671875,y_center:.171875},{w:1,h:1,x_center:.703125,y_center:.171875},{w:1,h:1,x_center:.703125,y_center:.171875},{w:1,h:1,x_center:.734375,y_center:.171875},{w:1,h:1,x_center:.734375,y_center:.171875},{w:1,h:1,x_center:.765625,y_center:.171875},{w:1,h:1,x_center:.765625,y_center:.171875},{w:1,h:1,x_center:.796875,y_center:.171875},{w:1,h:1,x_center:.796875,y_center:.171875},{w:1,h:1,x_center:.828125,y_center:.171875},{w:1,h:1,x_center:.828125,y_center:.171875},{w:1,h:1,x_center:.859375,y_center:.171875},{w:1,h:1,x_center:.859375,y_center:.171875},{w:1,h:1,x_center:.890625,y_center:.171875},{w:1,h:1,x_center:.890625,y_center:.171875},{w:1,h:1,x_center:.921875,y_center:.171875},{w:1,h:1,x_center:.921875,y_center:.171875},{w:1,h:1,x_center:.953125,y_center:.171875},{w:1,h:1,x_center:.953125,y_center:.171875},{w:1,h:1,x_center:.984375,y_center:.171875},{w:1,h:1,x_center:.984375,y_center:.171875},{w:1,h:1,x_center:.015625,y_center:.203125},{w:1,h:1,x_center:.015625,y_center:.203125},{w:1,h:1,x_center:.046875,y_center:.203125},{w:1,h:1,x_center:.046875,y_center:.203125},{w:1,h:1,x_center:.078125,y_center:.203125},{w:1,h:1,x_center:.078125,y_center:.203125},{w:1,h:1,x_center:.109375,y_center:.203125},{w:1,h:1,x_center:.109375,y_center:.203125},{w:1,h:1,x_center:.140625,y_center:.203125},{w:1,h:1,x_center:.140625,y_center:.203125},{w:1,h:1,x_center:.171875,y_center:.203125},{w:1,h:1,x_center:.171875,y_center:.203125},{w:1,h:1,x_center:.203125,y_center:.203125},{w:1,h:1,x_center:.203125,y_center:.203125},{w:1,h:1,x_center:.234375,y_center:.203125},{w:1,h:1,x_center:.234375,y_center:.203125},{w:1,h:1,x_center:.265625,y_center:.203125},{w:1,h:1,x_center:.265625,y_center:.203125},{w:1,h:1,x_center:.296875,y_center:.203125},{w:1,h:1,x_center:.296875,y_center:.203125},{w:1,h:1,x_center:.328125,y_center:.203125},{w:1,h:1,x_center:.328125,y_center:.203125},{w:1,h:1,x_center:.359375,y_center:.203125},{w:1,h:1,x_center:.359375,y_center:.203125},{w:1,h:1,x_center:.390625,y_center:.203125},{w:1,h:1,x_center:.390625,y_center:.203125},{w:1,h:1,x_center:.421875,y_center:.203125},{w:1,h:1,x_center:.421875,y_center:.203125},{w:1,h:1,x_center:.453125,y_center:.203125},{w:1,h:1,x_center:.453125,y_center:.203125},{w:1,h:1,x_center:.484375,y_center:.203125},{w:1,h:1,x_center:.484375,y_center:.203125},{w:1,h:1,x_center:.515625,y_center:.203125},{w:1,h:1,x_center:.515625,y_center:.203125},{w:1,h:1,x_center:.546875,y_center:.203125},{w:1,h:1,x_center:.546875,y_center:.203125},{w:1,h:1,x_center:.578125,y_center:.203125},{w:1,h:1,x_center:.578125,y_center:.203125},{w:1,h:1,x_center:.609375,y_center:.203125},{w:1,h:1,x_center:.609375,y_center:.203125},{w:1,h:1,x_center:.640625,y_center:.203125},{w:1,h:1,x_center:.640625,y_center:.203125},{w:1,h:1,x_center:.671875,y_center:.203125},{w:1,h:1,x_center:.671875,y_center:.203125},{w:1,h:1,x_center:.703125,y_center:.203125},{w:1,h:1,x_center:.703125,y_center:.203125},{w:1,h:1,x_center:.734375,y_center:.203125},{w:1,h:1,x_center:.734375,y_center:.203125},{w:1,h:1,x_center:.765625,y_center:.203125},{w:1,h:1,x_center:.765625,y_center:.203125},{w:1,h:1,x_center:.796875,y_center:.203125},{w:1,h:1,x_center:.796875,y_center:.203125},{w:1,h:1,x_center:.828125,y_center:.203125},{w:1,h:1,x_center:.828125,y_center:.203125},{w:1,h:1,x_center:.859375,y_center:.203125},{w:1,h:1,x_center:.859375,y_center:.203125},{w:1,h:1,x_center:.890625,y_center:.203125},{w:1,h:1,x_center:.890625,y_center:.203125},{w:1,h:1,x_center:.921875,y_center:.203125},{w:1,h:1,x_center:.921875,y_center:.203125},{w:1,h:1,x_center:.953125,y_center:.203125},{w:1,h:1,x_center:.953125,y_center:.203125},{w:1,h:1,x_center:.984375,y_center:.203125},{w:1,h:1,x_center:.984375,y_center:.203125},{w:1,h:1,x_center:.015625,y_center:.234375},{w:1,h:1,x_center:.015625,y_center:.234375},{w:1,h:1,x_center:.046875,y_center:.234375},{w:1,h:1,x_center:.046875,y_center:.234375},{w:1,h:1,x_center:.078125,y_center:.234375},{w:1,h:1,x_center:.078125,y_center:.234375},{w:1,h:1,x_center:.109375,y_center:.234375},{w:1,h:1,x_center:.109375,y_center:.234375},{w:1,h:1,x_center:.140625,y_center:.234375},{w:1,h:1,x_center:.140625,y_center:.234375},{w:1,h:1,x_center:.171875,y_center:.234375},{w:1,h:1,x_center:.171875,y_center:.234375},{w:1,h:1,x_center:.203125,y_center:.234375},{w:1,h:1,x_center:.203125,y_center:.234375},{w:1,h:1,x_center:.234375,y_center:.234375},{w:1,h:1,x_center:.234375,y_center:.234375},{w:1,h:1,x_center:.265625,y_center:.234375},{w:1,h:1,x_center:.265625,y_center:.234375},{w:1,h:1,x_center:.296875,y_center:.234375},{w:1,h:1,x_center:.296875,y_center:.234375},{w:1,h:1,x_center:.328125,y_center:.234375},{w:1,h:1,x_center:.328125,y_center:.234375},{w:1,h:1,x_center:.359375,y_center:.234375},{w:1,h:1,x_center:.359375,y_center:.234375},{w:1,h:1,x_center:.390625,y_center:.234375},{w:1,h:1,x_center:.390625,y_center:.234375},{w:1,h:1,x_center:.421875,y_center:.234375},{w:1,h:1,x_center:.421875,y_center:.234375},{w:1,h:1,x_center:.453125,y_center:.234375},{w:1,h:1,x_center:.453125,y_center:.234375},{w:1,h:1,x_center:.484375,y_center:.234375},{w:1,h:1,x_center:.484375,y_center:.234375},{w:1,h:1,x_center:.515625,y_center:.234375},{w:1,h:1,x_center:.515625,y_center:.234375},{w:1,h:1,x_center:.546875,y_center:.234375},{w:1,h:1,x_center:.546875,y_center:.234375},{w:1,h:1,x_center:.578125,y_center:.234375},{w:1,h:1,x_center:.578125,y_center:.234375},{w:1,h:1,x_center:.609375,y_center:.234375},{w:1,h:1,x_center:.609375,y_center:.234375},{w:1,h:1,x_center:.640625,y_center:.234375},{w:1,h:1,x_center:.640625,y_center:.234375},{w:1,h:1,x_center:.671875,y_center:.234375},{w:1,h:1,x_center:.671875,y_center:.234375},{w:1,h:1,x_center:.703125,y_center:.234375},{w:1,h:1,x_center:.703125,y_center:.234375},{w:1,h:1,x_center:.734375,y_center:.234375},{w:1,h:1,x_center:.734375,y_center:.234375},{w:1,h:1,x_center:.765625,y_center:.234375},{w:1,h:1,x_center:.765625,y_center:.234375},{w:1,h:1,x_center:.796875,y_center:.234375},{w:1,h:1,x_center:.796875,y_center:.234375},{w:1,h:1,x_center:.828125,y_center:.234375},{w:1,h:1,x_center:.828125,y_center:.234375},{w:1,h:1,x_center:.859375,y_center:.234375},{w:1,h:1,x_center:.859375,y_center:.234375},{w:1,h:1,x_center:.890625,y_center:.234375},{w:1,h:1,x_center:.890625,y_center:.234375},{w:1,h:1,x_center:.921875,y_center:.234375},{w:1,h:1,x_center:.921875,y_center:.234375},{w:1,h:1,x_center:.953125,y_center:.234375},{w:1,h:1,x_center:.953125,y_center:.234375},{w:1,h:1,x_center:.984375,y_center:.234375},{w:1,h:1,x_center:.984375,y_center:.234375},{w:1,h:1,x_center:.015625,y_center:.265625},{w:1,h:1,x_center:.015625,y_center:.265625},{w:1,h:1,x_center:.046875,y_center:.265625},{w:1,h:1,x_center:.046875,y_center:.265625},{w:1,h:1,x_center:.078125,y_center:.265625},{w:1,h:1,x_center:.078125,y_center:.265625},{w:1,h:1,x_center:.109375,y_center:.265625},{w:1,h:1,x_center:.109375,y_center:.265625},{w:1,h:1,x_center:.140625,y_center:.265625},{w:1,h:1,x_center:.140625,y_center:.265625},{w:1,h:1,x_center:.171875,y_center:.265625},{w:1,h:1,x_center:.171875,y_center:.265625},{w:1,h:1,x_center:.203125,y_center:.265625},{w:1,h:1,x_center:.203125,y_center:.265625},{w:1,h:1,x_center:.234375,y_center:.265625},{w:1,h:1,x_center:.234375,y_center:.265625},{w:1,h:1,x_center:.265625,y_center:.265625},{w:1,h:1,x_center:.265625,y_center:.265625},{w:1,h:1,x_center:.296875,y_center:.265625},{w:1,h:1,x_center:.296875,y_center:.265625},{w:1,h:1,x_center:.328125,y_center:.265625},{w:1,h:1,x_center:.328125,y_center:.265625},{w:1,h:1,x_center:.359375,y_center:.265625},{w:1,h:1,x_center:.359375,y_center:.265625},{w:1,h:1,x_center:.390625,y_center:.265625},{w:1,h:1,x_center:.390625,y_center:.265625},{w:1,h:1,x_center:.421875,y_center:.265625},{w:1,h:1,x_center:.421875,y_center:.265625},{w:1,h:1,x_center:.453125,y_center:.265625},{w:1,h:1,x_center:.453125,y_center:.265625},{w:1,h:1,x_center:.484375,y_center:.265625},{w:1,h:1,x_center:.484375,y_center:.265625},{w:1,h:1,x_center:.515625,y_center:.265625},{w:1,h:1,x_center:.515625,y_center:.265625},{w:1,h:1,x_center:.546875,y_center:.265625},{w:1,h:1,x_center:.546875,y_center:.265625},{w:1,h:1,x_center:.578125,y_center:.265625},{w:1,h:1,x_center:.578125,y_center:.265625},{w:1,h:1,x_center:.609375,y_center:.265625},{w:1,h:1,x_center:.609375,y_center:.265625},{w:1,h:1,x_center:.640625,y_center:.265625},{w:1,h:1,x_center:.640625,y_center:.265625},{w:1,h:1,x_center:.671875,y_center:.265625},{w:1,h:1,x_center:.671875,y_center:.265625},{w:1,h:1,x_center:.703125,y_center:.265625},{w:1,h:1,x_center:.703125,y_center:.265625},{w:1,h:1,x_center:.734375,y_center:.265625},{w:1,h:1,x_center:.734375,y_center:.265625},{w:1,h:1,x_center:.765625,y_center:.265625},{w:1,h:1,x_center:.765625,y_center:.265625},{w:1,h:1,x_center:.796875,y_center:.265625},{w:1,h:1,x_center:.796875,y_center:.265625},{w:1,h:1,x_center:.828125,y_center:.265625},{w:1,h:1,x_center:.828125,y_center:.265625},{w:1,h:1,x_center:.859375,y_center:.265625},{w:1,h:1,x_center:.859375,y_center:.265625},{w:1,h:1,x_center:.890625,y_center:.265625},{w:1,h:1,x_center:.890625,y_center:.265625},{w:1,h:1,x_center:.921875,y_center:.265625},{w:1,h:1,x_center:.921875,y_center:.265625},{w:1,h:1,x_center:.953125,y_center:.265625},{w:1,h:1,x_center:.953125,y_center:.265625},{w:1,h:1,x_center:.984375,y_center:.265625},{w:1,h:1,x_center:.984375,y_center:.265625},{w:1,h:1,x_center:.015625,y_center:.296875},{w:1,h:1,x_center:.015625,y_center:.296875},{w:1,h:1,x_center:.046875,y_center:.296875},{w:1,h:1,x_center:.046875,y_center:.296875},{w:1,h:1,x_center:.078125,y_center:.296875},{w:1,h:1,x_center:.078125,y_center:.296875},{w:1,h:1,x_center:.109375,y_center:.296875},{w:1,h:1,x_center:.109375,y_center:.296875},{w:1,h:1,x_center:.140625,y_center:.296875},{w:1,h:1,x_center:.140625,y_center:.296875},{w:1,h:1,x_center:.171875,y_center:.296875},{w:1,h:1,x_center:.171875,y_center:.296875},{w:1,h:1,x_center:.203125,y_center:.296875},{w:1,h:1,x_center:.203125,y_center:.296875},{w:1,h:1,x_center:.234375,y_center:.296875},{w:1,h:1,x_center:.234375,y_center:.296875},{w:1,h:1,x_center:.265625,y_center:.296875},{w:1,h:1,x_center:.265625,y_center:.296875},{w:1,h:1,x_center:.296875,y_center:.296875},{w:1,h:1,x_center:.296875,y_center:.296875},{w:1,h:1,x_center:.328125,y_center:.296875},{w:1,h:1,x_center:.328125,y_center:.296875},{w:1,h:1,x_center:.359375,y_center:.296875},{w:1,h:1,x_center:.359375,y_center:.296875},{w:1,h:1,x_center:.390625,y_center:.296875},{w:1,h:1,x_center:.390625,y_center:.296875},{w:1,h:1,x_center:.421875,y_center:.296875},{w:1,h:1,x_center:.421875,y_center:.296875},{w:1,h:1,x_center:.453125,y_center:.296875},{w:1,h:1,x_center:.453125,y_center:.296875},{w:1,h:1,x_center:.484375,y_center:.296875},{w:1,h:1,x_center:.484375,y_center:.296875},{w:1,h:1,x_center:.515625,y_center:.296875},{w:1,h:1,x_center:.515625,y_center:.296875},{w:1,h:1,x_center:.546875,y_center:.296875},{w:1,h:1,x_center:.546875,y_center:.296875},{w:1,h:1,x_center:.578125,y_center:.296875},{w:1,h:1,x_center:.578125,y_center:.296875},{w:1,h:1,x_center:.609375,y_center:.296875},{w:1,h:1,x_center:.609375,y_center:.296875},{w:1,h:1,x_center:.640625,y_center:.296875},{w:1,h:1,x_center:.640625,y_center:.296875},{w:1,h:1,x_center:.671875,y_center:.296875},{w:1,h:1,x_center:.671875,y_center:.296875},{w:1,h:1,x_center:.703125,y_center:.296875},{w:1,h:1,x_center:.703125,y_center:.296875},{w:1,h:1,x_center:.734375,y_center:.296875},{w:1,h:1,x_center:.734375,y_center:.296875},{w:1,h:1,x_center:.765625,y_center:.296875},{w:1,h:1,x_center:.765625,y_center:.296875},{w:1,h:1,x_center:.796875,y_center:.296875},{w:1,h:1,x_center:.796875,y_center:.296875},{w:1,h:1,x_center:.828125,y_center:.296875},{w:1,h:1,x_center:.828125,y_center:.296875},{w:1,h:1,x_center:.859375,y_center:.296875},{w:1,h:1,x_center:.859375,y_center:.296875},{w:1,h:1,x_center:.890625,y_center:.296875},{w:1,h:1,x_center:.890625,y_center:.296875},{w:1,h:1,x_center:.921875,y_center:.296875},{w:1,h:1,x_center:.921875,y_center:.296875},{w:1,h:1,x_center:.953125,y_center:.296875},{w:1,h:1,x_center:.953125,y_center:.296875},{w:1,h:1,x_center:.984375,y_center:.296875},{w:1,h:1,x_center:.984375,y_center:.296875},{w:1,h:1,x_center:.015625,y_center:.328125},{w:1,h:1,x_center:.015625,y_center:.328125},{w:1,h:1,x_center:.046875,y_center:.328125},{w:1,h:1,x_center:.046875,y_center:.328125},{w:1,h:1,x_center:.078125,y_center:.328125},{w:1,h:1,x_center:.078125,y_center:.328125},{w:1,h:1,x_center:.109375,y_center:.328125},{w:1,h:1,x_center:.109375,y_center:.328125},{w:1,h:1,x_center:.140625,y_center:.328125},{w:1,h:1,x_center:.140625,y_center:.328125},{w:1,h:1,x_center:.171875,y_center:.328125},{w:1,h:1,x_center:.171875,y_center:.328125},{w:1,h:1,x_center:.203125,y_center:.328125},{w:1,h:1,x_center:.203125,y_center:.328125},{w:1,h:1,x_center:.234375,y_center:.328125},{w:1,h:1,x_center:.234375,y_center:.328125},{w:1,h:1,x_center:.265625,y_center:.328125},{w:1,h:1,x_center:.265625,y_center:.328125},{w:1,h:1,x_center:.296875,y_center:.328125},{w:1,h:1,x_center:.296875,y_center:.328125},{w:1,h:1,x_center:.328125,y_center:.328125},{w:1,h:1,x_center:.328125,y_center:.328125},{w:1,h:1,x_center:.359375,y_center:.328125},{w:1,h:1,x_center:.359375,y_center:.328125},{w:1,h:1,x_center:.390625,y_center:.328125},{w:1,h:1,x_center:.390625,y_center:.328125},{w:1,h:1,x_center:.421875,y_center:.328125},{w:1,h:1,x_center:.421875,y_center:.328125},{w:1,h:1,x_center:.453125,y_center:.328125},{w:1,h:1,x_center:.453125,y_center:.328125},{w:1,h:1,x_center:.484375,y_center:.328125},{w:1,h:1,x_center:.484375,y_center:.328125},{w:1,h:1,x_center:.515625,y_center:.328125},{w:1,h:1,x_center:.515625,y_center:.328125},{w:1,h:1,x_center:.546875,y_center:.328125},{w:1,h:1,x_center:.546875,y_center:.328125},{w:1,h:1,x_center:.578125,y_center:.328125},{w:1,h:1,x_center:.578125,y_center:.328125},{w:1,h:1,x_center:.609375,y_center:.328125},{w:1,h:1,x_center:.609375,y_center:.328125},{w:1,h:1,x_center:.640625,y_center:.328125},{w:1,h:1,x_center:.640625,y_center:.328125},{w:1,h:1,x_center:.671875,y_center:.328125},{w:1,h:1,x_center:.671875,y_center:.328125},{w:1,h:1,x_center:.703125,y_center:.328125},{w:1,h:1,x_center:.703125,y_center:.328125},{w:1,h:1,x_center:.734375,y_center:.328125},{w:1,h:1,x_center:.734375,y_center:.328125},{w:1,h:1,x_center:.765625,y_center:.328125},{w:1,h:1,x_center:.765625,y_center:.328125},{w:1,h:1,x_center:.796875,y_center:.328125},{w:1,h:1,x_center:.796875,y_center:.328125},{w:1,h:1,x_center:.828125,y_center:.328125},{w:1,h:1,x_center:.828125,y_center:.328125},{w:1,h:1,x_center:.859375,y_center:.328125},{w:1,h:1,x_center:.859375,y_center:.328125},{w:1,h:1,x_center:.890625,y_center:.328125},{w:1,h:1,x_center:.890625,y_center:.328125},{w:1,h:1,x_center:.921875,y_center:.328125},{w:1,h:1,x_center:.921875,y_center:.328125},{w:1,h:1,x_center:.953125,y_center:.328125},{w:1,h:1,x_center:.953125,y_center:.328125},{w:1,h:1,x_center:.984375,y_center:.328125},{w:1,h:1,x_center:.984375,y_center:.328125},{w:1,h:1,x_center:.015625,y_center:.359375},{w:1,h:1,x_center:.015625,y_center:.359375},{w:1,h:1,x_center:.046875,y_center:.359375},{w:1,h:1,x_center:.046875,y_center:.359375},{w:1,h:1,x_center:.078125,y_center:.359375},{w:1,h:1,x_center:.078125,y_center:.359375},{w:1,h:1,x_center:.109375,y_center:.359375},{w:1,h:1,x_center:.109375,y_center:.359375},{w:1,h:1,x_center:.140625,y_center:.359375},{w:1,h:1,x_center:.140625,y_center:.359375},{w:1,h:1,x_center:.171875,y_center:.359375},{w:1,h:1,x_center:.171875,y_center:.359375},{w:1,h:1,x_center:.203125,y_center:.359375},{w:1,h:1,x_center:.203125,y_center:.359375},{w:1,h:1,x_center:.234375,y_center:.359375},{w:1,h:1,x_center:.234375,y_center:.359375},{w:1,h:1,x_center:.265625,y_center:.359375},{w:1,h:1,x_center:.265625,y_center:.359375},{w:1,h:1,x_center:.296875,y_center:.359375},{w:1,h:1,x_center:.296875,y_center:.359375},{w:1,h:1,x_center:.328125,y_center:.359375},{w:1,h:1,x_center:.328125,y_center:.359375},{w:1,h:1,x_center:.359375,y_center:.359375},{w:1,h:1,x_center:.359375,y_center:.359375},{w:1,h:1,x_center:.390625,y_center:.359375},{w:1,h:1,x_center:.390625,y_center:.359375},{w:1,h:1,x_center:.421875,y_center:.359375},{w:1,h:1,x_center:.421875,y_center:.359375},{w:1,h:1,x_center:.453125,y_center:.359375},{w:1,h:1,x_center:.453125,y_center:.359375},{w:1,h:1,x_center:.484375,y_center:.359375},{w:1,h:1,x_center:.484375,y_center:.359375},{w:1,h:1,x_center:.515625,y_center:.359375},{w:1,h:1,x_center:.515625,y_center:.359375},{w:1,h:1,x_center:.546875,y_center:.359375},{w:1,h:1,x_center:.546875,y_center:.359375},{w:1,h:1,x_center:.578125,y_center:.359375},{w:1,h:1,x_center:.578125,y_center:.359375},{w:1,h:1,x_center:.609375,y_center:.359375},{w:1,h:1,x_center:.609375,y_center:.359375},{w:1,h:1,x_center:.640625,y_center:.359375},{w:1,h:1,x_center:.640625,y_center:.359375},{w:1,h:1,x_center:.671875,y_center:.359375},{w:1,h:1,x_center:.671875,y_center:.359375},{w:1,h:1,x_center:.703125,y_center:.359375},{w:1,h:1,x_center:.703125,y_center:.359375},{w:1,h:1,x_center:.734375,y_center:.359375},{w:1,h:1,x_center:.734375,y_center:.359375},{w:1,h:1,x_center:.765625,y_center:.359375},{w:1,h:1,x_center:.765625,y_center:.359375},{w:1,h:1,x_center:.796875,y_center:.359375},{w:1,h:1,x_center:.796875,y_center:.359375},{w:1,h:1,x_center:.828125,y_center:.359375},{w:1,h:1,x_center:.828125,y_center:.359375},{w:1,h:1,x_center:.859375,y_center:.359375},{w:1,h:1,x_center:.859375,y_center:.359375},{w:1,h:1,x_center:.890625,y_center:.359375},{w:1,h:1,x_center:.890625,y_center:.359375},{w:1,h:1,x_center:.921875,y_center:.359375},{w:1,h:1,x_center:.921875,y_center:.359375},{w:1,h:1,x_center:.953125,y_center:.359375},{w:1,h:1,x_center:.953125,y_center:.359375},{w:1,h:1,x_center:.984375,y_center:.359375},{w:1,h:1,x_center:.984375,y_center:.359375},{w:1,h:1,x_center:.015625,y_center:.390625},{w:1,h:1,x_center:.015625,y_center:.390625},{w:1,h:1,x_center:.046875,y_center:.390625},{w:1,h:1,x_center:.046875,y_center:.390625},{w:1,h:1,x_center:.078125,y_center:.390625},{w:1,h:1,x_center:.078125,y_center:.390625},{w:1,h:1,x_center:.109375,y_center:.390625},{w:1,h:1,x_center:.109375,y_center:.390625},{w:1,h:1,x_center:.140625,y_center:.390625},{w:1,h:1,x_center:.140625,y_center:.390625},{w:1,h:1,x_center:.171875,y_center:.390625},{w:1,h:1,x_center:.171875,y_center:.390625},{w:1,h:1,x_center:.203125,y_center:.390625},{w:1,h:1,x_center:.203125,y_center:.390625},{w:1,h:1,x_center:.234375,y_center:.390625},{w:1,h:1,x_center:.234375,y_center:.390625},{w:1,h:1,x_center:.265625,y_center:.390625},{w:1,h:1,x_center:.265625,y_center:.390625},{w:1,h:1,x_center:.296875,y_center:.390625},{w:1,h:1,x_center:.296875,y_center:.390625},{w:1,h:1,x_center:.328125,y_center:.390625},{w:1,h:1,x_center:.328125,y_center:.390625},{w:1,h:1,x_center:.359375,y_center:.390625},{w:1,h:1,x_center:.359375,y_center:.390625},{w:1,h:1,x_center:.390625,y_center:.390625},{w:1,h:1,x_center:.390625,y_center:.390625},{w:1,h:1,x_center:.421875,y_center:.390625},{w:1,h:1,x_center:.421875,y_center:.390625},{w:1,h:1,x_center:.453125,y_center:.390625},{w:1,h:1,x_center:.453125,y_center:.390625},{w:1,h:1,x_center:.484375,y_center:.390625},{w:1,h:1,x_center:.484375,y_center:.390625},{w:1,h:1,x_center:.515625,y_center:.390625},{w:1,h:1,x_center:.515625,y_center:.390625},{w:1,h:1,x_center:.546875,y_center:.390625},{w:1,h:1,x_center:.546875,y_center:.390625},{w:1,h:1,x_center:.578125,y_center:.390625},{w:1,h:1,x_center:.578125,y_center:.390625},{w:1,h:1,x_center:.609375,y_center:.390625},{w:1,h:1,x_center:.609375,y_center:.390625},{w:1,h:1,x_center:.640625,y_center:.390625},{w:1,h:1,x_center:.640625,y_center:.390625},{w:1,h:1,x_center:.671875,y_center:.390625},{w:1,h:1,x_center:.671875,y_center:.390625},{w:1,h:1,x_center:.703125,y_center:.390625},{w:1,h:1,x_center:.703125,y_center:.390625},{w:1,h:1,x_center:.734375,y_center:.390625},{w:1,h:1,x_center:.734375,y_center:.390625},{w:1,h:1,x_center:.765625,y_center:.390625},{w:1,h:1,x_center:.765625,y_center:.390625},{w:1,h:1,x_center:.796875,y_center:.390625},{w:1,h:1,x_center:.796875,y_center:.390625},{w:1,h:1,x_center:.828125,y_center:.390625},{w:1,h:1,x_center:.828125,y_center:.390625},{w:1,h:1,x_center:.859375,y_center:.390625},{w:1,h:1,x_center:.859375,y_center:.390625},{w:1,h:1,x_center:.890625,y_center:.390625},{w:1,h:1,x_center:.890625,y_center:.390625},{w:1,h:1,x_center:.921875,y_center:.390625},{w:1,h:1,x_center:.921875,y_center:.390625},{w:1,h:1,x_center:.953125,y_center:.390625},{w:1,h:1,x_center:.953125,y_center:.390625},{w:1,h:1,x_center:.984375,y_center:.390625},{w:1,h:1,x_center:.984375,y_center:.390625},{w:1,h:1,x_center:.015625,y_center:.421875},{w:1,h:1,x_center:.015625,y_center:.421875},{w:1,h:1,x_center:.046875,y_center:.421875},{w:1,h:1,x_center:.046875,y_center:.421875},{w:1,h:1,x_center:.078125,y_center:.421875},{w:1,h:1,x_center:.078125,y_center:.421875},{w:1,h:1,x_center:.109375,y_center:.421875},{w:1,h:1,x_center:.109375,y_center:.421875},{w:1,h:1,x_center:.140625,y_center:.421875},{w:1,h:1,x_center:.140625,y_center:.421875},{w:1,h:1,x_center:.171875,y_center:.421875},{w:1,h:1,x_center:.171875,y_center:.421875},{w:1,h:1,x_center:.203125,y_center:.421875},{w:1,h:1,x_center:.203125,y_center:.421875},{w:1,h:1,x_center:.234375,y_center:.421875},{w:1,h:1,x_center:.234375,y_center:.421875},{w:1,h:1,x_center:.265625,y_center:.421875},{w:1,h:1,x_center:.265625,y_center:.421875},{w:1,h:1,x_center:.296875,y_center:.421875},{w:1,h:1,x_center:.296875,y_center:.421875},{w:1,h:1,x_center:.328125,y_center:.421875},{w:1,h:1,x_center:.328125,y_center:.421875},{w:1,h:1,x_center:.359375,y_center:.421875},{w:1,h:1,x_center:.359375,y_center:.421875},{w:1,h:1,x_center:.390625,y_center:.421875},{w:1,h:1,x_center:.390625,y_center:.421875},{w:1,h:1,x_center:.421875,y_center:.421875},{w:1,h:1,x_center:.421875,y_center:.421875},{w:1,h:1,x_center:.453125,y_center:.421875},{w:1,h:1,x_center:.453125,y_center:.421875},{w:1,h:1,x_center:.484375,y_center:.421875},{w:1,h:1,x_center:.484375,y_center:.421875},{w:1,h:1,x_center:.515625,y_center:.421875},{w:1,h:1,x_center:.515625,y_center:.421875},{w:1,h:1,x_center:.546875,y_center:.421875},{w:1,h:1,x_center:.546875,y_center:.421875},{w:1,h:1,x_center:.578125,y_center:.421875},{w:1,h:1,x_center:.578125,y_center:.421875},{w:1,h:1,x_center:.609375,y_center:.421875},{w:1,h:1,x_center:.609375,y_center:.421875},{w:1,h:1,x_center:.640625,y_center:.421875},{w:1,h:1,x_center:.640625,y_center:.421875},{w:1,h:1,x_center:.671875,y_center:.421875},{w:1,h:1,x_center:.671875,y_center:.421875},{w:1,h:1,x_center:.703125,y_center:.421875},{w:1,h:1,x_center:.703125,y_center:.421875},{w:1,h:1,x_center:.734375,y_center:.421875},{w:1,h:1,x_center:.734375,y_center:.421875},{w:1,h:1,x_center:.765625,y_center:.421875},{w:1,h:1,x_center:.765625,y_center:.421875},{w:1,h:1,x_center:.796875,y_center:.421875},{w:1,h:1,x_center:.796875,y_center:.421875},{w:1,h:1,x_center:.828125,y_center:.421875},{w:1,h:1,x_center:.828125,y_center:.421875},{w:1,h:1,x_center:.859375,y_center:.421875},{w:1,h:1,x_center:.859375,y_center:.421875},{w:1,h:1,x_center:.890625,y_center:.421875},{w:1,h:1,x_center:.890625,y_center:.421875},{w:1,h:1,x_center:.921875,y_center:.421875},{w:1,h:1,x_center:.921875,y_center:.421875},{w:1,h:1,x_center:.953125,y_center:.421875},{w:1,h:1,x_center:.953125,y_center:.421875},{w:1,h:1,x_center:.984375,y_center:.421875},{w:1,h:1,x_center:.984375,y_center:.421875},{w:1,h:1,x_center:.015625,y_center:.453125},{w:1,h:1,x_center:.015625,y_center:.453125},{w:1,h:1,x_center:.046875,y_center:.453125},{w:1,h:1,x_center:.046875,y_center:.453125},{w:1,h:1,x_center:.078125,y_center:.453125},{w:1,h:1,x_center:.078125,y_center:.453125},{w:1,h:1,x_center:.109375,y_center:.453125},{w:1,h:1,x_center:.109375,y_center:.453125},{w:1,h:1,x_center:.140625,y_center:.453125},{w:1,h:1,x_center:.140625,y_center:.453125},{w:1,h:1,x_center:.171875,y_center:.453125},{w:1,h:1,x_center:.171875,y_center:.453125},{w:1,h:1,x_center:.203125,y_center:.453125},{w:1,h:1,x_center:.203125,y_center:.453125},{w:1,h:1,x_center:.234375,y_center:.453125},{w:1,h:1,x_center:.234375,y_center:.453125},{w:1,h:1,x_center:.265625,y_center:.453125},{w:1,h:1,x_center:.265625,y_center:.453125},{w:1,h:1,x_center:.296875,y_center:.453125},{w:1,h:1,x_center:.296875,y_center:.453125},{w:1,h:1,x_center:.328125,y_center:.453125},{w:1,h:1,x_center:.328125,y_center:.453125},{w:1,h:1,x_center:.359375,y_center:.453125},{w:1,h:1,x_center:.359375,y_center:.453125},{w:1,h:1,x_center:.390625,y_center:.453125},{w:1,h:1,x_center:.390625,y_center:.453125},{w:1,h:1,x_center:.421875,y_center:.453125},{w:1,h:1,x_center:.421875,y_center:.453125},{w:1,h:1,x_center:.453125,y_center:.453125},{w:1,h:1,x_center:.453125,y_center:.453125},{w:1,h:1,x_center:.484375,y_center:.453125},{w:1,h:1,x_center:.484375,y_center:.453125},{w:1,h:1,x_center:.515625,y_center:.453125},{w:1,h:1,x_center:.515625,y_center:.453125},{w:1,h:1,x_center:.546875,y_center:.453125},{w:1,h:1,x_center:.546875,y_center:.453125},{w:1,h:1,x_center:.578125,y_center:.453125},{w:1,h:1,x_center:.578125,y_center:.453125},{w:1,h:1,x_center:.609375,y_center:.453125},{w:1,h:1,x_center:.609375,y_center:.453125},{w:1,h:1,x_center:.640625,y_center:.453125},{w:1,h:1,x_center:.640625,y_center:.453125},{w:1,h:1,x_center:.671875,y_center:.453125},{w:1,h:1,x_center:.671875,y_center:.453125},{w:1,h:1,x_center:.703125,y_center:.453125},{w:1,h:1,x_center:.703125,y_center:.453125},{w:1,h:1,x_center:.734375,y_center:.453125},{w:1,h:1,x_center:.734375,y_center:.453125},{w:1,h:1,x_center:.765625,y_center:.453125},{w:1,h:1,x_center:.765625,y_center:.453125},{w:1,h:1,x_center:.796875,y_center:.453125},{w:1,h:1,x_center:.796875,y_center:.453125},{w:1,h:1,x_center:.828125,y_center:.453125},{w:1,h:1,x_center:.828125,y_center:.453125},{w:1,h:1,x_center:.859375,y_center:.453125},{w:1,h:1,x_center:.859375,y_center:.453125},{w:1,h:1,x_center:.890625,y_center:.453125},{w:1,h:1,x_center:.890625,y_center:.453125},{w:1,h:1,x_center:.921875,y_center:.453125},{w:1,h:1,x_center:.921875,y_center:.453125},{w:1,h:1,x_center:.953125,y_center:.453125},{w:1,h:1,x_center:.953125,y_center:.453125},{w:1,h:1,x_center:.984375,y_center:.453125},{w:1,h:1,x_center:.984375,y_center:.453125},{w:1,h:1,x_center:.015625,y_center:.484375},{w:1,h:1,x_center:.015625,y_center:.484375},{w:1,h:1,x_center:.046875,y_center:.484375},{w:1,h:1,x_center:.046875,y_center:.484375},{w:1,h:1,x_center:.078125,y_center:.484375},{w:1,h:1,x_center:.078125,y_center:.484375},{w:1,h:1,x_center:.109375,y_center:.484375},{w:1,h:1,x_center:.109375,y_center:.484375},{w:1,h:1,x_center:.140625,y_center:.484375},{w:1,h:1,x_center:.140625,y_center:.484375},{w:1,h:1,x_center:.171875,y_center:.484375},{w:1,h:1,x_center:.171875,y_center:.484375},{w:1,h:1,x_center:.203125,y_center:.484375},{w:1,h:1,x_center:.203125,y_center:.484375},{w:1,h:1,x_center:.234375,y_center:.484375},{w:1,h:1,x_center:.234375,y_center:.484375},{w:1,h:1,x_center:.265625,y_center:.484375},{w:1,h:1,x_center:.265625,y_center:.484375},{w:1,h:1,x_center:.296875,y_center:.484375},{w:1,h:1,x_center:.296875,y_center:.484375},{w:1,h:1,x_center:.328125,y_center:.484375},{w:1,h:1,x_center:.328125,y_center:.484375},{w:1,h:1,x_center:.359375,y_center:.484375},{w:1,h:1,x_center:.359375,y_center:.484375},{w:1,h:1,x_center:.390625,y_center:.484375},{w:1,h:1,x_center:.390625,y_center:.484375},{w:1,h:1,x_center:.421875,y_center:.484375},{w:1,h:1,x_center:.421875,y_center:.484375},{w:1,h:1,x_center:.453125,y_center:.484375},{w:1,h:1,x_center:.453125,y_center:.484375},{w:1,h:1,x_center:.484375,y_center:.484375},{w:1,h:1,x_center:.484375,y_center:.484375},{w:1,h:1,x_center:.515625,y_center:.484375},{w:1,h:1,x_center:.515625,y_center:.484375},{w:1,h:1,x_center:.546875,y_center:.484375},{w:1,h:1,x_center:.546875,y_center:.484375},{w:1,h:1,x_center:.578125,y_center:.484375},{w:1,h:1,x_center:.578125,y_center:.484375},{w:1,h:1,x_center:.609375,y_center:.484375},{w:1,h:1,x_center:.609375,y_center:.484375},{w:1,h:1,x_center:.640625,y_center:.484375},{w:1,h:1,x_center:.640625,y_center:.484375},{w:1,h:1,x_center:.671875,y_center:.484375},{w:1,h:1,x_center:.671875,y_center:.484375},{w:1,h:1,x_center:.703125,y_center:.484375},{w:1,h:1,x_center:.703125,y_center:.484375},{w:1,h:1,x_center:.734375,y_center:.484375},{w:1,h:1,x_center:.734375,y_center:.484375},{w:1,h:1,x_center:.765625,y_center:.484375},{w:1,h:1,x_center:.765625,y_center:.484375},{w:1,h:1,x_center:.796875,y_center:.484375},{w:1,h:1,x_center:.796875,y_center:.484375},{w:1,h:1,x_center:.828125,y_center:.484375},{w:1,h:1,x_center:.828125,y_center:.484375},{w:1,h:1,x_center:.859375,y_center:.484375},{w:1,h:1,x_center:.859375,y_center:.484375},{w:1,h:1,x_center:.890625,y_center:.484375},{w:1,h:1,x_center:.890625,y_center:.484375},{w:1,h:1,x_center:.921875,y_center:.484375},{w:1,h:1,x_center:.921875,y_center:.484375},{w:1,h:1,x_center:.953125,y_center:.484375},{w:1,h:1,x_center:.953125,y_center:.484375},{w:1,h:1,x_center:.984375,y_center:.484375},{w:1,h:1,x_center:.984375,y_center:.484375},{w:1,h:1,x_center:.015625,y_center:.515625},{w:1,h:1,x_center:.015625,y_center:.515625},{w:1,h:1,x_center:.046875,y_center:.515625},{w:1,h:1,x_center:.046875,y_center:.515625},{w:1,h:1,x_center:.078125,y_center:.515625},{w:1,h:1,x_center:.078125,y_center:.515625},{w:1,h:1,x_center:.109375,y_center:.515625},{w:1,h:1,x_center:.109375,y_center:.515625},{w:1,h:1,x_center:.140625,y_center:.515625},{w:1,h:1,x_center:.140625,y_center:.515625},{w:1,h:1,x_center:.171875,y_center:.515625},{w:1,h:1,x_center:.171875,y_center:.515625},{w:1,h:1,x_center:.203125,y_center:.515625},{w:1,h:1,x_center:.203125,y_center:.515625},{w:1,h:1,x_center:.234375,y_center:.515625},{w:1,h:1,x_center:.234375,y_center:.515625},{w:1,h:1,x_center:.265625,y_center:.515625},{w:1,h:1,x_center:.265625,y_center:.515625},{w:1,h:1,x_center:.296875,y_center:.515625},{w:1,h:1,x_center:.296875,y_center:.515625},{w:1,h:1,x_center:.328125,y_center:.515625},{w:1,h:1,x_center:.328125,y_center:.515625},{w:1,h:1,x_center:.359375,y_center:.515625},{w:1,h:1,x_center:.359375,y_center:.515625},{w:1,h:1,x_center:.390625,y_center:.515625},{w:1,h:1,x_center:.390625,y_center:.515625},{w:1,h:1,x_center:.421875,y_center:.515625},{w:1,h:1,x_center:.421875,y_center:.515625},{w:1,h:1,x_center:.453125,y_center:.515625},{w:1,h:1,x_center:.453125,y_center:.515625},{w:1,h:1,x_center:.484375,y_center:.515625},{w:1,h:1,x_center:.484375,y_center:.515625},{w:1,h:1,x_center:.515625,y_center:.515625},{w:1,h:1,x_center:.515625,y_center:.515625},{w:1,h:1,x_center:.546875,y_center:.515625},{w:1,h:1,x_center:.546875,y_center:.515625},{w:1,h:1,x_center:.578125,y_center:.515625},{w:1,h:1,x_center:.578125,y_center:.515625},{w:1,h:1,x_center:.609375,y_center:.515625},{w:1,h:1,x_center:.609375,y_center:.515625},{w:1,h:1,x_center:.640625,y_center:.515625},{w:1,h:1,x_center:.640625,y_center:.515625},{w:1,h:1,x_center:.671875,y_center:.515625},{w:1,h:1,x_center:.671875,y_center:.515625},{w:1,h:1,x_center:.703125,y_center:.515625},{w:1,h:1,x_center:.703125,y_center:.515625},{w:1,h:1,x_center:.734375,y_center:.515625},{w:1,h:1,x_center:.734375,y_center:.515625},{w:1,h:1,x_center:.765625,y_center:.515625},{w:1,h:1,x_center:.765625,y_center:.515625},{w:1,h:1,x_center:.796875,y_center:.515625},{w:1,h:1,x_center:.796875,y_center:.515625},{w:1,h:1,x_center:.828125,y_center:.515625},{w:1,h:1,x_center:.828125,y_center:.515625},{w:1,h:1,x_center:.859375,y_center:.515625},{w:1,h:1,x_center:.859375,y_center:.515625},{w:1,h:1,x_center:.890625,y_center:.515625},{w:1,h:1,x_center:.890625,y_center:.515625},{w:1,h:1,x_center:.921875,y_center:.515625},{w:1,h:1,x_center:.921875,y_center:.515625},{w:1,h:1,x_center:.953125,y_center:.515625},{w:1,h:1,x_center:.953125,y_center:.515625},{w:1,h:1,x_center:.984375,y_center:.515625},{w:1,h:1,x_center:.984375,y_center:.515625},{w:1,h:1,x_center:.015625,y_center:.546875},{w:1,h:1,x_center:.015625,y_center:.546875},{w:1,h:1,x_center:.046875,y_center:.546875},{w:1,h:1,x_center:.046875,y_center:.546875},{w:1,h:1,x_center:.078125,y_center:.546875},{w:1,h:1,x_center:.078125,y_center:.546875},{w:1,h:1,x_center:.109375,y_center:.546875},{w:1,h:1,x_center:.109375,y_center:.546875},{w:1,h:1,x_center:.140625,y_center:.546875},{w:1,h:1,x_center:.140625,y_center:.546875},{w:1,h:1,x_center:.171875,y_center:.546875},{w:1,h:1,x_center:.171875,y_center:.546875},{w:1,h:1,x_center:.203125,y_center:.546875},{w:1,h:1,x_center:.203125,y_center:.546875},{w:1,h:1,x_center:.234375,y_center:.546875},{w:1,h:1,x_center:.234375,y_center:.546875},{w:1,h:1,x_center:.265625,y_center:.546875},{w:1,h:1,x_center:.265625,y_center:.546875},{w:1,h:1,x_center:.296875,y_center:.546875},{w:1,h:1,x_center:.296875,y_center:.546875},{w:1,h:1,x_center:.328125,y_center:.546875},{w:1,h:1,x_center:.328125,y_center:.546875},{w:1,h:1,x_center:.359375,y_center:.546875},{w:1,h:1,x_center:.359375,y_center:.546875},{w:1,h:1,x_center:.390625,y_center:.546875},{w:1,h:1,x_center:.390625,y_center:.546875},{w:1,h:1,x_center:.421875,y_center:.546875},{w:1,h:1,x_center:.421875,y_center:.546875},{w:1,h:1,x_center:.453125,y_center:.546875},{w:1,h:1,x_center:.453125,y_center:.546875},{w:1,h:1,x_center:.484375,y_center:.546875},{w:1,h:1,x_center:.484375,y_center:.546875},{w:1,h:1,x_center:.515625,y_center:.546875},{w:1,h:1,x_center:.515625,y_center:.546875},{w:1,h:1,x_center:.546875,y_center:.546875},{w:1,h:1,x_center:.546875,y_center:.546875},{w:1,h:1,x_center:.578125,y_center:.546875},{w:1,h:1,x_center:.578125,y_center:.546875},{w:1,h:1,x_center:.609375,y_center:.546875},{w:1,h:1,x_center:.609375,y_center:.546875},{w:1,h:1,x_center:.640625,y_center:.546875},{w:1,h:1,x_center:.640625,y_center:.546875},{w:1,h:1,x_center:.671875,y_center:.546875},{w:1,h:1,x_center:.671875,y_center:.546875},{w:1,h:1,x_center:.703125,y_center:.546875},{w:1,h:1,x_center:.703125,y_center:.546875},{w:1,h:1,x_center:.734375,y_center:.546875},{w:1,h:1,x_center:.734375,y_center:.546875},{w:1,h:1,x_center:.765625,y_center:.546875},{w:1,h:1,x_center:.765625,y_center:.546875},{w:1,h:1,x_center:.796875,y_center:.546875},{w:1,h:1,x_center:.796875,y_center:.546875},{w:1,h:1,x_center:.828125,y_center:.546875},{w:1,h:1,x_center:.828125,y_center:.546875},{w:1,h:1,x_center:.859375,y_center:.546875},{w:1,h:1,x_center:.859375,y_center:.546875},{w:1,h:1,x_center:.890625,y_center:.546875},{w:1,h:1,x_center:.890625,y_center:.546875},{w:1,h:1,x_center:.921875,y_center:.546875},{w:1,h:1,x_center:.921875,y_center:.546875},{w:1,h:1,x_center:.953125,y_center:.546875},{w:1,h:1,x_center:.953125,y_center:.546875},{w:1,h:1,x_center:.984375,y_center:.546875},{w:1,h:1,x_center:.984375,y_center:.546875},{w:1,h:1,x_center:.015625,y_center:.578125},{w:1,h:1,x_center:.015625,y_center:.578125},{w:1,h:1,x_center:.046875,y_center:.578125},{w:1,h:1,x_center:.046875,y_center:.578125},{w:1,h:1,x_center:.078125,y_center:.578125},{w:1,h:1,x_center:.078125,y_center:.578125},{w:1,h:1,x_center:.109375,y_center:.578125},{w:1,h:1,x_center:.109375,y_center:.578125},{w:1,h:1,x_center:.140625,y_center:.578125},{w:1,h:1,x_center:.140625,y_center:.578125},{w:1,h:1,x_center:.171875,y_center:.578125},{w:1,h:1,x_center:.171875,y_center:.578125},{w:1,h:1,x_center:.203125,y_center:.578125},{w:1,h:1,x_center:.203125,y_center:.578125},{w:1,h:1,x_center:.234375,y_center:.578125},{w:1,h:1,x_center:.234375,y_center:.578125},{w:1,h:1,x_center:.265625,y_center:.578125},{w:1,h:1,x_center:.265625,y_center:.578125},{w:1,h:1,x_center:.296875,y_center:.578125},{w:1,h:1,x_center:.296875,y_center:.578125},{w:1,h:1,x_center:.328125,y_center:.578125},{w:1,h:1,x_center:.328125,y_center:.578125},{w:1,h:1,x_center:.359375,y_center:.578125},{w:1,h:1,x_center:.359375,y_center:.578125},{w:1,h:1,x_center:.390625,y_center:.578125},{w:1,h:1,x_center:.390625,y_center:.578125},{w:1,h:1,x_center:.421875,y_center:.578125},{w:1,h:1,x_center:.421875,y_center:.578125},{w:1,h:1,x_center:.453125,y_center:.578125},{w:1,h:1,x_center:.453125,y_center:.578125},{w:1,h:1,x_center:.484375,y_center:.578125},{w:1,h:1,x_center:.484375,y_center:.578125},{w:1,h:1,x_center:.515625,y_center:.578125},{w:1,h:1,x_center:.515625,y_center:.578125},{w:1,h:1,x_center:.546875,y_center:.578125},{w:1,h:1,x_center:.546875,y_center:.578125},{w:1,h:1,x_center:.578125,y_center:.578125},{w:1,h:1,x_center:.578125,y_center:.578125},{w:1,h:1,x_center:.609375,y_center:.578125},{w:1,h:1,x_center:.609375,y_center:.578125},{w:1,h:1,x_center:.640625,y_center:.578125},{w:1,h:1,x_center:.640625,y_center:.578125},{w:1,h:1,x_center:.671875,y_center:.578125},{w:1,h:1,x_center:.671875,y_center:.578125},{w:1,h:1,x_center:.703125,y_center:.578125},{w:1,h:1,x_center:.703125,y_center:.578125},{w:1,h:1,x_center:.734375,y_center:.578125},{w:1,h:1,x_center:.734375,y_center:.578125},{w:1,h:1,x_center:.765625,y_center:.578125},{w:1,h:1,x_center:.765625,y_center:.578125},{w:1,h:1,x_center:.796875,y_center:.578125},{w:1,h:1,x_center:.796875,y_center:.578125},{w:1,h:1,x_center:.828125,y_center:.578125},{w:1,h:1,x_center:.828125,y_center:.578125},{w:1,h:1,x_center:.859375,y_center:.578125},{w:1,h:1,x_center:.859375,y_center:.578125},{w:1,h:1,x_center:.890625,y_center:.578125},{w:1,h:1,x_center:.890625,y_center:.578125},{w:1,h:1,x_center:.921875,y_center:.578125},{w:1,h:1,x_center:.921875,y_center:.578125},{w:1,h:1,x_center:.953125,y_center:.578125},{w:1,h:1,x_center:.953125,y_center:.578125},{w:1,h:1,x_center:.984375,y_center:.578125},{w:1,h:1,x_center:.984375,y_center:.578125},{w:1,h:1,x_center:.015625,y_center:.609375},{w:1,h:1,x_center:.015625,y_center:.609375},{w:1,h:1,x_center:.046875,y_center:.609375},{w:1,h:1,x_center:.046875,y_center:.609375},{w:1,h:1,x_center:.078125,y_center:.609375},{w:1,h:1,x_center:.078125,y_center:.609375},{w:1,h:1,x_center:.109375,y_center:.609375},{w:1,h:1,x_center:.109375,y_center:.609375},{w:1,h:1,x_center:.140625,y_center:.609375},{w:1,h:1,x_center:.140625,y_center:.609375},{w:1,h:1,x_center:.171875,y_center:.609375},{w:1,h:1,x_center:.171875,y_center:.609375},{w:1,h:1,x_center:.203125,y_center:.609375},{w:1,h:1,x_center:.203125,y_center:.609375},{w:1,h:1,x_center:.234375,y_center:.609375},{w:1,h:1,x_center:.234375,y_center:.609375},{w:1,h:1,x_center:.265625,y_center:.609375},{w:1,h:1,x_center:.265625,y_center:.609375},{w:1,h:1,x_center:.296875,y_center:.609375},{w:1,h:1,x_center:.296875,y_center:.609375},{w:1,h:1,x_center:.328125,y_center:.609375},{w:1,h:1,x_center:.328125,y_center:.609375},{w:1,h:1,x_center:.359375,y_center:.609375},{w:1,h:1,x_center:.359375,y_center:.609375},{w:1,h:1,x_center:.390625,y_center:.609375},{w:1,h:1,x_center:.390625,y_center:.609375},{w:1,h:1,x_center:.421875,y_center:.609375},{w:1,h:1,x_center:.421875,y_center:.609375},{w:1,h:1,x_center:.453125,y_center:.609375},{w:1,h:1,x_center:.453125,y_center:.609375},{w:1,h:1,x_center:.484375,y_center:.609375},{w:1,h:1,x_center:.484375,y_center:.609375},{w:1,h:1,x_center:.515625,y_center:.609375},{w:1,h:1,x_center:.515625,y_center:.609375},{w:1,h:1,x_center:.546875,y_center:.609375},{w:1,h:1,x_center:.546875,y_center:.609375},{w:1,h:1,x_center:.578125,y_center:.609375},{w:1,h:1,x_center:.578125,y_center:.609375},{w:1,h:1,x_center:.609375,y_center:.609375},{w:1,h:1,x_center:.609375,y_center:.609375},{w:1,h:1,x_center:.640625,y_center:.609375},{w:1,h:1,x_center:.640625,y_center:.609375},{w:1,h:1,x_center:.671875,y_center:.609375},{w:1,h:1,x_center:.671875,y_center:.609375},{w:1,h:1,x_center:.703125,y_center:.609375},{w:1,h:1,x_center:.703125,y_center:.609375},{w:1,h:1,x_center:.734375,y_center:.609375},{w:1,h:1,x_center:.734375,y_center:.609375},{w:1,h:1,x_center:.765625,y_center:.609375},{w:1,h:1,x_center:.765625,y_center:.609375},{w:1,h:1,x_center:.796875,y_center:.609375},{w:1,h:1,x_center:.796875,y_center:.609375},{w:1,h:1,x_center:.828125,y_center:.609375},{w:1,h:1,x_center:.828125,y_center:.609375},{w:1,h:1,x_center:.859375,y_center:.609375},{w:1,h:1,x_center:.859375,y_center:.609375},{w:1,h:1,x_center:.890625,y_center:.609375},{w:1,h:1,x_center:.890625,y_center:.609375},{w:1,h:1,x_center:.921875,y_center:.609375},{w:1,h:1,x_center:.921875,y_center:.609375},{w:1,h:1,x_center:.953125,y_center:.609375},{w:1,h:1,x_center:.953125,y_center:.609375},{w:1,h:1,x_center:.984375,y_center:.609375},{w:1,h:1,x_center:.984375,y_center:.609375},{w:1,h:1,x_center:.015625,y_center:.640625},{w:1,h:1,x_center:.015625,y_center:.640625},{w:1,h:1,x_center:.046875,y_center:.640625},{w:1,h:1,x_center:.046875,y_center:.640625},{w:1,h:1,x_center:.078125,y_center:.640625},{w:1,h:1,x_center:.078125,y_center:.640625},{w:1,h:1,x_center:.109375,y_center:.640625},{w:1,h:1,x_center:.109375,y_center:.640625},{w:1,h:1,x_center:.140625,y_center:.640625},{w:1,h:1,x_center:.140625,y_center:.640625},{w:1,h:1,x_center:.171875,y_center:.640625},{w:1,h:1,x_center:.171875,y_center:.640625},{w:1,h:1,x_center:.203125,y_center:.640625},{w:1,h:1,x_center:.203125,y_center:.640625},{w:1,h:1,x_center:.234375,y_center:.640625},{w:1,h:1,x_center:.234375,y_center:.640625},{w:1,h:1,x_center:.265625,y_center:.640625},{w:1,h:1,x_center:.265625,y_center:.640625},{w:1,h:1,x_center:.296875,y_center:.640625},{w:1,h:1,x_center:.296875,y_center:.640625},{w:1,h:1,x_center:.328125,y_center:.640625},{w:1,h:1,x_center:.328125,y_center:.640625},{w:1,h:1,x_center:.359375,y_center:.640625},{w:1,h:1,x_center:.359375,y_center:.640625},{w:1,h:1,x_center:.390625,y_center:.640625},{w:1,h:1,x_center:.390625,y_center:.640625},{w:1,h:1,x_center:.421875,y_center:.640625},{w:1,h:1,x_center:.421875,y_center:.640625},{w:1,h:1,x_center:.453125,y_center:.640625},{w:1,h:1,x_center:.453125,y_center:.640625},{w:1,h:1,x_center:.484375,y_center:.640625},{w:1,h:1,x_center:.484375,y_center:.640625},{w:1,h:1,x_center:.515625,y_center:.640625},{w:1,h:1,x_center:.515625,y_center:.640625},{w:1,h:1,x_center:.546875,y_center:.640625},{w:1,h:1,x_center:.546875,y_center:.640625},{w:1,h:1,x_center:.578125,y_center:.640625},{w:1,h:1,x_center:.578125,y_center:.640625},{w:1,h:1,x_center:.609375,y_center:.640625},{w:1,h:1,x_center:.609375,y_center:.640625},{w:1,h:1,x_center:.640625,y_center:.640625},{w:1,h:1,x_center:.640625,y_center:.640625},{w:1,h:1,x_center:.671875,y_center:.640625},{w:1,h:1,x_center:.671875,y_center:.640625},{w:1,h:1,x_center:.703125,y_center:.640625},{w:1,h:1,x_center:.703125,y_center:.640625},{w:1,h:1,x_center:.734375,y_center:.640625},{w:1,h:1,x_center:.734375,y_center:.640625},{w:1,h:1,x_center:.765625,y_center:.640625},{w:1,h:1,x_center:.765625,y_center:.640625},{w:1,h:1,x_center:.796875,y_center:.640625},{w:1,h:1,x_center:.796875,y_center:.640625},{w:1,h:1,x_center:.828125,y_center:.640625},{w:1,h:1,x_center:.828125,y_center:.640625},{w:1,h:1,x_center:.859375,y_center:.640625},{w:1,h:1,x_center:.859375,y_center:.640625},{w:1,h:1,x_center:.890625,y_center:.640625},{w:1,h:1,x_center:.890625,y_center:.640625},{w:1,h:1,x_center:.921875,y_center:.640625},{w:1,h:1,x_center:.921875,y_center:.640625},{w:1,h:1,x_center:.953125,y_center:.640625},{w:1,h:1,x_center:.953125,y_center:.640625},{w:1,h:1,x_center:.984375,y_center:.640625},{w:1,h:1,x_center:.984375,y_center:.640625},{w:1,h:1,x_center:.015625,y_center:.671875},{w:1,h:1,x_center:.015625,y_center:.671875},{w:1,h:1,x_center:.046875,y_center:.671875},{w:1,h:1,x_center:.046875,y_center:.671875},{w:1,h:1,x_center:.078125,y_center:.671875},{w:1,h:1,x_center:.078125,y_center:.671875},{w:1,h:1,x_center:.109375,y_center:.671875},{w:1,h:1,x_center:.109375,y_center:.671875},{w:1,h:1,x_center:.140625,y_center:.671875},{w:1,h:1,x_center:.140625,y_center:.671875},{w:1,h:1,x_center:.171875,y_center:.671875},{w:1,h:1,x_center:.171875,y_center:.671875},{w:1,h:1,x_center:.203125,y_center:.671875},{w:1,h:1,x_center:.203125,y_center:.671875},{w:1,h:1,x_center:.234375,y_center:.671875},{w:1,h:1,x_center:.234375,y_center:.671875},{w:1,h:1,x_center:.265625,y_center:.671875},{w:1,h:1,x_center:.265625,y_center:.671875},{w:1,h:1,x_center:.296875,y_center:.671875},{w:1,h:1,x_center:.296875,y_center:.671875},{w:1,h:1,x_center:.328125,y_center:.671875},{w:1,h:1,x_center:.328125,y_center:.671875},{w:1,h:1,x_center:.359375,y_center:.671875},{w:1,h:1,x_center:.359375,y_center:.671875},{w:1,h:1,x_center:.390625,y_center:.671875},{w:1,h:1,x_center:.390625,y_center:.671875},{w:1,h:1,x_center:.421875,y_center:.671875},{w:1,h:1,x_center:.421875,y_center:.671875},{w:1,h:1,x_center:.453125,y_center:.671875},{w:1,h:1,x_center:.453125,y_center:.671875},{w:1,h:1,x_center:.484375,y_center:.671875},{w:1,h:1,x_center:.484375,y_center:.671875},{w:1,h:1,x_center:.515625,y_center:.671875},{w:1,h:1,x_center:.515625,y_center:.671875},{w:1,h:1,x_center:.546875,y_center:.671875},{w:1,h:1,x_center:.546875,y_center:.671875},{w:1,h:1,x_center:.578125,y_center:.671875},{w:1,h:1,x_center:.578125,y_center:.671875},{w:1,h:1,x_center:.609375,y_center:.671875},{w:1,h:1,x_center:.609375,y_center:.671875},{w:1,h:1,x_center:.640625,y_center:.671875},{w:1,h:1,x_center:.640625,y_center:.671875},{w:1,h:1,x_center:.671875,y_center:.671875},{w:1,h:1,x_center:.671875,y_center:.671875},{w:1,h:1,x_center:.703125,y_center:.671875},{w:1,h:1,x_center:.703125,y_center:.671875},{w:1,h:1,x_center:.734375,y_center:.671875},{w:1,h:1,x_center:.734375,y_center:.671875},{w:1,h:1,x_center:.765625,y_center:.671875},{w:1,h:1,x_center:.765625,y_center:.671875},{w:1,h:1,x_center:.796875,y_center:.671875},{w:1,h:1,x_center:.796875,y_center:.671875},{w:1,h:1,x_center:.828125,y_center:.671875},{w:1,h:1,x_center:.828125,y_center:.671875},{w:1,h:1,x_center:.859375,y_center:.671875},{w:1,h:1,x_center:.859375,y_center:.671875},{w:1,h:1,x_center:.890625,y_center:.671875},{w:1,h:1,x_center:.890625,y_center:.671875},{w:1,h:1,x_center:.921875,y_center:.671875},{w:1,h:1,x_center:.921875,y_center:.671875},{w:1,h:1,x_center:.953125,y_center:.671875},{w:1,h:1,x_center:.953125,y_center:.671875},{w:1,h:1,x_center:.984375,y_center:.671875},{w:1,h:1,x_center:.984375,y_center:.671875},{w:1,h:1,x_center:.015625,y_center:.703125},{w:1,h:1,x_center:.015625,y_center:.703125},{w:1,h:1,x_center:.046875,y_center:.703125},{w:1,h:1,x_center:.046875,y_center:.703125},{w:1,h:1,x_center:.078125,y_center:.703125},{w:1,h:1,x_center:.078125,y_center:.703125},{w:1,h:1,x_center:.109375,y_center:.703125},{w:1,h:1,x_center:.109375,y_center:.703125},{w:1,h:1,x_center:.140625,y_center:.703125},{w:1,h:1,x_center:.140625,y_center:.703125},{w:1,h:1,x_center:.171875,y_center:.703125},{w:1,h:1,x_center:.171875,y_center:.703125},{w:1,h:1,x_center:.203125,y_center:.703125},{w:1,h:1,x_center:.203125,y_center:.703125},{w:1,h:1,x_center:.234375,y_center:.703125},{w:1,h:1,x_center:.234375,y_center:.703125},{w:1,h:1,x_center:.265625,y_center:.703125},{w:1,h:1,x_center:.265625,y_center:.703125},{w:1,h:1,x_center:.296875,y_center:.703125},{w:1,h:1,x_center:.296875,y_center:.703125},{w:1,h:1,x_center:.328125,y_center:.703125},{w:1,h:1,x_center:.328125,y_center:.703125},{w:1,h:1,x_center:.359375,y_center:.703125},{w:1,h:1,x_center:.359375,y_center:.703125},{w:1,h:1,x_center:.390625,y_center:.703125},{w:1,h:1,x_center:.390625,y_center:.703125},{w:1,h:1,x_center:.421875,y_center:.703125},{w:1,h:1,x_center:.421875,y_center:.703125},{w:1,h:1,x_center:.453125,y_center:.703125},{w:1,h:1,x_center:.453125,y_center:.703125},{w:1,h:1,x_center:.484375,y_center:.703125},{w:1,h:1,x_center:.484375,y_center:.703125},{w:1,h:1,x_center:.515625,y_center:.703125},{w:1,h:1,x_center:.515625,y_center:.703125},{w:1,h:1,x_center:.546875,y_center:.703125},{w:1,h:1,x_center:.546875,y_center:.703125},{w:1,h:1,x_center:.578125,y_center:.703125},{w:1,h:1,x_center:.578125,y_center:.703125},{w:1,h:1,x_center:.609375,y_center:.703125},{w:1,h:1,x_center:.609375,y_center:.703125},{w:1,h:1,x_center:.640625,y_center:.703125},{w:1,h:1,x_center:.640625,y_center:.703125},{w:1,h:1,x_center:.671875,y_center:.703125},{w:1,h:1,x_center:.671875,y_center:.703125},{w:1,h:1,x_center:.703125,y_center:.703125},{w:1,h:1,x_center:.703125,y_center:.703125},{w:1,h:1,x_center:.734375,y_center:.703125},{w:1,h:1,x_center:.734375,y_center:.703125},{w:1,h:1,x_center:.765625,y_center:.703125},{w:1,h:1,x_center:.765625,y_center:.703125},{w:1,h:1,x_center:.796875,y_center:.703125},{w:1,h:1,x_center:.796875,y_center:.703125},{w:1,h:1,x_center:.828125,y_center:.703125},{w:1,h:1,x_center:.828125,y_center:.703125},{w:1,h:1,x_center:.859375,y_center:.703125},{w:1,h:1,x_center:.859375,y_center:.703125},{w:1,h:1,x_center:.890625,y_center:.703125},{w:1,h:1,x_center:.890625,y_center:.703125},{w:1,h:1,x_center:.921875,y_center:.703125},{w:1,h:1,x_center:.921875,y_center:.703125},{w:1,h:1,x_center:.953125,y_center:.703125},{w:1,h:1,x_center:.953125,y_center:.703125},{w:1,h:1,x_center:.984375,y_center:.703125},{w:1,h:1,x_center:.984375,y_center:.703125},{w:1,h:1,x_center:.015625,y_center:.734375},{w:1,h:1,x_center:.015625,y_center:.734375},{w:1,h:1,x_center:.046875,y_center:.734375},{w:1,h:1,x_center:.046875,y_center:.734375},{w:1,h:1,x_center:.078125,y_center:.734375},{w:1,h:1,x_center:.078125,y_center:.734375},{w:1,h:1,x_center:.109375,y_center:.734375},{w:1,h:1,x_center:.109375,y_center:.734375},{w:1,h:1,x_center:.140625,y_center:.734375},{w:1,h:1,x_center:.140625,y_center:.734375},{w:1,h:1,x_center:.171875,y_center:.734375},{w:1,h:1,x_center:.171875,y_center:.734375},{w:1,h:1,x_center:.203125,y_center:.734375},{w:1,h:1,x_center:.203125,y_center:.734375},{w:1,h:1,x_center:.234375,y_center:.734375},{w:1,h:1,x_center:.234375,y_center:.734375},{w:1,h:1,x_center:.265625,y_center:.734375},{w:1,h:1,x_center:.265625,y_center:.734375},{w:1,h:1,x_center:.296875,y_center:.734375},{w:1,h:1,x_center:.296875,y_center:.734375},{w:1,h:1,x_center:.328125,y_center:.734375},{w:1,h:1,x_center:.328125,y_center:.734375},{w:1,h:1,x_center:.359375,y_center:.734375},{w:1,h:1,x_center:.359375,y_center:.734375},{w:1,h:1,x_center:.390625,y_center:.734375},{w:1,h:1,x_center:.390625,y_center:.734375},{w:1,h:1,x_center:.421875,y_center:.734375},{w:1,h:1,x_center:.421875,y_center:.734375},{w:1,h:1,x_center:.453125,y_center:.734375},{w:1,h:1,x_center:.453125,y_center:.734375},{w:1,h:1,x_center:.484375,y_center:.734375},{w:1,h:1,x_center:.484375,y_center:.734375},{w:1,h:1,x_center:.515625,y_center:.734375},{w:1,h:1,x_center:.515625,y_center:.734375},{w:1,h:1,x_center:.546875,y_center:.734375},{w:1,h:1,x_center:.546875,y_center:.734375},{w:1,h:1,x_center:.578125,y_center:.734375},{w:1,h:1,x_center:.578125,y_center:.734375},{w:1,h:1,x_center:.609375,y_center:.734375},{w:1,h:1,x_center:.609375,y_center:.734375},{w:1,h:1,x_center:.640625,y_center:.734375},{w:1,h:1,x_center:.640625,y_center:.734375},{w:1,h:1,x_center:.671875,y_center:.734375},{w:1,h:1,x_center:.671875,y_center:.734375},{w:1,h:1,x_center:.703125,y_center:.734375},{w:1,h:1,x_center:.703125,y_center:.734375},{w:1,h:1,x_center:.734375,y_center:.734375},{w:1,h:1,x_center:.734375,y_center:.734375},{w:1,h:1,x_center:.765625,y_center:.734375},{w:1,h:1,x_center:.765625,y_center:.734375},{w:1,h:1,x_center:.796875,y_center:.734375},{w:1,h:1,x_center:.796875,y_center:.734375},{w:1,h:1,x_center:.828125,y_center:.734375},{w:1,h:1,x_center:.828125,y_center:.734375},{w:1,h:1,x_center:.859375,y_center:.734375},{w:1,h:1,x_center:.859375,y_center:.734375},{w:1,h:1,x_center:.890625,y_center:.734375},{w:1,h:1,x_center:.890625,y_center:.734375},{w:1,h:1,x_center:.921875,y_center:.734375},{w:1,h:1,x_center:.921875,y_center:.734375},{w:1,h:1,x_center:.953125,y_center:.734375},{w:1,h:1,x_center:.953125,y_center:.734375},{w:1,h:1,x_center:.984375,y_center:.734375},{w:1,h:1,x_center:.984375,y_center:.734375},{w:1,h:1,x_center:.015625,y_center:.765625},{w:1,h:1,x_center:.015625,y_center:.765625},{w:1,h:1,x_center:.046875,y_center:.765625},{w:1,h:1,x_center:.046875,y_center:.765625},{w:1,h:1,x_center:.078125,y_center:.765625},{w:1,h:1,x_center:.078125,y_center:.765625},{w:1,h:1,x_center:.109375,y_center:.765625},{w:1,h:1,x_center:.109375,y_center:.765625},{w:1,h:1,x_center:.140625,y_center:.765625},{w:1,h:1,x_center:.140625,y_center:.765625},{w:1,h:1,x_center:.171875,y_center:.765625},{w:1,h:1,x_center:.171875,y_center:.765625},{w:1,h:1,x_center:.203125,y_center:.765625},{w:1,h:1,x_center:.203125,y_center:.765625},{w:1,h:1,x_center:.234375,y_center:.765625},{w:1,h:1,x_center:.234375,y_center:.765625},{w:1,h:1,x_center:.265625,y_center:.765625},{w:1,h:1,x_center:.265625,y_center:.765625},{w:1,h:1,x_center:.296875,y_center:.765625},{w:1,h:1,x_center:.296875,y_center:.765625},{w:1,h:1,x_center:.328125,y_center:.765625},{w:1,h:1,x_center:.328125,y_center:.765625},{w:1,h:1,x_center:.359375,y_center:.765625},{w:1,h:1,x_center:.359375,y_center:.765625},{w:1,h:1,x_center:.390625,y_center:.765625},{w:1,h:1,x_center:.390625,y_center:.765625},{w:1,h:1,x_center:.421875,y_center:.765625},{w:1,h:1,x_center:.421875,y_center:.765625},{w:1,h:1,x_center:.453125,y_center:.765625},{w:1,h:1,x_center:.453125,y_center:.765625},{w:1,h:1,x_center:.484375,y_center:.765625},{w:1,h:1,x_center:.484375,y_center:.765625},{w:1,h:1,x_center:.515625,y_center:.765625},{w:1,h:1,x_center:.515625,y_center:.765625},{w:1,h:1,x_center:.546875,y_center:.765625},{w:1,h:1,x_center:.546875,y_center:.765625},{w:1,h:1,x_center:.578125,y_center:.765625},{w:1,h:1,x_center:.578125,y_center:.765625},{w:1,h:1,x_center:.609375,y_center:.765625},{w:1,h:1,x_center:.609375,y_center:.765625},{w:1,h:1,x_center:.640625,y_center:.765625},{w:1,h:1,x_center:.640625,y_center:.765625},{w:1,h:1,x_center:.671875,y_center:.765625},{w:1,h:1,x_center:.671875,y_center:.765625},{w:1,h:1,x_center:.703125,y_center:.765625},{w:1,h:1,x_center:.703125,y_center:.765625},{w:1,h:1,x_center:.734375,y_center:.765625},{w:1,h:1,x_center:.734375,y_center:.765625},{w:1,h:1,x_center:.765625,y_center:.765625},{w:1,h:1,x_center:.765625,y_center:.765625},{w:1,h:1,x_center:.796875,y_center:.765625},{w:1,h:1,x_center:.796875,y_center:.765625},{w:1,h:1,x_center:.828125,y_center:.765625},{w:1,h:1,x_center:.828125,y_center:.765625},{w:1,h:1,x_center:.859375,y_center:.765625},{w:1,h:1,x_center:.859375,y_center:.765625},{w:1,h:1,x_center:.890625,y_center:.765625},{w:1,h:1,x_center:.890625,y_center:.765625},{w:1,h:1,x_center:.921875,y_center:.765625},{w:1,h:1,x_center:.921875,y_center:.765625},{w:1,h:1,x_center:.953125,y_center:.765625},{w:1,h:1,x_center:.953125,y_center:.765625},{w:1,h:1,x_center:.984375,y_center:.765625},{w:1,h:1,x_center:.984375,y_center:.765625},{w:1,h:1,x_center:.015625,y_center:.796875},{w:1,h:1,x_center:.015625,y_center:.796875},{w:1,h:1,x_center:.046875,y_center:.796875},{w:1,h:1,x_center:.046875,y_center:.796875},{w:1,h:1,x_center:.078125,y_center:.796875},{w:1,h:1,x_center:.078125,y_center:.796875},{w:1,h:1,x_center:.109375,y_center:.796875},{w:1,h:1,x_center:.109375,y_center:.796875},{w:1,h:1,x_center:.140625,y_center:.796875},{w:1,h:1,x_center:.140625,y_center:.796875},{w:1,h:1,x_center:.171875,y_center:.796875},{w:1,h:1,x_center:.171875,y_center:.796875},{w:1,h:1,x_center:.203125,y_center:.796875},{w:1,h:1,x_center:.203125,y_center:.796875},{w:1,h:1,x_center:.234375,y_center:.796875},{w:1,h:1,x_center:.234375,y_center:.796875},{w:1,h:1,x_center:.265625,y_center:.796875},{w:1,h:1,x_center:.265625,y_center:.796875},{w:1,h:1,x_center:.296875,y_center:.796875},{w:1,h:1,x_center:.296875,y_center:.796875},{w:1,h:1,x_center:.328125,y_center:.796875},{w:1,h:1,x_center:.328125,y_center:.796875},{w:1,h:1,x_center:.359375,y_center:.796875},{w:1,h:1,x_center:.359375,y_center:.796875},{w:1,h:1,x_center:.390625,y_center:.796875},{w:1,h:1,x_center:.390625,y_center:.796875},{w:1,h:1,x_center:.421875,y_center:.796875},{w:1,h:1,x_center:.421875,y_center:.796875},{w:1,h:1,x_center:.453125,y_center:.796875},{w:1,h:1,x_center:.453125,y_center:.796875},{w:1,h:1,x_center:.484375,y_center:.796875},{w:1,h:1,x_center:.484375,y_center:.796875},{w:1,h:1,x_center:.515625,y_center:.796875},{w:1,h:1,x_center:.515625,y_center:.796875},{w:1,h:1,x_center:.546875,y_center:.796875},{w:1,h:1,x_center:.546875,y_center:.796875},{w:1,h:1,x_center:.578125,y_center:.796875},{w:1,h:1,x_center:.578125,y_center:.796875},{w:1,h:1,x_center:.609375,y_center:.796875},{w:1,h:1,x_center:.609375,y_center:.796875},{w:1,h:1,x_center:.640625,y_center:.796875},{w:1,h:1,x_center:.640625,y_center:.796875},{w:1,h:1,x_center:.671875,y_center:.796875},{w:1,h:1,x_center:.671875,y_center:.796875},{w:1,h:1,x_center:.703125,y_center:.796875},{w:1,h:1,x_center:.703125,y_center:.796875},{w:1,h:1,x_center:.734375,y_center:.796875},{w:1,h:1,x_center:.734375,y_center:.796875},{w:1,h:1,x_center:.765625,y_center:.796875},{w:1,h:1,x_center:.765625,y_center:.796875},{w:1,h:1,x_center:.796875,y_center:.796875},{w:1,h:1,x_center:.796875,y_center:.796875},{w:1,h:1,x_center:.828125,y_center:.796875},{w:1,h:1,x_center:.828125,y_center:.796875},{w:1,h:1,x_center:.859375,y_center:.796875},{w:1,h:1,x_center:.859375,y_center:.796875},{w:1,h:1,x_center:.890625,y_center:.796875},{w:1,h:1,x_center:.890625,y_center:.796875},{w:1,h:1,x_center:.921875,y_center:.796875},{w:1,h:1,x_center:.921875,y_center:.796875},{w:1,h:1,x_center:.953125,y_center:.796875},{w:1,h:1,x_center:.953125,y_center:.796875},{w:1,h:1,x_center:.984375,y_center:.796875},{w:1,h:1,x_center:.984375,y_center:.796875},{w:1,h:1,x_center:.015625,y_center:.828125},{w:1,h:1,x_center:.015625,y_center:.828125},{w:1,h:1,x_center:.046875,y_center:.828125},{w:1,h:1,x_center:.046875,y_center:.828125},{w:1,h:1,x_center:.078125,y_center:.828125},{w:1,h:1,x_center:.078125,y_center:.828125},{w:1,h:1,x_center:.109375,y_center:.828125},{w:1,h:1,x_center:.109375,y_center:.828125},{w:1,h:1,x_center:.140625,y_center:.828125},{w:1,h:1,x_center:.140625,y_center:.828125},{w:1,h:1,x_center:.171875,y_center:.828125},{w:1,h:1,x_center:.171875,y_center:.828125},{w:1,h:1,x_center:.203125,y_center:.828125},{w:1,h:1,x_center:.203125,y_center:.828125},{w:1,h:1,x_center:.234375,y_center:.828125},{w:1,h:1,x_center:.234375,y_center:.828125},{w:1,h:1,x_center:.265625,y_center:.828125},{w:1,h:1,x_center:.265625,y_center:.828125},{w:1,h:1,x_center:.296875,y_center:.828125},{w:1,h:1,x_center:.296875,y_center:.828125},{w:1,h:1,x_center:.328125,y_center:.828125},{w:1,h:1,x_center:.328125,y_center:.828125},{w:1,h:1,x_center:.359375,y_center:.828125},{w:1,h:1,x_center:.359375,y_center:.828125},{w:1,h:1,x_center:.390625,y_center:.828125},{w:1,h:1,x_center:.390625,y_center:.828125},{w:1,h:1,x_center:.421875,y_center:.828125},{w:1,h:1,x_center:.421875,y_center:.828125},{w:1,h:1,x_center:.453125,y_center:.828125},{w:1,h:1,x_center:.453125,y_center:.828125},{w:1,h:1,x_center:.484375,y_center:.828125},{w:1,h:1,x_center:.484375,y_center:.828125},{w:1,h:1,x_center:.515625,y_center:.828125},{w:1,h:1,x_center:.515625,y_center:.828125},{w:1,h:1,x_center:.546875,y_center:.828125},{w:1,h:1,x_center:.546875,y_center:.828125},{w:1,h:1,x_center:.578125,y_center:.828125},{w:1,h:1,x_center:.578125,y_center:.828125},{w:1,h:1,x_center:.609375,y_center:.828125},{w:1,h:1,x_center:.609375,y_center:.828125},{w:1,h:1,x_center:.640625,y_center:.828125},{w:1,h:1,x_center:.640625,y_center:.828125},{w:1,h:1,x_center:.671875,y_center:.828125},{w:1,h:1,x_center:.671875,y_center:.828125},{w:1,h:1,x_center:.703125,y_center:.828125},{w:1,h:1,x_center:.703125,y_center:.828125},{w:1,h:1,x_center:.734375,y_center:.828125},{w:1,h:1,x_center:.734375,y_center:.828125},{w:1,h:1,x_center:.765625,y_center:.828125},{w:1,h:1,x_center:.765625,y_center:.828125},{w:1,h:1,x_center:.796875,y_center:.828125},{w:1,h:1,x_center:.796875,y_center:.828125},{w:1,h:1,x_center:.828125,y_center:.828125},{w:1,h:1,x_center:.828125,y_center:.828125},{w:1,h:1,x_center:.859375,y_center:.828125},{w:1,h:1,x_center:.859375,y_center:.828125},{w:1,h:1,x_center:.890625,y_center:.828125},{w:1,h:1,x_center:.890625,y_center:.828125},{w:1,h:1,x_center:.921875,y_center:.828125},{w:1,h:1,x_center:.921875,y_center:.828125},{w:1,h:1,x_center:.953125,y_center:.828125},{w:1,h:1,x_center:.953125,y_center:.828125},{w:1,h:1,x_center:.984375,y_center:.828125},{w:1,h:1,x_center:.984375,y_center:.828125},{w:1,h:1,x_center:.015625,y_center:.859375},{w:1,h:1,x_center:.015625,y_center:.859375},{w:1,h:1,x_center:.046875,y_center:.859375},{w:1,h:1,x_center:.046875,y_center:.859375},{w:1,h:1,x_center:.078125,y_center:.859375},{w:1,h:1,x_center:.078125,y_center:.859375},{w:1,h:1,x_center:.109375,y_center:.859375},{w:1,h:1,x_center:.109375,y_center:.859375},{w:1,h:1,x_center:.140625,y_center:.859375},{w:1,h:1,x_center:.140625,y_center:.859375},{w:1,h:1,x_center:.171875,y_center:.859375},{w:1,h:1,x_center:.171875,y_center:.859375},{w:1,h:1,x_center:.203125,y_center:.859375},{w:1,h:1,x_center:.203125,y_center:.859375},{w:1,h:1,x_center:.234375,y_center:.859375},{w:1,h:1,x_center:.234375,y_center:.859375},{w:1,h:1,x_center:.265625,y_center:.859375},{w:1,h:1,x_center:.265625,y_center:.859375},{w:1,h:1,x_center:.296875,y_center:.859375},{w:1,h:1,x_center:.296875,y_center:.859375},{w:1,h:1,x_center:.328125,y_center:.859375},{w:1,h:1,x_center:.328125,y_center:.859375},{w:1,h:1,x_center:.359375,y_center:.859375},{w:1,h:1,x_center:.359375,y_center:.859375},{w:1,h:1,x_center:.390625,y_center:.859375},{w:1,h:1,x_center:.390625,y_center:.859375},{w:1,h:1,x_center:.421875,y_center:.859375},{w:1,h:1,x_center:.421875,y_center:.859375},{w:1,h:1,x_center:.453125,y_center:.859375},{w:1,h:1,x_center:.453125,y_center:.859375},{w:1,h:1,x_center:.484375,y_center:.859375},{w:1,h:1,x_center:.484375,y_center:.859375},{w:1,h:1,x_center:.515625,y_center:.859375},{w:1,h:1,x_center:.515625,y_center:.859375},{w:1,h:1,x_center:.546875,y_center:.859375},{w:1,h:1,x_center:.546875,y_center:.859375},{w:1,h:1,x_center:.578125,y_center:.859375},{w:1,h:1,x_center:.578125,y_center:.859375},{w:1,h:1,x_center:.609375,y_center:.859375},{w:1,h:1,x_center:.609375,y_center:.859375},{w:1,h:1,x_center:.640625,y_center:.859375},{w:1,h:1,x_center:.640625,y_center:.859375},{w:1,h:1,x_center:.671875,y_center:.859375},{w:1,h:1,x_center:.671875,y_center:.859375},{w:1,h:1,x_center:.703125,y_center:.859375},{w:1,h:1,x_center:.703125,y_center:.859375},{w:1,h:1,x_center:.734375,y_center:.859375},{w:1,h:1,x_center:.734375,y_center:.859375},{w:1,h:1,x_center:.765625,y_center:.859375},{w:1,h:1,x_center:.765625,y_center:.859375},{w:1,h:1,x_center:.796875,y_center:.859375},{w:1,h:1,x_center:.796875,y_center:.859375},{w:1,h:1,x_center:.828125,y_center:.859375},{w:1,h:1,x_center:.828125,y_center:.859375},{w:1,h:1,x_center:.859375,y_center:.859375},{w:1,h:1,x_center:.859375,y_center:.859375},{w:1,h:1,x_center:.890625,y_center:.859375},{w:1,h:1,x_center:.890625,y_center:.859375},{w:1,h:1,x_center:.921875,y_center:.859375},{w:1,h:1,x_center:.921875,y_center:.859375},{w:1,h:1,x_center:.953125,y_center:.859375},{w:1,h:1,x_center:.953125,y_center:.859375},{w:1,h:1,x_center:.984375,y_center:.859375},{w:1,h:1,x_center:.984375,y_center:.859375},{w:1,h:1,x_center:.015625,y_center:.890625},{w:1,h:1,x_center:.015625,y_center:.890625},{w:1,h:1,x_center:.046875,y_center:.890625},{w:1,h:1,x_center:.046875,y_center:.890625},{w:1,h:1,x_center:.078125,y_center:.890625},{w:1,h:1,x_center:.078125,y_center:.890625},{w:1,h:1,x_center:.109375,y_center:.890625},{w:1,h:1,x_center:.109375,y_center:.890625},{w:1,h:1,x_center:.140625,y_center:.890625},{w:1,h:1,x_center:.140625,y_center:.890625},{w:1,h:1,x_center:.171875,y_center:.890625},{w:1,h:1,x_center:.171875,y_center:.890625},{w:1,h:1,x_center:.203125,y_center:.890625},{w:1,h:1,x_center:.203125,y_center:.890625},{w:1,h:1,x_center:.234375,y_center:.890625},{w:1,h:1,x_center:.234375,y_center:.890625},{w:1,h:1,x_center:.265625,y_center:.890625},{w:1,h:1,x_center:.265625,y_center:.890625},{w:1,h:1,x_center:.296875,y_center:.890625},{w:1,h:1,x_center:.296875,y_center:.890625},{w:1,h:1,x_center:.328125,y_center:.890625},{w:1,h:1,x_center:.328125,y_center:.890625},{w:1,h:1,x_center:.359375,y_center:.890625},{w:1,h:1,x_center:.359375,y_center:.890625},{w:1,h:1,x_center:.390625,y_center:.890625},{w:1,h:1,x_center:.390625,y_center:.890625},{w:1,h:1,x_center:.421875,y_center:.890625},{w:1,h:1,x_center:.421875,y_center:.890625},{w:1,h:1,x_center:.453125,y_center:.890625},{w:1,h:1,x_center:.453125,y_center:.890625},{w:1,h:1,x_center:.484375,y_center:.890625},{w:1,h:1,x_center:.484375,y_center:.890625},{w:1,h:1,x_center:.515625,y_center:.890625},{w:1,h:1,x_center:.515625,y_center:.890625},{w:1,h:1,x_center:.546875,y_center:.890625},{w:1,h:1,x_center:.546875,y_center:.890625},{w:1,h:1,x_center:.578125,y_center:.890625},{w:1,h:1,x_center:.578125,y_center:.890625},{w:1,h:1,x_center:.609375,y_center:.890625},{w:1,h:1,x_center:.609375,y_center:.890625},{w:1,h:1,x_center:.640625,y_center:.890625},{w:1,h:1,x_center:.640625,y_center:.890625},{w:1,h:1,x_center:.671875,y_center:.890625},{w:1,h:1,x_center:.671875,y_center:.890625},{w:1,h:1,x_center:.703125,y_center:.890625},{w:1,h:1,x_center:.703125,y_center:.890625},{w:1,h:1,x_center:.734375,y_center:.890625},{w:1,h:1,x_center:.734375,y_center:.890625},{w:1,h:1,x_center:.765625,y_center:.890625},{w:1,h:1,x_center:.765625,y_center:.890625},{w:1,h:1,x_center:.796875,y_center:.890625},{w:1,h:1,x_center:.796875,y_center:.890625},{w:1,h:1,x_center:.828125,y_center:.890625},{w:1,h:1,x_center:.828125,y_center:.890625},{w:1,h:1,x_center:.859375,y_center:.890625},{w:1,h:1,x_center:.859375,y_center:.890625},{w:1,h:1,x_center:.890625,y_center:.890625},{w:1,h:1,x_center:.890625,y_center:.890625},{w:1,h:1,x_center:.921875,y_center:.890625},{w:1,h:1,x_center:.921875,y_center:.890625},{w:1,h:1,x_center:.953125,y_center:.890625},{w:1,h:1,x_center:.953125,y_center:.890625},{w:1,h:1,x_center:.984375,y_center:.890625},{w:1,h:1,x_center:.984375,y_center:.890625},{w:1,h:1,x_center:.015625,y_center:.921875},{w:1,h:1,x_center:.015625,y_center:.921875},{w:1,h:1,x_center:.046875,y_center:.921875},{w:1,h:1,x_center:.046875,y_center:.921875},{w:1,h:1,x_center:.078125,y_center:.921875},{w:1,h:1,x_center:.078125,y_center:.921875},{w:1,h:1,x_center:.109375,y_center:.921875},{w:1,h:1,x_center:.109375,y_center:.921875},{w:1,h:1,x_center:.140625,y_center:.921875},{w:1,h:1,x_center:.140625,y_center:.921875},{w:1,h:1,x_center:.171875,y_center:.921875},{w:1,h:1,x_center:.171875,y_center:.921875},{w:1,h:1,x_center:.203125,y_center:.921875},{w:1,h:1,x_center:.203125,y_center:.921875},{w:1,h:1,x_center:.234375,y_center:.921875},{w:1,h:1,x_center:.234375,y_center:.921875},{w:1,h:1,x_center:.265625,y_center:.921875},{w:1,h:1,x_center:.265625,y_center:.921875},{w:1,h:1,x_center:.296875,y_center:.921875},{w:1,h:1,x_center:.296875,y_center:.921875},{w:1,h:1,x_center:.328125,y_center:.921875},{w:1,h:1,x_center:.328125,y_center:.921875},{w:1,h:1,x_center:.359375,y_center:.921875},{w:1,h:1,x_center:.359375,y_center:.921875},{w:1,h:1,x_center:.390625,y_center:.921875},{w:1,h:1,x_center:.390625,y_center:.921875},{w:1,h:1,x_center:.421875,y_center:.921875},{w:1,h:1,x_center:.421875,y_center:.921875},{w:1,h:1,x_center:.453125,y_center:.921875},{w:1,h:1,x_center:.453125,y_center:.921875},{w:1,h:1,x_center:.484375,y_center:.921875},{w:1,h:1,x_center:.484375,y_center:.921875},{w:1,h:1,x_center:.515625,y_center:.921875},{w:1,h:1,x_center:.515625,y_center:.921875},{w:1,h:1,x_center:.546875,y_center:.921875},{w:1,h:1,x_center:.546875,y_center:.921875},{w:1,h:1,x_center:.578125,y_center:.921875},{w:1,h:1,x_center:.578125,y_center:.921875},{w:1,h:1,x_center:.609375,y_center:.921875},{w:1,h:1,x_center:.609375,y_center:.921875},{w:1,h:1,x_center:.640625,y_center:.921875},{w:1,h:1,x_center:.640625,y_center:.921875},{w:1,h:1,x_center:.671875,y_center:.921875},{w:1,h:1,x_center:.671875,y_center:.921875},{w:1,h:1,x_center:.703125,y_center:.921875},{w:1,h:1,x_center:.703125,y_center:.921875},{w:1,h:1,x_center:.734375,y_center:.921875},{w:1,h:1,x_center:.734375,y_center:.921875},{w:1,h:1,x_center:.765625,y_center:.921875},{w:1,h:1,x_center:.765625,y_center:.921875},{w:1,h:1,x_center:.796875,y_center:.921875},{w:1,h:1,x_center:.796875,y_center:.921875},{w:1,h:1,x_center:.828125,y_center:.921875},{w:1,h:1,x_center:.828125,y_center:.921875},{w:1,h:1,x_center:.859375,y_center:.921875},{w:1,h:1,x_center:.859375,y_center:.921875},{w:1,h:1,x_center:.890625,y_center:.921875},{w:1,h:1,x_center:.890625,y_center:.921875},{w:1,h:1,x_center:.921875,y_center:.921875},{w:1,h:1,x_center:.921875,y_center:.921875},{w:1,h:1,x_center:.953125,y_center:.921875},{w:1,h:1,x_center:.953125,y_center:.921875},{w:1,h:1,x_center:.984375,y_center:.921875},{w:1,h:1,x_center:.984375,y_center:.921875},{w:1,h:1,x_center:.015625,y_center:.953125},{w:1,h:1,x_center:.015625,y_center:.953125},{w:1,h:1,x_center:.046875,y_center:.953125},{w:1,h:1,x_center:.046875,y_center:.953125},{w:1,h:1,x_center:.078125,y_center:.953125},{w:1,h:1,x_center:.078125,y_center:.953125},{w:1,h:1,x_center:.109375,y_center:.953125},{w:1,h:1,x_center:.109375,y_center:.953125},{w:1,h:1,x_center:.140625,y_center:.953125},{w:1,h:1,x_center:.140625,y_center:.953125},{w:1,h:1,x_center:.171875,y_center:.953125},{w:1,h:1,x_center:.171875,y_center:.953125},{w:1,h:1,x_center:.203125,y_center:.953125},{w:1,h:1,x_center:.203125,y_center:.953125},{w:1,h:1,x_center:.234375,y_center:.953125},{w:1,h:1,x_center:.234375,y_center:.953125},{w:1,h:1,x_center:.265625,y_center:.953125},{w:1,h:1,x_center:.265625,y_center:.953125},{w:1,h:1,x_center:.296875,y_center:.953125},{w:1,h:1,x_center:.296875,y_center:.953125},{w:1,h:1,x_center:.328125,y_center:.953125},{w:1,h:1,x_center:.328125,y_center:.953125},{w:1,h:1,x_center:.359375,y_center:.953125},{w:1,h:1,x_center:.359375,y_center:.953125},{w:1,h:1,x_center:.390625,y_center:.953125},{w:1,h:1,x_center:.390625,y_center:.953125},{w:1,h:1,x_center:.421875,y_center:.953125},{w:1,h:1,x_center:.421875,y_center:.953125},{w:1,h:1,x_center:.453125,y_center:.953125},{w:1,h:1,x_center:.453125,y_center:.953125},{w:1,h:1,x_center:.484375,y_center:.953125},{w:1,h:1,x_center:.484375,y_center:.953125},{w:1,h:1,x_center:.515625,y_center:.953125},{w:1,h:1,x_center:.515625,y_center:.953125},{w:1,h:1,x_center:.546875,y_center:.953125},{w:1,h:1,x_center:.546875,y_center:.953125},{w:1,h:1,x_center:.578125,y_center:.953125},{w:1,h:1,x_center:.578125,y_center:.953125},{w:1,h:1,x_center:.609375,y_center:.953125},{w:1,h:1,x_center:.609375,y_center:.953125},{w:1,h:1,x_center:.640625,y_center:.953125},{w:1,h:1,x_center:.640625,y_center:.953125},{w:1,h:1,x_center:.671875,y_center:.953125},{w:1,h:1,x_center:.671875,y_center:.953125},{w:1,h:1,x_center:.703125,y_center:.953125},{w:1,h:1,x_center:.703125,y_center:.953125},{w:1,h:1,x_center:.734375,y_center:.953125},{w:1,h:1,x_center:.734375,y_center:.953125},{w:1,h:1,x_center:.765625,y_center:.953125},{w:1,h:1,x_center:.765625,y_center:.953125},{w:1,h:1,x_center:.796875,y_center:.953125},{w:1,h:1,x_center:.796875,y_center:.953125},{w:1,h:1,x_center:.828125,y_center:.953125},{w:1,h:1,x_center:.828125,y_center:.953125},{w:1,h:1,x_center:.859375,y_center:.953125},{w:1,h:1,x_center:.859375,y_center:.953125},{w:1,h:1,x_center:.890625,y_center:.953125},{w:1,h:1,x_center:.890625,y_center:.953125},{w:1,h:1,x_center:.921875,y_center:.953125},{w:1,h:1,x_center:.921875,y_center:.953125},{w:1,h:1,x_center:.953125,y_center:.953125},{w:1,h:1,x_center:.953125,y_center:.953125},{w:1,h:1,x_center:.984375,y_center:.953125},{w:1,h:1,x_center:.984375,y_center:.953125},{w:1,h:1,x_center:.015625,y_center:.984375},{w:1,h:1,x_center:.015625,y_center:.984375},{w:1,h:1,x_center:.046875,y_center:.984375},{w:1,h:1,x_center:.046875,y_center:.984375},{w:1,h:1,x_center:.078125,y_center:.984375},{w:1,h:1,x_center:.078125,y_center:.984375},{w:1,h:1,x_center:.109375,y_center:.984375},{w:1,h:1,x_center:.109375,y_center:.984375},{w:1,h:1,x_center:.140625,y_center:.984375},{w:1,h:1,x_center:.140625,y_center:.984375},{w:1,h:1,x_center:.171875,y_center:.984375},{w:1,h:1,x_center:.171875,y_center:.984375},{w:1,h:1,x_center:.203125,y_center:.984375},{w:1,h:1,x_center:.203125,y_center:.984375},{w:1,h:1,x_center:.234375,y_center:.984375},{w:1,h:1,x_center:.234375,y_center:.984375},{w:1,h:1,x_center:.265625,y_center:.984375},{w:1,h:1,x_center:.265625,y_center:.984375},{w:1,h:1,x_center:.296875,y_center:.984375},{w:1,h:1,x_center:.296875,y_center:.984375},{w:1,h:1,x_center:.328125,y_center:.984375},{w:1,h:1,x_center:.328125,y_center:.984375},{w:1,h:1,x_center:.359375,y_center:.984375},{w:1,h:1,x_center:.359375,y_center:.984375},{w:1,h:1,x_center:.390625,y_center:.984375},{w:1,h:1,x_center:.390625,y_center:.984375},{w:1,h:1,x_center:.421875,y_center:.984375},{w:1,h:1,x_center:.421875,y_center:.984375},{w:1,h:1,x_center:.453125,y_center:.984375},{w:1,h:1,x_center:.453125,y_center:.984375},{w:1,h:1,x_center:.484375,y_center:.984375},{w:1,h:1,x_center:.484375,y_center:.984375},{w:1,h:1,x_center:.515625,y_center:.984375},{w:1,h:1,x_center:.515625,y_center:.984375},{w:1,h:1,x_center:.546875,y_center:.984375},{w:1,h:1,x_center:.546875,y_center:.984375},{w:1,h:1,x_center:.578125,y_center:.984375},{w:1,h:1,x_center:.578125,y_center:.984375},{w:1,h:1,x_center:.609375,y_center:.984375},{w:1,h:1,x_center:.609375,y_center:.984375},{w:1,h:1,x_center:.640625,y_center:.984375},{w:1,h:1,x_center:.640625,y_center:.984375},{w:1,h:1,x_center:.671875,y_center:.984375},{w:1,h:1,x_center:.671875,y_center:.984375},{w:1,h:1,x_center:.703125,y_center:.984375},{w:1,h:1,x_center:.703125,y_center:.984375},{w:1,h:1,x_center:.734375,y_center:.984375},{w:1,h:1,x_center:.734375,y_center:.984375},{w:1,h:1,x_center:.765625,y_center:.984375},{w:1,h:1,x_center:.765625,y_center:.984375},{w:1,h:1,x_center:.796875,y_center:.984375},{w:1,h:1,x_center:.796875,y_center:.984375},{w:1,h:1,x_center:.828125,y_center:.984375},{w:1,h:1,x_center:.828125,y_center:.984375},{w:1,h:1,x_center:.859375,y_center:.984375},{w:1,h:1,x_center:.859375,y_center:.984375},{w:1,h:1,x_center:.890625,y_center:.984375},{w:1,h:1,x_center:.890625,y_center:.984375},{w:1,h:1,x_center:.921875,y_center:.984375},{w:1,h:1,x_center:.921875,y_center:.984375},{w:1,h:1,x_center:.953125,y_center:.984375},{w:1,h:1,x_center:.953125,y_center:.984375},{w:1,h:1,x_center:.984375,y_center:.984375},{w:1,h:1,x_center:.984375,y_center:.984375},{w:1,h:1,x_center:.03125,y_center:.03125},{w:1,h:1,x_center:.03125,y_center:.03125},{w:1,h:1,x_center:.09375,y_center:.03125},{w:1,h:1,x_center:.09375,y_center:.03125},{w:1,h:1,x_center:.15625,y_center:.03125},{w:1,h:1,x_center:.15625,y_center:.03125},{w:1,h:1,x_center:.21875,y_center:.03125},{w:1,h:1,x_center:.21875,y_center:.03125},{w:1,h:1,x_center:.28125,y_center:.03125},{w:1,h:1,x_center:.28125,y_center:.03125},{w:1,h:1,x_center:.34375,y_center:.03125},{w:1,h:1,x_center:.34375,y_center:.03125},{w:1,h:1,x_center:.40625,y_center:.03125},{w:1,h:1,x_center:.40625,y_center:.03125},{w:1,h:1,x_center:.46875,y_center:.03125},{w:1,h:1,x_center:.46875,y_center:.03125},{w:1,h:1,x_center:.53125,y_center:.03125},{w:1,h:1,x_center:.53125,y_center:.03125},{w:1,h:1,x_center:.59375,y_center:.03125},{w:1,h:1,x_center:.59375,y_center:.03125},{w:1,h:1,x_center:.65625,y_center:.03125},{w:1,h:1,x_center:.65625,y_center:.03125},{w:1,h:1,x_center:.71875,y_center:.03125},{w:1,h:1,x_center:.71875,y_center:.03125},{w:1,h:1,x_center:.78125,y_center:.03125},{w:1,h:1,x_center:.78125,y_center:.03125},{w:1,h:1,x_center:.84375,y_center:.03125},{w:1,h:1,x_center:.84375,y_center:.03125},{w:1,h:1,x_center:.90625,y_center:.03125},{w:1,h:1,x_center:.90625,y_center:.03125},{w:1,h:1,x_center:.96875,y_center:.03125},{w:1,h:1,x_center:.96875,y_center:.03125},{w:1,h:1,x_center:.03125,y_center:.09375},{w:1,h:1,x_center:.03125,y_center:.09375},{w:1,h:1,x_center:.09375,y_center:.09375},{w:1,h:1,x_center:.09375,y_center:.09375},{w:1,h:1,x_center:.15625,y_center:.09375},{w:1,h:1,x_center:.15625,y_center:.09375},{w:1,h:1,x_center:.21875,y_center:.09375},{w:1,h:1,x_center:.21875,y_center:.09375},{w:1,h:1,x_center:.28125,y_center:.09375},{w:1,h:1,x_center:.28125,y_center:.09375},{w:1,h:1,x_center:.34375,y_center:.09375},{w:1,h:1,x_center:.34375,y_center:.09375},{w:1,h:1,x_center:.40625,y_center:.09375},{w:1,h:1,x_center:.40625,y_center:.09375},{w:1,h:1,x_center:.46875,y_center:.09375},{w:1,h:1,x_center:.46875,y_center:.09375},{w:1,h:1,x_center:.53125,y_center:.09375},{w:1,h:1,x_center:.53125,y_center:.09375},{w:1,h:1,x_center:.59375,y_center:.09375},{w:1,h:1,x_center:.59375,y_center:.09375},{w:1,h:1,x_center:.65625,y_center:.09375},{w:1,h:1,x_center:.65625,y_center:.09375},{w:1,h:1,x_center:.71875,y_center:.09375},{w:1,h:1,x_center:.71875,y_center:.09375},{w:1,h:1,x_center:.78125,y_center:.09375},{w:1,h:1,x_center:.78125,y_center:.09375},{w:1,h:1,x_center:.84375,y_center:.09375},{w:1,h:1,x_center:.84375,y_center:.09375},{w:1,h:1,x_center:.90625,y_center:.09375},{w:1,h:1,x_center:.90625,y_center:.09375},{w:1,h:1,x_center:.96875,y_center:.09375},{w:1,h:1,x_center:.96875,y_center:.09375},{w:1,h:1,x_center:.03125,y_center:.15625},{w:1,h:1,x_center:.03125,y_center:.15625},{w:1,h:1,x_center:.09375,y_center:.15625},{w:1,h:1,x_center:.09375,y_center:.15625},{w:1,h:1,x_center:.15625,y_center:.15625},{w:1,h:1,x_center:.15625,y_center:.15625},{w:1,h:1,x_center:.21875,y_center:.15625},{w:1,h:1,x_center:.21875,y_center:.15625},{w:1,h:1,x_center:.28125,y_center:.15625},{w:1,h:1,x_center:.28125,y_center:.15625},{w:1,h:1,x_center:.34375,y_center:.15625},{w:1,h:1,x_center:.34375,y_center:.15625},{w:1,h:1,x_center:.40625,y_center:.15625},{w:1,h:1,x_center:.40625,y_center:.15625},{w:1,h:1,x_center:.46875,y_center:.15625},{w:1,h:1,x_center:.46875,y_center:.15625},{w:1,h:1,x_center:.53125,y_center:.15625},{w:1,h:1,x_center:.53125,y_center:.15625},{w:1,h:1,x_center:.59375,y_center:.15625},{w:1,h:1,x_center:.59375,y_center:.15625},{w:1,h:1,x_center:.65625,y_center:.15625},{w:1,h:1,x_center:.65625,y_center:.15625},{w:1,h:1,x_center:.71875,y_center:.15625},{w:1,h:1,x_center:.71875,y_center:.15625},{w:1,h:1,x_center:.78125,y_center:.15625},{w:1,h:1,x_center:.78125,y_center:.15625},{w:1,h:1,x_center:.84375,y_center:.15625},{w:1,h:1,x_center:.84375,y_center:.15625},{w:1,h:1,x_center:.90625,y_center:.15625},{w:1,h:1,x_center:.90625,y_center:.15625},{w:1,h:1,x_center:.96875,y_center:.15625},{w:1,h:1,x_center:.96875,y_center:.15625},{w:1,h:1,x_center:.03125,y_center:.21875},{w:1,h:1,x_center:.03125,y_center:.21875},{w:1,h:1,x_center:.09375,y_center:.21875},{w:1,h:1,x_center:.09375,y_center:.21875},{w:1,h:1,x_center:.15625,y_center:.21875},{w:1,h:1,x_center:.15625,y_center:.21875},{w:1,h:1,x_center:.21875,y_center:.21875},{w:1,h:1,x_center:.21875,y_center:.21875},{w:1,h:1,x_center:.28125,y_center:.21875},{w:1,h:1,x_center:.28125,y_center:.21875},{w:1,h:1,x_center:.34375,y_center:.21875},{w:1,h:1,x_center:.34375,y_center:.21875},{w:1,h:1,x_center:.40625,y_center:.21875},{w:1,h:1,x_center:.40625,y_center:.21875},{w:1,h:1,x_center:.46875,y_center:.21875},{w:1,h:1,x_center:.46875,y_center:.21875},{w:1,h:1,x_center:.53125,y_center:.21875},{w:1,h:1,x_center:.53125,y_center:.21875},{w:1,h:1,x_center:.59375,y_center:.21875},{w:1,h:1,x_center:.59375,y_center:.21875},{w:1,h:1,x_center:.65625,y_center:.21875},{w:1,h:1,x_center:.65625,y_center:.21875},{w:1,h:1,x_center:.71875,y_center:.21875},{w:1,h:1,x_center:.71875,y_center:.21875},{w:1,h:1,x_center:.78125,y_center:.21875},{w:1,h:1,x_center:.78125,y_center:.21875},{w:1,h:1,x_center:.84375,y_center:.21875},{w:1,h:1,x_center:.84375,y_center:.21875},{w:1,h:1,x_center:.90625,y_center:.21875},{w:1,h:1,x_center:.90625,y_center:.21875},{w:1,h:1,x_center:.96875,y_center:.21875},{w:1,h:1,x_center:.96875,y_center:.21875},{w:1,h:1,x_center:.03125,y_center:.28125},{w:1,h:1,x_center:.03125,y_center:.28125},{w:1,h:1,x_center:.09375,y_center:.28125},{w:1,h:1,x_center:.09375,y_center:.28125},{w:1,h:1,x_center:.15625,y_center:.28125},{w:1,h:1,x_center:.15625,y_center:.28125},{w:1,h:1,x_center:.21875,y_center:.28125},{w:1,h:1,x_center:.21875,y_center:.28125},{w:1,h:1,x_center:.28125,y_center:.28125},{w:1,h:1,x_center:.28125,y_center:.28125},{w:1,h:1,x_center:.34375,y_center:.28125},{w:1,h:1,x_center:.34375,y_center:.28125},{w:1,h:1,x_center:.40625,y_center:.28125},{w:1,h:1,x_center:.40625,y_center:.28125},{w:1,h:1,x_center:.46875,y_center:.28125},{w:1,h:1,x_center:.46875,y_center:.28125},{w:1,h:1,x_center:.53125,y_center:.28125},{w:1,h:1,x_center:.53125,y_center:.28125},{w:1,h:1,x_center:.59375,y_center:.28125},{w:1,h:1,x_center:.59375,y_center:.28125},{w:1,h:1,x_center:.65625,y_center:.28125},{w:1,h:1,x_center:.65625,y_center:.28125},{w:1,h:1,x_center:.71875,y_center:.28125},{w:1,h:1,x_center:.71875,y_center:.28125},{w:1,h:1,x_center:.78125,y_center:.28125},{w:1,h:1,x_center:.78125,y_center:.28125},{w:1,h:1,x_center:.84375,y_center:.28125},{w:1,h:1,x_center:.84375,y_center:.28125},{w:1,h:1,x_center:.90625,y_center:.28125},{w:1,h:1,x_center:.90625,y_center:.28125},{w:1,h:1,x_center:.96875,y_center:.28125},{w:1,h:1,x_center:.96875,y_center:.28125},{w:1,h:1,x_center:.03125,y_center:.34375},{w:1,h:1,x_center:.03125,y_center:.34375},{w:1,h:1,x_center:.09375,y_center:.34375},{w:1,h:1,x_center:.09375,y_center:.34375},{w:1,h:1,x_center:.15625,y_center:.34375},{w:1,h:1,x_center:.15625,y_center:.34375},{w:1,h:1,x_center:.21875,y_center:.34375},{w:1,h:1,x_center:.21875,y_center:.34375},{w:1,h:1,x_center:.28125,y_center:.34375},{w:1,h:1,x_center:.28125,y_center:.34375},{w:1,h:1,x_center:.34375,y_center:.34375},{w:1,h:1,x_center:.34375,y_center:.34375},{w:1,h:1,x_center:.40625,y_center:.34375},{w:1,h:1,x_center:.40625,y_center:.34375},{w:1,h:1,x_center:.46875,y_center:.34375},{w:1,h:1,x_center:.46875,y_center:.34375},{w:1,h:1,x_center:.53125,y_center:.34375},{w:1,h:1,x_center:.53125,y_center:.34375},{w:1,h:1,x_center:.59375,y_center:.34375},{w:1,h:1,x_center:.59375,y_center:.34375},{w:1,h:1,x_center:.65625,y_center:.34375},{w:1,h:1,x_center:.65625,y_center:.34375},{w:1,h:1,x_center:.71875,y_center:.34375},{w:1,h:1,x_center:.71875,y_center:.34375},{w:1,h:1,x_center:.78125,y_center:.34375},{w:1,h:1,x_center:.78125,y_center:.34375},{w:1,h:1,x_center:.84375,y_center:.34375},{w:1,h:1,x_center:.84375,y_center:.34375},{w:1,h:1,x_center:.90625,y_center:.34375},{w:1,h:1,x_center:.90625,y_center:.34375},{w:1,h:1,x_center:.96875,y_center:.34375},{w:1,h:1,x_center:.96875,y_center:.34375},{w:1,h:1,x_center:.03125,y_center:.40625},{w:1,h:1,x_center:.03125,y_center:.40625},{w:1,h:1,x_center:.09375,y_center:.40625},{w:1,h:1,x_center:.09375,y_center:.40625},{w:1,h:1,x_center:.15625,y_center:.40625},{w:1,h:1,x_center:.15625,y_center:.40625},{w:1,h:1,x_center:.21875,y_center:.40625},{w:1,h:1,x_center:.21875,y_center:.40625},{w:1,h:1,x_center:.28125,y_center:.40625},{w:1,h:1,x_center:.28125,y_center:.40625},{w:1,h:1,x_center:.34375,y_center:.40625},{w:1,h:1,x_center:.34375,y_center:.40625},{w:1,h:1,x_center:.40625,y_center:.40625},{w:1,h:1,x_center:.40625,y_center:.40625},{w:1,h:1,x_center:.46875,y_center:.40625},{w:1,h:1,x_center:.46875,y_center:.40625},{w:1,h:1,x_center:.53125,y_center:.40625},{w:1,h:1,x_center:.53125,y_center:.40625},{w:1,h:1,x_center:.59375,y_center:.40625},{w:1,h:1,x_center:.59375,y_center:.40625},{w:1,h:1,x_center:.65625,y_center:.40625},{w:1,h:1,x_center:.65625,y_center:.40625},{w:1,h:1,x_center:.71875,y_center:.40625},{w:1,h:1,x_center:.71875,y_center:.40625},{w:1,h:1,x_center:.78125,y_center:.40625},{w:1,h:1,x_center:.78125,y_center:.40625},{w:1,h:1,x_center:.84375,y_center:.40625},{w:1,h:1,x_center:.84375,y_center:.40625},{w:1,h:1,x_center:.90625,y_center:.40625},{w:1,h:1,x_center:.90625,y_center:.40625},{w:1,h:1,x_center:.96875,y_center:.40625},{w:1,h:1,x_center:.96875,y_center:.40625},{w:1,h:1,x_center:.03125,y_center:.46875},{w:1,h:1,x_center:.03125,y_center:.46875},{w:1,h:1,x_center:.09375,y_center:.46875},{w:1,h:1,x_center:.09375,y_center:.46875},{w:1,h:1,x_center:.15625,y_center:.46875},{w:1,h:1,x_center:.15625,y_center:.46875},{w:1,h:1,x_center:.21875,y_center:.46875},{w:1,h:1,x_center:.21875,y_center:.46875},{w:1,h:1,x_center:.28125,y_center:.46875},{w:1,h:1,x_center:.28125,y_center:.46875},{w:1,h:1,x_center:.34375,y_center:.46875},{w:1,h:1,x_center:.34375,y_center:.46875},{w:1,h:1,x_center:.40625,y_center:.46875},{w:1,h:1,x_center:.40625,y_center:.46875},{w:1,h:1,x_center:.46875,y_center:.46875},{w:1,h:1,x_center:.46875,y_center:.46875},{w:1,h:1,x_center:.53125,y_center:.46875},{w:1,h:1,x_center:.53125,y_center:.46875},{w:1,h:1,x_center:.59375,y_center:.46875},{w:1,h:1,x_center:.59375,y_center:.46875},{w:1,h:1,x_center:.65625,y_center:.46875},{w:1,h:1,x_center:.65625,y_center:.46875},{w:1,h:1,x_center:.71875,y_center:.46875},{w:1,h:1,x_center:.71875,y_center:.46875},{w:1,h:1,x_center:.78125,y_center:.46875},{w:1,h:1,x_center:.78125,y_center:.46875},{w:1,h:1,x_center:.84375,y_center:.46875},{w:1,h:1,x_center:.84375,y_center:.46875},{w:1,h:1,x_center:.90625,y_center:.46875},{w:1,h:1,x_center:.90625,y_center:.46875},{w:1,h:1,x_center:.96875,y_center:.46875},{w:1,h:1,x_center:.96875,y_center:.46875},{w:1,h:1,x_center:.03125,y_center:.53125},{w:1,h:1,x_center:.03125,y_center:.53125},{w:1,h:1,x_center:.09375,y_center:.53125},{w:1,h:1,x_center:.09375,y_center:.53125},{w:1,h:1,x_center:.15625,y_center:.53125},{w:1,h:1,x_center:.15625,y_center:.53125},{w:1,h:1,x_center:.21875,y_center:.53125},{w:1,h:1,x_center:.21875,y_center:.53125},{w:1,h:1,x_center:.28125,y_center:.53125},{w:1,h:1,x_center:.28125,y_center:.53125},{w:1,h:1,x_center:.34375,y_center:.53125},{w:1,h:1,x_center:.34375,y_center:.53125},{w:1,h:1,x_center:.40625,y_center:.53125},{w:1,h:1,x_center:.40625,y_center:.53125},{w:1,h:1,x_center:.46875,y_center:.53125},{w:1,h:1,x_center:.46875,y_center:.53125},{w:1,h:1,x_center:.53125,y_center:.53125},{w:1,h:1,x_center:.53125,y_center:.53125},{w:1,h:1,x_center:.59375,y_center:.53125},{w:1,h:1,x_center:.59375,y_center:.53125},{w:1,h:1,x_center:.65625,y_center:.53125},{w:1,h:1,x_center:.65625,y_center:.53125},{w:1,h:1,x_center:.71875,y_center:.53125},{w:1,h:1,x_center:.71875,y_center:.53125},{w:1,h:1,x_center:.78125,y_center:.53125},{w:1,h:1,x_center:.78125,y_center:.53125},{w:1,h:1,x_center:.84375,y_center:.53125},{w:1,h:1,x_center:.84375,y_center:.53125},{w:1,h:1,x_center:.90625,y_center:.53125},{w:1,h:1,x_center:.90625,y_center:.53125},{w:1,h:1,x_center:.96875,y_center:.53125},{w:1,h:1,x_center:.96875,y_center:.53125},{w:1,h:1,x_center:.03125,y_center:.59375},{w:1,h:1,x_center:.03125,y_center:.59375},{w:1,h:1,x_center:.09375,y_center:.59375},{w:1,h:1,x_center:.09375,y_center:.59375},{w:1,h:1,x_center:.15625,y_center:.59375},{w:1,h:1,x_center:.15625,y_center:.59375},{w:1,h:1,x_center:.21875,y_center:.59375},{w:1,h:1,x_center:.21875,y_center:.59375},{w:1,h:1,x_center:.28125,y_center:.59375},{w:1,h:1,x_center:.28125,y_center:.59375},{w:1,h:1,x_center:.34375,y_center:.59375},{w:1,h:1,x_center:.34375,y_center:.59375},{w:1,h:1,x_center:.40625,y_center:.59375},{w:1,h:1,x_center:.40625,y_center:.59375},{w:1,h:1,x_center:.46875,y_center:.59375},{w:1,h:1,x_center:.46875,y_center:.59375},{w:1,h:1,x_center:.53125,y_center:.59375},{w:1,h:1,x_center:.53125,y_center:.59375},{w:1,h:1,x_center:.59375,y_center:.59375},{w:1,h:1,x_center:.59375,y_center:.59375},{w:1,h:1,x_center:.65625,y_center:.59375},{w:1,h:1,x_center:.65625,y_center:.59375},{w:1,h:1,x_center:.71875,y_center:.59375},{w:1,h:1,x_center:.71875,y_center:.59375},{w:1,h:1,x_center:.78125,y_center:.59375},{w:1,h:1,x_center:.78125,y_center:.59375},{w:1,h:1,x_center:.84375,y_center:.59375},{w:1,h:1,x_center:.84375,y_center:.59375},{w:1,h:1,x_center:.90625,y_center:.59375},{w:1,h:1,x_center:.90625,y_center:.59375},{w:1,h:1,x_center:.96875,y_center:.59375},{w:1,h:1,x_center:.96875,y_center:.59375},{w:1,h:1,x_center:.03125,y_center:.65625},{w:1,h:1,x_center:.03125,y_center:.65625},{w:1,h:1,x_center:.09375,y_center:.65625},{w:1,h:1,x_center:.09375,y_center:.65625},{w:1,h:1,x_center:.15625,y_center:.65625},{w:1,h:1,x_center:.15625,y_center:.65625},{w:1,h:1,x_center:.21875,y_center:.65625},{w:1,h:1,x_center:.21875,y_center:.65625},{w:1,h:1,x_center:.28125,y_center:.65625},{w:1,h:1,x_center:.28125,y_center:.65625},{w:1,h:1,x_center:.34375,y_center:.65625},{w:1,h:1,x_center:.34375,y_center:.65625},{w:1,h:1,x_center:.40625,y_center:.65625},{w:1,h:1,x_center:.40625,y_center:.65625},{w:1,h:1,x_center:.46875,y_center:.65625},{w:1,h:1,x_center:.46875,y_center:.65625},{w:1,h:1,x_center:.53125,y_center:.65625},{w:1,h:1,x_center:.53125,y_center:.65625},{w:1,h:1,x_center:.59375,y_center:.65625},{w:1,h:1,x_center:.59375,y_center:.65625},{w:1,h:1,x_center:.65625,y_center:.65625},{w:1,h:1,x_center:.65625,y_center:.65625},{w:1,h:1,x_center:.71875,y_center:.65625},{w:1,h:1,x_center:.71875,y_center:.65625},{w:1,h:1,x_center:.78125,y_center:.65625},{w:1,h:1,x_center:.78125,y_center:.65625},{w:1,h:1,x_center:.84375,y_center:.65625},{w:1,h:1,x_center:.84375,y_center:.65625},{w:1,h:1,x_center:.90625,y_center:.65625},{w:1,h:1,x_center:.90625,y_center:.65625},{w:1,h:1,x_center:.96875,y_center:.65625},{w:1,h:1,x_center:.96875,y_center:.65625},{w:1,h:1,x_center:.03125,y_center:.71875},{w:1,h:1,x_center:.03125,y_center:.71875},{w:1,h:1,x_center:.09375,y_center:.71875},{w:1,h:1,x_center:.09375,y_center:.71875},{w:1,h:1,x_center:.15625,y_center:.71875},{w:1,h:1,x_center:.15625,y_center:.71875},{w:1,h:1,x_center:.21875,y_center:.71875},{w:1,h:1,x_center:.21875,y_center:.71875},{w:1,h:1,x_center:.28125,y_center:.71875},{w:1,h:1,x_center:.28125,y_center:.71875},{w:1,h:1,x_center:.34375,y_center:.71875},{w:1,h:1,x_center:.34375,y_center:.71875},{w:1,h:1,x_center:.40625,y_center:.71875},{w:1,h:1,x_center:.40625,y_center:.71875},{w:1,h:1,x_center:.46875,y_center:.71875},{w:1,h:1,x_center:.46875,y_center:.71875},{w:1,h:1,x_center:.53125,y_center:.71875},{w:1,h:1,x_center:.53125,y_center:.71875},{w:1,h:1,x_center:.59375,y_center:.71875},{w:1,h:1,x_center:.59375,y_center:.71875},{w:1,h:1,x_center:.65625,y_center:.71875},{w:1,h:1,x_center:.65625,y_center:.71875},{w:1,h:1,x_center:.71875,y_center:.71875},{w:1,h:1,x_center:.71875,y_center:.71875},{w:1,h:1,x_center:.78125,y_center:.71875},{w:1,h:1,x_center:.78125,y_center:.71875},{w:1,h:1,x_center:.84375,y_center:.71875},{w:1,h:1,x_center:.84375,y_center:.71875},{w:1,h:1,x_center:.90625,y_center:.71875},{w:1,h:1,x_center:.90625,y_center:.71875},{w:1,h:1,x_center:.96875,y_center:.71875},{w:1,h:1,x_center:.96875,y_center:.71875},{w:1,h:1,x_center:.03125,y_center:.78125},{w:1,h:1,x_center:.03125,y_center:.78125},{w:1,h:1,x_center:.09375,y_center:.78125},{w:1,h:1,x_center:.09375,y_center:.78125},{w:1,h:1,x_center:.15625,y_center:.78125},{w:1,h:1,x_center:.15625,y_center:.78125},{w:1,h:1,x_center:.21875,y_center:.78125},{w:1,h:1,x_center:.21875,y_center:.78125},{w:1,h:1,x_center:.28125,y_center:.78125},{w:1,h:1,x_center:.28125,y_center:.78125},{w:1,h:1,x_center:.34375,y_center:.78125},{w:1,h:1,x_center:.34375,y_center:.78125},{w:1,h:1,x_center:.40625,y_center:.78125},{w:1,h:1,x_center:.40625,y_center:.78125},{w:1,h:1,x_center:.46875,y_center:.78125},{w:1,h:1,x_center:.46875,y_center:.78125},{w:1,h:1,x_center:.53125,y_center:.78125},{w:1,h:1,x_center:.53125,y_center:.78125},{w:1,h:1,x_center:.59375,y_center:.78125},{w:1,h:1,x_center:.59375,y_center:.78125},{w:1,h:1,x_center:.65625,y_center:.78125},{w:1,h:1,x_center:.65625,y_center:.78125},{w:1,h:1,x_center:.71875,y_center:.78125},{w:1,h:1,x_center:.71875,y_center:.78125},{w:1,h:1,x_center:.78125,y_center:.78125},{w:1,h:1,x_center:.78125,y_center:.78125},{w:1,h:1,x_center:.84375,y_center:.78125},{w:1,h:1,x_center:.84375,y_center:.78125},{w:1,h:1,x_center:.90625,y_center:.78125},{w:1,h:1,x_center:.90625,y_center:.78125},{w:1,h:1,x_center:.96875,y_center:.78125},{w:1,h:1,x_center:.96875,y_center:.78125},{w:1,h:1,x_center:.03125,y_center:.84375},{w:1,h:1,x_center:.03125,y_center:.84375},{w:1,h:1,x_center:.09375,y_center:.84375},{w:1,h:1,x_center:.09375,y_center:.84375},{w:1,h:1,x_center:.15625,y_center:.84375},{w:1,h:1,x_center:.15625,y_center:.84375},{w:1,h:1,x_center:.21875,y_center:.84375},{w:1,h:1,x_center:.21875,y_center:.84375},{w:1,h:1,x_center:.28125,y_center:.84375},{w:1,h:1,x_center:.28125,y_center:.84375},{w:1,h:1,x_center:.34375,y_center:.84375},{w:1,h:1,x_center:.34375,y_center:.84375},{w:1,h:1,x_center:.40625,y_center:.84375},{w:1,h:1,x_center:.40625,y_center:.84375},{w:1,h:1,x_center:.46875,y_center:.84375},{w:1,h:1,x_center:.46875,y_center:.84375},{w:1,h:1,x_center:.53125,y_center:.84375},{w:1,h:1,x_center:.53125,y_center:.84375},{w:1,h:1,x_center:.59375,y_center:.84375},{w:1,h:1,x_center:.59375,y_center:.84375},{w:1,h:1,x_center:.65625,y_center:.84375},{w:1,h:1,x_center:.65625,y_center:.84375},{w:1,h:1,x_center:.71875,y_center:.84375},{w:1,h:1,x_center:.71875,y_center:.84375},{w:1,h:1,x_center:.78125,y_center:.84375},{w:1,h:1,x_center:.78125,y_center:.84375},{w:1,h:1,x_center:.84375,y_center:.84375},{w:1,h:1,x_center:.84375,y_center:.84375},{w:1,h:1,x_center:.90625,y_center:.84375},{w:1,h:1,x_center:.90625,y_center:.84375},{w:1,h:1,x_center:.96875,y_center:.84375},{w:1,h:1,x_center:.96875,y_center:.84375},{w:1,h:1,x_center:.03125,y_center:.90625},{w:1,h:1,x_center:.03125,y_center:.90625},{w:1,h:1,x_center:.09375,y_center:.90625},{w:1,h:1,x_center:.09375,y_center:.90625},{w:1,h:1,x_center:.15625,y_center:.90625},{w:1,h:1,x_center:.15625,y_center:.90625},{w:1,h:1,x_center:.21875,y_center:.90625},{w:1,h:1,x_center:.21875,y_center:.90625},{w:1,h:1,x_center:.28125,y_center:.90625},{w:1,h:1,x_center:.28125,y_center:.90625},{w:1,h:1,x_center:.34375,y_center:.90625},{w:1,h:1,x_center:.34375,y_center:.90625},{w:1,h:1,x_center:.40625,y_center:.90625},{w:1,h:1,x_center:.40625,y_center:.90625},{w:1,h:1,x_center:.46875,y_center:.90625},{w:1,h:1,x_center:.46875,y_center:.90625},{w:1,h:1,x_center:.53125,y_center:.90625},{w:1,h:1,x_center:.53125,y_center:.90625},{w:1,h:1,x_center:.59375,y_center:.90625},{w:1,h:1,x_center:.59375,y_center:.90625},{w:1,h:1,x_center:.65625,y_center:.90625},{w:1,h:1,x_center:.65625,y_center:.90625},{w:1,h:1,x_center:.71875,y_center:.90625},{w:1,h:1,x_center:.71875,y_center:.90625},{w:1,h:1,x_center:.78125,y_center:.90625},{w:1,h:1,x_center:.78125,y_center:.90625},{w:1,h:1,x_center:.84375,y_center:.90625},{w:1,h:1,x_center:.84375,y_center:.90625},{w:1,h:1,x_center:.90625,y_center:.90625},{w:1,h:1,x_center:.90625,y_center:.90625},{w:1,h:1,x_center:.96875,y_center:.90625},{w:1,h:1,x_center:.96875,y_center:.90625},{w:1,h:1,x_center:.03125,y_center:.96875},{w:1,h:1,x_center:.03125,y_center:.96875},{w:1,h:1,x_center:.09375,y_center:.96875},{w:1,h:1,x_center:.09375,y_center:.96875},{w:1,h:1,x_center:.15625,y_center:.96875},{w:1,h:1,x_center:.15625,y_center:.96875},{w:1,h:1,x_center:.21875,y_center:.96875},{w:1,h:1,x_center:.21875,y_center:.96875},{w:1,h:1,x_center:.28125,y_center:.96875},{w:1,h:1,x_center:.28125,y_center:.96875},{w:1,h:1,x_center:.34375,y_center:.96875},{w:1,h:1,x_center:.34375,y_center:.96875},{w:1,h:1,x_center:.40625,y_center:.96875},{w:1,h:1,x_center:.40625,y_center:.96875},{w:1,h:1,x_center:.46875,y_center:.96875},{w:1,h:1,x_center:.46875,y_center:.96875},{w:1,h:1,x_center:.53125,y_center:.96875},{w:1,h:1,x_center:.53125,y_center:.96875},{w:1,h:1,x_center:.59375,y_center:.96875},{w:1,h:1,x_center:.59375,y_center:.96875},{w:1,h:1,x_center:.65625,y_center:.96875},{w:1,h:1,x_center:.65625,y_center:.96875},{w:1,h:1,x_center:.71875,y_center:.96875},{w:1,h:1,x_center:.71875,y_center:.96875},{w:1,h:1,x_center:.78125,y_center:.96875},{w:1,h:1,x_center:.78125,y_center:.96875},{w:1,h:1,x_center:.84375,y_center:.96875},{w:1,h:1,x_center:.84375,y_center:.96875},{w:1,h:1,x_center:.90625,y_center:.96875},{w:1,h:1,x_center:.90625,y_center:.96875},{w:1,h:1,x_center:.96875,y_center:.96875},{w:1,h:1,x_center:.96875,y_center:.96875},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375}]}),n4=ct(e=>{var t=Ve(Z6()),n=Ve(e4()),r=Ve(t4()),a={thumb:[1,2,3,4],indexFinger:[5,6,7,8],middleFinger:[9,10,11,12],ringFinger:[13,14,15,16],pinky:[17,18,19,20],palmBase:[0]},s=class{constructor(o){this.handPipeline=o}static getAnnotations(){return a}async estimateHands(o,l){let c=await this.handPipeline.estimateHands(o,l);if(!c)return[];let u=[];for(let h of c){let d={};if(h.landmarks)for(let f of Object.keys(a))d[f]=a[f].map(m=>h.landmarks[m]);let p=h.box?[Math.max(0,h.box.topLeft[0]),Math.max(0,h.box.topLeft[1]),Math.min(o.shape[2],h.box.bottomRight[0])-h.box.topLeft[0],Math.min(o.shape[1],h.box.bottomRight[1])-h.box.topLeft[1]]:0;u.push({confidence:h.confidence,box:p,landmarks:h.landmarks,annotations:d})}return u}};e.HandPose=s;async function i(o){let[l,c]=await Promise.all([o.hand.enabled?pr(o.hand.detector.modelPath,{fromTFHub:o.hand.detector.modelPath.includes("tfhub.dev")}):null,o.hand.landmarks?pr(o.hand.skeleton.modelPath,{fromTFHub:o.hand.skeleton.modelPath.includes("tfhub.dev")}):null]),u=new t.HandDetector(l,o.hand.inputSize,r.anchors),h=new n.HandPipeline(u,c,o.hand.inputSize),d=new s(h);return o.hand.enabled&&Ye(`load model: ${o.hand.detector.modelPath.match(/\/(.*)\./)[1]}`),o.hand.landmarks&&Ye(`load model: ${o.hand.skeleton.modelPath.match(/\/(.*)\./)[1]}`),d}e.load=i}),r4=ct(e=>{e.body=t=>{if(!t)return[];let n=[];for(let r=0;r<t.length;r++){let a=t[r].keypoints.find(c=>c.part==="leftWrist"),s=t[r].keypoints.find(c=>c.part==="rightWrist"),i=t[r].keypoints.find(c=>c.part==="nose");i&&a&&s&&a.position.y<i.position.y&&s.position.y<i.position.y?n.push({body:r,gesture:"i give up"}):i&&a&&a.position.y<i.position.y?n.push({body:r,gesture:"raise left hand"}):i&&s&&s.position.y<i.position.y&&n.push({body:r,gesture:"raise right hand"});let o=t[r].keypoints.find(c=>c.part==="leftShoulder"),l=t[r].keypoints.find(c=>c.part==="rightShoulder");o&&l&&n.push({body:r,gesture:`leaning ${o.position.y>l.position.y?"left":"right"}`})}return n},e.face=t=>{if(!t)return[];let n=[];for(let r=0;r<t.length;r++)if(t[r].mesh&&t[r].mesh.length>0){let a=t[r].mesh[35][2]-t[r].mesh[263][2];Math.abs(a)<10?n.push({face:r,gesture:"facing camera"}):n.push({face:r,gesture:`facing ${a<0?"right":"left"}`}),Math.abs(t[r].mesh[374][1]-t[r].mesh[386][1])/Math.abs(t[r].mesh[443][1]-t[r].mesh[450][1])<.2&&n.push({face:r,gesture:"blink left eye"}),Math.abs(t[r].mesh[145][1]-t[r].mesh[159][1])/Math.abs(t[r].mesh[223][1]-t[r].mesh[230][1])<.2&&n.push({face:r,gesture:"blink right eye"});let s=Math.min(100,500*Math.abs(t[r].mesh[13][1]-t[r].mesh[14][1])/Math.abs(t[r].mesh[10][1]-t[r].mesh[152][1]));s>10&&n.push({face:r,gesture:`mouth ${Math.trunc(s)}% open`});let i=t[r].mesh[152][2];Math.abs(i)>10&&n.push({face:r,gesture:`head ${i<0?"up":"down"}`})}return n},e.iris=t=>{if(!t)return[];let n=[];for(let r=0;r<t.length;r++){if(!t[r].annotations||!t[r].annotations.leftEyeIris||!t[r].annotations.rightEyeIris)continue;let a=t[r].annotations.leftEyeIris[3][0]-t[r].annotations.leftEyeIris[1][0],s=t[r].annotations.leftEyeIris[4][1]-t[r].annotations.leftEyeIris[2][1],i=Math.abs(a*s),o=t[r].annotations.rightEyeIris[3][0]-t[r].annotations.rightEyeIris[1][0],l=t[r].annotations.rightEyeIris[4][1]-t[r].annotations.rightEyeIris[2][1],c=Math.abs(o*l);Math.abs(i-c)/Math.max(i,c)<.25&&n.push({iris:r,gesture:"looking at camera"})}return n},e.hand=t=>{if(!t)return[];let n=[];for(let r=0;r<t.length;r++){let a=[];for(let[s,i]of Object.entries(t[r].annotations))s!=="palmBase"&&a.push({name:s.toLowerCase(),position:i[0]});if(a&&a.length>0){let s=a.reduce((o,l)=>o.position[2]<l.position[2]?o:l),i=a.reduce((o,l)=>o.position[1]<l.position[1]?o:l);n.push({hand:r,gesture:`${s.name} forward ${i.name} up`})}}return n}}),a4=ct(e=>{var t=function(r,a,s){let i=function(u,h,d){let p=new RegExp("\\b"+h+" \\w+ (\\w+)","ig");u.replace(p,(f,m)=>(d[m]=0,f))},o=function(u,h){let d=r.createShader(h);if(r.shaderSource(d,u),r.compileShader(d),!r.getShaderParameter(d,r.COMPILE_STATUS))throw new Error("Filter: GL compile failed",r.getShaderInfoLog(d));return d};this.uniform={},this.attribute={};let l=o(a,r.VERTEX_SHADER),c=o(s,r.FRAGMENT_SHADER);if(this.id=r.createProgram(),r.attachShader(this.id,l),r.attachShader(this.id,c),r.linkProgram(this.id),!r.getProgramParameter(this.id,r.LINK_STATUS))throw new Error("Filter: GL link failed",r.getProgramInfoLog(this.id));r.useProgram(this.id),i(a,"attribute",this.attribute);for(let u in this.attribute)this.attribute[u]=r.getAttribLocation(this.id,u);i(a,"uniform",this.uniform),i(s,"uniform",this.uniform);for(let u in this.uniform)this.uniform[u]=r.getUniformLocation(this.id,u)},n=function(r){r||(r={});let a=0,s=null,i=!1,o=-1,l=[null,null],c=[],u=-1,h=-1,d=null,p=null,f=r.canvas||document.createElement("canvas"),m={},A=f.getContext("webgl");if(!A)throw new Error("Filter: getContext() failed");this.addFilter=function(N){let C=Array.prototype.slice.call(arguments,1),$=S[N];c.push({func:$,args:C})},this.reset=function(){c=[]},this.apply=function(N){if(y(N.width,N.height),a=0,s||(s=A.createTexture()),A.bindTexture(A.TEXTURE_2D,s),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_S,A.CLAMP_TO_EDGE),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_T,A.CLAMP_TO_EDGE),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,A.NEAREST),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MAG_FILTER,A.NEAREST),A.texImage2D(A.TEXTURE_2D,0,A.RGBA,A.RGBA,A.UNSIGNED_BYTE,N),c.length===0)return x(),f;for(let C=0;C<c.length;C++){i=C===c.length-1;let $=c[C];$.func.apply(this,$.args||[])}return f};let y=function(N,C){if(!(N===u&&C===h)){if(f.width=N,u=N,f.height=C,h=C,!d){let $=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]);d=A.createBuffer(),A.bindBuffer(A.ARRAY_BUFFER,d),A.bufferData(A.ARRAY_BUFFER,$,A.STATIC_DRAW),A.pixelStorei(A.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}A.viewport(0,0,u,h),l=[null,null]}},g=function(N){return l[N]=l[N]||w(u,h),l[N]},w=function(N,C){let $=A.createFramebuffer();A.bindFramebuffer(A.FRAMEBUFFER,$);let D=A.createRenderbuffer();A.bindRenderbuffer(A.RENDERBUFFER,D);let O=A.createTexture();return A.bindTexture(A.TEXTURE_2D,O),A.texImage2D(A.TEXTURE_2D,0,A.RGBA,N,C,0,A.RGBA,A.UNSIGNED_BYTE,null),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MAG_FILTER,A.LINEAR),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_MIN_FILTER,A.LINEAR),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_S,A.CLAMP_TO_EDGE),A.texParameteri(A.TEXTURE_2D,A.TEXTURE_WRAP_T,A.CLAMP_TO_EDGE),A.framebufferTexture2D(A.FRAMEBUFFER,A.COLOR_ATTACHMENT0,A.TEXTURE_2D,O,0),A.bindTexture(A.TEXTURE_2D,null),A.bindFramebuffer(A.FRAMEBUFFER,null),{fbo:$,texture:O}},x=function(N){var C,$;let D=null,O=null,B=!1;a===0?D=s:D=(C=g(o))==null?void 0:C.texture,a++,i&&!(N&b.INTERMEDIATE)?(O=null,B=a%2==0):(o=(o+1)%2,O=($=g(o))==null?void 0:$.fbo),A.bindTexture(A.TEXTURE_2D,D),A.bindFramebuffer(A.FRAMEBUFFER,O),A.uniform1f(p.uniform.flipY,B?-1:1),A.drawArrays(A.TRIANGLES,0,6)},_=function(N){if(m[N])return p=m[N],A.useProgram(p.id),p;p=new t(A,T.VERTEX_IDENTITY,N);let C=Float32Array.BYTES_PER_ELEMENT,$=4*C;return A.enableVertexAttribArray(p.attribute.pos),A.vertexAttribPointer(p.attribute.pos,2,A.FLOAT,!1,$,0*C),A.enableVertexAttribArray(p.attribute.uv),A.vertexAttribPointer(p.attribute.uv,2,A.FLOAT,!1,$,2*C),m[N]=p,p},b={INTERMEDIATE:1},T={};T.VERTEX_IDENTITY=["precision highp float;","attribute vec2 pos;","attribute vec2 uv;","varying vec2 vUv;","uniform float flipY;","void main(void) {","vUv = uv;","gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);","}"].join(`
|
|
`),T.FRAGMENT_IDENTITY=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","void main(void) {","gl_FragColor = texture2D(texture, vUv);","}"].join(`
|
|
`);let S={};S.colorMatrix=function(N){let C=new Float32Array(N);C[4]/=255,C[9]/=255,C[14]/=255,C[19]/=255;let $=C[18]===1&&C[3]===0&&C[8]===0&&C[13]===0&&C[15]===0&&C[16]===0&&C[17]===0&&C[19]===0?S.colorMatrix.SHADER.WITHOUT_ALPHA:S.colorMatrix.SHADER.WITH_ALPHA,D=_($);A.uniform1fv(D.uniform.m,C),x()},S.colorMatrix.SHADER={},S.colorMatrix.SHADER.WITH_ALPHA=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform float m[20];","void main(void) {","vec4 c = texture2D(texture, vUv);","gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];","gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];","gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];","gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];","}"].join(`
|
|
`),S.colorMatrix.SHADER.WITHOUT_ALPHA=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform float m[20];","void main(void) {","vec4 c = texture2D(texture, vUv);","gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];","gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];","gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];","gl_FragColor.a = c.a;","}"].join(`
|
|
`),S.brightness=function(N){let C=(N||0)+1;S.colorMatrix([C,0,0,0,0,0,C,0,0,0,0,0,C,0,0,0,0,0,1,0])},S.saturation=function(N){let C=(N||0)*2/3+1,$=(C-1)*-.5;S.colorMatrix([C,$,$,0,0,$,C,$,0,0,$,$,C,0,0,0,0,0,1,0])},S.desaturate=function(){S.saturation(-1)},S.contrast=function(N){let C=(N||0)+1,$=-128*(C-1);S.colorMatrix([C,0,0,0,$,0,C,0,0,$,0,0,C,0,$,0,0,0,1,0])},S.negative=function(){S.contrast(-2)},S.hue=function(N){N=(N||0)/180*Math.PI;let C=Math.cos(N),$=Math.sin(N),D=.213,O=.715,B=.072;S.colorMatrix([D+C*(1-D)+$*-D,O+C*-O+$*-O,B+C*-B+$*(1-B),0,0,D+C*-D+$*.143,O+C*(1-O)+$*.14,B+C*-B+$*-.283,0,0,D+C*-D+$*-(1-D),O+C*-O+$*O,B+C*(1-B)+$*B,0,0,0,0,0,1,0])},S.desaturateLuminance=function(){S.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},S.sepia=function(){S.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},S.brownie=function(){S.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},S.vintagePinhole=function(){S.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},S.kodachrome=function(){S.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},S.technicolor=function(){S.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},S.polaroid=function(){S.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},S.shiftToBGR=function(){S.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},S.convolution=function(N){let C=new Float32Array(N),$=1/u,D=1/h,O=_(S.convolution.SHADER);A.uniform1fv(O.uniform.m,C),A.uniform2f(O.uniform.px,$,D),x()},S.convolution.SHADER=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform vec2 px;","uniform float m[9];","void main(void) {","vec4 c11 = texture2D(texture, vUv - px);","vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y));","vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y));","vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) );","vec4 c22 = texture2D(texture, vUv);","vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) );","vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) );","vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) );","vec4 c33 = texture2D(texture, vUv + px );","gl_FragColor = ","c11 * m[0] + c12 * m[1] + c22 * m[2] +","c21 * m[3] + c22 * m[4] + c23 * m[5] +","c31 * m[6] + c32 * m[7] + c33 * m[8];","gl_FragColor.a = c22.a;","}"].join(`
|
|
`),S.detectEdges=function(){S.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},S.sobelX=function(){S.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},S.sobelY=function(){S.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},S.sharpen=function(N){let C=N||1;S.convolution.call(this,[0,-1*C,0,-1*C,1+4*C,-1*C,0,-1*C,0])},S.emboss=function(N){let C=N||1;S.convolution.call(this,[-2*C,-1*C,0,-1*C,1,1*C,0,1*C,2*C])},S.blur=function(N){let C=N/7/u,$=N/7/h,D=_(S.blur.SHADER);A.uniform2f(D.uniform.px,0,$),x(b.INTERMEDIATE),A.uniform2f(D.uniform.px,C,0),x()},S.blur.SHADER=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform vec2 px;","void main(void) {","gl_FragColor = vec4(0.0);","gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;","gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;","gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;","gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;","gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;","gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;","gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;","gl_FragColor += texture2D(texture, vUv )*0.159576912161;","gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;","gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;","gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;","gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;","gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;","gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;","gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;","}"].join(`
|
|
`),S.pixelate=function(N){let C=N/u,$=N/h,D=_(S.pixelate.SHADER);A.uniform2f(D.uniform.size,C,$),x()},S.pixelate.SHADER=["precision highp float;","varying vec2 vUv;","uniform vec2 size;","uniform sampler2D texture;","vec2 pixelate(vec2 coord, vec2 size) {","return floor( coord / size ) * size;","}","void main(void) {","gl_FragColor = vec4(0.0);","vec2 coord = pixelate(vUv, size);","gl_FragColor += texture2D(texture, coord);","}"].join(`
|
|
`)};e.Canvas=n}),s4=ct(e=>{var t=Ve(a4()),n=null,r=null;function a(s,i){let o;if(s instanceof j)o=Tr(s);else{let l=s.naturalWidth||s.videoWidth||s.width||s.shape&&s.shape[1]>0,c=s.naturalHeight||s.videoHeight||s.height||s.shape&&s.shape[2]>0,u=l,h=c;if(i.filter.width>0?u=i.filter.width:i.filter.height>0&&(u=l*(i.filter.height/c)),i.filter.height>0?h=i.filter.height:i.filter.width>0&&(h=c*(i.filter.width/l)),!u||!h)return Ye("Human: invalid input",s),null;(!n||n.width!==u||n.height!==h)&&(n=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(u,h):document.createElement("canvas"),n.width!==u&&(n.width=u),n.height!==h&&(n.height=h));let d=n.getContext("2d");if(s instanceof ImageData?d.putImageData(s,0,0):d.drawImage(s,0,0,l,c,0,0,n.width,n.height),i.filter.enabled){if((!this.fx||!r||n.width!==r.width||n.height!==r.height)&&(r=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(n.width,n.height):document.createElement("canvas"),r.width!==n.width&&(r.width=n.width),r.height!==n.height&&(r.height=n.height),this.fx=vn.flags.IS_BROWSER?new t.Canvas({canvas:r}):null),!this.fx)return n;this.fx.reset(),this.fx.addFilter("brightness",i.filter.brightness),i.filter.contrast!==0&&this.fx.addFilter("contrast",i.filter.contrast),i.filter.sharpness!==0&&this.fx.addFilter("sharpen",i.filter.sharpness),i.filter.blur!==0&&this.fx.addFilter("blur",i.filter.blur),i.filter.saturation!==0&&this.fx.addFilter("saturation",i.filter.saturation),i.filter.hue!==0&&this.fx.addFilter("hue",i.filter.hue),i.filter.negative&&this.fx.addFilter("negative"),i.filter.sepia&&this.fx.addFilter("sepia"),i.filter.vintage&&this.fx.addFilter("brownie"),i.filter.sepia&&this.fx.addFilter("sepia"),i.filter.kodachrome&&this.fx.addFilter("kodachrome"),i.filter.technicolor&&this.fx.addFilter("technicolor"),i.filter.polaroid&&this.fx.addFilter("polaroid"),i.filter.pixelate!==0&&this.fx.addFilter("pixelate",i.filter.pixelate),this.fx.apply(n)}else r=n;let p;if(r.data){let m=[r.height,r.width,3];p=ff(r.data,m,"int32")}else if(i.backend==="webgl"||r instanceof ImageData)p=Kl.fromPixels(r);else{let m=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(u,h):document.createElement("canvas");m.width=u,m.height=h;let A=m.getContext("2d");A==null||A.drawImage(r,0,0);let y=A==null?void 0:A.getImageData(0,0,u,h);p=Kl.fromPixels(y)}let f=p.toFloat();o=f.expandDims(0),p.dispose(),f.dispose()}return{tensor:o,canvas:i.filter.return?r:null}}e.process=a});function Ye(...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 Q2={};G2(Q2,{Abs:()=>Di,Acos:()=>Oi,Acosh:()=>zi,AdadeltaOptimizer:()=>wd,AdagradOptimizer:()=>_d,AdamOptimizer:()=>bd,AdamaxOptimizer:()=>vd,Add:()=>Aa,AddN:()=>Ja,All:()=>fh,Any:()=>mh,ArgMax:()=>Ya,ArgMin:()=>Jl,Asin:()=>Pi,Asinh:()=>Li,Atan:()=>Wi,Atan2:()=>Vi,Atanh:()=>Bi,AvgPool:()=>Qa,AvgPool3D:()=>Yl,AvgPool3DGrad:()=>yh,AvgPoolGrad:()=>Ah,BackendWasm:()=>o0,BatchMatMul:()=>es,BatchToSpaceND:()=>Ql,Bincount:()=>gh,BroadcastTo:()=>tg,Callback:()=>_0,CallbackList:()=>f0,Cast:()=>ts,Ceil:()=>Ui,ClipByValue:()=>ya,Complex:()=>xh,ComplexAbs:()=>eu,Concat:()=>Hi,Conv2D:()=>ns,Conv2DBackpropFilter:()=>wh,Conv2DBackpropInput:()=>rs,Conv3D:()=>tu,Conv3DBackpropFilterV2:()=>_h,Conv3DBackpropInputV2:()=>bh,Cos:()=>as,Cosh:()=>ji,CropAndResize:()=>Gi,Cumsum:()=>ss,CustomCallback:()=>A0,DataStorage:()=>ph,DenseBincount:()=>vh,DepthToSpace:()=>qi,DepthwiseConv2dNative:()=>is,DepthwiseConv2dNativeBackpropFilter:()=>kh,DepthwiseConv2dNativeBackpropInput:()=>Ih,Diag:()=>Nh,Dilation2D:()=>nu,Dilation2DBackpropFilter:()=>Th,Dilation2DBackpropInput:()=>Sh,ENV:()=>vn,EarlyStopping:()=>b0,Elu:()=>Xi,EluGrad:()=>Eh,Environment:()=>eg,Equal:()=>Zi,Erf:()=>Ki,Exp:()=>ls,ExpandDims:()=>Ji,Expm1:()=>Yi,FFT:()=>Ch,Fill:()=>ru,FlipLeftRight:()=>Qi,Floor:()=>us,FloorDiv:()=>cs,FromPixels:()=>Hh,FusedBatchNorm:()=>hs,FusedConv2D:()=>Vs,FusedDepthwiseConv2D:()=>Us,GPGPUContext:()=>nm,GatherNd:()=>to,GatherV2:()=>eo,GraphModel:()=>v0,Greater:()=>no,GreaterEqual:()=>ds,History:()=>m0,IFFT:()=>Rh,Identity:()=>ro,Imag:()=>Fh,InputSpec:()=>Gt,IsFinite:()=>ao,IsInf:()=>so,IsNan:()=>io,KernelBackend:()=>Zl,LRN:()=>iu,LRNGrad:()=>$h,LayerVariable:()=>p0,LayersModel:()=>ra,LeakyRelu:()=>ps,Less:()=>oo,LessEqual:()=>lo,LinSpace:()=>Mh,Log:()=>fs,Log1p:()=>uo,LogSoftmax:()=>ng,LogicalAnd:()=>co,LogicalNot:()=>au,LogicalOr:()=>su,MathBackendCPU:()=>t0,MathBackendWebGL:()=>rm,Max:()=>ms,MaxPool:()=>ys,MaxPool3D:()=>ou,MaxPool3DGrad:()=>Oh,MaxPoolGrad:()=>Dh,MaxPoolWithArgmax:()=>zh,Maximum:()=>As,Mean:()=>gs,Min:()=>xs,Minimum:()=>ws,MirrorPad:()=>lu,Mod:()=>ho,MomentumOptimizer:()=>kd,Multinomial:()=>Ph,Multiply:()=>_s,Neg:()=>po,NonMaxSuppressionV3:()=>mo,NonMaxSuppressionV4:()=>Ao,NonMaxSuppressionV5:()=>yo,NotEqual:()=>fo,OP_SCOPE_SUFFIX:()=>ag,OneHot:()=>bs,OnesLike:()=>go,Optimizer:()=>na,Pack:()=>xo,PadV2:()=>vs,Pool:()=>i4,Pow:()=>ks,Prelu:()=>Is,Prod:()=>wo,RMSPropOptimizer:()=>Id,RNN:()=>$r,Range:()=>uu,Rank:()=>yf,Real:()=>Lh,RealDiv:()=>os,Reciprocal:()=>_o,Reduction:()=>ln,Relu:()=>Ns,Relu6:()=>Ts,Reshape:()=>bo,ResizeBilinear:()=>Ss,ResizeBilinearGrad:()=>Bh,ResizeNearestNeighbor:()=>cu,ResizeNearestNeighborGrad:()=>Wh,Reverse:()=>Es,RotateWithOffset:()=>zo,Round:()=>Cs,Rsqrt:()=>Rs,SGDOptimizer:()=>Ou,ScatterNd:()=>vo,Select:()=>ko,Selu:()=>Io,Sequential:()=>Xo,Sigmoid:()=>Ms,Sign:()=>To,Sin:()=>Fs,Sinh:()=>So,Slice:()=>No,Softmax:()=>Os,Softplus:()=>Eo,SpaceToBatchND:()=>hu,SparseToDense:()=>Vh,SplitV:()=>Co,Sqrt:()=>$s,Square:()=>du,SquaredDifference:()=>zs,Step:()=>Oo,StridedSlice:()=>Ro,Sub:()=>Ps,Sum:()=>Ds,SymbolicTensor:()=>yr,Tan:()=>Fo,Tanh:()=>Ls,Tensor:()=>j,TensorBuffer:()=>zt,Tile:()=>ga,TopK:()=>Mo,Transpose:()=>Ws,Unique:()=>Uh,Unpack:()=>$o,UnsortedSegmentSum:()=>pu,Variable:()=>mu,ZerosLike:()=>Do,_FusedMatMul:()=>Bs,abs:()=>Pt,acos:()=>_f,acosh:()=>bf,add:()=>oe,addN:()=>hh,addStrict:()=>Bg,all:()=>Zh,any:()=>yu,argMax:()=>gu,argMin:()=>vf,asin:()=>kf,asinh:()=>If,atan:()=>Nf,atan2:()=>Sf,atanh:()=>Tf,avgPool:()=>xu,avgPool3d:()=>Ef,backend:()=>wf,backend_util:()=>F,basicLSTMCell:()=>y4,batchNorm:()=>Hs,batchNorm2d:()=>pg,batchNorm3d:()=>fg,batchNorm4d:()=>mg,batchToSpaceND:()=>wu,bincount:()=>Ag,booleanMaskAsync:()=>L4,broadcastTo:()=>_u,browser:()=>Kl,buffer:()=>He,callbacks:()=>J4,cast:()=>ge,ceil:()=>Cf,clipByValue:()=>mn,clone:()=>Tr,complex:()=>xa,concat:()=>dt,concat1d:()=>yg,concat2d:()=>jl,concat3d:()=>gg,concat4d:()=>xg,constraints:()=>c0,conv1d:()=>Jh,conv2d:()=>Yr,conv2dTranspose:()=>Yh,conv3d:()=>Rf,conv3dTranspose:()=>g4,copyRegisteredKernels:()=>u4,cos:()=>bu,cosh:()=>Qh,cosineWindow:()=>Qf,cumsum:()=>ed,customGrad:()=>Er,data:()=>k0,denseBincount:()=>wg,deprecationWarn:()=>Mt,depthToSpace:()=>Ff,depthwiseConv2d:()=>js,deregisterOp:()=>Q4,device_util:()=>Gh,diag:()=>x4,dilation2d:()=>Mf,disableDeprecationWarnings:()=>h4,dispose:()=>$e,disposeVariables:()=>d4,div:()=>Te,divNoNan:()=>$f,divStrict:()=>Vg,dot:()=>_g,dropout:()=>Yg,elu:()=>Bo,enableDebugMode:()=>c4,enableProdMode:()=>ug,enclosingPowerOfTwo:()=>Qg,engine:()=>Bn,env:()=>Q,equal:()=>Qr,equalStrict:()=>Dg,erf:()=>Df,exp:()=>Vn,expandDims:()=>Un,expm1:()=>Of,eye:()=>zf,fft:()=>Mu,fill:()=>vu,findBackend:()=>dg,findBackendFactory:()=>m4,floor:()=>Vo,floorDiv:()=>Kh,forceHalfFloat:()=>i0,fused:()=>ka,gather:()=>Gs,gatherND:()=>Jg,gather_util:()=>gf,getBackend:()=>Xh,getGradient:()=>Af,getKernel:()=>mf,getKernelsForBackend:()=>fu,gpgpu_util:()=>a0,grad:()=>w4,grads:()=>_4,greater:()=>Hn,greaterEqual:()=>ea,greaterEqualStrict:()=>Og,greaterStrict:()=>zg,ifft:()=>Go,imag:()=>td,image:()=>Ot,inTopKAsync:()=>B4,initializers:()=>h0,input:()=>y0,io:()=>fn,irfft:()=>Ad,isFinite:()=>bg,isInf:()=>vg,isNaN:()=>kg,keep:()=>jt,kernel_impls:()=>Mr,layers:()=>d0,leakyRelu:()=>ku,less:()=>Iu,lessEqual:()=>_a,lessEqualStrict:()=>Pg,lessStrict:()=>Lg,linalg:()=>e0,linspace:()=>Ig,loadGraphModel:()=>pr,loadLayersModel:()=>K4,localResponseNormalization:()=>Pf,log:()=>kn,log1p:()=>nd,logSigmoid:()=>Sg,logSoftmax:()=>rd,logSumExp:()=>Lf,logicalAnd:()=>tr,logicalNot:()=>Nu,logicalOr:()=>ad,logicalXor:()=>Tg,losses:()=>H4,matMul:()=>Ke,math:()=>ig,max:()=>jn,maxPool:()=>Su,maxPool3d:()=>Wf,maxPoolWithArgmax:()=>Eg,maximum:()=>Ar,maximumStrict:()=>Ug,mean:()=>It,memory:()=>qh,metrics:()=>g0,min:()=>Ho,minimum:()=>qs,minimumStrict:()=>Hg,mirrorPad:()=>Bf,mod:()=>sd,modStrict:()=>jg,model:()=>q4,models:()=>x0,moments:()=>id,movingAverage:()=>W4,mul:()=>W,mulStrict:()=>Gg,multiRNNCell:()=>k4,multinomial:()=>Cg,neg:()=>kt,nextFrame:()=>Nd,norm:()=>xd,notEqual:()=>ba,notEqualStrict:()=>Wg,oneHot:()=>Lo,ones:()=>Cr,onesLike:()=>In,op:()=>P,outerProduct:()=>I4,pad:()=>ta,pad1d:()=>N4,pad2d:()=>S4,pad3d:()=>T4,pad4d:()=>E4,pool:()=>Rg,pow:()=>Rr,powStrict:()=>qg,prelu:()=>Eu,print:()=>sg,prod:()=>od,profile:()=>ql,rand:()=>C4,randomGamma:()=>R4,randomNormal:()=>Fg,randomUniform:()=>jo,range:()=>ld,ready:()=>hg,real:()=>Cu,reciprocal:()=>Vf,registerBackend:()=>Au,registerCallbackConstructor:()=>Z4,registerGradient:()=>rg,registerKernel:()=>Po,registerOp:()=>Y4,regularizers:()=>w0,relu:()=>Fr,relu6:()=>ud,removeBackend:()=>f4,reshape:()=>K,reverse:()=>Nn,reverse1d:()=>F4,reverse2d:()=>M4,reverse3d:()=>$4,reverse4d:()=>D4,rfft:()=>$u,round:()=>Uf,rsqrt:()=>cd,scalar:()=>Ee,scatterND:()=>Zg,scatter_util:()=>xf,selu:()=>hd,separableConv2d:()=>Hf,sequential:()=>X4,serialization:()=>se,setBackend:()=>cg,setPlatform:()=>A4,setWasmPath:()=>G4,setWasmPaths:()=>l0,setWebGLContext:()=>tm,setdiff1dAsync:()=>Mg,shared:()=>em,sigmoid:()=>Qn,sign:()=>jf,signal:()=>U4,sin:()=>dd,sinh:()=>pd,slice:()=>Me,slice1d:()=>fd,slice2d:()=>Gf,slice3d:()=>md,slice4d:()=>Ru,slice_util:()=>on,softmax:()=>Fu,softplus:()=>Uo,spaceToBatchND:()=>Tu,sparseToDense:()=>Yf,spectral:()=>V4,split:()=>sn,sqrt:()=>Yt,square:()=>ht,squaredDifference:()=>Du,squaredDifferenceStrict:()=>Xg,squeeze:()=>va,stack:()=>Sn,step:()=>qo,stridedSlice:()=>qf,sub:()=>_e,subStrict:()=>Kg,sum:()=>Ce,sumOutType:()=>jh,tan:()=>Xf,tanh:()=>Wo,tensor:()=>mr,tensor1d:()=>nn,tensor2d:()=>dr,tensor3d:()=>ff,tensor4d:()=>O4,tensor5d:()=>z4,tensor6d:()=>P4,tensor_util:()=>fr,test_util:()=>og,tidy:()=>U,tile:()=>wa,time:()=>p4,topk:()=>Kf,train:()=>Xs,transpose:()=>st,truncatedNormal:()=>yd,unique:()=>gd,unregisterGradient:()=>l4,unregisterKernel:()=>o4,unsortedSegmentSum:()=>Zf,unstack:()=>nr,upcastType:()=>er,util:()=>k,valueAndGrad:()=>b4,valueAndGrads:()=>v4,variable:()=>$g,variableGrads:()=>Ng,version:()=>t8,version_converter:()=>e8,version_core:()=>lg,version_cpu:()=>n0,version_layers:()=>am,version_wasm:()=>u0,version_webgl:()=>s0,webgl:()=>j4,webgl_util:()=>r0,where:()=>An,whereAsync:()=>Jf,zeros:()=>Rt,zerosLike:()=>Ge});var n8=Object.create,Sd=Object.defineProperty,r8=Object.getPrototypeOf,a8=Object.prototype.hasOwnProperty,s8=Object.getOwnPropertyNames,i8=Object.getOwnPropertyDescriptor,I0=e=>Sd(e,"__esModule",{value:!0}),rt=(e,t)=>()=>(t||(t={exports:{}},e(t.exports,t)),t.exports),Pe=(e,t)=>{I0(e);for(var n in t)Sd(e,n,{get:t[n],enumerable:!0})},o8=(e,t,n)=>{if(I0(e),t&&typeof t=="object"||typeof t=="function")for(let r of s8(t))!a8.call(e,r)&&r!=="default"&&Sd(e,r,{get:()=>t[r],enumerable:!(n=i8(t,r))||n.enumerable});return e},Ko=e=>e&&e.__esModule?e:o8(Sd(e!=null?n8(r8(e)):{},"default",{value:e,enumerable:!0}),e),l8=rt(()=>{}),u8=rt((e,t)=>{(function(n,r,a){function s(c){var u=this,h=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=h(" "),u.s1=h(" "),u.s2=h(" "),u.s0-=h(c),u.s0<0&&(u.s0+=1),u.s1-=h(c),u.s1<0&&(u.s1+=1),u.s2-=h(c),u.s2<0&&(u.s2+=1),h=null}function i(c,u){return u.c=c.c,u.s0=c.s0,u.s1=c.s1,u.s2=c.s2,u}function o(c,u){var h=new s(c),d=u&&u.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var c=4022871197,u=function(h){h=h.toString();for(var d=0;d<h.length;d++){c+=h.charCodeAt(d);var p=.02519603282416938*c;c=p>>>0,p-=c,p*=c,c=p>>>0,p-=c,c+=p*4294967296}return(c>>>0)*23283064365386963e-26};return u}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),c8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),h8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,h==u.length&&(c.d=c.x<<10^c.x>>>4),c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c.v=l.v,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),d8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.x,d=c.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,c.i=d+1&7,f};function u(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}u(c,l)}function i(l,c){return c.x=l.x.slice(),c.i=l.i,c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.x&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),p8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.w,d=c.X,p=c.i,f,m;return c.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,c.i=p,m+(h^h>>>16)|0};function u(h,d){var p,f,m,A,y,g=[],w=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,w=Math.max(w,d.length)),m=0,A=-32;A<w;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}u(c,l)}function i(l,c){return c.i=l.i,c.w=l.w,c.X=l.X.slice(),c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.X&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),f8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.b,p=c.c,f=c.d,m=c.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,c.b=d=d<<20^d>>>12^p,c.c=p=p-f|0,c.d=f<<16^p>>>16^m,c.a=m-d|0},c.a=0,c.b=0,c.c=2654435769|0,c.d=1367130551,l===Math.floor(l)?(c.a=l/4294967296|0,c.b=l|0):u+=l;for(var h=0;h<u.length+20;h++)c.b^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.a=l.a,c.b=l.b,c.c=l.c,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),sm=rt(()=>{}),m8=rt((e,t)=>{(function(n,r){var a=this,s=256,i=6,o=52,l="random",c=r.pow(s,i),u=r.pow(2,o),h=u*2,d=s-1,p;function f(_,b,T){var S=[];b=b==!0?{entropy:!0}:b||{};var N=g(y(b.entropy?[_,x(n)]:_==null?w():_,3),S),C=new m(S),$=function(){for(var D=C.g(i),O=c,B=0;D<u;)D=(D+B)*s,O*=s,B=C.g(1);for(;D>=h;)D/=2,O/=2,B>>>=1;return(D+B)/O};return $.int32=function(){return C.g(4)|0},$.quick=function(){return C.g(4)/4294967296},$.double=$,g(x(C.S),n),(b.pass||T||function(D,O,B,H){return H&&(H.S&&A(H,C),D.state=function(){return A(C,{})}),B?(r[l]=D,O):D})($,N,"global"in b?b.global:this==r,b.state)}r["seed"+l]=f;function m(_){var b,T=_.length,S=this,N=0,C=S.i=S.j=0,$=S.S=[];for(T||(_=[T++]);N<s;)$[N]=N++;for(N=0;N<s;N++)$[N]=$[C=d&C+_[N%T]+(b=$[N])],$[C]=b;(S.g=function(D){for(var O,B=0,H=S.i,X=S.j,Z=S.S;D--;)O=Z[H=d&H+1],B=B*s+Z[d&(Z[H]=Z[X=d&X+O])+(Z[X]=O)];return S.i=H,S.j=X,B})(s)}function A(_,b){return b.i=_.i,b.j=_.j,b.S=_.S.slice(),b}function y(_,b){var T=[],S=typeof _,N;if(b&&S=="object")for(N in _)try{T.push(y(_[N],b-1))}catch(C){}return T.length?T:S=="string"?_:_+"\0"}function g(_,b){for(var T=_+"",S,N=0;N<T.length;)b[d&N]=d&(S^=b[d&N]*19)+T.charCodeAt(N++);return x(b)}function w(){try{var _;return p&&(_=p.randomBytes)?_=_(s):(_=new Uint8Array(s),(a.crypto||a.msCrypto).getRandomValues(_)),x(_)}catch(S){var b=a.navigator,T=b&&b.plugins;return[+new Date,a,T,a.screen,x(n)]}}function x(_){return String.fromCharCode.apply(0,_)}if(g(r.random(),n),typeof t=="object"&&t.exports){t.exports=f;try{p=sm()}catch(_){}}else typeof define=="function"&&define.amd&&define(function(){return f})})([],Math)}),A8=rt((e,t)=>{var n=u8(),r=c8(),a=h8(),s=d8(),i=p8(),o=f8(),l=m8();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),y8=rt((e,t)=>{(function(n,r,a){function s(c){var u=this,h=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=h(" "),u.s1=h(" "),u.s2=h(" "),u.s0-=h(c),u.s0<0&&(u.s0+=1),u.s1-=h(c),u.s1<0&&(u.s1+=1),u.s2-=h(c),u.s2<0&&(u.s2+=1),h=null}function i(c,u){return u.c=c.c,u.s0=c.s0,u.s1=c.s1,u.s2=c.s2,u}function o(c,u){var h=new s(c),d=u&&u.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var c=4022871197,u=function(h){h=h.toString();for(var d=0;d<h.length;d++){c+=h.charCodeAt(d);var p=.02519603282416938*c;c=p>>>0,p-=c,p*=c,c=p>>>0,p-=c,c+=p*4294967296}return(c>>>0)*23283064365386963e-26};return u}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),g8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),x8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,h==u.length&&(c.d=c.x<<10^c.x>>>4),c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c.v=l.v,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),w8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.x,d=c.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,c.i=d+1&7,f};function u(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}u(c,l)}function i(l,c){return c.x=l.x.slice(),c.i=l.i,c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.x&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),_8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.w,d=c.X,p=c.i,f,m;return c.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,c.i=p,m+(h^h>>>16)|0};function u(h,d){var p,f,m,A,y,g=[],w=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,w=Math.max(w,d.length)),m=0,A=-32;A<w;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}u(c,l)}function i(l,c){return c.i=l.i,c.w=l.w,c.X=l.X.slice(),c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.X&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),b8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.b,p=c.c,f=c.d,m=c.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,c.b=d=d<<20^d>>>12^p,c.c=p=p-f|0,c.d=f<<16^p>>>16^m,c.a=m-d|0},c.a=0,c.b=0,c.c=2654435769|0,c.d=1367130551,l===Math.floor(l)?(c.a=l/4294967296|0,c.b=l|0):u+=l;for(var h=0;h<u.length+20;h++)c.b^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.a=l.a,c.b=l.b,c.c=l.c,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),v8=rt((e,t)=>{(function(n,r){var a=this,s=256,i=6,o=52,l="random",c=r.pow(s,i),u=r.pow(2,o),h=u*2,d=s-1,p;function f(_,b,T){var S=[];b=b==!0?{entropy:!0}:b||{};var N=g(y(b.entropy?[_,x(n)]:_==null?w():_,3),S),C=new m(S),$=function(){for(var D=C.g(i),O=c,B=0;D<u;)D=(D+B)*s,O*=s,B=C.g(1);for(;D>=h;)D/=2,O/=2,B>>>=1;return(D+B)/O};return $.int32=function(){return C.g(4)|0},$.quick=function(){return C.g(4)/4294967296},$.double=$,g(x(C.S),n),(b.pass||T||function(D,O,B,H){return H&&(H.S&&A(H,C),D.state=function(){return A(C,{})}),B?(r[l]=D,O):D})($,N,"global"in b?b.global:this==r,b.state)}r["seed"+l]=f;function m(_){var b,T=_.length,S=this,N=0,C=S.i=S.j=0,$=S.S=[];for(T||(_=[T++]);N<s;)$[N]=N++;for(N=0;N<s;N++)$[N]=$[C=d&C+_[N%T]+(b=$[N])],$[C]=b;(S.g=function(D){for(var O,B=0,H=S.i,X=S.j,Z=S.S;D--;)O=Z[H=d&H+1],B=B*s+Z[d&(Z[H]=Z[X=d&X+O])+(Z[X]=O)];return S.i=H,S.j=X,B})(s)}function A(_,b){return b.i=_.i,b.j=_.j,b.S=_.S.slice(),b}function y(_,b){var T=[],S=typeof _,N;if(b&&S=="object")for(N in _)try{T.push(y(_[N],b-1))}catch(C){}return T.length?T:S=="string"?_:_+"\0"}function g(_,b){for(var T=_+"",S,N=0;N<T.length;)b[d&N]=d&(S^=b[d&N]*19)+T.charCodeAt(N++);return x(b)}function w(){try{var _;return p&&(_=p.randomBytes)?_=_(s):(_=new Uint8Array(s),(a.crypto||a.msCrypto).getRandomValues(_)),x(_)}catch(S){var b=a.navigator,T=b&&b.plugins;return[+new Date,a,T,a.screen,x(n)]}}function x(_){return String.fromCharCode.apply(0,_)}if(g(r.random(),n),typeof t=="object"&&t.exports){t.exports=f;try{p=sm()}catch(_){}}else typeof define=="function"&&define.amd&&define(function(){return f})})([],Math)}),k8=rt((e,t)=>{var n=y8(),r=g8(),a=x8(),s=w8(),i=_8(),o=b8(),l=v8();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),zu=rt(()=>{}),I8=rt(()=>{}),N8=rt(()=>{}),S8=rt((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(a){a=a||{};function s(){return ne.buffer!=vt&&ur(ne.buffer),Jt}function i(){return ne.buffer!=vt&&ur(ne.buffer),pn}function o(){return ne.buffer!=vt&&ur(ne.buffer),an}function l(){return ne.buffer!=vt&&ur(ne.buffer),zn}function c(){return ne.buffer!=vt&&ur(ne.buffer),Gr}var u=typeof a!="undefined"?a:{},h=void 0,d={},p;for(p in u)u.hasOwnProperty(p)&&(d[p]=u[p]);var f=[],m="./this.program",A=function(v,E){throw E},y=!1,g=!1,w=!1,x=!1;y=typeof window=="object",g=typeof importScripts=="function",w=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",x=!y&&!w&&!g;var _=u.ENVIRONMENT_IS_PTHREAD||!1;_&&(vt=u.buffer,hr=u.DYNAMIC_BASE,Ua=u.DYNAMICTOP_PTR);var b="";function T(v){return u.locateFile?u.locateFile(v,b):b+v}var S,N,C,$,D,O;if(w){g?b=zu().dirname(b)+"/":b=__dirname+"/",S=function(v,E){return D||(D=require("fs")),O||(O=zu()),v=O.normalize(v),D.readFileSync(v,E?null:"utf8")},C=function(v){var E=S(v,!0);return E.buffer||(E=new Uint8Array(E)),Ne(E.buffer),E},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),process.on("uncaughtException",function(v){if(!(v instanceof U2))throw v}),process.on("unhandledRejection",Kr),A=function(v){process.exit(v)},u.inspect=function(){return"[Emscripten Module object]"};var B;try{B=I8()}catch(v){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),v}Worker=B.Worker}else x?(typeof read!="undefined"&&(S=function(v){return read(v)}),C=function(v){var E;return typeof readbuffer=="function"?new Uint8Array(readbuffer(v)):(E=read(v,"binary"),Ne(typeof E=="object"),E)},typeof scriptArgs!="undefined"?f=scriptArgs:typeof arguments!="undefined"&&(f=arguments),typeof quit=="function"&&(A=function(v){quit(v)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(y||g)&&(g?b=self.location.href:document.currentScript&&(b=document.currentScript.src),h&&(b=h),b.indexOf("blob:")!==0?b=b.substr(0,b.lastIndexOf("/")+1):b="",w?(S=function(v,E){return D||(D=require("fs")),O||(O=zu()),v=O.normalize(v),D.readFileSync(v,E?null:"utf8")},C=function(v){var E=S(v,!0);return E.buffer||(E=new Uint8Array(E)),Ne(E.buffer),E}):(S=function(v){var E=new XMLHttpRequest;return E.open("GET",v,!1),E.send(null),E.responseText},g&&(C=function(v){var E=new XMLHttpRequest;return E.open("GET",v,!1),E.responseType="arraybuffer",E.send(null),new Uint8Array(E.response)}),N=function(v,E,z){var q=new XMLHttpRequest;q.open("GET",v,!0),q.responseType="arraybuffer",q.onload=function(){if(q.status==200||q.status==0&&q.response){E(q.response);return}z()},q.onerror=z,q.send(null)}),$=function(v){document.title=v});w&&typeof performance=="undefined"&&(performance=N8().performance);var H=u.print||console.log.bind(console),X=u.printErr||console.warn.bind(console);for(p in d)d.hasOwnProperty(p)&&(u[p]=d[p]);d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(m=u.thisProgram),u.quit&&(A=u.quit);var Z=Atomics.load,ee=Atomics.store,Y=Atomics.compareExchange,ie;u.wasmBinary&&(ie=u.wasmBinary);var re;u.noExitRuntime&&(re=u.noExitRuntime),typeof WebAssembly!="object"&&X("no native wasm support detected");var ne,ae=new WebAssembly.Table({initial:169,maximum:169+0,element:"anyfunc"}),de,ue=0,me=0,ye=!1,be=0;function Ne(v,E){v||Kr("Assertion failed: "+E)}function Re(v){var E=u["_"+v];return Ne(E,"Cannot call unknown function "+v+", make sure it is exported"),E}function Oe(v,E,z,q,fe){var he={string:function(Wn){var ma=0;if(Wn!=null&&Wn!==0){var Hl=(Wn.length<<2)+1;ma=Ri(Hl),Ue(Wn,ma,Hl)}return ma},array:function(Wn){var ma=Ri(Wn.length);return ut(Wn,ma),ma}};function ce(Wn){return E==="string"?We(Wn):E==="boolean"?Boolean(Wn):Wn}var ke=Re(v),tt=[],Dt=0;if(q)for(var tn=0;tn<q.length;tn++){var Mi=he[z[tn]];Mi?(Dt===0&&(Dt=Bl()),tt[tn]=Mi(q[tn])):tt[tn]=q[tn]}var Ul=ke.apply(null,tt);return Ul=ce(Ul),Dt!==0&&Fi(Dt),Ul}function qe(v,E,z,q){z=z||[];var fe=z.every(function(ce){return ce==="number"}),he=E!=="string";return he&&fe&&!q?Re(v):function(){return Oe(v,E,z,arguments,q)}}function et(v,E,z){for(var q=E+z,fe="";!(E>=q);){var he=v[E++];if(!he)return fe;if(!(he&128)){fe+=String.fromCharCode(he);continue}var ce=v[E++]&63;if((he&224)==192){fe+=String.fromCharCode((he&31)<<6|ce);continue}var ke=v[E++]&63;if((he&240)==224?he=(he&15)<<12|ce<<6|ke:he=(he&7)<<18|ce<<12|ke<<6|v[E++]&63,he<65536)fe+=String.fromCharCode(he);else{var tt=he-65536;fe+=String.fromCharCode(55296|tt>>10,56320|tt&1023)}}return fe}function We(v,E){return v?et(i(),v,E):""}function it(v,E,z,q){if(!(q>0))return 0;for(var fe=z,he=z+q-1,ce=0;ce<v.length;++ce){var ke=v.charCodeAt(ce);if(ke>=55296&&ke<=57343){var tt=v.charCodeAt(++ce);ke=65536+((ke&1023)<<10)|tt&1023}if(ke<=127){if(z>=he)break;E[z++]=ke}else if(ke<=2047){if(z+1>=he)break;E[z++]=192|ke>>6,E[z++]=128|ke&63}else if(ke<=65535){if(z+2>=he)break;E[z++]=224|ke>>12,E[z++]=128|ke>>6&63,E[z++]=128|ke&63}else{if(z+3>=he)break;E[z++]=240|ke>>18,E[z++]=128|ke>>12&63,E[z++]=128|ke>>6&63,E[z++]=128|ke&63}}return E[z]=0,z-fe}function Ue(v,E,z){return it(v,i(),E,z)}function ot(v){for(var E=0,z=0;z<v.length;++z){var q=v.charCodeAt(z);q>=55296&&q<=57343&&(q=65536+((q&1023)<<10)|v.charCodeAt(++z)&1023),q<=127?++E:q<=2047?E+=2:q<=65535?E+=3:E+=4}return E}function ut(v,E){s().set(v,E)}var _n=65536;function Tt(v,E){return v%E>0&&(v+=E-v%E),v}var vt,Jt,pn,Jn,bn,an,zn,jr,Gr;function ur(v){vt=v,u.HEAP8=Jt=new Int8Array(v),u.HEAP16=Jn=new Int16Array(v),u.HEAP32=an=new Int32Array(v),u.HEAPU8=pn=new Uint8Array(v),u.HEAPU16=bn=new Uint16Array(v),u.HEAPU32=zn=new Uint32Array(v),u.HEAPF32=jr=new Float32Array(v),u.HEAPF64=Gr=new Float64Array(v)}var vi=5256464,cr=vi,Nr=13584,hr=5256464,Ua=12656,Lc=u.INITIAL_MEMORY||16777216;if(_)ne=u.wasmMemory,vt=u.buffer;else if(u.wasmMemory)ne=u.wasmMemory;else if(ne=new WebAssembly.Memory({initial:Lc/_n,maximum:2147483648/_n,shared:!0}),!(ne.buffer instanceof SharedArrayBuffer))throw X("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"),w&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");ne&&(vt=ne.buffer),Lc=vt.byteLength,ur(vt),_||(o()[Ua>>2]=hr);function qr(v){for(;v.length>0;){var E=v.shift();if(typeof E=="function"){E(u);continue}var z=E.func;typeof z=="number"?E.arg===void 0?u.dynCall_v(z):u.dynCall_vi(z,E.arg):z(E.arg===void 0?null:E.arg)}}var Cl=[],Wc=[],Bc=[],Vc=[],Rl=[],Pn=!1;_&&(Pn=!0);function Uc(){if(!_){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)Ha(u.preRun.shift());qr(Cl)}}function r1(){Pn=!0,qr(Wc)}function a1(){_||qr(Bc)}function s1(){if(!_){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)ki(u.postRun.shift());qr(Rl)}}function Ha(v){Cl.unshift(v)}function ki(v){Rl.unshift(v)}var i1=Math.ceil,o1=Math.floor,Xr=0,Fl=null,ja=null;function l1(v){Ne(!_,"addRunDependency cannot be used in a pthread worker"),Xr++,u.monitorRunDependencies&&u.monitorRunDependencies(Xr)}function Hc(v){if(Xr--,u.monitorRunDependencies&&u.monitorRunDependencies(Xr),Xr==0&&(Fl!==null&&(clearInterval(Fl),Fl=null),ja)){var E=ja;ja=null,E()}}u.preloadedImages={},u.preloadedAudios={};function Kr(v){throw u.onAbort&&u.onAbort(v),_&&console.error("Pthread aborting at "+new Error().stack),v+="",H(v),X(v),ye=!0,be=1,v="abort("+v+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(v)}function jc(v,E){return String.prototype.startsWith?v.startsWith(E):v.indexOf(E)===0}var u1="data:application/octet-stream;base64,";function Gc(v){return jc(v,u1)}var c1="file://";function qc(v){return jc(v,c1)}var Yn="tfjs-backend-wasm-threaded-simd.wasm";Gc(Yn)||(Yn=T(Yn));function Xc(){try{if(ie)return new Uint8Array(ie);if(C)return C(Yn);throw"both async and sync fetching of the wasm failed"}catch(v){Kr(v)}}function h1(){return!ie&&(y||g)&&typeof fetch=="function"&&!qc(Yn)?fetch(Yn,{credentials:"same-origin"}).then(function(v){if(!v.ok)throw"failed to load wasm binary file at '"+Yn+"'";return v.arrayBuffer()}).catch(function(){return Xc()}):new Promise(function(v,E){v(Xc())})}function d1(){var v={a:sh};function E(ce,ke){var tt=ce.exports;if(u.asm=tt,de=ke,!_){var Dt=Ae.unusedWorkers.length;Ae.unusedWorkers.forEach(function(tn){Ae.loadWasmModuleToWorker(tn,function(){--Dt||Hc("wasm-instantiate")})})}}_||l1("wasm-instantiate");function z(ce){E(ce.instance,ce.module)}function q(ce){return h1().then(function(ke){return WebAssembly.instantiate(ke,v)}).then(ce,function(ke){X("failed to asynchronously prepare wasm: "+ke),Kr(ke)})}function fe(){if(!ie&&typeof WebAssembly.instantiateStreaming=="function"&&!Gc(Yn)&&!qc(Yn)&&typeof fetch=="function")fetch(Yn,{credentials:"same-origin"}).then(function(ce){var ke=WebAssembly.instantiateStreaming(ce,v);return ke.then(z,function(tt){X("wasm streaming compile failed: "+tt),X("falling back to ArrayBuffer instantiation"),q(z)})});else return q(z)}if(u.instantiateWasm)try{var he=u.instantiateWasm(v,E);return he}catch(ce){return X("Module.instantiateWasm callback failed with error: "+ce),!1}return fe(),{}}var p1={};function f1(){Ae.initRuntime()}_||Wc.push({func:function(){Dl()}});var Kc=0,Zc=0,Jc=0;function Ii(v,E,z){v=v|0,E=E|0,z=z|0,Kc=v,Jc=E,Zc=z}u.__register_pthread_ptr=Ii;var Ml={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},Ni=13568;function Si(v,E){if(v<=0||v>s().length||v&!0||E<0)return-28;if(E==0)return 0;E>=2147483647&&(E=Infinity);var z=Atomics.load(o(),Ni>>2),q=0;if(z==v){var fe=Atomics.compareExchange(o(),Ni>>2,z,0);if(fe==z&&(--E,q=1,E<=0))return 1}var he=Atomics.notify(o(),v>>2,E);if(he>=0)return he+q;throw"Atomics.notify returned an unexpected value "+he}u._emscripten_futex_wake=Si;function m1(v){if(_)throw"Internal Error! _kill_thread() can only ever be called from main application thread!";if(!v)throw"Internal Error! Null pthread_ptr in _kill_thread!";o()[v+12>>2]=0;var E=Ae.pthreads[v];E.worker.terminate(),Ae.freeThreadData(E),Ae.runningWorkers.splice(Ae.runningWorkers.indexOf(E.worker),1),E.worker.pthread=void 0}function A1(v){if(_)throw"Internal Error! _cancel_thread() can only ever be called from main application thread!";if(!v)throw"Internal Error! Null pthread_ptr in _cancel_thread!";var E=Ae.pthreads[v];E.worker.postMessage({cmd:"cancel"})}function y1(v){if(_)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!v)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";o()[v+12>>2]=0;var E=Ae.pthreads[v];if(E){var z=E.worker;Ae.returnWorkerToPool(z)}}var Ae={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkers:[],runningWorkers:[],initRuntime:function(){Ii(Ae.mainThreadBlock,!g,1),L2(Ae.mainThreadBlock)},initMainThreadBlock:function(){for(var v=8,E=0;E<v;++E)Ae.allocateUnusedWorker();Ae.mainThreadBlock=12816;for(var E=0;E<232/4;++E)l()[Ae.mainThreadBlock/4+E]=0;o()[Ae.mainThreadBlock+12>>2]=Ae.mainThreadBlock;var z=Ae.mainThreadBlock+156;o()[z>>2]=z;for(var q=13056,E=0;E<128;++E)l()[q/4+E]=0;Atomics.store(l(),Ae.mainThreadBlock+104>>2,q),Atomics.store(l(),Ae.mainThreadBlock+40>>2,Ae.mainThreadBlock),Atomics.store(l(),Ae.mainThreadBlock+44>>2,42)},initWorker:function(){},pthreads:{},exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(Ae.exitHandlers!==null){for(;Ae.exitHandlers.length>0;)Ae.exitHandlers.pop()();Ae.exitHandlers=null}_&&ue&&P2()},threadExit:function(v){var E=Sr();E&&(Atomics.store(l(),E+4>>2,v),Atomics.store(l(),E+0>>2,1),Atomics.store(l(),E+60>>2,1),Atomics.store(l(),E+64>>2,0),Ae.runExitHandlers(),Si(E+0,2147483647),Ii(0,0,0),ue=0,_&&postMessage({cmd:"exit"}))},threadCancel:function(){Ae.runExitHandlers(),Atomics.store(l(),ue+4>>2,-1),Atomics.store(l(),ue+0>>2,1),Si(ue+0,2147483647),ue=me=0,Ii(0,0,0),postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var v in Ae.pthreads){var E=Ae.pthreads[v];E&&E.worker&&Ae.returnWorkerToPool(E.worker)}Ae.pthreads={};for(var z=0;z<Ae.unusedWorkers.length;++z){var q=Ae.unusedWorkers[z];q.terminate()}Ae.unusedWorkers=[];for(var z=0;z<Ae.runningWorkers.length;++z){var q=Ae.runningWorkers[z],E=q.pthread;Ae.freeThreadData(E),q.terminate()}Ae.runningWorkers=[]},freeThreadData:function(v){if(v){if(v.threadInfoStruct){var E=o()[v.threadInfoStruct+104>>2];o()[v.threadInfoStruct+104>>2]=0,Wl(E),Wl(v.threadInfoStruct)}v.threadInfoStruct=0,v.allocatedOwnStack&&v.stackBase&&Wl(v.stackBase),v.stackBase=0,v.worker&&(v.worker.pthread=null)}},returnWorkerToPool:function(v){delete Ae.pthreads[v.pthread.thread],Ae.unusedWorkers.push(v),Ae.runningWorkers.splice(Ae.runningWorkers.indexOf(v),1),Ae.freeThreadData(v.pthread),v.pthread=void 0},receiveObjectTransfer:function(v){},loadWasmModuleToWorker:function(v,E){v.onmessage=function(z){var q=z.data,fe=q.cmd;if(v.pthread&&(Ae.currentProxiedOperationCallerThread=v.pthread.threadInfoStruct),q.targetThread&&q.targetThread!=Sr()){var he=Ae.pthreads[q.targetThread];he?he.worker.postMessage(z.data,q.transferList):console.error('Internal error! Worker sent a message "'+fe+'" to target pthread '+q.targetThread+", but that thread no longer exists!"),Ae.currentProxiedOperationCallerThread=void 0;return}if(fe==="processQueuedMainThreadWork")sf();else if(fe==="spawnThread")rh(z.data);else if(fe==="cleanupThread")y1(q.thread);else if(fe==="killThread")m1(q.thread);else if(fe==="cancelThread")A1(q.thread);else if(fe==="loaded")v.loaded=!0,E&&E(v),v.runPthread&&(v.runPthread(),delete v.runPthread);else if(fe==="print")H("Thread "+q.threadId+": "+q.text);else if(fe==="printErr")X("Thread "+q.threadId+": "+q.text);else if(fe==="alert")alert("Thread "+q.threadId+": "+q.text);else if(fe==="exit"){var ce=v.pthread&&Atomics.load(l(),v.pthread.thread+68>>2);ce&&Ae.returnWorkerToPool(v)}else fe==="cancelDone"?Ae.returnWorkerToPool(v):fe==="objectTransfer"?Ae.receiveObjectTransfer(z.data):z.data.target==="setimmediate"?v.postMessage(z.data):X("worker sent an unknown command "+fe);Ae.currentProxiedOperationCallerThread=void 0},v.onerror=function(z){X("pthread sent an error! "+z.filename+":"+z.lineno+": "+z.message)},w&&(v.on("message",function(z){v.onmessage({data:z})}),v.on("error",function(z){v.onerror(z)}),v.on("exit",function(z){console.log("worker exited - TODO: update the worker queue?")})),v.postMessage({cmd:"load",urlOrBlob:u.mainScriptUrlOrBlob||h,wasmMemory:ne,wasmModule:de,DYNAMIC_BASE:hr,DYNAMICTOP_PTR:Ua})},allocateUnusedWorker:function(){var v=T("tfjs-backend-wasm-threaded-simd.worker.js");Ae.unusedWorkers.push(new Worker(v))},getNewWorker:function(){return Ae.unusedWorkers.length==0&&(Ae.allocateUnusedWorker(),Ae.loadWasmModuleToWorker(Ae.unusedWorkers[0])),Ae.unusedWorkers.length>0?Ae.unusedWorkers.pop():null},busySpinWait:function(v){for(var E=performance.now()+v;performance.now()<E;);}};function g1(v,E){vi=cr=v,Nr=E,Fi(v)}u.establishStackSpace=g1;function x1(){return re}u.getNoExitRuntime=x1;function w1(v,E,z,q){Kr("Assertion failed: "+We(v)+", at: "+[E?We(E):"unknown filename",z,q?We(q):"unknown function"])}function _1(v,E){var z=_main(v,E)}var Ga;w?Ga=function(){var v=process.hrtime();return v[0]*1e3+v[1]/1e6}:_?Ga=function(){return performance.now()-u.__performance_now_clock_drift}:typeof dateNow!="undefined"?Ga=dateNow:Ga=function(){return performance.now()};function b1(v){return o()[O2()>>2]=v,v}function v1(v,E){if(_)return da(1,1,v,E);Vc.unshift({func:v,arg:E})}function k1(v,E){if(v==E)postMessage({cmd:"processQueuedMainThreadWork"});else if(_)postMessage({targetThread:v,cmd:"processThreadQueue"});else{var z=Ae.pthreads[v],q=z&&z.worker;if(!q)return;q.postMessage({cmd:"processThreadQueue"})}return 1}function I1(){Kr()}function N1(v,E){v=v|0,E=E|0}function S1(v,E,z){if(v<=0||v>s().length||v&!0)return-28;if(g){var q=Atomics.wait(o(),v>>2,E,z);if(q==="timed-out")return-73;if(q==="not-equal")return-6;if(q==="ok")return 0;throw"Atomics.wait returned an unexpected value "+q}else{var fe=Atomics.load(o(),v>>2);if(E!=fe)return-6;var he=performance.now(),ce=he+z;Atomics.store(o(),Ni>>2,v);for(var ke=v;v==ke;){if(he=performance.now(),he>ce)return-73;sf(),v=Atomics.load(o(),Ni>>2)}return 0}}function T1(){return Jc|0}function E1(){return Zc|0}function C1(v,E,z){i().copyWithin(v,E,E+z)}function R1(){return navigator.hardwareConcurrency}function da(v,E){for(var z=arguments.length-2,q=Bl(),fe=Ri(z*8),he=fe>>3,ce=0;ce<z;ce++)c()[he+ce]=arguments[2+ce];var ke=B2(v,z,fe,E);return Fi(q),ke}var qa=[];function Ti(v,E){Ti.array||(Ti.array=[]);var z=Ti.array;z.length=0;for(var q;q=i()[v++];)q===100||q===102?(E=E+7&~7,z.push(c()[E>>3]),E+=8):(E=E+3&~3,z.push(o()[E>>2]),E+=4);return z}function F1(v,E,z){qa.length=E;for(var q=z>>3,fe=0;fe<E;fe++)qa[fe]=c()[q+fe];var he=v<0,ce=he?p1[-v-1]:nf[v];if(he){var ke=qa[1],tt=qa[2],Dt=Ti(ke,tt);return ce.apply(null,Dt)}return ce.apply(null,qa)}function M1(){return i().length}function $1(v){try{return ne.grow(v-vt.byteLength+65535>>>16),ur(ne.buffer),1}catch(E){}}function D1(v){v=v>>>0;var E=M1();if(v<=E)return!1;var z=65536,q=2147483648;if(v>q)return!1;for(var fe=16777216,he=1;he<=4;he*=2){var ce=E*(1+.2/he);ce=Math.min(ce,v+100663296);var ke=Math.min(q,Tt(Math.max(fe,v,ce),z)),tt=$1(ke);if(tt)return!0}return!1}var Be={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:!1,removeAllEventListeners:function(){for(var v=Be.eventHandlers.length-1;v>=0;--v)Be._removeHandler(v);Be.eventHandlers=[],Be.deferredCalls=[]},registerRemoveEventListeners:function(){Be.removeEventListenersRegistered||(Vc.push(Be.removeAllEventListeners),Be.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(v,E,z){function q(ce,ke){if(ce.length!=ke.length)return!1;for(var tt in ce)if(ce[tt]!=ke[tt])return!1;return!0}for(var fe in Be.deferredCalls){var he=Be.deferredCalls[fe];if(he.targetFunction==v&&q(he.argsList,z))return}Be.deferredCalls.push({targetFunction:v,precedence:E,argsList:z}),Be.deferredCalls.sort(function(ce,ke){return ce.precedence<ke.precedence})},removeDeferredCalls:function(v){for(var E=0;E<Be.deferredCalls.length;++E)Be.deferredCalls[E].targetFunction==v&&(Be.deferredCalls.splice(E,1),--E)},canPerformEventHandlerRequests:function(){return Be.inEventHandler&&Be.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(Be.canPerformEventHandlerRequests())for(var v=0;v<Be.deferredCalls.length;++v){var E=Be.deferredCalls[v];Be.deferredCalls.splice(v,1),--v,E.targetFunction.apply(null,E.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],removeAllHandlersOnTarget:function(v,E){for(var z=0;z<Be.eventHandlers.length;++z)Be.eventHandlers[z].target==v&&(!E||E==Be.eventHandlers[z].eventTypeString)&&Be._removeHandler(z--)},_removeHandler:function(v){var E=Be.eventHandlers[v];E.target.removeEventListener(E.eventTypeString,E.eventListenerFunc,E.useCapture),Be.eventHandlers.splice(v,1)},registerOrRemoveHandler:function(v){var E=function(q){++Be.inEventHandler,Be.currentEventHandler=v,Be.runDeferredCalls(),v.handlerFunc(q),Be.runDeferredCalls(),--Be.inEventHandler};if(v.callbackfunc)v.eventListenerFunc=E,v.target.addEventListener(v.eventTypeString,E,v.useCapture),Be.eventHandlers.push(v),Be.registerRemoveEventListeners();else for(var z=0;z<Be.eventHandlers.length;++z)Be.eventHandlers[z].target==v.target&&Be.eventHandlers[z].eventTypeString==v.eventTypeString&&Be._removeHandler(z--)},queueEventHandlerOnThread_iiii:function(v,E,z,q,fe){var he=Bl(),ce=Ri(12);o()[ce>>2]=z,o()[ce+4>>2]=q,o()[ce+8>>2]=fe,of(v,637534208,E,q,ce),Fi(he)},getTargetThreadForEventCallback:function(v){switch(v){case 1:return 0;case 2:return Ae.currentProxiedOperationCallerThread;default:return v}},getNodeNameForTarget:function(v){return v?v==window?"#window":v==screen?"#screen":v&&v.nodeName?v.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function O1(v){var E=ot(v)+1,z=Ll(E);return Ue(v,z,E),z}function z1(v,E,z,q){var fe=Bl(),he=Ri(12),ce=0;E&&(ce=O1(E)),o()[he>>2]=ce,o()[he+4>>2]=z,o()[he+8>>2]=q,of(v,657457152,0,ce,he),Fi(fe)}function P1(v,E,z,q){E=E?We(E):"",z1(v,E,z,q)}function L1(v){return v>2?We(v):v}var W1=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function B1(v){v=L1(v);var E=W1[v]||(typeof document!="undefined"?document.querySelector(v):void 0);return E}function $l(v){return B1(v)}function Yc(v,E,z){var q=$l(v);if(!q)return-4;if(q.canvasSharedPtr&&(o()[q.canvasSharedPtr>>2]=E,o()[q.canvasSharedPtr+4>>2]=z),q.offscreenCanvas||!q.controlTransferredOffscreen){q.offscreenCanvas&&(q=q.offscreenCanvas);var fe=!1;if(q.GLctxObject&&q.GLctxObject.GLctx){var he=q.GLctxObject.GLctx.getParameter(2978);fe=he[0]===0&&he[1]===0&&he[2]===q.width&&he[3]===q.height}q.width=E,q.height=z,fe&&q.GLctxObject.GLctx.viewport(0,0,E,z)}else if(q.canvasSharedPtr){var ce=o()[q.canvasSharedPtr+8>>2];return P1(ce,v,E,z),1}else return-4;return 0}function Qc(v,E,z){return _?da(2,1,v,E,z):Yc(v,E,z)}function V1(v,E,z){var q=$l(v);return q?Yc(v,E,z):Qc(v,E,z)}function U1(v){v=v|0}function H1(v,E){v=v|0,E=E|0}function j1(v){var E=v.getExtension("ANGLE_instanced_arrays");if(E)return v.vertexAttribDivisor=function(z,q){E.vertexAttribDivisorANGLE(z,q)},v.drawArraysInstanced=function(z,q,fe,he){E.drawArraysInstancedANGLE(z,q,fe,he)},v.drawElementsInstanced=function(z,q,fe,he,ce){E.drawElementsInstancedANGLE(z,q,fe,he,ce)},1}function G1(v){var E=v.getExtension("OES_vertex_array_object");if(E)return v.createVertexArray=function(){return E.createVertexArrayOES()},v.deleteVertexArray=function(z){E.deleteVertexArrayOES(z)},v.bindVertexArray=function(z){E.bindVertexArrayOES(z)},v.isVertexArray=function(z){return E.isVertexArrayOES(z)},1}function q1(v){var E=v.getExtension("WEBGL_draw_buffers");if(E)return v.drawBuffers=function(z,q){E.drawBuffersWEBGL(z,q)},1}var je={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){for(var v=new Float32Array(je.MINI_TEMP_BUFFER_SIZE),E=0;E<je.MINI_TEMP_BUFFER_SIZE;E++)je.miniTempBufferFloatViews[E]=v.subarray(0,E+1);for(var z=new Int32Array(je.MINI_TEMP_BUFFER_SIZE),E=0;E<je.MINI_TEMP_BUFFER_SIZE;E++)je.miniTempBufferIntViews[E]=z.subarray(0,E+1)},recordError:function(v){je.lastError||(je.lastError=v)},getNewId:function(v){for(var E=je.counter++,z=v.length;z<E;z++)v[z]=null;return E},MINI_TEMP_BUFFER_SIZE:256,miniTempBufferFloatViews:[0],miniTempBufferIntViews:[0],getSource:function(v,E,z,q){for(var fe="",he=0;he<E;++he){var ce=q?o()[q+he*4>>2]:-1;fe+=We(o()[z+he*4>>2],ce<0?void 0:ce)}return fe},createContext:function(v,E){var z=v.getContext("webgl",E);if(!z)return 0;var q=je.registerContext(z,E);return q},registerContext:function(v,E){var z=Ll(8);o()[z+4>>2]=Sr();var q={handle:z,attributes:E,version:E.majorVersion,GLctx:v};return v.canvas&&(v.canvas.GLctxObject=q),je.contexts[z]=q,(typeof E.enableExtensionsByDefault=="undefined"||E.enableExtensionsByDefault)&&je.initExtensions(q),z},makeContextCurrent:function(v){return je.currentContext=je.contexts[v],u.ctx=pa=je.currentContext&&je.currentContext.GLctx,!(v&&!pa)},getContext:function(v){return je.contexts[v]},deleteContext:function(v){je.currentContext===je.contexts[v]&&(je.currentContext=null),typeof Be=="object"&&Be.removeAllHandlersOnTarget(je.contexts[v].GLctx.canvas),je.contexts[v]&&je.contexts[v].GLctx.canvas&&(je.contexts[v].GLctx.canvas.GLctxObject=void 0),Wl(je.contexts[v].handle),je.contexts[v]=null},initExtensions:function(v){if(v||(v=je.currentContext),!v.initExtensionsDone){v.initExtensionsDone=!0;var E=v.GLctx;j1(E),G1(E),q1(E),E.disjointTimerQueryExt=E.getExtension("EXT_disjoint_timer_query");var z=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","EXT_texture_norm16","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2","WEBKIT_WEBGL_compressed_texture_pvrtc"],q=E.getSupportedExtensions()||[];q.forEach(function(fe){z.indexOf(fe)!=-1&&E.getExtension(fe)})}},populateUniformTable:function(v){for(var E=je.programs[v],z=je.programInfos[v]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1},q=z.uniforms,fe=pa.getProgramParameter(E,35718),he=0;he<fe;++he){var ce=pa.getActiveUniform(E,he),ke=ce.name;z.maxUniformLength=Math.max(z.maxUniformLength,ke.length+1),ke.slice(-1)=="]"&&(ke=ke.slice(0,ke.lastIndexOf("[")));var tt=pa.getUniformLocation(E,ke);if(tt){var Dt=je.getNewId(je.uniforms);q[ke]=[ce.size,Dt],je.uniforms[Dt]=tt;for(var tn=1;tn<ce.size;++tn){var Mi=ke+"["+tn+"]";tt=pa.getUniformLocation(E,Mi),Dt=je.getNewId(je.uniforms),je.uniforms[Dt]=tt}}}}},X1=["default","low-power","high-performance"];function K1(v,E){var z={},q=E>>2;z.alpha=!!o()[q+(0>>2)],z.depth=!!o()[q+(4>>2)],z.stencil=!!o()[q+(8>>2)],z.antialias=!!o()[q+(12>>2)],z.premultipliedAlpha=!!o()[q+(16>>2)],z.preserveDrawingBuffer=!!o()[q+(20>>2)];var fe=o()[q+(24>>2)];z.powerPreference=X1[fe],z.failIfMajorPerformanceCaveat=!!o()[q+(28>>2)],z.majorVersion=o()[q+(32>>2)],z.minorVersion=o()[q+(36>>2)],z.enableExtensionsByDefault=o()[q+(40>>2)],z.explicitSwapControl=o()[q+(44>>2)],z.proxyContextToMainThread=o()[q+(48>>2)],z.renderViaOffscreenBackBuffer=o()[q+(52>>2)];var he=$l(v);if(!he)return-4;if(z.explicitSwapControl)return-1;var ce=je.createContext(he,z);return ce}function Z1(v,E){return K1(v,E)}var Xa={splitPath:function(v){var E=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return E.exec(v).slice(1)},normalizeArray:function(v,E){for(var z=0,q=v.length-1;q>=0;q--){var fe=v[q];fe==="."?v.splice(q,1):fe===".."?(v.splice(q,1),z++):z&&(v.splice(q,1),z--)}if(E)for(;z;z--)v.unshift("..");return v},normalize:function(v){var E=v.charAt(0)==="/",z=v.substr(-1)==="/";return v=Xa.normalizeArray(v.split("/").filter(function(q){return!!q}),!E).join("/"),!v&&!E&&(v="."),v&&z&&(v+="/"),(E?"/":"")+v},dirname:function(v){var E=Xa.splitPath(v),z=E[0],q=E[1];return!z&&!q?".":(q&&(q=q.substr(0,q.length-1)),z+q)},basename:function(v){if(v==="/")return"/";var E=v.lastIndexOf("/");return E===-1?v:v.substr(E+1)},extname:function(v){return Xa.splitPath(v)[3]},join:function(){var v=Array.prototype.slice.call(arguments,0);return Xa.normalize(v.join("/"))},join2:function(v,E){return Xa.normalize(v+"/"+E)}},Ei={mappings:{},buffers:[null,[],[]],printChar:function(v,E){var z=Ei.buffers[v];E===0||E===10?((v===1?H:X)(et(z,0)),z.length=0):z.push(E)},varargs:void 0,get:function(){Ei.varargs+=4;var v=o()[Ei.varargs-4>>2];return v},getStr:function(v){var E=We(v);return E},get64:function(v,E){return v}};function eh(v){return _?da(3,1,v):0}function th(v,E,z,q,fe){if(_)return da(4,1,v,E,z,q,fe)}function nh(v,E,z,q){if(_)return da(5,1,v,E,z,q);for(var fe=0,he=0;he<z;he++){for(var ce=o()[E+he*8>>2],ke=o()[E+(he*8+4)>>2],tt=0;tt<ke;tt++)Ei.printChar(v,i()[ce+tt]);fe+=ke}return o()[q>>2]=fe,0}function J1(v){var E=Ae.exitHandlers.pop();v&&E()}function Y1(v,E){Ae.exitHandlers===null&&(Ae.exitHandlers=[]),Ae.exitHandlers.push(function(){V2(v,E)})}function rh(v){if(_)throw"Internal Error! _spawn_thread() can only ever be called from main application thread!";var E=Ae.getNewWorker();if(E.pthread!==void 0)throw"Internal error!";if(!v.pthread_ptr)throw"Internal error, no pthread ptr!";Ae.runningWorkers.push(E);for(var z=Ll(128*4),q=0;q<128;++q)o()[z+q*4>>2]=0;var fe=v.stackBase+v.stackSize,he=Ae.pthreads[v.pthread_ptr]={worker:E,stackBase:v.stackBase,stackSize:v.stackSize,allocatedOwnStack:v.allocatedOwnStack,thread:v.pthread_ptr,threadInfoStruct:v.pthread_ptr},ce=he.threadInfoStruct>>2;Atomics.store(l(),ce+(0>>2),0),Atomics.store(l(),ce+(4>>2),0),Atomics.store(l(),ce+(8>>2),0),Atomics.store(l(),ce+(68>>2),v.detached),Atomics.store(l(),ce+(104>>2),z),Atomics.store(l(),ce+(48>>2),0),Atomics.store(l(),ce+(40>>2),he.threadInfoStruct),Atomics.store(l(),ce+(44>>2),42),Atomics.store(l(),ce+(108>>2),v.stackSize),Atomics.store(l(),ce+(84>>2),v.stackSize),Atomics.store(l(),ce+(80>>2),fe),Atomics.store(l(),ce+(108+8>>2),fe),Atomics.store(l(),ce+(108+12>>2),v.detached),Atomics.store(l(),ce+(108+20>>2),v.schedPolicy),Atomics.store(l(),ce+(108+24>>2),v.schedPrio);var ke=D2(),tt=ke+40;Atomics.store(l(),ce+(176>>2),tt),E.pthread=he;var Dt={cmd:"run",start_routine:v.startRoutine,arg:v.arg,threadInfoStruct:v.pthread_ptr,selfThreadId:v.pthread_ptr,parentThreadId:v.parent_pthread_ptr,stackBase:v.stackBase,stackSize:v.stackSize};E.runPthread=function(){Dt.time=performance.now(),E.postMessage(Dt,v.transferList)},E.loaded&&(E.runPthread(),delete E.runPthread)}function Q1(v,E,z){if(!E&&!z)return Ml.EINVAL;if(!v)return X("pthread_getschedparam called with a null thread pointer!"),Ml.ESRCH;var q=o()[v+12>>2];if(q!==v)return X("pthread_getschedparam attempted on thread "+v+", which does not point to a valid thread, or does not exist anymore!"),Ml.ESRCH;var fe=Atomics.load(l(),v+108+20>>2),he=Atomics.load(l(),v+108+24>>2);return E&&(o()[E>>2]=fe),z&&(o()[z>>2]=he),0}function Sr(){return Kc|0}u._pthread_self=Sr;function ef(v,E,z,q){if(typeof SharedArrayBuffer=="undefined")return X("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!v)return X("pthread_create called with a null thread pointer!"),28;var fe=[],he=0;if(_&&(fe.length===0||he))return W2(687865856,v,E,z,q);if(he)return he;var ce=0,ke=0,tt=0,Dt=0,tn=0;if(E){ce=o()[E>>2],ce+=81920,ke=o()[E+8>>2],tt=o()[E+12>>2]!==0;var Mi=o()[E+16>>2]===0;if(Mi){var Ul=o()[E+20>>2],Wn=o()[E+24>>2],ma=Ae.currentProxiedOperationCallerThread?Ae.currentProxiedOperationCallerThread:Sr();Q1(ma,E+20,E+24),Dt=o()[E+20>>2],tn=o()[E+24>>2],o()[E+20>>2]=Ul,o()[E+24>>2]=Wn}else Dt=o()[E+20>>2],tn=o()[E+24>>2]}else ce=2097152;var Hl=ke==0;Hl?ke=z2(16,ce):(ke-=ce,Ne(ke>0));for(var $i=Ll(232),uf=0;uf<232>>2;++uf)l()[($i>>2)+uf]=0;o()[v>>2]=$i,o()[$i+12>>2]=$i;var H2=$i+156;o()[H2>>2]=H2;var cf={stackBase:ke,stackSize:ce,allocatedOwnStack:Hl,schedPolicy:Dt,schedPrio:tn,detached:tt,startRoutine:z,pthread_ptr:$i,parent_pthread_ptr:Sr(),arg:q,transferList:fe};return _?(cf.cmd="spawnThread",postMessage(cf,fe)):rh(cf),0}function tf(v){return v=+v,v>=0?+o1(v+.5):+i1(v-.5)}function ah(v){if(_)return da(6,1,v);switch(v){case 30:return 16384;case 85:var E=2147483648;return E/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 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79: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: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 b1(28),-1}_?Ae.initWorker():Ae.initMainThreadBlock();var pa;je.init();var nf=[null,v1,Qc,eh,th,nh,ah],sh={e:w1,r:_1,w:k1,a:I1,l:N1,d:S1,c:Si,h:Ga,g:T1,x:E1,q:C1,B:R1,t:F1,A:D1,u:V1,k:U1,s:H1,v:Z1,m:eh,o:th,i:nh,p:f1,memory:ne||u.wasmMemory,y:J1,z:Y1,j:ef,b:Sr,f:tf,n:ah,table:ae},Ci=d1();u.asm=Ci;var Dl=u.___wasm_call_ctors=function(){return(Dl=u.___wasm_call_ctors=u.asm.C).apply(null,arguments)},Ka=u._init=function(){return(Ka=u._init=u.asm.D).apply(null,arguments)},Ol=u._register_tensor=function(){return(Ol=u._register_tensor=u.asm.E).apply(null,arguments)},rf=u._dispose_data=function(){return(rf=u._dispose_data=u.asm.F).apply(null,arguments)},af=u._dispose=function(){return(af=u._dispose=u.asm.G).apply(null,arguments)},zl=u._Abs=function(){return(zl=u._Abs=u.asm.H).apply(null,arguments)},ih=u._Add=function(){return(ih=u._Add=u.asm.I).apply(null,arguments)},oh=u._AddN=function(){return(oh=u._AddN=u.asm.J).apply(null,arguments)},G=u._ArgMax=function(){return(G=u._ArgMax=u.asm.K).apply(null,arguments)},te=u._AvgPool=function(){return(te=u._AvgPool=u.asm.L).apply(null,arguments)},Se=u._BatchMatMul=function(){return(Se=u._BatchMatMul=u.asm.M).apply(null,arguments)},Fe=u._ClipByValue=function(){return(Fe=u._ClipByValue=u.asm.N).apply(null,arguments)},nt=u._Conv2D=function(){return(nt=u._Conv2D=u.asm.O).apply(null,arguments)},Et=u._Conv2DBackpropInput=function(){return(Et=u._Conv2DBackpropInput=u.asm.P).apply(null,arguments)},Je=u._Cos=function(){return(Je=u._Cos=u.asm.Q).apply(null,arguments)},Xe=u._CropAndResize=function(){return(Xe=u._CropAndResize=u.asm.R).apply(null,arguments)},Ht=u._Cumsum=function(){return(Ht=u._Cumsum=u.asm.S).apply(null,arguments)},Zr=u._DepthToSpace=function(){return(Zr=u._DepthToSpace=u.asm.T).apply(null,arguments)},Jr=u._DepthwiseConv2dNative=function(){return(Jr=u._DepthwiseConv2dNative=u.asm.U).apply(null,arguments)},lh=u._Equal=function(){return(lh=u._Equal=u.asm.V).apply(null,arguments)},Pl=u._Exp=function(){return(Pl=u._Exp=u.asm.W).apply(null,arguments)},Ln=u._FlipLeftRight=function(){return(Ln=u._FlipLeftRight=u.asm.X).apply(null,arguments)},fa=u._Floor=function(){return(fa=u._Floor=u.asm.Y).apply(null,arguments)},uh=u._FloorDiv=function(){return(uh=u._FloorDiv=u.asm.Z).apply(null,arguments)},dv=u._FusedBatchNorm=function(){return(dv=u._FusedBatchNorm=u.asm._).apply(null,arguments)},pv=u._FusedConv2D=function(){return(pv=u._FusedConv2D=u.asm.$).apply(null,arguments)},fv=u._FusedDepthwiseConv2D=function(){return(fv=u._FusedDepthwiseConv2D=u.asm.aa).apply(null,arguments)},mv=u._Gather=function(){return(mv=u._Gather=u.asm.ba).apply(null,arguments)},Av=u._GatherNd=function(){return(Av=u._GatherNd=u.asm.ca).apply(null,arguments)},yv=u._Greater=function(){return(yv=u._Greater=u.asm.da).apply(null,arguments)},gv=u._GreaterEqual=function(){return(gv=u._GreaterEqual=u.asm.ea).apply(null,arguments)},xv=u._LeakyRelu=function(){return(xv=u._LeakyRelu=u.asm.fa).apply(null,arguments)},wv=u._Less=function(){return(wv=u._Less=u.asm.ga).apply(null,arguments)},_v=u._LessEqual=function(){return(_v=u._LessEqual=u.asm.ha).apply(null,arguments)},bv=u._Log=function(){return(bv=u._Log=u.asm.ia).apply(null,arguments)},vv=u._LogicalAnd=function(){return(vv=u._LogicalAnd=u.asm.ja).apply(null,arguments)},kv=u._Max=function(){return(kv=u._Max=u.asm.ka).apply(null,arguments)},Iv=u._MaxPool=function(){return(Iv=u._MaxPool=u.asm.la).apply(null,arguments)},Nv=u._Maximum=function(){return(Nv=u._Maximum=u.asm.ma).apply(null,arguments)},Sv=u._Mean=function(){return(Sv=u._Mean=u.asm.na).apply(null,arguments)},Tv=u._Min=function(){return(Tv=u._Min=u.asm.oa).apply(null,arguments)},Ev=u._Minimum=function(){return(Ev=u._Minimum=u.asm.pa).apply(null,arguments)},Cv=u._Multiply=function(){return(Cv=u._Multiply=u.asm.qa).apply(null,arguments)},Rv=u._Neg=function(){return(Rv=u._Neg=u.asm.ra).apply(null,arguments)},Fv=u._NonMaxSuppressionV3=function(){return(Fv=u._NonMaxSuppressionV3=u.asm.sa).apply(null,arguments)},Mv=u._NonMaxSuppressionV4=function(){return(Mv=u._NonMaxSuppressionV4=u.asm.ta).apply(null,arguments)},$v=u._NonMaxSuppressionV5=function(){return($v=u._NonMaxSuppressionV5=u.asm.ua).apply(null,arguments)},Dv=u._NotEqual=function(){return(Dv=u._NotEqual=u.asm.va).apply(null,arguments)},Ov=u._OneHot=function(){return(Ov=u._OneHot=u.asm.wa).apply(null,arguments)},zv=u._PadV2=function(){return(zv=u._PadV2=u.asm.xa).apply(null,arguments)},Pv=u._Pow=function(){return(Pv=u._Pow=u.asm.ya).apply(null,arguments)},Lv=u._Prelu=function(){return(Lv=u._Prelu=u.asm.za).apply(null,arguments)},Wv=u._Prod=function(){return(Wv=u._Prod=u.asm.Aa).apply(null,arguments)},Bv=u._RealDiv=function(){return(Bv=u._RealDiv=u.asm.Ba).apply(null,arguments)},Vv=u._Relu=function(){return(Vv=u._Relu=u.asm.Ca).apply(null,arguments)},Uv=u._Relu6=function(){return(Uv=u._Relu6=u.asm.Da).apply(null,arguments)},Hv=u._ResizeBilinear=function(){return(Hv=u._ResizeBilinear=u.asm.Ea).apply(null,arguments)},jv=u._Reverse=function(){return(jv=u._Reverse=u.asm.Fa).apply(null,arguments)},Gv=u._RotateWithOffset=function(){return(Gv=u._RotateWithOffset=u.asm.Ga).apply(null,arguments)},qv=u._Round=function(){return(qv=u._Round=u.asm.Ha).apply(null,arguments)},Xv=u._Rsqrt=function(){return(Xv=u._Rsqrt=u.asm.Ia).apply(null,arguments)},Kv=u._ScatterNd=function(){return(Kv=u._ScatterNd=u.asm.Ja).apply(null,arguments)},Zv=u._SelectV2=function(){return(Zv=u._SelectV2=u.asm.Ka).apply(null,arguments)},Jv=u._Sigmoid=function(){return(Jv=u._Sigmoid=u.asm.La).apply(null,arguments)},Yv=u._Sin=function(){return(Yv=u._Sin=u.asm.Ma).apply(null,arguments)},Qv=u._Softmax=function(){return(Qv=u._Softmax=u.asm.Na).apply(null,arguments)},e6=u._Sqrt=function(){return(e6=u._Sqrt=u.asm.Oa).apply(null,arguments)},t6=u._Square=function(){return(t6=u._Square=u.asm.Pa).apply(null,arguments)},n6=u._SquaredDifference=function(){return(n6=u._SquaredDifference=u.asm.Qa).apply(null,arguments)},r6=u._StridedSlice=function(){return(r6=u._StridedSlice=u.asm.Ra).apply(null,arguments)},a6=u._Sub=function(){return(a6=u._Sub=u.asm.Sa).apply(null,arguments)},s6=u._Sum=function(){return(s6=u._Sum=u.asm.Ta).apply(null,arguments)},i6=u._Tanh=function(){return(i6=u._Tanh=u.asm.Ua).apply(null,arguments)},o6=u._Tile=function(){return(o6=u._Tile=u.asm.Va).apply(null,arguments)},l6=u._TopK=function(){return(l6=u._TopK=u.asm.Wa).apply(null,arguments)},u6=u._Transpose=function(){return(u6=u._Transpose=u.asm.Xa).apply(null,arguments)},c6=u.__FusedMatMul=function(){return(c6=u.__FusedMatMul=u.asm.Ya).apply(null,arguments)},Ll=u._malloc=function(){return(Ll=u._malloc=u.asm.Za).apply(null,arguments)},Wl=u._free=function(){return(Wl=u._free=u.asm._a).apply(null,arguments)},D2=u._emscripten_get_global_libc=function(){return(D2=u._emscripten_get_global_libc=u.asm.$a).apply(null,arguments)},O2=u.___errno_location=function(){return(O2=u.___errno_location=u.asm.ab).apply(null,arguments)},h6=u.___em_js__initPthreadsJS=function(){return(h6=u.___em_js__initPthreadsJS=u.asm.bb).apply(null,arguments)},z2=u._memalign=function(){return(z2=u._memalign=u.asm.cb).apply(null,arguments)},P2=u.___pthread_tsd_run_dtors=function(){return(P2=u.___pthread_tsd_run_dtors=u.asm.db).apply(null,arguments)},sf=u._emscripten_main_thread_process_queued_calls=function(){return(sf=u._emscripten_main_thread_process_queued_calls=u.asm.eb).apply(null,arguments)},d6=u._emscripten_current_thread_process_queued_calls=function(){return(d6=u._emscripten_current_thread_process_queued_calls=u.asm.fb).apply(null,arguments)},L2=u._emscripten_register_main_browser_thread_id=function(){return(L2=u._emscripten_register_main_browser_thread_id=u.asm.gb).apply(null,arguments)},p6=u._emscripten_main_browser_thread_id=function(){return(p6=u._emscripten_main_browser_thread_id=u.asm.hb).apply(null,arguments)},f6=u._emscripten_async_run_in_main_thread=function(){return(f6=u._emscripten_async_run_in_main_thread=u.asm.ib).apply(null,arguments)},m6=u._emscripten_sync_run_in_main_thread=function(){return(m6=u._emscripten_sync_run_in_main_thread=u.asm.jb).apply(null,arguments)},A6=u._emscripten_sync_run_in_main_thread_0=function(){return(A6=u._emscripten_sync_run_in_main_thread_0=u.asm.kb).apply(null,arguments)},y6=u._emscripten_sync_run_in_main_thread_1=function(){return(y6=u._emscripten_sync_run_in_main_thread_1=u.asm.lb).apply(null,arguments)},g6=u._emscripten_sync_run_in_main_thread_2=function(){return(g6=u._emscripten_sync_run_in_main_thread_2=u.asm.mb).apply(null,arguments)},x6=u._emscripten_sync_run_in_main_thread_xprintf_varargs=function(){return(x6=u._emscripten_sync_run_in_main_thread_xprintf_varargs=u.asm.nb).apply(null,arguments)},w6=u._emscripten_sync_run_in_main_thread_3=function(){return(w6=u._emscripten_sync_run_in_main_thread_3=u.asm.ob).apply(null,arguments)},W2=u._emscripten_sync_run_in_main_thread_4=function(){return(W2=u._emscripten_sync_run_in_main_thread_4=u.asm.pb).apply(null,arguments)},_6=u._emscripten_sync_run_in_main_thread_5=function(){return(_6=u._emscripten_sync_run_in_main_thread_5=u.asm.qb).apply(null,arguments)},b6=u._emscripten_sync_run_in_main_thread_6=function(){return(b6=u._emscripten_sync_run_in_main_thread_6=u.asm.rb).apply(null,arguments)},v6=u._emscripten_sync_run_in_main_thread_7=function(){return(v6=u._emscripten_sync_run_in_main_thread_7=u.asm.sb).apply(null,arguments)},B2=u._emscripten_run_in_main_runtime_thread_js=function(){return(B2=u._emscripten_run_in_main_runtime_thread_js=u.asm.tb).apply(null,arguments)},of=u._emscripten_async_queue_on_thread_=function(){return(of=u._emscripten_async_queue_on_thread_=u.asm.ub).apply(null,arguments)},k6=u._emscripten_tls_init=function(){return(k6=u._emscripten_tls_init=u.asm.vb).apply(null,arguments)},Bl=u.stackSave=function(){return(Bl=u.stackSave=u.asm.wb).apply(null,arguments)},Ri=u.stackAlloc=function(){return(Ri=u.stackAlloc=u.asm.xb).apply(null,arguments)},Fi=u.stackRestore=function(){return(Fi=u.stackRestore=u.asm.yb).apply(null,arguments)},V2=u.dynCall_vi=function(){return(V2=u.dynCall_vi=u.asm.zb).apply(null,arguments)},I6=u.dynCall_v=function(){return(I6=u.dynCall_v=u.asm.Ab).apply(null,arguments)},N6=u.dynCall_ii=function(){return(N6=u.dynCall_ii=u.asm.Bb).apply(null,arguments)};u.asm=Ci,u.cwrap=qe,u.PThread=Ae,u.PThread=Ae,u._pthread_self=Sr,u.wasmMemory=ne,u.ExitStatus=U2;var Vl;u.then=function(v){if(Vl)v(u);else{var E=u.onRuntimeInitialized;u.onRuntimeInitialized=function(){E&&E(),v(u)}}return u};function U2(v){this.name="ExitStatus",this.message="Program terminated with exit("+v+")",this.status=v}ja=function v(){Vl||lf(),Vl||(ja=v)};function lf(v){if(v=v||f,Xr>0||(Uc(),Xr>0))return;function E(){Vl||(Vl=!0,u.calledRun=!0,!ye&&(r1(),a1(),u.onRuntimeInitialized&&u.onRuntimeInitialized(),s1()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),E()},1)):E()}if(u.run=lf,u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();return _||(re=!0),_||lf(),a}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),T8=rt((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(a){a=a||{};var s=typeof a!="undefined"?a:{},i={},o;for(o in s)s.hasOwnProperty(o)&&(i[o]=s[o]);var l=[],c="./this.program",u=function(G,te){throw te},h=!1,d=!1,p=!1,f=!1;h=typeof window=="object",d=typeof importScripts=="function",p=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f=!h&&!p&&!d;var m="";function A(G){return s.locateFile?s.locateFile(G,m):m+G}var y,g,w,x,_,b;p?(d?m=zu().dirname(m)+"/":m=__dirname+"/",y=function(G,te){return _||(_=require("fs")),b||(b=zu()),G=b.normalize(G),_.readFileSync(G,te?null:"utf8")},w=function(G){var te=y(G,!0);return te.buffer||(te=new Uint8Array(te)),H(te.buffer),te},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),l=process.argv.slice(2),process.on("uncaughtException",function(G){if(!(G instanceof Ol))throw G}),process.on("unhandledRejection",qr),u=function(G){process.exit(G)},s.inspect=function(){return"[Emscripten Module object]"}):f?(typeof read!="undefined"&&(y=function(G){return read(G)}),w=function(G){var te;return typeof readbuffer=="function"?new Uint8Array(readbuffer(G)):(te=read(G,"binary"),H(typeof te=="object"),te)},typeof scriptArgs!="undefined"?l=scriptArgs:typeof arguments!="undefined"&&(l=arguments),typeof quit=="function"&&(u=function(G){quit(G)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(h||d)&&(d?m=self.location.href:document.currentScript&&(m=document.currentScript.src),r&&(m=r),m.indexOf("blob:")!==0?m=m.substr(0,m.lastIndexOf("/")+1):m="",y=function(G){var te=new XMLHttpRequest;return te.open("GET",G,!1),te.send(null),te.responseText},d&&(w=function(G){var te=new XMLHttpRequest;return te.open("GET",G,!1),te.responseType="arraybuffer",te.send(null),new Uint8Array(te.response)}),g=function(G,te,Se){var Fe=new XMLHttpRequest;Fe.open("GET",G,!0),Fe.responseType="arraybuffer",Fe.onload=function(){if(Fe.status==200||Fe.status==0&&Fe.response){te(Fe.response);return}Se()},Fe.onerror=Se,Fe.send(null)},x=function(G){document.title=G});var T=s.print||console.log.bind(console),S=s.printErr||console.warn.bind(console);for(o in i)i.hasOwnProperty(o)&&(s[o]=i[o]);i=null,s.arguments&&(l=s.arguments),s.thisProgram&&(c=s.thisProgram),s.quit&&(u=s.quit);var N;s.wasmBinary&&(N=s.wasmBinary);var C;s.noExitRuntime&&(C=s.noExitRuntime),typeof WebAssembly!="object"&&S("no native wasm support detected");var $,D=new WebAssembly.Table({initial:151,maximum:151+0,element:"anyfunc"}),O=!1,B=0;function H(G,te){G||qr("Assertion failed: "+te)}function X(G){var te=s["_"+G];return H(te,"Cannot call unknown function "+G+", make sure it is exported"),te}function Z(G,te,Se,Fe,nt){var Et={string:function(Ln){var fa=0;if(Ln!=null&&Ln!==0){var uh=(Ln.length<<2)+1;fa=Ci(uh),ae(Ln,fa,uh)}return fa},array:function(Ln){var fa=Ci(Ln.length);return de(Ln,fa),fa}};function Je(Ln){return te==="string"?re(Ln):te==="boolean"?Boolean(Ln):Ln}var Xe=X(G),Ht=[],Zr=0;if(Fe)for(var Jr=0;Jr<Fe.length;Jr++){var lh=Et[Se[Jr]];lh?(Zr===0&&(Zr=sh()),Ht[Jr]=lh(Fe[Jr])):Ht[Jr]=Fe[Jr]}var Pl=Xe.apply(null,Ht);return Pl=Je(Pl),Zr!==0&&Dl(Zr),Pl}function ee(G,te,Se,Fe){Se=Se||[];var nt=Se.every(function(Je){return Je==="number"}),Et=te!=="string";return Et&&nt&&!Fe?X(G):function(){return Z(G,te,Se,arguments,Fe)}}var Y=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function ie(G,te,Se){for(var Fe=te+Se,nt=te;G[nt]&&!(nt>=Fe);)++nt;if(nt-te>16&&G.subarray&&Y)return Y.decode(G.subarray(te,nt));for(var Et="";te<nt;){var Je=G[te++];if(!(Je&128)){Et+=String.fromCharCode(Je);continue}var Xe=G[te++]&63;if((Je&224)==192){Et+=String.fromCharCode((Je&31)<<6|Xe);continue}var Ht=G[te++]&63;if((Je&240)==224?Je=(Je&15)<<12|Xe<<6|Ht:Je=(Je&7)<<18|Xe<<12|Ht<<6|G[te++]&63,Je<65536)Et+=String.fromCharCode(Je);else{var Zr=Je-65536;Et+=String.fromCharCode(55296|Zr>>10,56320|Zr&1023)}}return Et}function re(G,te){return G?ie(ye,G,te):""}function ne(G,te,Se,Fe){if(!(Fe>0))return 0;for(var nt=Se,Et=Se+Fe-1,Je=0;Je<G.length;++Je){var Xe=G.charCodeAt(Je);if(Xe>=55296&&Xe<=57343){var Ht=G.charCodeAt(++Je);Xe=65536+((Xe&1023)<<10)|Ht&1023}if(Xe<=127){if(Se>=Et)break;te[Se++]=Xe}else if(Xe<=2047){if(Se+1>=Et)break;te[Se++]=192|Xe>>6,te[Se++]=128|Xe&63}else if(Xe<=65535){if(Se+2>=Et)break;te[Se++]=224|Xe>>12,te[Se++]=128|Xe>>6&63,te[Se++]=128|Xe&63}else{if(Se+3>=Et)break;te[Se++]=240|Xe>>18,te[Se++]=128|Xe>>12&63,te[Se++]=128|Xe>>6&63,te[Se++]=128|Xe&63}}return te[Se]=0,Se-nt}function ae(G,te,Se){return ne(G,ye,te,Se)}function de(G,te){me.set(G,te)}var ue,me,ye,be,Ne,Re,Oe,qe,et;function We(G){ue=G,s.HEAP8=me=new Int8Array(G),s.HEAP16=be=new Int16Array(G),s.HEAP32=Re=new Int32Array(G),s.HEAPU8=ye=new Uint8Array(G),s.HEAPU16=Ne=new Uint16Array(G),s.HEAPU32=Oe=new Uint32Array(G),s.HEAPF32=qe=new Float32Array(G),s.HEAPF64=et=new Float64Array(G)}var it=s.INITIAL_MEMORY||16777216;function Ue(G){for(;G.length>0;){var te=G.shift();if(typeof te=="function"){te(s);continue}var Se=te.func;typeof Se=="number"?te.arg===void 0?s.dynCall_v(Se):s.dynCall_vi(Se,te.arg):Se(te.arg===void 0?null:te.arg)}}var ot=[],ut=[],_n=[],Tt=[],vt=!1,Jt=!1;function pn(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)jr(s.preRun.shift());Ue(ot)}function Jn(){vt=!0,Ue(ut)}function bn(){Ue(_n)}function an(){Jt=!0}function zn(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Gr(s.postRun.shift());Ue(Tt)}function jr(G){ot.unshift(G)}function Gr(G){Tt.unshift(G)}var ur=Math.ceil,vi=Math.floor,cr=0,Nr=null,hr=null;function Ua(G){cr++,s.monitorRunDependencies&&s.monitorRunDependencies(cr)}function Lc(G){if(cr--,s.monitorRunDependencies&&s.monitorRunDependencies(cr),cr==0&&(Nr!==null&&(clearInterval(Nr),Nr=null),hr)){var te=hr;hr=null,te()}}s.preloadedImages={},s.preloadedAudios={};function qr(G){throw s.onAbort&&s.onAbort(G),G+="",T(G),S(G),O=!0,B=1,G="abort("+G+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(G)}function Cl(G,te){return String.prototype.startsWith?G.startsWith(te):G.indexOf(te)===0}var Wc="data:application/octet-stream;base64,";function Bc(G){return Cl(G,Wc)}var Vc="file://";function Rl(G){return Cl(G,Vc)}var Pn="tfjs-backend-wasm.wasm";Bc(Pn)||(Pn=A(Pn));function Uc(){try{if(N)return new Uint8Array(N);if(w)return w(Pn);throw"both async and sync fetching of the wasm failed"}catch(G){qr(G)}}function r1(){return!N&&(h||d)&&typeof fetch=="function"&&!Rl(Pn)?fetch(Pn,{credentials:"same-origin"}).then(function(G){if(!G.ok)throw"failed to load wasm binary file at '"+Pn+"'";return G.arrayBuffer()}).catch(function(){return Uc()}):new Promise(function(G,te){G(Uc())})}function a1(){var G={env:Hc,wasi_snapshot_preview1:Hc};function te(Je,Xe){var Ht=Je.exports;s.asm=Ht,$=Ht.memory,We($.buffer),Lc("wasm-instantiate")}Ua("wasm-instantiate");function Se(Je){te(Je.instance)}function Fe(Je){return r1().then(function(Xe){return WebAssembly.instantiate(Xe,G)}).then(Je,function(Xe){S("failed to asynchronously prepare wasm: "+Xe),qr(Xe)})}function nt(){if(!N&&typeof WebAssembly.instantiateStreaming=="function"&&!Bc(Pn)&&!Rl(Pn)&&typeof fetch=="function")fetch(Pn,{credentials:"same-origin"}).then(function(Je){var Xe=WebAssembly.instantiateStreaming(Je,G);return Xe.then(Se,function(Ht){S("wasm streaming compile failed: "+Ht),S("falling back to ArrayBuffer instantiation"),Fe(Se)})});else return Fe(Se)}if(s.instantiateWasm)try{var Et=s.instantiateWasm(G,te);return Et}catch(Je){return S("Module.instantiateWasm callback failed with error: "+Je),!1}return nt(),{}}ut.push();function s1(G){We($.buffer)}var Ha={splitPath:function(G){var te=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return te.exec(G).slice(1)},normalizeArray:function(G,te){for(var Se=0,Fe=G.length-1;Fe>=0;Fe--){var nt=G[Fe];nt==="."?G.splice(Fe,1):nt===".."?(G.splice(Fe,1),Se++):Se&&(G.splice(Fe,1),Se--)}if(te)for(;Se;Se--)G.unshift("..");return G},normalize:function(G){var te=G.charAt(0)==="/",Se=G.substr(-1)==="/";return G=Ha.normalizeArray(G.split("/").filter(function(Fe){return!!Fe}),!te).join("/"),!G&&!te&&(G="."),G&&Se&&(G+="/"),(te?"/":"")+G},dirname:function(G){var te=Ha.splitPath(G),Se=te[0],Fe=te[1];return!Se&&!Fe?".":(Fe&&(Fe=Fe.substr(0,Fe.length-1)),Se+Fe)},basename:function(G){if(G==="/")return"/";var te=G.lastIndexOf("/");return te===-1?G:G.substr(te+1)},extname:function(G){return Ha.splitPath(G)[3]},join:function(){var G=Array.prototype.slice.call(arguments,0);return Ha.normalize(G.join("/"))},join2:function(G,te){return Ha.normalize(G+"/"+te)}},ki={mappings:{},buffers:[null,[],[]],printChar:function(G,te){var Se=ki.buffers[G];te===0||te===10?((G===1?T:S)(ie(Se,0)),Se.length=0):Se.push(te)},varargs:void 0,get:function(){ki.varargs+=4;var G=Re[ki.varargs-4>>2];return G},getStr:function(G){var te=re(G);return te},get64:function(G,te){return G}};function i1(G){return 0}function o1(G,te,Se,Fe,nt){}function Xr(G,te,Se,Fe){for(var nt=0,Et=0;Et<Se;Et++){for(var Je=Re[te+Et*8>>2],Xe=Re[te+(Et*8+4)>>2],Ht=0;Ht<Xe;Ht++)ki.printChar(G,ye[Je+Ht]);nt+=Xe}return Re[Fe>>2]=nt,0}function Fl(G){ih(G)}function ja(G){Fl(G)}function l1(G){return G=+G,G>=0?+vi(G+.5):+ur(G-.5)}var Hc={emscripten_notify_memory_growth:s1,fd_close:i1,fd_seek:o1,fd_write:Xr,proc_exit:ja,roundf:l1},Kr=a1();s.asm=Kr;var jc=s._init=function(){return(jc=s._init=s.asm.init).apply(null,arguments)},u1=s._register_tensor=function(){return(u1=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},Gc=s._dispose_data=function(){return(Gc=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},c1=s._dispose=function(){return(c1=s._dispose=s.asm.dispose).apply(null,arguments)},qc=s._Abs=function(){return(qc=s._Abs=s.asm.Abs).apply(null,arguments)},Yn=s._Add=function(){return(Yn=s._Add=s.asm.Add).apply(null,arguments)},Xc=s._AddN=function(){return(Xc=s._AddN=s.asm.AddN).apply(null,arguments)},h1=s._ArgMax=function(){return(h1=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},d1=s._AvgPool=function(){return(d1=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},p1=s._BatchMatMul=function(){return(p1=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},f1=s._ClipByValue=function(){return(f1=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Kc=s._Conv2D=function(){return(Kc=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},Zc=s._Conv2DBackpropInput=function(){return(Zc=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Jc=s._Cos=function(){return(Jc=s._Cos=s.asm.Cos).apply(null,arguments)},Ii=s._CropAndResize=function(){return(Ii=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Ml=s._Cumsum=function(){return(Ml=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Ni=s._DepthToSpace=function(){return(Ni=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Si=s._DepthwiseConv2dNative=function(){return(Si=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},m1=s._Equal=function(){return(m1=s._Equal=s.asm.Equal).apply(null,arguments)},A1=s._Exp=function(){return(A1=s._Exp=s.asm.Exp).apply(null,arguments)},y1=s._FlipLeftRight=function(){return(y1=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Ae=s._Floor=function(){return(Ae=s._Floor=s.asm.Floor).apply(null,arguments)},g1=s._FloorDiv=function(){return(g1=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},x1=s._FusedBatchNorm=function(){return(x1=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},w1=s._FusedConv2D=function(){return(w1=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},_1=s._FusedDepthwiseConv2D=function(){return(_1=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},Ga=s._Gather=function(){return(Ga=s._Gather=s.asm.Gather).apply(null,arguments)},b1=s._GatherNd=function(){return(b1=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},v1=s._Greater=function(){return(v1=s._Greater=s.asm.Greater).apply(null,arguments)},k1=s._GreaterEqual=function(){return(k1=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},I1=s._LeakyRelu=function(){return(I1=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},N1=s._Less=function(){return(N1=s._Less=s.asm.Less).apply(null,arguments)},S1=s._LessEqual=function(){return(S1=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},T1=s._Log=function(){return(T1=s._Log=s.asm.Log).apply(null,arguments)},E1=s._LogicalAnd=function(){return(E1=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},C1=s._Max=function(){return(C1=s._Max=s.asm.Max).apply(null,arguments)},R1=s._MaxPool=function(){return(R1=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},da=s._Maximum=function(){return(da=s._Maximum=s.asm.Maximum).apply(null,arguments)},qa=s._Mean=function(){return(qa=s._Mean=s.asm.Mean).apply(null,arguments)},Ti=s._Min=function(){return(Ti=s._Min=s.asm.Min).apply(null,arguments)},F1=s._Minimum=function(){return(F1=s._Minimum=s.asm.Minimum).apply(null,arguments)},M1=s._Multiply=function(){return(M1=s._Multiply=s.asm.Multiply).apply(null,arguments)},$1=s._Neg=function(){return($1=s._Neg=s.asm.Neg).apply(null,arguments)},D1=s._NonMaxSuppressionV3=function(){return(D1=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Be=s._NonMaxSuppressionV4=function(){return(Be=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},O1=s._NonMaxSuppressionV5=function(){return(O1=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},z1=s._NotEqual=function(){return(z1=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},P1=s._OneHot=function(){return(P1=s._OneHot=s.asm.OneHot).apply(null,arguments)},L1=s._PadV2=function(){return(L1=s._PadV2=s.asm.PadV2).apply(null,arguments)},W1=s._Pow=function(){return(W1=s._Pow=s.asm.Pow).apply(null,arguments)},B1=s._Prelu=function(){return(B1=s._Prelu=s.asm.Prelu).apply(null,arguments)},$l=s._Prod=function(){return($l=s._Prod=s.asm.Prod).apply(null,arguments)},Yc=s._RealDiv=function(){return(Yc=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Qc=s._Relu=function(){return(Qc=s._Relu=s.asm.Relu).apply(null,arguments)},V1=s._Relu6=function(){return(V1=s._Relu6=s.asm.Relu6).apply(null,arguments)},U1=s._ResizeBilinear=function(){return(U1=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},H1=s._Reverse=function(){return(H1=s._Reverse=s.asm.Reverse).apply(null,arguments)},j1=s._RotateWithOffset=function(){return(j1=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},G1=s._Round=function(){return(G1=s._Round=s.asm.Round).apply(null,arguments)},q1=s._Rsqrt=function(){return(q1=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},je=s._ScatterNd=function(){return(je=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},X1=s._SelectV2=function(){return(X1=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},K1=s._Sigmoid=function(){return(K1=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},Z1=s._Sin=function(){return(Z1=s._Sin=s.asm.Sin).apply(null,arguments)},Xa=s._Softmax=function(){return(Xa=s._Softmax=s.asm.Softmax).apply(null,arguments)},Ei=s._Sqrt=function(){return(Ei=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},eh=s._Square=function(){return(eh=s._Square=s.asm.Square).apply(null,arguments)},th=s._SquaredDifference=function(){return(th=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},nh=s._StridedSlice=function(){return(nh=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},J1=s._Sub=function(){return(J1=s._Sub=s.asm.Sub).apply(null,arguments)},Y1=s._Sum=function(){return(Y1=s._Sum=s.asm.Sum).apply(null,arguments)},rh=s._Tanh=function(){return(rh=s._Tanh=s.asm.Tanh).apply(null,arguments)},Q1=s._Tile=function(){return(Q1=s._Tile=s.asm.Tile).apply(null,arguments)},Sr=s._TopK=function(){return(Sr=s._TopK=s.asm.TopK).apply(null,arguments)},ef=s._Transpose=function(){return(ef=s._Transpose=s.asm.Transpose).apply(null,arguments)},tf=s.__FusedMatMul=function(){return(tf=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},ah=s._malloc=function(){return(ah=s._malloc=s.asm.malloc).apply(null,arguments)},pa=s._free=function(){return(pa=s._free=s.asm.free).apply(null,arguments)},nf=s.__start=function(){return(nf=s.__start=s.asm._start).apply(null,arguments)},sh=s.stackSave=function(){return(sh=s.stackSave=s.asm.stackSave).apply(null,arguments)},Ci=s.stackAlloc=function(){return(Ci=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},Dl=s.stackRestore=function(){return(Dl=s.stackRestore=s.asm.stackRestore).apply(null,arguments)};s.asm=Kr,s.cwrap=ee;var Ka;s.then=function(G){if(Ka)G(s);else{var te=s.onRuntimeInitialized;s.onRuntimeInitialized=function(){te&&te(),G(s)}}return s};function Ol(G){this.name="ExitStatus",this.message="Program terminated with exit("+G+")",this.status=G}var rf=!1;hr=function G(){Ka||zl(),Ka||(hr=G)};function af(G){var te=s.__start;try{te();var Se=0;ih(Se,!0)}catch(nt){if(nt instanceof Ol)return;if(nt=="unwind"){C=!0;return}else{var Fe=nt;nt&&typeof nt=="object"&&nt.stack&&(Fe=[nt,nt.stack]),S("exception thrown: "+Fe),u(1,nt)}}finally{rf=!0}}function zl(G){if(G=G||l,cr>0||(pn(),cr>0))return;function te(){Ka||(Ka=!0,s.calledRun=!0,!O&&(Jn(),bn(),s.onRuntimeInitialized&&s.onRuntimeInitialized(),oh&&af(G),zn()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),te()},1)):te()}s.run=zl;function ih(G,te){te&&C&&G===0||(C||(O=!0,B=G,an(),s.onExit&&s.onExit(G)),u(G,new Ol(G)))}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();var oh=!0;return s.noInitialRun&&(oh=!1),C=!0,zl(),a}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),E8=rt((e,t)=>{(function(n,r,a){function s(c){var u=this,h=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=h(" "),u.s1=h(" "),u.s2=h(" "),u.s0-=h(c),u.s0<0&&(u.s0+=1),u.s1-=h(c),u.s1<0&&(u.s1+=1),u.s2-=h(c),u.s2<0&&(u.s2+=1),h=null}function i(c,u){return u.c=c.c,u.s0=c.s0,u.s1=c.s1,u.s2=c.s2,u}function o(c,u){var h=new s(c),d=u&&u.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var c=4022871197,u=function(h){h=String(h);for(var d=0;d<h.length;d++){c+=h.charCodeAt(d);var p=.02519603282416938*c;c=p>>>0,p-=c,p*=c,c=p>>>0,p-=c,c+=p*4294967296}return(c>>>0)*23283064365386963e-26};return u}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),C8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),R8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,h==u.length&&(c.d=c.x<<10^c.x>>>4),c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c.v=l.v,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),F8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.x,d=c.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,c.i=d+1&7,f};function u(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}u(c,l)}function i(l,c){return c.x=l.x.slice(),c.i=l.i,c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.x&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),M8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.w,d=c.X,p=c.i,f,m;return c.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,c.i=p,m+(h^h>>>16)|0};function u(h,d){var p,f,m,A,y,g=[],w=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,w=Math.max(w,d.length)),m=0,A=-32;A<w;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}u(c,l)}function i(l,c){return c.i=l.i,c.w=l.w,c.X=l.X.slice(),c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.X&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),$8=rt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.b,p=c.c,f=c.d,m=c.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,c.b=d=d<<20^d>>>12^p,c.c=p=p-f|0,c.d=f<<16^p>>>16^m,c.a=m-d|0},c.a=0,c.b=0,c.c=2654435769|0,c.d=1367130551,l===Math.floor(l)?(c.a=l/4294967296|0,c.b=l|0):u+=l;for(var h=0;h<u.length+20;h++)c.b^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.a=l.a,c.b=l.b,c.c=l.c,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),D8=rt((e,t)=>{(function(n,r,a){var s=256,i=6,o=52,l="random",c=a.pow(s,i),u=a.pow(2,o),h=u*2,d=s-1,p;function f(_,b,T){var S=[];b=b==!0?{entropy:!0}:b||{};var N=g(y(b.entropy?[_,x(r)]:_==null?w():_,3),S),C=new m(S),$=function(){for(var D=C.g(i),O=c,B=0;D<u;)D=(D+B)*s,O*=s,B=C.g(1);for(;D>=h;)D/=2,O/=2,B>>>=1;return(D+B)/O};return $.int32=function(){return C.g(4)|0},$.quick=function(){return C.g(4)/4294967296},$.double=$,g(x(C.S),r),(b.pass||T||function(D,O,B,H){return H&&(H.S&&A(H,C),D.state=function(){return A(C,{})}),B?(a[l]=D,O):D})($,N,"global"in b?b.global:this==a,b.state)}function m(_){var b,T=_.length,S=this,N=0,C=S.i=S.j=0,$=S.S=[];for(T||(_=[T++]);N<s;)$[N]=N++;for(N=0;N<s;N++)$[N]=$[C=d&C+_[N%T]+(b=$[N])],$[C]=b;(S.g=function(D){for(var O,B=0,H=S.i,X=S.j,Z=S.S;D--;)O=Z[H=d&H+1],B=B*s+Z[d&(Z[H]=Z[X=d&X+O])+(Z[X]=O)];return S.i=H,S.j=X,B})(s)}function A(_,b){return b.i=_.i,b.j=_.j,b.S=_.S.slice(),b}function y(_,b){var T=[],S=typeof _,N;if(b&&S=="object")for(N in _)try{T.push(y(_[N],b-1))}catch(C){}return T.length?T:S=="string"?_:_+"\0"}function g(_,b){for(var T=_+"",S,N=0;N<T.length;)b[d&N]=d&(S^=b[d&N]*19)+T.charCodeAt(N++);return x(b)}function w(){try{var _;return p&&(_=p.randomBytes)?_=_(s):(_=new Uint8Array(s),(n.crypto||n.msCrypto).getRandomValues(_)),x(_)}catch(S){var b=n.navigator,T=b&&b.plugins;return[+new Date,n,T,n.screen,x(r)]}}function x(_){return String.fromCharCode.apply(0,_)}if(g(a.random(),r),typeof t=="object"&&t.exports){t.exports=f;try{p=sm()}catch(_){}}else typeof define=="function"&&define.amd?define(function(){return f}):a["seed"+l]=f})(typeof self!="undefined"?self:e,[],Math)}),N0=rt((e,t)=>{var n=E8(),r=C8(),a=R8(),s=F8(),i=M8(),o=$8(),l=D8();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),O8=rt(()=>{}),z8="2.8.3",P8="2.8.3",L8="2.8.3",W8="2.8.3",B8="2.8.3",V8=1e-7,U8=1e-4,ph=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}},Zl=class{time(e){return J("time")}read(e){return J("read")}readSync(e){return J("readSync")}numDataIds(){return J("numDataIds")}disposeData(e){return J("disposeData")}write(e,t,n){return J("write")}move(e,t,n,r){return J("move")}memory(){return J("memory")}floatPrecision(){return J("floatPrecision")}epsilon(){return this.floatPrecision()===32?V8:U8}batchMatMul(e,t,n,r){return J("batchMatMul")}fusedBatchMatMul({a:e,b:t,transposeA:n,transposeB:r,bias:a,activation:s,preluActivationWeights:i}){return J("fusedBatchMatMul")}slice(e,t,n){return J("slice")}stridedSlice(e,t,n,r){return J("stridedSlice")}unstack(e,t){return J("unstack")}reverse(e,t){return J("reverse")}concat(e,t){return J("concat")}neg(e){return J("neg")}add(e,t){return J("add")}addN(e){return J("addN")}subtract(e,t){return J("subtract")}multiply(e,t){return J("multiply")}realDivide(e,t){return J("realDivide")}floorDiv(e,t){return J("floorDiv")}sum(e,t){return J("sum")}prod(e,t){return J("prod")}unsortedSegmentSum(e,t,n){return J("unsortedSegmentSum")}argMin(e,t){return J("argMin")}argMax(e,t){return J("argMax")}equal(e,t){return J("equal")}notEqual(e,t){return J("notEqual")}less(e,t){return J("less")}lessEqual(e,t){return J("lessEqual")}greater(e,t){return J("greater")}greaterEqual(e,t){return J("greaterEqual")}logicalNot(e){return J("logicalNot")}logicalAnd(e,t){return J("logicalAnd")}logicalOr(e,t){return J("logicalOr")}where(e){return J("where")}select(e,t,n){return J("select")}topk(e,t,n){return J("topk")}min(e,t){return J("min")}minimum(e,t){return J("minimum")}mod(e,t){return J("mod")}max(e,t){return J("max")}maximum(e,t){return J("maximum")}all(e,t){return J("all")}any(e,t){return J("any")}squaredDifference(e,t){return J("squaredDifference")}ceil(e){return J("ceil")}floor(e){return J("floor")}round(e){return J("round")}sign(e){return J("sign")}isNaN(e){return J("isNaN")}isInf(e){return J("isInf")}isFinite(e){return J("isFinite")}pow(e,t){return J("pow")}exp(e){return J("exp")}expm1(e){return J("expm1")}softmax(e,t){return J("softmax")}log(e){return J("log")}log1p(e){return J("log1p")}sqrt(e){return J("sqrt")}rsqrt(e){return J("rsqrt")}square(e){return J("square")}reciprocal(e){return J("reciprocal")}relu(e){return J("relu")}relu6(e){return J("relu6")}prelu(e,t){return J("prelu")}elu(e){return J("elu")}eluDer(e,t){return J("eluDer")}selu(e){return J("selu")}int(e){return J("int")}clip(e,t,n){return J("clip")}abs(e){return J("abs")}complexAbs(e){return J("complexAbs")}sigmoid(e){return J("sigmoid")}softplus(e){return J("softplus")}sin(e){return J("sin")}cos(e){return J("cos")}tan(e){return J("tan")}asin(e){return J("asin")}acos(e){return J("acos")}atan(e){return J("atan")}atan2(e,t){return J("atan2")}sinh(e){return J("sinh")}cosh(e){return J("cosh")}tanh(e){return J("tanh")}asinh(e){return J("asinh")}acosh(e){return J("acosh")}atanh(e){return J("atanh")}erf(e){return J("erf")}step(e,t){return J("step")}fusedConv2d({input:e,filter:t,convInfo:n,bias:r,activation:a,preluActivationWeights:s}){return J("fusedConv2d")}conv2d(e,t,n){return J("conv2d")}conv2dDerInput(e,t,n){return J("conv2dDerInput")}conv2dDerFilter(e,t,n){return J("conv2dDerFilter")}fusedDepthwiseConv2D({input:e,filter:t,convInfo:n,bias:r,activation:a,preluActivationWeights:s}){return J("fusedDepthwiseConv2D")}depthwiseConv2D(e,t,n){return J("depthwiseConv2D")}depthwiseConv2DDerInput(e,t,n){return J("depthwiseConv2DDerInput")}depthwiseConv2DDerFilter(e,t,n){return J("depthwiseConv2DDerFilter")}conv3d(e,t,n){return J("conv3d")}conv3dDerInput(e,t,n){return J("conv3dDerInput")}conv3dDerFilter(e,t,n){return J("conv3dDerFilter")}maxPool(e,t){return J("maxPool")}maxPoolBackprop(e,t,n,r){return J("maxPoolBackprop")}avgPool(e,t){return J("avgPool")}avgPoolBackprop(e,t,n){return J("avgPoolBackprop")}avgPool3d(e,t){return J("avgPool3d")}avgPool3dBackprop(e,t,n){return J("avgPool3dBackprop")}maxPool3d(e,t){return J("maxPool3d")}maxPool3dBackprop(e,t,n,r){return J("maxPool3dBackprop")}reshape(e,t){return J("reshape")}cast(e,t){return J("cast")}tile(e,t){return J("tile")}pad(e,t,n){return J("pad")}transpose(e,t){return J("transpose")}gather(e,t,n,r=0){return J("gather")}gatherND(e,t){return J("gatherND")}scatterND(e,t,n){return J("scatterND")}batchToSpaceND(e,t,n){return J("batchToSpaceND")}spaceToBatchND(e,t,n){return J("spaceToBatchND")}resizeBilinear(e,t,n,r,a){return J("resizeBilinear")}resizeBilinearBackprop(e,t,n){return J("resizeBilinearBackprop")}resizeNearestNeighbor(e,t,n,r,a){return J("resizeNearestNeighbor")}resizeNearestNeighborBackprop(e,t,n){return J("resizeNearestNeighborBackprop")}batchNorm(e,t,n,r,a,s){return J("batchNorm")}localResponseNormalization4D(e,t,n,r,a){return J("localResponseNormalization4D")}LRNGrad(e,t,n,r,a,s,i){return J("LRNGrad")}multinomial(e,t,n,r){return J("multinomial")}oneHot(e,t,n,r){return J("oneHot")}cumsum(e,t,n,r){return J("cumsum")}nonMaxSuppression(e,t,n,r,a){return J("nonMaxSuppression")}fft(e){return J("fft")}ifft(e){return J("ifft")}complex(e,t){return J("complex")}real(e){return J("real")}imag(e){return J("imag")}cropAndResize(e,t,n,r,a,s){return J("cropAndResize")}depthToSpace(e,t,n){return J("depthToSpace")}split(e,t,n){return J("split")}sparseToDense(e,t,n,r){return J("sparseToDense")}diag(e){return J("diag")}fill(e,t,n){return J("fill")}onesLike(e){return J("onesLike")}zerosLike(e){return J("zerosLike")}linspace(e,t,n){return J("linspace")}dispose(){return J("dispose")}};function J(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 S0(e){let t=e.length,n=0,r=0;for(;t>0;)r=Math.random()*t|0,t--,n=e[t],e[t]=e[r],e[r]=n}function Pu(e,t,n){return Math.max(e,Math.min(t,n))}function H8(e){return e%2==0?e:e+1}function j8(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function G8(e,t){let n=Math.random();return t*n+(1-n)*e}function q8(e,t){let n=0;for(let r=0;r<e.length;r++){let a=Number(e[r])-Number(t[r]);n+=a*a}return n}function M(e,t){if(!e)throw new Error(typeof t=="string"?t:t())}function at(e,t,n=""){M(aa(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function Ks(e){M(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Zs(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||rn(e)&&!n)for(let r=0;r<e.length;++r)Zs(e[r],t,n);else t.push(e);return t}function Lt(e){if(e.length===0)return 1;let t=e[0];for(let n=1;n<e.length;n++)t*=e[n];return t}function X8(e){return e.length===0}function aa(e,t){if(e===t)return!0;if(e==null||t==null||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function qt(e){return e%1==0}function K8(e){if(Math.tanh!=null)return Math.tanh(e);if(e===Infinity)return 1;if(e===-Infinity)return-1;{let t=Math.exp(2*e);return(t-1)/(t+1)}}function Z8(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function J8(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return S0(t),t}function Lu(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function Y8(e,t=r=>0,n){return new Promise((r,a)=>{let s=0,i=()=>{if(e()){r();return}s++;let o=t(s);if(n!=null&&s>=n){a();return}setTimeout(i,o)};i()})}function Q8(e,t){let n=1,r=-1;for(let s=0;s<e.length;++s)if(e[s]>=0)n*=e[s];else if(e[s]===-1){if(r!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${s}`);r=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);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 a=e.slice();return a[r]=t/n,a}function rr(e,t){let n=t.length;return e=e==null?t.map((r,a)=>a):[].concat(e),M(e.every(r=>r>=-n&&r<n),()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),M(e.every(r=>qt(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function T0(e,t){let n=[],r=[],a=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||a?null:rr(t,e).sort(),i=0;for(let o=0;o<e.length;++o){if(s!=null){if(s[i]===o&&e[o]!==1)throw new Error(`Can't squeeze axis ${o} since its dim '${e[o]}' is not 1`);(s[i]==null||s[i]>o)&&e[o]===1&&(n.push(e[o]),r.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),r.push(o))}return{newShape:n,keptDims:r}}function E0(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 C0(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 R0(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(isNaN(r)||!isFinite(r))throw Error(`A tensor of type ${t} being uploaded contains ${r}.`)}}function F0(e){return e==="bool"||e==="complex64"||e==="float32"||e==="int32"||e==="string"}function M0(e,t){return!(t==="complex64"||t==="float32"&&e!=="complex64"||t==="int32"&&e!=="float32"&&e!=="complex64"||t==="bool"&&e==="bool")}function rn(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array}function $0(e){if(e==="float32"||e==="int32")return 4;if(e==="complex64")return 8;if(e==="bool")return 1;throw new Error(`Unknown dtype ${e}`)}function D0(e){if(e==null)return 0;let t=0;return e.forEach(n=>t+=n.length),t}function Ia(e){return typeof e=="string"||e instanceof String}function O0(e){return typeof e=="boolean"}function z0(e){return typeof e=="number"}function Td(e){return Array.isArray(e)?Td(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array?"int32":z0(e)?"float32":Ia(e)?"string":O0(e)?"bool":"float32"}function Na(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Ed(e,t){for(let n=t;n<e;++n)if(e%n==0)return n;return e}function Zo(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let r=t-3;r>=0;--r)n[r]=n[r+1]*e[r+1];return n}function P0(e,t,n){let r=new Array;if(t.length===1){let a=t[0];for(let s=0;s<a;s++)r[s]=n[e+s]}else{let a=t[0],s=t.slice(1),i=s.reduce((o,l)=>o*l);for(let o=0;o<a;o++)r[o]=P0(e+o*i,s,n)}return r}function Jo(e,t){if(e.length===0)return t[0];let n=e.reduce((r,a)=>r*a);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}.`);return P0(0,e,t)}function im(e,t){let n=Cd(e,t);for(let r=0;r<n.length;r++)n[r]=1;return n}function Cd(e,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool")return new Uint8Array(e);throw new Error(`Unknown data type ${t}`)}function ek(e,t){let n=e.reduce((r,a)=>r*a,1);if(t==null||t==="float32")return Jo(e,new Float32Array(n));if(t==="int32")return Jo(e,new Int32Array(n));if(t==="bool")return Jo(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function om(e){e.forEach(t=>{M(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function tk(e,t,n){if(t===0)return 0;if(t===1)return e[0];let r=e[e.length-1];for(let a=0;a<e.length-1;++a)r+=n[a]*e[a];return r}function nk(e,t,n){if(t===0)return[];if(t===1)return[e];let r=new Array(t);for(let a=0;a<r.length-1;++a)r[a]=Math.floor(e/n[a]),e-=r[a]*n[a];return r[r.length-1]=e,r}function lm(e){return e&&e.then&&typeof e.then=="function"}var L0="tfjsflags",eg=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}setPlatform(e,t){this.platform!=null&&console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${t}.`),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},this.urlFlags[e]!=null){let r=this.urlFlags[e];console.warn(`Setting feature override from URL ${e}: ${r}.`),this.set(e,r)}}async getAsync(e){return e in this.flags?this.flags[e]:(this.flags[e]=await this.evaluateFlag(e),this.flags[e])}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(lm(t))throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[e]=t,this.flags[e]}getNumber(e){return this.get(e)}getBool(e){return this.get(e)}getFlags(){return this.flags}get features(){return this.flags}set(e,t){if(this.flagRegistry[e]==null)throw new Error(`Cannot set flag ${e} as it has not been registered.`);this.flags[e]=t,this.flagRegistry[e].setHook!=null&&this.flagRegistry[e].setHook(t)}evaluateFlag(e){if(this.flagRegistry[e]==null)throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`);return this.flagRegistry[e].evaluationFn()}setFlags(e){this.flags=Object.assign({},e)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(typeof this.global=="undefined"||typeof this.global.location=="undefined"||typeof this.global.location.search=="undefined")return;let e=rk(this.global.location.search);L0 in e&&e[L0].split(",").forEach(t=>{let[n,r]=t.split(":");this.urlFlags[n]=ak(n,r)})}};function rk(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(sk(t,r[0],r[1]),r.join("="))),t}function sk(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function ak(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 Q(){return vn}var vn=null;function ik(e){vn=e}var um;function W0(){if(um==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");um=e}return um}function ok(){let e=W0();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function B0(e,t){let n=ok();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var Di="Abs",Oi="Acos",zi="Acosh",Aa="Add",Ja="AddN",fh="All",mh="Any",Ya="ArgMax",Jl="ArgMin",Pi="Asin",Li="Asinh",Wi="Atan",Bi="Atanh",Vi="Atan2",Qa="AvgPool",Ah="AvgPoolGrad",Yl="AvgPool3D",yh="AvgPool3DGrad",es="BatchMatMul",Ql="BatchToSpaceND",gh="Bincount",tg="BroadcastTo",ts="Cast",Ui="Ceil",ya="ClipByValue",xh="Complex",eu="ComplexAbs",Hi="Concat",ns="Conv2D",wh="Conv2DBackpropFilter",rs="Conv2DBackpropInput",tu="Conv3D",_h="Conv3DBackpropFilterV2",bh="Conv3DBackpropInputV2",as="Cos",ji="Cosh",ss="Cumsum",Gi="CropAndResize",vh="DenseBincount",qi="DepthToSpace",is="DepthwiseConv2dNative",kh="DepthwiseConv2dNativeBackpropFilter",Ih="DepthwiseConv2dNativeBackpropInput",Nh="Diag",nu="Dilation2D",Sh="Dilation2DBackpropInput",Th="Dilation2DBackpropFilter",os="RealDiv",Xi="Elu",Eh="EluGrad",Ki="Erf",Zi="Equal",ls="Exp",Ji="ExpandDims",Yi="Expm1",Ch="FFT",ru="Fill",Qi="FlipLeftRight",us="Floor",cs="FloorDiv",hs="FusedBatchNorm",eo="GatherV2",to="GatherNd",no="Greater",ds="GreaterEqual",ro="Identity",Rh="IFFT",Fh="Imag",ao="IsFinite",so="IsInf",io="IsNan",ps="LeakyRelu",oo="Less",lo="LessEqual",Mh="LinSpace",fs="Log",uo="Log1p",co="LogicalAnd",au="LogicalNot",su="LogicalOr",ng="LogSoftmax",iu="LRN",$h="LRNGrad",ms="Max",As="Maximum",ys="MaxPool",Dh="MaxPoolGrad",ou="MaxPool3D",Oh="MaxPool3DGrad",zh="MaxPoolWithArgmax",gs="Mean",xs="Min",ws="Minimum",lu="MirrorPad",ho="Mod",Ph="Multinomial",_s="Multiply",po="Neg",fo="NotEqual",mo="NonMaxSuppressionV3",Ao="NonMaxSuppressionV4",yo="NonMaxSuppressionV5",go="OnesLike",bs="OneHot",xo="Pack",vs="PadV2",i4="Pool",ks="Pow",Is="Prelu",wo="Prod",uu="Range",Lh="Real",_o="Reciprocal",Ns="Relu",bo="Reshape",cu="ResizeNearestNeighbor",Wh="ResizeNearestNeighborGrad",Ss="ResizeBilinear",Bh="ResizeBilinearGrad",Ts="Relu6",Es="Reverse",Cs="Round",Rs="Rsqrt",vo="ScatterNd",ko="Select",Io="Selu",No="Slice",Fs="Sin",So="Sinh",To="Sign",Ms="Sigmoid",Eo="Softplus",$s="Sqrt",Ds="Sum",hu="SpaceToBatchND",Co="SplitV",Os="Softmax",zs="SquaredDifference",du="Square",Ps="Sub",Vh="SparseToDense",Ro="StridedSlice",Fo="Tan",Ls="Tanh",ga="Tile",Mo="TopK",Ws="Transpose",Uh="Unique",$o="Unpack",pu="UnsortedSegmentSum",Do="ZerosLike",Oo="Step",Hh="FromPixels",zo="RotateWithOffset",Bs="_FusedMatMul",Vs="FusedConv2D",Us="FusedDepthwiseConv2D",Yo=B0("kernelRegistry",()=>new Map),Wu=B0("gradRegistry",()=>new Map);function mf(e,t){let n=cm(e,t);return Yo.get(n)}function Af(e){return Wu.get(e)}function fu(e){let t=Yo.entries(),n=[];for(;;){let{done:r,value:a}=t.next();if(r)break;let[s,i]=a,[o]=s.split("_");o===e&&n.push(i)}return n}function Po(e){let{kernelName:t,backendName:n}=e,r=cm(t,n);Yo.has(r)&&console.warn(`The kernel '${t}' for backend '${n}' is already registered`),Yo.set(r,e)}function rg(e){let{kernelName:t}=e;Wu.has(t)&&Q().getBool("DEBUG")&&console.warn(`Overriding the gradient for '${t}'`),Wu.set(t,e)}function o4(e,t){let n=cm(e,t);if(!Yo.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Yo.delete(n)}function l4(e){if(!Wu.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Wu.delete(e)}function u4(e,t){fu(e).forEach(n=>{let r=Object.assign({},n,{backendName:t});Po(r)})}function cm(e,t){return`${t}_${e}`}var k={};Pe(k,{arraysEqual:()=>aa,assert:()=>M,assertNonNegativeIntegerDimensions:()=>om,assertNonNull:()=>Ks,assertShapesMatch:()=>at,bytesFromStringArray:()=>D0,bytesPerElement:()=>$0,checkConversionForErrors:()=>R0,clamp:()=>Pu,computeStrides:()=>Zo,createScalarValue:()=>lk,createShuffledIndices:()=>J8,decodeString:()=>Fd,distSquared:()=>q8,encodeString:()=>Bu,fetch:()=>uk,flatten:()=>Zs,getArrayFromDType:()=>C0,getTypedArrayFromDType:()=>E0,hasEncodingLoss:()=>M0,indexToLoc:()=>nk,inferDtype:()=>Td,inferFromImplicitShape:()=>Q8,isBoolean:()=>O0,isFunction:()=>Na,isInt:()=>qt,isNumber:()=>z0,isPromise:()=>lm,isScalarShape:()=>X8,isString:()=>Ia,isTypedArray:()=>rn,isValidDtype:()=>F0,locToIndex:()=>tk,makeOnesTypedArray:()=>im,makeZerosNestedTypedArray:()=>ek,makeZerosTypedArray:()=>Cd,nearestDivisor:()=>Ed,nearestLargerEven:()=>H8,now:()=>hm,parseAxisParam:()=>rr,randUniform:()=>G8,repeatedTry:()=>Y8,rightPad:()=>Lu,shuffle:()=>S0,sizeFromShape:()=>Lt,sizeToSquarishShape:()=>Z8,squeezeShape:()=>T0,sum:()=>j8,tanh:()=>K8,toNestedArray:()=>Jo,toTypedArray:()=>Rd});function lk(e,t){return t==="string"?Bu(e):Rd([e],t)}function ck(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Rd(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Zs(e)),Q().getBool("DEBUG")&&R0(e,t),ck(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<n.length;++r)Math.round(e[r])!==0&&(n[r]=1);return n}else throw new Error(`Unknown data type ${t}`)}function hm(){return Q().platform.now()}function uk(e,t){return Q().platform.fetch(e,t)}function Bu(e,t="utf-8"){return t=t||"utf-8",Q().platform.encode(e,t)}function Fd(e,t="utf-8"){return t=t||"utf-8",Q().platform.decode(e,t)}var pk=class{constructor(e,t){this.backendTimer=e,this.logger=t,t==null&&(this.logger=new dk)}profileKernel(e,t,n){let r,a=()=>{r=n()},s=this.backendTimer.time(a);if(Q().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let i=0;i<r.length;i++){let o=r[i];o.data().then(l=>{hk(l,o.dtype,e)})}return{kernelName:e,outputs:r,inputs:t,timeMs:s.then(i=>i.kernelMs),extraInfo:s.then(i=>i.getExtraProfileInfo!=null?i.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:r,inputs:a,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),r,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],a,o[2])})})}};function hk(e,t,n){if(t!=="float32")return!1;for(let r=0;r<e.length;r++){let a=e[r];if(isNaN(a)||!isFinite(a))return console.warn(`Found ${a} in the result of '${n}'`),!0}return!1}var dk=class{logKernelProfile(e,t,n,r,a,s){let i=typeof r=="number"?Lu(`${r}ms`,9):r.error,o=Lu(e,25),l=t.rank,c=t.size,u=Lu(t.shape.toString(),14),h="";for(let d in a){let p=a[d];if(p!=null){let f=p.shape||t.shape,m=f.length;h+=`${d}: ${m}D ${m>0?f:""} `}}console.log(`%c${o} %c${i} %c${l}D ${u} %c${c} %c${h} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function fk(e,t,n){let r={},a={};for(let l=0;l<t.length;l++)r[t[l].id]=!0;for(let l=0;l<e.length;l++){let c=e[l],u=c.inputs;for(let h in u){let d=u[h],p=!1;for(let f=0;f<t.length;f++)if(r[d.id]){c.outputs.forEach(m=>r[m.id]=!0),p=!0,a[c.id]=!0;break}if(p)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let c=e[l],u=c.inputs;for(let h=0;h<c.outputs.length;h++)if(s[c.outputs[h].id]){for(let d in u)s[u[d].id]=!0,i[c.id]=!0;break}}let o=[];for(let l=0;l<e.length;l++){let c=e[l];if(a[c.id]&&i[c.id]){let u={};for(let d in c.inputs){let p=c.inputs[d];r[p.id]&&(u[d]=p)}let h=Object.assign({},c);h.inputs=u,h.outputs=c.outputs,o.push(h)}}return o}function mk(e,t,n,r){for(let a=t.length-1;a>=0;a--){let s=t[a],i=[];if(s.outputs.forEach(l=>{let c=e[l.id];c!=null?i.push(c):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let c=n(()=>o[l]());if(c.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${c.dtype}'`);let u=s.inputs[l];if(!aa(c.shape,u.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${c.shape}', which does not match the shape of the input '${u.shape}'`);if(e[u.id]==null)e[u.id]=c;else{let h=e[u.id];e[u.id]=r(h,c),h.dispose()}}}}var V0=20,Vu=3,dm=7;function yk(e,t,n,r){let a=Zo(t),s=Ak(e,t,n,a),i=t.length,o=Md(e,t,n,a,s),l=["Tensor"];return r&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(c=>" "+c).join(`
|
|
`)),l.join(`
|
|
`)}function Ak(e,t,n,r){let a=Lt(t),s=r[r.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?Hu(e):e;if(o>1)for(let c=0;c<a/s;c++){let u=c*s;for(let h=0;h<s;h++)i[h]=Math.max(i[h],Uu(l[u+h],0,n).length)}return i}function Uu(e,t,n){let r;return Array.isArray(e)?r=`${parseFloat(e[0].toFixed(dm))} + ${parseFloat(e[1].toFixed(dm))}j`:Ia(e)?r=`'${e}'`:n==="bool"?r=U0(e):r=parseFloat(e.toFixed(dm)).toString(),Lu(r,t)}function U0(e){return e===0?"false":"true"}function Md(e,t,n,r,a,s=!0){let i=n==="complex64"?2:1,o=t[0],l=t.length;if(l===0){if(n==="complex64"){let m=Hu(e);return[Uu(m[0],0,n)]}return n==="bool"?[U0(e[0])]:[e[0].toString()]}if(l===1){if(o>V0){let A=Vu*i,y=Array.from(e.slice(0,A)),g=Array.from(e.slice((o-Vu)*i,o*i));return n==="complex64"&&(y=Hu(y),g=Hu(g)),["["+y.map((w,x)=>Uu(w,a[x],n)).join(", ")+", ..., "+g.map((w,x)=>Uu(w,a[o-Vu+x],n)).join(", ")+"]"]}let m=n==="complex64"?Hu(e):Array.from(e);return["["+m.map((A,y)=>Uu(A,a[y],n)).join(", ")+"]"]}let c=t.slice(1),u=r.slice(1),h=r[0]*i,d=[];if(o>V0){for(let m=0;m<Vu;m++){let A=m*h,y=A+h;d.push(...Md(e.slice(A,y),c,n,u,a,!1))}d.push("...");for(let m=o-Vu;m<o;m++){let A=m*h,y=A+h;d.push(...Md(e.slice(A,y),c,n,u,a,m===o-1))}}else for(let m=0;m<o;m++){let A=m*h,y=A+h;d.push(...Md(e.slice(A,y),c,n,u,a,m===o-1))}let p=l===2?",":"";d[0]="["+d[0]+p;for(let m=1;m<d.length-1;m++)d[m]=" "+d[m]+p;let f=`,
|
|
`;for(let m=2;m<l;m++)f+=`
|
|
`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":f),d}function Hu(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var zt=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=Lt(e),n!=null){let r=n.length;M(r===this.size,()=>`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||C0(t,this.size),this.strides=Zo(e)}set(e,...t){t.length===0&&(t=[0]),M(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 a=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(a)}t++}let n=e[e.length-1];for(let r=0;r<e.length-1;++r)n+=this.strides[r]*e[r];return this.values[n]}locToIndex(e){if(this.rank===0)return 0;if(this.rank===1)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(this.rank===0)return[];if(this.rank===1)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return Dr().makeTensor(this.values,this.shape,this.dtype)}},Dr=null,Qo=null,gk=null;function xk(e){Dr=e}function wk(e){Qo=e}function _k(e){gk=e}var j=class{constructor(e,t,n,r){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=Lt(e),this.strides=Zo(e),this.dataId=n,this.id=r,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return Qo.buffer(this.shape,this.dtype,e)}bufferSync(){return Qo.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return Jo(this.shape,e)}arraySync(){return Jo(this.shape,this.dataSync())}async data(){this.throwIfDisposed();let e=Dr().read(this.dataId);if(this.dtype==="string"){let t=await e;try{return t.map(n=>Fd(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=Dr().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Fd(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 Dr().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Dr().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Qo.print(this,e)}clone(){return this.throwIfDisposed(),Qo.clone(this)}toString(e=!1){let t=this.dataSync();return yk(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Qo.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Dr().makeVariable(this,e,t,n)}};Object.defineProperty(j,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});var mu=class extends j{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(!aa(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Dr().disposeTensor(this),this.dataId=e.dataId,Dr().incRef(this,null)}dispose(){Dr().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(mu,Symbol.hasInstance,{value:e=>e instanceof j&&e.assign!=null&&e.assign instanceof Function});var fr={};Pe(fr,{assertTypesMatch:()=>H0,getTensorsInContainer:()=>pm,isTensorInList:()=>bk,makeTypesMatch:()=>Nt});var yf;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(yf||(yf={}));var fm;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(fm||(fm={}));var mm;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(mm||(mm={}));var Am;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Am||(Am={}));var ym;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(ym||(ym={}));var vk={float32:Am,int32:fm,bool:mm,complex64:ym};function er(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return vk[e][t]}function jh(e){return er(e,"int32")}function Nt(e,t){if(e.dtype===t.dtype)return[e,t];let n=er(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function H0(e,t){M(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function bk(e,t){return t.some(n=>n.id===e.id)}function pm(e){let t=[],n=new Set;return j0(e,t,n),t}function j0(e,t,n){if(e==null)return;if(e instanceof j){t.push(e);return}if(!kk(e))return;let r=e;for(let a in r){let s=r[a];n.has(s)||(n.add(s),j0(s,t,n))}}function kk(e){return Array.isArray(e)||typeof e=="object"}var G0=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()}},ju=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new G0}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t];if(await this.initializeBackend(n).success){await this.setBackend(n);return}}throw new Error("Could not initialize any backends, all backend initializations failed.")}get backend(){if(this.pendingBackendInit!=null)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(this.backendInstance==null){let{name:e,asyncInit:t}=this.initializeBackendsAndReturnBest();if(t)throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(e)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(e){if(!(e in this.registry))if(e in this.registryFactory){let{asyncInit:t}=this.initializeBackend(e);if(t)return null}else return null;return this.registry[e]}findBackendFactory(e){return e in this.registryFactory?this.registryFactory[e].factory:null}registerBackend(e,t,n=1){return e in this.registryFactory?(console.warn(`${e} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[e]={factory:t,priority:n},!0)}async setBackend(e){if(this.registryFactory[e]==null)throw new Error(`Backend name '${e}' not found in registry`);if(this.backendName=e,this.registry[e]==null){this.backendInstance=null;let{success:t,asyncInit:n}=this.initializeBackend(e);if(!(n?await t:t))return!1}return this.backendInstance=this.registry[e],this.setupRegisteredKernels(),this.profiler=new pk(this.backendInstance),!0}setupRegisteredKernels(){fu(this.backendName).forEach(e=>{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){fu(e).forEach(t=>{t.disposeFunc!=null&&t.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 Zl)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,a=n.then(s=>r<this.pendingBackendInitId?!1:(this.registry[e]=s,this.pendingBackendInit=null,!0)).catch(s=>(r<this.pendingBackendInitId||(this.pendingBackendInit=null,console.warn(`Initialization of backend ${e} failed`),console.warn(s.stack||s.message)),!1));return this.pendingBackendInit=a,{success:a,asyncInit:!0}}else return this.registry[e]=n,{success:!0,asyncInit:!1}}catch(n){return console.warn(`Initialization of backend ${e} failed`),console.warn(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:r,asyncInit:a}=this.initializeBackend(n);if(a||r)return{name:n,asyncInit:a}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),r=n.backend,a=this.readSync(t);r.disposeData(t),n.backend=e,e.move(t,a,n.shape,n.dtype),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n=null;if(t==null){if(typeof e!="function")throw new Error("Please provide a function to tidy()");t=e}else{if(typeof e!="string"&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof t!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=e}let r;return this.scopedRun(()=>this.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 ju.nextTensorId++}nextVariableId(){return ju.nextVariableId++}clone(e){let t=this.makeTensorFromDataId(e.dataId,e.shape,e.dtype),n={x:e},r=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return L.runKernelFunc(c=>c.cast(s,i),o,null,ts,l)}}),a=[];return this.addTapeNode(this.state.activeScope.name,n,[t],r,a,{}),t}runKernel(e,t,n,r,a){let s=null,i=null;return this.runKernelFunc(s,t,i,e,n,r,a)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let r=this.backend.numDataIds(),a=0;n.forEach(o=>{a+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=r-t-a-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e,t,n,r,a,s,i){let o,l=[],c=this.isTapeOn();r==null&&(r=this.state.activeScope!=null?this.state.activeScope.name:"");let u=this.state.numBytes,h=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let d;this.backendName==null&&this.backend;let p=mf(r,this.backendName),f;if(p!=null)d=()=>{let A=this.backend.numDataIds();f=p.kernelFunc({inputs:t,attrs:a,backend:this.backend});let y=Array.isArray(f)?f:[f];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(r,A,y);let g=y.map(w=>{if(w.rank!=null)return w;let{dataId:x,shape:_,dtype:b}=w;return this.makeTensorFromDataId(x,_,b)});if(c){let w=this.getTensorsForGradient(r,t,g);if(w==null){i==null&&(i=[]);let x=g.filter((_,b)=>i[b]);w=(s||[]).slice().concat(x)}l=this.saveTensorsForBackwardMode(w)}return g};else{if(e==null)throw new Error(`Error running ${r}: Neither modular kernel nor forward func passed`);let A=y=>{!c||(l=y.map(g=>this.keep(this.clone(g))))};d=()=>{let y=this.backend.numDataIds();f=this.tidy(()=>e(this.backend,A));let g=Array.isArray(f)?f:[f];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(r,y,g),g}}let m;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?o=d():(m=this.profiler.profileKernel(r,t,()=>d()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(m),o=m.outputs)}),c&&this.addTapeNode(r,t,o,n,l,a),this.state.profiling&&this.state.activeProfile.kernels.push({name:r,bytesAdded:this.state.numBytes-u,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-h,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(t).map(A=>t[A]!=null?t[A].shape:null),outputShapes:o.map(A=>A.shape),kernelTimeMs:m.timeMs,extraInfo:m.extraInfo}),Array.isArray(f)?o:o[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,n){let r=Af(e);if(r!=null){let a=r.inputsToSave||[],s=r.outputsToSave||[],i;r.saveAllInputs?(M(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=a.map(l=>t[l]);let o=n.filter((l,c)=>s[c]);return i.concat(o)}return null}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 a=e;n==="string"&&Ia(e[0])&&(a=e.map(o=>Bu(o)));let s=r.write(a,t,n),i=new j(t,n,s,this.nextTensorId());if(this.incRef(i,r),n==="string"){let o=this.state.tensorInfo.get(s),l=D0(a);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,n,r){n=n||"float32";let a=new j(t,n,e,this.nextTensorId());return this.incRef(a,r),a}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==e.dtype&&(e=e.cast(r));let a=new mu(e,t,n,this.nextTensorId());if(this.state.registeredVariables[a.name]!=null)throw new Error(`Variable with name ${a.name} was already registered`);return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a}incRef(e,t){let n=this.state.tensorInfo.has(e.dataId)?this.state.tensorInfo.get(e.dataId).refCount:0;if(this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++,n===0){this.state.numDataBuffers++;let r=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(r=e.size*$0(e.dtype)),this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:r,refCount:0}),this.state.numBytes+=r}this.state.tensorInfo.get(e.dataId).refCount++,e instanceof mu||this.track(e)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;this.state.numTensors--,e.dtype==="string"&&this.state.numStringTensors--;let t=this.state.tensorInfo.get(e.dataId);t.refCount<=1?(e.dtype!=="complex64"&&(this.state.numBytes-=t.bytes),this.state.numDataBuffers--,t.backend.disposeData(e.dataId),this.state.tensorInfo.delete(e.dataId)):this.state.tensorInfo.get(e.dataId).refCount--}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,a,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:a},o=Af(e);o!=null&&(r=o.gradFunc),r!=null&&(i.gradient=l=>(l=l.map((c,u)=>{if(c==null){let h=n[u],d=Cd(h.size,h.dtype);return this.makeTensor(d,h.shape,h.dtype)}return c}),r(l.length>1?l:l[0],a,s))),this.state.activeTape.push(i)}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=pm(e),n=new Set(t.map(a=>a.id));for(let a=0;a<this.state.activeScope.track.length;a++){let s=this.state.activeScope.track[a];!s.kept&&!n.has(s.id)&&s.dispose()}let r=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(a=>{!a.kept&&a.scopeId===r.id&&this.track(a)})}gradients(e,t,n,r=!1){if(M(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 a=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));M(a instanceof j,()=>"The result y returned by f() must be a tensor.");let s=fk(this.state.activeTape,t,a);if(!r&&s.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 i={};i[a.id]=n==null?Ik(a.shape):n,mk(i,s,l=>this.tidy(l),Nk);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let c of l.saved)c.dispose()}),this.state.activeTape=null),{value:a,grads:o}})}customGrad(e){return M(Na(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{M(t.every(a=>a instanceof j),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};return t.forEach((a,s)=>{r[s]=a}),this.runKernelFunc((a,s)=>(n=e(...t,s),M(n.value instanceof j,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),M(Na(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),r,(a,s)=>{let i=n.gradFunc(a,s),o=Array.isArray(i)?i:[i];M(o.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(...)."),M(o.every(c=>c instanceof j),()=>"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 l={};return o.forEach((c,u)=>{l[u]=()=>c}),l})}}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=hm(),n=await this.backend.time(e);return n.wallMs=hm()-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 G0;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}};ju.nextTensorId=0;ju.nextVariableId=0;function Ik(e){let t=im(Lt(e),"float32");return L.makeTensor(t,e,"float32")}function q0(){let e=W0();if(e._tfengine==null){let t=new eg(e);e._tfengine=new ju(t)}return ik(e._tfengine.ENV),xk(()=>e._tfengine),e._tfengine}var L=q0();function Nk(e,t){let n={a:e,b:t};return L.runKernel(Aa,n)}var Gh={};Pe(Gh,{isBrowser:()=>X0,isMobile:()=>Sk});function Tk(){return typeof navigator!="undefined"&&navigator!=null}function Sk(){if(Tk()){let e=navigator.userAgent||navigator.vendor||window.opera;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(e)||/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(e.substr(0,4))}return!1}function X0(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Or=Q();Or.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.")});Or.registerFlag("IS_BROWSER",()=>X0());Or.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Or.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Or.registerFlag("PROD",()=>!1);Or.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Or.getBool("DEBUG"));Or.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Or.registerFlag("IS_TEST",()=>!1);Or.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);function zr(e,t){let n=e;if(rn(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||rn(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&Q().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&K0(e,r,[]),r}function K0(e,t,n){if(n=n||[],!Array.isArray(e)&&!rn(e)){M(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}M(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),M(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 a=0;a<e.length;++a)K0(e[a],r,n.concat(a))}function Z0(e,t,n,r){if(e!=="string_or_numeric"){if(e==null)throw new Error("Expected dtype cannot be null.");if(e!=="numeric"&&e!==t||e==="numeric"&&t==="string")throw new Error(`Argument '${n}' passed to '${r}' must be ${e} tensor, but got ${t} tensor`)}}function R(e,t,n,r="numeric"){if(e instanceof j)return Z0(r,e.dtype,t,n),e;let a=Td(e);if(a!=="string"&&["bool","int32","float32"].indexOf(r)>=0&&(a=r),Z0(r,a,t,n),e==null||!rn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${o}'`)}let s=zr(e,a);!rn(e)&&!Array.isArray(e)&&(e=[e]);let i=a!=="string"?Rd(e,a):Zs(e,[],!0);return L.makeTensor(i,s,a)}function Gu(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((a,s)=>R(a,`${t}[${s}]`,n,r))}var ag="__op";function P(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+ag;let a=(...s)=>{L.startScope(n);try{let i=r(...s);return lm(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(a,"name",{value:n,configurable:!0}),a}function Ek(e,t){let n=R(e,"real","complex"),r=R(t,"imag","complex");at(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let a={real:n,imag:r};return L.runKernel(xh,a)}var xa=P({complex_:Ek});function Sa(e,t,n,r){if(r==null&&(r=Td(e)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!rn(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){om(t);let a=Lt(t),s=Lt(n);M(a===s,()=>`Based on the provided shape, [${t}], the tensor should have ${a} values but has ${s}`);for(let i=0;i<n.length;++i){let o=n[i],l=i===n.length-1?o!==Lt(t.slice(i)):!0;M(n[i]===t[i]||!l,()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!rn(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?Rd(e,r):Zs(e,[],!0),L.makeTensor(e,t,r)}function mr(e,t,n){let r=zr(e,n);return Sa(e,t,r,n)}var gm={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},$d=4;async function Rk(e,t){let n=[],r=[],a=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i<a.length;++i){let o=a[i],l=Array.isArray(e)?e[i].tensor:e[o];if(l.dtype!=="float32"&&l.dtype!=="int32"&&l.dtype!=="bool"&&l.dtype!=="string"&&l.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${o}': ${l.dtype}`);let c={name:o,shape:l.shape,dtype:l.dtype};if(l.dtype==="string"){let u=new Promise(async h=>{let d=await l.bytes(),p=d.reduce((A,y)=>A+y.length,0)+$d*d.length,f=new Uint8Array(p),m=0;for(let A=0;A<d.length;A++){let y=d[A],g=new Uint8Array(new Uint32Array([y.length]).buffer);f.set(g,m),m+=$d,f.set(y,m),m+=y.length}h(f)});r.push(u)}else r.push(l.data());t!=null&&(c.group=t),n.push(c)}let s=await Promise.all(r);return{data:Ck(s),specs:n}}function J0(e,t){let n={},r,a=0;for(let s of t){let i=s.name,o=s.dtype,l=s.shape,c=Lt(l),u;if("quantization"in s){let h=s.quantization;if(h.dtype==="uint8"||h.dtype==="uint16"){if(!("min"in h&&"scale"in h))throw new Error(`Weight ${s.name} with quantization ${h.dtype} doesn't have corresponding metadata min and scale.`)}else if(h.dtype==="float16"){if(o!=="float32")throw new Error(`Weight ${s.name} is quantized with ${h.dtype} which only supports weights of type float32 not ${o}.`)}else throw new Error(`Weight ${s.name} has unknown quantization dtype ${h.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let d=gm[h.dtype],p=e.slice(a,a+c*d),f=h.dtype==="uint8"?new Uint8Array(p):new Uint16Array(p);if(o==="float32")if(h.dtype==="uint8"||h.dtype==="uint16"){u=new Float32Array(f.length);for(let m=0;m<f.length;m++){let A=f[m];u[m]=A*h.scale+h.min}}else if(h.dtype==="float16")r===void 0&&(r=Fk()),u=r(f);else throw new Error(`Unsupported quantization type ${h.dtype} for weight type float32.`);else if(o==="int32"){if(h.dtype!=="uint8"&&h.dtype!=="uint16")throw new Error(`Unsupported quantization type ${h.dtype} for weight type int32.`);u=new Int32Array(f.length);for(let m=0;m<f.length;m++){let A=f[m];u[m]=Math.round(A*h.scale+h.min)}}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);a+=c*d}else if(o==="string"){let h=Lt(s.shape);u=[];for(let d=0;d<h;d++){let p=new Uint32Array(e.slice(a,a+$d))[0];a+=$d;let f=new Uint8Array(e.slice(a,a+p));u.push(f),a+=p}}else{let h=gm[o],d=e.slice(a,a+c*h);if(o==="float32")u=new Float32Array(d);else if(o==="int32")u=new Int32Array(d);else if(o==="bool")u=new Uint8Array(d);else if(o==="complex64"){u=new Float32Array(d);let p=new Float32Array(u.length/2),f=new Float32Array(u.length/2);for(let y=0;y<p.length;y++)p[y]=u[y*2],f[y]=u[y*2+1];let m=mr(p,l,"float32"),A=mr(f,l,"float32");n[i]=xa(m,A),m.dispose(),A.dispose()}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);a+=c*h}o!=="complex64"&&(n[i]=mr(u,l,o))}return n}function Ck(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach(s=>{if(t+=s.byteLength,n.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let r=new Uint8Array(t),a=0;return n.forEach(s=>{r.set(new Uint8Array(s.buffer),a),a+=s.byteLength}),r.buffer}var xm=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Y0(e){return xm?Buffer.byteLength(e):new Blob([e]).size}function Mk(e){if(xm)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,a=t.length;r<a;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function $k(e){if(xm){let r=Buffer.from(e,"base64");return r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;++r)n.set([t.charCodeAt(r)],r);return n.buffer}function wm(e){if(e.length===1)return e[0];let t=0;e.forEach(a=>{t+=a.byteLength});let n=new Uint8Array(t),r=0;return e.forEach(a=>{n.set(new Uint8Array(a),r),r+=a.byteLength}),n.buffer}function Q0(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 qu(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:Y0(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:Y0(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function Dk(){let e=n=>{let r=n<<13,a=0;for(;(r&8388608)==0;)a-=8388608,r<<=1;return r&=~8388608,a+=947912704,r|a},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 Ok(){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 zk(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function Fk(){let e=Dk(),t=Ok(),n=zk();return r=>{let a=new ArrayBuffer(4*r.length),s=new Uint32Array(a);for(let i=0;i<r.length;i++){let o=r[i],l=e[n[o>>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(a)}}var Ct=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Ct.instance==null&&(Ct.instance=new Ct),Ct.instance}static registerSaveRouter(e){Ct.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Ct.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Ct.getHandlers(e,"save")}static getLoadHandlers(e,t){return Ct.getHandlers(e,"load",t)}static getHandlers(e,t,n){let r=[];return(t==="load"?Ct.getInstance().loadRouters:Ct.getInstance().saveRouters).forEach(a=>{let s=a(e,n);s!==null&&r.push(s)}),r}},Pk=e=>Ct.registerSaveRouter(e),Lk=e=>Ct.registerLoadRouter(e),Wk=e=>Ct.getSaveHandlers(e),Bk=(e,t)=>Ct.getLoadHandlers(e,t),_m="tensorflowjs",bm=1,Js="models_store",Ta="model_info_store";function e5(){if(!Q().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 vm(e){let t=e.result;t.createObjectStore(Js,{keyPath:"modelPath"}),t.createObjectStore(Ta,{keyPath:"modelPath"})}var Ys=class{constructor(e){if(this.indexedDB=e5(),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 a=this.indexedDB.open(_m,bm);a.onupgradeneeded=()=>vm(a),a.onsuccess=()=>{let s=a.result;if(t==null){let i=s.transaction(Js,"readonly"),o=i.objectStore(Js).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),r(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(o.result.modelArtifacts)},o.onerror=l=>(s.close(),r(o.error)),i.oncomplete=()=>s.close()}else{let i=qu(t),o=s.transaction(Ta,"readwrite"),l=o.objectStore(Ta),c=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),u;c.onsuccess=()=>{u=s.transaction(Js,"readwrite");let h=u.objectStore(Js).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});h.onsuccess=()=>n({modelArtifactsInfo:i}),h.onerror=d=>{l=o.objectStore(Ta);let p=l.delete(this.modelPath);p.onsuccess=()=>(s.close(),r(h.error)),p.onerror=f=>(s.close(),r(h.error))}},c.onerror=h=>(s.close(),r(c.error)),o.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}}},a.onerror=s=>r(a.error)})}};Ys.URL_SCHEME="indexeddb://";var t5=e=>Q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ys.URL_SCHEME)?Vk(e.slice(Ys.URL_SCHEME.length)):null;Ct.registerSaveRouter(t5);Ct.registerLoadRouter(t5);function Vk(e){return new Ys(e)}function Uk(e){return e.startsWith(Ys.URL_SCHEME)?e.slice(Ys.URL_SCHEME.length):e}var Hk=class{constructor(){this.indexedDB=e5()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(_m,bm);n.onupgradeneeded=()=>vm(n),n.onsuccess=()=>{let r=n.result,a=r.transaction(Ta,"readonly"),s=a.objectStore(Ta).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(r.close(),t(s.error)),a.oncomplete=()=>r.close()},n.onerror=r=>t(n.error)})}async removeModel(e){return e=Uk(e),new Promise((t,n)=>{let r=this.indexedDB.open(_m,bm);r.onupgradeneeded=()=>vm(r),r.onsuccess=()=>{let a=r.result,s=a.transaction(Ta,"readwrite"),i=s.objectStore(Ta),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return a.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),u=()=>{l=a.transaction(Js,"readwrite");let h=l.objectStore(Js).delete(e);h.onsuccess=()=>t(o.result.modelArtifactsInfo),h.onerror=d=>n(o.error)};c.onsuccess=u,c.onerror=h=>(u(),a.close(),n(o.error))}},o.onerror=c=>(a.close(),n(o.error)),s.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}},r.onerror=a=>n(r.error)})}},sa="/",el="tensorflowjs_models",n5="info",jk="model_topology",Gk="weight_specs",qk="weight_data",Xk="model_metadata";function r5(e){return{info:[el,e,n5].join(sa),topology:[el,e,jk].join(sa),weightSpecs:[el,e,Gk].join(sa),weightData:[el,e,qk].join(sa),modelMetadata:[el,e,Xk].join(sa)}}function Kk(e){let t=e.split(sa);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(sa)}function Zk(e){return e.startsWith(Qs.URL_SCHEME)?e.slice(Qs.URL_SCHEME.length):e}var Qs=class{constructor(e){if(!Q().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=r5(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=qu(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,Mk(e.weightData));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};return e.signature!=null&&(a.signature=e.signature),e.userDefinedMetadata!=null&&(a.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(a.modelInitializer=e.modelInitializer),this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:r}}catch(a){throw this.LS.removeItem(this.keys.info),this.LS.removeItem(this.keys.topology),this.LS.removeItem(this.keys.weightSpecs),this.LS.removeItem(this.keys.weightData),this.LS.removeItem(this.keys.modelMetadata),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 a=this.LS.getItem(this.keys.modelMetadata);if(a!=null){let i=JSON.parse(a);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=$k(s),t}};Qs.URL_SCHEME="localstorage://";var a5=e=>Q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Qs.URL_SCHEME)?Jk(e.slice(Qs.URL_SCHEME.length)):null;Ct.registerSaveRouter(a5);Ct.registerLoadRouter(a5);function Jk(e){return new Qs(e)}var Yk=class{constructor(){M(Q().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),M(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=el+sa,n=sa+n5;for(let r=0;r<this.LS.length;++r){let a=this.LS.key(r);if(a.startsWith(t)&&a.endsWith(n)){let s=Kk(a);e[s]=JSON.parse(this.LS.getItem(a))}}return e}async removeModel(e){e=Zk(e);let t=r5(e);if(this.LS.getItem(t.info)==null)throw new Error(`Cannot find model at path '${e}'`);let n=JSON.parse(this.LS.getItem(t.info));return this.LS.removeItem(t.info),this.LS.removeItem(t.topology),this.LS.removeItem(t.weightSpecs),this.LS.removeItem(t.weightData),n}},tl="://",Gn=class{constructor(){this.managers={}}static getInstance(){return Gn.instance==null&&(Gn.instance=new Gn),Gn.instance}static registerManager(e,t){M(e!=null,()=>"scheme must not be undefined or null."),e.endsWith(tl)&&(e=e.slice(0,e.indexOf(tl))),M(e.length>0,()=>"scheme must not be an empty string.");let n=Gn.getInstance();M(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 Dd(e){if(e.indexOf(tl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Gn.getSchemes().join(",")}`);return{scheme:e.split(tl)[0],path:e.split(tl)[1]}}async function s5(e,t,n=!1){M(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=Ct.getLoadHandlers(e);M(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),M(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let a=r[0],s=Ct.getSaveHandlers(t);M(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),M(s.length<2,()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`);let i=s[0],o=Dd(e).scheme,l=Dd(e).path,c=o===Dd(e).scheme,u=await a.load();n&&c&&await Gn.getManager(o).removeModel(l);let h=await i.save(u);return n&&!c&&await Gn.getManager(o).removeModel(l),h.modelArtifactsInfo}async function Qk(){let e=Gn.getSchemes(),t={};for(let n of e){let r=await Gn.getManager(n).listModels();for(let a in r){let s=n+tl+a;t[s]=r[a]}}return t}async function e9(e){let t=Dd(e);return Gn.getManager(t.scheme).removeModel(t.path)}async function t9(e,t){return s5(e,t,!1)}async function n9(e,t){return s5(e,t,!0)}var r9=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(Q().get("IS_BROWSER")){Q().setPlatform("browser",new r9);try{Gn.registerManager(Qs.URL_SCHEME,new Yk)}catch(e){}try{Gn.registerManager(Ys.URL_SCHEME,new Hk)}catch(e){}}var a9={importFetch:()=>l8()},km,s9=class{constructor(){this.util=require("util"),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return Q().global.fetch!=null?Q().global.fetch(e,t):(km==null&&(km=a9.importFetch()),km(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)}};Q().get("IS_NODE")&&Q().setPlatform("node",new s9);function He(e,t="float32",n){return t=t||"float32",om(e),new zt(e,t,n)}function i9(e,t){let n=R(e,"x","cast");if(!F0(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},a={dtype:t};return L.runKernel(ts,r,a)}var ge=P({cast_:i9});function o9(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(ro,t)}var Tr=P({clone_:o9});function sg(e,t=!1){console.log(e.toString(t))}q0();var l9={buffer:He,cast:ge,clone:Tr,print:sg};wk(l9);var fn={};Pe(fn,{browserFiles:()=>u9,browserHTTPRequest:()=>h9,concatenateArrayBuffers:()=>wm,copyModel:()=>t9,decodeWeights:()=>J0,encodeWeights:()=>Rk,fromMemory:()=>d9,getLoadHandlers:()=>Bk,getModelArtifactsInfoForJSON:()=>qu,getSaveHandlers:()=>Wk,http:()=>Nm,isHTTPScheme:()=>Im,listModels:()=>Qk,loadWeights:()=>c9,moveModel:()=>n9,registerLoadRouter:()=>Lk,registerSaveRouter:()=>Pk,removeModel:()=>e9,weightsLoaderFactory:()=>i5,withSaveHandler:()=>p9});var f9="model",m9=".json",A9=".weights.bin";function o5(e){return new Promise(t=>setTimeout(t)).then(e)}var nl=class{constructor(e){if(!Q().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(nl.URL_SCHEME)&&(e=e.slice(nl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=f9),this.modelTopologyFileName=e+m9,this.weightDataFileName=e+A9}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={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer);let a=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),s=this.jsonAnchor==null?document.createElement("a"):this.jsonAnchor;if(s.download=this.modelTopologyFileName,s.href=a,await o5(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await o5(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:qu(e)}}}};nl.URL_SCHEME="downloads://";var y9=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.files=e}async load(){let e=this.files[0],t=this.files.slice(1);return new Promise((n,r)=>{let a=new FileReader;a.onload=s=>{let i=JSON.parse(s.target.result),o=i.modelTopology;if(o==null){r(new Error(`modelTopology field is missing from file ${e.name}`));return}t.length===0&&n({modelTopology:o});let l=i.weightsManifest;if(l==null){r(new Error(`weightManifest field is missing from file ${e.name}`));return}let c;try{c=this.checkManifestAndWeightFiles(l,t)}catch(p){r(p);return}let u=[],h=[],d=[];l.forEach(p=>{p.paths.forEach(f=>{h.push(f),d.push(null)}),u.push(...p.weights)}),l.forEach(p=>{p.paths.forEach(f=>{let m=new FileReader;m.onload=A=>{let y=A.target.result,g=h.indexOf(f);if(d[g]=y,d.indexOf(null)===-1){let w={modelTopology:o,weightSpecs:u,weightData:wm(d),format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy};i.signature!=null&&(w.signature=i.signature),i.userDefinedMetadata!=null&&(w.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(w.modelInitializer=i.modelInitializer),n(w)}},m.onerror=A=>r(`Failed to weights data from file of path '${f}'.`),m.readAsArrayBuffer(c[f])})})},a.onerror=s=>r(`Failed to read model topology and weights manifest JSON from file '${e.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(e)})}checkManifestAndWeightFiles(e,t){let n=[],r=t.map(s=>Q0(s.name)),a={};for(let s of e)s.paths.forEach(i=>{let o=Q0(i);if(n.indexOf(o)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${o}'`);if(n.push(o),r.indexOf(o)===-1)throw new Error(`Weight file with basename '${o}' is not provided.`);a[i]=t[r.indexOf(o)]});if(n.length!==t.length)throw new Error(`Mismatch in the number of files in weights manifest (${n.length}) and the number of weight files provided (${t.length}).`);return a}},x9=e=>Q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(nl.URL_SCHEME)?g9(e.slice(nl.URL_SCHEME.length)):null;Ct.registerSaveRouter(x9);function g9(e="model"){return new nl(e)}function u9(e){return new y9(e)}function l5(e,t,n,r){i(e),n=n==null?0:n,r=r==null?1:r,o(n,r);let a=0,s=l=>(l.then(c=>{let u=n+ ++a/e.length*(r-n);return t(u),c}),l);function i(l){M(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,c){M(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),M(c>=0&&c<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${c}`),M(c>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${c}`)}return Promise.all(e.map(s))}async function u5(e,t){t==null&&(t={});let n=t.fetchFunc==null?Q().platform.fetch:t.fetchFunc,r=e.map(c=>n(c,t.requestInit,{isBinary:!0})),a=0,s=.5,i=(t.onProgress==null?await Promise.all(r):await l5(r,t.onProgress,a,s)).map(c=>c.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await l5(i,t.onProgress,o,l)}async function c9(e,t="",n,r){return i5(a=>u5(a,{requestInit:r}))(e,t,n)}function i5(e){return async(t,n="",r)=>{let a=t.map(()=>!1),s={},i=r!=null?r.map(()=>!1):[],o=[];if(t.forEach((p,f)=>{let m=0;p.weights.forEach(A=>{let y="quantization"in A?A.quantization.dtype:A.dtype,g=gm[y]*Lt(A.shape),w=()=>{a[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:A,groupOffset:m,sizeBytes:g})};r!=null?r.forEach((x,_)=>{x===A.name&&(w(),i[_]=!0)}):w(),o.push(A.name),m+=g})}),!i.every(p=>p)){let p=r.filter((f,m)=>!i[m]);throw new Error(`Could not find weights in manifest with names: ${p.join(", ")}.
|
|
Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=a.reduce((p,f,m)=>(f&&p.push(m),p),[]),c=[];l.forEach(p=>{t[p].paths.forEach(f=>{let m=n+(n.endsWith("/")?"":"/")+f;c.push(m)})});let u=await e(c),h={},d=0;return l.forEach(p=>{let f=t[p].paths.length,m=0;for(let w=0;w<f;w++)m+=u[d+w].byteLength;let A=new ArrayBuffer(m),y=new Uint8Array(A),g=0;for(let w=0;w<f;w++){let x=new Uint8Array(u[d+w]);y.set(x,g),g+=x.byteLength}s[p].forEach(w=>{let x=A.slice(w.groupOffset,w.groupOffset+w.sizeBytes),_=J0(x,[w.manifestEntry]);for(let b in _)h[b]=_[b]}),d+=f}),h}}var w9="application/octet-stream",_9="application/json",Sm=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?(M(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=Q().platform.fetch,M(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&M(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={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer),t.body.append("model.json",new Blob([JSON.stringify(r)],{type:_9}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:w9}),"model.weights.bin");let a=await this.fetch(this.path,t);if(a.ok)return{modelArtifactsInfo:qu(e),responses:[a]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${a.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(p){let f=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?f+=" 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.":f+=" Please make sure the server is serving valid JSON for this request.",new Error(f)}let n=t.modelTopology,r=t.weightsManifest,a=t.generatedBy,s=t.convertedBy,i=t.format,o=t.signature,l=t.userDefinedMetadata;if(n==null&&r==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);let c,u;r!=null&&([c,u]=await this.loadWeights(r));let h={modelTopology:n,weightSpecs:c,weightData:u,generatedBy:a,convertedBy:s,format:i};o!=null&&(h.signature=o),l!=null&&(h.userDefinedMetadata=l);let d=t.modelInitializer;return d&&(h.modelInitializer=d),h}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=b9(t),a=this.weightPathPrefix||n,s=[];for(let c of e)s.push(...c.weights);let i=[],o=[];for(let c of e)for(let u of c.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(u)):i.push(a+u+r);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await u5(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,wm(l)]}};Sm.URL_SCHEME_REGEX=/^https?:\/\//;function b9(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),a=n>t?e.substring(n):"";return[r+"/",a]}function Im(e){return e.match(Sm.URL_SCHEME_REGEX)!=null}var c5=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>Im(r)):n=Im(e),n)return Nm(e,t)}return null};Ct.registerSaveRouter(c5);Ct.registerLoadRouter(c5);function Nm(e,t){return new Sm(e,t)}function h9(e,t){return Nm(e,t)}var Tm=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},v9=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function d9(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new Tm(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 Tm({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 Tm({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function p9(e){return new v9(e)}var ig={};Pe(ig,{confusionMatrix:()=>k9});function I9(e,t,n=!1,r=!1){let a=R(e,"a","matMul"),s=R(t,"b","matMul");[a,s]=Nt(a,s);let i={a,b:s},o={transposeA:n,transposeB:r};return L.runKernel(es,i,o)}var Ke=P({matMul_:I9});function N9(e,t,n=1,r=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:R(e,"indices","oneHot","int32")},s={depth:t,onValue:n,offValue:r};return L.runKernel(bs,a,s)}var Lo=P({oneHot_:N9});function S9(e,t){let n=R(e,"x","transpose");if(t==null&&(t=n.shape.map((s,i)=>i).reverse()),M(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(s=>{M(s>=0&&s<n.rank,()=>`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},a={perm:t};return L.runKernel(Ws,r,a)}var st=P({transpose_:S9});function T9(e,t,n){let r=R(e,"labels","confusionMatrix"),a=R(t,"predictions","confusionMatrix");M(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),M(r.rank===1,()=>`Expected the rank of labels to be 1, but got ${r.rank}`),M(a.rank===1,()=>`Expected the rank of predictions to be 1, but got ${a.rank}`),M(r.shape[0]===a.shape[0],()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${a.shape[0]}. Labels and predictions should have the same number of elements.`),M(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=Lo(ge(r,"int32"),n),i=Lo(ge(a,"int32"),n),o=st(s),l=Ke(o,i);return ge(l,"int32")}var k9=P({confusionMatrix_:T9}),Kl={};Pe(Kl,{fromPixels:()=>C9,toPixels:()=>E9});function ff(e,t,n){if(Ks(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let r=zr(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 Sa(e,t,r,n)}var rl;function R9(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,a=!1,s=!1,i=!1,o=!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)a=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!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(a){let d=2;if(a&&e.readyState<d)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.")}if(mf(Hh,L.backendName)!=null){let d={pixels:e},p={numChannels:t};return L.runKernel(Hh,d,p)}let[l,c]=a?[e.videoWidth,e.videoHeight]:[e.width,e.height],u;i?u=e.getContext("2d").getImageData(0,0,l,c).data:r||n?u=e.data:(s||a||o)&&(rl==null&&(rl=document.createElement("canvas").getContext("2d")),rl.canvas.width=l,rl.canvas.height=c,rl.drawImage(e,0,0,l,c),u=rl.getImageData(0,0,l,c).data);let h;if(t===4)h=new Int32Array(u);else{let d=l*c;h=new Int32Array(d*t);for(let p=0;p<d;p++)for(let f=0;f<t;++f)h[p*t+f]=u[p*4+f]}return ff(h,[c,l,t],"int32")}async function E9(e,t){let n=R(e,"img","toPixels");if(!(e instanceof j)){let c=n;n=ge(c,"int32"),c.dispose()}if(n.rank!==2&&n.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${n.rank}.`);let[r,a]=n.shape.slice(0,2),s=n.rank===2?1:n.shape[2];if(s>4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let i=await n.data(),o=n.dtype==="float32"?255:1,l=new Uint8ClampedArray(a*r*4);for(let c=0;c<r*a;++c){let u=[0,0,0,255];for(let d=0;d<s;d++){let p=i[c*s+d];if(n.dtype==="float32"){if(p<0||p>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${p}.`)}else if(n.dtype==="int32"&&(p<0||p>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${p}.`);s===1?(u[0]=p*o,u[1]=p*o,u[2]=p*o):u[d]=p*o}let h=c*4;l[h+0]=Math.round(u[0]),l[h+1]=Math.round(u[1]),l[h+2]=Math.round(u[2]),l[h+3]=Math.round(u[3])}if(t!=null){t.width=a,t.height=r;let c=t.getContext("2d"),u=new ImageData(l,a,r);c.putImageData(u,0,0)}return n!==e&&n.dispose(),l}var C9=P({fromPixels_:R9}),gf={};Pe(gf,{prepareAndValidate:()=>h5});function h5(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(Lt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let a=t.shape,s=a[a.length-1],i=1;for(let h=0;h<a.length-1;++h)i*=a[h];let o=e.shape,l=a.slice();l.pop();let c=1;for(let h=s;h<n;++h)c*=o[h],l.push(o[h]);let u=[...Zo(e.shape).map(h=>h/c),1].slice(0,s);return[l,i,c,u]}var xf={};Pe(xf,{calculateShapes:()=>d5,validateInput:()=>Cm,validateUpdateShape:()=>Em});function Em(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,a=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${a}.`;if(n.rank<a)throw new Error(s+` update.rank < ${a}. `);if(e.length<r+(n.rank-a))throw new Error(s+` Output shape length < ${r+(n.rank-a)}`);if(n.rank!==a+e.length-r)throw new Error(s+` update.rank != ${a+e.length-r}`);for(let i=0;i<a;++i)if(n.shape[i]!==t.shape[i])throw new Error(s+` updates.shape[${i}] (${n.shape[i]}) != indices.shape[${i}] (${t.shape[i]}).`);for(let i=0;i<n.rank-a;++i)if(n.shape[i+a]!==e[i+r])throw new Error(s+` updates.shape[${i+a}] (${n.shape[i+a]}) != shape[${i+a}] (${e[i+a]})`)}function Cm(e,t,n){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(e.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${e.rank}.`);if(t.dtype!=="int32")throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(n.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${n}`);if(n.length===0){if(t.size===0)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(e.size===0)throw new Error(`Updates specified for empty output. updates shape: ${e.shape}`)}Em(n,t,e)}function d5(e,t,n){let r=t.shape.length,a=r>1?t.shape[r-1]:1,s=n.length,i=1;for(let h=a;h<s;++h)i*=n[h];let o=a<1?1:a,l=Lt(t.shape)/o,c=[...Zo(n.slice(0,a)),1],u=Lt(n);return{sliceRank:a,numUpdates:l,sliceSize:i,strides:c,outputSize:u}}var on={};Pe(on,{assertParamsValid:()=>F9,computeFlatOffset:()=>$9,computeOutShape:()=>p5,getNormalizedAxes:()=>m5,isSliceContinous:()=>M9,maskToAxes:()=>Od,parseSliceParams:()=>_5,sliceInfo:()=>D9,startForAxis:()=>x5,startIndicesWithElidedDims:()=>A5,stopForAxis:()=>w5,stopIndicesWithElidedDims:()=>y5,stridesForAxis:()=>g5,stridesWithElidedDims:()=>f5});function F9(e,t,n){let r=e.shape.length;M(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),M(r===n.length,()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`);for(let a=0;a<r;++a)M(t[a]+n[a]<=e.shape[a],()=>`Error in slice${r}D: begin[${a}] + size[${a}] (${t[a]+n[a]}) would overflow input.shape[${a}] (${e.shape[a]})`)}function Od(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function p5(e,t,n){let r=[];for(let a=0;a<e.length;a++)r[a]=Math.ceil((t[a]-e[a])/n[a]);return r}function f5(e,t,n,r){let a=[...e];for(let s=a.length;s<r.length;s++)a.push(1);for(let s=0;s<n;s++)s===0?a[t]=1:(a.splice(t,0,1),a.pop());return a}function b5(e,t,n){return n<=e?n:n-(t-1)}function v5(e,t){let n=[];for(let r=0;r<e;r++)n.push(t+r);return n}function m5(e,t,n,r,a,s,i,o,l){let c=e.length,u=new Array(c),h=new Array(c),d=new Array(c);if(t.length&&n>0){let p=t[0],f=n+1;u=A5(i,p,f,r,e),h=y5(o,p,f,a,e),d=f5(s,p,f,e)}else for(let p=0;p<c;p++)u[p]=x5(i,r,s,e,p,l),h[p]=w5(o,a,s,e,p,l),d[p]=g5(s,p,l);return{begin:u,end:h,strides:d}}function A5(e,t,n,r,a){let s=[...a],i=v5(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=0;else{let l=b5(t,n,o),c=r[l];e&1<<l&&(c=0),s[o]=c}return s}function y5(e,t,n,r,a){let s=[...a],i=v5(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=b5(t,n,o),c=r[l];e&1<<l&&(c=Number.MAX_SAFE_INTEGER),s[o]=c}for(let o=0;o<s.length;o++){let l=a[o];s[o]<0&&(s[o]+=l),s[o]=Pu(0,s[o],a[o])}return s}function g5(e,t,n){let r=e[t];return(n&1<<t||r==null)&&(r=1),r}function x5(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||i==null)&&(o>0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),i=Pu(0,i,l-1),i}function w5(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||i==null)&&(o>0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),o>0?i=Pu(0,i,l):i=Pu(-1,i,l-1),i}function M9(e,t,n){let r=n.length;for(let a=0;a<n.length;a++)if(n[a]>1){r=a;break}for(let a=r+1;a<n.length;a++)if(t[a]>0||n[a]!==e[a])return!1;return!0}function $9(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r<e.length-1;r++)n+=e[r]*t[r];return n}function _5(e,t,n){let r,a=e.shape.length;typeof t=="number"?r=[t,...new Array(a-1).fill(0)]:t.length<a?r=t.concat(new Array(a-t.length).fill(0)):r=t.slice(),r.forEach(i=>{M(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return n==null?s=new Array(a).fill(-1):typeof n=="number"?s=[n,...new Array(a-1).fill(-1)]:n.length<a?s=n.concat(new Array(a-n.length).fill(-1)):s=n,s=s.map((i,o)=>i>=0?i:(M(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-r[o])),[r,s]}function D9(e,t,n,r,a,s,i,o,l){let c=t.slice(),u=n.slice(),h=r;r==null&&(h=new Array(c.length));let d=Od(i);if(d.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(i!==0&&o!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(i!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let p=e.length-c.length,f=Od(o),m=e.slice();f.forEach(b=>{c[b]=0,u[b]=1,m.splice(b,0,1)});let{begin:A,end:y,strides:g}=m5(m,d,p,c,u,h,a,s,i);c=A,u=y,h=g;let w=Od(l);w.forEach(b=>{u[b]=c[b]+1,h[b]=1});let x=p5(c,u,h),_=x.filter((b,T)=>w.indexOf(T)===-1);return{nonStrided:h.every(b=>b===1),$begin:c,$end:u,$strides:h,size:x,newShape:m,outShape:_}}var se={};Pe(se,{Serializable:()=>k5,SerializationMap:()=>ei,registerClass:()=>Ea});var k5=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},ei=class{constructor(){this.classNameMap={}}static getMap(){return ei.instance==null&&(ei.instance=new ei),ei.instance}static register(e){ei.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Ea(e){M(e.className!=null,()=>"Class being registered does not have the static className property defined."),M(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),M(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),ei.register(e)}var og={};Pe(og,{TEST_EPSILON_FLOAT16:()=>I5,encodeStrings:()=>N5,expectArrayBuffersEqual:()=>B9,expectArraysClose:()=>O9,expectArraysEqual:()=>P9,expectNumbersClose:()=>L9,expectPromiseToFail:()=>z9,expectValuesInRange:()=>W9,testEpsilon:()=>Rm});var V9=.001,I5=.1;function O9(e,t,n){return n==null&&(n=Rm()),Fm(e,t,(r,a)=>Mm(r,a,n))}function Rm(){return L.backend.floatPrecision()===32?V9:I5}function Fm(e,t,n){let r=!0;if((rn(e)||rn(t))&&(r=!1),rn(e)&&rn(t)&&(r=!0),r){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=zr(e),o=zr(t);if(!aa(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let a=rn(e)?e:Zs(e),s=rn(t)?t:Zs(t);if(a.length!==s.length)throw new Error(`Arrays have different lengths actual: ${a.length} vs expected: ${s.length}.
|
|
Actual: ${a}.
|
|
Expected: ${s}.`);for(let i=0;i<s.length;++i){let o=a[i],l=s[i];if(!n(o,l))throw new Error(`Arrays differ: actual[${i}] = ${o}, expected[${i}] = ${l}.
|
|
Actual: ${a}.
|
|
Expected: ${s}.`)}}function z9(e,t){e().then(()=>t.fail(),()=>t())}function P9(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Ia(e)||Ia(e[0])||Ia(t)||Ia(t[0])?Fm(e,n,(r,a)=>r==a):Fm(e,t,(r,a)=>Mm(r,a,0))}function L9(e,t,n){if(n==null&&(n=Rm()),!Mm(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`)}function Mm(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function W9(e,t,n){for(let r=0;r<e.length;r++)if(e[r]<t||e[r]>n)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function B9(e,t){expect(new Float32Array(e)).toEqual(new Float32Array(t))}function N5(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?N5(n):e[t]=Bu(n)}return e}var lg="2.8.3";function ug(){Q().set("PROD",!0)}function c4(){Q().set("DEBUG",!0)}function h4(){Q().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Mt(e){Q().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}_k(Mt);function d4(){L.disposeVariables()}function Bn(){return L}function qh(){return L.memory()}function ql(e){return L.profile(e)}function U(e,t){return L.tidy(e,t)}function $e(e){pm(e).forEach(t=>t.dispose())}function jt(e){return L.keep(e)}function p4(e){return L.time(e)}function cg(e){return L.setBackend(e)}function hg(){return L.ready()}function Xh(){return L.backendName}function f4(e){L.removeBackend(e)}function dg(e){return L.findBackend(e)}function m4(e){return L.findBackendFactory(e)}function Au(e,t,n=1){return L.registerBackend(e,t,n)}function wf(){return L.backend}function A4(e,t){Q().setPlatform(e,t)}function U9(e,t){let n=R(e,"a","add"),r=R(t,"b","add");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(Aa,a)}var oe=P({add_:U9});function H9(e,t){let n=R(e,"a","floorDiv"),r=R(t,"b","floorDiv");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(cs,a)}var Kh=P({floorDiv_:H9});function j9(e,t){let n=R(e,"a","div"),r=R(t,"b","div");if([n,r]=Nt(n,r),n.dtype==="int32"&&r.dtype==="int32")return Kh(n,r);let a={a:n,b:r},s={};return L.runKernel(os,a,s)}var Te=P({div_:j9});function G9(e,t){let n=R(e,"a","mul"),r=R(t,"b","mul");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(_s,a)}var W=P({mul_:G9});function q9(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return L.runKernel(eu,n)}else{let n={x:t};return L.runKernel(Di,n)}}var Pt=P({abs_:q9});function X9(e){let t={x:R(e,"x","acos")};return L.runKernel(Oi,t)}var _f=P({acos_:X9});function K9(e){let t={x:R(e,"x","acosh")};return L.runKernel(zi,t)}var bf=P({acosh_:K9});function Z9(e){M(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),M(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((a,s)=>R(a,`tensors${s}`,"addN")),n=t[0];t.forEach(a=>{if(a.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(a=>{if(!aa(a.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return L.runKernel(Ja,r)}var hh=P({addN_:Z9});function J9(e,t=null,n=!1){let r={x:R(e,"x","all","bool")},a={axis:t,keepDims:n};return L.runKernel(fh,r,a)}var Zh=P({all_:J9});function Y9(e,t=null,n=!1){let r={x:R(e,"x","any","bool")},a={axis:t,keepDims:n};return L.runKernel(mh,r,a)}var yu=P({any_:Y9});function Q9(e,t=0){let n={x:R(e,"x","argMax")},r={axis:t};return L.runKernel(Ya,n,r)}var gu=P({argMax_:Q9});function eI(e,t=0){let n={x:R(e,"x","argMin")},r={axis:t};return L.runKernel(Jl,n,r)}var vf=P({argMin_:eI});function tI(e){let t={x:R(e,"x","asin")};return L.runKernel(Pi,t)}var kf=P({asin_:tI});function nI(e){let t={x:R(e,"x","asinh")};return L.runKernel(Li,t)}var If=P({asinh_:nI});function rI(e){let t={x:R(e,"x","atan")};return L.runKernel(Wi,t)}var Nf=P({atan_:rI});function aI(e,t){let n=R(e,"a","atan2"),r=R(t,"b","atan2");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(Vi,a)}var Sf=P({atan2_:aI});function sI(e){let t={x:R(e,"x","atanh")};return L.runKernel(Bi,t)}var Tf=P({atanh_:sI});function iI(e,t,n,r,a="NHWC",s){let i=e[3],o=[...t,i],l=S5(a);return Xu(e,o,n,s,r,null,null,l)}function T5(e,t,n,r,a,s,i="channelsLast"){let[o,l]=zd(t),c;if(i==="channelsLast")c=[o,l,e[3],e[3]];else if(i==="channelsFirst")c=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Xu(e,c,n,r,a,s,!1,i)}function oI(e,t,n,r,a,s,i="NDHWC"){let[o,l,c]=$m(t),u,h;if(i==="NDHWC")h="channelsLast",u=[o,l,c,e[4],e[4]];else if(i==="NCDHW")h="channelsFirst",u=[o,l,c,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return E5(e,u,n,r,a,!1,h,s)}function Xu(e,t,n,r,a,s,i=!1,o="channelsLast"){let[l,c,u,h]=[-1,-1,-1,-1];if(o==="channelsLast")[l,c,u,h]=e;else if(o==="channelsFirst")[l,h,c,u]=e;else throw new Error(`Unknown dataFormat ${o}`);let[d,p,,f]=t,[m,A]=zd(n),[y,g]=zd(r),w=al(d,y),x=al(p,g),{padInfo:_,outHeight:b,outWidth:T}=lI(a,c,u,m,A,w,x,s,o),S=i?f*h:f,N;return o==="channelsFirst"?N=[l,S,b,T]:o==="channelsLast"&&(N=[l,b,T,S]),{batchSize:l,dataFormat:o,inHeight:c,inWidth:u,inChannels:h,outHeight:b,outWidth:T,outChannels:S,padInfo:_,strideHeight:m,strideWidth:A,filterHeight:d,filterWidth:p,effectiveFilterHeight:w,effectiveFilterWidth:x,dilationHeight:y,dilationWidth:g,inShape:e,outShape:N,filterShape:t}}function E5(e,t,n,r,a,s=!1,i="channelsLast",o){let[l,c,u,h,d]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,c,u,h,d]=e;else if(i==="channelsFirst")[l,d,c,u,h]=e;else throw new Error(`Unknown dataFormat ${i}`);let[p,f,m,,A]=t,[y,g,w]=$m(n),[x,_,b]=$m(r),T=al(p,x),S=al(f,_),N=al(m,b),{padInfo:C,outDepth:$,outHeight:D,outWidth:O}=uI(a,c,u,h,y,g,w,T,S,N,o),B=s?A*d:A,H;return i==="channelsFirst"?H=[l,B,$,D,O]:i==="channelsLast"&&(H=[l,$,D,O,B]),{batchSize:l,dataFormat:i,inDepth:c,inHeight:u,inWidth:h,inChannels:d,outDepth:$,outHeight:D,outWidth:O,outChannels:B,padInfo:C,strideDepth:y,strideHeight:g,strideWidth:w,filterDepth:p,filterHeight:f,filterWidth:m,effectiveFilterDepth:T,effectiveFilterHeight:S,effectiveFilterWidth:N,dilationDepth:x,dilationHeight:_,dilationWidth:b,inShape:e,outShape:H,filterShape:t}}function cI(e,t,n,r,a){r==null&&(r=Dm(e,t,n));let s=e[0],i=e[1],o=ti((s-t+2*r)/n+1,a),l=ti((i-t+2*r)/n+1,a);return[o,l]}function hI(e,t,n,r,a,s){a==null&&(a=Dm(e,t,r));let i=e[0],o=e[1],l=e[2],c=ti((i-t+2*a)/r+1,s),u=ti((o-t+2*a)/r+1,s),h=ti((l-t+2*a)/r+1,s);return[c,u,h,n]}function Dm(e,t,n,r=1){let a=al(t,r);return Math.floor((e[0]*(n-1)-n+a)/2)}function zd(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function $m(e){return typeof e=="number"?[e,e,e]:e}function al(e,t){return t<=1?e:e+(e-1)*(t-1)}function lI(e,t,n,r,a,s,i,o,l){let c,u,h;if(typeof e=="number"){c={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let d=cI([t,n],s,r,e,o);u=d[0],h=d[1]}else if(e==="same"){u=Math.ceil(t/r),h=Math.ceil(n/a);let d=Math.max(0,(u-1)*r+s-t),p=Math.max(0,(h-1)*a+i-n),f=Math.floor(d/2),m=d-f,A=Math.floor(p/2),y=p-A;c={top:f,bottom:m,left:A,right:y,type:"SAME"}}else if(e==="valid")c={top:0,bottom:0,left:0,right:0,type:"VALID"},u=Math.ceil((t-s+1)/r),h=Math.ceil((n-i+1)/a);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],p=l==="channelsLast"?e[1][1]:e[2][1],f=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];c={top:d,bottom:p,left:f,right:m,type:d===0&&p===0&&f===0&&m===0?"VALID":"EXPLICIT"},u=ti((t-s+d+p)/r+1,o),h=ti((n-i+f+m)/a+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outHeight:u,outWidth:h}}function uI(e,t,n,r,a,s,i,o,l,c,u){let h,d,p,f;if(typeof e=="number"){h={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let m=hI([t,n,r,1],o,1,a,e,u);d=m[0],p=m[1],f=m[2]}else if(e==="same"){d=Math.ceil(t/a),p=Math.ceil(n/s),f=Math.ceil(r/i);let m=(d-1)*a+o-t,A=(p-1)*s+l-n,y=(f-1)*i+c-r,g=Math.floor(m/2),w=m-g,x=Math.floor(A/2),_=A-x,b=Math.floor(y/2),T=y-b;h={top:x,bottom:_,left:b,right:T,front:g,back:w,type:"SAME"}}else if(e==="valid")h={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-o+1)/a),p=Math.ceil((n-l+1)/s),f=Math.ceil((r-c+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:h,outDepth:d,outHeight:p,outWidth:f}}function ti(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 Ca(e){let[t,n,r]=zd(e);return t===1&&n===1&&r===1}function Tn(e,t){return Ca(e)||Ca(t)}function S5(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function dI(e,t){let n={x:R(e,"x","reshape","string_or_numeric")},r={shape:t};return L.runKernel(bo,n,r)}var K=P({reshape_:dI});function pI(e,t,n,r,a){let s=R(e,"x","avgPool","float32"),i=1;M(Tn(n,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=K(s,[1,s.shape[0],s.shape[1],s.shape[2]])),M(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),a!=null&&M(qt(r),()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let c={x:o},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},h=L.runKernel(Qa,c,u);return h=ge(h,s.dtype),l?K(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var xu=P({avgPool_:pI});function fI(e,t,n,r,a,s="NDHWC",i){i==null?i=[1,1,1]:Mt("dilations is deprecated, this field will be gone in v3.0.0.");let o=R(e,"x","avgPool3d","float32"),l=o,c=!1;o.rank===4&&(c=!0,l=K(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),M(l.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${l.rank}.`),M(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),M(Tn(n,i),()=>`Error in avgPool3d: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&M(qt(r),()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let u={x:l},h={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s,dilations:i},d=L.runKernel(Yl,u,h);return d=ge(d,l.dtype),c?K(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Ef=P({avgPool3d_:fI});function mI(e,t=0){M(e.length>=1,()=>"Pass at least one tensor to concat");let n=Gu(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
|
|
with dtype ${s.dtype}. `)}),n.length===1)return Tr(n[0]);let r=n,a={axis:t};return L.runKernel(Hi,r,a)}var dt=P({concat_:mI});function AI(e){let t={x:R(e,"x","sigmoid")};return L.runKernel(Ms,t)}var Qn=P({sigmoid_:AI});function yI(e,t,n){let r=R(e,"x","slice","string_or_numeric");if(r.rank===0)throw new Error("Slicing scalar is not possible");let a={x:r},s={begin:t,size:n};return L.runKernel(No,a,s)}var Me=P({slice_:yI});function gI(e){let t={x:R(e,"x","tanh")};return L.runKernel(Ls,t)}var Wo=P({tanh_:gI});function xI(e,t,n,r,a,s){let i=R(e,"forgetBias","basicLSTMCell"),o=R(t,"lstmKernel","basicLSTMCell"),l=R(n,"lstmBias","basicLSTMCell"),c=R(r,"data","basicLSTMCell"),u=R(a,"c","basicLSTMCell"),h=R(s,"h","basicLSTMCell"),d=dt([c,h],1),p=Ke(d,o),f=oe(p,l),m=f.shape[0],A=f.shape[1]/4,y=[m,A],g=Me(f,[0,0],y),w=Me(f,[0,A],y),x=Me(f,[0,A*2],y),_=Me(f,[0,A*3],y),b=oe(W(Qn(g),Wo(w)),W(u,Qn(oe(i,x)))),T=W(Wo(b),Qn(_));return[b,T]}var y4=P({basicLSTMCell_:xI});function wI(e,t,n){let r=R(e,"x","batchToSpaceND"),a=t.reduce((o,l)=>o*l);M(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),M(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),M(r.shape[0]%a==0,()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${a}`);let s={x:r},i={blockShape:t,crops:n};return L.runKernel(Ql,s,i)}var wu=P({batchToSpaceND_:wI});function _I(e){let t;return e.rank===0||e.rank===1?t=K(e,[1,1,1,e.size]):e.rank===2?t=K(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=K(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function bI(e,t,n,r,a,s){s==null&&(s=.001);let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;r!=null&&(u=R(r,"offset","batchNorm")),M(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),M(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),M(c==null||o.rank===c.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let h={x:_I(i),scale:c,offset:u,mean:o,variance:l},d={varianceEpsilon:s},p=L.runKernel(hs,h,d);return K(p,i.shape)}var Hs=P({batchNorm_:bI});function vI(e,t,n,r,a,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;return r!=null&&(u=R(r,"offset","batchNorm")),M(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),M(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),M(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),c!=null&&M(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${c.rank}.`),u!=null&&M(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${u.rank}.`),Hs(i,o,l,u,c,s)}var pg=P({batchNorm2d_:vI});function kI(e,t,n,r,a,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;return r!=null&&(u=R(r,"offset","batchNorm")),M(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),M(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),M(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),c!=null&&M(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${c.rank}.`),u!=null&&M(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${u.rank}.`),Hs(i,o,l,u,c,s)}var fg=P({batchNorm3d_:kI});function II(e,t,n,r,a,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;return r!=null&&(u=R(r,"offset","batchNorm")),M(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),M(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),M(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),c!=null&&M(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${c.rank}.`),u!=null&&M(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${u.rank}.`),Hs(i,o,l,u,c,s)}var mg=P({batchNorm4d_:II});function NI(e,t,n){let r=R(e,"x","bincount"),a=R(t,"weights","bincount");M(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),M(n>=0,()=>`size must be non-negative, but got ${n}.`),M(a.size===r.size||a.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${a.shape}.`);let s={x:r,weights:a},i={size:n};return L.runKernel(gh,s,i)}var Ag=P({bincount_:NI});function SI(e,t){let n=R(e,"broadcastTo","x"),r=n.shape;if(t.some(l=>!(l>0)||l%1!=0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let l=n.shape.slice();for(;l.length<t.length;)l.unshift(1);n=K(n,l)}let a=n.shape,s=Array.from(t);for(let l=t.length-1;l>=0;l--)if(a[l]===t[l])s[l]=1;else if(n.shape[l]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(s.map((l,c)=>l>1?c:-1).filter(l=>l>=0).length===0)return Tr(n);let i={x:n},o={reps:s};return L.runKernel(ga,i,o)}var _u=P({broadcastTo_:SI});function TI(e){let t={x:R(e,"x","ceil")};return L.runKernel(Ui,t)}var Cf=P({ceil_:TI});function EI(e,t,n){let r=R(e,"x","clipByValue");M(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let a={x:r},s={clipValueMin:t,clipValueMax:n};return L.runKernel(ya,a,s)}var mn=P({clipByValue_:EI});function CI(e){return dt(e,0)}var yg=P({concat1d_:CI});function RI(e,t){return dt(e,t)}var jl=P({concat2d_:RI});function FI(e,t){return dt(e,t)}var gg=P({concat3d_:FI});function MI(e,t){return dt(e,t)}var xg=P({concat4d_:MI});function $I(e,t,n,r,a="NHWC",s=[1,1],i){let o=R(e,"x","conv2d"),l=R(t,"filter","conv2d"),c=o,u=!1;o.rank===3&&(u=!0,c=K(o,[1,o.shape[0],o.shape[1],o.shape[2]])),M(c.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${c.rank}.`),M(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),i!=null&&M(qt(r),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`);let h=a==="NHWC"?c.shape[3]:c.shape[1];M(h===l.shape[2],()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${l.shape[2]}.`),M(Tn(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let d={x:c,filter:l},p={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},f=L.runKernel(ns,d,p);return u?K(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Yr=P({conv2d_:$I});function DI(e,t,n,r,a="NWC",s=1,i){let o=R(e,"x","conv1d"),l=R(t,"filter","conv1d"),c=o,u=!1;o.rank===2&&(u=!0,c=K(o,[1,o.shape[0],o.shape[1]])),M(c.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${c.rank}.`),M(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),i!=null&&M(qt(r),()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`),M(c.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${c.shape[2]}) must match input depth for filter ${l.shape[1]}.`),M(Tn(n,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`),M(a==="NWC",()=>`Error in conv1d: got dataFormat of ${a} but only NWC is currently supported.`);let h=K(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=K(c,[c.shape[0],1,c.shape[1],c.shape[2]]),p=Yr(d,h,[1,n],r,"NHWC",[1,s],i);return u?K(p,[p.shape[2],p.shape[3]]):K(p,[p.shape[0],p.shape[2],p.shape[3]])}var Jh=P({conv1d_:DI});function OI(e,t,n,r,a,s="NHWC",i){M(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,c=!1;t.rank===3&&(c=!0,l=K(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),M(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),M(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),M(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let u=s==="NHWC"?o[3]:o[1],h=s==="NHWC"?l.shape[3]:l.shape[1];M(u===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${u}) must match input depth for filter ${n.shape[2]}.`),M(h===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${h}) must match output depth for filter ${n.shape[3]}.`),i!=null&&M(qt(a),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`);let d={dy:l,filter:n},p={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,inputShape:o},f=L.runKernel(rs,d,p);return c?K(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Om=P({conv2DBackpropInput_:OI});function zI(e,t,n,r,a,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Om(n,i,o,r,a,"NHWC",s)}var Yh=P({conv2dTranspose_:zI});function PI(e,t,n,r,a="NDHWC",s=[1,1,1]){let i=R(e,"x","conv3d"),o=R(t,"filter","conv3d"),l=i,c=!1;i.rank===4&&(c=!0,l=K(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),M(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),M(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),M(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),M(Tn(n,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),M(a==="NDHWC",()=>`Error in conv3d: got dataFormat of ${a} but only NDHWC is currently supported.`);let u={x:l,filter:o},h={strides:n,pad:r,dataFormat:a,dilations:s},d=L.runKernel(tu,u,h);return c?K(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Rf=P({conv3d_:PI});function LI(e,t,n,r,a){M(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=K(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],c=i.shape[4];M(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),M(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),M(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),M(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),M(c===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${c}) must match output depth for filter ${n.shape[4]}.`);let u={dy:i,filter:n},h={pad:a,strides:r,inputShape:s},d=L.runKernel(bh,u,h);return o?K(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var C5=P({conv3DBackpropInput_:LI});function WI(e,t,n,r,a){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return C5(n,s,i,r,a)}var g4=P({conv3dTranspose_:WI});function BI(e){let t={x:R(e,"x","cos")};return L.runKernel(as,t)}var bu=P({cos_:BI});function VI(e){let t={x:R(e,"x","cosh")};return L.runKernel(ji,t)}var Qh=P({cosh_:VI});function UI(e,t=0,n=!1,r=!1){let a={x:R(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:r};return L.runKernel(ss,a,s)}var ed=P({cumsum_:UI});function HI(e,t,n,r=!1){let a=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");M(a.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${a.dtype}`),M(a.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${a.rank}.`),M(n>=0,()=>`size must be non-negative, but got ${n}.`),M(s.size===a.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${a.shape}, weights shape: ${s.shape}.`);let i={x:a,weights:s},o={size:n,binaryOutput:r};return L.runKernel(vh,i,o)}var wg=P({denseBincount_:HI});function jI(e,t,n="NHWC"){let r=R(e,"x","depthToSpace"),a=n==="NHWC"?r.shape[1]:r.shape[2],s=n==="NHWC"?r.shape[2]:r.shape[3],i=n==="NHWC"?r.shape[3]:r.shape[1];M(a*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${a} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),M(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${s} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),M(i%(t*t)==0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${r.shape}`);let o={x:r},l={blockSize:t,dataFormat:n};return L.runKernel(qi,o,l)}var Ff=P({depthToSpace_:jI});function GI(e,t,n,r,a="NHWC",s=[1,1],i){let o=R(e,"x","depthwiseConv2d"),l=R(t,"filter","depthwiseConv2d"),c=o,u=!1;o.rank===3&&(u=!0,c=K(o,[1,o.shape[0],o.shape[1],o.shape[2]])),M(c.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${c.rank}.`),M(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),M(c.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),i!=null&&M(qt(r),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`);let h={x:c,filter:l},d={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},p=L.runKernel(is,h,d);return u?K(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var js=P({depthwiseConv2d_:GI});function qI(e){let t={x:R(e,"x","diag")};return L.runKernel(Nh,t)}var x4=P({diag_:qI});function XI(e,t,n,r,a=[1,1],s="NHWC"){let i=R(e,"x","dilation2d"),o=R(t,"filter","dilation2d");M(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),M(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),M(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,c=!1;i.rank===3&&(l=K(i,[1,i.shape[0],i.shape[1],i.shape[2]]),c=!0);let u={x:l,filter:o},h={strides:n,pad:r,dilations:a},d=L.runKernel(nu,u,h);return c?K(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Mf=P({dilation2d_:XI});function KI(e,t){let n=e.length,r=[];for(let a=0;a<n;a++){let s=n-1-a,i=e[s]||1;(t[t.length-1-a]||1)>1&&i===1&&r.unshift(s)}return r}function Wt(e,t){let n=[];for(let r=0;r<t.length;r++){let a=e[e.length-r-1],s=t.length-r-1,i=t[s];(a==null||a===1&&i>1)&&n.unshift(s)}return n}function gt(e,t){let n=[],r=Math.max(e.length,t.length);for(let a=0;a<r;a++){let s=e[e.length-a-1];s==null&&(s=1);let i=t[t.length-a-1];if(i==null&&(i=1),s===1)n.unshift(i);else if(i===1)n.unshift(s);else if(s!==i){let o=`Operands could not be broadcast together with shapes ${e} and ${t}.`;throw Error(o)}else n.unshift(s)}return n}function ZI(e,t){let n=R(e,"a","equal"),r=R(t,"b","equal");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(Zi,a)}var Qr=P({equal_:ZI});function JI(e,t,n){let r=R(t,"a","where"),a=R(n,"b","where"),s=R(e,"condition","where","bool"),i=gt(r.shape,a.shape),o=_u(r,i),l=_u(a,i);s.rank===1&&M(s.shape[0]===r.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),s.rank!==1&&at(s.shape,l.shape,"Error in where: ");let c={condition:s,t:o,e:l};return L.runKernel(ko,c)}var An=P({where_:JI});function YI(e){let t={x:R(e,"x","zerosLike")};return L.runKernel(Do,t)}var Ge=P({zerosLike_:YI});function QI(e,t){let n=R(e,"a","div"),r=R(t,"b","div");[n,r]=Nt(n,r);let a=Te(n,r),s=Ge(a),i=Qr(r,s);return An(i,s,a)}var $f=P({divNoNan_:QI});function eN(e,t){let n=R(e,"t1","dot"),r=R(t,"t2","dot");M((n.rank===1||n.rank===2)&&(r.rank===1||r.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);let a=n.rank===1?n.size:n.shape[1],s=r.rank===1?r.size:r.shape[0];if(M(a===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${a} and ${s}.`),n.rank===1&&r.rank===1){let i=K(n,[1,-1]),o=K(r,[-1,1]),l=Ke(i,o);return K(l,[])}else if(n.rank===1&&r.rank===2){let i=K(n,[1,-1]),o=K(r,[r.shape[0],r.shape[1]]),l=Ke(i,o);return K(l,[l.size])}else if(n.rank===2&&r.rank===1){let i=K(r,[-1,1]),o=Ke(n,i);return K(o,[o.size])}else{let i=K(r,[r.shape[0],r.shape[1]]);return Ke(n,i)}}var _g=P({dot_:eN});function tN(e){let t={x:R(e,"x","elu")};return L.runKernel(Xi,t)}var Bo=P({elu_:tN});function nN(e){let t=R(e,"x","erf");M(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=ge(t,"float32"));let n={x:t};return L.runKernel(Ki,n)}var Df=P({erf_:nN});function rN(e){let t={x:R(e,"x","exp")};return L.runKernel(ls,t)}var Vn=P({exp_:rN});function aN(e,t=0){let n=R(e,"x","expandDims","string_or_numeric");M(t<=n.rank,()=>"Axis must be <= rank of the tensor");let r={input:n},a={dim:t};return L.runKernel(Ji,r,a)}var Un=P({expandDims_:aN});function sN(e){let t={x:R(e,"x","expm1")};return L.runKernel(Yi,t)}var Of=P({expm1_:sN});function iN(e,t){let n=R(e,"x","tile","string_or_numeric");M(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let r={x:n},a={reps:t};return L.runKernel(ga,r,a)}var wa=P({tile_:iN});function oN(e,t,n,r="float32"){t==null&&(t=e);let a=He([e,t],r),s=e<=t?e:t;for(let o=0;o<s;++o)a.set(1,o,o);let i=K(a.toTensor(),[e,t]);if(n==null)return i;if(n.length===1)return wa(Un(i,0),[n[0],1,1]);if(n.length===2)return wa(Un(Un(i,0),0),[n[0],n[1],1,1]);if(n.length===3)return wa(Un(Un(Un(i,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}var zf=P({eye_:oN});function vu(e,t,n){let r={shape:e,value:t,dtype:n};return L.runKernel(ru,{},r)}function lN(e){let t={x:R(e,"x","floor")};return L.runKernel(us,t)}var Vo=P({floor_:lN});function uN(e,t,n=0,r=0){let a=R(e,"x","gather"),s=R(t,"indices","gather","int32"),i={x:a,indices:s},o={axis:n,batchDims:r};return L.runKernel(eo,i,o)}var Gs=P({gather_:uN});function cN(e,t){let n=R(e,"a","greater"),r=R(t,"b","greater");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(no,a)}var Hn=P({greater_:cN});function hN(e,t){let n=R(e,"a","greaterEqual"),r=R(t,"b","greaterEqual");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(ds,a)}var ea=P({greaterEqual_:hN});function dN(e){let t={input:R(e,"input","imag")};return L.runKernel(Fh,t)}var td=P({imag_:dN});function pN(e){let t={x:R(e,"x","isFinite")};return L.runKernel(ao,t)}var bg=P({isFinite_:pN});function fN(e){let t={x:R(e,"x","isInf")};return L.runKernel(so,t)}var vg=P({isInf_:fN});function mN(e){let t={x:R(e,"x","isNaN")};return L.runKernel(io,t)}var kg=P({isNaN_:mN});function AN(e,t=.2){let n={x:R(e,"x","leakyRelu")},r={alpha:t};return L.runKernel(ps,n,r)}var ku=P({leakyRelu_:AN});function yN(e,t){let n=R(e,"a","less"),r=R(t,"b","less");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(oo,a)}var Iu=P({less_:yN});function gN(e,t){let n=R(e,"a","lessEqual"),r=R(t,"b","lessEqual");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(lo,a)}var _a=P({lessEqual_:gN});function Ig(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let r={start:e,stop:t,num:n};return L.runKernel(Mh,{},r)}function xN(e,t=5,n=1,r=1,a=.5){let s=R(e,"x","localResponseNormalization");M(s.rank===4||s.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank ${s.rank}.`),M(qt(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=K(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},c={depthRadius:t,bias:n,alpha:r,beta:a},u=L.runKernel(iu,l,c);return o?K(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var Pf=P({localResponseNormalization_:xN});function wN(e){let t={x:R(e,"x","log")};return L.runKernel(fs,t)}var kn=P({log_:wN});function _N(e){let t={x:R(e,"x","log1p")};return L.runKernel(uo,t)}var nd=P({log1p_:_N});function w4(e){return M(Na(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let r=R(t,"x","tf.grad","string_or_numeric"),a=n!=null?R(n,"dy","tf.grad"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(r),[r],a);return a!=null&&at(s.shape,a.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Pd(i),i[0]})}}function _4(e){return M(Na(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{M(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let r=Gu(t,"args","tf.grads","string_or_numeric"),a=n!=null?R(n,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...r),r,a);return a!=null&&at(s.shape,a.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Pd(i),i})}}function b4(e){return M(Na(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{M(t instanceof j,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),M(n==null||n instanceof j,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:r,value:a}=L.gradients(()=>e(t),[t],n);return Pd(r),{grad:r[0],value:a}}}function v4(e){return M(Na(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{M(Array.isArray(t)&&t.every(a=>a instanceof j),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),M(n==null||n instanceof j,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let r=L.gradients(()=>e(...t),t,n);return n!=null&&at(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Pd(r.grads),r}}function Ng(e,t){M(Na(e),()=>"The f passed in variableGrads(f) must be a function"),M(t==null||Array.isArray(t)&&t.every(c=>c instanceof mu),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let c in L.registeredVariables)t.push(L.registeredVariables[c])}let r=n?t.filter(c=>!c.trainable):null,a=t.length;t=t.filter(c=>c.trainable),M(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${a} variables is trainable.`);let s=!0,{value:i,grads:o}=L.gradients(e,t,null,s);M(o.some(c=>c!=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()."),M(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((c,u)=>{o[u]!=null&&(l[c.name]=o[u])}),r!=null&&r.forEach(c=>l[c.name]=null),{value:i,grads:l}}function Er(e){return L.customGrad(e)}function Pd(e){if(e.filter(t=>t==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 bN(e){let t={x:R(e,"x","neg")};return L.runKernel(po,t)}var kt=P({neg_:bN});function vN(e){let t={x:R(e,"x","softplus")};return L.runKernel(Eo,t)}var Uo=P({softplus_:vN});function kN(e){let t=R(e,"x","logSigmoid");return Er(n=>({value:kt(Uo(kt(n))),gradFunc:r=>W(r,Qn(kt(n)))}))(t)}var Sg=P({logSigmoid_:kN});function IN(e,t=null,n=!1){let r={x:R(e,"x","max")},a={reductionIndices:t,keepDims:n};return L.runKernel(ms,r,a)}var jn=P({max_:IN});function NN(e,t){let n=R(e,"a","sub"),r=R(t,"b","sub");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(Ps,a)}var _e=P({sub_:NN});function SN(e,t=null,n=!1){let r=R(e,"x","sum");r.dtype==="bool"&&(r=ge(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return L.runKernel(Ds,a,s)}var Ce=P({sum_:SN});function TN(e,t=-1){let n=R(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 Er((r,a)=>{let s=!0,i=jn(r,t,!0),o=_e(r,i),l=_e(ge(o,"float32"),kn(Ce(Vn(o),t,s)));return a([l]),{value:l,gradFunc:(c,u)=>{let[h]=u,d=!0,p=Vn(h);return _e(c,W(Ce(c,t,d),p))}}})(n)}var rd=P({logSoftmax_:TN});function zm(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function R5(e,t,n){let r=e.length+t.length,a=[],s=0,i=0;for(let o=0;o<r;o++)n.indexOf(o)===-1?a.push(e[s++]):a.push(t[i++]);return a}function F5(e,t){let n=[],r=e.length;for(let s=0;s<r;s++)t.indexOf(s)===-1&&n.push(e[s]);let a=t.map(s=>e[s]);return[n,a]}function ni(e,t){let n=t.map(r=>1);return R5(e,n,t)}function EN(e,t,n){M(zm(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function M5(e,t){if(zm(e,t))return null;let n=[];for(let r=0;r<t;++r)e.indexOf(r)===-1&&n.push(r);return e.forEach(r=>n.push(r)),n}function Pm(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function CN(e,t){let n=[];for(let r=t-e;r<t;++r)n.push(r);return n}function RN(e,t=null,n=!1){let r=R(e,"x","logSumExp"),a=rr(t,r.shape),s=jn(r,a,!0),i=_e(r,s),o=Vn(i),l=Ce(o,a),c=kn(l),u=oe(K(s,c.shape),c);if(n){let h=ni(u.shape,a);return K(u,h)}return u}var Lf=P({logSumExp_:RN});function FN(e,t){let n=R(e,"a","logicalAnd","bool"),r=R(t,"b","logicalAnd","bool");gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(co,a)}var tr=P({logicalAnd_:FN});function MN(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(au,t)}var Nu=P({logicalNot_:MN});function $N(e,t){let n=R(e,"a","logicalOr","bool"),r=R(t,"b","logicalOr","bool");gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(su,a)}var ad=P({logicalOr_:$N});function DN(e,t){let n=R(e,"a","logicalXor","bool"),r=R(t,"b","logicalXor","bool");return gt(n.shape,r.shape),tr(ad(e,t),Nu(tr(e,t)))}var Tg=P({logicalXor_:DN});function ON(e,t,n,r,a){let s=R(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=K(s,[1,s.shape[0],s.shape[1],s.shape[2]])),M(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),M(Tn(n,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&M(qt(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let c={x:o},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},h=L.runKernel(ys,c,u);return l?K(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Su=P({maxPool_:ON});function zN(e,t=[1,1,1],n,r,a,s="NDHWC",i){i==null?i=[1,1,1]:Mt("dilations is deprecated, this field will be gone in v3.0.0.");let o=R(e,"x","maxPool3d"),l=o,c=!1;o.rank===4&&(c=!0,l=K(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),M(l.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${l.rank}.`),M(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),M(Tn(n,i),()=>`Error in maxPool3d: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&M(qt(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let u={x:l},h={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s,dilations:i},d=L.runKernel(ou,u,h);return c?K(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Wf=P({maxPool3d_:zN});function PN(e,t,n,r,a=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:a},o=L.runKernel(zh,s,i);return{result:o[0],indexes:o[1]}}var Eg=P({maxPoolWithArgmax_:PN});function LN(e,t){let n=R(e,"a","maximum"),r=R(t,"b","maximum");[n,r]=Nt(n,r),n.dtype==="bool"&&(n=ge(n,"int32"),r=ge(r,"int32")),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(As,a)}var Ar=P({maximum_:LN});function WN(e,t=null,n=!1){let r={x:R(e,"x","mean")},a={axis:t,keepDims:n};return L.runKernel(gs,r,a)}var It=P({mean_:WN});function BN(e,t=null,n=!1){let r={x:R(e,"x","min")},a={axis:t,keepDims:n};return L.runKernel(xs,r,a)}var Ho=P({min_:BN});function VN(e,t){let n=R(e,"a","minimum"),r=R(t,"b","minimum");[n,r]=Nt(n,r),n.dtype==="bool"&&(n=ge(n,"int32"),r=ge(r,"int32")),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(ws,a)}var qs=P({minimum_:VN});function UN(e,t,n){M(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let r=R(e,"x","mirrorPad");if(r.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");M(t.length===r.rank,()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`);let a=n==="reflect"?1:0;for(let o=0;o<r.rank;o++)M(t[o].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),M(t[o][0]>=0&&t[o][0]<=r.shape[o]-a&&t[o][1]>=0&&t[o][1]<=r.shape[o]-a,()=>`Padding in dimension ${o} cannot be greater than or equal to ${r.shape[o]-a} or less than 0 for input of shape ${r.shape}`);let s={paddings:t,mode:n},i={x:r};return L.runKernel(lu,i,s)}var Bf=P({mirrorPad_:UN});function HN(e,t){let n=R(e,"a","mod"),r=R(t,"b","mod");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(ho,a)}var sd=P({mod_:HN});function jN(e){let t=R(e,"x","square"),n={};return L.runKernel("Square",{x:t},n)}var ht=P({square_:jN});function GN(e,t=null,n=!1){e=R(e,"x","moments");let r=rr(t,e.shape),a=It(e,r,n),s=a.shape;n||(s=ni(a.shape,r));let i=ht(_e(ge(e,"float32"),K(a,s))),o=It(i,r,n);return{mean:a,variance:o}}var id=P({moments_:GN});function qN(e,t,n,r){let a=R(t,"data","multiRNNCell"),s=Gu(n,"c","multiRNNCell"),i=Gu(r,"h","multiRNNCell"),o=a,l=[];for(let h=0;h<e.length;h++){let d=e[h](o,s[h],i[h]);l.push(d[0]),l.push(d[1]),o=d[1]}let c=[],u=[];for(let h=0;h<l.length;h+=2)c.push(l[h]),u.push(l[h+1]);return[c,u]}var k4=P({multiRNNCell_:qN});function XN(e,t,n,r=!1){let a=R(e,"logits","multinomial"),s=a.size,i=a.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:i===1?K(a,[1,-1]):a},l={numSamples:t,seed:n,normalized:r},c=L.runKernel(Ph,o,l);return i===1?K(c,[c.size]):c}var Cg=P({multinomial_:XN});function KN(e,t){let n=R(e,"a","notEqual"),r=R(t,"b","notEqual");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return L.runKernel(fo,a)}var ba=P({notEqual_:KN});function Rt(e,t="float32"){if(t==="complex64"){let r=Rt(e,"float32"),a=Rt(e,"float32");return xa(r,a)}let n=Cd(Lt(e),t);return L.makeTensor(n,e,t)}function Cr(e,t="float32"){if(t==="complex64"){let r=Cr(e,"float32"),a=Rt(e,"float32");return xa(r,a)}let n=im(Lt(e),t);return L.makeTensor(n,e,t)}function ZN(e){let t={x:R(e,"x","onesLike")};return L.runKernel(go,t)}var In=P({onesLike_:ZN});function JN(e,t){let n=R(e,"v1","outerProduct"),r=R(t,"v2","outerProduct");M(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);let a=K(n,[-1,1]),s=K(r,[1,-1]);return Ke(a,s)}var I4=P({outerProduct_:JN});function YN(e,t,n=0){let r=R(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let a={paddings:t,constantValue:n},s={x:r};return L.runKernel(vs,s,a)}var ta=P({pad_:YN});function QN(e,t,n=0){return M(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ta(e,[t],n)}var N4=P({pad1d_:QN});function eS(e,t,n=0){return M(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ta(e,t,n)}var S4=P({pad2d_:eS});function tS(e,t,n=0){return M(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."),ta(e,t,n)}var T4=P({pad3d_:tS});function nS(e,t,n=0){return M(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."),ta(e,t,n)}var E4=P({pad4d_:nS});function rS(e,t,n){let r=R(e,"x","spaceToBatchND");M(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),M(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),M(r.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+n[l-1][0]+n[l-1][1])%t[l-1]==0:i,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let a={x:r},s={blockShape:t,paddings:n};return L.runKernel(hu,a,s)}var Tu=P({spaceToBatchND_:rS});function iS(e,t,n,r,a,s){a==null&&(a=[1,1]),s==null&&(s=1),r===0&&(r="valid");let i=R(e,"x","maxPool"),o=i,l=!1;i.rank===3&&(l=!0,o=K(i,[1,i.shape[0],i.shape[1],i.shape[2]])),M(Tn(s,a),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${a}'`);let c=T5(o.shape,t,s,a,r),u=[c.dilationHeight,c.dilationWidth],h;r==="same"?h=sS([c.filterHeight,c.filterWidth],u):h=[[0,0],[0,0]];let d=u[0]===1&&u[1]===1,[p,f]=aS([c.inHeight,c.inWidth],u,h),m=d?r:"valid",A=d?o:Tu(o,u,p),y=(n==="avg"?()=>xu(A,t,s,m):()=>Su(A,t,s,m))(),g=d?y:wu(y,u,f);return l?K(g,[g.shape[1],g.shape[2],g.shape[3]]):g}function aS(e,t,n){let r=n.map(u=>u[0]),a=n.map(u=>u[1]),s=e.concat(r,a),i=t.map((u,h)=>(u-s[h]%u)%u),o=a.map((u,h)=>u+i[h]),l=t.map((u,h)=>[r[h],o[h]]),c=t.map((u,h)=>[0,i[h]]);return[l,c]}function sS(e,t){let n=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),r=n.map(s=>Math.floor(s/2)),a=n.map((s,i)=>s-r[i]);return n.map((s,i)=>[r[i],a[i]])}var Rg=P({pool_:iS});function oS(e,t){let n=R(e,"base","pow"),r=R(t,"exp","pow");[n,r]=Nt(n,r);let a={a:n,b:r};return L.runKernel(ks,a)}var Rr=P({pow_:oS});function lS(e,t){let n=R(e,"x","prelu"),r=R(t,"alpha","prelu"),a={x:n,alpha:r};return L.runKernel(Is,a)}var Eu=P({prelu_:lS});function uS(e,t=null,n=!1){let r=R(e,"x","prod");r.dtype==="bool"&&(r=ge(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return L.runKernel(wo,a,s)}var od=P({prod_:uS});function cS(e,t,n){let r=Lt(e),a=null;if(n==null||n==="float32")a=new Float32Array(r);else if(n==="int32")a=new Int32Array(r);else if(n==="bool")a=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let s=0;s<r;s++)a[s]=t();return L.makeTensor(a,e,n)}var C4=P({rand_:cS}),Lm=Ko(A8()),Wm=class{constructor(e,t,n,r,a){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=a||Math.random();this.random=Lm.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let r=this.nextVal;return this.nextVal=NaN,r}let e,t,n=!1;for(;!n;){let r,a,s;do r=2*this.random()-1,a=2*this.random()-1,s=r*r+a*a;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*r*i,t=this.mean+this.stdDev*a*i,(!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}},hS=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let a=r||Math.random();this.randu=Lm.alea(a.toString()),this.randn=new Wm(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,a,s;for(;;){do r=this.randn.nextValue(),s=1+this.c*r;while(s<=0);if(s*=s*s,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),a=this.randu(),a<t||Math.log(a)<n)break}return s=1/this.beta*this.d*s,this.alpha<1&&(s*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(s)}convertValue(e){return this.dtype==="float32"?e:Math.round(e)}},dS=class{constructor(e=0,t=1,n,r){if(this.canReturnFloat=()=>this.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=Lm.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function pS(e,t,n=1,r="float32",a){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);let s=new hS(t,n,r,a),i=He(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var R4=P({randomGamma_:pS});function fS(e,t=0,n=1,r,a){if(r!=null&&r==="bool")throw new Error(`Unsupported data type ${r}`);let s=new Wm(t,n,r,!1,a),i=He(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var Fg=P({randomNormal_:fS});function mS(e,t=0,n=1,r="float32",a){let s=He(e,r),i=new dS(t,n,null,a);for(let o=0;o<s.values.length;o++)s.values[o]=i.nextValue();return s.toTensor()}var jo=P({randomUniform_:mS});function ld(e,t,n=1,r="float32"){if(n===0)throw new Error("Cannot have a step of zero");let a={start:e,stop:t,step:n,dtype:r};return L.runKernel(uu,{},a)}function AS(e){let t={input:R(e,"input","real")};return L.runKernel(Lh,t)}var Cu=P({real_:AS});function yS(e){let t={x:R(e,"x","reciprocal")};return L.runKernel(_o,t)}var Vf=P({reciprocal_:yS});function gS(e){let t={x:R(e,"x","relu")};return L.runKernel(Ns,t)}var Fr=P({relu_:gS});function xS(e){let t={x:R(e,"x","relu6")};return L.runKernel(Ts,t)}var ud=P({relu6_:xS});function wS(e,t){let n={x:R(e,"x","reverse")},r={dims:t};return L.runKernel(Es,n,r)}var Nn=P({reverse_:wS});function _S(e){let t=R(e,"x","reverse");return M(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),Nn(t,0)}var F4=P({reverse1d_:_S});function bS(e,t){let n=R(e,"x","reverse");return M(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),Nn(n,t)}var M4=P({reverse2d_:bS});function vS(e,t){let n=R(e,"x","reverse");return M(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),Nn(n,t)}var $4=P({reverse3d_:vS});function kS(e,t){let n=R(e,"x","reverse");return M(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),Nn(n,t)}var D4=P({reverse4d_:kS});function IS(e){let t={x:R(e,"x","round")};return L.runKernel(Cs,t)}var Uf=P({round_:IS});function NS(e){let t={x:R(e,"x","rsqrt")};return L.runKernel(Rs,t)}var cd=P({rsqrt_:NS});function Ee(e,t){if((rn(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"&&rn(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Sa(e,[],[],t)}function SS(e){let t={x:R(e,"x","selu")};return L.runKernel(Io,t)}var hd=P({selu_:SS});function TS(e,t,n,r,a,s=[1,1],i="NHWC"){let o=R(e,"x","separableConv2d"),l=R(t,"depthwiseFilter","separableConv2d"),c=R(n,"pointwiseFilter","separableConv2d"),u=o,h=!1;if(o.rank===3&&(h=!0,u=K(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");M(u.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${u.rank}.`),M(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),M(c.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),M(c.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${c.shape[0]}.`),M(c.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${c.shape[1]}.`);let d=l.shape[2],p=l.shape[3];M(c.shape[2]===d*p,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*p}, but got ${c.shape[2]}.`);let f=js(u,l,r,a,i,s),m=Yr(f,c,1,"valid",i);return h?K(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Hf=P({separableConv2d_:TS});async function ES(e,t){let n=R(e,"x","setdiff1d"),r=R(t,"y","setdiff1d");M(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),M(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),M(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);let a=await n.data(),s=await r.data(),i=new Set(s),o=0;for(let u=0;u<a.length;u++)i.has(a[u])||o++;let l=new zt([o],n.dtype),c=new zt([o],"int32");for(let u=0,h=0;u<a.length;u++)i.has(a[u])||(l.values[h]=a[u],c.values[h]=u,h++);return[l.toTensor(),c.toTensor()]}var Mg=ES;function CS(e){let t={x:R(e,"x","sign")};return L.runKernel(To,t)}var jf=P({sign_:CS});function RS(e){let t={x:R(e,"x","sin")};return L.runKernel(Fs,t)}var dd=P({sin_:RS});function FS(e){let t={x:R(e,"x","sinh")};return L.runKernel(So,t)}var pd=P({sinh_:FS});function MS(e,t,n){let r=R(e,"x","slice1d");return M(r.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),Me(r,[t],[n])}var fd=P({slice1d_:MS});function $S(e,t,n){let r=R(e,"x","slice2d");return M(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),Me(r,t,n)}var Gf=P({slice2d_:$S});function DS(e,t,n){let r=R(e,"x","slice3d");return M(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),Me(r,t,n)}var md=P({slice3d_:DS});function OS(e,t,n){let r=R(e,"x","slice4d");return M(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),Me(r,t,n)}var Ru=P({slice4d_:OS});function zS(e,t=-1){let n=R(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},a={dim:t};return L.runKernel(Os,r,a)}var Fu=P({softmax_:zS});function PS(e){M(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Ch,t)}var Mu=P({fft_:PS});function LS(e){M(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Rh,t)}var Go=P({ifft_:LS});function WS(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let a=K(e,[n,t]);r=Go(a)}else{let a=[n,2*(t-1)],s=K(Cu(e),[n,t]),i=K(td(e),[n,t]),o=Nn(Me(s,[0,1],[n,t-2]),1),l=W(Nn(Me(i,[0,1],[n,t-2]),1),Ee(-1)),c=dt([s,o],1),u=dt([i,l],1),h=K(xa(c,u),[a[0],a[1]]);r=Go(h)}if(r=Cu(r),e.rank===3&&e.shape[0]!==0){let a=r,s=e.shape[0];r=K(r,[s,r.shape[0]/s,r.shape[1]]),a.dispose()}return r}var Ad=P({irfft_:WS});function BS(e,t,n=0){let r={x:R(e,"x","split")},a={numOrSizeSplits:t,axis:n};return L.runKernel(Co,r,a)}var sn=P({split_:BS});function VS(e,t){M(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,a;if(t!=null&&t<n){let f=e.shape.map(A=>0),m=e.shape.map(A=>A);m[e.shape.length-1]=t,a=Me(e,f,m),n=t}else if(t!=null&&t>n){let f=e.shape.map(m=>m);f[e.shape.length-1]=t-n,a=dt([e,Rt(f)],e.shape.length-1),n=t}else a=e;let s=Ge(a),i=K(xa(a,s),[r,n]),o=Mu(i),l=Math.floor(n/2)+1,c=Cu(o),u=td(o),h=sn(c,[l,n-l],c.shape.length-1),d=sn(u,[l,n-l],u.shape.length-1),p=a.shape.slice();return p[a.shape.length-1]=l,K(xa(h[0],d[0]),p)}var $u=P({rfft_:VS});function US(e){let t={x:R(e,"x","sqrt")};return L.runKernel($s,t)}var Yt=P({sqrt_:US});function HS(e,t){let n=R(e,"a","squaredDifference"),r=R(t,"b","squaredDifference");[n,r]=Nt(n,r),gt(n.shape,r.shape);let a={a:n,b:r},s={};return L.runKernel(zs,a,s)}var Du=P({squaredDifference_:HS});function jS(e,t){let n=R(e,"x","squeeze");return K(n,T0(n.shape,t).newShape)}var va=P({squeeze_:jS});function GS(e,t=0){let n=Gu(e,"tensors","stack","string_or_numeric");M(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&M(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,a={axis:t};return L.runKernel(xo,r,a)}var Sn=P({stack_:GS});function qS(e,t=0){let n={x:R(e,"x","step")},r={alpha:t};return L.runKernel(Oo,n,r)}var qo=P({step_:qS});function XS(e,t,n,r,a=0,s=0,i=0,o=0,l=0){let c={x:R(e,"x","stridedSlice")},u={begin:t,end:n,strides:r,beginMask:a,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return L.runKernel(Ro,c,u)}var qf=P({stridedSlice_:XS});function KS(e){let t={x:R(e,"x","tan")};return L.runKernel(Fo,t)}var Xf=P({tan_:KS});function nn(e,t){Ks(e);let n=zr(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Sa(e,null,n,t)}function dr(e,t,n){if(Ks(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=zr(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 Sa(e,t,r,n)}function O4(e,t,n){if(Ks(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let r=zr(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 Sa(e,t,r,n)}function z4(e,t,n){if(Ks(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let r=zr(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 Sa(e,t,r,n)}function P4(e,t,n){if(Ks(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let r=zr(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,Sa(e,t,r,n)}function ZS(e,t=1,n=!0){let r=R(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let a=r.shape[r.shape.length-1];if(t>a)throw new Error(`'k' passed to topk() must be <= the last dimension (${a}) but got ${t}`);let s={x:r},i={k:t,sorted:n},[o,l]=L.runKernel(Mo,s,i);return{values:o,indices:l}}var Kf=P({topk_:ZS});function JS(e,t=0,n=1,r,a){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Wm(t,n,r,!0,a),i=He(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var yd=P({truncatedNormal_:JS});function YS(e,t=0){let n=R(e,"x","unique","string_or_numeric");M(n.rank>0,()=>"The input tensor must be at least 1D");let r={x:n},a={axis:t},[s,i]=L.runKernel(Uh,r,a);return{values:s,indices:i}}var gd=P({unique_:YS});function QS(e,t,n){let r=R(e,"x","unsortedSegmentSum"),a=R(t,"segmentIds","unsortedSegmentSum","int32");M(qt(n),()=>"numSegments must be of dtype int");let s={x:r,segmentIds:a},i={numSegments:n};return L.runKernel(pu,s,i)}var Zf=P({unsortedSegmentSum_:QS});function eT(e,t=0){let n=R(e,"x","unstack","string_or_numeric");M(t>=-n.shape.length&&t<n.shape.length,()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},a={axis:t};return L.runKernel($o,r,a)}var nr=P({unstack_:eT});function $g(e,t=!0,n,r){return L.makeVariable(e,t,n,r)}function $5(e,t){let n=[];for(let s=0;s<t.length;s++)t[s]&&n.push(s);let r=He(e,"int32"),a=He([n.length,e.length],"int32");for(let s=0;s<n.length;s++){let i=r.indexToLoc(n[s]),o=s*e.length;a.values.set(i,o)}return a.toTensor()}async function tT(e){let t=R(e,"condition","whereAsync","bool"),n=await t.data(),r=$5(t.shape,n);return e!==t&&t.dispose(),r}var Jf=tT;async function nT(e,t,n){let r=R(e,"tensor","boolMask"),a=R(t,"mask","boolMask","bool"),s=n==null?0:n,i=a.rank,o=r.shape;M(i>0,()=>"mask cannot be scalar"),at(o.slice(s,s+i),a.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let m=s;m<s+i;m++)l*=o[m];let c=o.slice(0,s).concat([l],o.slice(s+i)),u=K(r,c),h=K(a,[-1]),d=await Jf(h),p=va(d,[1]),f=Gs(u,p,s);return e!==r&&r.dispose(),t!==a&&a.dispose(),p.dispose(),u.dispose(),h.dispose(),d.dispose(),f}var L4=nT;function rT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","notEqualStrict"),r=R(t,"b","notEqualStrict");return at(n.shape,r.shape,"Error in notEqualStrict: "),ba(n,r)}function aT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","lessStrict"),r=R(t,"b","lessStrict");return at(n.shape,r.shape,"Error in lessStrict: "),Iu(n,r)}function sT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","equalStrict"),r=R(t,"b","equalStrict");return at(n.shape,r.shape,"Error in equalStrict: "),Qr(n,r)}function iT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","lessEqualStrict"),r=R(t,"b","lessEqualStrict");return at(n.shape,r.shape,"Error in lessEqualStrict: "),_a(n,r)}function oT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","greaterStrict"),r=R(t,"b","greaterStrict");return at(n.shape,r.shape,"Error in greaterStrict: "),Hn(n,r)}function lT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","greaterEqualStrict"),r=R(t,"b","greaterEqualStrict");return at(n.shape,r.shape,"Error in greaterEqualStrict: "),ea(n,r)}var Dg=P({equalStrict_:sT}),Og=P({greaterEqualStrict_:lT}),zg=P({greaterStrict_:oT}),Pg=P({lessEqualStrict_:iT}),Lg=P({lessStrict_:aT}),Wg=P({notEqualStrict_:rT});function uT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","addStrict"),r=R(t,"b","addStrict");return at(n.shape,r.shape,"Error in addStrict: "),oe(n,r)}function cT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","subStrict"),r=R(t,"b","subStrict");return at(n.shape,r.shape,"Error in subStrict: "),_e(n,r)}function hT(e,t){return Mt("strict variants of ops have been deprecated and will be removed in future"),at(e.shape,t.shape,"Error in powStrict: "),Rr(e,t)}function dT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","mul"),r=R(t,"b","mul");return at(n.shape,r.shape,"Error in multiplyStrict: "),W(n,r)}function pT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","div"),r=R(t,"b","div");return at(n.shape,r.shape,"Error in divideStrict: "),Te(n,r)}function fT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","modStrict"),r=R(t,"b","modStrict");return at(n.shape,r.shape,"Error in modStrict: "),sd(n,r)}function mT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","minimumStrict"),r=R(t,"b","minimumStrict");return at(n.shape,r.shape,"Error in minimumStrict: "),qs(n,r)}function AT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","maximumStrict"),r=R(t,"b","maximumStrict");return at(n.shape,r.shape,"Error in maximumStrict: "),Ar(n,r)}function yT(e,t){Mt("strict variants of ops have been deprecated and will be removed in future");let n=R(e,"a","squaredDifferenceStrict"),r=R(t,"b","squaredDifferenceStrict");return at(n.shape,r.shape,"Error in squaredDifferenceStrict: "),Du(n,r)}var Bg=P({addStrict_:uT}),Vg=P({divStrict_:pT}),Ug=P({maximumStrict_:AT}),Hg=P({minimumStrict_:mT}),jg=P({modStrict_:fT}),Gg=P({mulStrict_:dT}),qg=P({powStrict_:hT}),Xg=P({squaredDifferenceStrict_:yT}),Kg=P({subStrict_:cT});function gT(e,t="euclidean",n=null,r=!1){e=R(e,"x","norm");let a=D5(e,t,n),s=a.shape;if(r){let i=rr(n,e.shape);s=ni(a.shape,i)}return K(a,s)}function D5(e,t,n=null){if(e.rank===0)return Pt(e);if(e.rank!==1&&n===null)return D5(K(e,[-1]),t,n);if(e.rank===1||typeof n=="number"||Array.isArray(n)&&n.length===1){if(t===1)return Ce(Pt(e),n);if(t===Infinity)return jn(Pt(e),n);if(t===-Infinity)return Ho(Pt(e),n);if(t==="euclidean"||t===2)return Yt(Ce(Rr(Pt(e),Ee(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&n.length===2){if(t===1)return jn(Ce(Pt(e),n[0]),n[1]-1);if(t===Infinity)return jn(Ce(Pt(e),n[1]),n[0]);if(t===-Infinity)return Ho(Ce(Pt(e),n[1]),n[0]);if(t==="fro"||t==="euclidean")return Yt(Ce(ht(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var xd=P({norm_:gT});function xT(e,t,n,r,a=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(n,"decay","movingAverage");H0(s,i),M(aa(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=Ee(1),c=_e(l,o),u=W(_e(i,s),c);if(a){M(r!=null,()=>"When using zeroDebias: true, step is required.");let h=R(r,"step","movingAverage");u=Te(u,_e(l,Rr(o,h)))}return oe(s,u)}var W4=P({movingAverage_:xT});function wT(e,t,n){let r=R(e,"indices","scatterND","int32"),a=R(t,"updates","scatterND");Cm(a,r,n);let s={indices:r,updates:a},i={shape:n};return L.runKernel(vo,s,i)}var Zg=P({scatterND_:wT});function _T(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 a=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===a))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${a}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function bT(e,t,n,r=0){let a=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense"),i=R(r,"defaultValue","sparseToDense",s.dtype);_T(a,s,n,i);let o={sparseIndices:a,sparseValues:s,defaultValue:i},l={outputShape:n};return L.runKernel(Vh,o,l)}var Yf=P({sparseToDense_:bT});function vT(e,t){let n=R(t,"indices","gatherND","int32"),r={params:R(e,"x","gatherND"),indices:n};return L.runKernel(to,r)}var Jg=P({gatherND_:vT});function kT(e,t){if(t==null)return e.shape.slice();if(aa(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r<e.shape.length;r++)t[r]==null&&e.shape[r]!=null?n.push(e.shape[r]):n.push(t[r]);return n}return t}function IT(e,t,n,r){let a=R(e,"x","dropout");if(M(a.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${a.dtype} tensor instead.`),M(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof j?a.clone():a;let s=kT(a,n),i=1-t,o=Te(Vo(oe(jo(s,0,1,"float32",r),i)),i);return W(a,o)}var Yg=P({dropout_:IT});function Qg(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Qf(e,t,n){let r=1-e%2,a=new Float32Array(e);for(let s=0;s<e;++s){let i=2*Math.PI*s/(e+r-1);a[s]=t-n*Math.cos(i)}return nn(a,"float32")}async function NT(e,t,n=1){let r=R(e,"predictions","inTopK"),a=R(t,"targets","inTopK");M(r.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),M(r.rank-1===a.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${a.rank}`),at(r.shape.slice(0,r.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=r.shape[r.shape.length-1];M(n>0&&n<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`);let i=await r.data(),o=await a.data(),[l,c]=[i.length/s,s],u=E0("bool",l);for(let h=0;h<l;h++){let d=h*c,p=i.subarray(d,d+c),f=[];for(let m=0;m<p.length;m++)f.push({value:p[m],index:m});f.sort((m,A)=>A.value-m.value),u[h]=0;for(let m=0;m<n;m++)if(f[m].index===o[h]){u[h]=1;break}}return e!==r&&r.dispose(),t!==a&&a.dispose(),mr(u,a.shape,"bool")}var B4=NT,ka={};Pe(ka,{conv2d:()=>ST,depthwiseConv2d:()=>TT,matMul:()=>ET});function CT(e,t,n,r,a,s="NHWC",i){let o=e;e.rank===3&&(o=K(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=K(t,[1,t.shape[0],t.shape[1],t.shape[2]])),M(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),M(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),M(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let c=s==="NHWC"?o.shape[3]:o.shape[1],u=s==="NHWC"?l.shape[3]:l.shape[1];M(c===n[2],()=>`Error in conv2dDerFilter: depth of input ${c}) must match input depth in filter (${n[2]}.`),M(u===n[3],()=>`Error in conv2dDerFilter: depth of dy (${u}) must match output depth for filter (${n[3]}).`),i!=null&&M(qt(a),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`);let h={x:o,dy:l},d={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,filterShape:n};return L.runKernel(wh,h,d)}var Bm=P({conv2DBackpropFilter_:CT});function Ld(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return W(e,qo(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Wd(e,t){let n=t,r=Wt(e.shape,t.shape);return r.length>0&&(n=Ce(n,r)),K(n,e.shape)}function Bd(e,t,n,r){if(t==="linear")return e;if(t==="relu")return Fr(e);if(t==="elu")return Bo(e);if(t==="relu6")return ud(e);if(t==="prelu")return Eu(e,n);if(t==="leakyrelu")return ku(e,r);throw new Error(`Unknown fused activation ${t}.`)}var Vd=(e,t)=>!(e>0)||t==="linear";function RT({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:c,leakyreluAlpha:u}){if(l=l||"linear",Vd(L.state.gradientDepth,l)===!1){let _=Yr(e,t,n,r,a,s,i);return o!=null&&(_=oe(_,o)),Bd(_,l,c,u)}let h=R(e,"x","conv2d"),d=R(t,"filter","conv2d"),p=h,f=!1;h.rank===3&&(f=!0,p=K(h,[1,h.shape[0],h.shape[1],h.shape[2]])),M(p.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${p.rank}.`),M(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),i!=null&&M(qt(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`),M(p.shape[3]===d.shape[2],()=>`Error in conv2d: depth of input (${p.shape[3]}) must match input depth for filter ${d.shape[2]}.`),M(Tn(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),M(a==="NHWC",()=>`Error in conv2d: got dataFormat of ${a} but only NHWC is currently supported.`);let m=Xu(p.shape,d.shape,n,s,r,i),A;o!=null&&(A=R(o,"bias","fused conv2d"),[A]=Nt(A,h),gt(m.outShape,A.shape));let y;c!=null&&(y=R(c,"prelu weights","fused conv2d"));let g=(_,b)=>{let[T,S,N,C]=b,$=Ld(_,N,l);M(Ca(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let D=Om(S.shape,$,T,n,r),O=Bm(S,$,T.shape,n,r),B=[D,O];if(C!=null){let H=Wd(C,$);B.push(H)}return B},w={x:p,filter:d,bias:A,preluActivationWeights:y},x={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:u};return o==null?Er((_,b,T)=>{let S=L.runKernel(Vs,w,x);return T([b,_,S]),f&&(S=K(S,[S.shape[1],S.shape[2],S.shape[3]])),{value:S,gradFunc:g}})(p,d):Er((_,b,T,S)=>{let N=L.runKernel(Vs,w,x);return S([b,_,N,T]),f&&(N=K(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:g}})(p,d,A)}var ST=P({fusedConv2d_:RT});function FT(e,t,n,r,a,s=[1,1],i){let o=e;e.rank===3&&(o=K(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=K(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let c={x:o,dy:l},u={strides:r,pad:a,dimRoundingMode:i,dilations:s,filterShape:n};return L.runKernel(kh,c,u)}var O5=P({depthwiseConv2dNativeBackpropFilter_:FT});function MT(e,t,n,r,a,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=K(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let c={dy:o,filter:n},u={strides:r,pad:a,dimRoundingMode:i,dilations:s,inputShape:e},h=L.runKernel(Ih,c,u);return l?K(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var z5=P({depthwiseConv2dNativeBackpropInput_:MT});function $T({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:c,leakyreluAlpha:u}){if(Vd(L.state.gradientDepth,l)===!1){let _=js(e,t,n,r,a,s,i);return o!=null&&(_=oe(_,o)),Bd(_,l,c,u)}let h=R(e,"x","depthwiseConv2d"),d=R(t,"filter","depthwiseConv2d"),p=h,f=!1;h.rank===3&&(f=!0,p=K(h,[1,h.shape[0],h.shape[1],h.shape[2]])),M(p.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${p.rank}.`),M(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),M(p.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${p.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),s==null&&(s=[1,1]),M(Tn(n,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),i!=null&&M(qt(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${i} but got pad ${r}.`);let m=Xu(p.shape,d.shape,n,s,r,i,!0),A;o!=null&&(A=R(o,"bias","fused conv2d"),[A]=Nt(A,h),gt(m.outShape,A.shape));let y;c!=null&&(y=R(c,"prelu weights","fused depthwiseConv2d"));let g=(_,b)=>{M(Ca(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[T,S,N,C]=b,$=Ld(_,N,l),D=z5(S.shape,$,T,n,r,s,i),O=O5(S,$,T.shape,n,r,s,i);if(C!=null){let B=Wd(A,$);return[D,O,B]}return[D,O]},w={x:p,filter:d,bias:A,preluActivationWeights:y},x={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:u};return o==null?Er((_,b,T)=>{let S=L.runKernel(Us,w,x);return T([b,_,S]),f&&(S=K(S,[S.shape[1],S.shape[2],S.shape[3]])),{value:S,gradFunc:g}})(p,d):Er((_,b,T,S)=>{let N=L.runKernel(Us,w,x);return S([b,_,N,T]),f&&(N=K(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:g}})(p,d,A)}var TT=P({fusedDepthwiseConv2d_:$T});function DT({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:a,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o}){if(Vd(L.state.gradientDepth,s)===!1){let C=Ke(e,t,n,r);return a!=null&&(C=oe(C,a)),Bd(C,s,i,o)}let l=R(e,"a","fused matMul"),c=R(t,"b","fused matMul");[l,c]=Nt(l,c);let u=n?l.shape[l.rank-2]:l.shape[l.rank-1],h=r?c.shape[c.rank-1]:c.shape[c.rank-2],d=n?l.shape[l.rank-1]:l.shape[l.rank-2],p=r?c.shape[c.rank-2]:c.shape[c.rank-1],f=l.shape.slice(0,-2),m=c.shape.slice(0,-2),A=Lt(f),y=Lt(m);M(l.rank>=2&&c.rank>=2&&l.rank===c.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${c.rank}.`),M(aa(f,m),()=>`Error in fused matMul: outer dimensions (${f}) and (${m}) of Tensors with shapes ${l.shape} and ${c.shape} must match.`),M(u===h,()=>`Error in fused matMul: inner shapes (${u}) and (${h}) of Tensors with shapes ${l.shape} and ${c.shape} and transposeA=${n} and transposeB=${r} must match.`);let g=l.shape.slice(0,-2).concat([d,p]),w=n?K(l,[A,u,d]):K(l,[A,d,u]),x=r?K(c,[y,p,h]):K(c,[y,h,p]),_;a!=null&&(_=R(a,"bias","fused matMul"),[_]=Nt(_,l),gt(g,_.shape));let b;i!=null&&(b=R(i,"prelu weights","fused matMul"));let T=(C,$)=>{let[D,O,B,H]=$,X=Ld(K(C,B.shape),B,s),Z,ee;if(!n&&!r?(Z=Ke(X,O,!1,!0),ee=Ke(D,X,!0,!1)):!n&&r?(Z=Ke(X,O,!1,!1),ee=Ke(X,D,!0,!1)):n&&!r?(Z=Ke(O,X,!1,!0),ee=Ke(D,X,!1,!1)):(Z=Ke(O,X,!0,!0),ee=Ke(X,D,!0,!0)),a!=null){let Y=Wd(H,X);return[Z,ee,Y]}else return[Z,ee]},S={a:w,b:x,bias:_,preluActivationWeights:b},N={transposeA:n,transposeB:r,activation:s,leakyreluAlpha:o};return a==null?Er((C,$,D)=>{let O=L.runKernel(Bs,S,N);return D([C,$,O]),{value:K(O,g),gradFunc:T}})(w,x):Er((C,$,D,O)=>{let B=L.runKernel(Bs,S,N);return O([C,$,B,D]),{value:K(B,g),gradFunc:T}})(w,x,_)}var ET=P({fusedMatMul_:DT});function OT(e){return Qf(e,.54,.46)}var zT=P({hammingWindow_:OT});function PT(e){return Qf(e,.5,.5)}var P5=P({hannWindow_:PT});function LT(e,t,n,r=!1,a=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Me(e,s,t)),s+=n;if(r)for(;s<e.size;){let o=s+t-e.size,l=dt([Me(e,s,t-o),vu([o],a)]);i.push(l),s+=n}return i.length===0?dr([],[0,t]):K(dt(i),[i.length,t])}var L5=P({frame_:LT});function WT(e,t,n,r,a=P5){r==null&&(r=Qg(t));let s=L5(e,t,n),i=W(s,a(t)),o=[];for(let l=0;l<s.shape[0];l++)o.push($u(Me(i,[l,0],[1,t]),r));return dt(o)}var BT=P({stft_:WT});function VT(e,t,n,r,a="bilinear",s=0){let i=R(e,"image","cropAndResize"),o=R(t,"boxes","cropAndResize","float32"),l=R(n,"boxInd","cropAndResize","int32"),c=o.shape[0];M(i.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),M(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${c},4] but had shape ${o.shape}.`),M(l.rank===1&&l.shape[0]===c,()=>`Error in cropAndResize: boxInd must be have size [${c}] but had shape ${o.shape}.`),M(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),M(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),M(a==="bilinear"||a==="nearest",()=>`method must be bilinear or nearest, but was ${a}`);let u={image:i,boxes:o,boxInd:l},h={method:a,extrapolationValue:s,cropSize:r};return L.runKernel(Gi,u,h)}var UT=P({cropAndResize_:VT});function HT(e){let t=R(e,"image","flipLeftRight","float32");M(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return L.runKernel(Qi,n,{})}var jT=P({flipLeftRight_:HT});function GT(e,t,n=0,r=.5){let a=R(e,"image","rotateWithOffset","float32");M(a.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${a.rank}.`);let s={image:a},i={radians:t,fillValue:n,center:r};return L.runKernel(zo,s,i)}var qT=P({rotateWithOffset_:GT});function sl(e,t,n,r,a,s){r==null&&(r=.5),a==null&&(a=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return n=Math.min(n,i),M(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),M(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),M(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),M(t.rank===1,()=>"scores must be a 1D tensor"),M(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),M(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s}}function XT(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression"),i=R(t,"scores","nonMaxSuppression"),o=sl(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l={maxOutputSize:n,iouThreshold:r,scoreThreshold:a};return L.runKernel(mo,{boxes:s,scores:i},l)}var KT=P({nonMaxSuppression_:XT});function JT(e,t,n){let r=ZT(e,t,n),a=r<0?-(r+1):r;e.splice(a,0,t)}function ZT(e,t,n){return QT(e,t,n||YT)}function YT(e,t){return e>t?1:e<t?-1:0}function QT(e,t,n){let r=0,a=e.length,s=0,i=!1;for(;r<a;){s=r+(a-r>>>1);let o=n(t,e[s]);o>0?r=s+1:(a=s,i=!o)}return i?r:-r-1}function W5(e,t,n,r,a){return Vm(e,t,n,r,a,0)}function B5(e,t,n,r,a,s){return Vm(e,t,n,r,a,0,!1,s,!0)}function V5(e,t,n,r,a,s){return Vm(e,t,n,r,a,s,!0)}function Vm(e,t,n,r,a,s,i=!1,o=!1,l=!1){let c=[];for(let A=0;A<t.length;A++)t[A]>a&&c.push({score:t[A],boxIndex:A,suppressBeginIndex:0});c.sort(U5);let u=s>0?-.5/s:0,h=[],d=[];for(;h.length<n&&c.length>0;){let A=c.pop(),{score:y,boxIndex:g,suppressBeginIndex:w}=A;if(y<a)break;let x=!1;for(let _=h.length-1;_>=w;--_){let b=eE(e,g,h[_]);if(b>=r){x=!0;break}if(A.score=A.score*tE(r,u,b),A.score<=a)break}A.suppressBeginIndex=h.length,x||(A.score===y?(h.push(g),d.push(A.score)):A.score>a&&JT(c,A,U5))}let p=h.length,f=n-p;o&&f>0&&(h.push(...new Array(f).fill(0)),d.push(...new Array(f).fill(0)));let m={selectedIndices:h};return i&&(m.selectedScores=d),l&&(m.validOutputs=p),m}function eE(e,t,n){let r=e.subarray(t*4,t*4+4),a=e.subarray(n*4,n*4+4),s=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),o=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),c=Math.min(a[0],a[2]),u=Math.min(a[1],a[3]),h=Math.max(a[0],a[2]),d=Math.max(a[1],a[3]),p=(o-s)*(l-i),f=(h-c)*(d-u);if(p<=0||f<=0)return 0;let m=Math.max(s,c),A=Math.max(i,u),y=Math.min(o,h),g=Math.min(l,d),w=Math.max(y-m,0)*Math.max(g-A,0);return w/(p+f-w)}function tE(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function U5(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function nE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=sl(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),c=l[0],u=l[1],{selectedIndices:h}=W5(c,u,n,r,a);return s!==e&&s.dispose(),i!==t&&i.dispose(),nn(h,"int32")}var rE=nE;function aE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=sl(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let c={boxes:i,scores:o},u={maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s},h=L.runKernel(yo,c,u);return{selectedIndices:h[0],selectedScores:h[1]}}var sE=P({nonMaxSuppressionWithScore_:aE});async function iE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=sl(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let c=await Promise.all([i.data(),o.data()]),u=c[0],h=c[1],{selectedIndices:d,selectedScores:p}=V5(u,h,n,r,a,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:nn(d,"int32"),selectedScores:nn(p)}}var oE=iE;function lE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=sl(i,o,n,r,a,null),c=l.maxOutputSize,u=l.iouThreshold,h=l.scoreThreshold,d={boxes:i,scores:o},p={maxOutputSize:c,iouThreshold:u,scoreThreshold:h,padToMaxOutputSize:s},f=L.runKernel(Ao,d,p);return{selectedIndices:f[0],validOutputs:f[1]}}var uE=P({nonMaxSuppressionPadded_:lE});async function cE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=sl(i,o,n,r,a,null),c=l.maxOutputSize,u=l.iouThreshold,h=l.scoreThreshold,[d,p]=await Promise.all([i.data(),o.data()]),{selectedIndices:f,validOutputs:m}=B5(d,p,c,u,h,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:nn(f,"int32"),validOutputs:Ee(m,"int32")}}var hE=cE;function dE(e,t,n=!1,r=!1){let a=R(e,"images","resizeBilinear");M(a.rank===3||a.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${a.rank}.`),M(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),M(r===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=a,i=!1;a.rank===3&&(i=!0,s=K(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},c=L.runKernel(Ss,o,l);return i?K(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var H5=P({resizeBilinear_:dE});function pE(e,t,n=!1,r=!1){let a=R(e,"images","resizeNearestNeighbor");M(a.rank===3||a.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${a.rank}.`),M(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),M(a.dtype==="float32"||a.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),M(r===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=a,i=!1;a.rank===3&&(i=!0,s=K(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},c=L.runKernel(cu,o,l);return i?K(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var j5=P({resizeNearestNeighbor_:pE});function fE(e,t,n){M(t%1==0,()=>`bandPart(): numLower must be an integer, got ${t}.`),M(n%1==0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let r=R(e,"a","bandPart");M(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let a=r.shape,[s,i]=r.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(n<=i))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),n<0&&(n=i);let o=K(ld(0,s,1,"int32"),[-1,1]),l=ld(0,i,1,"int32"),c=_e(o,l),u=tr(_a(c,Ee(+t,"int32")),ea(c,Ee(-n,"int32"))),h=Rt([s,i],r.dtype);return K(Sn(nr(K(r,[-1,s,i])).map(d=>An(u,d,h))),a)}var mE=P({bandPart_:fE});function AE(e){let t;if(Array.isArray(e)){t=!1,M(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let a=e[0].shape[0];for(let s=1;s<e.length;++s)M(e[s].shape[0]===a,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${a})`)}else t=!0,e=sn(e,e.shape[0],0).map(a=>va(a,[0]));M(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 a=0;a<e.length;++a)n.push(L.tidy(()=>{let s=r[a];if(a>0)for(let i=0;i<a;++i){let o=W(Ce(W(n[i],s)),n[i]);s=_e(s,o)}return Te(s,xd(s,"euclidean"))}));return t?Sn(n,0):n}var yE=P({gramSchmidt_:AE});function gE(e,t=!1){if(M(e.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return G5(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,c)=>l*c),r=nr(K(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),a=[],s=[];r.forEach(l=>{let[c,u]=G5(l,t);a.push(c),s.push(u)});let i=K(Sn(a,0),e.shape),o=K(Sn(s,0),e.shape);return[i,o]}}function G5(e,t=!1){return L.tidy(()=>{M(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],a=zf(n),s=Tr(e),i=dr([[1]],[1,1]),o=Tr(i),l=n>=r?r:n;for(let c=0;c<l;++c){let u=s,h=o,d=a;[o,s,a]=L.tidy(()=>{let p=Me(s,[c,c],[n-c,1]),f=xd(p),m=Me(s,[c,c],[1,1]),A=An(Hn(m,0),dr([[-1]]),dr([[1]])),y=_e(m,W(A,f)),g=Te(p,y);g.shape[0]===1?o=Tr(i):o=dt([i,Me(g,[1,0],[g.shape[0]-1,g.shape[1]])],0);let w=kt(Te(Ke(A,y),f)),x=Me(s,[c,0],[n-c,r]),_=W(w,o),b=st(o);if(c===0)s=_e(x,Ke(_,Ke(b,x)));else{let N=_e(x,Ke(_,Ke(b,x)));s=dt([Me(s,[0,0],[c,r]),N],0)}let T=st(_),S=Me(a,[0,c],[n,a.shape[1]-c]);if(c===0)a=_e(S,Ke(Ke(S,o),T));else{let N=_e(S,Ke(Ke(S,o),T));a=dt([Me(a,[0,0],[n,c]),N],1)}return[o,s,a]}),$e([u,h,d])}return!t&&n>r&&(a=Me(a,[0,0],[n,r]),s=Me(s,[0,0],[r,r])),[a,s]})}var xE=P({qr_:gE}),ln;(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"})(ln||(ln={}));function wE(e,t,n=ln.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"losses","computeWeightedLoss"),a=null;t!=null&&(a=R(t,"weights","computeWeightedLoss"));let s=a==null?r:W(r,a);if(n===ln.NONE)return s;if(n===ln.SUM)return Ce(s);if(n===ln.MEAN){if(a==null)return It(s);{let i=r.size/a.size,o=Te(Ce(s),Ce(a));return i>1?Te(o,Ee(i)):o}}if(n===ln.SUM_BY_NONZERO_WEIGHTS){if(a==null)return Te(Ce(s),Ee(r.size));{let i=W(a,Cr(r.shape)),o=ge(Ce(ba(i,Ee(0))),"float32");return Te(Ce(s),o)}}throw Error(`Unknown reduction: ${n}`)}var ia=P({computeWeightedLoss_:wE});function _E(e,t,n,r=ln.SUM_BY_NONZERO_WEIGHTS){let a=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;n!=null&&(i=R(n,"weights","absoluteDifference")),at(a.shape,s.shape,"Error in absoluteDifference: ");let o=Pt(_e(a,s));return ia(o,i,r)}var bE=P({absoluteDifference_:_E});function vE(e,t,n,r,a=ln.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;r!=null&&(o=R(r,"weights","cosineDistance")),at(s.shape,i.shape,"Error in cosineDistance: ");let l=Ee(1),c=_e(l,Ce(W(s,i),n,!0));return ia(c,o,a)}var kE=P({cosineDistance_:vE});function IE(e,t,n,r=ln.SUM_BY_NONZERO_WEIGHTS){let a=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;n!=null&&(i=R(n,"weights","hingeLoss")),at(a.shape,s.shape,"Error in hingeLoss: ");let o=Ee(1);a=_e(W(Ee(2),a),o);let l=Fr(_e(o,W(a,s)));return ia(l,i,r)}var NE=P({hingeLoss_:IE});function SE(e,t,n,r=1,a=ln.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;n!=null&&(o=R(n,"weights","huberLoss")),at(s.shape,i.shape,"Error in huberLoss: ");let l=Ee(r),c=Pt(_e(i,s)),u=qs(c,l),h=_e(c,u),d=oe(W(Ee(.5),ht(u)),W(l,h));return ia(d,o,a)}var TE=P({huberLoss_:SE});function EE(e,t,n,r=1e-7,a=ln.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;n!=null&&(o=R(n,"weights","logLoss")),at(s.shape,i.shape,"Error in logLoss: ");let l=Ee(1),c=Ee(r),u=kt(W(s,kn(oe(i,c)))),h=W(_e(l,s),kn(oe(_e(l,i),c))),d=_e(u,h);return ia(d,o,a)}var CE=P({logLoss_:EE});function RE(e,t,n,r=ln.SUM_BY_NONZERO_WEIGHTS){let a=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;n!=null&&(i=R(n,"weights","meanSquaredError")),at(a.shape,s.shape,"Error in meanSquaredError: ");let o=Du(a,s);return ia(o,i,r)}var FE=P({meanSquaredError_:RE});function ME(e,t){let n=R(e,"labels","sigmoidCrossEntropyWithLogits"),r=R(t,"logits","sigmoidCrossEntropyWithLogits");at(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let a=Fr(r),s=W(r,n),i=nd(Vn(kt(Pt(r))));return oe(_e(a,s),i)}function $E(e,t,n,r=0,a=ln.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"multiClassLabels","sigmoidCrossEntropy"),i=R(t,"logits","sigmoidCrossEntropy"),o=null;if(n!=null&&(o=R(n,"weights","sigmoidCrossEntropy")),at(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){let c=Ee(r),u=Ee(1),h=Ee(.5);s=oe(W(s,_e(u,c)),W(h,c))}let l=ME(s,i);return ia(l,o,a)}var DE=P({sigmoidCrossEntropy_:$E});function OE(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 Er((r,a,s)=>{let i=Lf(a,[n],!0),o=_e(ge(a,"float32"),i);s([r,o]);let l=kt(W(o,r));return{value:Ce(l,[n]),gradFunc:(c,u)=>{let[h,d]=u,p=ni(c.shape,[n]);return[W(K(c,p),_e(ge(h,"float32"),Vn(d))),W(K(c,p),_e(Vn(d),ge(h,"float32")))]}}})(e,t)}function zE(e,t,n,r=0,a=ln.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"onehotLabels","softmaxCrossEntropy"),i=R(t,"logits","softmaxCrossEntropy"),o=null;if(n!=null&&(o=R(n,"weights","softmaxCrossEntropy")),at(s.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){let c=Ee(r),u=Ee(1),h=Ee(s.shape[1]);s=oe(W(s,_e(u,c)),Te(c,h))}let l=OE(s,i);return ia(l,o,a)}var PE=P({softmaxCrossEntropy_:zE}),V4={fft:Mu,ifft:Go,rfft:$u,irfft:Ad},U4={hammingWindow:zT,hannWindow:P5,frame:L5,stft:BT},Ot={flipLeftRight:jT,resizeNearestNeighbor:j5,resizeBilinear:H5,rotateWithOffset:qT,cropAndResize:UT,nonMaxSuppression:KT,nonMaxSuppressionAsync:rE,nonMaxSuppressionWithScore:sE,nonMaxSuppressionWithScoreAsync:oE,nonMaxSuppressionPadded:uE,nonMaxSuppressionPaddedAsync:hE},e0={bandPart:mE,gramSchmidt:yE,qr:xE},H4={absoluteDifference:bE,computeWeightedLoss:ia,cosineDistance:kE,hingeLoss:NE,huberLoss:TE,logLoss:CE,meanSquaredError:FE,sigmoidCrossEntropy:DE,softmaxCrossEntropy:PE},na=class extends k5{minimize(e,t=!1,n){let{value:r,grads:a}=this.computeGradients(e,n);if(n!=null){let s=n.map(i=>({name:i.name,tensor:a[i.name]}));this.applyGradients(s)}else this.applyGradients(a);return $e(a),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 Ng(e,t)}dispose(){this.iterations_!=null&&$e(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Ee(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(na,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var wd=class extends na{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=L.registeredVariables[t],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:U(()=>Ge(r).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:U(()=>Ge(r).variable(a))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[n].variable,o=this.accumulatedUpdates[n].variable;U(()=>{let l=oe(W(i,this.rho),W(ht(s),1-this.rho)),c=W(Te(Yt(oe(o,this.epsilon)),Yt(oe(i,this.epsilon))),s),u=oe(W(o,this.rho),W(ht(c),1-this.rho));i.assign(l),o.assign(u);let h=oe(W(c,-this.learningRate),r);r.assign(h)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&($e(this.accumulatedGrads.map(e=>e.variable)),$e(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)}};wd.className="Adadelta";Ea(wd);var _d=class extends na{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=L.registeredVariables[t];if(this.accumulatedGrads[n]==null){let i=!1;this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:U(()=>vu(r.shape,this.initialAccumulatorValue).variable(i))}}let a=Array.isArray(e)?e[n].tensor:e[t];if(a==null)return;let s=this.accumulatedGrads[n].variable;U(()=>{let i=oe(s,ht(a));s.assign(i);let o=oe(W(Te(a,Yt(oe(i,L.backend.epsilon()))),-this.learningRate),r);r.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&$e(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)}};_d.className="Adagrad";Ea(_d);var bd=class extends na{constructor(e,t,n,r=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],U(()=>{this.accBeta1=Ee(t).variable(),this.accBeta2=Ee(n).variable()}),r==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);U(()=>{let n=_e(1,this.accBeta1),r=_e(1,this.accBeta2);t.forEach((a,s)=>{let i=L.registeredVariables[a],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${a}/m`,variable:U(()=>Ge(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${a}/v`,variable:U(()=>Ge(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[a];if(l==null)return;let c=this.accumulatedFirstMoment[s].variable,u=this.accumulatedSecondMoment[s].variable,h=oe(W(c,this.beta1),W(l,1-this.beta1)),d=oe(W(u,this.beta2),W(ht(l),1-this.beta2)),p=Te(h,n),f=Te(d,r);c.assign(h),u.assign(d);let m=oe(W(Te(p,oe(Yt(f),this.epsilon)),-this.learningRate),i);i.assign(m)}),this.accBeta1.assign(W(this.accBeta1,this.beta1)),this.accBeta2.assign(W(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&$e(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&$e(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),U(()=>{this.accBeta1.assign(Rr(this.beta1,this.iterations_+1)),this.accBeta2.assign(Rr(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)}};bd.className="Adam";Ea(bd);var vd=class extends na{constructor(e,t,n,r=null,a=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=a,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],U(()=>{this.iteration=Ee(0).variable(),this.accBeta1=Ee(t).variable()}),r==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);U(()=>{let n=_e(1,this.accBeta1),r=Te(-this.learningRate,oe(W(this.iteration,this.decay),1));t.forEach((a,s)=>{let i=L.registeredVariables[a],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${a}/m`,variable:Ge(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${a}/v`,variable:Ge(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[a];if(l==null)return;let c=this.accumulatedFirstMoment[s].variable,u=this.accumulatedWeightedInfNorm[s].variable,h=oe(W(c,this.beta1),W(l,1-this.beta1)),d=W(u,this.beta2),p=Pt(l),f=Ar(d,p);c.assign(h),u.assign(f);let m=oe(W(Te(r,n),Te(h,oe(f,this.epsilon))),i);i.assign(m)}),this.iteration.assign(oe(this.iteration,1)),this.accBeta1.assign(W(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&$e(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&$e(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)}};vd.className="Adamax";Ea(vd);var Ou=class extends na{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=Array.isArray(e)?e[n].tensor:e[t];if(r==null)return;let a=L.registeredVariables[t];U(()=>{let s=oe(W(this.c,r),a);a.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=jt(Ee(-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)}};Ou.className="SGD";Ea(Ou);var kd=class extends Ou{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=Ee(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=L.registeredVariables[t];if(this.accumulations[n]==null){let i=!1;this.accumulations[n]={originalName:`${t}/momentum`,variable:U(()=>Ge(r).variable(i))}}let a=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];s!=null&&U(()=>{let i,o=oe(W(this.m,a),s);this.useNesterov?i=oe(W(this.c,oe(s,W(o,this.m))),r):i=oe(W(this.c,o),r),a.assign(o),r.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&$e(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)}};kd.className="Momentum";Ea(kd);var Id=class extends na{constructor(e,t=.9,n=0,r=null,a=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=a,r==null&&(this.epsilon=L.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=L.registeredVariables[t],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:U(()=>Ge(r).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:U(()=>Ge(r).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:U(()=>Ge(r).variable(a))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;U(()=>{let l=oe(W(i,this.decay),W(ht(s),1-this.decay));if(this.centered){let c=this.accumulatedMeanGrads[n].variable,u=oe(W(c,this.decay),W(s,1-this.decay)),h=Te(W(s,this.learningRate),Yt(_e(l,oe(ht(u),this.epsilon)))),d=oe(W(o,this.momentum),h);i.assign(l),c.assign(u),o.assign(d);let p=_e(r,d);r.assign(p)}else{let c=oe(W(i,this.decay),W(ht(s),1-this.decay)),u=oe(W(o,this.momentum),Te(W(s,this.learningRate),Yt(oe(c,this.epsilon))));i.assign(c),o.assign(u);let h=_e(r,u);r.assign(h)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&$e(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&$e(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&$e(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)}};Id.className="RMSProp";Ea(Id);var ri=class{static sgd(e){return new Ou(e)}static momentum(e,t,n=!1){return new kd(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,a=!1){return new Id(e,t,n,r,a)}static adam(e=.001,t=.9,n=.999,r=null){return new bd(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new wd(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,a=0){return new vd(e,t,n,r,a)}static adagrad(e,t=.1){return new _d(e,t)}},Xs={sgd:ri.sgd,momentum:ri.momentum,adadelta:ri.adadelta,adagrad:ri.adagrad,rmsprop:ri.rmsprop,adamax:ri.adamax,adam:ri.adam},LE=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function Nd(){return new Promise(e=>LE(()=>e()))}var F={};Pe(F,{ERF_A1:()=>ZE,ERF_A2:()=>JE,ERF_A3:()=>YE,ERF_A4:()=>QE,ERF_A5:()=>eC,ERF_P:()=>KE,PARALLELIZE_THRESHOLD:()=>Um,SELU_SCALE:()=>X5,SELU_SCALEALPHA:()=>q5,applyActivation:()=>Bd,assertAndGetBroadcastShape:()=>gt,assertAxesAreInnerMostDims:()=>EN,assertParamsConsistent:()=>WE,assignToTypedArray:()=>lC,axesAreInnerMostDims:()=>zm,calculateShapes:()=>d5,castTensor:()=>dC,combineLocations:()=>R5,complexWithEvenIndex:()=>sC,complexWithOddIndex:()=>iC,computeConv2DInfo:()=>Xu,computeConv3DInfo:()=>E5,computeDefaultPad:()=>Dm,computeDilation2DInfo:()=>iI,computeOptimalWindowSize:()=>VE,computeOutAndReduceShapes:()=>F5,computeOutShape:()=>BE,computePool2DInfo:()=>T5,computePool3DInfo:()=>oI,convertConv2DDataFormat:()=>S5,eitherStridesOrDilationsAreOne:()=>Tn,expandShapeToKeepDim:()=>ni,exponent:()=>cC,exponents:()=>uC,fromStringArrayToUint8:()=>mC,fromUint8ToStringArray:()=>fC,getAxesPermutation:()=>M5,getBroadcastDims:()=>KI,getComplexWithIndex:()=>oC,getFusedBiasGradient:()=>Wd,getFusedDyActivation:()=>Ld,getImageCenter:()=>UE,getInnerMostAxes:()=>CN,getPermuted:()=>jE,getReductionAxes:()=>Wt,getReshaped:()=>HE,getReshapedPermuted:()=>GE,getSliceBeginCoords:()=>qE,getSliceSize:()=>XE,getUndoAxesPermutation:()=>Pm,log:()=>nC,mergeRealAndImagArrays:()=>rC,prepareAndValidate:()=>h5,prepareSplitSize:()=>hC,reshapeTensor:()=>pC,segment_util:()=>K5,shouldFuse:()=>Vd,slice_util:()=>on,splitRealAndImagArrays:()=>aC,tupleValuesAreOne:()=>Ca,upcastType:()=>er,validateInput:()=>Cm,validateUpdateShape:()=>Em,warn:()=>tC});function WE(e,t){let n=e[0].length;e.forEach((a,s)=>{M(a.length===n,()=>`Error in concat${n}D: rank of tensors[${s}] must be the same as the rank of the rest (${n})`)}),M(t>=0&&t<n,()=>`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let r=e[0];e.forEach((a,s)=>{for(let i=0;i<n;i++)M(i===t||a[i]===r[i],()=>`Error in concat${n}D: Shape of tensors[${s}] (${a}) does not match the shape of the rest (${r}) along the non-concatenated axis ${s}.`)})}function BE(e,t){let n=e[0].slice();for(let r=1;r<e.length;r++)n[t]+=e[r][t];return n}var Um=30;function VE(e){return e<=Um?e:Ed(e,Math.floor(Math.sqrt(e)))}function UE(e,t,n){let r=n*(typeof e=="number"?e:e[0]),a=t*(typeof e=="number"?e:e[1]);return[r,a]}function HE(e,t,n,r=!0){let a=[];if(r)a=a.concat(t.slice(0)),a.push(e[0]/n),a=a.concat(e.slice(1));else{a=a.concat(e[0]);let s=t.length;for(let i=0;i<s;++i)a=a.concat([e[i+1]/t[i],t[i]]);a=a.concat(e.slice(s+1))}return a}function jE(e,t,n=!0){let r=[];if(n){r.push(t);for(let a=t+1;a<e;++a)a<=2*t?(r.push(a),r.push(a-(t+1))):r.push(a)}else{let a=[],s=[];for(let i=1;i<e;++i)i>=t*2+1||i%2==1?s.push(i):a.push(i);r.push(...a),r.push(0),r.push(...s)}return r}function GE(e,t,n,r=!0){let a=[];r?a.push(e[0]/n):a.push(e[0]*n);for(let s=1;s<e.length;++s)s<=t.length?r?a.push(t[s-1]*e[s]):a.push(e[s]/t[s-1]):a.push(e[s]);return a}function qE(e,t){let n=[0];for(let r=0;r<t;++r)n.push(e[r][0]);return n}function XE(e,t,n){let r=e.slice(0,1);for(let a=0;a<n;++a)r.push(e[a+1]-t[a][0]-t[a][1]);return r}var q5=1.7580993408473768,X5=1.0507009873554805,KE=.3275911,ZE=.254829592,JE=-.284496736,YE=1.421413741,QE=-1.453152027,eC=1.061405429;function tC(...e){Q().getBool("IS_TEST")||console.warn(...e)}function nC(...e){Q().getBool("IS_TEST")||console.log(...e)}function rC(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(e.length*2);for(let r=0;r<n.length;r+=2)n[r]=e[r/2],n[r+1]=t[r/2];return n}function aC(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=e[r],n[r/2]=e[r+1];return{real:t,imag:n}}function sC(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let a=0;a<e.length;a+=4)n[Math.floor(a/4)]=e[a],r[Math.floor(a/4)]=e[a+1];return{real:n,imag:r}}function iC(e){let t=Math.floor(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let a=2;a<e.length;a+=4)n[Math.floor(a/4)]=e[a],r[Math.floor(a/4)]=e[a+1];return{real:n,imag:r}}function oC(e,t){let n=e[t*2],r=e[t*2+1];return{real:n,imag:r}}function lC(e,t,n,r){e[r*2]=t,e[r*2+1]=n}function uC(e,t){let n=new Float32Array(e/2),r=new Float32Array(e/2);for(let a=0;a<Math.ceil(e/2);a++){let s=(t?2:-2)*Math.PI*(a/e);n[a]=Math.cos(s),r[a]=Math.sin(s)}return{real:n,imag:r}}function cC(e,t,n){let r=(n?2:-2)*Math.PI*(e/t),a=Math.cos(r),s=Math.sin(r);return{real:a,imag:s}}function hC(e,t,n=0){let r=[];if(typeof t=="number")M(e.shape[n]%t==0,()=>"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{let a=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);M(a<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[n]-i}M(e.shape[n]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}var K5={};Pe(K5,{collectGatherOpShapeInfo:()=>gC,computeOutShape:()=>yC,segOpComputeOptimalWindowSize:()=>AC});function AC(e,t){let n=!1,r;for(e<=Um?(r=e,n=!0):r=Ed(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=Ed(e,r+1);return r}function yC(e,t,n){let r=[],a=e.length;for(let s=0;s<a;s++)s!==t?r.push(e[s]):r.push(n);return r}function gC(e,t,n,r){let a=t.shape.length,s=e.shape.length;if(r!==0&&(r<-a||r>a))throw new Error(`Expect batchDims in the range of [-${a}, ${a}], but got ${r}`);if(r<0&&(r+=a),r>s)throw new Error(`batchDims (${r}) must be less than rank(x) (
|
|
${s}).`);if(n<r)throw new Error(`batchDims (${r}) must be less than or equal to axis (${n}).`);for(let h=0;h<r;++h)if(e.shape[h]!==t.shape[h])throw new Error(`x.shape[${h}]: ${e.shape[h]} should be equal to indices.shape[${h}]: ${t.shape[h]}.`);let i=e.shape[n],o=[],l=1,c=1,u=1;for(let h=0;h<r;++h)o.push(e.shape[h]),l*=e.shape[h];for(let h=r;h<n;h++)o.push(e.shape[h]),c*=e.shape[h];for(let h=r;h<a;h++)o.push(t.shape[h]);for(let h=n+1;h<s;h++)o.push(e.shape[h]),u*=e.shape[h];return{batchSize:l,sliceSize:u,outerSize:c,dimSize:i,outputShape:o}}function dC(e,t,n){if(t==="complex64"){if(e.dtype==="complex64")return e.clone();let r=Rt(e.shape),a=ge(e,"float32"),s=n.complex(a,r);return r.dispose(),a.dispose(),s}if(!M0(e.dtype,t))return L.makeTensorFromDataId(e.dataId,e.shape,t);if(e.dtype==="complex64"){let r=n.real(e),a=ge(r,t);return r.dispose(),a}if(t==="int32")return n.int(e);if(t==="bool"){let r=Ee(0,e.dtype),a=n.notEqual(e,r);return r.dispose(),a}else throw new Error(`Error in Cast: failed to cast ${e.dtype} to ${t}`)}function pC(e,t){return L.makeTensorFromDataId(e.dataId,t,e.dtype)}function fC(e){try{return e.map(t=>Fd(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function mC(e){return e.map(t=>Bu(t))}var Mr={};Pe(Mr,{nonMaxSuppressionV3Impl:()=>W5,nonMaxSuppressionV4Impl:()=>B5,nonMaxSuppressionV5Impl:()=>V5,whereImpl:()=>$5});var Z5={kernelName:Di,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,qo(ge(n,"float32"),-1))}}},xC={kernelName:Oi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=ht(ge(n,"float32")),a=Yt(_e(Ee(1),r));return kt(Te(e,a))}}}},wC={kernelName:zi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Yt(_e(ht(ge(n,"float32")),1));return Te(e,r)}}}},_C={kernelName:Aa,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=e,i=Wt(n.shape,a);return i.length>0&&(s=Ce(s,i)),K(s,n.shape)},b:()=>{let s=e,i=Wt(r.shape,a);return i.length>0&&(s=Ce(s,i)),K(s,r.shape)}}}},bC={kernelName:Ja,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,a)=>{n[a]=()=>e.clone()}),n}},vC={kernelName:Ya,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ge(n)}}},kC={kernelName:Jl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ge(n)}}},IC={kernelName:Pi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,Yt(_e(Ee(1),ht(ge(n,"float32")))))}}},NC={kernelName:Li,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Yt(oe(Ee(1),ht(ge(n,"float32"))));return Te(e,r)}}}},SC={kernelName:Vi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=oe(ht(n),ht(r)),i=W(e,Te(r,s)),o=Wt(n.shape,a);return o.length>0&&(i=Ce(i,o)),K(i,n.shape)},b:()=>{let s=oe(ht(n),ht(r)),i=kt(W(e,Te(n,s))),o=Wt(r.shape,a);return o.length>0&&(i=Ce(i,o)),K(i,r.shape)}}}},TC={kernelName:Wi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,oe(ht(ge(n,"float32")),1))}}},EC={kernelName:Bi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,_e(Ee(1),ht(ge(n,"float32"))))}}};function CC(e,t,n,r,a=[1,1,1],s,i){let o=R(e,"dy","avgPool3dGrad"),l=R(t,"input","avgPool3dGrad"),c=o,u=l,h=!1;l.rank===4&&(h=!0,c=K(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),u=K(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),M(c.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`),M(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),M(Tn(r,a),()=>`Error in avgPool3dGrad: Either strides or dilations must be 1. Got strides ${r} and dilations '${a}'`),i!=null&&M(qt(s),()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`);let d={dy:c,input:u},p={filterSize:n,strides:r,dilations:a,pad:s,dimRoundingMode:i},f=L.runKernel(yh,d,p);return h?K(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}var RC=P({avgPool3dGrad_:CC}),FC={kernelName:Yl,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,dilations:i,pad:o,dimRoundingMode:l}=n,c=i==null?[1,1,1]:i;return{x:()=>RC(e,r,a,s,c,o,l)}}};function MC(e,t,n,r,a){let s=R(e,"dy","avgPoolGrad"),i=R(t,"input","avgPoolGrad");M(i.rank===s.rank,()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`);let o=i,l=s,c=!1;i.rank===3&&(c=!0,o=K(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=K(s,[1,s.shape[0],s.shape[1],s.shape[2]])),M(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),M(o.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`);let u={dy:l,input:o},h={filterSize:n,strides:r,pad:a},d=L.runKernel(Ah,u,h);return c?K(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var $C=P({avgPoolGrad_:MC}),DC={kernelName:Qa,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i}=n;return{x:()=>$C(e,r,a,s,i)}}},OC={kernelName:es,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,a]=t,{transposeA:s,transposeB:i}=n;return!s&&!i?{a:()=>Ke(e,a,!1,!0),b:()=>Ke(r,e,!0,!1)}:!s&&i?{a:()=>Ke(e,a,!1,!1),b:()=>Ke(e,r,!0,!1)}:s&&!i?{a:()=>Ke(a,e,!1,!0),b:()=>Ke(r,e,!1,!1)}:{a:()=>Ke(a,e,!0,!0),b:()=>Ke(e,r,!0,!0)}}},zC={kernelName:Ql,gradFunc:(e,t,n)=>{let{blockShape:r,crops:a}=n;return{x:()=>Tu(e,r,a)}}},PC={kernelName:tg,gradFunc:(e,t,n)=>{let r=n,a=r.inputShape,s=r.shape,i=Array.from(s);for(let l=a.length-1;l>=0;l--)if(a[l]===s[l])i[l]=1;else if(a[l]!==1)throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${s}].`);let o=[];for(let l=0;l<i.length;l++)i[l]>1&&o.push(l);return{x:()=>Ce(e,o,!0)}}},LC={kernelName:ts,gradFunc:e=>({x:()=>e.clone()})},WC={kernelName:Ui,gradFunc:e=>({x:()=>Ge(e)})},BC={kernelName:ya,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:a,clipValueMax:s}=n;return{x:()=>An(tr(ea(r,a),_a(r,s)),e,Ge(e))}}},VC={kernelName:eu,inputsToSave:["x"],gradFunc:Z5.gradFunc},UC={kernelName:Hi,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(o=>o.shape),{axis:a}=n,s=rr(a,t[0].shape)[0],i=r.map(o=>o[s]);return sn(e,i,s).map(o=>()=>o)}},HC={kernelName:ns,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return M(Ca(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>Om(r.shape,e,a,i,o,l),filter:()=>Bm(r,e,a.shape,i,o,l)}}},jC={kernelName:rs,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Yr(e,a,s,i,o,1,l),filter:()=>Bm(e,r,a.shape,s,i,o,l)}}};function GC(e,t,n,r,a){let s=e;e.rank===4&&(s=K(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;i.rank===4&&(i=K(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),M(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),M(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),M(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),M(s.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`),M(i.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`);let o={x:s,dy:i},l={strides:r,pad:a,filterShape:n};return L.runKernel(_h,o,l)}var qC=P({conv3DBackpropFilter_:GC}),XC={kernelName:tu,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s}=n;M(Ca(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);let[i,o]=t;return{x:()=>C5(i.shape,e,o,a,s),filter:()=>qC(i,e,o.shape,a,s)}}},KC={kernelName:as,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(kt(dd(ge(n,"float32"))),e)}}},ZC={kernelName:ji,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(pd(ge(n,"float32")),e)}}},JC={kernelName:ss,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a,exclusive:s,reverse:i}=n;return{x:()=>{let o=M5([a],r.rank),l=ed(e,a,s,!i);return o!=null&&(l=st(l,o)),l}}}},YC={kernelName:is,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s,dimRoundingMode:i}=n,o=r==null?[1,1]:r;M(Ca(o),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[l,c]=t;return M(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),M(c.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${c.rank}.`),M(l.shape[3]===c.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${c.shape[2]}.`),M(Tn(a,o),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${o}'.`),i!=null&&M(qt(s),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`),{x:()=>z5(l.shape,e,c,a,s,r,i),filter:()=>O5(l,e,c.shape,a,s,r,i)}}},QC={kernelName:nu,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,s={x:r,filter:a,dy:e},i={x:r,filter:a,dy:e};return{x:()=>L.runKernel(Sh,s,n),filter:()=>L.runKernel(Th,i,n)}}},eR={kernelName:Xi,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>L.runKernel(Eh,r)}}},tR={kernelName:Ki,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=W(Vn(kt(ht(n))),2/Math.sqrt(Math.PI));return{x:()=>W(e,r)}}},nR={kernelName:ls,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,n)}}},rR={kernelName:Ji,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>K(e,n.shape)}}},aR={kernelName:Yi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,Vn(n))}}},sR={kernelName:us,gradFunc:e=>({x:()=>Ge(e)})},iR={kernelName:cs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=Te(e,ge(r,"float32")),i=Wt(n.shape,a);return i.length>0?K(Ce(s,i),n.shape):s},b:()=>{let s=W(e,ge(n,"float32")),i=Wt(r.shape,a);i.length>0&&(s=K(Ce(s,i),r.shape));let o=ht(r);return kt(Te(s,ge(o,"float32")))}}}},oR={kernelName:hs,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[a,s,i,o]=t,l=o==null?Ee(1):o,c=Wt(s.shape,a.shape),u=[];if(s.rank===1){for(let m=0;m<a.shape.length-1;++m)u.push(a.shape[m]);u.push(1)}let h=_e(a,s),d=W(e,l),p=cd(oe(i,Ee(r))),f=W(W(W(p,p),p),Ee(-.5));return{x:()=>s.rank===1?K(W(W(e,wa(K(p,[1,1,1,s.shape[0]]),u)),l),a.shape):K(W(W(e,p),l),a.shape),mean:()=>{let m=W(W(p,Ee(-1)),d);return s.rank===1&&(m=Ce(m,c)),K(m,s.shape)},variance:()=>{let m=W(W(f,h),d);return s.rank===1&&(m=Ce(m,c)),K(m,s.shape)},scale:()=>{let m=W(h,p),A=W(e,m);return s.rank===1&&(A=Ce(A,c)),K(A,s.shape)},offset:()=>{let m=e;return s.rank===1&&(m=Ce(m,c)),K(m,s.shape)}}}},lR={kernelName:eo,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,a]=t,{axis:s}=n,i=rr(s,r.shape)[0];return{x:()=>{let o=r.shape,l=a.size,c=o.slice(0,i),u=c.length,h=o.slice(s,o.length).slice(1),d=h.length,p=J5(0,u),f=J5(u+1,u+1+d),m=Y5([c,[l],h]),A=K(e,m),y=K(a,[l]),g=Y5([[u],p,f]),w=st(A,g),x=Zf(w,y,r.shape[i]),_=Pm(g);return x=st(x,_),x},indices:()=>a}}};function J5(e,t){let n=[];for(let r=e;r<t;++r)n.push(r);return n}function Y5(e){let t=[];for(let n=0;n<e.length;++n)for(let r=0;r<e[n].length;++r)t.push(e[n][r]);return t}var uR={kernelName:ds,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>Ge(n),b:()=>Ge(r)}}},cR={kernelName:ro,gradFunc:e=>({x:()=>ge(e,"float32")})},hR={kernelName:ao,gradFunc:e=>({x:()=>Ge(e)})},dR={kernelName:so,gradFunc:e=>({x:()=>Ge(e)})},pR={kernelName:io,gradFunc:e=>({x:()=>Ge(e)})},fR={kernelName:ps,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:a}=n,s=Hn(r,0);return{x:()=>An(s,e,W(e,a))}}},mR={kernelName:uo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,oe(n,1))}}},AR={kernelName:fs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,ge(n,"float32"))}}},yR={kernelName:ng,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n;return{logits:()=>{let s=!0,i=Vn(r);return _e(e,W(Ce(e,a,s),i))}}}};function gR(e,t,n,r=5,a=1,s=1,i=.5){let o={x:e,y:t,dy:n},l={depthRadius:r,bias:a,alpha:s,beta:i};return L.runKernel($h,o,l)}var xR=P({localResponseNormalizationBackprop_:gR}),wR={kernelName:iu,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>xR(r,a,e,s,i,o,l)}}};function Q5(e,t,n,r){return t.rank<n.rank&&(t=K(t,ni(t.shape,r))),e.rank<n.rank&&(e=K(e,ni(e.shape,r))),{x:()=>W(e,ge(Qr(n,t),e.dtype))}}var ex={kernelName:ms,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:a}=r,s=t[0],i=t[1],o=rr(a,s.shape),l=Q5(e,i,s,o);return{x:()=>l.x()}}},_R={kernelName:As,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>W(e,ge(ea(n,r),"float32")),b:()=>W(e,ge(Iu(n,r),"float32"))}}};function bR(e,t,n,r,a,s=[1,1,1],i,o){let l=R(e,"dy","maxPool3dGrad"),c=R(t,"input","maxPool3dGrad"),u=R(n,"output","maxPool3dGrad"),h=l,d=c,p=u,f=!1;c.rank===4&&(f=!0,h=K(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),d=K(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]]),p=K(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),M(h.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${h.rank}.`),M(d.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${d.rank}.`),M(p.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${p.rank}.`),M(Tn(a,s),()=>`Error in maxPool3dGrad: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),o!=null&&M(qt(i),()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${o} but got pad ${i}.`);let m={dy:h,input:d,output:p},A={filterSize:r,strides:a,dilations:s,pad:i,dimRoundingMode:o},y=L.runKernel(Oh,m,A);return f?K(y,[y.shape[1],y.shape[2],y.shape[3],y.shape[4]]):y}var vR=P({maxPool3dGrad_:bR}),kR={kernelName:ou,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,dilations:o,pad:l,dimRoundingMode:c}=n,u=o==null?[1,1,1]:o;return{x:()=>vR(e,r,a,s,i,u,l,c)}}};function IR(e,t,n,r,a,s,i){let o=R(e,"dy","maxPoolGrad"),l=R(t,"input","maxPoolGrad"),c=R(n,"output","maxPoolGrad");M(l.rank===o.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`),M(o.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`),M(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),i!=null&&M(qt(s),()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`);let u={dy:o,input:l,output:c},h={filterSize:r,strides:a,pad:s,dimRoundingMode:i};return L.runKernel(Dh,u,h)}var NR=P({maxPoolGrad_:IR}),SR={kernelName:ys,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>NR(e,r,a,s,i,o)}}},TR={kernelName:gs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n,s=rr(a,r.shape),i=F5(r.shape,s)[1],o=Lt(i);return{x:()=>{let l=r.shape.slice();s.forEach(u=>{l[u]=1});let c=K(e,l);return Te(W(c,Cr(r.shape,"float32")),o)}}}},ER={kernelName:xs,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:a}=r,[s,i]=t,o=rr(a,s.shape),l=Q5(e,i,s,o);return{x:()=>l.x()}}},CR={kernelName:ws,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>W(e,ge(_a(n,r),"float32")),b:()=>W(e,ge(Hn(n,r),"float32"))}}},RR={kernelName:lu,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map(i=>i[0]);return{x:()=>Me(e,s,r.shape)}}},FR={kernelName:ho,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=Wt(n.shape,a);return s.length>0?K(Ce(e,s),n.shape):e},b:()=>{let s=W(e,kt(Vo(Te(n,r)))),i=Wt(r.shape,a);return i.length>0?K(Ce(s,i),r.shape):s}}}},MR={kernelName:_s,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=W(e,ge(r,"float32")),i=Wt(n.shape,a);return i.length>0?K(Ce(s,i),n.shape):s},b:()=>{let s=W(e,ge(n,"float32")),i=Wt(r.shape,a);return i.length>0?K(Ce(s,i),r.shape):s}}}},$R={kernelName:po,gradFunc:e=>({x:()=>kt(e)})},DR={kernelName:bs,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>Rt(n.shape,"float32")}}},OR={kernelName:go,gradFunc:e=>({x:()=>Ge(e)})},zR={kernelName:xo,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return nr(e,r).map(a=>()=>a)}},tx={kernelName:vs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map(i=>i[0]);return{x:()=>Me(e,s,r.shape)}}},PR={kernelName:ks,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,a]=t,s=n,i=r,o=gt(s.shape,i.shape);return{a:()=>{let l=ge(i,"float32"),c=W(e,W(l,Rr(s,_e(l,Ee(1))))),u=Wt(s.shape,o);return u.length>0&&(c=Ce(c,u)),K(c,s.shape)},b:()=>{let l=Hn(s,0),c=An(l,kn(s),Ge(s)),u=W(e,W(a,c)),h=Wt(i.shape,o);return h.length>0&&(u=Ce(u,h)),K(u,i.shape)}}}},LR={kernelName:Is,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,a=Hn(n,0);return{x:()=>An(a,e,W(e,r)),alpha:()=>{let s=An(a,Ge(e),W(e,n)),i=Wt(r.shape,e.shape);return i.length>0&&(s=Ce(s,i)),K(s,r.shape)}}}},WR={kernelName:os,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=Te(e,ge(r,"float32")),i=Wt(n.shape,a);return i.length>0?K(Ce(s,i),n.shape):s},b:()=>{let s=W(e,ge(n,"float32")),i=Wt(r.shape,a);i.length>0&&(s=K(Ce(s,i),r.shape));let o=ht(r);return kt(Te(s,ge(o,"float32")))}}}},BR={kernelName:_o,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,kt(ht(n)))}}},VR={kernelName:Ts,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=W(_a(n,6),qo(n));return{x:()=>W(e,ge(r,"float32"))}}},UR={kernelName:Ns,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,ge(qo(n),"float32"))}}},HR={kernelName:bo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>K(e,n.shape)}}},jR={kernelName:Ss,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>L.runKernel(Bh,a,n)}}},GR={kernelName:cu,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>L.runKernel(Wh,a,n)}}},qR={kernelName:Es,gradFunc:(e,t,n)=>{let{dims:r}=n,a=rr(r,e.shape);return{x:()=>Nn(e,a)}}},XR={kernelName:Cs,gradFunc:e=>({x:()=>Ge(e)})},KR={kernelName:Rs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>kt(Te(e,W(Rr(n,1.5),2)))}}},ZR={kernelName:ko,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>ge(Ge(n),"float32"),t:()=>W(e,ge(n,e.dtype)),e:()=>W(e,ge(Nu(n),e.dtype))}}},JR={kernelName:Io,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Hn(n,Ee(0)),a=Ee(q5),s=Ee(X5),i=W(e,s),o=W(W(e,a),Vn(ge(n,"float32")));return An(r,i,o)}}}},YR={kernelName:Ms,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,W(n,_e(Ee(1),n)))}}},QR={kernelName:To,gradFunc:e=>({x:()=>Ge(e)})},eF={kernelName:Fs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(bu(ge(n,"float32")),e)}}},tF={kernelName:So,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(Qh(ge(n,"float32")),e)}}},nF={kernelName:No,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:a,size:s}=n,i=r.shape,[o,l]=_5(r,a,s),c=[];for(let u=0;u<e.rank;u++)c.push([o[u],i[u]-o[u]-l[u]]);return{x:()=>ta(e,c)}}},rF={kernelName:Os,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:a}=n,s=!0,i=W(e,r);return{logits:()=>_e(i,W(Ce(i,[a],s),r))}}},aF={kernelName:Eo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,Qn(n))}}},nx={kernelName:hu,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:a}=n;return{x:()=>wu(e,r,a)}}},rx={kernelName:Co,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>dt(e,r)}}},sF={kernelName:$s,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,W(Yt(ge(n,"float32")),2))}}},iF={kernelName:du,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,W(ge(n,"float32"),2))}}},oF={kernelName:zs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=Ee(2);return{a:()=>W(e,W(a,_e(n,r))),b:()=>W(e,W(a,_e(r,n)))}}},lF={kernelName:Oo,gradFunc:e=>({x:()=>Ge(e)})},uF={kernelName:Ps,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=e,i=Wt(n.shape,a);return i.length>0&&(s=Ce(s,i)),K(s,n.shape)},b:()=>{let s=e,i=Wt(r.shape,a);return i.length>0&&(s=Ce(s,i)),K(kt(s),r.shape)}}}},cF={kernelName:Ds,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,a=r.shape.slice(),{axis:s}=n;rr(s,r.shape).forEach(l=>{a[l]=1});let i=K(e,a),o=W(i,Cr(r.shape,"float32"));return{x:()=>o}}},hF={kernelName:Fo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Te(e,ht(bu(n)))}}},dF={kernelName:Ls,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(_e(Ee(1),ht(n)),e)}}},pF={kernelName:ga,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:a}=n;return{x:()=>{let s=Ge(r);if(r.rank===1)for(let i=0;i<a[0];++i)s=oe(s,Me(e,[i*r.shape[0]],[r.shape[0]]));else if(r.rank===2)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)s=oe(s,Me(e,[i*r.shape[0],o*r.shape[1]],[r.shape[0],r.shape[1]]));else if(r.rank===3)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)for(let l=0;l<a[2];++l)s=oe(s,Me(e,[i*r.shape[0],o*r.shape[1],l*r.shape[2]],[r.shape[0],r.shape[1],r.shape[2]]));else if(r.rank===4)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)for(let l=0;l<a[2];++l)for(let c=0;c<a[3];++c)s=oe(s,Me(e,[i*r.shape[0],o*r.shape[1],l*r.shape[2],c*r.shape[3]],[r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${r.rank} tensors yet.`);return s}}}},fF={kernelName:Ws,gradFunc:(e,t,n)=>{let r=n,{perm:a}=r,s=Pm(a);return{x:()=>st(e,s)}}},mF={kernelName:$o,gradFunc:(e,t,n)=>{let r=n,{axis:a}=r;return{value:()=>Sn(e,a)}}},yF={kernelName:pu,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>AF(e,n)}}};function AF(e,t){let n=Ar(t,Ge(t)),r=Gs(e,n),a=ea(t,Ee(0,"int32")),s=r.rank-a.rank;for(let o=0;o<s;++o)a=Un(a,o+1);a=tr(a,Cr(r.shape,"bool"));let i=Ge(r);return An(a,r,i)}var gF={kernelName:Do,gradFunc:e=>({x:()=>Ge(e)})},xF=[Z5,xC,wC,_C,bC,vC,kC,IC,NC,SC,TC,EC,FC,DC,OC,zC,PC,LC,WC,BC,VC,UC,jC,HC,XC,KC,ZC,JC,YC,QC,WR,eR,tR,nR,rR,aR,iR,sR,oR,lR,uR,cR,hR,dR,pR,fR,mR,AR,yR,wR,ex,ex,_R,kR,SR,TR,ER,CR,RR,FR,MR,$R,DR,OR,zR,tx,tx,PR,LR,BR,VR,UR,HR,jR,GR,qR,XR,KR,ZR,JR,YR,QR,eF,tF,nF,rF,aF,nx,nx,rx,rx,sF,oF,iF,lF,uF,cF,hF,dF,pF,fF,mF,yF,gF];for(let e of xF)rg(e);j.prototype.abs=function(){return this.throwIfDisposed(),Pt(this)};j.prototype.acos=function(){return this.throwIfDisposed(),_f(this)};j.prototype.acosh=function(){return this.throwIfDisposed(),bf(this)};j.prototype.addStrict=function(e){return this.throwIfDisposed(),Bg(this,e)};j.prototype.add=function(e){return this.throwIfDisposed(),oe(this,e)};j.prototype.all=function(e,t){return this.throwIfDisposed(),Zh(this,e,t)};j.prototype.any=function(e,t){return this.throwIfDisposed(),yu(this,e,t)};j.prototype.argMax=function(e){return this.throwIfDisposed(),gu(this,e)};j.prototype.argMin=function(e){return this.throwIfDisposed(),vf(this,e)};j.prototype.asScalar=function(){return this.throwIfDisposed(),M(this.size===1,()=>"The array must have only 1 element."),K(this,[])};j.prototype.asType=function(e){return this.throwIfDisposed(),ge(this,e)};j.prototype.as1D=function(){return this.throwIfDisposed(),K(this,[this.size])};j.prototype.as2D=function(e,t){return this.throwIfDisposed(),K(this,[e,t])};j.prototype.as3D=function(e,t,n){return this.throwIfDisposed(),K(this,[e,t,n])};j.prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),K(this,[e,t,n,r])};j.prototype.as5D=function(e,t,n,r,a){return this.throwIfDisposed(),K(this,[e,t,n,r,a])};j.prototype.asin=function(){return this.throwIfDisposed(),kf(this)};j.prototype.asinh=function(){return this.throwIfDisposed(),If(this)};j.prototype.atan=function(){return this.throwIfDisposed(),Nf(this)};j.prototype.atan2=function(e){return this.throwIfDisposed(),Sf(this,e)};j.prototype.atanh=function(){return this.throwIfDisposed(),Tf(this)};j.prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),xu(this,e,t,n,r)};j.prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),wu(this,e,t)};j.prototype.batchNorm=function(e,t,n,r,a){return this.throwIfDisposed(),Hs(this,e,t,n,r,a)};j.prototype.broadcastTo=function(e){return this.throwIfDisposed(),_u(this,e)};j.prototype.cast=function(e){return this.throwIfDisposed(),ge(this,e)};j.prototype.ceil=function(){return this.throwIfDisposed(),Cf(this)};j.prototype.clipByValue=function(e,t){return this.throwIfDisposed(),mn(this,e,t)};j.prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof j&&(e=[e]),dt([this,...e],t)};j.prototype.conv1d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Jh(this,e,t,n,r,a,s)};j.prototype.conv2dTranspose=function(e,t,n,r,a){return this.throwIfDisposed(),Yh(this,e,t,n,r,a)};j.prototype.conv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Yr(this,e,t,n,r,a,s)};j.prototype.cos=function(){return this.throwIfDisposed(),bu(this)};j.prototype.cosh=function(){return this.throwIfDisposed(),Qh(this)};j.prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),ed(this,e,t,n)};j.prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),Ff(this,e,t)};j.prototype.depthwiseConv2D=function(e,t,n,r,a,s){return Mt("depthwiseConv2D is deprecated, use depthwiseConv2d instead"),this.throwIfDisposed(),js(this,e,t,n,r,a,s)};j.prototype.depthwiseConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),js(this,e,t,n,r,a,s)};j.prototype.dilation2d=function(e,t,n,r,a){return this.throwIfDisposed(),Mf(this,e,t,n,r,a)};j.prototype.divNoNan=function(e){return this.throwIfDisposed(),$f(this,e)};j.prototype.divStrict=function(e){return this.throwIfDisposed(),Vg(this,e)};j.prototype.div=function(e){return this.throwIfDisposed(),Te(this,e)};j.prototype.dot=function(e){return this.throwIfDisposed(),_g(this,e)};j.prototype.elu=function(){return this.throwIfDisposed(),Bo(this)};j.prototype.equalStrict=function(e){return this.throwIfDisposed(),Dg(this,e)};j.prototype.equal=function(e){return this.throwIfDisposed(),Qr(this,e)};j.prototype.erf=function(){return this.throwIfDisposed(),Df(this)};j.prototype.exp=function(){return this.throwIfDisposed(),Vn(this)};j.prototype.expandDims=function(e){return this.throwIfDisposed(),Un(this,e)};j.prototype.expm1=function(){return this.throwIfDisposed(),Of(this)};j.prototype.fft=function(){return this.throwIfDisposed(),Mu(this)};j.prototype.flatten=function(){return this.throwIfDisposed(),K(this,[this.size])};j.prototype.floor=function(){return this.throwIfDisposed(),Vo(this)};j.prototype.floorDiv=function(e){return this.throwIfDisposed(),Kh(this,e)};j.prototype.gather=function(e,t){return this.throwIfDisposed(),Gs(this,e,t)};j.prototype.greaterEqualStrict=function(e){return this.throwIfDisposed(),Og(this,e)};j.prototype.greaterEqual=function(e){return this.throwIfDisposed(),ea(this,e)};j.prototype.greaterStrict=function(e){return this.throwIfDisposed(),zg(this,e)};j.prototype.greater=function(e){return this.throwIfDisposed(),Hn(this,e)};j.prototype.ifft=function(){return this.throwIfDisposed(),Go(this)};j.prototype.irfft=function(){return this.throwIfDisposed(),Ad(this)};j.prototype.isFinite=function(){return this.throwIfDisposed(),bg(this)};j.prototype.isInf=function(){return this.throwIfDisposed(),vg(this)};j.prototype.isNaN=function(){return this.throwIfDisposed(),kg(this)};j.prototype.leakyRelu=function(e){return this.throwIfDisposed(),ku(this,e)};j.prototype.lessEqualStrict=function(e){return this.throwIfDisposed(),Pg(this,e)};j.prototype.lessEqual=function(e){return this.throwIfDisposed(),_a(this,e)};j.prototype.lessStrict=function(e){return this.throwIfDisposed(),Lg(this,e)};j.prototype.less=function(e){return this.throwIfDisposed(),Iu(this,e)};j.prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),Pf(this,e,t,n,r)};j.prototype.logSigmoid=function(){return this.throwIfDisposed(),Sg(this)};j.prototype.logSoftmax=function(e){return this.throwIfDisposed(),rd(this,e)};j.prototype.logSumExp=function(e,t){return this.throwIfDisposed(),Lf(this,e,t)};j.prototype.log=function(){return this.throwIfDisposed(),kn(this)};j.prototype.log1p=function(){return this.throwIfDisposed(),nd(this)};j.prototype.logicalAnd=function(e){return this.throwIfDisposed(),tr(this,e)};j.prototype.logicalNot=function(){return this.throwIfDisposed(),Nu(this)};j.prototype.logicalOr=function(e){return this.throwIfDisposed(),ad(this,e)};j.prototype.logicalXor=function(e){return this.throwIfDisposed(),Tg(this,e)};j.prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Ke(this,e,t,n)};j.prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),Su(this,e,t,n,r)};j.prototype.max=function(e,t){return this.throwIfDisposed(),jn(this,e,t)};j.prototype.maximumStrict=function(e){return this.throwIfDisposed(),Ug(this,e)};j.prototype.maximum=function(e){return this.throwIfDisposed(),Ar(this,e)};j.prototype.mean=function(e,t){return this.throwIfDisposed(),It(this,e,t)};j.prototype.min=function(e,t){return this.throwIfDisposed(),Ho(this,e,t)};j.prototype.minimumStrict=function(e){return this.throwIfDisposed(),Hg(this,e)};j.prototype.minimum=function(e){return this.throwIfDisposed(),qs(this,e)};j.prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),Bf(this,e,t)};j.prototype.modStrict=function(e){return this.throwIfDisposed(),jg(this,e)};j.prototype.mod=function(e){return this.throwIfDisposed(),sd(this,e)};j.prototype.mulStrict=function(e){return this.throwIfDisposed(),Gg(this,e)};j.prototype.mul=function(e){return this.throwIfDisposed(),W(this,e)};j.prototype.neg=function(){return this.throwIfDisposed(),kt(this)};j.prototype.norm=function(e,t,n){return this.throwIfDisposed(),xd(this,e,t,n)};j.prototype.notEqualStrict=function(e){return this.throwIfDisposed(),Wg(this,e)};j.prototype.notEqual=function(e){return this.throwIfDisposed(),ba(this,e)};j.prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),Lo(this,e,t,n)};j.prototype.onesLike=function(){return this.throwIfDisposed(),In(this)};j.prototype.pad=function(e,t){return this.throwIfDisposed(),ta(this,e,t)};j.prototype.pool=function(e,t,n,r,a){return this.throwIfDisposed(),Rg(this,e,t,n,r,a)};j.prototype.powStrict=function(e){return this.throwIfDisposed(),qg(this,e)};j.prototype.pow=function(e){return this.throwIfDisposed(),Rr(this,e)};j.prototype.prelu=function(e){return this.throwIfDisposed(),Eu(this,e)};j.prototype.prod=function(e,t){return this.throwIfDisposed(),od(this,e,t)};j.prototype.reciprocal=function(){return this.throwIfDisposed(),Vf(this)};j.prototype.relu=function(){return this.throwIfDisposed(),Fr(this)};j.prototype.relu6=function(){return this.throwIfDisposed(),ud(this)};j.prototype.reshapeAs=function(e){return this.throwIfDisposed(),K(this,e.shape)};j.prototype.reshape=function(e){return this.throwIfDisposed(),K(this,e)};j.prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),H5(this,e,t,n)};j.prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),j5(this,e,t,n)};j.prototype.reverse=function(e){return this.throwIfDisposed(),Nn(this,e)};j.prototype.rfft=function(){return this.throwIfDisposed(),$u(this)};j.prototype.round=function(){return this.throwIfDisposed(),Uf(this)};j.prototype.rsqrt=function(){return this.throwIfDisposed(),cd(this)};j.prototype.selu=function(){return this.throwIfDisposed(),hd(this)};j.prototype.separableConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Hf(this,e,t,n,r,a,s)};j.prototype.sigmoid=function(){return this.throwIfDisposed(),Qn(this)};j.prototype.sign=function(){return this.throwIfDisposed(),jf(this)};j.prototype.sin=function(){return this.throwIfDisposed(),dd(this)};j.prototype.sinh=function(){return this.throwIfDisposed(),pd(this)};j.prototype.slice=function(e,t){return this.throwIfDisposed(),Me(this,e,t)};j.prototype.softmax=function(e){return this.throwIfDisposed(),Fu(this,e)};j.prototype.softplus=function(){return this.throwIfDisposed(),Uo(this)};j.prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),Tu(this,e,t)};j.prototype.split=function(e,t){return this.throwIfDisposed(),sn(this,e,t)};j.prototype.sqrt=function(){return this.throwIfDisposed(),Yt(this)};j.prototype.square=function(){return this.throwIfDisposed(),ht(this)};j.prototype.squaredDifference=function(e){return this.throwIfDisposed(),Du(this,e)};j.prototype.squaredDifferenceStrict=function(e){return this.throwIfDisposed(),Xg(this,e)};j.prototype.squeeze=function(e){return this.throwIfDisposed(),va(this,e)};j.prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof j?[this,e]:[this,...e];return Sn(n,t)};j.prototype.step=function(e){return this.throwIfDisposed(),qo(this,e)};j.prototype.stridedSlice=function(e,t,n,r,a,s,i,o){return this.throwIfDisposed(),qf(this,e,t,n,r,a,s,i,o)};j.prototype.subStrict=function(e){return this.throwIfDisposed(),Kg(this,e)};j.prototype.sub=function(e){return this.throwIfDisposed(),_e(this,e)};j.prototype.sum=function(e,t){return this.throwIfDisposed(),Ce(this,e,t)};j.prototype.tan=function(){return this.throwIfDisposed(),Xf(this)};j.prototype.tanh=function(){return this.throwIfDisposed(),Wo(this)};j.prototype.tile=function(e){return this.throwIfDisposed(),wa(this,e)};j.prototype.toBool=function(){return this.throwIfDisposed(),ge(this,"bool")};j.prototype.toFloat=function(){return this.throwIfDisposed(),ge(this,"float32")};j.prototype.toInt=function(){return this.throwIfDisposed(),ge(this,"int32")};j.prototype.topk=function(e,t){return this.throwIfDisposed(),Kf(this,e,t)};j.prototype.transpose=function(e){return this.throwIfDisposed(),st(this,e)};j.prototype.unique=function(e){return this.throwIfDisposed(),gd(this,e)};j.prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),Zf(this,e,t)};j.prototype.unstack=function(e){return this.throwIfDisposed(),nr(this,e)};j.prototype.where=function(e,t){return this.throwIfDisposed(),An(e,this,t)};j.prototype.zerosLike=function(){return this.throwIfDisposed(),Ge(this)};function Ie(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&k.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var wF=Mr.whereImpl,t0=class extends Zl{constructor(){super();this.blockSize=48,this.firstUse=!0,this.data=new ph(this,Bn())}write(e,t,n){this.firstUse&&(this.firstUse=!1,Q().get("IS_NODE")&&F.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={};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&&k.isString(n[0])){let a=n.map(s=>k.encodeString(s));r=this.write(a,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}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){this.data.set(e,{values:t,dtype:r,refCount:1})}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),a=this.readSync(n.imag.dataId);return F.mergeRealAndImagArrays(r,a)}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=>k.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return He(e.shape,e.dtype,n)}makeOutput(e,t,n){let r=this.write(e,t,n);return Bn().makeTensorFromDataId(r,t,n,this)}disposeData(e){if(this.data.has(e)){let{complexTensorInfos:t}=this.data.get(e);t!=null&&(this.disposeData(t.real.dataId),this.disposeData(t.imag.dataId)),this.data.delete(e)}}disposeIntermediateTensorInfo(e){let t=e.dataId;if(this.data.has(t)){let n=this.data.get(t);n.refCount--,n.refCount<1&&this.disposeData(t)}}async time(e){let t=k.now();return e(),{kernelMs:k.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){Ie([e],"where");let t=this.readSync(e.dataId);return wF(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}},em={};Pe(em,{addImpl:()=>sx,bincountImpl:()=>Hm,bincountReduceImpl:()=>ix,ceilImpl:()=>ox,concatImpl:()=>jm,expImpl:()=>lx,expm1Impl:()=>ux,floorImpl:()=>cx,gatherV2Impl:()=>hx,greaterImpl:()=>dx,lessImpl:()=>px,linSpaceImpl:()=>fx,logImpl:()=>mx,maxImpl:()=>Ax,maximumImpl:()=>yx,minimumImpl:()=>gx,multiplyImpl:()=>Gm,negImpl:()=>xx,notEqualImpl:()=>wx,prodImpl:()=>_x,rangeImpl:()=>Xm,rsqrtImpl:()=>bx,simpleAbsImpl:()=>ax,sliceImpl:()=>Ud,squaredDifferenceImpl:()=>vx,stridedSliceImpl:()=>kx,subImpl:()=>Ix,tileImpl:()=>Nx,topKImpl:()=>Sx,transposeImpl:()=>qm,uniqueImpl:()=>Tx});function ax(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}var _F=e=>{let{x:t}=e.inputs,n=e.backend;Ie(t,"abs");let r=new Float32Array(k.sizeFromShape(t.shape)),a=n.data.get(t.dataId).values;return r=ax(a),n.makeOutput(r,t.shape,"float32")},bF={kernelName:Di,backendName:"cpu",kernelFunc:_F};function $t(e){return(t,n,r,a,s)=>{let i=F.assertAndGetBroadcastShape(t,n),o=i.length,l=k.computeStrides(i),c=k.sizeFromShape(i),u=k.getTypedArrayFromDType(s,c),h=t.length,d=n.length,p=k.computeStrides(t),f=k.computeStrides(n),m=F.getBroadcastDims(t,i),A=F.getBroadcastDims(n,i);if(m.length+A.length===0)for(let y=0;y<u.length;++y)u[y]=e(r[y%r.length],a[y%a.length]);else for(let y=0;y<u.length;++y){let g=k.indexToLoc(y,o,l),w=g.slice(-h);m.forEach(T=>w[T]=0);let x=k.locToIndex(w,h,p),_=g.slice(-d);A.forEach(T=>_[T]=0);let b=k.locToIndex(_,d,f);u[y]=e(r[x],a[b])}return[u,i]}}function En(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,o=n.makeTensorInfo(r.shape,"complex64"),l=n.data.get(o.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",s),imag:n.makeTensorInfo(a.shape,"float32",i)},o}var vF={kernelName:xh,backendName:"cpu",kernelFunc:En};function Hd(e,t,n="float32"){if(n==="complex64"){let a=Hd(e,t,"float32"),s=Hd(e,t,"float32");return En({inputs:{real:a,imag:s},backend:e})}let r=k.makeZerosTypedArray(k.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function Pr(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 kF={kernelName:ro,backendName:"cpu",kernelFunc:Pr};function ai(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.real,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var IF={kernelName:Lh,backendName:"cpu",kernelFunc:ai};function Ra(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if(s==="complex64"){if(a.dtype==="complex64")return Pr({inputs:{x:a},backend:n});let i=Hd(n,a.shape,a.dtype),o=Ra({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),l=En({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}if(a.dtype==="complex64"){let i=ai({inputs:{input:a},backend:n}),o=Ra({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!k.hasEncodingLoss(a.dtype,s)){let i=Pr({inputs:{x:a},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32"){let i=n.data.get(a.dataId).values,o=Int32Array.from(i);return n.makeTensorInfo(a.shape,"int32",o)}if(s==="bool"){let i=n.data.get(a.dataId).values,o=k.toTypedArray([0],a.dtype),[l,c]=$t((u,h)=>u!==h?1:0)(a.shape,[],i,o,"bool");return n.makeTensorInfo(c,"bool",l)}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}var NF={kernelName:ts,backendName:"cpu",kernelFunc:Ra};function Xt(e,t,n,r){return n==null?({inputs:a,backend:s})=>{let{a:i,b:o}=a,l=s;Ie([i,o],e);let c=l.data.get(i.dataId).values,u=l.data.get(o.dataId).values,h=r||i.dtype,[d,p]=t(i.shape,o.shape,c,u,h);return l.makeTensorInfo(p,h,d)}:({inputs:a,backend:s})=>{let{a:i,b:o}=a,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let c=Ra({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),u=l.data.get(c.dataId),h=u.complexTensorInfos.real,d=u.complexTensorInfos.imag,p=l.data.get(h.dataId).values,f=l.data.get(d.dataId).values,m=Ra({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),A=l.data.get(m.dataId),y=A.complexTensorInfos.real,g=A.complexTensorInfos.imag,w=l.data.get(y.dataId).values,x=l.data.get(g.dataId).values,[_,b,T]=n(i.shape,o.shape,p,f,w,x),S=l.makeTensorInfo(T,"float32",_),N=l.makeTensorInfo(T,"float32",b),C=En({inputs:{real:S,imag:N},backend:l});return l.disposeIntermediateTensorInfo(c),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(S),l.disposeIntermediateTensorInfo(N),C}else{let c=l.data.get(i.dataId).values,u=l.data.get(o.dataId).values,h=r||i.dtype,[d,p]=t(i.shape,o.shape,c,u,h);return l.makeTensorInfo(p,h,d)}}}function Km(e){return(t,n,r,a,s,i)=>{let o=F.assertAndGetBroadcastShape(t,n),l=k.sizeFromShape(o),c=o.length,u=k.computeStrides(o),h=k.getTypedArrayFromDType("float32",l),d=k.getTypedArrayFromDType("float32",l),p=F.getBroadcastDims(t,o),f=F.getBroadcastDims(n,o),m=F.mergeRealAndImagArrays(r,a),A=F.mergeRealAndImagArrays(s,i),y=t.length,g=k.computeStrides(t),w=n.length,x=k.computeStrides(n);if(p.length+f.length===0)for(let _=0;_<h.length;_++){let b=_%m.length,T=_%A.length,S=e(m[b*2],m[b*2+1],A[T*2],A[T*2+1]);h[_]=S.real,d[_]=S.imag}else for(let _=0;_<h.length;_++){let b=k.indexToLoc(_,c,u),T=b.slice(-y);p.forEach(D=>T[D]=0);let S=k.locToIndex(T,y,g),N=b.slice(-w);f.forEach(D=>N[D]=0);let C=k.locToIndex(N,w,x),$=e(m[S*2],m[S*2+1],A[C*2],A[C*2+1]);h[_]=$.real,d[_]=$.imag}return[h,d,o]}}var sx=$t((e,t)=>e+t),SF=Km((e,t,n,r)=>({real:e+n,imag:t+r})),Ku=Xt(Aa,sx,SF),TF={kernelName:Aa,backendName:"cpu",kernelFunc:Ku};function Hm(e,t,n,r,a){let s=k.sizeFromShape(r),i=k.makeZerosTypedArray(a,n);for(let o=0;o<e.length;o++){let l=e[o];if(l<0)throw new Error("Input x must be non-negative!");l>=a||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function ix(e,t,n,r=!1){let a=e.shape[0],s=e.shape[1],i=He([a,n],t.dtype);for(let o=0;o<a;o++)for(let l=0;l<s;l++){let c=e.get(o,l);if(c<0)throw new Error("Input x must be non-negative!");c>=n||(r?i.set(1,o,c):t.size>0?i.set(i.get(o,c)+t.get(o,l),o,c):i.set(i.get(o,c)+1,o,c))}return i}function il(e){return(t,n,r)=>{let a=k.getTypedArrayFromDType(n,t.length);for(let s=0;s<t.length;++s)a[s]=e(t[s],r);return a}}function lt(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;if(Ie(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,c=k.sizeFromShape(i.shape),u=n||i.dtype,h=k.getArrayFromDType(u,c);for(let d=0;d<c;++d)h[d]=t(l[d],a);return o.makeTensorInfo(i.shape,u,h)}}function ol(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;if(Ie(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,c=n||i.dtype,u=t(l,c,a);return o.makeTensorInfo(i.shape,c,u)}}var ox=il(e=>Math.ceil(e)),EF=ol(Ui,ox),CF={kernelName:Ui,backendName:"cpu",kernelFunc:EF};function jm(e,t,n,r){let a=k.getArrayFromDType(n,k.sizeFromShape(t));if(r&&n!=="string"){let s=0;e.forEach(i=>{let o=k.sizeFromShape(i.shape);a.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=n==="string"?F.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let c=0;c<i.shape[0];++c){let u=c*t[1]+s;for(let h=0;h<i.shape[1];++h)a[u+h]=o[l++]}s+=i.shape[1]})}return a}var lx=il(e=>Math.exp(e)),Ex=ol(ls,lx),RF={kernelName:ls,backendName:"cpu",kernelFunc:Ex},ux=il(e=>Math.expm1(e)),FF=ol(Yi,ux),MF={kernelName:Yi,backendName:"cpu",kernelFunc:FF},cx=il(e=>Math.floor(e)),$F=ol(us,cx),DF={kernelName:us,backendName:"cpu",kernelFunc:$F};function hx(e,t,n){let r=He(n,e.dtype);for(let a=0;a<r.size;++a){let s=r.indexToLoc(a).slice(),i=s[0],o=s[2],l=t.locToIndex([i,o]);s[2]=t.values[l];let c=e.locToIndex(s);r.values[a]=e.values[c]}return r}var dx=$t((e,t)=>e>t?1:0),OF=Xt(no,dx,null,"bool"),zF={kernelName:no,backendName:"cpu",kernelFunc:OF},px=$t((e,t)=>e<t?1:0),PF=Xt(oo,px,null,"bool"),LF={kernelName:oo,backendName:"cpu",kernelFunc:PF};function fx(e,t,n){let r=(t-e)/(n-1),a=k.makeZerosTypedArray(n,"float32");a[0]=e;for(let s=1;s<a.length;s++)a[s]=a[s-1]+r;return a}var mx=il(e=>Math.log(e)),WF=ol(fs,mx),BF={kernelName:fs,backendName:"cpu",kernelFunc:WF};function Ax(e,t,n,r){let a=k.getTypedArrayFromDType(r,k.sizeFromShape(n));for(let s=0;s<a.length;++s){let i=s*t,o=e[i];for(let l=0;l<t;++l){let c=e[i+l];c>o&&(o=c)}a[s]=o}return a}var yx=$t((e,t)=>Math.max(e,t)),VF=Xt(As,yx),UF={kernelName:As,backendName:"cpu",kernelFunc:VF},gx=$t((e,t)=>Math.min(e,t)),HF=Xt(ws,gx),jF={kernelName:ws,backendName:"cpu",kernelFunc:HF},Gm=$t((e,t)=>e*t),GF=Km((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),Zm=Xt(_s,Gm,GF),qF={kernelName:_s,backendName:"cpu",kernelFunc:Zm};function xx(e,t,n){let r=k.createScalarValue(-1,n);return Gm([],t,r,e,n)}function XF(e){let{inputs:t,backend:n}=e,{x:r}=t;Ie(r,"neg");let a=n.data.get(r.dataId).values,[s,i]=xx(a,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,s)}var KF={kernelName:po,backendName:"cpu",kernelFunc:XF},wx=$t((e,t)=>e!==t?1:0),ZF=Xt(fo,wx,null,"bool"),JF={kernelName:fo,backendName:"cpu",kernelFunc:ZF};function qm(e,t,n,r,a){let s=t.length,i=k.sizeFromShape(t),o=k.computeStrides(t),l=k.computeStrides(a),c=k.getTypedArrayFromDType(n,k.sizeFromShape(a));for(let u=0;u<i;++u){let h=k.indexToLoc(u,s,o),d=new Array(h.length);for(let f=0;f<d.length;f++)d[f]=h[r[f]];let p=k.locToIndex(d,s,l);c[p]=e[u]}return c}function ar(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{perm:s}=n;Ie(a,"transpose");let i=a.shape.length,o=new Array(i);for(let u=0;u<o.length;u++)o[u]=a.shape[s[u]];let l=r.data.get(a.dataId).values,c=qm(l,a.shape,a.dtype,s,o);return{dataId:r.write(c,o,a.dtype),shape:o,dtype:a.dtype}}var YF={kernelName:Ws,backendName:"cpu",kernelFunc:ar};function _x(e,t,n,r){let[a,s]=F.computeOutAndReduceShapes(e,r),i=er(t,"int32"),o=k.makeZerosTypedArray(k.sizeFromShape(a),i),l=k.sizeFromShape(s);for(let c=0;c<o.length;++c){let u=c*l,h=1;for(let d=0;d<l;++d)h*=n[u+d];o[c]=h}return{outVals:o,outShape:a,outDtype:i}}function QF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Ie(a,"prod");let o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=F.getAxesPermutation(l,o),u=l,h=a,d=[];c!=null&&(h=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),d.push(h),u=F.getInnerMostAxes(u.length,o));let p=n.data.get(h.dataId).values,{outVals:f,outShape:m,outDtype:A}=_x(h.shape,h.dtype,p,u),y=m;return i&&(y=F.expandShapeToKeepDim(m,l)),d.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(y,A,f)}var eM={kernelName:wo,backendName:"cpu",kernelFunc:QF};function Xm(e,t,n,r){let a=e===t,s=e<t&&n<0,i=t<e&&n>1;if(a||s||i)return k.makeZerosTypedArray(0,r);let o=Math.abs(Math.ceil((t-e)/n)),l=k.makeZerosTypedArray(o,r);t<e&&n===1&&(n=-1),l[0]=e;for(let c=1;c<l.length;c++)l[c]=l[c-1]+n;return l}var bx=il(e=>1/Math.sqrt(e)),tM=ol(Rs,bx),nM={kernelName:Rs,backendName:"cpu",kernelFunc:tM};function Ud(e,t,n,r,a){let s=on.isSliceContinous(r,t,n),i=k.sizeFromShape(n),o=k.computeStrides(r);if(s){let h=on.computeFlatOffset(t,o);return a==="string"?e.slice(h,h+i):e.subarray(h,h+i)}let l=a==="string"?F.fromUint8ToStringArray(e):e,c=He(r,a,l),u=He(n,a);for(let h=0;h<u.size;++h){let d=u.indexToLoc(h),p=d.map((f,m)=>f+t[m]);u.set(c.get(...p),...d)}return a==="string"?F.fromStringArrayToUint8(u.values):u.values}function si(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r;Ie(a,"slice");let[o,l]=on.parseSliceParams(a,s,i);on.assertParamsValid(a,o,l);let c=n.data.get(a.dataId).values,u=Ud(c,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,u)}var rM={kernelName:No,backendName:"cpu",kernelFunc:si},vx=$t((e,t)=>{let n=e-t;return n*n}),aM=Xt(zs,vx),sM={kernelName:zs,backendName:"cpu",kernelFunc:aM};function kx(e,t,n,r){let a=He(e,t.dtype);for(let s=0;s<a.size;s++){let i=a.indexToLoc(s),o=new Array(i.length);for(let l=0;l<o.length;l++)o[l]=i[l]*n[l]+r[l];a.set(t.get(...o),...i)}return a}var Ix=$t((e,t)=>e-t),iM=Km((e,t,n,r)=>({real:e-n,imag:t-r})),Jm=Xt(Ps,Ix,iM),oM={kernelName:Ps,backendName:"cpu",kernelFunc:Jm};function Nx(e,t){let n=new Array(e.rank);for(let a=0;a<n.length;a++)n[a]=e.shape[a]*t[a];let r=He(n,e.dtype);for(let a=0;a<r.values.length;++a){let s=r.indexToLoc(a),i=new Array(e.rank);for(let l=0;l<i.length;l++)i[l]=s[l]%e.shape[l];let o=e.locToIndex(i);r.values[a]=e.values[o]}return r}function Sx(e,t,n,r,a){let s=t[t.length-1],[i,o]=[e.length/s,s],l=k.getTypedArrayFromDType(n,i*r),c=k.getTypedArrayFromDType("int32",i*r);for(let h=0;h<i;h++){let d=h*o,p=e.subarray(d,d+o),f=[];for(let g=0;g<p.length;g++)f.push({value:p[g],index:g});f.sort((g,w)=>w.value-g.value);let m=h*r,A=l.subarray(m,m+r),y=c.subarray(m,m+r);for(let g=0;g<r;g++)A[g]=f[g].value,y[g]=f[g].index}let u=t.slice();return u[u.length-1]=r,[He(u,n,l),He(u,"int32",c)]}function Tx(e,t,n,r){let a=k.parseAxisParam(t,n)[0],s=[1,n[0],1];for(let f=0;f<a;f++)s[0]*=n[f];s[1]=n[a];for(let f=a+1;f<n.length;f++)s[2]*=n[f];let i={},o=new Int32Array(n[a]),l=new zt(s,r,e),c=[],u=s[0]===1&&s[2]===1;for(let f=0;f<n[a];f++){let m;if(u)m=e[f].toString();else{let A=[];for(let y=0;y<s[0];y++)for(let g=0;g<s[2];g++)A.push(l.get(y,f,g));m=A.join(",")}if(i[m]!==void 0)o[f]=i[m];else{let A=Object.keys(i).length;i[m]=A,o[f]=A,c.push(f)}}let h=s.slice();h[1]=Object.keys(i).length;let d=new zt(h,r);c.forEach((f,m)=>{for(let A=0;A<s[0];A++)for(let y=0;y<s[2];y++)d.set(l.get(A,f,y),A,m,y)});let p=n.slice();return p[a]=h[1],{outputValues:d.values,outputShape:p,indices:o}}var n0="2.8.3";Au("cpu",()=>new t0,1);var Cx=lt(Xi,e=>e>=0?e:Math.exp(e)-1),lM={kernelName:Xi,backendName:"cpu",kernelFunc:Cx};function Rx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r;Ie([a],"leakyRelu");let i=k.sizeFromShape(a.shape),o=n.data.get(a.dataId).values,l=k.getTypedArrayFromDType("float32",i);for(let c=0;c<o.length;c++)l[c]=o[c]<0?s*o[c]:o[c];return n.makeTensorInfo(a.shape,"float32",l)}var uM={kernelName:ps,backendName:"cpu",kernelFunc:Rx},cM=$t((e,t)=>e<0?t*e:e);function Fx(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t;Ie([r,a],"prelu");let s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,[o,l]=cM(r.shape,a.shape,s,i,r.dtype);return n.makeTensorInfo(l,r.dtype,o)}var hM={kernelName:Is,backendName:"cpu",kernelFunc:Fx},Mx=lt(Ns,e=>Math.max(0,e)),dM={kernelName:Ns,backendName:"cpu",kernelFunc:Mx},$x=lt(Ts,e=>Math.min(Math.max(0,e),6)),pM={kernelName:Ts,backendName:"cpu",kernelFunc:$x};function Ym(e,t,n,r,a){if(n==="linear")return Pr({inputs:{x:t},backend:e});if(n==="relu")return Mx({inputs:{x:t},backend:e});if(n==="elu")return Cx({inputs:{x:t},backend:e});if(n==="relu6")return $x({inputs:{x:t},backend:e});if(n==="prelu")return Fx({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return Rx({inputs:{x:t},backend:e,attrs:{alpha:a}});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function xt(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=k.sizeFromShape(a.shape),o=k.inferFromImplicitShape(s,i),l=k.sizeFromShape(o);k.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${a.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),n.incRef(a.dataId);let c=n.data.get(a.dataId);if(c.complexTensorInfos!=null){let u=c.complexTensorInfos.real,h=c.complexTensorInfos.imag;u.shape=o,h.shape=o}return{dataId:a.dataId,shape:o,dtype:a.dtype}}var fM={kernelName:bo,backendName:"cpu",kernelFunc:xt};function Dx(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;Ie([a,s],"matMul");let l=a.shape.length,c=s.shape.length,u=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[c-1]:s.shape[c-2],d=i?a.shape[l-1]:a.shape[l-2],p=o?s.shape[c-2]:s.shape[c-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),A=k.sizeFromShape(f),y=k.sizeFromShape(m),g=A===y||A===1||y===1;k.assert(l>=2&&c>=2&&g,()=>`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 (${f}) and (${m}).`);let w=(A>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([d,p]);k.assert(u===h,()=>`Error in matMul: inner shapes (${u}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[A,u,d]:[A,d,u],_=o?[y,p,h]:[y,h,p],b=xt({inputs:{x:a},backend:n,attrs:{shape:x}}),T=xt({inputs:{x:s},backend:n,attrs:{shape:_}}),S=i?b.shape[1]:b.shape[2],N=i?b.shape[2]:b.shape[1],C=o?T.shape[1]:T.shape[2],$=Math.max(A,y),D=n.data.get(b.dataId).values,O=n.data.get(T.dataId).values,B=k.computeStrides(b.shape),H=k.computeStrides(T.shape),[X,Z,ee]=i?[B[0],1,B[1]]:[B[0],B[1],1],[Y,ie,re]=o?[1,H[1],H[0]]:[H[1],1,H[0]],ne=N*C,ae=He([$,N,C],b.dtype),de=ae.values,ue=n.blockSize;for(let me=0;me<$;me++)for(let ye=0;ye<N;ye+=ue)for(let be=0;be<C;be+=ue)for(let Ne=0;Ne<S;Ne+=ue){let Re=Math.min(ye+ue,N),Oe=Math.min(be+ue,C),qe=Math.min(Ne+ue,S);for(let et=ye;et<Re;et++)for(let We=be;We<Oe;We++){let it=0;for(let Ue=Ne;Ue<qe;Ue++){let ot=Math.min(me,A-1)*X,ut=Math.min(me,y-1)*re,_n=D[ot+et*Z+Ue*ee],Tt=O[Ue*Y+We*ie+ut];it+=_n*Tt}de[me*ne+(et*C+We)]+=it}}return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(T),n.makeTensorInfo(w,ae.dtype,ae.values)}var mM={kernelName:es,backendName:"cpu",kernelFunc:Dx};function AM(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:c,activation:u,leakyreluAlpha:h}=r,d,p,f,m=[];d=Dx({inputs:{a,b:s},attrs:{transposeA:l,transposeB:c},backend:n}),i&&(p=Ku({inputs:{a:d,b:i},backend:n}),m.push(d),d=p),u&&(f=Ym(n,d,u,o,h),m.push(d),d=f);for(let A of m)n.disposeIntermediateTensorInfo(A);return d}var yM={kernelName:Bs,backendName:"cpu",kernelFunc:AM},gM=lt(Oi,e=>Math.acos(e)),xM={kernelName:Oi,backendName:"cpu",kernelFunc:gM},wM=lt(zi,e=>Math.acosh(e)),_M={kernelName:zi,backendName:"cpu",kernelFunc:wM};function bM(e){let{inputs:t,backend:n}=e,r=t;Ie(t,"addN");let a=r.map(o=>n.data.get(o.dataId).values),s=He(r[0].shape,r[0].dtype),i=s.values;for(let o=0;o<r.length;o++){let l=a[o];for(let c=0;c<i.length;c++)i[c]+=l[c]}return n.makeTensorInfo(s.shape,s.dtype,s.values)}var vM={kernelName:Ja,backendName:"cpu",kernelFunc:bM};function kM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Ie(a,"all");let o=k.parseAxisParam(s,a.shape),l=o,c=F.getAxesPermutation(l,a.shape.length),u=a;c!=null&&(u=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),l=F.getInnerMostAxes(l.length,a.shape.length)),F.assertAxesAreInnerMostDims("all",l,u.shape.length);let[h,d]=F.computeOutAndReduceShapes(u.shape,l),p=k.sizeFromShape(d),f=k.makeZerosTypedArray(k.sizeFromShape(h),u.dtype),m=n.data.get(u.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,w=m[g];for(let x=0;x<p;++x){let _=m[g+x];w=w&&_}f[y]=w}c!=null&&n.disposeIntermediateTensorInfo(u);let A=n.makeTensorInfo(h,u.dtype,f);if(i){let y=F.expandShapeToKeepDim(h,o),g=xt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var IM={kernelName:fh,backendName:"cpu",kernelFunc:kM};function NM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Ie(a,"any");let o=k.parseAxisParam(s,a.shape),l=o,c=F.getAxesPermutation(l,a.shape.length),u=a;c!=null&&(u=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),l=F.getInnerMostAxes(l.length,a.shape.length)),F.assertAxesAreInnerMostDims("any",l,u.shape.length);let[h,d]=F.computeOutAndReduceShapes(u.shape,l),p=k.sizeFromShape(d),f=k.makeZerosTypedArray(k.sizeFromShape(h),u.dtype),m=n.data.get(u.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,w=m[g];for(let x=0;x<p;++x){let _=m[g+x];w=w||_}f[y]=w}c!=null&&n.disposeIntermediateTensorInfo(u);let A=n.makeTensorInfo(h,u.dtype,f);if(i){let y=F.expandShapeToKeepDim(h,o),g=xt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var SM={kernelName:mh,backendName:"cpu",kernelFunc:NM};function TM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;Ie(a,"argMax");let i=k.parseAxisParam(s,a.shape),o=F.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=ar({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=F.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],F.assertAxesAreInnerMostDims("argMax",i,l.shape.length);let[u,h]=F.computeOutAndReduceShapes(l.shape,i),d=k.sizeFromShape(u),p=k.makeZerosTypedArray(d,"int32"),f=k.sizeFromShape(h),m=n.data.get(l.dataId).values;for(let A=0;A<p.length;++A){let y=A*f,g=m[y],w=0;for(let x=0;x<f;++x){let _=m[y+x];_>g&&(g=_,w=x)}p[A]=w}return c.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.makeTensorInfo(u,"int32",p)}var EM={kernelName:Ya,backendName:"cpu",kernelFunc:TM};function CM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;Ie(a,"argMin");let i=k.parseAxisParam(s,a.shape),o=F.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=ar({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=F.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],F.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[u,h]=F.computeOutAndReduceShapes(l.shape,i),d=k.sizeFromShape(u),p=k.makeZerosTypedArray(d,"int32"),f=k.sizeFromShape(h),m=n.data.get(l.dataId).values;for(let A=0;A<p.length;++A){let y=A*f,g=m[y],w=0;for(let x=0;x<f;++x){let _=m[y+x];_<g&&(g=_,w=x)}p[A]=w}return c.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.makeTensorInfo(u,"int32",p)}var RM={kernelName:Jl,backendName:"cpu",kernelFunc:CM},FM=lt(Pi,e=>Math.asin(e)),MM={kernelName:Pi,backendName:"cpu",kernelFunc:FM},$M=lt(Li,e=>Math.asinh(e)),DM={kernelName:Li,backendName:"cpu",kernelFunc:$M},OM=lt(Wi,e=>Math.atan(e)),zM={kernelName:Wi,backendName:"cpu",kernelFunc:OM},PM=$t((e,t)=>Math.atan2(e,t)),LM=Xt(Vi,PM),WM={kernelName:Vi,backendName:"cpu",kernelFunc:LM},BM=lt(Bi,e=>Math.atanh(e)),VM={kernelName:Bi,backendName:"cpu",kernelFunc:BM};function Qm(e,t,n,r,a,s){let i=a.strideHeight,o=a.strideWidth,l=a.dilationHeight,c=a.dilationWidth,u=a.effectiveFilterHeight,h=a.effectiveFilterWidth,d=a.padInfo.top,p=a.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=He(a.outShape,n),A=m.values,y=a.outShape[1]*a.outShape[2]*a.outShape[3],g=a.outShape[2]*a.outShape[3],w=a.outShape[3];for(let x=0;x<a.batchSize;++x){let _=x*y,b=x*r[0];for(let T=0;T<a.inChannels;++T)for(let S=0;S<a.outHeight;++S){let N=S*i-d,C=Math.max(0,N),$=Math.min(a.inHeight,u+N),D=_+S*g;for(let O=0;O<a.outWidth;++O){let B=O*o-p,H=Math.max(0,B),X=Math.min(a.inWidth,h+B),Z=f,ee=0,Y=0;for(let re=C;re<$;re+=l){let ne=b+re*r[1];for(let ae=H;ae<X;ae+=c){let de=ne+ae*r[2],ue=e[de+T];s==="max"&&ue>Z?Z=ue:s==="avg"&&(ee+=ue,Y++)}if(isNaN(Z))break}let ie=D+O*w+T;A[ie]=s==="avg"?ee/Y:Z}}}return m}function Ox(e,t,n,r,a=!1,s=!1){let i=He(r.outShape,"int32"),o=r.strideHeight,l=r.strideWidth,c=r.dilationHeight,u=r.dilationWidth,h=r.effectiveFilterHeight,d=r.effectiveFilterWidth,p=r.padInfo.top,f=r.padInfo.left,m=He(t,n,e);for(let A=0;A<r.batchSize;++A)for(let y=0;y<r.inChannels;++y)for(let g=0;g<r.outHeight;++g){let w=g*o-p,x=w;for(;x<0;)x+=c;let _=Math.min(r.inHeight,h+w);for(let b=0;b<r.outWidth;++b){let T=b*l-f,S=T;for(;S<0;)S+=u;let N=Math.min(r.inWidth,d+T),C=Number.NEGATIVE_INFINITY,$=-1;for(let D=x;D<_;D+=c){let O=D-w;for(let B=S;B<N;B+=u){let H=B-T,X=m.get(A,D,B,y);X>C&&(C=X,a?$=s?((A*r.inHeight+D)*r.inWidth+B)*r.inChannels+y:(D*r.inWidth+B)*r.inChannels+y:$=O*d+H)}}i.set($,A,g,b,y)}}return i}function zx(e,t,n,r,a,s){let i=a.strideDepth,o=a.strideHeight,l=a.strideWidth,c=a.dilationDepth,u=a.dilationHeight,h=a.dilationWidth,d=a.effectiveFilterDepth,p=a.effectiveFilterHeight,f=a.effectiveFilterWidth,m=a.padInfo.front,A=a.padInfo.top,y=a.padInfo.left,g=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,w=He(a.outShape,n),x=w.values,_=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],b=a.outShape[2]*a.outShape[3]*a.outShape[4],T=a.outShape[3]*a.outShape[4],S=a.outShape[4];for(let N=0;N<a.batchSize;++N){let C=N*_,$=N*r[0];for(let D=0;D<a.inChannels;++D)for(let O=0;O<a.outDepth;++O){let B=O*i-m,H=B;for(;H<0;)H+=c;let X=Math.min(a.inDepth,d+B),Z=C+O*b;for(let ee=0;ee<a.outHeight;++ee){let Y=ee*o-A,ie=Y;for(;ie<0;)ie+=u;let re=Math.min(a.inHeight,p+Y),ne=Z+ee*T;for(let ae=0;ae<a.outWidth;++ae){let de=ae*l-y,ue=de;for(;ue<0;)ue+=h;let me=Math.min(a.inWidth,f+de),ye=ne+ae*S,be=g,Ne=0,Re=0;for(let qe=H;qe<X;qe+=c){let et=$+qe*r[1];for(let We=ie;We<re;We+=u){let it=et+We*r[2];for(let Ue=ue;Ue<me;Ue+=h){let ot=it+Ue*r[3],ut=e[ot+D];if(s==="max"&&ut>be?be=ut:s==="avg"&&(Ne+=ut,Re++),isNaN(be))break}if(isNaN(be))break}if(isNaN(be))break}let Oe=ye+D;x[Oe]=s==="avg"?Ne/Re:be}}}}return w}function UM(e,t){let n=He(t.outShape,"int32"),r=t.strideDepth,a=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,c=t.effectiveFilterDepth,u=t.effectiveFilterHeight,h=t.effectiveFilterWidth,d=t.padInfo.front,p=t.padInfo.top,f=t.padInfo.left;for(let m=0;m<t.batchSize;++m)for(let A=0;A<t.inChannels;++A)for(let y=0;y<t.outDepth;++y){let g=y*r-d,w=g;for(;w<0;)w+=i;let x=Math.min(t.inDepth,c+g);for(let _=0;_<t.outHeight;++_){let b=_*a-p,T=b;for(;T<0;)T+=o;let S=Math.min(t.inHeight,u+b);for(let N=0;N<t.outWidth;++N){let C=N*s-f,$=C;for(;$<0;)$+=l;let D=Math.min(t.inWidth,h+C),O=Number.NEGATIVE_INFINITY,B=-1;for(let H=w;H<x;H+=i){let X=H-g;for(let Z=T;Z<S;Z+=o){let ee=Z-b;for(let Y=$;Y<D;Y+=l){let ie=Y-C,re=e.get(m,H,Z,Y,A);re>=O&&(O=re,B=X*u*h+ee*u+ie)}}}n.set(B,m,y,_,N,A)}}}return n}function HM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;Ie(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(F.eitherStridesOrDilationsAreOne(i,c),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=F.computePool2DInfo(a.shape,s,i,c,o,l),h;if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))h=Pr({inputs:{x:a},backend:n});else{let d=n.data.get(a.dataId).values,p=k.computeStrides(a.shape),f=Qm(d,a.shape,a.dtype,p,u,"avg");h=n.makeTensorInfo(u.outShape,a.dtype,f.values)}return h}var jM={kernelName:Qa,backendName:"cpu",kernelFunc:HM};function GM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:c,dilations:u}=r;Ie(a,"avgPool3d");let h=u;h==null&&(h=[1,1,1]);let d=F.computePool3DInfo(a.shape,s,i,h,o,l,c),p=n.data.get(a.dataId).values,f=zx(p,a.shape,a.dtype,k.computeStrides(a.shape),d,"avg");return n.makeTensorInfo(f.shape,"float32",f.values)}var qM={kernelName:Yl,backendName:"cpu",kernelFunc:GM};function XM(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dilations:c,dimRoundingMode:u}=r;Ie([a,s],"avgPool3DGrad");let h=F.computePool3DInfo(s.shape,i,o,c,l,u),d=h.strideDepth,p=h.strideHeight,f=h.strideWidth,m=h.filterDepth,A=h.filterHeight,y=h.filterWidth,g=h.dilationDepth,w=h.dilationHeight,x=h.dilationWidth,_=h.effectiveFilterDepth,b=h.effectiveFilterHeight,T=h.effectiveFilterWidth,S=_-1-h.padInfo.front,N=T-1-h.padInfo.left,C=b-1-h.padInfo.top,$=He(s.shape,"float32"),D=1/(m*A*y),O=n.bufferSync(a);for(let B=0;B<h.batchSize;++B)for(let H=0;H<h.inChannels;++H)for(let X=0;X<h.inDepth;++X)for(let Z=0;Z<h.inHeight;++Z)for(let ee=0;ee<h.inWidth;++ee){let Y=X-S,ie=Z-C,re=ee-N,ne=0;for(let ae=0;ae<_;ae+=g){let de=(Y+ae)/d;if(!(de<0||de>=h.outDepth||Math.floor(de)!==de))for(let ue=0;ue<b;ue+=w){let me=(ie+ue)/p;if(!(me<0||me>=h.outHeight||Math.floor(me)!==me))for(let ye=0;ye<T;ye+=x){let be=(re+ye)/f;be<0||be>=h.outWidth||Math.floor(be)!==be||(ne+=O.get(B,de,me,be,H))}}}$.set(ne*D,B,X,Z,ee,H)}return n.makeTensorInfo($.shape,$.dtype,$.values)}var KM={kernelName:yh,backendName:"cpu",kernelFunc:XM};function ZM(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;Ie([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:c}=r,u=F.computePool2DInfo(i.shape,o,l,1,c),h=u.strideHeight,d=u.strideWidth,p=u.filterHeight,f=u.filterWidth,m=u.dilationHeight,A=u.dilationWidth,y=u.effectiveFilterHeight,g=u.effectiveFilterWidth,w=g-1-u.padInfo.left,x=y-1-u.padInfo.top,_=He(i.shape,"float32"),b=1/(p*f),T=n.data.get(a.dataId).values,S=He(a.shape,"float32",T);for(let N=0;N<u.batchSize;++N)for(let C=0;C<u.inChannels;++C)for(let $=0;$<u.inHeight;++$)for(let D=0;D<u.inWidth;++D){let O=$-x,B=D-w,H=0;for(let X=0;X<y;X+=m){let Z=(O+X)/h;if(!(Z<0||Z>=u.outHeight||Math.floor(Z)!==Z))for(let ee=0;ee<g;ee+=A){let Y=(B+ee)/d;Y<0||Y>=u.outWidth||Math.floor(Y)!==Y||(H+=S.get(N,Z,Y,C))}}_.set(H*b,N,$,D,C)}return n.makeTensorInfo(_.shape,_.dtype,_.values)}var JM={kernelName:Ah,backendName:"cpu",kernelFunc:ZM};function YM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,scale:s,offset:i,mean:o,variance:l}=t;k.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),k.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),k.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Ie([a,o,l,s,i],"batchNorm");let{varianceEpsilon:c}=r;c==null&&(c=.001);let u=n.data.get(a.dataId).values,h=n.data.get(o.dataId).values,d=n.data.get(l.dataId).values,p=s?n.data.get(s.dataId).values:new Float32Array([1]),f=i?n.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(u.length),A=f.length,y=p.length,g=d.length,w=h.length,x=0,_=0,b=0,T=0;for(let S=0;S<u.length;++S)m[S]=f[x++]+(u[S]-h[_++])*p[b++]/Math.sqrt(d[T++]+c),x>=A&&(x=0),_>=w&&(_=0),b>=y&&(b=0),T>=g&&(T=0);return n.makeTensorInfo(a.shape,a.dtype,m)}var QM={kernelName:hs,backendName:"cpu",kernelFunc:YM};function e$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;Ie([a],"batchToSpaceND");let o=s.reduce((y,g)=>y*g),l=F.getReshaped(a.shape,s,o),c=F.getPermuted(l.length,s.length),u=F.getReshapedPermuted(a.shape,s,o),h=F.getSliceBeginCoords(i,s.length),d=F.getSliceSize(u,i,s.length),p=xt({inputs:{x:a},backend:n,attrs:{shape:l}}),f=ar({inputs:{x:p},backend:n,attrs:{perm:c}}),m=xt({inputs:{x:f},backend:n,attrs:{shape:u}}),A=si({inputs:{x:m},backend:n,attrs:{begin:h,size:d}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),A}var t$={kernelName:Ql,backendName:"cpu",kernelFunc:e$};function n$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.data.get(a.dataId).values,l=n.data.get(s.dataId).values,c=Hm(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,c)}var r$={kernelName:gh,backendName:"cpu",kernelFunc:n$},a$=lt(ya,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e}),s$={kernelName:ya,backendName:"cpu",kernelFunc:a$},i$=e=>{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(k.sizeFromShape(t.shape)),a=n.data.get(t.dataId),s=a.complexTensorInfos.real,i=a.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let c=0;c<o.length;c++){let u=o[c],h=l[c];r[c]=Math.hypot(u,h)}return n.makeOutput(r,t.shape,"float32")},o$={kernelName:eu,backendName:"cpu",kernelFunc:i$};function ll(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.imag,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var l$={kernelName:Fh,backendName:"cpu",kernelFunc:ll};function ul(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=k.parseAxisParam(a,t[0].shape)[0],i=F.computeOutShape(t.map(m=>m.shape),s);if(k.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(m=>k.sizeFromShape(m.shape)>0);if(o.length===1)return Pr({inputs:{x:o[0]},backend:n});let l=o.map(m=>m.shape);if(F.assertParamsConsistent(l,s),o[0].dtype==="complex64"){let m=o.map(x=>ai({inputs:{input:x},backend:n})),A=o.map(x=>ll({inputs:{input:x},backend:n})),y=ul({inputs:m,backend:n,attrs:{axis:s}}),g=ul({inputs:A,backend:n,attrs:{axis:s}}),w=En({inputs:{real:y,imag:g},backend:n});return m.forEach(x=>n.disposeIntermediateTensorInfo(x)),A.forEach(x=>n.disposeIntermediateTensorInfo(x)),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),w}let c=o.map(m=>{let A=k.sizeFromShape(m.shape.slice(s));return xt({inputs:{x:m},backend:n,attrs:{shape:[-1,A]}})}),u=c.map(m=>({vals:n.data.get(m.dataId).values,shape:m.shape}));i=F.computeOutShape(c.map(m=>m.shape),1);let h=c[0].shape[0]===1,d=jm(u,i,t[0].dtype,h),p=F.computeOutShape(o.map(m=>m.shape),s),f=n.makeTensorInfo(p,t[0].dtype,d);return c.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var u$={kernelName:Hi,backendName:"cpu",kernelFunc:ul};function Px(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:c,dimRoundingMode:u}=r;Ie([a,s],"conv2d");let h=F.convertConv2DDataFormat(l),d=F.computeConv2DInfo(a.shape,s.shape,i,c,o,u,!1,h),p=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,A=d.dilationWidth,y=d.padInfo.left,g=d.padInfo.top,w=d.dataFormat==="channelsLast",x=new zt(d.outShape,a.dtype),_=k.computeStrides(a.shape),b=k.computeStrides(s.shape),T=_[0],S=w?_[1]:_[2],N=w?_[2]:1,C=w?1:_[1],$=x.strides[0],D=w?x.strides[1]:x.strides[2],O=w?x.strides[2]:1,B=w?1:x.strides[1],H=n.data.get(a.dataId).values,X=n.data.get(s.dataId).values,Z=x.values;for(let ee=0;ee<d.batchSize;++ee){let Y=ee*T,ie=ee*$;for(let re=0;re<d.outHeight;++re){let ne=ie+re*D,ae=re*d.strideHeight-g;for(let de=0;de<p;++de){let ue=ae+de*m;if(ue<0||ue>=d.inHeight)continue;let me=de*b[0],ye=Y+ue*S;for(let be=0;be<d.outWidth;++be){let Ne=ne+be*O,Re=be*d.strideWidth-y;for(let Oe=0;Oe<f;++Oe){let qe=Re+Oe*A;if(qe<0||qe>=d.inWidth)continue;let et=me+Oe*b[1],We=ye+qe*N,it=et;for(let Ue=0;Ue<d.inChannels;++Ue){let ot=H[We+Ue*C];for(let ut=0;ut<d.outChannels;++ut)Z[Ne+ut*B]+=ot*X[it+ut];it+=d.outChannels}}}}}}return n.makeTensorInfo(x.shape,x.dtype,Z)}var c$={kernelName:ns,backendName:"cpu",kernelFunc:Px};function h$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:c,filterShape:u}=r;Ie([a,s],"conv2dBackpropFilter");let h=F.convertConv2DDataFormat(l),d=F.computeConv2DInfo(a.shape,u,i,1,o,c,!1,h),{strideHeight:p,strideWidth:f,filterHeight:m,filterWidth:A}=d,y=d.dataFormat==="channelsLast",g=new zt(d.filterShape,"float32"),w=d.padInfo.left,x=d.padInfo.top,_=n.data.get(a.dataId).values,b=n.data.get(s.dataId).values,T=new zt(a.shape,a.dtype,_),S=new zt(s.shape,s.dtype,b);for(let N=0;N<m;++N){let C=Math.max(0,Math.ceil((x-N)/p)),$=Math.min(d.outHeight,(d.inHeight+x-N)/p);for(let D=0;D<A;++D){let O=Math.max(0,Math.ceil((w-D)/f)),B=Math.min(d.outWidth,(d.inWidth+w-D)/f);for(let H=0;H<d.inChannels;++H)for(let X=0;X<d.outChannels;++X){let Z=0;for(let ee=0;ee<d.batchSize;++ee)for(let Y=C;Y<$;++Y){let ie=N+Y*p-x;for(let re=O;re<B;++re){let ne=D+re*f-w;y?Z+=T.get(ee,ie,ne,H)*S.get(ee,Y,re,X):Z+=T.get(ee,H,ie,ne)*S.get(ee,X,Y,re)}}g.set(Z,N,D,H,X)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var d$={kernelName:wh,backendName:"cpu",kernelFunc:h$};function p$(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:c,dimRoundingMode:u}=r;Ie([a,s],"conv2dBackpropInput");let h=k.computeStrides(s.shape),d=k.computeStrides(a.shape),p=F.convertConv2DDataFormat(c),f=F.computeConv2DInfo(i,s.shape,o,1,l,u,!1,p),m=new zt(f.inShape,"float32"),A=m.values,y=n.data.get(a.dataId).values,g=n.data.get(s.dataId).values,[w,x,_]=h,{batchSize:b,filterHeight:T,filterWidth:S,inChannels:N,inHeight:C,inWidth:$,outChannels:D,outHeight:O,outWidth:B,strideHeight:H,strideWidth:X}=f;p=f.dataFormat;let Z=T-1-f.padInfo.top,ee=S-1-f.padInfo.left,Y=p==="channelsLast",ie=m.strides[0],re=Y?m.strides[1]:m.strides[2],ne=Y?m.strides[2]:1,ae=Y?1:m.strides[1],de=d[0],ue=Y?d[1]:d[2],me=Y?d[2]:1,ye=Y?1:d[1];for(let be=0;be<b;++be)for(let Ne=0;Ne<N;++Ne)for(let Re=0;Re<C;++Re){let Oe=Re-Z,qe=Math.max(0,Math.ceil(Oe/H)),et=Math.min(O,(T+Oe)/H);for(let We=0;We<$;++We){let it=We-ee,Ue=Math.max(0,Math.ceil(it/X)),ot=Math.min(B,(S+it)/X),ut=0;for(let Tt=qe;Tt<et;++Tt){let vt=Tt*H-Oe;for(let Jt=Ue;Jt<ot;++Jt){let pn=Jt*X-it,Jn=de*be+ue*Tt+me*Jt,bn=w*(T-1-vt)+x*(S-1-pn)+_*Ne;for(let an=0;an<D;++an){let zn=y[Jn+ye*an],jr=g[bn+an];ut+=zn*jr}}}let _n=ie*be+re*Re+ne*We+ae*Ne;A[_n]=ut}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}var f$={kernelName:rs,backendName:"cpu",kernelFunc:p$};function m$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r;Ie([a,s],"conv3d");let c=F.computeConv3DInfo(a.shape,s.shape,i,l,o),{filterDepth:u,filterHeight:h,filterWidth:d,dilationDepth:p,dilationHeight:f,dilationWidth:m,padInfo:A}=c,y=A.front,g=A.left,w=A.top,x=new zt(c.outShape,a.dtype),_=n.data.get(a.dataId).values,b=n.data.get(s.dataId).values,T=x.values,S=k.computeStrides(a.shape),N=k.computeStrides(s.shape);for(let C=0;C<c.batchSize;++C){let $=C*S[0],D=C*x.strides[0];for(let O=0;O<c.outDepth;++O){let B=D+O*x.strides[1],H=O*c.strideDepth-y;for(let X=0;X<u;++X){let Z=H+X*p;if(Z<0||Z>=c.inDepth)continue;let ee=X*N[0],Y=$+Z*S[1];for(let ie=0;ie<c.outHeight;++ie){let re=B+ie*x.strides[2],ne=ie*c.strideHeight-w;for(let ae=0;ae<h;++ae){let de=ne+ae*f;if(de<0||de>=c.inHeight)continue;let ue=ee+ae*N[1],me=Y+de*S[2];for(let ye=0;ye<c.outWidth;++ye){let be=re+ye*c.outChannels,Ne=ye*c.strideWidth-g;for(let Re=0;Re<d;++Re){let Oe=Ne+Re*m;if(Oe<0||Oe>=c.inWidth)continue;let qe=ue+Re*N[2],et=me+Oe*c.inChannels,We=qe;for(let it=0;it<c.inChannels;++it){let Ue=_[et+it];for(let ot=0;ot<c.outChannels;++ot)T[be+ot]+=Ue*b[We+ot];We+=c.outChannels}}}}}}}}return n.makeTensorInfo(x.shape,x.dtype,x.values)}var A$={kernelName:tu,backendName:"cpu",kernelFunc:m$};function y$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r;Ie([a,s],"conv3dBackpropFilterV2");let c=k.computeStrides(a.shape),u=k.computeStrides(s.shape),h=F.computeConv3DInfo(a.shape,l,i,1,o),d=h.strideDepth,p=h.strideHeight,f=h.strideWidth,m=h.filterDepth,A=h.filterHeight,y=h.filterWidth,g=new zt(h.filterShape,"float32"),w=g.values,[x,_,b,T]=g.strides,S=n.data.get(s.dataId).values,[N,C,$,D]=u,O=n.data.get(a.dataId).values,[B,H,X,Z]=c,ee=h.padInfo.front,Y=h.padInfo.left,ie=h.padInfo.top;for(let re=0;re<m;++re){let ne=Math.max(0,Math.ceil((ee-re)/d)),ae=Math.min(h.outDepth,(h.inDepth+ee-re)/d),de=re*x;for(let ue=0;ue<A;++ue){let me=Math.max(0,Math.ceil((ie-ue)/p)),ye=Math.min(h.outHeight,(h.inHeight+ie-ue)/p),be=ue*_+de;for(let Ne=0;Ne<y;++Ne){let Re=Math.max(0,Math.ceil((Y-Ne)/f)),Oe=Math.min(h.outWidth,(h.inWidth+Y-Ne)/f),qe=Ne*b+be;for(let et=0;et<h.inChannels;++et){let We=et*T+qe;for(let it=0;it<h.outChannels;++it){let Ue=0;for(let ot=0;ot<h.batchSize;++ot){let ut=ot*B,_n=ot*N;for(let Tt=ne;Tt<ae;++Tt){let vt=(re+Tt*d-ee)*H+ut,Jt=Tt*C+_n;for(let pn=me;pn<ye;++pn){let Jn=(ue+pn*p-ie)*X+vt,bn=pn*$+Jt;for(let an=Re;an<Oe;++an){let zn=(Ne+an*f-Y)*Z+Jn,jr=an*D+bn;Ue+=O[zn+et]*S[jr+it]}}}}w[We+it]=Ue}}}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var g$={kernelName:_h,backendName:"cpu",kernelFunc:y$};function x$(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r;Ie([a],"conv3dBackpropInputV2");let c=k.computeStrides(a.shape),u=k.computeStrides(s.shape),h=F.computeConv3DInfo(l,s.shape,o,1,i),d=new zt(h.inShape,"float32"),p=d.values,[f,m,A,y]=d.strides,g=n.data.get(a.dataId).values,[w,x,_,b]=c,T=n.data.get(s.dataId).values,[S,N,C,$]=u,{batchSize:D,filterDepth:O,filterHeight:B,filterWidth:H,inChannels:X,inDepth:Z,inHeight:ee,inWidth:Y,outChannels:ie,outDepth:re,outHeight:ne,outWidth:ae,strideDepth:de,strideHeight:ue,strideWidth:me}=h,ye=O-1-h.padInfo.front,be=B-1-h.padInfo.top,Ne=H-1-h.padInfo.left;for(let Re=0;Re<D;++Re)for(let Oe=0;Oe<X;++Oe)for(let qe=0;qe<Z;++qe){let et=qe-ye,We=Math.max(0,Math.ceil(et/de)),it=Math.min(re,(O+et)/de);for(let Ue=0;Ue<ee;++Ue){let ot=Ue-be,ut=Math.max(0,Math.ceil(ot/ue)),_n=Math.min(ne,(B+ot)/ue);for(let Tt=0;Tt<Y;++Tt){let vt=Tt-Ne,Jt=Math.max(0,Math.ceil(vt/me)),pn=Math.min(ae,(H+vt)/me),Jn=0;for(let bn=We;bn<it;++bn){let an=bn*de-et;for(let zn=ut;zn<_n;++zn){let jr=zn*ue-ot;for(let Gr=Jt;Gr<pn;++Gr){let ur=Gr*me-vt,vi=w*Re+x*bn+_*zn+b*Gr,cr=S*(O-1-an)+N*(B-1-jr)+C*(H-1-ur)+$*Oe;for(let Nr=0;Nr<ie;++Nr){let hr=g[vi+Nr],Ua=T[cr+Nr];Jn+=hr*Ua}}}}p[f*Re+m*qe+A*Ue+y*Tt+Oe]=Jn}}}return n.makeTensorInfo(d.shape,d.dtype,d.values)}var w$={kernelName:bh,backendName:"cpu",kernelFunc:x$},_$=lt(as,e=>Math.cos(e)),b$={kernelName:as,backendName:"cpu",kernelFunc:_$},v$=lt(ji,e=>Math.cosh(e)),k$={kernelName:ji,backendName:"cpu",kernelFunc:v$};function I$(e){let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:c}=r,[u,h,d,p]=a.shape,f=s.shape[0],[m,A]=o,y=He([f,m,A,p],"float32"),g=n.data.get(s.dataId).values,w=n.data.get(i.dataId).values,x=n.data.get(a.dataId).values,_=k.computeStrides(a.shape),b=k.computeStrides(y.shape);for(let T=0;T<f;T++){let S=T*4,N=g[S],C=g[S+1],$=g[S+2],D=g[S+3],O=w[T];if(O>=u)continue;let B=m>1?($-N)*(h-1)/(m-1):0,H=A>1?(D-C)*(d-1)/(A-1):0;for(let X=0;X<m;X++){let Z=m>1?N*(h-1)+X*B:.5*(N+$)*(h-1);if(Z<0||Z>h-1){for(let ee=0;ee<A;ee++)for(let Y=0;Y<p;Y++){let ie=Y+ee*b[2]+X*b[1]+T*b[0];y.values[ie]=c}continue}if(l==="bilinear"){let ee=Math.floor(Z),Y=Math.ceil(Z),ie=Z-ee;for(let re=0;re<A;re++){let ne=A>1?C*(d-1)+re*H:.5*(C+D)*(d-1);if(ne<0||ne>d-1){for(let me=0;me<p;me++){let ye=me+re*b[2]+X*b[1]+T*b[0];y.values[ye]=c}continue}let ae=Math.floor(ne),de=Math.ceil(ne),ue=ne-ae;for(let me=0;me<p;me++){let ye=me+ae*_[2]+ee*_[1]+O*_[0],be=x[ye];ye=me+de*_[2]+ee*_[1]+O*_[0];let Ne=x[ye];ye=me+ae*_[2]+Y*_[1]+O*_[0];let Re=x[ye];ye=me+de*_[2]+Y*_[1]+O*_[0];let Oe=x[ye],qe=be+(Ne-be)*ue,et=Re+(Oe-Re)*ue;ye=me+re*b[2]+X*b[1]+T*b[0],y.values[ye]=qe+(et-qe)*ie}}}else for(let ee=0;ee<A;++ee){let Y=A>1?C*(d-1)+ee*H:.5*(C+D)*(d-1);if(Y<0||Y>d-1){for(let ne=0;ne<p;ne++){let ae=ne+ee*b[2]+X*b[1]+T*b[0];y.values[ae]=c}continue}let ie=Math.round(Y),re=Math.round(Z);for(let ne=0;ne<p;ne++){let ae=ne+ie*_[2]+re*_[1]+O*_[0],de=ne+ee*b[2]+X*b[1]+T*b[0];y.values[de]=x[ae]}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var N$={kernelName:Gi,backendName:"cpu",kernelFunc:I$};function S$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;Ie(a,"cumsum");let l=F.getAxesPermutation([s],a.shape.length),c=a;l!=null&&(c=ar({inputs:{x:a},backend:n,attrs:{perm:l}}));let u=F.getInnerMostAxes(1,a.shape.length)[0];if(u!==c.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${c.shape.length-1} but got axis=${u}`);let h=er(c.dtype,"int32"),d=k.makeZerosTypedArray(k.sizeFromShape(c.shape),h),p=n.data.get(c.dataId).values,f=c.shape[c.shape.length-1],m=o?(y,g)=>y+f-g-1:(y,g)=>y+g;for(let y=0;y<p.length;y+=f)for(let g=0;g<f;g++){let w=m(y,g);if(g===0)d[w]=i?0:p[w];else{let x=m(y,g-1);d[w]=i?p[x]+d[x]:p[w]+d[x]}}let A=n.makeTensorInfo(c.shape,h,d);if(l!=null){let y=F.getUndoAxesPermutation(l),g=ar({inputs:{x:A},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(A),n.disposeIntermediateTensorInfo(c),g}return A}var T$={kernelName:ss,backendName:"cpu",kernelFunc:S$};function E$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(a.shape.length===1){let l=n.data.get(a.dataId).values,c=n.data.get(s.dataId).values,u=Hm(l,c,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}else if(a.shape.length===2){let l=n.bufferSync(a),c=n.bufferSync(s),u=ix(l,c,i,o);return n.makeTensorInfo(u.shape,s.dtype,u.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}var C$={kernelName:vh,backendName:"cpu",kernelFunc:E$};function R$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;k.assert(i==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`),k.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=a.shape[1],c=a.shape[2],u=a.shape[3],h=l*s,d=c*s,p=u/(s*s),f=n.data.get(a.dataId).values,m=new Float32Array(o*h*d*p),A=0;for(let y=0;y<o;++y)for(let g=0;g<h;++g){let w=Math.floor(g/s),x=g%s;for(let _=0;_<d;++_){let b=Math.floor(_/s),T=_%s,S=(x*s+T)*p;for(let N=0;N<p;++N){let C=N+S+u*(b+c*(w+l*y));m[A++]=f[C]}}}return n.makeTensorInfo([o,h,d,p],a.dtype,m)}var F$={kernelName:qi,backendName:"cpu",kernelFunc:R$};function Lx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:c}=r;Ie([a,s],"depthwiseConv2DNative");let u=k.computeStrides(a.shape),h=k.computeStrides(s.shape),d=l;d==null&&(d=[1,1]),k.assert(F.eitherStridesOrDilationsAreOne(i,d),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let p=F.computeConv2DInfo(a.shape,s.shape,i,d,o,c,!0),{filterHeight:f,filterWidth:m,dilationHeight:A,dilationWidth:y,padInfo:g}=p,w=g.left,x=g.top,_=p.outChannels/p.inChannels,b=new zt(p.outShape,a.dtype),T=n.data.get(a.dataId).values,S=n.data.get(s.dataId).values,N=b.values;for(let C=0;C<p.batchSize;++C){let $=C*u[0],D=C*b.strides[0];for(let O=0;O<p.outHeight;++O){let B=D+O*b.strides[1],H=O*p.strideHeight-w;for(let X=0;X<f;++X){let Z=H+X*A;if(Z<0||Z>=p.inHeight)continue;let ee=X*h[0],Y=$+Z*u[1];for(let ie=0;ie<p.outWidth;++ie){let re=B+ie*b.strides[2],ne=ie*p.strideWidth-x;for(let ae=0;ae<m;++ae){let de=ne+ae*y;if(de<0||de>=p.inWidth)continue;let ue=ee+ae*h[1],me=Y+de*p.inChannels,ye=re,be=ue;for(let Ne=0;Ne<p.inChannels;++Ne){let Re=T[me+Ne];for(let Oe=0;Oe<_;++Oe)N[ye+Oe]+=Re*S[be+Oe];ye+=_,be+=_}}}}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var M$={kernelName:is,backendName:"cpu",kernelFunc:Lx};function $$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,filterShape:u}=r;Ie([a,s],"depthwiseConv2dNativeBackpropFilter");let h=F.computeConv2DInfo(a.shape,u,i,o,l,c,!0),{strideHeight:d,strideWidth:p,filterHeight:f,filterWidth:m}=h,A=new zt(h.filterShape,"float32"),y=h.padInfo.left,g=h.padInfo.top,w=h.outChannels/h.inChannels,x=n.data.get(a.dataId).values,_=new zt(a.shape,a.dtype,x),b=n.data.get(s.dataId).values,T=new zt(s.shape,s.dtype,b);for(let S=0;S<f;++S){let N=Math.max(0,Math.ceil((g-S)/d)),C=Math.min(h.outHeight,(h.inHeight+g-S)/d);for(let $=0;$<m;++$){let D=Math.max(0,Math.ceil((y-$)/p)),O=Math.min(h.outWidth,(h.inWidth+y-$)/p);for(let B=0;B<h.outChannels;++B){let H=Math.trunc(B/w),X=B%w,Z=0;for(let ee=0;ee<h.batchSize;++ee)for(let Y=N;Y<C;++Y){let ie=S+Y*d-g;for(let re=D;re<O;++re){let ne=$+re*p-y;Z+=_.get(ee,ie,ne,H)*T.get(ee,Y,re,B)}}A.set(Z,S,$,H,X)}}}return n.makeTensorInfo(A.shape,A.dtype,A.values)}var D$={kernelName:kh,backendName:"cpu",kernelFunc:$$};function O$(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,inputShape:u}=r;Ie([a,s],"depthwiseConv2DNativeBackpropInput");let h=k.computeStrides(a.shape),d=k.computeStrides(s.shape),p=F.computeConv2DInfo(u,s.shape,i,o,l,c,!0),f=new zt(p.inShape,"float32"),m=f.values,[A,y,g]=f.strides,w=n.data.get(a.dataId).values,[x,_,b]=h,T=n.data.get(s.dataId).values,[S,N,C]=d,{batchSize:$,filterHeight:D,filterWidth:O,inChannels:B,inHeight:H,inWidth:X,outChannels:Z,outHeight:ee,outWidth:Y,strideHeight:ie,strideWidth:re}=p,ne=D-1-p.padInfo.top,ae=O-1-p.padInfo.left,de=Z/B;for(let ue=0;ue<$;++ue)for(let me=0;me<B;++me)for(let ye=0;ye<H;++ye){let be=ye-ne,Ne=Math.max(0,Math.ceil(be/ie)),Re=Math.min(ee,(D+be)/ie);for(let Oe=0;Oe<X;++Oe){let qe=Oe-ae,et=Math.max(0,Math.ceil(qe/re)),We=Math.min(Y,(O+qe)/re),it=0;for(let Ue=Ne;Ue<Re;++Ue){let ot=Ue*ie-be;for(let ut=et;ut<We;++ut){let _n=ut*re-qe,Tt=x*ue+_*Ue+b*ut,vt=S*(D-1-ot)+N*(O-1-_n)+C*me;for(let Jt=0;Jt<de;++Jt){let pn=me*de+Jt,Jn=w[Tt+pn],bn=T[vt+Jt];it+=Jn*bn}}}m[A*ue+y*ye+g*Oe+me]=it}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}var z$={kernelName:Ih,backendName:"cpu",kernelFunc:O$};function P$(e){let{inputs:t,backend:n}=e,{x:r}=t,a=k.sizeFromShape(r.shape),s=n.data.get(r.dataId).values,i=He([a,a],r.dtype),o=i.values;for(let c=0;c<s.length;c++)o[c*a+c]=s[c];let l=[...r.shape,...r.shape];return n.makeTensorInfo(l,i.dtype,i.values)}var L$={kernelName:Nh,backendName:"cpu",kernelFunc:P$},W$={kernelName:nu,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a}=e,{strides:s,pad:i,dilations:o}=n,l=t,c=l.data.get(r.dataId).values,u=r.shape.length,h=l.data.get(a.dataId).values,d=a.shape.length,{batchSize:p,inHeight:f,inWidth:m,inChannels:A,outHeight:y,outWidth:g,padInfo:w,strideHeight:x,strideWidth:_,filterHeight:b,filterWidth:T,dilationHeight:S,dilationWidth:N,outShape:C}=F.computeDilation2DInfo(r.shape,a.shape,s,i,"NHWC",o),$=k.sizeFromShape(C),D=C.length,O=k.getArrayFromDType(r.dtype,$);for(let B=0;B<p;++B)for(let H=0;H<y;++H){let X=H*x-w.top;for(let Z=0;Z<g;++Z){let ee=Z*_-w.left;for(let Y=0;Y<A;++Y){let ie=Number.MIN_SAFE_INTEGER;for(let ne=0;ne<b;++ne){let ae=X+ne*S;if(ae>=0&&ae<f)for(let de=0;de<T;++de){let ue=ee+de*N;if(ue>=0&&ue<m){let me=k.locToIndex([B,ae,ue,Y],u,k.computeStrides(r.shape)),ye=k.locToIndex([ne,de,Y],d,k.computeStrides(a.shape)),be=c[me]+h[ye];be>ie&&(ie=be)}}}let re=k.locToIndex([B,H,Z,Y],D,k.computeStrides(C));O[re]=ie}}}return{dataId:l.write(k.toTypedArray(O,r.dtype),C,r.dtype),shape:C,dtype:r.dtype}}},B$={kernelName:Th,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,c=t,u=k.toNestedArray(r.shape,c.data.get(r.dataId).values),h=k.toNestedArray(a.shape,c.data.get(a.dataId).values),{batchSize:d,inHeight:p,inWidth:f,inChannels:m,outHeight:A,outWidth:y,padInfo:g,strideHeight:w,strideWidth:x,filterHeight:_,filterWidth:b,dilationHeight:T,dilationWidth:S,outShape:N}=F.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);k.assert(s.rank===N.length,()=>`Error in ${Th}, dy must have the same rank as output ${N.length}, but got ${s.rank}`);let C=k.toNestedArray(N,c.data.get(s.dataId).values),$=k.makeZerosNestedTypedArray(a.shape,a.dtype);for(let D=0;D<d;++D)for(let O=0;O<A;++O){let B=O*w-g.top;for(let H=0;H<y;++H){let X=H*x-g.left;for(let Z=0;Z<m;++Z){let ee=Number.MIN_SAFE_INTEGER,Y=0,ie=0;for(let re=0;re<_;++re){let ne=B+re*T;if(ne>=0&&ne<p)for(let ae=0;ae<b;++ae){let de=X+ae*S;if(de>=0&&de<f){let ue=u[D][ne][de][Z]+h[re][ae][Z];ue>ee&&(ee=ue,Y=re,ie=ae)}}}$[Y][ie][Z]+=C[D][O][H][Z]}}}return{dataId:c.write(k.toTypedArray($,r.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},V$={kernelName:Sh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,c=t,u=k.toNestedArray(r.shape,c.data.get(r.dataId).values),h=k.toNestedArray(a.shape,c.data.get(a.dataId).values),{batchSize:d,inHeight:p,inWidth:f,inChannels:m,outHeight:A,outWidth:y,padInfo:g,strideHeight:w,strideWidth:x,filterHeight:_,filterWidth:b,dilationHeight:T,dilationWidth:S,outShape:N}=F.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);k.assert(s.rank===N.length,()=>`Error in ${Sh}, dy must have the same rank as output ${N.length}, but got ${s.rank}`);let C=k.toNestedArray(N,c.data.get(s.dataId).values),$=k.makeZerosNestedTypedArray(r.shape,r.dtype);for(let D=0;D<d;++D)for(let O=0;O<A;++O){let B=O*w-g.top;for(let H=0;H<y;++H){let X=H*x-g.left;for(let Z=0;Z<m;++Z){let ee=Number.MIN_SAFE_INTEGER,Y=B<0?0:B,ie=X<0?0:X;for(let re=0;re<_;++re){let ne=B+re*T;if(ne>=0&&ne<p)for(let ae=0;ae<b;++ae){let de=X+ae*S;if(de>=0&&de<f){let ue=u[D][ne][de][Z]+h[re][ae][Z];ue>ee&&(ee=ue,Y=ne,ie=de)}}}$[D][Y][ie][Z]+=C[D][O][H][Z]}}}return{dataId:c.write(k.toTypedArray($,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function U$(e){let{inputs:t,backend:n}=e,{dy:r,y:a}=t;Ie([r,a],"eluGrad");let s=new Float32Array(k.sizeFromShape(a.shape)),i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values;for(let l=0;l<i.length;++l){let c=i[l];c>=1?s[l]=o[l]:s[l]=o[l]*(c+1)}return n.makeTensorInfo(a.shape,"float32",s)}var H$={kernelName:Eh,backendName:"cpu",kernelFunc:U$},j$=$t((e,t)=>e===t?1:0),Wx=Xt(Zi,j$,null,"bool"),G$={kernelName:Zi,backendName:"cpu",kernelFunc:Wx},q$=F.ERF_P,X$=F.ERF_A1,K$=F.ERF_A2,Z$=F.ERF_A3,J$=F.ERF_A4,Y$=F.ERF_A5,Q$=lt(Ki,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+q$*n);return t*(1-((((Y$*r+J$)*r+Z$)*r+K$)*r+X$)*r*Math.exp(-n*n))}),eD={kernelName:Ki,backendName:"cpu",kernelFunc:Q$};function jd(e){let{inputs:t,backend:n,attrs:r}=e,{input:a}=t,{dim:s}=r,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(k.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),xt({inputs:{x:a},backend:n,attrs:{shape:o}})}var tD={kernelName:Ji,backendName:"cpu",kernelFunc:jd},nD=$t((e,t)=>e/t),eA=Xt(os,nD),tA={kernelName:os,backendName:"cpu",kernelFunc:eA};function Bx(e,t,n){let r=e.shape,a=r[0],s=r[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,c=[a,s],u=k.sizeFromShape(c),h=k.getTypedArrayFromDType("float32",u),d=k.getTypedArrayFromDType("float32",u);for(let A=0;A<a;A++){let y=si({inputs:{x:o},backend:n,attrs:{begin:[A,0],size:[1,s]}}),g=si({inputs:{x:l},backend:n,attrs:{begin:[A,0],size:[1,s]}}),w=En({inputs:{real:y,imag:g},backend:n}),{real:x,imag:_}=rD(w,t,n),b=F.mergeRealAndImagArrays(x,_);for(let T=0;T<s;T++){let S=F.getComplexWithIndex(b,T);h[A*s+T]=S.real,d[A*s+T]=S.imag}n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(w)}let p=n.makeTensorInfo(c,"float32",h),f=n.makeTensorInfo(c,"float32",d),m=En({inputs:{real:p,imag:f},backend:n});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),m}function rD(e,t,n){let r=k.sizeFromShape(e.shape),a=n.data.get(e.dataId),s=n.data.get(a.complexTensorInfos.real.dataId).values,i=n.data.get(a.complexTensorInfos.imag.dataId).values;if(aD(r)){let o=nA(s,i,r,t,n),l=[e.shape[0],e.shape[1]];if(t){let c=n.makeTensorInfo(l,"float32",o.real),u=n.makeTensorInfo(l,"float32",o.imag),h=n.makeTensorInfo([],"float32",k.createScalarValue(r,"float32")),d=Pr({inputs:{x:h},backend:n}),p=tA.kernelFunc({inputs:{a:c,b:h},backend:n}),f=tA.kernelFunc({inputs:{a:u,b:d},backend:n}),m=n.data.get(p.dataId).values,A=n.data.get(f.dataId).values;return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),{real:m,imag:A}}return o}else{let o=F.mergeRealAndImagArrays(s,i),l=sD(o,r,t);return F.splitRealAndImagArrays(l)}}function aD(e){return(e&e-1)==0}function nA(e,t,n,r,a){if(n===1)return{real:e,imag:t};let s=F.mergeRealAndImagArrays(e,t),i=n/2,o=F.complexWithEvenIndex(s),l=o.real,c=o.imag,u=[l.length],h=a.makeTensorInfo(u,"float32",l),d=a.makeTensorInfo(u,"float32",c),p=En({inputs:{real:h,imag:d},backend:a}),f=F.complexWithOddIndex(s),m=f.real,A=f.imag,y=[m.length],g=a.makeTensorInfo(y,"float32",m),w=a.makeTensorInfo(y,"float32",A),x=En({inputs:{real:g,imag:w},backend:a}),_=nA(l,c,i,r,a),b=_.real,T=_.imag,S=[b.length],N=a.makeTensorInfo(S,"float32",b),C=a.makeTensorInfo(S,"float32",T),$=En({inputs:{real:N,imag:C},backend:a}),D=nA(m,A,i,r,a),O=D.real,B=D.imag,H=[O.length],X=a.makeTensorInfo(H,"float32",O),Z=a.makeTensorInfo(H,"float32",B),ee=En({inputs:{real:X,imag:Z},backend:a}),Y=F.exponents(n,r),ie=[Y.real.length],re=a.makeTensorInfo(ie,"float32",Y.real),ne=a.makeTensorInfo(ie,"float32",Y.imag),ae=En({inputs:{real:re,imag:ne},backend:a}),de=Zm({inputs:{a:ae,b:ee},backend:a}),ue=Ku({inputs:{a:$,b:de},backend:a}),me=Jm({inputs:{a:$,b:de},backend:a}),ye=ai({inputs:{input:ue},backend:a}),be=ai({inputs:{input:me},backend:a}),Ne=ll({inputs:{input:ue},backend:a}),Re=ll({inputs:{input:me},backend:a}),Oe=ul({inputs:[ye,be],backend:a,attrs:{axis:0}}),qe=ul({inputs:[Ne,Re],backend:a,attrs:{axis:0}}),et=a.data.get(Oe.dataId).values,We=a.data.get(qe.dataId).values;return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(g),a.disposeIntermediateTensorInfo(w),a.disposeIntermediateTensorInfo(x),a.disposeIntermediateTensorInfo(N),a.disposeIntermediateTensorInfo(C),a.disposeIntermediateTensorInfo($),a.disposeIntermediateTensorInfo(X),a.disposeIntermediateTensorInfo(Z),a.disposeIntermediateTensorInfo(ee),a.disposeIntermediateTensorInfo(re),a.disposeIntermediateTensorInfo(ne),a.disposeIntermediateTensorInfo(ae),a.disposeIntermediateTensorInfo(de),a.disposeIntermediateTensorInfo(ue),a.disposeIntermediateTensorInfo(me),a.disposeIntermediateTensorInfo(ye),a.disposeIntermediateTensorInfo(Ne),a.disposeIntermediateTensorInfo(be),a.disposeIntermediateTensorInfo(Re),a.disposeIntermediateTensorInfo(Oe),a.disposeIntermediateTensorInfo(qe),{real:et,imag:We}}function sD(e,t,n){let r=new Float32Array(t*2);for(let a=0;a<t;a++){let s=0,i=0;for(let o=0;o<t;o++){let l=F.exponent(a*o,t,n),c=F.getComplexWithIndex(e,o);s+=c.real*l.real-c.imag*l.imag,i+=c.real*l.imag+c.imag*l.real}n&&(s/=t,i/=t),F.assignToTypedArray(r,s,i,a)}return r}function iD(e){let{inputs:t,backend:n}=e,{input:r}=t,a=k.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=a/s,o=xt({inputs:{x:r},backend:n,attrs:{shape:[i,s]}}),l=Bx(o,!1,n),c=xt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),c}var oD={kernelName:Ch,backendName:"cpu",kernelFunc:iD};function rA(e){let{backend:t,attrs:n}=e,{shape:r,value:a,dtype:s}=n,i=s||k.inferDtype(a),o=k.getArrayFromDType(i,k.sizeFromShape(r));return lD(o,a,i),t.makeTensorInfo(r,i,o)}var uD={kernelName:ru,backendName:"cpu",kernelFunc:rA};function lD(e,t,n){e.fill(t)}var cD={kernelName:Qi,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,a=n,s=k.getTypedArrayFromDType(r.dtype,k.sizeFromShape(r.shape)),[i,o,l,c]=r.shape,u=a.data.get(r.dataId).values;for(let h=0;h<i;h++){let d=h*l*o*c;for(let p=0;p<o;p++){let f=p*(l*c);for(let m=0;m<l;m++){let A=m*c;for(let y=0;y<c;y++){let g=[i,p,m,y][2],w=Math.round(l-g),x=d+f+A+y,_=u[x];if(w>=0&&w<l){let b=w*c,T=d+f+b+y;_=u[T]}s[x]=_}}}}return{dataId:a.write(s,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},hD=$t((e,t)=>Math.floor(e/t)),dD=Xt(cs,hD,null,"int32"),pD={kernelName:cs,backendName:"cpu",kernelFunc:dD};function fD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=Px({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d}});if(i){let A=m;m=Ku({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(A)}if(p){let A=m;m=Ym(n,m,p,o,f),n.disposeIntermediateTensorInfo(A)}return m}var mD={kernelName:Vs,backendName:"cpu",kernelFunc:fD};function AD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=Lx({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d}});if(i){let A=m;m=Ku({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(A)}if(p){let A=m;m=Ym(n,m,p,o,f),n.disposeIntermediateTensorInfo(A)}return m}var yD={kernelName:Us,backendName:"cpu",kernelFunc:AD};function gD(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=k.sizeFromShape(r.shape),i=a.shape,o=i[i.length-1],[l,c,u,h]=F.prepareAndValidate(r,a);if(c===0)return n.makeTensorInfo(l,r.dtype,[]);let d=He([c,u],r.dtype),p=n.data.get(a.dataId).values,f=n.data.get(r.dataId).values;for(let m=0;m<c;m++){let A=[],y=0;for(let g=0;g<o;g++){let w=p[m*o+g];y+=w*h[g],A.push(w)}if(y<0||y>=s/u)throw new Error(`Invalid indices: ${A} does not index into ${r.shape}`);for(let g=0;g<u;g++)d.values[m*u+g]=f[y*u+g]}return n.makeTensorInfo(l,d.dtype,d.values)}var xD={kernelName:to,backendName:"cpu",kernelFunc:gD};function wD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r;Ie([a,s],"gatherV2");let l=o;o==null&&(l=0);let c=k.sizeFromShape(s.shape),u=k.parseAxisParam(i,a.shape)[0],h=F.segment_util.collectGatherOpShapeInfo(a,s,u,l),d=xt({inputs:{x:a},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),p=xt({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,c/h.batchSize]}}),f=[h.batchSize,h.outerSize,c/h.batchSize,h.sliceSize],m=n.bufferSync(p),A=n.bufferSync(d),y=hx(A,m,f);return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.makeTensorInfo(h.outputShape,y.dtype,y.values)}var _D={kernelName:eo,backendName:"cpu",kernelFunc:wD},bD=$t((e,t)=>e>=t?1:0),vD=Xt(ds,bD,null,"bool"),kD={kernelName:ds,backendName:"cpu",kernelFunc:vD};function ID(e){let{inputs:t,backend:n}=e,{input:r}=t,a=k.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=a/s,o=xt({inputs:{x:r},backend:n,attrs:{shape:[i,s]}}),l=Bx(o,!0,n),c=xt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),c}var ND={kernelName:Rh,backendName:"cpu",kernelFunc:ID},SD=lt(ao,e=>Number.isFinite(e)?1:0,"bool"),TD={kernelName:ao,backendName:"cpu",kernelFunc:SD},ED=lt(so,e=>Math.abs(e)===Infinity?1:0,"bool"),CD={kernelName:so,backendName:"cpu",kernelFunc:ED},RD=lt(io,e=>Number.isNaN(e)?1:0,"bool"),FD={kernelName:io,backendName:"cpu",kernelFunc:RD},MD=$t((e,t)=>e<=t?1:0),$D=Xt(lo,MD,null,"bool"),DD={kernelName:lo,backendName:"cpu",kernelFunc:$D};function OD(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=fx(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}var zD={kernelName:Mh,backendName:"cpu",kernelFunc:OD},PD=lt(uo,e=>Math.log1p(e)),LD={kernelName:uo,backendName:"cpu",kernelFunc:PD},WD=$t((e,t)=>e&&t),BD=Xt(co,WD,null,"bool"),VD={kernelName:co,backendName:"cpu",kernelFunc:BD},UD=lt(au,e=>e?0:1,"bool"),HD={kernelName:au,backendName:"cpu",kernelFunc:UD},jD=$t((e,t)=>e||t),GD=Xt(su,jD,null,"bool"),qD={kernelName:su,backendName:"cpu",kernelFunc:GD};function XD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r;Ie(a,"LRN");let c=a.shape[3],u=c-1,h=n.data.get(a.dataId).values,d=k.sizeFromShape(a.shape),p=new Float32Array(d);function f(m){let A=m%c,y=m-A+Math.max(0,A-s),g=m-A+Math.min(A+s,u),w=0;for(;y<=g;y++){let x=h[y];w+=x*x}return w}for(let m=0;m<d;m++){let A=f(m),y=h[m]*Math.pow(i+o*A,-l);p[m]=y}return n.makeTensorInfo(a.shape,a.dtype,p)}var KD={kernelName:iu,backendName:"cpu",kernelFunc:XD};function ZD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:c,beta:u}=r;Ie(i,"LRNGrad");let h=k.sizeFromShape(i.shape),d=i.shape[3],p=n.data.get(i.dataId).values,f=n.data.get(a.dataId).values,m=n.data.get(s.dataId).values,A=new Float32Array(h),y=h;for(let g=0;g<y;g++){let w=g%d,x=g-w+Math.max(0,w-o),_=g-w+Math.min(d,w+o+1),b=0;for(let T=x;T<_;T++)b+=Math.pow(f[T],2);b=c*b+l;for(let T=x;T<_;T++){let S=-2*c*u*f[T]*m[g]/b;g===T&&(S+=Math.pow(b,-u)),S*=p[g],A[T]+=S}}return n.makeTensorInfo(i.shape,a.dtype,A)}var JD={kernelName:$h,backendName:"cpu",kernelFunc:ZD};function Vx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=n,l=a.shape,c=l.length,u=k.parseAxisParam(s,l),h=u,d=F.getAxesPermutation(h,c),p=o.data.get(a.dataId).values;if(d!=null){let x=new Array(c);for(let _=0;_<x.length;_++)x[_]=l[d[_]];p=qm(p,l,a.dtype,d,x),h=F.getInnerMostAxes(h.length,c),l=x}Ie(a,"max"),F.assertAxesAreInnerMostDims("max",h,c);let[f,m]=F.computeOutAndReduceShapes(l,h),A=k.sizeFromShape(m),y=Ax(p,A,f,a.dtype),g=o.write(y,f,a.dtype),w=f;return i&&(w=F.expandShapeToKeepDim(f,u)),{dataId:g,shape:w,dtype:a.dtype}}var YD={kernelName:ms,backendName:"cpu",kernelFunc:Vx};function QD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;Ie(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(F.eitherStridesOrDilationsAreOne(i,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=F.computePool2DInfo(a.shape,s,i,c,o,l),h;if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))h=Pr({inputs:{x:a},backend:n});else{let d=n.data.get(a.dataId).values,p=k.computeStrides(a.shape),f=Qm(d,a.shape,a.dtype,p,u,"max");h=n.makeTensorInfo(u.outShape,a.dtype,f.values)}return h}var eO={kernelName:ys,backendName:"cpu",kernelFunc:QD};function tO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:c,dilations:u}=r;Ie(a,"maxPool3d");let h=u;h==null&&(h=[1,1,1]);let d=F.computePool3DInfo(a.shape,s,i,h,o,l,c),p=n.data.get(a.dataId).values,f=zx(p,a.shape,a.dtype,k.computeStrides(a.shape),d,"max");return n.makeTensorInfo(f.shape,"float32",f.values)}var nO={kernelName:ou,backendName:"cpu",kernelFunc:tO};function rO(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dilations:c,dimRoundingMode:u}=r;Ie([a,s],"maxPool3DGrad");let h=F.computePool3DInfo(s.shape,i,o,c,l,u),d=n.bufferSync(s),p=UM(d,h),f=h.strideDepth,m=h.strideHeight,A=h.strideWidth,y=h.dilationDepth,g=h.dilationHeight,w=h.dilationWidth,x=h.effectiveFilterDepth,_=h.effectiveFilterHeight,b=h.effectiveFilterWidth,T=x-1-h.padInfo.front,S=b-1-h.padInfo.left,N=_-1-h.padInfo.top,C=He(s.shape,"float32"),$=n.bufferSync(a);for(let D=0;D<h.batchSize;++D)for(let O=0;O<h.inChannels;++O)for(let B=0;B<h.inDepth;++B)for(let H=0;H<h.inHeight;++H)for(let X=0;X<h.inWidth;++X){let Z=B-T,ee=H-N,Y=X-S,ie=0;for(let re=0;re<x;re+=y){let ne=(Z+re)/f;if(!(ne<0||ne>=h.outDepth||Math.floor(ne)!==ne))for(let ae=0;ae<_;ae+=g){let de=(ee+ae)/m;if(!(de<0||de>=h.outHeight||Math.floor(de)!==de))for(let ue=0;ue<b;ue+=w){let me=(Y+ue)/A;if(me<0||me>=h.outWidth||Math.floor(me)!==me)continue;let ye=x*_*b-1-p.get(D,ne,de,me,O),be=re*_*b+ae*b+ue,Ne=ye===be?1:0;Ne!==0&&(ie+=$.get(D,ne,de,me,O)*Ne)}}}C.set(ie,D,B,H,X,O)}return n.makeTensorInfo(C.shape,C.dtype,C.values)}var aO={kernelName:Oh,backendName:"cpu",kernelFunc:rO};function sO(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;Ie([s,i],"maxPoolGrad");let{filterSize:l,strides:c,pad:u,dimRoundingMode:h}=r,d=F.computePool2DInfo(o.shape,l,c,1,u,h),p=n.data.get(o.dataId).values,f=He(d.outShape,o.dtype,Ox(p,o.shape,o.dtype,d).values),m=d.strideHeight,A=d.strideWidth,y=d.dilationHeight,g=d.dilationWidth,w=d.effectiveFilterHeight,x=d.effectiveFilterWidth,_=x-1-d.padInfo.left,b=w-1-d.padInfo.top,T=He(o.shape,"float32"),S=n.data.get(a.dataId).values,N=He(a.shape,"float32",S);for(let C=0;C<d.batchSize;++C)for(let $=0;$<d.inChannels;++$)for(let D=0;D<d.inHeight;++D)for(let O=0;O<d.inWidth;++O){let B=D-b,H=O-_,X=0;for(let Z=0;Z<w;Z+=y){let ee=(B+Z)/m;if(!(ee<0||ee>=d.outHeight||Math.floor(ee)!==ee))for(let Y=0;Y<x;Y+=g){let ie=(H+Y)/A;if(ie<0||ie>=d.outWidth||Math.floor(ie)!==ie)continue;let re=w*x-1-f.get(C,ee,ie,$),ne=Z*x+Y,ae=re===ne?1:0;ae!==0&&(X+=N.get(C,ee,ie,$)*ae)}}T.set(X,C,D,O,$)}return n.makeTensorInfo(T.shape,T.dtype,T.values)}var iO={kernelName:Dh,backendName:"cpu",kernelFunc:sO};function oO(e,t,n,r,a){let s=k.computeStrides(t),i=Qm(e,t,n,s,a,"max"),o=Ox(e,t,n,a,!0,r);return[i.values,o.values]}var lO={kernelName:zh,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;Ie(r,"MaxPoolWithArgmax");let c=l.data.get(r.dataId).values,u=F.computePool2DInfo(r.shape,a,s,[1,1],i),[h,d]=oO(c,r.shape,r.dtype,o,u),p=l.write(h,u.outShape,r.dtype),f=l.write(d,u.outShape,r.dtype);return[{dataId:p,shape:u.outShape,dtype:r.dtype},{dataId:f,shape:u.outShape,dtype:"int32"}]}};function Gd(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Ie(a,"sum");let o;a.dtype==="bool"?o=Ra({inputs:{x:a},backend:n,attrs:{dtype:"int32"}}):o=Pr({inputs:{x:a},backend:n});let l=o.shape.length,c=k.parseAxisParam(s,o.shape),u=F.getAxesPermutation(c,l),h=c,d=o;u!=null&&(d=ar({inputs:{x:o},backend:n,attrs:{perm:u}}),h=F.getInnerMostAxes(h.length,l)),F.assertAxesAreInnerMostDims("sum",h,d.shape.length);let[p,f]=F.computeOutAndReduceShapes(d.shape,h),m=F.upcastType(d.dtype,"int32"),A=Hd(n,p,m),y=k.sizeFromShape(f),g=n.data.get(A.dataId).values,w=n.data.get(d.dataId).values;for(let x=0;x<g.length;++x){let _=x*y,b=0;for(let T=0;T<y;++T)b+=w[_+T];g[x]=b}if(i){let x=F.expandShapeToKeepDim(A.shape,c),_=A;A=xt({inputs:{x:A},backend:n,attrs:{shape:x}}),n.disposeIntermediateTensorInfo(_)}return n.disposeIntermediateTensorInfo(o),u!=null&&n.disposeIntermediateTensorInfo(d),A}var uO={kernelName:Ds,backendName:"cpu",kernelFunc:Gd};function cO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=k.parseAxisParam(s,a.shape),l=F.computeOutAndReduceShapes(a.shape,o)[1],c=k.sizeFromShape(l),u=[],h=n.makeTensorInfo([],"float32",new Float32Array([c]));u.push(h);let d=Ra({inputs:{x:a},backend:n,attrs:{dtype:"float32"}});u.push(d);let p=eA({inputs:{a:d,b:h},backend:n});u.push(p);let f=Gd({inputs:{x:p},backend:n,attrs:{axis:s,keepDims:i}});return u.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var hO={kernelName:gs,backendName:"cpu",kernelFunc:cO};function dO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Ie(a,"min");let o=k.parseAxisParam(s,a.shape),l=o,c=F.getAxesPermutation(l,a.shape.length),u=a;c!=null&&(u=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),l=F.getInnerMostAxes(l.length,a.shape.length)),F.assertAxesAreInnerMostDims("min",l,u.shape.length);let[h,d]=F.computeOutAndReduceShapes(u.shape,l),p=k.sizeFromShape(d),f=k.makeZerosTypedArray(k.sizeFromShape(h),u.dtype),m=n.data.get(u.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,w=m[g];for(let x=0;x<p;++x){let _=m[g+x];_<w&&(w=_)}f[y]=w}c!=null&&n.disposeIntermediateTensorInfo(u);let A=n.makeTensorInfo(h,u.dtype,f);if(i){let y=F.expandShapeToKeepDim(h,o),g=xt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var pO={kernelName:xs,backendName:"cpu",kernelFunc:dO};function fO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,mode:i}=r;Ie(a,"mirrorPad");let o=s.map((g,w)=>g[0]+a.shape[w]+g[1]),l=s.map(g=>g[0]),c=s.map((g,w)=>g[0]+a.shape[w]),u=i==="reflect"?0:1,h=n.data.get(a.dataId).values,d=a.shape.length,p=k.computeStrides(a.shape),f=k.sizeFromShape(o),m=o.length,A=k.computeStrides(o),y=k.getTypedArrayFromDType(a.dtype,f);for(let g=0;g<f;g++){let w=k.indexToLoc(g,m,A);for(let _=0;_<m;_++)w[_]<l[_]?w[_]=l[_]*2-w[_]-u:w[_]>=c[_]&&(w[_]=(c[_]-1)*2-w[_]+u);w=w.map((_,b)=>_-l[b]);let x=k.locToIndex(w,d,p);y[g]=h[x]}return{dataId:n.write(y,o,a.dtype),shape:o,dtype:a.dtype}}var mO={kernelName:lu,backendName:"cpu",kernelFunc:fO},AO=$t((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),yO=Xt(ho,AO),gO={kernelName:ho,backendName:"cpu",kernelFunc:yO},xO=Ko(k8());function Ux(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=a.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=k.parseAxisParam([o],a.shape),c=Vx({inputs:{x:a},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),u=F.expandShapeToKeepDim(c.shape,l),h=xt({inputs:{x:c},backend:n,attrs:{shape:u}}),d=Jm({inputs:{a,b:h},backend:n}),p=Ex({inputs:{x:d},backend:n}),f=Gd({inputs:{x:p},backend:n,attrs:{axis:l,keepDims:!1}}),m=xt({inputs:{x:f},backend:n,attrs:{shape:u}}),A=eA({inputs:{a:p,b:m},backend:n});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),A}var wO={kernelName:Os,backendName:"cpu",kernelFunc:Ux};function _O(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r;Ie(a,"multinomial");let l=o?a:Ux({inputs:{logits:a},backend:n,attrs:{dim:-1}}),c=l.shape[0],u=l.shape[1],h=n.data.get(l.dataId).values,d=[c,s],p=k.makeZerosTypedArray(k.sizeFromShape(d),"int32");for(let f=0;f<c;++f){let m=f*u,A=new Float32Array(u-1);A[0]=h[m];for(let w=1;w<A.length;++w)A[w]=A[w-1]+h[m+w];let y=xO.alea(i.toString()),g=f*s;for(let w=0;w<s;++w){let x=y();p[g+w]=A.length;for(let _=0;_<A.length;_++)if(x<A[_]){p[g+w]=_;break}}}return o||n.disposeIntermediateTensorInfo(l),n.makeTensorInfo(d,"int32",p)}var bO={kernelName:Ph,backendName:"cpu",kernelFunc:_O},vO=Mr.nonMaxSuppressionV3Impl;function kO(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r;Ie(a,"NonMaxSuppression");let c=n.data.get(a.dataId).values,u=n.data.get(s.dataId).values,{selectedIndices:h}=vO(c,u,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}var IO={kernelName:mo,backendName:"cpu",kernelFunc:kO},NO=Mr.nonMaxSuppressionV4Impl;function SO(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:c}=r;Ie(a,"NonMaxSuppressionPadded");let u=n.data.get(a.dataId).values,h=n.data.get(s.dataId).values,{selectedIndices:d,validOutputs:p}=NO(u,h,i,o,l,c);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([p]))]}var TO={kernelName:Ao,backendName:"cpu",kernelFunc:SO},EO=Mr.nonMaxSuppressionV5Impl;function CO(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:c}=r;Ie(a,"NonMaxSuppressionWithScore");let u=n.data.get(a.dataId).values,h=n.data.get(s.dataId).values,d=i,p=o,f=l,m=c,{selectedIndices:A,selectedScores:y}=EO(u,h,d,p,f,m);return[n.makeTensorInfo([A.length],"int32",new Int32Array(A)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var RO={kernelName:yo,backendName:"cpu",kernelFunc:CO};function FO(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r;Ie(a,"oneHot");let l=k.sizeFromShape(a.shape),c=new Float32Array(l*s);c.fill(o);let u=n.data.get(a.dataId).values;for(let h=0;h<l;++h)u[h]>=0&&u[h]<s&&(c[h*s+u[h]]=i);return n.makeTensorInfo([...a.shape,s],"int32",c)}var MO={kernelName:bs,backendName:"cpu",kernelFunc:FO};function qd(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(r.dtype==="complex64"){let a=ai({inputs:{input:r},backend:n}),s=qd({inputs:{x:a},backend:n}),i=ll({inputs:{input:r},backend:n}),o=qd({inputs:{x:i},backend:n}),l=En({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return rA({backend:n,attrs:{shape:r.shape,value:0,dtype:r.dtype}})}var $O={kernelName:Do,backendName:"cpu",kernelFunc:qd};function Hx(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(r.dtype==="complex64"){let a=ai({inputs:{input:r},backend:n}),s=Hx({inputs:{x:a},backend:n}),i=ll({inputs:{input:r},backend:n}),o=qd({inputs:{x:i},backend:n}),l=En({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return rA({backend:n,attrs:{shape:r.shape,value:1,dtype:r.dtype}})}var DO={kernelName:go,backendName:"cpu",kernelFunc:Hx};function jx(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return jd({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(u=>{k.assertShapesMatch(s,u.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===u.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(u=>{let h=jd({inputs:{input:u},backend:n,attrs:{dim:a}});return o.push(h),h}),c=ul({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(u=>n.disposeIntermediateTensorInfo(u)),c}var OO={kernelName:xo,backendName:"cpu",kernelFunc:jx};function zO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r;Ie(a,"pad");let o=s.map((y,g)=>y[0]+a.shape[g]+y[1]),l=s.map(y=>y[0]),c=n.data.get(a.dataId).values,u=k.sizeFromShape(a.shape),h=a.shape.length,d=k.computeStrides(a.shape),p=k.sizeFromShape(o),f=o.length,m=k.computeStrides(o),A=k.getTypedArrayFromDType(a.dtype,p);i!==0&&A.fill(i);for(let y=0;y<u;y++){let g=k.indexToLoc(y,h,d).map((x,_)=>x+l[_]),w=k.locToIndex(g,f,m);A[w]=c[y]}return{dataId:n.write(A,o,a.dtype),shape:o,dtype:a.dtype}}var Gx={kernelName:vs,backendName:"cpu",kernelFunc:zO},PO=$t((e,t)=>Math.pow(e,t)),LO=Xt(ks,PO),WO={kernelName:ks,backendName:"cpu",kernelFunc:LO};function BO(e){let{backend:t,attrs:n}=e,{start:r,stop:a,dtype:s,step:i}=n,o=Xm(r,a,i,s);return t.makeTensorInfo([o.length],s,o)}var VO={kernelName:uu,backendName:"cpu",kernelFunc:BO},UO=lt(_o,e=>1/e),HO={kernelName:_o,backendName:"cpu",kernelFunc:UO};function jO(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;Ie(a,"resizeBilinear");let l=k.computeStrides(a.shape),[c,u]=o,[h,d,p,f]=a.shape,m=n.data.get(a.dataId).values,A=new Float32Array(k.sizeFromShape([h,c,u,f])),y=[s&&c>1?d-1:d,s&&u>1?p-1:p],g=[s&&c>1?c-1:c,s&&u>1?u-1:u],w=0,x=y[0]/g[0],_=y[1]/g[1];for(let b=0;b<h;b++)for(let T=0;T<c;T++){let S;i?S=x*(T+.5)-.5:S=x*T;let N=Math.max(0,Math.floor(S)),C=S-N,$=Math.min(d-1,Math.ceil(S)),D=b*l[0]+N*l[1],O=b*l[0]+$*l[1];for(let B=0;B<u;B++){let H;i?H=_*(B+.5)-.5:H=_*B;let X=Math.max(0,Math.floor(H)),Z=H-X,ee=Math.min(p-1,Math.ceil(H)),Y=D+X*l[2],ie=O+X*l[2],re=D+ee*l[2],ne=O+ee*l[2];for(let ae=0;ae<f;ae++){let de=m[Y+ae],ue=m[ie+ae],me=m[re+ae],ye=m[ne+ae],be=de+(me-de)*Z,Ne=ue+(ye-ue)*Z,Re=be+(Ne-be)*C;A[w++]=Re}}}return n.makeTensorInfo([h,c,u,f],"float32",A)}var GO={kernelName:Ss,backendName:"cpu",kernelFunc:jO};function qO(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;Ie([s,a],"resizeBilinearGrad");let o=k.computeStrides(a.shape),[l,c,u,h]=a.shape,[,d,p]=s.shape,f=new Float32Array(l*c*u*h),m=[i&&d>1?c-1:c,i&&p>1?u-1:u],A=[i&&d>1?d-1:d,i&&p>1?p-1:p],y=m[0]/A[0],g=m[1]/A[1],w=n.data.get(s.dataId).values,x=0;for(let _=0;_<l;_++){let b=_*o[0];for(let T=0;T<d;T++){let S=T*y,N=Math.floor(S),C=Math.min(Math.ceil(S),c-1),$=b+N*o[1],D=b+C*o[1],O=S-N,B=1-O;for(let H=0;H<p;H++){let X=H*g,Z=Math.floor(X),ee=Math.min(Math.ceil(X),u-1),Y=X-Z,ie=1-Y,re=$+Z*o[2],ne=$+ee*o[2],ae=D+Z*o[2],de=D+ee*o[2],ue=B*ie,me=B*Y,ye=O*ie,be=O*Y;for(let Ne=0;Ne<h;Ne++){let Re=w[x++];f[re+Ne]+=Re*ue,f[ne+Ne]+=Re*me,f[ae+Ne]+=Re*ye,f[de+Ne]+=Re*be}}}}return n.makeTensorInfo([l,u,c,h],"float32",f)}var XO={kernelName:Bh,backendName:"cpu",kernelFunc:qO};function KO(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;Ie(a,"resizeNearestNeighbor");let l=k.computeStrides(a.shape),[c,u]=o,[h,d,p,f]=a.shape,m=n.data.get(a.dataId).values,A=new Float32Array(h*c*u*f),y=[s&&c>1?d-1:d,s&&u>1?p-1:p],g=[s&&c>1?c-1:c,s&&u>1?u-1:u],w=y[0]/g[0],x=y[1]/g[1],_=0;for(let b=0;b<h;b++){let T=b*l[0];for(let S=0;S<c;S++){let N=i?w*(S+.5):w*S,C=Math.min(d-1,s?Math.round(N):Math.floor(N));i&&(C=Math.max(0,C));let $=T+C*l[1];for(let D=0;D<u;D++){let O=i?x*(D+.5):x*D,B=Math.min(p-1,s?Math.round(O):Math.floor(O));i&&(B=Math.max(0,B));let H=$+B*l[2];for(let X=0;X<f;X++){let Z=m[H+X];A[_++]=Z}}}}return n.makeTensorInfo([h,c,u,f],a.dtype,A)}var ZO={kernelName:cu,backendName:"cpu",kernelFunc:KO};function JO(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;Ie([s,a],"resizeNearestNeighborGrad");let o=k.computeStrides(a.shape),l=k.computeStrides(s.shape),[c,u,h,d]=a.shape,[,p,f]=s.shape,m=new Float32Array(c*u*h*d),A=n.data.get(s.dataId).values,y=[i&&p>1?u-1:u,i&&f>1?h-1:h],g=[i&&p>1?p-1:p,i&&f>1?f-1:f],w=y[0]/g[0],x=y[1]/g[1],_=1/w,b=1/x,T=Math.ceil(_)*2+2,S=Math.ceil(b)*2+2;for(let N=0;N<c;N++){let C=N*o[0];for(let $=0;$<u;$++){let D=C+$*o[1],O=Math.floor($*_),B=Math.floor(O-T/2);for(let H=0;H<h;H++){let X=D+H*o[2],Z=Math.floor(H*b),ee=Math.floor(Z-S/2);for(let Y=0;Y<d;Y++){let ie=0;for(let re=0;re<T;re++){let ne=re+B;if(ne<0||ne>=p)continue;let ae=C+ne*l[1],de=ne*w,ue=Math.min(u-1,i?Math.round(de):Math.floor(de));if($===ue)for(let me=0;me<S;me++){let ye=me+ee;if(ye<0||ye>=f)continue;let be=ae+ye*l[2],Ne=ye*x,Re=Math.min(h-1,i?Math.round(Ne):Math.floor(Ne));H===Re&&(ie+=A[be+Y])}}m[X+Y]=ie}}}}return n.makeTensorInfo(a.shape,a.dtype,m)}var YO={kernelName:Wh,backendName:"cpu",kernelFunc:JO};function QO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r;Ie(a,"reverse");let i=a.shape.length,o=k.parseAxisParam(s,a.shape);if(i===0)return Pr({inputs:{x:a},backend:n});let l=new zt(a.shape,a.dtype),c=n.bufferSync(a);for(let u=0;u<l.size;u++){let h=l.indexToLoc(u),d=h.slice();o.forEach(p=>d[p]=a.shape[p]-1-d[p]),l.set(c.get(...d),...h)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var ez={kernelName:Es,backendName:"cpu",kernelFunc:QO},tz={kernelName:zo,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=k.getTypedArrayFromDType(r.dtype,k.sizeFromShape(r.shape)),[c,u,h,d]=r.shape,[p,f]=F.getImageCenter(i,u,h),m=255,A=Math.sin(a),y=Math.cos(a),g=o.data.get(r.dataId).values;for(let w=0;w<c;w++){let x=w*h*u*d;for(let _=0;_<u;_++){let b=_*(h*d);for(let T=0;T<h;T++){let S=T*d;for(let N=0;N<d;N++){let C=[c,_,T,N],$=C[2],D=C[1],O=($-p)*y-(D-f)*A,B=($-p)*A+(D-f)*y;O=Math.round(O+p),B=Math.round(B+f);let H=s;if(typeof s!="number"&&(N===3?H=m:H=s[N]),O>=0&&O<h&&B>=0&&B<u){let Z=B*(h*d),ee=O*d,Y=x+Z+ee+N;H=g[Y]}let X=x+b+S+N;l[X]=H}}}}return{dataId:o.write(l,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},nz=lt(Cs,e=>{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1}),rz={kernelName:Cs,backendName:"cpu",kernelFunc:nz};function qx(e,t,n,r,a,s,i,o,l,c){let u=[r/a,a],h=e.values,d=t.values;if(r===0)return He(n,t.dtype);let p=He(u,t.dtype);p.values.fill(l);for(let f=0;f<s;f++){let m=[],A=0;for(let y=0;y<i;y++){let g=h[f*i+y];m.push(g),A+=g*o[y]}if(A<0||A>=r/a)throw new Error(`Invalid indices: ${m} does not index into ${n}`);for(let y=0;y<a;y++)c?p.values[A*a+y]+=d[f*a+y]:p.values[A*a+y]=t.rank===0?d[0]:d[f*a+y]}return p}function az(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:c,strides:u,outputSize:h}=F.calculateShapes(s,a,i),d=!0,p=n.bufferSync(a),f=n.bufferSync(s),m=qx(p,f,i,h,c,l,o,u,0,d);return n.makeTensorInfo(i,m.dtype,m.values)}var sz={kernelName:vo,backendName:"cpu",kernelFunc:az};function iz(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t;Ie([r,a,s],"select");let i=r.shape.length,o=n.data.get(r.dataId).values,l=n.data.get(a.dataId).values,c=n.data.get(s.dataId).values,u=er(a.dtype,s.dtype),h=k.makeZerosTypedArray(k.sizeFromShape(a.shape),u),d=0,p=i===0||i>1||a.shape.length===1?1:k.sizeFromShape(a.shape.slice(1));for(let f=0;f<o.length;f++)for(let m=0;m<p;m++)o[f]===1?h[d++]=l[f]:h[d++]=c[f];return n.makeTensorInfo(a.shape,u,h)}var oz={kernelName:ko,backendName:"cpu",kernelFunc:iz},lz=F.SELU_SCALEALPHA,uz=F.SELU_SCALE,cz=lt(Io,e=>e>=0?uz*e:lz*(Math.exp(e)-1)),hz={kernelName:Io,backendName:"cpu",kernelFunc:cz},dz=lt(Ms,e=>1/(1+Math.exp(-e))),pz={kernelName:Ms,backendName:"cpu",kernelFunc:dz},fz=lt(To,e=>e<0?-1:e>0?1:0),mz={kernelName:To,backendName:"cpu",kernelFunc:fz},Az=lt(Fs,e=>Math.sin(e)),yz={kernelName:Fs,backendName:"cpu",kernelFunc:Az},gz=lt(So,e=>Math.sinh(e)),xz={kernelName:So,backendName:"cpu",kernelFunc:gz},wz=11920928955078125e-23,Xx=Math.log(wz)+2,_z=lt(Eo,e=>{let t=e>-Xx,n=e<Xx,r=Math.exp(e),a;return n?a=r:t?a=e:a=Math.log(1+r),a}),bz={kernelName:Eo,backendName:"cpu",kernelFunc:_z};function vz(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;Ie([a],"spaceToBatchND");let o=k.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let A=1+s.length;A<a.shape.length;++A)l.push([0,0]);let c=Gx.kernelFunc({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),u=F.getReshaped(c.shape,s,o,!1),h=F.getPermuted(u.length,s.length,!1),d=F.getReshapedPermuted(c.shape,s,o,!1),p=xt({inputs:{x:c},backend:n,attrs:{shape:u}}),f=ar({inputs:{x:p},backend:n,attrs:{perm:h}}),m=xt({inputs:{x:f},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),m}var kz={kernelName:hu,backendName:"cpu",kernelFunc:vz};function Iz(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:c,sliceSize:u,strides:h,outputSize:d}=F.calculateShapes(s,a,o),p=!1,f=n.bufferSync(a),m=n.bufferSync(s),A=n.data.get(i.dataId).values[0],y=qx(f,m,o,d,u,c,l,h,A,p);return n.makeTensorInfo(o,y.dtype,y.values)}var Nz={kernelName:Vh,backendName:"cpu",kernelFunc:Iz};function Sz(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=k.parseAxisParam(i,a.shape)[0],l=F.prepareSplitSize(a,s,o),c=new Array(a.shape.length).fill(0),u=a.shape.slice();return l.map(h=>{let d=[...u];d[o]=h;let p=si({inputs:{x:a},backend:n,attrs:{begin:c,size:d}});return c[o]+=h,p})}var Tz={kernelName:Co,backendName:"cpu",kernelFunc:Sz},Ez=lt($s,e=>Math.sqrt(e)),Cz={kernelName:$s,backendName:"cpu",kernelFunc:Ez},Rz={kernelName:du,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;Ie(n,"square");let a=r.data.get(n.dataId).values,s=new Float32Array(a.length);for(let i=0;i<a.length;++i){let o=a[i];s[i]=o*o}return{dataId:r.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},Fz=lt(Oo,(e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),Mz={kernelName:Oo,backendName:"cpu",kernelFunc:Fz};function $z(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:c,ellipsisMask:u,newAxisMask:h,shrinkAxisMask:d}=r;Ie(a,"stridedSlice");let{nonStrided:p,$begin:f,$strides:m,size:A,newShape:y,outShape:g}=on.sliceInfo(a.shape,s,i,o,l,c,u,h,d),w=xt({inputs:{x:a},backend:n,attrs:{shape:y}}),x;if(p){let b=si({inputs:{x:w},backend:n,attrs:{begin:f,size:A}});x=xt({inputs:{x:b},backend:n,attrs:{shape:g}}),n.disposeIntermediateTensorInfo(b)}else if(g.some(b=>b===0))x=n.makeTensorInfo(g,a.dtype,[]);else{let b=n.bufferSync(w),T=kx(g,b,m,f);x=n.makeTensorInfo(T.shape,T.dtype,T.values)}let _=xt({inputs:{x},backend:n,attrs:{shape:g}});return n.disposeIntermediateTensorInfo(w),n.disposeIntermediateTensorInfo(x),_}var Dz={kernelName:Ro,backendName:"cpu",kernelFunc:$z},Oz=lt(Fo,e=>Math.tan(e)),zz={kernelName:Fo,backendName:"cpu",kernelFunc:Oz},Pz=lt(Ls,e=>Math.tanh(e)),Lz={kernelName:Ls,backendName:"cpu",kernelFunc:Pz};function Wz(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;Ie(a,"tile");let i=Nx(n.bufferSync(a),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}var Bz={kernelName:ga,backendName:"cpu",kernelFunc:Wz};function Vz(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r;Ie(a,"topk");let o=n.data.get(a.dataId).values,[l,c]=Sx(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(c.shape,c.dtype,c.values)]}var Uz={kernelName:Mo,backendName:"cpu",kernelFunc:Vz};function Hz(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;Ie(s,"unique");let i=r.data.get(s.dataId).values,{outputValues:o,outputShape:l,indices:c}=Tx(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([c.length],"int32",c)]}var jz={kernelName:Uh,backendName:"cpu",kernelFunc:Hz};function Gz(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape.length,o=a.shape[s],l=new Array(i-1),c=0;for(let p=0;p<i;p++)p!==s&&(l[c++]=a.shape[p]);let u=new Array(i).fill(0),h=a.shape.slice();h[s]=1;let d=new Array(o);for(let p=0;p<d.length;p++){u[s]=p;let f=si({inputs:{x:a},backend:n,attrs:{begin:u,size:h}});d[p]=xt({inputs:{x:f},backend:n,attrs:{shape:l}}),n.disposeIntermediateTensorInfo(f)}return d}var qz={kernelName:$o,backendName:"cpu",kernelFunc:Gz};function Xz(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r;Ie(a,"unsortedSegmentSum");let o=a.shape.length,l=s.shape.length,c=[],u=[],h=o-l,d=s;for(let f=0;f<h;++f){let m=jd({inputs:{input:d},backend:n,attrs:{dim:f+1}});d=m,u.push(m)}for(let f=0;f<i;++f){let m=k.createScalarValue(f,"int32"),A=n.makeTensorInfo([],"int32",m),y=Wx({inputs:{a:A,b:d},backend:n}),g=Ra({inputs:{x:y},backend:n,attrs:{dtype:"float32"}}),w=Zm({inputs:{a:g,b:a},backend:n}),x=Gd({inputs:{x:w},backend:n,attrs:{axis:0,keepDims:!1}});c.push(x),u.push(A),u.push(y),u.push(g),u.push(w),u.push(x)}let p=jx({inputs:c,backend:n,attrs:{axis:0}});return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),p}var Kz={kernelName:pu,backendName:"cpu",kernelFunc:Xz},Zz=[yM,bF,xM,_M,TF,vM,IM,SM,EM,RM,MM,DM,zM,WM,VM,jM,qM,KM,JM,mM,QM,t$,r$,NF,CF,s$,vF,o$,u$,d$,f$,c$,g$,w$,A$,b$,k$,N$,T$,C$,F$,M$,D$,z$,L$,W$,V$,B$,tA,lM,H$,G$,eD,RF,tD,MF,oD,uD,cD,DF,pD,mD,yD,xD,_D,zF,kD,kF,ND,l$,TD,CD,FD,uM,LF,DD,zD,BF,LD,VD,HD,qD,KD,JD,UF,eO,nO,aO,iO,lO,YD,hO,pO,jF,mO,gO,bO,qF,KF,IO,TO,RO,JF,MO,DO,OO,Gx,WO,hM,eM,VO,IF,HO,dM,pM,fM,GO,XO,ZO,YO,ez,tz,rz,nM,sz,oz,hz,pz,mz,yz,xz,rM,wO,bz,kz,Nz,Tz,Cz,Rz,sM,Mz,Dz,oM,uO,zz,Lz,Bz,Uz,YF,jz,qz,Kz,$O];for(let e of Zz)Po(e);var r0={};Pe(r0,{assertNotComplex:()=>cl,bindCanvasToFramebuffer:()=>Qz,bindColorTextureToFramebuffer:()=>Kd,bindTextureToProgramUniformSampler:()=>uw,bindTextureUnit:()=>iw,bindVertexBufferToProgramAttribute:()=>aA,callAndCheck:()=>ve,canBeRepresented:()=>Kx,createFragmentShader:()=>Yx,createFramebuffer:()=>sw,createProgram:()=>Qx,createStaticIndexBuffer:()=>nw,createStaticVertexBuffer:()=>tw,createTexture:()=>rw,createVertexShader:()=>Jx,getBatchDim:()=>ii,getExtensionOrThrow:()=>Zu,getFramebufferErrorMessage:()=>cw,getMaxTexturesInShader:()=>pw,getNumChannels:()=>Jz,getProgramUniformLocation:()=>lw,getProgramUniformLocationOrThrow:()=>ow,getRowsCols:()=>oi,getShapeAs3D:()=>Zd,getTextureShapeFromLogicalShape:()=>hw,getWebGLDisjointQueryTimerVersion:()=>fw,getWebGLErrorMessage:()=>Zx,getWebGLMaxTextureSize:()=>dw,hasExtension:()=>qn,isCapableOfRenderingToFloatTexture:()=>mw,isDownloadFloatTextureEnabled:()=>Aw,isReshapeFree:()=>Yu,isWebGLFenceEnabled:()=>yw,isWebGLVersionEnabled:()=>iA,linkProgram:()=>ew,resetMaxTextureSize:()=>eP,resetMaxTexturesInShader:()=>tP,unbindColorTextureFromFramebuffer:()=>sA,unbindTextureUnit:()=>Yz,validateFramebuffer:()=>Ju,validateProgram:()=>Xd,validateTextureSize:()=>aw});var li={},oA={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function tm(e,t){li[e]=t}function Lr(e){if(!(e in li)){let n=nP(e);if(n!==null)li[e]=n;else return console.log("Could not get context for WebGL version",e),null}let t=li[e];return t.isContextLost()?(delete li[e],Lr(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),li[e])}function rP(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 nP(e){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=rP(e);return t.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete li[e]},!1),e===1?t.getContext("webgl",oA)||t.getContext("experimental-webgl",oA):t.getContext("webgl2",oA)}var Qu;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Qu||(Qu={}));var Xn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(Xn||(Xn={}));var Qt;(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"})(Qt||(Qt={}));function ec(e,t){return[t,e]}function aP(e,t){return e*t}function tc(e){let t=k.sizeFromShape(e),n=Math.ceil(t/4);return k.sizeToSquarishShape(n)}function hl(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function sP(e,t){let[n,r]=hl(e,t);return n*r*4}function lA(e,t){let n=e,r,a,s,i,o,l,c,u,h,d;return Q().getNumber("WEBGL_VERSION")===2?(r=n.R32F,a=n.R16F,s=n.RGBA16F,i=n.RGBA32F,o=n.RED,c=4,u=1,h=n.HALF_FLOAT,d=n.FLOAT):(r=e.RGBA,a=e.RGBA,s=e.RGBA,i=n.RGBA,o=e.RGBA,c=4,u=4,h=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT),l=e.RGBA,{internalFormatFloat:r,internalFormatHalfFloat:a,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:c,defaultNumChannels:u,textureTypeHalfFloat:h,textureTypeFloat:d}}function ve(e,t){let n=t();return Q().getBool("DEBUG")&&iP(e),n}function iP(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+Zx(e,t))}var oP=596e-10,lP=65504;function Kx(e){return!!(Q().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||oP<Math.abs(e)&&Math.abs(e)<lP)}function Zx(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function Zu(e,t){return oa(e,()=>e.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function Jx(e,t){let n=oa(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ve(e,()=>e.shaderSource(n,t)),ve(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 Yx(e,t){let n=oa(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ve(e,()=>e.shaderSource(n,t)),ve(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw uP(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var cP=/ERROR: [0-9]+:([0-9]+):/g;function uP(e,t){let n=cP.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let r=+n[1],a=e.split(`
|
|
`),s=a.length.toString().length+2,i=a.map((h,d)=>k.rightPad((d+1).toString(),s)+h),o=0;for(let h=0;h<i.length;h++)o=Math.max(i[h].length,o);let l=i.slice(0,r-1),c=i.slice(r-1,r),u=i.slice(r);console.log(l.join(`
|
|
`)),console.log(t.split(`
|
|
`)[0]),console.log(`%c ${k.rightPad(c[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(u.join(`
|
|
`))}function Qx(e){return oa(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function ew(e,t){if(ve(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 Xd(e,t){if(ve(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function tw(e,t){let n=oa(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ve(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function nw(e,t){let n=oa(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ve(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),ve(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function Jz(){return Q().getNumber("WEBGL_VERSION")===2?1:4}function rw(e){return oa(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function aw(e,t){let n=Q().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}]`,a=`[${n}x${n}]`;throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+a+".")}}function sw(e){return oa(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function aA(e,t,n,r,a,s,i){let o=e.getAttribLocation(t,n);return o===-1?!1:(ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),ve(e,()=>e.vertexAttribPointer(o,a,e.FLOAT,!1,s,i)),ve(e,()=>e.enableVertexAttribArray(o)),!0)}function iw(e,t,n){gw(e,n),ve(e,()=>e.activeTexture(e.TEXTURE0+n)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function Yz(e,t){gw(e,t),ve(e,()=>e.activeTexture(e.TEXTURE0+t)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function ow(e,t,n){return oa(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function lw(e,t,n){return e.getUniformLocation(t,n)}function uw(e,t,n,r){ve(e,()=>iw(e,t,r)),ve(e,()=>e.uniform1i(n,r))}function Qz(e){ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ve(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ve(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function Kd(e,t,n){ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),ve(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function sA(e,t){ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ve(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Ju(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+cw(e,t))}function cw(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 oa(e,t,n){let r=ve(e,()=>t());if(r==null)throw new Error(n);return r}function gw(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(r<e.TEXTURE0||r>n){let a=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${a}.`)}}function ii(e,t=2){return k.sizeFromShape(e.slice(0,e.length-t))}function oi(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 Zd(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ii(e),...oi(e)]),t}function hw(e,t=!1){let n=Q().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((a,s)=>s>=e.length-2?k.nearestLargerEven(e[s]):e[s]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=k.squeezeShape(e).newShape);let r=k.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 a=ii(e),s=2,i=2;return e.length&&([s,i]=oi(e)),r=a*(s/2)*(i/2),k.sizeToSquarishShape(r).map(o=>o*2)}return k.sizeToSquarishShape(r)}function Jd(e){return e%2==0}function Yu(e,t){if(e=e.slice(-2),t=t.slice(-2),k.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||Jd(n)&&Jd(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Jd(e[0])&&Jd(t[0])}var Yd,Qd;function dw(e){if(Yd==null){let t=Lr(e);Yd=t.getParameter(t.MAX_TEXTURE_SIZE)}return Yd}function eP(){Yd=null}function tP(){Qd=null}function pw(e){if(Qd==null){let t=Lr(e);Qd=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Qd)}function fw(e){if(e===0)return 0;let t,n=Lr(e);return qn(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:qn(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function qn(e,t){return e.getExtension(t)!=null}function iA(e){try{if(Lr(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function mw(e){if(e===0)return!1;let t=Lr(e);if(e===1){if(!qn(t,"OES_texture_float"))return!1}else if(!qn(t,"EXT_color_buffer_float"))return!1;return uA(t)}function Aw(e){if(e===0)return!1;let t=Lr(e);if(e===1){if(!qn(t,"OES_texture_float")||!qn(t,"WEBGL_color_buffer_float"))return!1}else{if(qn(t,"EXT_color_buffer_float"))return uA(t);let n="EXT_color_buffer_half_float";if(qn(t,n)){let r=t.getExtension(n);return hP(t,r)}return!1}return uA(t)}function uA(e){let t=lA(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,a=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,r,a,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(s),i}function hP(e,t){let n=lA(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);let a=1,s=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,a,s,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(i),o}function yw(e){return e!==2?!1:Lr(e).fenceSync!=null}function cl(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&k.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var De=Q();De.registerFlag("HAS_WEBGL",()=>De.getNumber("WEBGL_VERSION")>0);De.registerFlag("WEBGL_VERSION",()=>iA(2)?2:iA(1)?1:0);De.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);De.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>De.get("WEBGL_VERSION")===2);De.registerFlag("WEBGL_CPU_FORWARD",()=>!0);De.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);De.registerFlag("WEBGL_PACK",()=>De.getBool("HAS_WEBGL"));De.registerFlag("WEBGL_PACK_NORMALIZATION",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_PACK_CLIP",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>!1);De.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_PACK_REDUCE",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_LAZILY_UNPACK",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_CONV_IM2COL",()=>De.getBool("WEBGL_PACK"));De.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>dw(De.getNumber("WEBGL_VERSION")));De.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>pw(De.getNumber("WEBGL_VERSION")));De.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=De.getNumber("WEBGL_VERSION");return e===0?0:fw(e)});De.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>De.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Gh.isMobile());De.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>mw(De.getNumber("WEBGL_VERSION")));De.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>De.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:De.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));De.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>Aw(De.getNumber("WEBGL_VERSION")));De.registerFlag("WEBGL_FENCE_API_ENABLED",()=>yw(De.getNumber("WEBGL_VERSION")));De.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>De.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);De.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}.`)});function un(){let e,t,n,r,a,s,i,o,l,c;return Q().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",a="texture",s="outputColor",i="out vec4 outputColor;",o=`
|
|
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="",c=`
|
|
#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",a="texture2D",s="gl_FragColor",i="",o=`
|
|
#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));
|
|
}
|
|
`,c=`
|
|
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:a,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:c}}function ui(e,t,n="index"){let r=k.computeStrides(t);return r.map((a,s)=>{let i=`int ${e[s]} = ${n} / ${a}`,o=s===r.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * ${a}`:`index -= ${e[s]} * ${a}`;return`${i}; ${o};`}).join("")}function cA(e){let t=k.computeStrides(e).map(n=>n.toString());return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;
|
|
}
|
|
`}var xw=`
|
|
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;
|
|
}
|
|
`,dP=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Qu.DENSE;let t=tc(e),n=un();this.outputShape=e,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${ui(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = 4 * (resTexRC.x * ${t[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;
|
|
}
|
|
`}},pP=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Qu.DENSE;let t=tc(e),n=un();this.outputShape=e,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${ui(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = 4 * (resTexRC.x * ${t[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;
|
|
}
|
|
`}},fP=class{constructor(e){this.variableNames=["A"],this.outTexUsage=Xn.DOWNLOAD;let t=un();this.outputShape=e,this.userCode=`
|
|
${xw}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},mP=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Xn.DOWNLOAD;let t=un();this.outputShape=e,this.userCode=`
|
|
${xw}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},AP=class{constructor(e,t,n=!1){this.variableNames=["A"];let r=un(),[a,s]=t;this.outputShape=e;let i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode=`
|
|
${cA(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
int flatIndex = getFlatIndex(coords);
|
|
int offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / ${s};
|
|
int c = imod(flatIndex, ${s});
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.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(${i}, 0., 0., 0.);
|
|
}
|
|
`}},yP=class{constructor(e,t,n=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let r=un(),[a,s]=t;this.outputShape=e;let i="",o="result";n&&(o="floor(result * 255. + 0.5)");for(let l=0;l<=1;l++)for(let c=0;c<=1;c++){let u=l*2+c;i+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + ${c} < ${e[2]}) {
|
|
localCoords[2] += ${c};
|
|
if(localCoords[1] + ${l} < ${e[1]}) {
|
|
localCoords[1] += ${l};
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
r = flatIndex / ${s};
|
|
c = imod(flatIndex, ${s});
|
|
uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);
|
|
values = ${r.texture2D}(A, uv);
|
|
|
|
if(offset == 0) {
|
|
result[${u}] = values[0];
|
|
} else if(offset == 1) {
|
|
result[${u}] = values[1];
|
|
} else if(offset == 2) {
|
|
result[${u}] = values[2];
|
|
} else {
|
|
result[${u}] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
${cA(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
${i}
|
|
|
|
${r.output} = ${o};
|
|
}
|
|
`}},a0={};Pe(a0,{bindVertexProgramAttributeStreams:()=>Tw,createBufferFromOutputTexture:()=>Rw,createFloat16MatrixTexture:()=>kw,createFloat16PackedMatrixTexture:()=>Sw,createFloat32MatrixTexture:()=>vw,createIndexBuffer:()=>bw,createPackedMatrixTexture:()=>Nw,createUnsignedBytesMatrixTexture:()=>Iw,createVertexBuffer:()=>_w,createVertexShader:()=>ww,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Mw,downloadFloat32MatrixFromBuffer:()=>Fw,downloadMatrixFromPackedOutputTexture:()=>Dw,downloadPackedMatrixFromBuffer:()=>$w,getInternalFormatForFloat16MatrixTexture:()=>dA,getInternalFormatForFloat16PackedMatrixTexture:()=>mA,getInternalFormatForFloat32MatrixTexture:()=>hA,getInternalFormatForPackedMatrixTexture:()=>fA,getInternalFormatForUnsignedBytesMatrixTexture:()=>pA,uploadDenseMatrixToTexture:()=>Ew,uploadPixelDataToTexture:()=>Cw});function ww(e){let t=un(),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 Jx(e,n)}function _w(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 tw(e,t)}function bw(e){let t=new Uint16Array([0,1,2,2,1,3]);return nw(e,t)}function nc(e,t,n,r,a,s){aw(t,n);let i=rw(e),o=e.TEXTURE_2D;return ve(e,()=>e.bindTexture(o,i)),ve(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ve(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ve(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ve(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),ve(e,()=>e.texImage2D(o,0,r,t,n,0,a,s,null)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null)),i}function hA(e){return e.internalFormatFloat}function vw(e,t,n,r){let[a,s]=ec(t,n);return nc(e,a,s,hA(r),r.textureFormatFloat,e.FLOAT)}function dA(e){return e.internalFormatHalfFloat}function kw(e,t,n,r){let[a,s]=ec(t,n);return nc(e,a,s,dA(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function pA(e){return e.downloadTextureFormat}function Iw(e,t,n,r){let[a,s]=ec(t,n);return nc(e,a,s,pA(r),e.RGBA,e.UNSIGNED_BYTE)}function fA(e){return e.internalFormatPackedFloat}function Nw(e,t,n,r){let[a,s]=hl(t,n);return nc(e,a,s,fA(r),e.RGBA,e.FLOAT)}function mA(e){return e.internalFormatPackedHalfFloat}function Sw(e,t,n,r){let[a,s]=hl(t,n);return nc(e,a,s,mA(r),e.RGBA,r.textureTypeHalfFloat)}function Tw(e,t,n){let r=0,a=3*4,s=3*4+2*4;return ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),aA(e,t,"clipSpacePos",n,3,s,r)&&aA(e,t,"uv",n,2,s,a)}function Ew(e,t,n,r,a,s){ve(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;a instanceof Uint8Array?(i=new Uint8Array(n*r*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*r*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(a),ve(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,o,i)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Cw(e,t,n){ve(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?ve(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):ve(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Rw(e,t,n,r){let a=e.createBuffer();ve(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,a));let s=4*4*t*n;return ve(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ve(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),ve(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),a}function Fw(e,t,n){let r=e,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}function Mw(e,t,n,r){let[a,s]=ec(t,n),i=4,o=new Uint8Array(aP(t*n,i));return ve(e,()=>e.readPixels(0,0,a,s,r.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function $w(e,t,n,r,a,s,i,o){let l=e,c=new Float32Array(sP(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,c),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),c}function Dw(e,t,n){let r=new Float32Array(t*n*4);return ve(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var nm=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=Q().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,tm(t,e)):this.gl=Lr(t);let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(Q().getNumber("WEBGL_VERSION")===1){let a="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Zu(this.gl,a),qn(this.gl,s))this.textureHalfFloatExtension=Zu(this.gl,s);else if(Q().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),qn(this.gl,r))this.colorBufferHalfFloatExtension=Zu(this.gl,r);else if(Q().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",qn(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(qn(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=_w(this.gl),this.indexBuffer=bw(this.gl),this.framebuffer=sw(this.gl),this.textureConfig=lA(this.gl,this.textureHalfFloatExtension)}get debug(){return Q().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;ve(e,()=>e.finish()),ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ve(e,()=>e.deleteFramebuffer(this.framebuffer)),ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ve(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ve(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),vw(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),kw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),Iw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),Cw(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),Ew(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(),Nw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(sA(this.gl,this.framebuffer),this.outputTexture=null),ve(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Mw(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,r,a,s){return $w(this.gl,e,t,n,r,a,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return Fw(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=Rw(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(Q().getBool("WEBGL_FENCE_API_ENABLED")){let r=e,a=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let s=r.clientWaitSync(a,0,0);return s===r.ALREADY_SIGNALED||s===r.CONDITION_SATISFIED},t=a}else Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,Q().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=Yx(t,e),r=ww(t),a=Qx(t);return ve(t,()=>t.attachShader(a,r)),ve(t,()=>t.attachShader(a,n)),ew(t,a),this.debug&&Xd(t,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=Tw(t,this.program,this.vertexBuffer)),a}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&ve(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&Xd(this.gl,this.program),ve(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?ow(this.gl,e,t):lw(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ve(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(),uw(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,a]=hl(t,n);this.setOutputMatrixTextureDriver(e,r,a)}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&&Xd(this.gl,this.program),Ju(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),ve(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ve(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Zu(this.gl,Q().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(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.createQuery();return n.beginQuery(r.TIME_ELAPSED_EXT,a),a}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(Q().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 k.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,Q().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(),a=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!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=gP(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)&&k.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Kd(this.gl,e,this.framebuffer),this.debug&&Ju(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Kd(this.gl,this.outputTexture,this.framebuffer),this.debug&&Ju(this.gl)):sA(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;Kd(r,e,this.framebuffer),this.debug&&Ju(r),this.outputTexture=e,ve(r,()=>r.viewport(0,0,t,n)),ve(r,()=>r.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),ve(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 gP(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}var{getBroadcastDims:Ow}=F;function SP(e,t,n,r){let a=[];e.forEach(p=>{let f=k.sizeFromShape(p.shapeInfo.logicalShape);p.shapeInfo.isUniform?a.push(`uniform float ${p.name}${f>1?`[${f}]`:""};`):(a.push(`uniform sampler2D ${p.name};`),a.push(`uniform int offset${p.name};`))});let s=a.join(`
|
|
`),i=e.map(p=>xP(p,t,r)).join(`
|
|
`),o=t.texShape,l=un(),c=bP(l),u,h,d=IP(l);return t.isPacked?(u=wP(t.logicalShape,o),h=kP(l)):(u=_P(t.logicalShape,o),h=vP(l)),r&&(d+=NP),[d,c,h,s,u,i,n].join(`
|
|
`)}function dl(e){let t=e.shapeInfo.logicalShape;switch(t.length){case 0:return TP(e);case 1:return EP(e);case 2:return CP(e);case 3:return RP(e);case 4:return FP(e);case 5:return MP(e);case 6:return $P(e);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function zw(e){switch(e.shapeInfo.logicalShape.length){case 0:return DP(e);case 1:return OP(e);case 2:return zP(e);case 3:return PP(e);default:return LP(e)}}function xP(e,t,n=!1){let r="";n?r+=zw(e):r+=dl(e);let a=e.shapeInfo.logicalShape,s=t.logicalShape;return a.length<=s.length&&(n?r+=WP(e,t):r+=BP(e,t)),r}function wP(e,t){switch(e.length){case 0:return Pw();case 1:return VP(e,t);case 2:return jP(e,t);case 3:return UP(e,t);default:return HP(e,t)}}function _P(e,t){switch(e.length){case 0:return Pw();case 1:return GP(e,t);case 2:return JP(e,t);case 3:return qP(e,t);case 4:return XP(e,t);case 5:return KP(e,t);case 6:return ZP(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function bP(e){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return ${e.texture2D}(textureSampler, uv).r;
|
|
}
|
|
`}function vP(e){return`
|
|
void setOutput(float val) {
|
|
${e.output} = vec4(val, 0, 0, 0);
|
|
}
|
|
`}function kP(e){return`
|
|
void setOutput(vec4 val) {
|
|
${e.output} = val;
|
|
}
|
|
`}function IP(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);
|
|
}
|
|
|
|
${YP}
|
|
${QP}
|
|
${eL}
|
|
`}var YP=`
|
|
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);
|
|
}
|
|
`,QP=`
|
|
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);
|
|
}
|
|
`,eL=`
|
|
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);
|
|
}
|
|
`,NP=`
|
|
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 Pw(){return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`}function VP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ${n[1]}.0);
|
|
}
|
|
`:n[1]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ${n[0]}.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
return 2 * (resTexRC.x * ${n[1]} + resTexRC.y);
|
|
}
|
|
`}function GP(e,t){return t[0]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.x * ${t[1]}.0);
|
|
}
|
|
`:t[1]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.y * ${t[0]}.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
return resTexRC.x * ${t[1]} + resTexRC.y;
|
|
}
|
|
`}function UP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),a=r*Math.ceil(e[1]/2);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`}function qP(e,t){let n=ui(["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;
|
|
${n}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}function HP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),a=r*Math.ceil(e[e.length-2]/2),s=a,i="",o="b, r, c";for(let l=2;l<e.length-1;l++)s*=e[e.length-l-1],i=`
|
|
int b${l} = index / ${s};
|
|
index -= b${l} * ${s};
|
|
`+i,o=`b${l}, `+o;return`
|
|
ivec${e.length} getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
|
|
${i}
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec${e.length}(${o});
|
|
}
|
|
`}function XP(e,t){let n=ui(["r","c","d","d2"],e);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${n}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}function KP(e,t){let n=ui(["r","c","d","d2","d3"],e);return`
|
|
ivec5 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},
|
|
${t[1]}));
|
|
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec5 outShape = ivec5(r, c, d, d2, d3);
|
|
return outShape;
|
|
}
|
|
`}function ZP(e,t){let n=ui(["r","c","d","d2","d3","d4"],e);return`
|
|
ivec6 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec6 result = ivec6(r, c, d, d2, d3, d4);
|
|
return result;
|
|
}
|
|
`}function jP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(k.arraysEqual(e,t))return`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(${n[0]}, ${n[1]}));
|
|
}
|
|
`;let r=Math.ceil(e[1]/2);return`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}function JP(e,t){return k.arraysEqual(e,t)?`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));
|
|
}
|
|
`:e[1]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:e[0]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
int r = index / ${e[1]};
|
|
int c = index - r * ${e[1]};
|
|
return ivec2(r, c);
|
|
}
|
|
`}function ci(e){return`offset${e}`}function DP(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=un();return`
|
|
vec4 ${n}() {
|
|
return ${r.texture2D}(${t}, halfCR);
|
|
}
|
|
`}function TP(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${t};}`;let[r,a]=e.shapeInfo.texShape;if(r===1&&a===1)return`
|
|
float ${n}() {
|
|
return sampleTexture(${t}, halfCR);
|
|
}
|
|
`;let[s,i]=e.shapeInfo.texShape,o=ci(t);return`
|
|
float ${n}() {
|
|
vec2 uv = uvFromFlat(${s}, ${i}, ${o});
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`}function OP(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=e.shapeInfo.texShape,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],s=un();return`
|
|
vec4 ${n}(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
${a[0]}, ${a[1]}, index);
|
|
return ${s.texture2D}(${t}, uv);
|
|
}
|
|
`}function EP(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float ${n}(int index) {
|
|
${pl(e)}
|
|
}
|
|
`;let r=e.shapeInfo.texShape,a=r[0],s=r[1];if(s===1&&a===1)return`
|
|
float ${n}(int index) {
|
|
return sampleTexture(${t}, halfCR);
|
|
}
|
|
`;let i=ci(t);return s===1?`
|
|
float ${n}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / ${a}.0);
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`:a===1?`
|
|
float ${n}(int index) {
|
|
vec2 uv = vec2((float(index + ${i}) + 0.5) / ${s}.0, 0.5);
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`:`
|
|
float ${n}(int index) {
|
|
vec2 uv = uvFromFlat(${a}, ${s}, index + ${i});
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`}function zP(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=a[0],i=a[1],o=un();if(a!=null&&k.arraysEqual(t,a))return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${i}.0, ${s}.0);
|
|
|
|
return ${o.texture2D}(${n}, uv);
|
|
}
|
|
`;let l=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)],c=Math.ceil(t[1]/2);return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(${c}, ${l[0]}, ${l[1]}, row, col);
|
|
return ${o.texture2D}(${n}, uv);
|
|
}
|
|
`}function CP(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape;if(a!=null&&k.arraysEqual(t,a)){let h=a[0],d=a[1];return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}let{newShape:s,keptDims:i}=k.squeezeShape(t),o=s;if(o.length<t.length){let h=fl(e,o),d=["row","col"];return`
|
|
${dl(h)}
|
|
float ${r}(int row, int col) {
|
|
return ${r}(${ml(d,i)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(${t[1]}, 1)));
|
|
${pl(e)}
|
|
}
|
|
`;let l=a[0],c=a[1],u=ci(n);return c===1?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${u}), vec3(${t[1]}, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / ${l}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:l===1?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${u}), vec3(${t[1]}, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / ${c}.0, 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${t[1]} + col + ${u};
|
|
vec2 uv = uvFromFlat(${l}, ${c}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function PP(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)];if(t[0]===1){let h=t.slice(1),d=[1,2],p=fl(e,h),f=["b","row","col"];return`
|
|
${zw(p)}
|
|
vec4 ${r}(int b, int row, int col) {
|
|
return ${r}(${ml(f,d)});
|
|
}
|
|
`}let i=s[0],o=s[1],l=Math.ceil(t[2]/2),c=l*Math.ceil(t[1]/2),u=un();return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
${i}, ${o}, ${c}, ${l}, b, row, col);
|
|
return ${u.texture2D}(${n}, uv);
|
|
}
|
|
`}function RP(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[1]*t[2],s=t[2],{newShape:i,keptDims:o}=k.squeezeShape(t),l=i;if(l.length<t.length){let f=fl(e,l),m=["row","col","depth"];return`
|
|
${dl(f)}
|
|
float ${r}(int row, int col, int depth) {
|
|
return ${r}(${ml(m,o)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(${a}, ${s}, 1)));
|
|
${pl(e)}
|
|
}
|
|
`;let c=e.shapeInfo.texShape,u=c[0],h=c[1],d=e.shapeInfo.flatOffset;if(h===a&&d==null)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(${s}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${u}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(h===s&&d==null)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${t[1]}, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${h}.0, ${u}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let p=ci(n);return`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${a} + col * ${s} + depth + ${p};
|
|
vec2 uv = uvFromFlat(${u}, ${h}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function LP(e){let t=e.shapeInfo.logicalShape,n=t.length,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],o=i[0],l=i[1],c=Math.ceil(t[n-1]/2),u=c*Math.ceil(t[n-2]/2),h="int b, int row, int col",d=`b * ${u} + (row / 2) * ${c} + (col / 2)`;for(let f=2;f<n-1;f++)h=`int b${f}, `+h,u*=t[n-f-1],d=`b${f} * ${u} + `+d;let p=un();return`
|
|
vec4 ${a}(${h}) {
|
|
int index = ${d};
|
|
int texR = index / ${l};
|
|
int texC = index - texR * ${l};
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${l}, ${o});
|
|
return ${p.texture2D}(${r}, uv);
|
|
}
|
|
`}function FP(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[3],s=t[2]*a,i=t[1]*s,{newShape:o,keptDims:l}=k.squeezeShape(t);if(o.length<t.length){let f=fl(e,o),m=["row","col","depth","depth2"];return`
|
|
${dl(f)}
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
return ${r}(${ml(m,l)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(${i}, ${s}, ${a}, 1)));
|
|
${pl(e)}
|
|
}
|
|
`;let c=e.shapeInfo.flatOffset,u=e.shapeInfo.texShape,h=u[0],d=u[1];if(d===i&&c==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(${s}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(d===a&&c==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${t[1]*t[2]}, ${t[2]}, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let p=ci(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${i} + col * ${s} +
|
|
depth * ${a} + depth2;
|
|
vec2 uv = uvFromFlat(${h}, ${d}, index + ${p});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function MP(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[4],s=t[3]*a,i=t[2]*s,o=t[1]*i,{newShape:l,keptDims:c}=k.squeezeShape(t);if(l.length<t.length){let m=fl(e,l),A=["row","col","depth","depth2","depth3"];return`
|
|
${dl(m)}
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
return ${r}(${ml(A,c)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, ${a})) +
|
|
depth3;
|
|
${pl(e)}
|
|
}
|
|
`;let u=e.shapeInfo.flatOffset,h=e.shapeInfo.texShape,d=h[0],p=h[1];if(p===o&&u==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${i}, ${s}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${p}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(p===a&&u==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]},
|
|
${t[2]*t[3]}, ${t[3]}, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${p}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let f=ci(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} + depth * ${s} +
|
|
depth2 * ${a} + depth3 + ${f};
|
|
vec2 uv = uvFromFlat(${d}, ${p}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function $P(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:a,keptDims:s}=k.squeezeShape(t);if(a.length<t.length){let A=fl(e,a),y=["row","col","depth","depth2","depth3","depth4"];return`
|
|
${dl(A)}
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return ${r}(${ml(y,s)});
|
|
}
|
|
`}let i=t[5],o=t[4]*i,l=t[3]*o,c=t[2]*l,u=t[1]*c;if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${u}, ${c}, ${l}, ${o})) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(${i}, 1)));
|
|
${pl(e)}
|
|
}
|
|
`;let h=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,p=d[0],f=d[1];if(f===u&&h==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${c}, ${l}, ${o}, ${i})) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${p}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(f===i&&h==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]*t[4]},
|
|
${t[2]*t[3]*t[4]},
|
|
${t[3]*t[4]},
|
|
${t[4]})) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${p}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let m=ci(n);return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${u} + col * ${c} + depth * ${l} +
|
|
depth2 * ${o} + depth3 * ${i} + depth4 + ${m};
|
|
vec2 uv = uvFromFlat(${p}, ${f}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function pl(e){let t=e.name,n=k.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`
|
|
for (int i = 0; i < ${n}; i++) {
|
|
if (i == index) {
|
|
return ${t}[i];
|
|
}
|
|
}
|
|
`}function WP(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=Ow(e.shapeInfo.logicalShape,t.logicalShape),l=pt(i),c=i-s,u,h=["x","y","z","w","u","v"];s===0?u="":i<2&&o.length>=1?u="coords = 0;":u=o.map(A=>`coords.${h[A+c]} = 0;`).join(`
|
|
`);let d="";i<2&&s>0?d="coords":d=e.shapeInfo.logicalShape.map((A,y)=>`coords.${h[y+c]}`).join(", ");let p="return outputValue;",f=k.sizeFromShape(e.shapeInfo.logicalShape)===1,m=k.sizeFromShape(t.logicalShape)===1;if(s===1&&!f&&!m)p=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;else if(f&&!m)i===1?p=`
|
|
return vec4(outputValue.x, outputValue.x, 0., 0.);
|
|
`:p=`
|
|
return vec4(outputValue.x);
|
|
`;else if(o.length){let A=s-2,y=s-1;o.indexOf(A)>-1&&o.indexOf(y)>-1?p="return vec4(outputValue.x);":o.indexOf(A)>-1?p="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(p="return vec4(outputValue.xx, outputValue.zz);")}return`
|
|
vec4 ${a}() {
|
|
${l} coords = getOutputCoords();
|
|
${u}
|
|
vec4 outputValue = get${r}(${d});
|
|
${p}
|
|
}
|
|
`}function BP(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&k.arraysEqual(i,s))return`
|
|
float ${a}() {
|
|
return sampleTexture(${n}, resultUV);
|
|
}
|
|
`;let c=pt(l),u=Ow(e.shapeInfo.logicalShape,t.logicalShape),h=l-o,d,p=["x","y","z","w","u","v"];o===0?d="":l<2&&u.length>=1?d="coords = 0;":d=u.map(m=>`coords.${p[m+h]} = 0;`).join(`
|
|
`);let f="";return l<2&&o>0?f="coords":f=e.shapeInfo.logicalShape.map((m,A)=>`coords.${p[A+h]}`).join(", "),`
|
|
float ${a}() {
|
|
${c} coords = getOutputCoords();
|
|
${d}
|
|
return get${r}(${f});
|
|
}
|
|
`}function pt(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 fl(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function ml(e,t){return t.map(n=>e[n]).join(", ")}function tL(e,t,n,r){let a=t.userCode,s=n.map((p,f)=>{let m={logicalShape:p.shape,texShape:p.isUniform?null:p.texData.texShape,isUniform:p.isUniform,isPacked:p.isUniform?!1:p.texData.isPacked,flatOffset:null};return p.texData!=null&&p.texData.slice!=null&&p.texData.slice.flatOffset>0&&(m.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[f],shapeInfo:m}}),i=s.map(p=>p.shapeInfo),o={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=SP(s,o,a,t.packedInputs),c=e.createProgram(l),u=null,h=e.getUniformLocation(c,"NAN",!1);Q().getNumber("WEBGL_VERSION")===1&&(u=e.getUniformLocation(c,"INFINITY",!1));let d={};for(let p=0;p<t.variableNames.length;p++){let f=t.variableNames[p],m=!1;d[f]=e.getUniformLocation(c,f,m),d[`offset${f}`]=e.getUniformLocation(c,`offset${f}`,m)}return{program:t,source:l,webGLProgram:c,uniformLocations:d,inShapeInfos:i,outShapeInfo:o,infLoc:u,nanLoc:h}}function Lw(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 a=n.logicalShape,s=t[r],i=s.shape;if(!k.arraysEqual(a,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${a} and ${i} must match`);if(n.isUniform&&s.isUniform)return;let o=n.texShape,l=s.isUniform?null:s.texData.texShape;if(!k.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function nL(e,t,n,r,a){Lw(t.inShapeInfos,n),Lw([t.outShapeInfo],[r]);let s=r.texData.texture,i=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(s,i[0],i[1]):e.setOutputMatrixTexture(s,i[0],i[1]),e.setProgram(t.webGLProgram),Q().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,Infinity),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((o,l)=>{let c=t.program.variableNames[l],u=t.uniformLocations[c],h=t.uniformLocations[`offset${c}`];if(u!=null){if(o.isUniform){if(k.sizeFromShape(o.shape)<2)e.gl.uniform1f(u,o.uniformValues[0]);else{let d=o.uniformValues;d instanceof Float32Array||(d=new Float32Array(d)),e.gl.uniform1fv(u,d)}return}o.texData.slice!=null&&h!=null&&e.gl.uniform1i(h,o.texData.slice.flatOffset),e.setInputMatrixTexture(o.texData.texture,u,l)}}),a!=null&&a(e,t.webGLProgram),e.executeProgram()}function rL(e,t,n){let r="";t.concat(n).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0,l=i.isUniform?"uniform":i.texData.texShape;r+=`${i.shape}_${l}_${o}`});let a=e.userCode,s=e.constructor.name;return s+="_"+r+"_"+a,s}var{addImpl:aL,bincountImpl:Ww,bincountReduceImpl:sL,ceilImpl:iL,concatImpl:oL,expImpl:lL,expm1Impl:uL,floorImpl:cL,gatherV2Impl:hL,greaterImpl:dL,lessImpl:pL,linSpaceImpl:fL,logImpl:mL,maxImpl:AL,maximumImpl:yL,minimumImpl:gL,multiplyImpl:xL,negImpl:wL,prodImpl:_L,rangeImpl:bL,rsqrtImpl:vL,simpleAbsImpl:Bw,sliceImpl:kL,stridedSliceImpl:IL,subImpl:NL,tileImpl:SL,topKImpl:TL,transposeImpl:AA,uniqueImpl:EL}=em;function Vw(e,t){return["x","y","z","w","u","v"].slice(0,t).map(n=>`${e}.${n}`)}function cn(e,t){return t===1?[e]:Vw(e,t)}function CL(e,t){if(e===1)return"rc";let n="";for(let r=0;r<e;r++)n+=t[r],r<e-1&&(n+=",");return n}var $L=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e;let t=e.length;if(t===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{let n=cn("rc",t),r=pt(t),a=RL(t,e,n),s=FL(t,e[e.length-1],e[e.length-2],n),i=ML(e,n);this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
|
|
if(${a}) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
${s}
|
|
|
|
setOutput(vec4(${i}));
|
|
}
|
|
}
|
|
`}}};function DL(e,t){let n=[];for(let r=0;r<=1;r++)for(let a=0;a<=1;a++){let s=`${r===0?"r":"rp1"}, ${a===0?"c":"cp1"}`;for(let i=2;i<e;i++)s=`${t[t.length-1-i]},`+s;n.push(s)}return n}function RL(e,t,n){if(e===1)return`rc > ${t[0]}`;let r="";for(let a=e-2;a<e;a++)r+=`${n[a]} >= ${t[a]}`,a<e-1&&(r+="||");return r}function FL(e,t,n,r){if(e===1)return"";let a=r.slice(-2);return`
|
|
int r = ${a[0]};
|
|
int c = ${a[1]};
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= ${t};
|
|
bool rEdge = rp1 >= ${n};
|
|
`}function ML(e,t){let n=e.length,r=DL(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 Uw=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let n="";for(let r=0;r<4;r++){let a="thisRC = rc;";r%2==1&&(a+="thisRC.z += 1;"),r>1&&(a+="thisRC.y += 1;"),n+=`
|
|
${a}
|
|
${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=`
|
|
${OL(t)}
|
|
${cA(e)}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
ivec3 thisRC;
|
|
int rows = ${e[1]};
|
|
int cols = ${e[2]};
|
|
|
|
${n}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function OL(e){return`
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
${ui(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}var zL=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=jw(t,n),a=Gw(e,r,n);a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]);let s=Hw(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[a].shift();return this.usedTextures[a].push(o),o}let i;return r===Qt.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===Qt.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===Qt.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===Qt.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===Qt.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[a].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,n,r){if(this.freeTextures==null)return;let a=jw(n,r),s=Gw(t,a,r);s in this.freeTextures||(this.freeTextures[s]=[]);let i=Hw(t,a,this.gpgpu.gl,this.gpgpu.textureConfig,r),o=Q().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],c=l.indexOf(e);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(c,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 PL(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F||t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;throw new Error(`Unknown internal format ${t}`)}function Hw(e,t,n,r,a){let s=LL(t,r),i;if(a){let[l,c]=hl(e[0],e[1]);i=l*c}else{let[l,c]=ec(e[0],e[1]);i=l*c}let o=PL(n,s);return i*o}function LL(e,t){switch(e){case Qt.PACKED_2X2_FLOAT32:return fA(t);case Qt.PACKED_2X2_FLOAT16:return mA(t);case Qt.UNPACKED_FLOAT32:return hA(t);case Qt.UNPACKED_FLOAT16:return dA(t);case Qt.PACKED_4X1_UNSIGNED_BYTE:return pA(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function WL(e){return Q().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?Qt.PACKED_2X2_FLOAT32:Qt.UNPACKED_FLOAT32:e?Qt.PACKED_2X2_FLOAT16:Qt.UNPACKED_FLOAT16}function jw(e,t){if(e===Xn.UPLOAD)return Qt.PACKED_2X2_FLOAT32;if(e===Xn.RENDER||e==null)return WL(t);if(e===Xn.DOWNLOAD||e===Xn.PIXELS)return Qt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function Gw(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var Fa=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.userCode=`
|
|
float unaryOperation(float x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
float y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},gr="if (isnan(x)) return x;",BL="return x;",qw="return abs(x);",VL="return (x >= 0.0) ? x : (exp(x) - 1.0);",UL=gr+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,HL=gr+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,ep="return x;",jL="return x;",GL=`
|
|
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;
|
|
`,qL=`
|
|
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;
|
|
`,XL=`
|
|
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;
|
|
`,Al=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},KL=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e;let t=e.length,n=cn("rc",t),r=pt(t),a=CL(t,n),s=n.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 packedInput = getA(${a});
|
|
|
|
setOutput(getChannel(packedInput, ${i}));
|
|
}
|
|
`}},ZL=Mr.whereImpl,JL=1e-7,YL=1e-4,yA={};function QL(e){return e in yA||(yA[e]={}),yA[e]}var eW=128,tW=600;function nW(){return Q().global.screen==null?1024:Q().global.screen.height*Q().global.screen.width*window.devicePixelRatio*tW/1024/1024}var rm=class extends Zl{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.warnedAboutMemory=!1,this.warnedAboutCPUBackend=!1,this.pendingDeletes=0,this.disposed=!1,!Q().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){let t=Lr(Q().getNumber("WEBGL_VERSION"));this.binaryCache=QL(Q().getNumber("WEBGL_VERSION")),this.gpgpu=new nm(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 zL(this.gpgpu),this.numMBBeforeWarning=nW(),this.texData=new ph(this,Bn())}numDataIds(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes}write(e,t,n){if((Q().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||Q().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={};return this.texData.set(r,{shape:t,dtype:n,values:e,usage:Xn.UPLOAD,refCount:1,complexParentRefCount:0}),r}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){if(Q().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:Xn.UPLOAD,refCount:1,complexParentRefCount:0})}disposeIntermediateTensorInfo(e){let t=e.dataId;if(this.texData.has(t)){let n=this.texData.get(t);n.refCount--,n.refCount<1&&this.disposeData(t)}}readSync(e){let t=this.texData.get(e),{values:n,dtype:r,complexTensorInfos:a,slice:s,shape:i,isPacked:o}=t;if(s!=null){let h;o?h=new Al(i,ep):h=new Fa(i,ep);let d=this.runWebGLProgram(h,[{dataId:e,shape:i,dtype:r}],r),p=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),p}if(n!=null)return this.convertAndCacheOnCPU(e);if(r==="string")return n;let l=this.activeTimers!=null,c;l&&(c=k.now());let u;if(r==="complex64"){let h=this.readSync(a.real.dataId),d=this.readSync(a.imag.dataId);u=F.mergeRealAndImagArrays(h,d)}else u=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=k.now()-c),this.convertAndCacheOnCPU(e,u)}async read(e){if(this.pendingRead.has(e)){let p=this.pendingRead.get(e);return new Promise(f=>p.push(f))}let t=this.texData.get(e),{values:n,shape:r,slice:a,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(a!=null){let p;o?p=new Al(r,ep):p=new Fa(r,ep);let f=this.runWebGLProgram(p,[{dataId:e,shape:r,dtype:s}],s),m=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),m}if(n!=null)return this.convertAndCacheOnCPU(e);if(!Q().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&Q().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,c;if(s!=="complex64"&&Q().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let p=this.texData.get(c.dataId);l=this.gpgpu.createBufferFromTexture(p.texture,...tc(r))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let u;if(s==="complex64"){let p=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),f=p[0],m=p[1];u=F.mergeRealAndImagArrays(f,m)}else if(l==null)u=this.getValuesFromTexture(e);else{let p=k.sizeFromShape(r);u=this.gpgpu.downloadFloat32MatrixFromBuffer(l,p)}c!=null&&this.disposeIntermediateTensorInfo(c);let h=this.convertAndCacheOnCPU(e,u),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(p=>p(h)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e),this.pendingDeletes--),h}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>k.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return He(e.shape,e.dtype,n)}checkNumericalProblems(e){if(e!=null)for(let t=0;t<e.length;t++){let n=e[t];if(!Kx(n))throw Q().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:r}=this.texData.get(e),a=k.sizeFromShape(t);if(Q().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let h=this.decode(e),d=this.texData.get(h.dataId),p=this.gpgpu.downloadMatrixFromPackedTexture(d.texture,...tc(t)).subarray(0,a);return this.disposeIntermediateTensorInfo(h),p}let s=Q().getBool("WEBGL_PACK")&&r===!0,i=s?Zd(t):t,o=s?new mP(i):new fP(i),l=this.runWebGLProgram(o,[{shape:i,dtype:n,dataId:e}],"float32"),c=this.texData.get(l.dataId),u=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture,c.texShape[0],c.texShape[1]).subarray(0,a);return this.disposeIntermediateTensorInfo(l),u}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 a=k.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=k.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,r&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(a);i.kernelMs=k.sum(o),i.getExtraProfileInfo=()=>o.map((l,c)=>({name:s[c],ms:l})).map(l=>`${l.name}: ${l.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 Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:k.now(),endMs:null}}endTimer(e){return Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=k.now(),e)}async getQueryTime(e){if(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e){if(this.pendingDisposal.has(e))return;if(this.pendingRead.has(e)){this.pendingDisposal.add(e),this.pendingDeletes++;return}if(!this.texData.has(e))return;if(this.texData.get(e).complexParentRefCount>0){this.texData.get(e).refCount--;return}this.releaseGPUData(e);let{complexTensorInfos:t}=this.texData.get(e);t!=null&&(this.texData.get(t.real.dataId).complexParentRefCount--,this.disposeIntermediateTensorInfo(t.real),this.texData.get(t.imag.dataId).complexParentRefCount--,this.disposeIntermediateTensorInfo(t.imag)),this.texData.delete(e)}releaseGPUData(e){let{texture:t,dtype:n,texShape:r,usage:a,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,a,s)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture}getDataInfo(e){return this.texData.get(e)}getCPUBackend(){return Q().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=Bn().findBackend("cpu")),this.cpuBackend):null}shouldExecuteOnCPU(e,t=eW){let n=this.getCPUBackend();return!Q().getBool("IS_TEST")&&!this.warnedAboutCPUBackend&&n==null&&(console.warn("Your application contains ops that are small enough to be executed on the CPU backend, however the CPU backend cannot be found. Consider importing the CPU backend (@tensorflow/tfjs-backend-cpu) for better performance."),this.warnedAboutCPUBackend=!0),n!=null&&e.every(r=>this.texData.get(r.dataId).texture==null&&k.sizeFromShape(r.shape)<t)}getGPGPUContext(){return this.gpgpu}where(e){F.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return ZL(e.shape,t)}packedUnaryOp(e,t,n){let r=new Al(e.shape,t);return this.compileAndRun(r,[e],n)}abs(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){let n=Bw(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,n)}if(Q().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,qw,e.dtype);let t=new Fa(e.shape,qw);return this.compileAndRun(t,[e])}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&k.isString(n[0])){let a=n.map(s=>k.encodeString(s));r=this.write(a,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 Bn().makeTensorFromDataId(r,e,t,this)}unpackTensor(e){let t=new KL(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new $L(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[ii(e.shape),...oi(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},a=[ii(t),...oi(t)],s=new Uw(a,n),i=!0,o=this.runWebGLProgram(s,[r],e.dtype,null,i);return{dataId:o.dataId,shape:t,dtype:o.dtype}}decode(e){let t=this.texData.get(e),{isPacked:n,shape:r,dtype:a}=t,s=Zd(r),i;n?i=new pP(s):i=new dP(s);let o=!0,l=this.runWebGLProgram(i,[{shape:s,dtype:a,dataId:e}],a,null,o);return{dtype:a,shape:r,dataId:l.dataId}}runWebGLProgram(e,t,n,r,a=!1){let s=this.makeTensorInfo(e.outputShape,n),i=this.texData.get(s.dataId);if(e.packedOutput&&(i.isPacked=!0),e.outPackingScheme===Qu.DENSE){let f=tc(e.outputShape);i.texShape=f.map(m=>m*2)}if(e.outTexUsage!=null&&(i.usage=e.outTexUsage),k.sizeFromShape(s.shape)===0)return i.values=k.getTypedArrayFromDType(s.dtype,0),s;let o=[],l=t.map(f=>{if(f.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let m=this.texData.get(f.dataId);if(m.texture==null){if(!e.packedInputs&&k.sizeFromShape(f.shape)<=Q().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:f.shape,texData:null,isUniform:!0,uniformValues:m.values};e.packedInputs&&(m.isPacked=!0,m.shape=f.shape)}else if(!!m.isPacked!=!!e.packedInputs)f=m.isPacked?this.unpackTensor(f):this.packTensor(f),o.push(f),m=this.texData.get(f.dataId);else if(m.isPacked&&!Yu(m.shape,f.shape)){let A=f,y=f.shape;f.shape=m.shape,f=this.packedReshape(f,y),o.push(f),m=this.texData.get(f.dataId),A.shape=y}return this.uploadToGPU(f.dataId),{shape:f.shape,texData:m,isUniform:!1}});this.uploadToGPU(s.dataId);let c={shape:s.shape,texData:i,isUniform:!1},u=rL(e,l,c),h=this.getAndSaveBinary(u,()=>tL(this.gpgpu,e,l,c)),d=this.activeTimers!=null,p;if(d&&(p=this.startTimer()),nL(this.gpgpu,h,l,c,r),o.forEach(f=>this.disposeIntermediateTensorInfo(f)),d&&(p=this.endTimer(p),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(p)})),!Q().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&a===!1){let f=this.unpackTensor(s);return this.disposeIntermediateTensorInfo(s),f}return s}compileAndRun(e,t,n,r,a=!1){n=n||t[0].dtype;let s=this.runWebGLProgram(e,t,n,r,a);return Bn().makeTensorFromDataId(s.dataId,s.shape,s.dtype)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(Q().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),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=U(()=>{if(!Q().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=Q().getBool("DEBUG");Q().set("DEBUG",!1);let t=this.abs(Ee(1e-8)).dataSync()[0];if(Q().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?JL:YL}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:r,values:a,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,c;l&&(c=k.now());let u=t.texShape;if(u==null&&(u=hw(n,o),t.texShape=u),a!=null){let h=Zd(n),d,p=u[1],f=u[0],m=a instanceof Uint8Array;o?([p,f]=hl(u[0],u[1]),d=new yP(h,[f,p],m)):d=new AP(h,[f,p],m);let A=this.makeTensorInfo([f,p],r);m?this.texData.get(A.dataId).usage=Xn.PIXELS:this.texData.get(A.dataId).usage=Xn.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(A.dataId),p,f,a);let y=!0,g=this.runWebGLProgram(d,[A],r,null,y),w=this.texData.get(g.dataId);t.texture=w.texture,t.texShape=w.texShape,t.isPacked=w.isPacked,t.usage=w.usage,this.disposeIntermediateTensorInfo(A),this.texData.delete(g.dataId),t.values=null,l&&(this.uploadWaitMs+=k.now()-c)}else{let h=this.acquireTexture(u,i,r,o);t.texture=h}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:r}=n;return this.releaseGPUData(e),t!=null&&(n.values=rW(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 a=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${a} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*k.bytesPerElement(t)}};function rW(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;r<n.length;++r)n[r]=Math.round(e[r]);return n}else throw new Error(`Unknown dtype ${t}`)}var s0="2.8.3";function i0(){Q().set("WEBGL_FORCE_F16_TEXTURES",!0)}Gh.isBrowser()&&Au("webgl",()=>new rm,2);var j4={forceHalfFloat:i0},Xw=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,yl=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=F.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`}},tp=`
|
|
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;
|
|
`,rc=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=F.assertAndGetBroadcastShape(t,n);let a=this.outputShape.length,s="";if(r)if(a===0||k.sizeFromShape(this.outputShape)===1)s=`
|
|
result.y = 0.;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else if(s=`
|
|
${pt(a)} coords = getOutputCoords();
|
|
`,a===1)s+=`
|
|
result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else{let i=cn("coords",a);s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[a-2]} + 1) >= ${this.outputShape[a-2]};
|
|
bool nextColOutOfBounds =
|
|
(${i[a-1]} + 1) >= ${this.outputShape[a-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);
|
|
${s}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function Cn(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 aW={kernelName:ro,backendName:"webgl",kernelFunc:Cn};function Ma(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.makeTensorInfo(r.shape,"complex64"),i=n.texData.get(s.dataId),o=Cn({inputs:{x:r},backend:n}),l=n.texData.get(o.dataId);l.complexParentRefCount++;let c=Cn({inputs:{x:a},backend:n}),u=n.texData.get(c.dataId);return u.complexParentRefCount++,i.complexTensorInfos={real:o,imag:c},s}var sW={kernelName:xh,backendName:"webgl",kernelFunc:Ma},Kw="return (a < 0.) ? b * a : a;",Zw=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function iW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r,i=n.makeTensorInfo([],"float32",k.createScalarValue(s,"float32")),o=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new rc(Zw,a.shape,i.shape):new yl(Kw,a.shape,i.shape),l=n.runWebGLProgram(o,[a,i],a.dtype);return n.disposeIntermediateTensorInfo(i),l}var oW={kernelName:ps,backendName:"webgl",kernelFunc:iW},Jw="return (a < 0.) ? b * a : a;",Yw=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function lW(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new rc(Yw,r.shape,a.shape):new yl(Jw,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)}var uW={kernelName:Is,backendName:"webgl",kernelFunc:lW},Qw="if (isnan(x)) return x;",cW=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,hW=`
|
|
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 Qe({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:a,backend:s})=>{let{x:i}=a,o=s,l=r||i.dtype;if(o.shouldExecuteOnCPU([i])&&n!=null){let h=o.texData.get(i.dataId),d=n(h.values,l);return o.makeTensorInfo(i.shape,l,d)}let c=Q().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,u;return c?u=new Al(i.shape,t):u=new Fa(i.shape,e),o.runWebGLProgram(u,[i],l)}}function en({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:a,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:c}=i,u=o;if(r&&l.dtype==="complex64"){let f=u.texData.get(l.dataId),m=u.texData.get(c.dataId),[A,y]=[[f.complexTensorInfos.real,m.complexTensorInfos.real],[f.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(w=>{let[x,_]=w,b={dataId:x.dataId,dtype:x.dtype,shape:l.shape},T={dataId:_.dataId,dtype:_.dtype,shape:c.shape},S=new yl(e,l.shape,c.shape);return u.runWebGLProgram(S,[b,T],er(x.dtype,_.dtype))}),g=Ma({inputs:{real:A,imag:y},backend:u});return u.disposeIntermediateTensorInfo(A),u.disposeIntermediateTensorInfo(y),g}let h=s||er(l.dtype,c.dtype);if(u.shouldExecuteOnCPU([l,c])&&a!=null){let f=u.texData.get(l.dataId),m=u.texData.get(c.dataId),[A,y]=a(l.shape,c.shape,f.values,m.values,h),g=u.makeTensorInfo(y,h),w=u.texData.get(g.dataId);return w.values=A,g}let d=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,p;return d?p=new rc(t,l.shape,c.shape,n):p=new yl(e,l.shape,c.shape),u.runWebGLProgram(p,[l,c],h)}}function np(e,t=!1){if(e==="linear")return t?jL:BL;if(e==="relu")return t?qL:UL;if(e==="elu")return t?GL:VL;if(e==="relu6")return t?XL:HL;if(e==="prelu")return t?Yw:Jw;if(e==="leakyrelu")return t?Zw:Kw;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var e_=class{constructor(e,t,n,r=!1,a=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;let c=r?e[1]:e[2],u=Math.ceil(c/2),h=r?"i * 2, rc.y":"rc.y, i * 2",d=a?"rc.z, i * 2":"i * 2, rc.z",p=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=a?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",A="";i&&(o?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${i}
|
|
}`:l?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${i}
|
|
}`:m=`vec4 activation(vec4 x) {
|
|
${i}
|
|
}`,A="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let g="rc.x",w="rc.x";e[0]<t[0]?g=`int(min(float(rc.x), ${e[0]-1}.))`:t[0]<e[0]&&(w=`int(min(float(rc.x), ${t[0]-1}.))`),this.userCode=`
|
|
${m}
|
|
|
|
const float sharedDimension = ${u}.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
for (int i = 0; i < ${u}; i++) {
|
|
int batchA = ${g};
|
|
int batchB = ${w};
|
|
vec4 a = getMatrixA(batchA, ${h});
|
|
vec4 b = getMatrixB(batchB, ${d});
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (${p[0]} * ${f[0]});
|
|
result += (${p[1]} * ${f[1]});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
${y}
|
|
|
|
${A}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}},t_={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},n_=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=F.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOpComplex(
|
|
float areal, float aimag, float breal, float bimag) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float areal = getARealAtOutCoords();
|
|
float aimag = getAImagAtOutCoords();
|
|
float breal = getBRealAtOutCoords();
|
|
float bimag = getBImagAtOutCoords();
|
|
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
|
|
}
|
|
`}},r_="return a * b;";function a_(e){let{inputs:t,backend:n}=e,{a:r,b:a}=t,s=F.upcastType(r.dtype,a.dtype);if(r.dtype==="complex64"){let o=n.texData.get(r.dataId),l=n.texData.get(a.dataId),c=new n_(t_.REAL,r.shape,a.shape),u=new n_(t_.IMAG,r.shape,a.shape),h=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:r.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:r.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape}],d=n.runWebGLProgram(c,h,"float32"),p=n.runWebGLProgram(u,h,"float32"),f=Ma({inputs:{real:d,imag:p},backend:n});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),f}if(n.shouldExecuteOnCPU([r,a])){let o=n.texData.get(r.dataId),l=n.texData.get(a.dataId),[c,u]=xL(r.shape,a.shape,o.values,l.values,s),h=n.makeTensorInfo(u,s),d=n.texData.get(h.dataId);return d.values=c,h}let i;return Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new rc(r_,r.shape,a.shape):i=new yl(r_,r.shape,a.shape),n.runWebGLProgram(i,[r,a],s)}var dW={kernelName:_s,backendName:"webgl",kernelFunc:a_};function pW(e,t,n){let r=[ii(e.shape),...oi(e.shape)],a={dtype:e.dtype,shape:r,dataId:e.dataId},s=[ii(t),...oi(t)],i=new Uw(s,r),o=!0,l=n.runWebGLProgram(i,[a],e.dtype,null,o);return{dataId:l.dataId,shape:t,dtype:l.dtype}}function xe(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=n,o=k.sizeFromShape(a.shape),l=k.inferFromImplicitShape(s,o),c=k.sizeFromShape(l);k.assert(o===c,()=>`The new shape (${l}) has ${c} elements and the old shape (${a.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let u=i.texData.get(a.dataId);return u.isPacked&&!Yu(a.shape,l)&&!(u.texture!==null&&Yu(u.shape,l))?pW(a,l,i):(i.incRef(a.dataId),{dataId:a.dataId,shape:l,dtype:a.dtype})}var fW={kernelName:bo,backendName:"webgl",kernelFunc:xe},s_=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i=Math.floor(n/4)*4,o=n%4,l="sumValue += dot(values, ones);";if(t!=null){let u=1/t;l=`sumValue += dot(values * ${k.isInt(u)?u.toPrecision(2):u}, ones);`}let c="";a%n>0&&(c=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
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 * ${n};
|
|
|
|
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)
|
|
);
|
|
|
|
${l}
|
|
}
|
|
|
|
int inIdx = inOffset + ${i};
|
|
if (${o===1}) {
|
|
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1), 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2), 0.0);
|
|
|
|
${l}
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`}},mW=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="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 c=Math.floor(n/4)*4,u=n%4,h=`
|
|
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 = ${o}(values, minMaxValue);
|
|
}
|
|
`,d="vec4";t==="all"?(i="1.0",h=`
|
|
bool reducedAllValue = all(values);
|
|
float floatedReducedAllValue = float(reducedAllValue);
|
|
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
|
|
`,d="bvec4"):t==="any"&&(i="0.0",h=`
|
|
bool reducedAnyValue = any(values);
|
|
float floatedReducedAnyValue = float(reducedAnyValue);
|
|
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
|
|
`,d="bvec4");let p="";a%n>0&&(p=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
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) {
|
|
${p}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
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;
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${h}
|
|
}
|
|
|
|
int inIdx = inOffset + ${c};
|
|
if (${u===1}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===2}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===3}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function AW(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=F.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function hi(e,t,n,r){let a=AW(e.shape),s=e;for(let i=0;i<a.length;i++){let{inSize:o,windowSize:l,outSize:c}=a[i],u,h;n==="mean"?u=i===0?new s_({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:c},o):new s_({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:c}):u=new mW({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:c},n),h=s,s=r.runWebGLProgram(u,[s],t),h.dataId!==e.dataId&&r.disposeIntermediateTensorInfo(h)}return s}var gW=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[t[s]];this.outputShape=n,this.rank=n.length;let r=pt(this.rank),a=yW(t);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${a}));
|
|
}
|
|
`}};function yW(e){let t=e.length;if(t>6)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 a=0;a<e.length;a++)r[e[a]]=n[a];return r.join()}var xW=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let c=0;c<n.length;c++)n[c]=e[t[c]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=pt(this.rank),a=Vw("rc",this.rank),s=new Array(this.rank);for(let c=0;c<t.length;c++)s[t[c]]=a[c];let i=`vec2(${s.slice(-2).join()})`,o=`++${a[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${s.join()}), ${i})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = ${l};
|
|
if(${o}) {
|
|
result[1] = ${l};
|
|
}
|
|
--${a[this.rank-1]};
|
|
if(++${a[this.rank-2]} < ${n[this.rank-2]}) {
|
|
result[2] = ${l};
|
|
if(${o}) {
|
|
result[3] = ${l};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function rp(e,t,n){let r=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new xW(e.shape,t):new gW(e.shape,t);return n.runWebGLProgram(r,[e],e.dtype)}function wW(e,t,n,r){let a=t,s=e.shape.length,i=k.parseAxisParam(a,e.shape),o=i,l=F.getAxesPermutation(o,s),c=l!=null,u=e;c&&(u=rp(e,l,r),o=F.getInnerMostAxes(o.length,s)),F.assertAxesAreInnerMostDims("sum",o,s);let[h,d]=F.computeOutAndReduceShapes(u.shape,o),p=h;n&&(p=F.expandShapeToKeepDim(h,i));let f=k.sizeFromShape(d),m=k.sizeFromShape(e.shape)/f,A=xe({inputs:{x:u},attrs:{shape:[m,f]},backend:r}),y=jh(e.dtype),g=hi(A,y,"sum",r),w=xe({inputs:{x:g},attrs:{shape:p},backend:r});return r.disposeIntermediateTensorInfo(A),r.disposeIntermediateTensorInfo(g),c&&r.disposeIntermediateTensorInfo(u),w}function gA(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;return wW(a,s,i,n)}var _W={kernelName:Ds,backendName:"webgl",kernelFunc:gA};function yn(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{perm:s}=r,i=n,o=a.shape.length,l=new Array(o);for(let u=0;u<l.length;u++)l[u]=a.shape[s[u]];let c;if(i.shouldExecuteOnCPU([a])){let u=i.texData.get(a.dataId).values,h=AA(u,a.shape,a.dtype,s,l);c=i.makeTensorInfo(l,a.dtype);let d=i.texData.get(c.dataId);d.values=h}else c=rp(a,s,i);return c}var bW={kernelName:Ws,backendName:"webgl",kernelFunc:yn},i_=1e3;function ap({a:e,b:t,transposeA:n,transposeB:r,backend:a,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let c=e.shape.length,u=t.shape.length,h=n?e.shape[c-2]:e.shape[c-1],d=r?t.shape[u-1]:t.shape[u-2],p=n?e.shape[c-1]:e.shape[c-2],f=r?t.shape[u-2]:t.shape[u-1],m=e.shape.slice(0,-2),A=t.shape.slice(0,-2),y=k.sizeFromShape(m),g=k.sizeFromShape(A),w=y===g||y===1||g===1;k.assert(c>=2&&u>=2&&w,()=>`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 (${A}).`);let x=(y>g?e.shape.slice(0,-2):t.shape.slice(0,-2)).concat([p,f]);k.assert(h===d,()=>`Error in matMul: inner shapes (${h}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`);let _=n?[y,h,p]:[y,p,h],b=r?[g,f,d]:[g,d,f],T=xe({inputs:{x:e},backend:a,attrs:{shape:_}}),S=xe({inputs:{x:t},backend:a,attrs:{shape:b}}),N=[T,S],C=Math.max(y,g),$=n?T.shape[1]:T.shape[2],D=s!=null,O=i!=null,B=l==="leakyrelu",H=l!=null?np(l,!0):null,X=D||O||B||H!=null,Z;if((p===1||f===1)&&$>i_&&X===!1){let Y=T,ie=S;n&&(Y=yn({inputs:{x:T},backend:a,attrs:{perm:[0,2,1]}}),N.push(Y)),r&&(ie=yn({inputs:{x:S},backend:a,attrs:{perm:[0,2,1]}}),N.push(ie));let re=f!==1,ne=f===1,ae=Y;re&&(ae=xe({inputs:{x:Y},backend:a,attrs:{shape:[C,$,1]}}),N.push(ae));let de=f===1?2:1,ue=ie;ne&&(ue=xe({inputs:{x:ie},backend:a,attrs:{shape:[C,1,$]}}),N.push(ue));let me=a_({inputs:{a:ae,b:ue},backend:a});Z=gA({inputs:{x:me},backend:a,attrs:{axis:de,keepDims:!0}}),N.push(me)}else{let Y=er(e.dtype,t.dtype),ie=new e_(_,b,[C,p,f],n,r,D,H,O,B),re=[T,S];if(s!=null&&re.push(s),O&&re.push(i),B){let ne=a.makeTensorInfo([],"float32",k.createScalarValue(o,"float32"));re.push(ne),N.push(ne)}Z=a.runWebGLProgram(ie,re,Y)}let ee=xe({inputs:{x:Z},backend:a,attrs:{shape:x}});N.push(Z);for(let Y of N)a.disposeIntermediateTensorInfo(Y);return ee}function vW(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:c,activation:u,leakyreluAlpha:h}=r;return ap({a,b:s,transposeA:l,transposeB:c,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:h,activation:u})}var kW={kernelName:Bs,backendName:"webgl",kernelFunc:vW},o_="return abs(x);";function IW(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&r.dtype!=="complex64"){let s=n.texData.get(r.dataId),i=Bw(s.values);return n.makeTensorInfo(r.shape,r.dtype,i)}let a;return Q().getBool("WEBGL_PACK_UNARY_OPERATIONS")?a=new Al(r.shape,o_):a=new Fa(r.shape,o_),n.runWebGLProgram(a,[r],r.dtype)}var NW={kernelName:Di,backendName:"webgl",kernelFunc:IW},SW=gr+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,TW=Qe({opSnippet:SW}),EW={kernelName:Oi,backendName:"webgl",kernelFunc:TW},CW=gr+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,RW=Qe({opSnippet:CW}),FW={kernelName:zi,backendName:"webgl",kernelFunc:RW},l_="return a + b;",MW=en({opSnippet:l_,packedOpSnippet:l_,supportsComplex:!0,cpuKernelImpl:aL}),$W={kernelName:Aa,backendName:"webgl",kernelFunc:MW},DW=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((a,s)=>`T${s}`);let n=[];this.variableNames.forEach(a=>{n.push(`float v${a} = get${a}AtOutCoords();`)});let r=this.variableNames.map(a=>`v${a}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
float result = ${r};
|
|
setOutput(result);
|
|
}
|
|
`}},OW=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((a,s)=>`T${s}`);let n=[];this.variableNames.forEach(a=>{n.push(`vec4 v${a} = get${a}AtOutCoords();`)});let r=this.variableNames.map(a=>`v${a}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
vec4 result = ${r};
|
|
setOutput(result);
|
|
}
|
|
`}};function sp(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return Cn({inputs:{x:r[0]},backend:n});if(r.length>Q().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(r.length/2),l=sp({inputs:r.slice(0,o),backend:n}),c=sp({inputs:r.slice(o),backend:n});return sp({inputs:[l,c],backend:n})}let a=r.map(o=>o.dtype).reduce((o,l)=>er(o,l)),s=r.map(o=>o.shape),i=Q().getBool("WEBGL_PACK")?new OW(r[0].shape,s):new DW(r[0].shape,s);return n.runWebGLProgram(i,r,a)}var zW={kernelName:Ja,backendName:"webgl",kernelFunc:sp};function PW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=F.getAxesPermutation(c,o),h=a;u!=null&&(h=yn({inputs:{x:a},backend:n,attrs:{perm:u}}),c=F.getInnerMostAxes(c.length,o)),F.assertAxesAreInnerMostDims("all",c,o);let[d,p]=F.computeOutAndReduceShapes(h.shape,c),f=k.sizeFromShape(p),m=xe({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=hi(m,m.dtype,"all",n),y;if(i){let g=F.expandShapeToKeepDim(d,l);y=xe({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=xe({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),u!=null&&n.disposeIntermediateTensorInfo(h),y}var LW={kernelName:fh,backendName:"webgl",kernelFunc:PW};function WW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=F.getAxesPermutation(c,o),h=a;u!=null&&(h=yn({inputs:{x:a},backend:n,attrs:{perm:u}}),c=F.getInnerMostAxes(c.length,o)),F.assertAxesAreInnerMostDims("any",c,o);let[d,p]=F.computeOutAndReduceShapes(h.shape,c),f=k.sizeFromShape(p),m=xe({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=hi(m,m.dtype,"any",n),y;if(i){let g=F.expandShapeToKeepDim(d,l);y=xe({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=xe({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),u!=null&&n.disposeIntermediateTensorInfo(h),y}var BW={kernelName:mh,backendName:"webgl",kernelFunc:WW},VW=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:r,batchSize:a,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[a,s];let i=t==="max"?">":"<",o=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 = ${o};
|
|
float candidate = getA(batch, inIdx);
|
|
if (candidate ${i} bestValue) {
|
|
bestValue = candidate;
|
|
bestIndex = inIdx;
|
|
}
|
|
}
|
|
setOutput(float(bestIndex));
|
|
}
|
|
`}},UW=class{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,k.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let a=e[e.length-1],s=Math.ceil(a/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),r||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=pt(o),c=cn("coords",o),u,h;if(s===1){h=o+1;let T=pt(h);u=`
|
|
${T} sourceLocR = ${T}(${c.join()}, 0);
|
|
++${c[o-1]};
|
|
${T} sourceLocG = ${T}(${c.join()}, 0);
|
|
++${c[o-2]};
|
|
${T} sourceLocA = ${T}(${c.join()}, 0);
|
|
--${c[o-1]};
|
|
${T} sourceLocB = ${T}(${c.join()}, 0);
|
|
--${c[o-2]};`}else h=o,u=`
|
|
${l} sourceLocR = coords;
|
|
++${c[o-1]};
|
|
${l} sourceLocG = coords;
|
|
++${c[o-2]};
|
|
${l} sourceLocA = coords;
|
|
--${c[o-1]};
|
|
${l} sourceLocB = coords;
|
|
--${c[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,h),p="."+d[h-1],f=d.map(T=>"int "+T),m=cn("sourceLocR",h-1).concat("inIdx.r"),A=cn("sourceLocG",h-1).concat("inIdx.g"),y=cn("sourceLocB",h-1).concat("inIdx.b"),g=cn("sourceLocA",h-1).concat("inIdx.a"),w=n==="max"?"greaterThan":"lessThan",x=r?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(${m.join()}),
|
|
getBestIndicesAChannel(${A.join()}),
|
|
getBestIndicesAChannel(${y.join()}),
|
|
getBestIndicesAChannel(${g.join()})));`,_=`vec4(
|
|
getAChannel(${m.join()}),
|
|
hasNextCol ? getAChannel(${A.join()}) : 0.,
|
|
hasNextRow ? getAChannel(${y.join()}) : 0.,
|
|
hasNextRow && hasNextCol ? getAChannel(${g.join()}) : 0.)`,b=r?"":`
|
|
float getBestIndicesAChannel(${f.join()}) {
|
|
return getChannel(getBestIndicesA(${d.join()}),
|
|
vec2(${d.slice(-2).join()}));
|
|
}`;this.userCode=`
|
|
float getAChannel(${f.join()}) {
|
|
return getChannel(getA(${d.join()}),
|
|
vec2(${d.slice(-2).join()}));
|
|
}
|
|
${b}
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
bool hasNextCol = ${c[o-1]} < ${i[o-1]-1};
|
|
bool hasNextRow = ${c[o-2]} < ${i[o-2]-1};
|
|
${u}
|
|
ivec4 srcIdx = ivec4(sourceLocR${p}, sourceLocG${p},
|
|
sourceLocB${p}, sourceLocA${p}) * ${t};
|
|
ivec4 inIdx = srcIdx;
|
|
vec4 bestIndex = vec4(inIdx);
|
|
vec4 bestValue = ${_};
|
|
|
|
for (int i = 0; i < ${t}; i++) {
|
|
inIdx = srcIdx;
|
|
${x}
|
|
vec4 candidate = ${_};
|
|
bvec4 nan = isnan(candidate);
|
|
bvec4 replace = bvec4(
|
|
vec4(${w}(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 u_(e,t,n,r=null){let a=t.shape[0],s=t.shape[1];r!=null&&(a=r.shape[0],s=r.shape[1]);let i=F.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:a,outSize:Math.ceil(s/i)},l=new VW(o,n,r==null),c=[t];r!=null&&c.push(r);let u=e.runWebGLProgram(l,c,"int32");if(u.shape[1]===1)return u;let h=u_(e,t,n,u);return e.disposeIntermediateTensorInfo(u),h}function c_(e,t,n,r=null){let a=r!=null?r.shape:t.shape,s=a[a.length-1],i=F.computeOptimalWindowSize(s),o=new UW(a,i,n,r==null),l=r==null?[t]:[t,r],c=e.runWebGLProgram(o,l,"int32");if(c.shape.length===t.shape.length){let u=c_(e,t,n,c);return e.disposeIntermediateTensorInfo(c),u}return c}function h_(e,t,n,r){let a=[n];if(F.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),a,t.shape.length),!Q().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],[i,o]=F.computeOutAndReduceShapes(t.shape,a),l=k.sizeFromShape(o),c=xe({inputs:{x:t},backend:e,attrs:{shape:[-1,l]}});s.push(c);let u=u_(e,c,r);s.push(u);let h=xe({inputs:{x:u},backend:e,attrs:{shape:i}});return s.forEach(d=>e.disposeIntermediateTensorInfo(d)),h}return c_(e,t,r)}function HW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=k.parseAxisParam(s,a.shape),o=F.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=yn({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=F.getInnerMostAxes(i.length,l.shape.length)),F.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let u=h_(n,l,i[0],"max");return c.forEach(h=>n.disposeIntermediateTensorInfo(h)),u}var jW={kernelName:Ya,backendName:"webgl",kernelFunc:HW};function GW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=k.parseAxisParam(s,a.shape),o=F.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=yn({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=F.getInnerMostAxes(i.length,l.shape.length)),F.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let u=h_(n,l,i[0],"min");return c.forEach(h=>n.disposeIntermediateTensorInfo(h)),u}var qW={kernelName:Jl,backendName:"webgl",kernelFunc:GW},XW=gr+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,KW=Qe({opSnippet:XW}),ZW={kernelName:Pi,backendName:"webgl",kernelFunc:KW},JW=gr+"return log(x + sqrt(x * x + 1.0));",YW=Qe({opSnippet:JW}),QW={kernelName:Li,backendName:"webgl",kernelFunc:YW},eB=gr+`
|
|
return atan(x);
|
|
`,tB=Qe({opSnippet:eB}),nB={kernelName:Wi,backendName:"webgl",kernelFunc:tB},rB=cW+`
|
|
return atan(a, b);
|
|
`,aB=`
|
|
vec4 result = atan(a, b);
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+hW+`
|
|
return result;
|
|
`,sB=en({opSnippet:rB,packedOpSnippet:aB}),iB={kernelName:Vi,backendName:"webgl",kernelFunc:sB},oB=gr+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,lB=Qe({opSnippet:oB}),uB={kernelName:Bi,backendName:"webgl",kernelFunc:lB},ac=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,c=e.dilationWidth,u=e.effectiveFilterHeight,h=e.effectiveFilterWidth,d=e.padInfo.top,p=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,A=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(f||(y="-1.0 / 1e-20"),n){let T=">=";this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${d}, ${p});
|
|
|
|
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 < ${u};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${h};
|
|
wC += ${c}) {
|
|
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 ${T} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${r?a?m:A:`wR * ${h} + wC`};
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let g="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let x=Math.floor(s/4)*4,_=s%4,b=`
|
|
if (${f}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${g}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${d}, ${p});
|
|
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 >= ${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(${y});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wR = 0; wR < ${u};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${x}; 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)
|
|
);
|
|
|
|
${b}
|
|
}
|
|
|
|
int xC = xCCorner + ${x};
|
|
if (${_===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${b}
|
|
} else if (${_===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${c}, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${b}
|
|
} else if (${_===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${c}, d),
|
|
getValue(batch, xR, xC + 2 * ${c}, d),
|
|
initializationValue
|
|
);
|
|
|
|
${b}
|
|
}
|
|
}
|
|
setOutput(${w});
|
|
}
|
|
`}},xA=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,c=e.dilationDepth,u=e.dilationHeight,h=e.dilationWidth,d=e.effectiveFilterDepth,p=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,A=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let g=t==="avg",w="0.0";if(g||(w="-1.0 / 1e-20"),n){let N=">=";this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${m}, ${A}, ${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 < ${d};
|
|
wD += ${c}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${u}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${f};
|
|
wC += ${h}) {
|
|
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?a?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${p} * ${f} +
|
|
wR * ${f} + wC`};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let x="max",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(_="avgValue / count");let b=Math.floor(s/4)*4,T=s%4,S=`
|
|
if (${g}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${x}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${m}, ${A}, ${y});
|
|
const float initializationValue = ${w};
|
|
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(${w});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wD = 0; wD < ${d};
|
|
wD += ${c}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${u}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${b}; wC += 4) {
|
|
int xC = xCCorner + wC * ${h};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 3 * ${h}, ch)
|
|
);
|
|
|
|
${S}
|
|
}
|
|
|
|
int xC = xCCorner + ${b};
|
|
if (${T===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${S}
|
|
} else if (${T===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${S}
|
|
} else if (${T===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${h}, ch),
|
|
initializationValue
|
|
);
|
|
|
|
${S}
|
|
}
|
|
}
|
|
setOutput(${_});
|
|
}
|
|
}
|
|
`}};function cB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;cl(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(F.eitherStridesOrDilationsAreOne(i,c),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=F.computePool2DInfo(a.shape,s,i,c,o,l);if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))return Cn({inputs:{x:a},backend:n});let h=new ac(u,"avg",!1);return n.runWebGLProgram(h,[a],"float32")}var hB={kernelName:Qa,backendName:"webgl",kernelFunc:cB};function dB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:c}=r,u=[1,1,1],h=F.computePool3DInfo(a.shape,s,i,u,o,l,c),d=new xA(h,"avg",!1);return n.runWebGLProgram(d,[a],"float32")}var pB={kernelName:Yl,backendName:"webgl",kernelFunc:dB},fB=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,c=o-1-e.padInfo.top,u=l-1-e.padInfo.left,h=1/(t*n);this.userCode=`
|
|
const ivec2 pads = ivec2(${c}, ${u});
|
|
const float avgMultiplier = float(${h});
|
|
|
|
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) / ${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+= ${i}) {
|
|
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(b, idyR, idyC, d);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},mB=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,c=e.dilationWidth,u=e.effectiveFilterDepth,h=e.effectiveFilterHeight,d=e.effectiveFilterWidth,p=u-1-e.padInfo.front,f=h-1-e.padInfo.top,m=d-1-e.padInfo.left,A=1/(t*n*r);this.userCode=`
|
|
const ivec3 pads = ivec3(${p}, ${f}, ${m});
|
|
const float avgMultiplier = float(${A});
|
|
|
|
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 < ${u};
|
|
wD += ${o}) {
|
|
float dyD = float(dyDCorner + wD) / ${a}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${l}) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.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 += ${c}) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.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 AB(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:c,dimRoundingMode:u}=r,h=[1,1,1],d=F.computePool3DInfo(i.shape,o,l,h,c,u),p=new mB(d);return n.runWebGLProgram(p,[a],i.dtype)}var yB={kernelName:yh,backendName:"webgl",kernelFunc:AB};function gB(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;cl([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:c}=r,u=F.computePool2DInfo(i.shape,o,l,1,c),h=new fB(u);return n.runWebGLProgram(h,[a],i.dtype)}var xB={kernelName:Ah,backendName:"webgl",kernelFunc:gB};function wB(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;return ap({a,b:s,transposeA:i,transposeB:o,backend:n})}var _B={kernelName:es,backendName:"webgl",kernelFunc:wB},bB=class{constructor(e,t,n,r,a,s){this.outputShape=[],this.variableNames=["x","mean","variance"],F.assertAndGetBroadcastShape(e,t),F.assertAndGetBroadcastShape(e,n);let i="0.0";r!=null&&(F.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";a!=null&&(F.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float x = getXAtOutCoords();
|
|
float mean = getMeanAtOutCoords();
|
|
float variance = getVarianceAtOutCoords();
|
|
float offset = ${i};
|
|
float scale = ${o};
|
|
float inv = scale * inversesqrt(variance + float(${s}));
|
|
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
|
|
}
|
|
`}},vB=class{constructor(e,t,n,r,a,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],F.assertAndGetBroadcastShape(e,t),F.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";r!=null&&(F.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";a!=null&&(F.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
vec4 offset = ${i};
|
|
vec4 scale = ${o};
|
|
|
|
vec4 x = getXAtOutCoords();
|
|
vec4 mean = getMeanAtOutCoords();
|
|
vec4 variance = getVarianceAtOutCoords();
|
|
|
|
vec4 inv = scale * inversesqrt(variance + vec4(${s}));
|
|
|
|
setOutput((x - mean) * inv + offset);
|
|
}
|
|
`}},kB=({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:a,variance:s,offset:i,scale:o}=e;k.assert(a.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),k.assert(i==null||a.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),k.assert(o==null||a.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let c=[r,a,s],u=null;i!=null&&(u=i.shape,c.push(i));let h=null;o!=null&&(h=o.shape,c.push(o));let d=Q().getBool("WEBGL_PACK_NORMALIZATION")?new vB(r.shape,a.shape,s.shape,u,h,l):new bB(r.shape,a.shape,s.shape,u,h,l);return t.runWebGLProgram(d,c,c[0].dtype)},IB={kernelName:hs,backendName:"webgl",kernelFunc:kB},SB=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=pt(this.rank),n=`uniform int start[${this.rank}];`,r=NB(this.rank),a,s=e.map((i,o)=>`sourceLoc.${wA[o]} = start[${o}] + coords.${wA[o]};`);a=`
|
|
${t} sourceLoc;
|
|
${t} coords = getOutputCoords();
|
|
${s.join(`
|
|
`)}
|
|
`,this.userCode=`
|
|
${n}
|
|
void main() {
|
|
${a}
|
|
setOutput(getSource(${r}));
|
|
}
|
|
`}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}},wA=["x","y","z","w","u","v"];function NB(e){if(e===1)return"sourceLoc";if(e<=6)return wA.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var TB=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length;let t=pt(this.rank),n=cn("coords",this.rank),r=cn("sourceLoc",this.rank),a=this.rank===1?"sourceLoc":`vec2(${r.slice(-2).join()})`,s=`getChannel(getSource(${r.join()}), ${a})`,i=`
|
|
result.x = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${r[this.rank-1]};
|
|
result.y = ${s};
|
|
--${r[this.rank-1]};
|
|
}
|
|
`,o=this.rank===1?"":`
|
|
--${n[this.rank-1]};
|
|
if (++${n[this.rank-2]} < ${e[this.rank-2]}) {
|
|
++${r[this.rank-2]};
|
|
result.z = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${r[this.rank-1]};
|
|
result.w = ${s};
|
|
}
|
|
}
|
|
`,l=this.rank<=4?`sourceLoc = coords +
|
|
${t}(${e.map((c,u)=>`start[${u}]`).join()});`:e.map((c,u)=>`${r[u]} = ${n[u]} + start[${u}];`).join(`
|
|
`);this.userCode=`
|
|
uniform int start[${this.rank}];
|
|
void main() {
|
|
${t} coords = getOutputCoords();
|
|
${t} sourceLoc;
|
|
${l}
|
|
vec4 result = vec4(0.);
|
|
${i}
|
|
${o}
|
|
setOutput(result);
|
|
}
|
|
`}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}};function EB(e,t,n,r){let a=r.texData.get(e.dataId),s=r.makeTensorInfo(n,e.dtype),i=r.texData.get(s.dataId);Object.assign(i,a),i.shape=n,i.dtype=e.dtype;let o=on.computeFlatOffset(t,k.computeStrides(e.shape));a.slice&&(o+=a.slice.flatOffset),i.slice={flatOffset:o,origDataId:a.slice&&a.slice.origDataId||e.dataId};let l=r.dataRefCount.get(i.slice.origDataId)||1;return r.dataRefCount.set(i.slice.origDataId,l+1),s}function sc(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r,[o,l]=on.parseSliceParams(a,s,i);if(on.assertParamsValid(a,o,l),k.sizeFromShape(l)===0)return n.makeTensorInfo(l,a.dtype,[]);if(n.shouldExecuteOnCPU([a])||a.dtype==="string"){let h=n.texData.get(a.dataId),d=kL(h.values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,d)}let{isPacked:c}=n.texData.get(a.dataId),u=on.isSliceContinous(a.shape,o,l);if(c||!u){let h=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new TB(l):new SB(l),d=h.getCustomSetupFunc(o);return n.runWebGLProgram(h,[a],a.dtype,d)}return n.uploadToGPU(a.dataId),EB(a,o,l,n)}var CB={kernelName:No,backendName:"webgl",kernelFunc:sc},RB=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;k.assert(a.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((g,w)=>g*w),l=F.getReshaped(a.shape,s,o),c=F.getPermuted(l.length,s.length),u=F.getReshapedPermuted(a.shape,s,o),h=F.getSliceBeginCoords(i,s.length),d=F.getSliceSize(u,i,s.length),p=[],f=xe({inputs:{x:a},backend:n,attrs:{shape:l}}),m=yn({inputs:{x:f},backend:n,attrs:{perm:c}}),A=xe({inputs:{x:m},backend:n,attrs:{shape:u}}),y=sc({inputs:{x:A},backend:n,attrs:{begin:h,size:d}});return p.push(f),p.push(m),p.push(A),p.forEach(g=>n.disposeIntermediateTensorInfo(g)),y},FB={kernelName:Ql,backendName:"webgl",kernelFunc:RB};function MB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.readSync(a.dataId),l=n.readSync(s.dataId),c=Ww(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,c)}var $B={kernelName:gh,backendName:"webgl",kernelFunc:MB},DB="return float(a != b);",d_=en({opSnippet:DB,dtype:"bool"}),OB={kernelName:fo,backendName:"webgl",kernelFunc:d_};function ic(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.texData.get(r.dataId);return Cn({inputs:{x:a.complexTensorInfos.real},backend:n})}var zB={kernelName:Lh,backendName:"webgl",kernelFunc:ic},PB="return float(int(x));";function LB(e,t){let n=new Fa(e.shape,PB),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function _A(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if(s==="complex64"){if(a.dtype==="complex64")return Cn({inputs:{x:a},backend:n});let i=Rt(a.shape),o=_A({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),l=Ma({inputs:{real:o,imag:i},backend:n});return i.dispose(),n.disposeIntermediateTensorInfo(o),l}if(a.dtype==="complex64"){let i=ic({inputs:{input:a},backend:n}),o=_A({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!k.hasEncodingLoss(a.dtype,s)){let i=Cn({inputs:{x:a},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32")return LB(a,n);if(s==="bool"){let i=n.makeTensorInfo([],"bool",k.getTypedArrayFromDType("bool",1)),o=d_({inputs:{a,b:i},backend:n});return n.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}var WB={kernelName:ts,backendName:"webgl",kernelFunc:_A},p_="return ceil(x);",BB=Qe({opSnippet:p_,packedOpSnippet:p_,cpuKernelImpl:iL}),VB={kernelName:Ui,backendName:"webgl",kernelFunc:BB},UB=class{constructor(e){this.variableNames=["A"],this.outputShape=e,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
float value = getAAtOutCoords();
|
|
if (isnan(value)) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, minVal, maxVal));
|
|
}
|
|
`}getCustomSetupFunc(e,t){return(n,r)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}},HB=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
vec4 value = getAAtOutCoords();
|
|
|
|
if (any(isnan(value))) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, vec4(minVal), vec4(maxVal)));
|
|
}
|
|
`}getCustomSetupFunc(e,t){return(n,r)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}};function jB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o;Q().getBool("WEBGL_PACK_CLIP")?o=new HB(a.shape):o=new UB(a.shape);let l=o.getCustomSetupFunc(s,i);return n.runWebGLProgram(o,[a],a.dtype,l)}var GB={kernelName:ya,backendName:"webgl",kernelFunc:jB},qB=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 f_(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function XB(e){let{inputs:t,backend:n}=e,{x:r}=t,a=n.texData.get(r.dataId),s=new qB(r.shape),i=[f_(r,a.complexTensorInfos.real),f_(r,a.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}var KB={kernelName:eu,backendName:"webgl",kernelFunc:XB},ZB=class{constructor(e){this.outputShape=[],this.outputShape=F.computeOutShape(e,1),this.variableNames=e.map((s,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s<t.length;s++)t[s]=t[s-1]+e[s][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let s=1;s<t.length;s++){let i=t[s-1];n.push(`else if (yC < ${t[s]}) setOutput(getT${s}(yR, yC-${i}));`)}let r=t.length,a=t[t.length-1];n.push(`else setOutput(getT${r}(yR, yC-${a}));`),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
${n.join(`
|
|
`)}
|
|
}
|
|
`}},JB=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=F.computeOutShape(e,t);let n=this.outputShape,r=n.length,a=pt(r),s=cn("coords",r),i=["x","y","z","w","u","v"].slice(0,r);this.variableNames=e.map((f,m)=>`T${m}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let f=1;f<o.length;f++)o[f]=o[f-1]+e[f][t];let l=i[t],c=i.slice(-2),u=i.join(),h=`if (${l} < ${o[0]}) {
|
|
return getChannel(
|
|
getT0(${u}), vec2(${c.join()}));
|
|
}`;for(let f=1;f<o.length;f++){let m=o[f-1];h+=`
|
|
if (${l} < ${o[f]} && ${l} >= ${o[f-1]}) {
|
|
return getChannel(
|
|
getT${f}(${ip(i,l,m)}),
|
|
vec2(${ip(c,l,m)}));
|
|
}`}let d=o.length,p=o[o.length-1];h+=`
|
|
return getChannel(
|
|
getT${d}(${ip(i,l,p)}),
|
|
vec2(${ip(c,l,p)}));`,this.userCode=`
|
|
float getValue(${i.map(f=>"int "+f)}) {
|
|
${h}
|
|
}
|
|
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
vec4 result = vec4(getValue(${s}), 0., 0., 0.);
|
|
|
|
${s[r-1]} = ${s[r-1]} + 1;
|
|
if (${s[r-1]} < ${n[r-1]}) {
|
|
result.g = getValue(${s});
|
|
}
|
|
|
|
${s[r-2]} = ${s[r-2]} + 1;
|
|
if (${s[r-2]} < ${n[r-2]}) {
|
|
result.a = getValue(${s});
|
|
}
|
|
|
|
${s[r-1]} = ${s[r-1]} - 1;
|
|
if (${s[r-2]} < ${n[r-2]} &&
|
|
${s[r-1]} < ${n[r-1]}) {
|
|
result.b = getValue(${s});
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function ip(e,t,n){let r=e.indexOf(t);return e.map((a,s)=>s===r?`${a} - ${n}`:a).join()}function op(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.texData.get(r.dataId);return Cn({inputs:{x:a.complexTensorInfos.imag},backend:n})}var YB={kernelName:Fh,backendName:"webgl",kernelFunc:op};function gl(e,t,n){let r=e[0].dtype;if(r==="complex64"){let c=e.map(f=>ic({inputs:{input:f},backend:n})),u=e.map(f=>op({inputs:{input:f},backend:n})),h=gl(c,t,n),d=gl(u,t,n),p=Ma({inputs:{real:h,imag:d},backend:n});return c.forEach(f=>n.disposeIntermediateTensorInfo(f)),u.forEach(f=>n.disposeIntermediateTensorInfo(f)),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),p}if(r==="string"){let{tensors2D:c,outShape:u}=m_(e,t,n),h=c.map(A=>({vals:n.readSync(A.dataId),shape:A.shape})),d=c[0].shape[0]===1,p=oL(h,u,r,d),f=F.computeOutShape(e.map(A=>A.shape),t),m=n.makeTensorInfo(f,r,p);return c.forEach(A=>n.disposeIntermediateTensorInfo(A)),m}if(e.length>Q().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let c=Math.floor(e.length/2),u=gl(e.slice(0,c),t,n),h=gl(e.slice(c),t,n),d=gl([u,h],t,n);return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),d}if(Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let c=new JB(e.map(u=>u.shape),t);return n.runWebGLProgram(c,e,r)}let{tensors2D:a,outShape:s}=m_(e,t,n),i=new ZB(a.map(c=>c.shape)),o=n.runWebGLProgram(i,a,r);a.forEach(c=>n.disposeIntermediateTensorInfo(c));let l=xe({inputs:{x:o},attrs:{shape:s},backend:n});return n.disposeIntermediateTensorInfo(o),l}function m_(e,t,n){let r=F.computeOutShape(e.map(a=>a.shape),t);return{tensors2D:e.map(a=>xe({inputs:{x:a},attrs:{shape:[-1,k.sizeFromShape(a.shape.slice(t))]},backend:n})),outShape:r}}function A_(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=k.parseAxisParam(a,t[0].shape)[0],i=F.computeOutShape(t.map(c=>c.shape),s);if(k.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(c=>k.sizeFromShape(c.shape)>0);if(o.length===1)return Cn({inputs:{x:o[0]},backend:n});let l=o.map(c=>c.shape);return F.assertParamsConsistent(l,s),gl(o,s,n)}var QB={kernelName:Hi,backendName:"webgl",kernelFunc:A_},y_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,c=e.dilationHeight,u=e.dilationWidth,h=e.filterHeight,d=e.filterWidth,p=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,m=e.dataFormat==="channelsLast",A=m?1:2,y=m?2:3,g=m?3:1,w="",x="";n&&(r?w=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?w=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:w=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,x="result = activation(result);");let _=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${w}
|
|
|
|
const ivec2 strides = ivec2(${o}, ${l});
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[${g}];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[${A}], 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 < ${h}; wR++) {
|
|
int xR = xRCorner + wR * ${c};
|
|
|
|
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 < ${p}; 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 (${f===1}) {
|
|
|
|
if (${m}) {
|
|
dotProd +=
|
|
getX(batch, xR, xC, ${p}) *
|
|
getW(wR, wC, ${p}, d2);
|
|
} else {
|
|
dotProd +=
|
|
getX(batch, ${p}, xR, xC) *
|
|
getW(wR, wC, ${p}, d2);
|
|
}
|
|
|
|
} else if (${f===2}) {
|
|
vec2 wValues = vec2(
|
|
getW(wR, wC, ${p}, d2),
|
|
getW(wR, wC, ${p} + 1, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xR, xC, ${p}),
|
|
getX(batch, xR, xC, ${p} + 1)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec2 xValues = vec2(
|
|
getX(batch, ${p}, xR, xC),
|
|
getX(batch, ${p} + 1, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
} else if (${f===3}) {
|
|
vec3 wValues = vec3(
|
|
getW(wR, wC, ${p}, d2),
|
|
getW(wR, wC, ${p} + 1, d2),
|
|
getW(wR, wC, ${p} + 2, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xR, xC, ${p}),
|
|
getX(batch, xR, xC, ${p} + 1),
|
|
getX(batch, xR, xC, ${p} + 2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec3 xValues = vec3(
|
|
getX(batch, ${p}, xR, xC),
|
|
getX(batch, ${p} + 1, xR, xC),
|
|
getX(batch, ${p} + 2, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${_}
|
|
${x}
|
|
setOutput(result);
|
|
}
|
|
`}},eV=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,c=e.dilationWidth,u=e.filterDepth,h=e.filterHeight,d=e.filterWidth,p=Math.floor(e.inChannels/4)*4,f=e.inChannels%4;this.userCode=`
|
|
const ivec3 strides = ivec3(${a}, ${s}, ${i});
|
|
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 < ${u}; wF++) {
|
|
int xF = xFCorner + wF * ${o};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h}; wR++) {
|
|
int xR = xRCorner + wR * ${l};
|
|
|
|
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 < ${p}; 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 (${f===1}) {
|
|
dotProd +=
|
|
getX(batch, xF, xR, xC, ${p}) *
|
|
getW(wF, wR, wC, ${p}, d2);
|
|
} else if (${f===2}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xF, xR, xC, ${p}),
|
|
getX(batch, xF, xR, xC, ${p} + 1)
|
|
);
|
|
vec2 wValues = vec2(
|
|
getW(wF, wR, wC, ${p}, d2),
|
|
getW(wF, wR, wC, ${p} + 1, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else if (${f===3}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xF, xR, xC, ${p}),
|
|
getX(batch, xF, xR, xC, ${p} + 1),
|
|
getX(batch, xF, xR, xC, ${p} + 2)
|
|
);
|
|
vec3 wValues = vec3(
|
|
getW(wF, wR, wC, ${p}, d2),
|
|
getW(wF, wR, wC, ${p} + 1, d2),
|
|
getW(wF, wR, wC, ${p} + 2, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},tV=class{constructor(e,t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let{filterWidth:r,inChannels:a,strideWidth:s,strideHeight:i,padInfo:o,outWidth:l,dilationWidth:c,dilationHeight:u,dataFormat:h}=n,{left:d,top:p}=o,f=a*r,m=un(),A=h==="channelsLast",y=A?0:1,g=A?1:2,w="";for(let x=0;x<=1;x++)for(let _=0;_<=1;_++)w+=`
|
|
blockIndex = rc.y + ${_};
|
|
pos = rc.x + ${x};
|
|
|
|
if(blockIndex < ${e[1]} && pos < ${e[0]}) {
|
|
offsetY = int(blockIndex / (${l})) * ${i} - ${p};
|
|
d0 = offsetY + ${u} * (pos / ${f});
|
|
|
|
if(d0 < ${t[y]} && d0 >= 0) {
|
|
|
|
offsetX = int(mod(float(blockIndex), ${l}.) * ${s}. - ${d}.);
|
|
d1 = offsetX + ${c} * (int(mod(float(pos), ${f}.) / ${a}.));
|
|
|
|
if(d1 < ${t[g]} && d1 >= 0) {
|
|
|
|
ch = int(mod(float(pos), ${a}.));
|
|
|
|
if (${A}) {
|
|
innerDims = vec2(d1, ch);
|
|
result[${x*2+_}] = getChannel(
|
|
getA(d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[${x*2+_}] = 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;
|
|
|
|
${w}
|
|
|
|
${m.output} = result;
|
|
}
|
|
`}};function g_({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,c=r.texData.get(e.dataId),u=n.inChannels,h=l[0]*l[1]*l[2],d=n.outChannels,p=n.dataFormat==="channelsLast",f=!1,m=!1,A,y=[],g=(h===1||d===1)&&u>i_,w=l[2]%2!=0&&!!c.isPacked;if(g||!Q().getBool("WEBGL_LAZILY_UNPACK")||!Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!w){let x=p?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],_=xe({inputs:{x:e},backend:r,attrs:{shape:[1,x,n.inChannels]}}),b=xe({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),T=ap({a:_,b,transposeA:f,transposeB:m,backend:r,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i});A=xe({inputs:{x:T},backend:r,attrs:{shape:n.outShape}}),y.push(_),y.push(b),y.push(T)}else{let x=p?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),_={dataId:e.dataId,shape:[1,x,n.inChannels],dtype:e.dtype},b=c.shape;c.shape=c.shape.slice(),c.shape[c.shape.length-2]++,k.assert(Yu(c.shape,_.shape),()=>`packed reshape ${c.shape} to ${_.shape} isn't free`);let T=xe({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});y.push(T);let S=ap({a:_,b:T,backend:r,transposeA:f,transposeB:m,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),N=r.texData.get(S.dataId);k.assert(N.isPacked,()=>"batchMatMul result is expected to be packed"),c.shape=b,N.shape=n.outShape,A=Cn({inputs:{x:S},backend:r}),A.shape=n.outShape,y.push(S)}for(let x of y)r.disposeIntermediateTensorInfo(x);return A}function x_({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:c,inChannels:u,outWidth:h,outHeight:d,dataFormat:p}=n,f=p==="channelsLast",m=l*c*u,A=d*h,y=[m,A],g=!0,w=!1,x=[],_=xe({inputs:{x:e},backend:r,attrs:{shape:e.shape.slice(1)}}),b=xe({inputs:{x:t},backend:r,attrs:{shape:[1,m,k.sizeFromShape(t.shape)/m]}});x.push(_),x.push(b);let T=new tV(y,_.shape,n),S=r.runWebGLProgram(T,[_],"float32"),N=xe({inputs:{x:S},backend:r,attrs:{shape:[1,y[0],y[1]]}});x.push(S),x.push(N);let C=a!=null,$=s!=null,D=o==="leakyrelu",O=o?np(o,!0):null,B=new e_(N.shape,b.shape,[1,A,n.outChannels],g,w,C,O,$,D),H=[N,b];if(a&&H.push(a),$&&H.push(s),D){let Y=r.makeTensorInfo([],"float32",k.createScalarValue(i,"float32"));H.push(Y),x.push(Y)}let X=r.runWebGLProgram(B,H,"float32"),Z=f?[1,d,h,n.outChannels]:[1,n.outChannels,d,h],ee=xe({inputs:{x:X},backend:r,attrs:{shape:Z}});x.push(X);for(let Y of x)r.disposeIntermediateTensorInfo(Y);return ee}function nV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:c,dimRoundingMode:u}=r,h=F.convertConv2DDataFormat(l),d=F.computeConv2DInfo(a.shape,s.shape,i,c,o,u,!1,h),p;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"))p=g_({x:a,filter:s,convInfo:d,backend:n});else if(Q().getBool("WEBGL_CONV_IM2COL")&&a.shape[0]===1)p=x_({x:a,filter:s,convInfo:d,backend:n});else{let m=new y_(d);p=n.runWebGLProgram(m,[a,s],"float32")}let f=xe({inputs:{x:p},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(p),f}var rV={kernelName:ns,backendName:"webgl",kernelFunc:nV},aV=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=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} - ${a};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
if (${s}) {
|
|
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);
|
|
}
|
|
`}},sV=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,c=s?2:3,u=s?3:1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[${u}];
|
|
|
|
ivec2 dyCorner = ivec2(coords[${l}], 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 < ${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) / ${a}.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 (${s}) {
|
|
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);
|
|
}
|
|
`}},iV=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.padInfo.front,s=e.padInfo.top,i=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} - ${a};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${n} - ${s};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${r} - ${i};
|
|
|
|
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);
|
|
}
|
|
`}},oV=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,c=r-1-e.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(${o}, ${l}, ${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 < ${t}; wF++) {
|
|
float dyF = float(dyFCorner + wF) / ${a}.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) / ${s}.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) / ${i}.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 lV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:c,filterShape:u}=r,h=F.convertConv2DDataFormat(l),d=F.computeConv2DInfo(a.shape,u,i,1,o,c,!1,h),p=new aV(d);return n.runWebGLProgram(p,[a,s],"float32")}var uV={kernelName:wh,backendName:"webgl",kernelFunc:lV};function cV(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:c,dimRoundingMode:u}=r,h=F.convertConv2DDataFormat(c),d=F.computeConv2DInfo(i,s.shape,o,1,l,u,!1,h),p=new sV(d);return n.runWebGLProgram(p,[a,s],"float32")}var hV={kernelName:rs,backendName:"webgl",kernelFunc:cV};function dV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,c=F.computeConv3DInfo(a.shape,s.shape,i,l,o),u=new eV(c);return n.runWebGLProgram(u,[a,s],"float32")}var pV={kernelName:tu,backendName:"webgl",kernelFunc:dV};function fV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r,c=F.computeConv3DInfo(a.shape,l,i,1,o),u=new iV(c);return n.runWebGLProgram(u,[a,s],"float32")}var mV={kernelName:_h,backendName:"webgl",kernelFunc:fV};function AV(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r,c=F.computeConv3DInfo(l,s.shape,o,1,i),u=new oV(c);return n.runWebGLProgram(u,[a,s],"float32")}var yV={kernelName:bh,backendName:"webgl",kernelFunc:AV},gV=Qw+`
|
|
return cos(x);
|
|
`,xV=Qe({opSnippet:gV}),wV={kernelName:as,backendName:"webgl",kernelFunc:xV},_V=`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`,bV=Qe({opSnippet:_V}),vV={kernelName:ji,backendName:"webgl",kernelFunc:bV},kV=class{constructor(e,t,n,r,a){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[c]=t,[u,h]=n;this.outputShape=[c,u,h,l];let d=r==="bilinear"?1:0,[p,f]=[`${i-1}.0`,`${o-1}.0`],[m,A,y]=u>1?[`${(i-1)/(u-1)}`,"(y2-y1) * height_ratio",`y1*${p} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${p}`],[g,w,x]=h>1?[`${(o-1)/(h-1)}`,"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=`
|
|
const float height_ratio = float(${m});
|
|
const float width_ratio = float(${g});
|
|
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 >= ${s}) {
|
|
return;
|
|
}
|
|
|
|
float height_scale = ${A};
|
|
float width_scale = ${w};
|
|
|
|
float in_y = ${y};
|
|
if( in_y < 0.0 || in_y > ${p} ) {
|
|
setOutput(float(${a}));
|
|
return;
|
|
}
|
|
float in_x = ${x};
|
|
if( in_x < 0.0 || in_x > ${f} ) {
|
|
setOutput(float(${a}));
|
|
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);
|
|
}
|
|
}
|
|
`}},IV=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:c}=r,u=new kV(a.shape,s.shape,o,l,c);return n.runWebGLProgram(u,[a,s,i],"float32")},NV={kernelName:Gi,backendName:"webgl",kernelFunc:IV},b_=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=e;let r=e.length,a=t?"0.0":`getX(${w_(r,"coords")})`,s=e[e.length-1],i="",o="";t?(i=n?`end != ${s-1}`:"end != 0",o=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${s}`:"end >= pow2",o=n?"end + pow2":"end - pow2"),this.userCode=`
|
|
uniform float index;
|
|
void main() {
|
|
${pt(r)} coords = getOutputCoords();
|
|
int end = ${__(r,"coords")};
|
|
float val = ${a};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${i}) {
|
|
int idx = ${o};
|
|
${__(r,"coords")} = idx;
|
|
val += getX(${w_(r,"coords")});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.index==null&&(this.index=t.getUniformLocation(n,"index")),t.gl.uniform1f(this.index,e)}}};function w_(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 __(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 SV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length,c=F.getAxesPermutation([s],l),u=a;c!=null&&(u=yn({inputs:{x:a},backend:n,attrs:{perm:c}}));let h=F.getInnerMostAxes(1,l)[0];if(h!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${a.shape.length-1} but got axis=${s}`);let d=a.shape[h],p=Cn({inputs:{x:u},backend:n});for(let f=0;f<=Math.ceil(Math.log2(d))-1;f++){let m=new b_(u.shape,!1,o),A=m.getCustomSetupFunc(f),y=p;p=n.runWebGLProgram(m,[p],p.dtype,A),n.disposeIntermediateTensorInfo(y)}if(i){let f=new b_(u.shape,i,o),m=p;p=n.runWebGLProgram(f,[p],p.dtype),n.disposeIntermediateTensorInfo(m)}if(c!=null){let f=F.getUndoAxesPermutation(c),m=yn({inputs:{x:p},backend:n,attrs:{perm:f}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(u),m}return p}var TV={kernelName:ss,backendName:"webgl",kernelFunc:SV};function EV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(a.shape.length===1){let l=n.readSync(a.dataId),c=n.readSync(s.dataId),u=Ww(l,c,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}else if(a.shape.length===2){let l=n.bufferSync(a),c=n.bufferSync(s),u=sL(l,c,i,o);return n.makeTensorInfo(u.shape,s.dtype,u.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}var CV={kernelName:vh,backendName:"webgl",kernelFunc:EV},RV=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 FV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;k.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=i==="NHWC"?a.shape[1]:a.shape[2],c=i==="NHWC"?a.shape[2]:a.shape[3],u=i==="NHWC"?a.shape[3]:a.shape[1],h=l*s,d=c*s,p=u/(s*s),f=i==="NHWC"?[o,h,d,p]:[o,p,h,d],m=new RV(f,s,i);return n.runWebGLProgram(m,[a],a.dtype)}var MV={kernelName:qi,backendName:"webgl",kernelFunc:FV},v_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,c=e.strideHeight,u=e.strideWidth,h=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,f=e.filterWidth,m=e.outChannels/e.inChannels,A="",y="";n&&(r?A=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?A=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:A=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,y="result = activation(result);");let g=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${A}
|
|
|
|
const ivec2 strides = ivec2(${c}, ${u});
|
|
const ivec2 pads = ivec2(${o}, ${l});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${m};
|
|
int q = d2 - d1 * ${m};
|
|
|
|
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 < ${p}; wR++) {
|
|
int xR = xRCorner + wR * ${h};
|
|
|
|
if (xR < 0 || xR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${f}; wC++) {
|
|
int xC = xCCorner + wC * ${d};
|
|
|
|
if (xC < 0 || xC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float xVal = getX(batch, xR, xC, d1);
|
|
float wVal = getW(wR, wC, d1, q);
|
|
dotProd += xVal * wVal;
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${g}
|
|
${y}
|
|
setOutput(result);
|
|
}
|
|
`}},k_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.outShape;let s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,c=e.strideHeight,u=e.strideWidth,h=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,f=e.filterWidth,m=f,A="int xR; int xC; int xCOffset;";for(let x=0;x<p;x++)for(let _=0;_<f;_++)A+=`
|
|
vec4 xTexelR${x}C${_*2} = vec4(0.);
|
|
vec4 wR${x}C${_} = vec4(0.);
|
|
vec4 xR${x}C${_} = vec4(0.);`;for(let x=0;x<p;x++)for(let _=0;_<m;_++){let b=_*2;if(A+=`
|
|
xR = xRCorner + ${x*h};
|
|
xC = xCCorner + ${b*d};
|
|
`,u===1){if(b<f&&(l%2==1?A+=`
|
|
xCOffset = xC + 1;
|
|
if(xR >= 0 && xR < ${s} && xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${b} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= ${i}) {
|
|
xTexelR${x}C${b}.zw = vec2(0.);
|
|
}
|
|
} else {
|
|
xTexelR${x}C${b} = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + 1 - 2;
|
|
if(xR >= 0 && xR < ${s} && xCOffset >= 0 && xCOffset < ${i}) {
|
|
vec4 previous = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= ${i}) {
|
|
previous.zw = vec2(0.);
|
|
}
|
|
|
|
xR${x}C${b} = vec4(previous.zw, xTexelR${x}C${b}.xy);
|
|
} else {
|
|
xR${x}C${b} = vec4(0, 0, xTexelR${x}C${b}.xy);
|
|
}
|
|
`:A+=`
|
|
if(xR >= 0 && xR < ${s} && xC >= 0 && xC < ${i}) {
|
|
xTexelR${x}C${b} = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR${x}C${b} = vec4(0.);
|
|
}
|
|
|
|
xR${x}C${b} = xTexelR${x}C${b};
|
|
`,b+1<f)){let T=l%2==0?k.nearestLargerEven(d):d;d%2==0&&l%2==1||d%2!=0&&l%2!=1?(A+=`
|
|
xCOffset = xC + ${l%2} + ${T};
|
|
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${b+2} = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
`,d>1&&(A+=`
|
|
xCOffset -= 2;
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${b} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${x}C${b} = vec4(0.);
|
|
}
|
|
`),A+=`
|
|
xR${x}C${b+1} = vec4(
|
|
xTexelR${x}C${b}.zw, xTexelR${x}C${b+2}.xy);
|
|
`):A+=`
|
|
xCOffset = xC + ${T};
|
|
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${b+2} = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
|
|
xR${x}C${b+1} = xTexelR${x}C${b+2};
|
|
`}}else b<f&&(A+=`
|
|
if(xR >= 0 && xR < ${s}) {
|
|
`,l%2==1?(A+=`
|
|
xCOffset = xC + 1 - ${u};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${b} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${x}C${b} = vec4(0.);
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < ${i}) {
|
|
xTexelR${x}C${b+2} = getX(batch, xR, xC + 1, d1);
|
|
} else {
|
|
xTexelR${x}C${b+2} = vec4(0.);
|
|
}
|
|
|
|
xR${x}C${b} = vec4(
|
|
xTexelR${x}C${b}.zw, xTexelR${x}C${b+2}.zw);
|
|
`,b+1<f&&(A+=`
|
|
vec4 final = vec4(0.);
|
|
xCOffset = xC + 1 + ${u};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xR${x}C${b+1} = vec4(xTexelR${x}C${b+2}.xy, final.xy);
|
|
`)):(A+=`
|
|
if(xC >= 0 && xC < ${i}) {
|
|
xTexelR${x}C${b} = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR${x}C${b} = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + ${u};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${b+2} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${x}C${b+2} = vec4(0.);
|
|
}
|
|
|
|
xR${x}C${b} = vec4(
|
|
xTexelR${x}C${b}.xy, xTexelR${x}C${b+2}.xy);
|
|
`,b+1<f&&(A+=`
|
|
xR${x}C${b+1} = vec4(
|
|
xTexelR${x}C${b}.zw, xTexelR${x}C${b+2}.zw);
|
|
`)),A+="}");b<f&&(A+=`
|
|
vec4 wTexelR${x}C${b} = getW(${x}, ${b}, d1, q);
|
|
wR${x}C${b} = vec4(wTexelR${x}C${b}.xz, wTexelR${x}C${b}.xz);
|
|
`,b+1<f&&(A+=`
|
|
vec4 wTexelR${x}C${b+1} = getW(${x}, ${b+1}, d1, q);
|
|
wR${x}C${b+1} =
|
|
vec4(wTexelR${x}C${b+1}.xz, wTexelR${x}C${b+1}.xz);`))}for(let x=0;x<p;x++)for(let _=0;_<f;_++)A+=`dotProd += xR${x}C${_} * wR${x}C${_};`;let y="",g="";n&&(r?y=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?y=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:y=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,g="result = activation(result);");let w=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${y}
|
|
|
|
const ivec2 strides = ivec2(${c}, ${u});
|
|
const ivec2 pads = ivec2(${o}, ${l});
|
|
|
|
void main() {
|
|
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2;
|
|
int q = 0;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
vec4 dotProd = vec4(0.);
|
|
|
|
${A}
|
|
|
|
vec4 result = dotProd;
|
|
${w}
|
|
${g}
|
|
setOutput(result);
|
|
}
|
|
`}};function $V(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:c}=r,u=l;u==null&&(u=[1,1]),k.assert(F.eitherStridesOrDilationsAreOne(i,u),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let h=F.computeConv2DInfo(a.shape,s.shape,i,u,o,c,!0),d;return Q().getBool("WEBGL_PACK_DEPTHWISECONV")&&h.strideWidth<=2&&h.outChannels/h.inChannels==1?d=new k_(h):d=new v_(h),n.runWebGLProgram(d,[a,s],"float32")}var DV={kernelName:is,backendName:"webgl",kernelFunc:$V},OV=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=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 * ${s} + 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} - ${a};
|
|
|
|
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);
|
|
}
|
|
`}},zV=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`
|
|
const ivec2 pads = ivec2(${s}, ${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 < ${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) / ${a}.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 < ${o}; dm++) {
|
|
int d2 = d1 * ${o} + dm;
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, dm);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function PV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,filterShape:u}=r,h=F.computeConv2DInfo(a.shape,u,i,o,l,c,!0),d=new OV(h);return n.runWebGLProgram(d,[a,s],"float32")}var LV={kernelName:kh,backendName:"webgl",kernelFunc:PV};function WV(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,inputShape:u}=r,h=F.computeConv2DInfo(u,s.shape,i,o,l,c,!0),d=new zV(h);return n.runWebGLProgram(d,[a,s],"float32")}var BV={kernelName:Ih,backendName:"webgl",kernelFunc:WV},VV=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 UV(e){let{inputs:t,backend:n}=e,{x:r}=t,a=[...r.shape,...r.shape],s=k.sizeFromShape(r.shape),i=xe({inputs:{x:r},backend:n,attrs:{shape:[s]}}),o=new VV(s),l=n.runWebGLProgram(o,[i],i.dtype),c=xe({inputs:{x:l},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),c}var HV={kernelName:Nh,backendName:"webgl",kernelFunc:UV},jV=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:r,strideHeight:a,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:c}=e,{top:u,left:h}=r;this.userCode=`
|
|
const ivec2 strides = ivec2(${a}, ${s});
|
|
const ivec2 pads = ivec2(${u}, ${h});
|
|
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 * ${l};
|
|
|
|
if (hIn >= 0 && hIn < ${t}) {
|
|
for (int w = 0; w < ${o}; w++) {
|
|
int wIn = wBeg + w * ${c};
|
|
|
|
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 GV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,c=F.computeDilation2DInfo(a.shape,s.shape,i,o,"NHWC",l),u,h=new jV(c);u=n.runWebGLProgram(h,[a,s],"float32");let d=xe({inputs:{x:u},backend:n,attrs:{shape:c.outShape}});return n.disposeIntermediateTensorInfo(u),d}var qV={kernelName:nu,backendName:"webgl",kernelFunc:GV},XV="return (x >= 0.0) ? x : (exp(x) - 1.0);",KV=`
|
|
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;
|
|
`,ZV=Qe({opSnippet:XV,packedOpSnippet:KV}),JV={kernelName:Xi,backendName:"webgl",kernelFunc:ZV},YV="return (b >= 1.0) ? a : a * (b + 1.0);",QV=`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,eU=e=>{let{inputs:t,backend:n}=e,{dy:r,y:a}=t,s=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new rc(QV,r.shape,a.shape):new yl(YV,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)},tU={kernelName:Eh,backendName:"webgl",kernelFunc:eU},nU=`
|
|
return vec4(equal(a, b));
|
|
`,rU="return float(a == b);",aU=en({opSnippet:rU,packedOpSnippet:nU,dtype:"bool"}),sU={kernelName:Zi,backendName:"webgl",kernelFunc:aU},iU=`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = ${F.ERF_P};
|
|
float a1 = ${F.ERF_A1};
|
|
float a2 = ${F.ERF_A2};
|
|
float a3 = ${F.ERF_A3};
|
|
float a4 = ${F.ERF_A4};
|
|
float a5 = ${F.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));
|
|
`,oU=Qe({opSnippet:iU}),lU={kernelName:Ki,backendName:"webgl",kernelFunc:oU},I_="return exp(x);",N_=Qe({opSnippet:I_,packedOpSnippet:I_,cpuKernelImpl:lL}),uU={kernelName:ls,backendName:"webgl",kernelFunc:N_};function bA(e){let{inputs:t,attrs:n,backend:r}=e,{dim:a}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=a;return a<0&&(k.assert(-(i+1)<=a,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+a+1),o.splice(l,0,1),xe({inputs:{x:s},backend:r,attrs:{shape:o}})}var cU={kernelName:Ji,backendName:"webgl",kernelFunc:bA},S_="return exp(x) - 1.0;",hU=Qe({opSnippet:S_,packedOpSnippet:S_,cpuKernelImpl:uL}),dU={kernelName:Yi,backendName:"webgl",kernelFunc:hU},T_=class{constructor(e,t,n){this.variableNames=["real","imag"];let r=t[1];this.outputShape=t;let a=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=n?`${r}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=`
|
|
const float exponentMultiplier = ${a};
|
|
|
|
float unaryOpComplex(float real, float expR, float imag, float expI) {
|
|
${i}
|
|
}
|
|
|
|
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) / ${s};
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
setOutput(mulMatDFT(coords[0], coords[1]));
|
|
}
|
|
`}};function E_(e,t,n){let r=n.texData.get(e.dataId),a=k.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=a/s,o=xe({inputs:{x:e},backend:n,attrs:{shape:[i,s]}}).shape,l=new T_("real",o,t),c=new T_("imag",o,t),u=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:o},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:o}],h=n.runWebGLProgram(l,u,"float32"),d=n.runWebGLProgram(c,u,"float32"),p=Ma({inputs:{real:h,imag:d},backend:n});n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d);let f=xe({inputs:{x:p},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(f),f}function pU(e){let{inputs:t,backend:n}=e,{input:r}=t;return E_(r,!1,n)}var fU={kernelName:Ch,backendName:"webgl",kernelFunc:pU},mU=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.outputShape=e,this.userCode=`
|
|
uniform float value;
|
|
void main() {
|
|
// Input can be obtained from uniform value.
|
|
setOutput(value);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.valueLoc==null&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}};function vA(e){let{backend:t,attrs:n}=e,{shape:r,value:a}=n,{dtype:s}=n;if(s=s||k.inferDtype(a),s==="string"){let i=k.getArrayFromDType(s,k.sizeFromShape(r));return i.fill(a),t.makeTensorInfo(r,s,i)}else{let i=new mU(r,a),o=i.getCustomSetupFunc(a);return t.runWebGLProgram(i,[],s,o)}}var AU={kernelName:ru,backendName:"webgl",kernelFunc:vA},yU=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;
|
|
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);
|
|
}
|
|
`}},gU={kernelName:Qi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,a=new yU(n.shape);return r.runWebGLProgram(a,[n],n.dtype)}},C_="return floor(x);",xU=Qe({opSnippet:C_,packedOpSnippet:C_,cpuKernelImpl:cL}),wU={kernelName:us,backendName:"webgl",kernelFunc:xU},_U=`
|
|
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;
|
|
}
|
|
`,bU=`
|
|
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);
|
|
`,vU=en({opSnippet:_U,packedOpSnippet:bU,dtype:"int32"}),kU={kernelName:cs,backendName:"webgl",kernelFunc:vU},IU=class{constructor(e){this.variableNames=["A"];let t=un(),[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));
|
|
}
|
|
`}},NU=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=un(),[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;
|
|
}
|
|
`}},TU={kernelName:Hh,backendName:"webgl",kernelFunc:SU},xl;function SU(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:a}=t,{numChannels:s}=r,i=typeof HTMLVideoElement!="undefined"&&a instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&a instanceof HTMLImageElement,l=typeof ImageBitmap!="undefined"&&a instanceof ImageBitmap,[c,u]=i?[a.videoWidth,a.videoHeight]:[a.width,a.height],h=[u,c],d=[u,c,s];(o||i||l)&&(xl==null&&(xl=document.createElement("canvas").getContext("2d")),xl.canvas.width=c,xl.canvas.height=u,xl.drawImage(a,0,0,c,u),a=xl.canvas);let p=n.makeTensorInfo(h,"int32");n.texData.get(p.dataId).usage=Xn.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(p.dataId),a);let f=Q().getBool("WEBGL_PACK")?new NU(d):new IU(d),m=n.runWebGLProgram(f,[p],"int32");return n.disposeData(p.dataId),m}function EU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=F.convertConv2DDataFormat(u),A=F.computeConv2DInfo(a.shape,s.shape,l,h,c,d,!1,m),y,g=[];if(A.filterHeight===1&&A.filterWidth===1&&A.dilationHeight===1&&A.dilationWidth===1&&A.strideHeight===1&&A.strideWidth===1&&(A.padInfo.type==="SAME"||A.padInfo.type==="VALID"))y=g_({x:a,filter:s,convInfo:A,backend:n,bias:i,activation:p,preluActivationWeights:o,leakyreluAlpha:f});else if(Q().getBool("WEBGL_CONV_IM2COL")&&a.shape[0]===1)y=x_({x:a,filter:s,convInfo:A,backend:n,bias:i,activation:p,preluActivationWeights:o,leakyreluAlpha:f});else{let x=i!=null,_=o!=null,b=p==="leakyrelu",T=p?np(p,!1):null,S=new y_(A,x,T,_,b),N=[a,s];if(i&&N.push(i),o&&N.push(o),b){let C=n.makeTensorInfo([],"float32",k.createScalarValue(f,"float32"));N.push(C),g.push(C)}y=n.runWebGLProgram(S,N,"float32")}let w=xe({inputs:{x:y},backend:n,attrs:{shape:A.outShape}});return g.push(y),g.forEach(x=>n.disposeIntermediateTensorInfo(x)),w}var CU={kernelName:Vs,backendName:"webgl",kernelFunc:EU};function RU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dilations:u,dimRoundingMode:h,activation:d,leakyreluAlpha:p}=r,f=[],m=u;m==null&&(m=[1,1]),k.assert(F.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let A=F.computeConv2DInfo(a.shape,s.shape,l,m,c,h,!0),y=Q().getBool("WEBGL_PACK_DEPTHWISECONV")&&A.strideWidth<=2&&A.outChannels/A.inChannels==1,g=d?np(d,y):null,w=[a,s],x=i!=null,_=o!=null,b=d==="leakyrelu";if(x&&w.push(i),_&&w.push(o),b){let N=n.makeTensorInfo([],"float32",k.createScalarValue(p,"float32"));w.push(N),f.push(N)}let T;y?T=new k_(A,x,g,_,b):T=new v_(A,x,g,_,b);let S=n.runWebGLProgram(T,w,"float32");return f.forEach(N=>n.disposeIntermediateTensorInfo(N)),S}var FU={kernelName:Us,backendName:"webgl",kernelFunc:RU},MU=class{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;let r=pt(t.length),a=pt(n.length),s=this.sliceDim>1?"strides[j]":"strides";this.userCode=`
|
|
${r} strides = ${r}(${this.strides});
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
int flattenIndex = 0;
|
|
for (int j = 0; j < ${this.sliceDim}; j++) {
|
|
int index = round(getIndices(coords[0], j));
|
|
flattenIndex += index * ${s};
|
|
}
|
|
setOutput(getX(flattenIndex, coords[1]));
|
|
}
|
|
`}};function $U(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=a.shape,i=s[s.length-1],[o,l,c,u]=F.prepareAndValidate(r,a),h=xe({inputs:{x:a},backend:n,attrs:{shape:[l,i]}}),d=xe({inputs:{x:r},backend:n,attrs:{shape:[k.sizeFromShape(r.shape)/c,c]}}),p=new MU(i,u,[l,c]),f=n.runWebGLProgram(p,[d,h],d.dtype),m=xe({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),m}var DU={kernelName:to,backendName:"webgl",kernelFunc:$U},zU=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=pt(this.rank),r=OU(e,2);this.userCode=`
|
|
void main() {
|
|
${n} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function OU(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let a=0;a<e.length;a++)a===2?r.push("int(getIndices(resRC.x, resRC.z))"):r.push(`${n[a]}`);return r.join()}function PU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r,l=k.parseAxisParam(i,a.shape)[0],c=F.segment_util.collectGatherOpShapeInfo(a,s,l,o),u=k.sizeFromShape(s.shape),h=[],d=xe({inputs:{x:a},backend:n,attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]}}),p=xe({inputs:{x:s},backend:n,attrs:{shape:[c.batchSize,u/c.batchSize]}});h.push(d),h.push(p);let f=[c.batchSize,c.outerSize,u/c.batchSize,c.sliceSize];if(n.shouldExecuteOnCPU([a,s])||a.dtype==="string"){let g=n.bufferSync(p),w=n.bufferSync(d),x=hL(w,g,f);return h.forEach(_=>n.disposeIntermediateTensorInfo(_)),n.makeTensorInfo(c.outputShape,x.dtype,x.values)}let m=new zU(d.shape,f),A=n.runWebGLProgram(m,[d,p],d.dtype);h.push(A);let y=xe({inputs:{x:A},backend:n,attrs:{shape:c.outputShape}});return h.forEach(g=>n.disposeIntermediateTensorInfo(g)),y}var LU={kernelName:eo,backendName:"webgl",kernelFunc:PU},WU="return float(a > b);",BU=`
|
|
return vec4(greaterThan(a, b));
|
|
`,VU=en({opSnippet:WU,packedOpSnippet:BU,cpuKernelImpl:dL,dtype:"bool"}),UU={kernelName:no,backendName:"webgl",kernelFunc:VU},HU="return float(a >= b);",jU=`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,GU=en({opSnippet:HU,packedOpSnippet:jU,dtype:"bool"}),qU={kernelName:ds,backendName:"webgl",kernelFunc:GU};function XU(e){let{inputs:t,backend:n}=e,{input:r}=t;return E_(r,!0,n)}var KU={kernelName:Rh,backendName:"webgl",kernelFunc:XU},ZU="return float(!isnan(x) && !isinf(x));",JU=Qe({opSnippet:ZU,dtype:"bool"}),YU={kernelName:ao,backendName:"webgl",kernelFunc:JU},QU="return float(isinf(x));",eH=Qe({opSnippet:QU,dtype:"bool"}),tH={kernelName:so,backendName:"webgl",kernelFunc:eH},nH="return float(isnan(x));",rH=Qe({opSnippet:nH,dtype:"bool"}),aH={kernelName:io,backendName:"webgl",kernelFunc:rH},sH="return float(a < b);",iH=`
|
|
return vec4(lessThan(a, b));
|
|
`,oH=en({opSnippet:sH,packedOpSnippet:iH,cpuKernelImpl:pL,dtype:"bool"}),lH={kernelName:oo,backendName:"webgl",kernelFunc:oH},uH="return float(a <= b);",cH=`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,hH=en({opSnippet:uH,packedOpSnippet:cH,dtype:"bool"}),dH={kernelName:lo,backendName:"webgl",kernelFunc:hH};function pH(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=fL(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}var fH={kernelName:Mh,backendName:"webgl",kernelFunc:pH},mH=`if (x < 0.0) return NAN;
|
|
return log(x);`,AH=`
|
|
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;
|
|
`,yH=Qe({opSnippet:mH,packedOpSnippet:AH,cpuKernelImpl:mL}),gH={kernelName:fs,backendName:"webgl",kernelFunc:yH},xH="return log(1.0 + x);",wH=Qe({opSnippet:xH}),_H={kernelName:uo,backendName:"webgl",kernelFunc:wH},bH="return float(a >= 1.0 && b >= 1.0);",vH=`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,kH=en({opSnippet:bH,packedOpSnippet:vH,dtype:"bool"}),IH={kernelName:co,backendName:"webgl",kernelFunc:kH},NH="return float(!(x >= 1.0));",SH=Qe({opSnippet:NH}),TH={kernelName:au,backendName:"webgl",kernelFunc:SH},EH="return float(a >= 1.0 || b >= 1.0);",CH=`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,RH=en({opSnippet:EH,packedOpSnippet:CH,dtype:"bool"}),FH={kernelName:su,backendName:"webgl",kernelFunc:RH},MH=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;a===.5?o=`inversesqrt(${l})`:a===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${a}));`,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 = -${s}; j <= ${s}; j++) {
|
|
int idx = d + j;
|
|
if (idx >= 0 && idx <= ${i}) {
|
|
float z = getX(b, r, c, idx);
|
|
sum += z * z;
|
|
}
|
|
}
|
|
float val = x * ${o};
|
|
setOutput(val);
|
|
}
|
|
`}},$H=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;a===.5?o=`inversesqrt(${l})`:a===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${a}));`,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 - ${s};
|
|
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 = - ${s}; j <= ${s}; 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 * ${o};
|
|
setOutput(result);
|
|
}
|
|
`}},DH=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r,c=Q().getBool("WEBGL_PACK_NORMALIZATION")?new $H(a.shape,s,i,o,l):new MH(a.shape,s,i,o,l);return n.runWebGLProgram(c,[a],a.dtype)},OH={kernelName:iu,backendName:"webgl",kernelFunc:DH},zH=class{constructor(e,t,n,r,a){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=a,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(${a})
|
|
* getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)
|
|
/ norm;
|
|
if (k == d) {
|
|
dyi += pow(norm, -1.0 * ${a});
|
|
}
|
|
if (k == coords[3]) {
|
|
dyi *= getDy(b, r, c, d);
|
|
result += dyi;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}},PH=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:c,beta:u}=r,h=new zH(a.shape,o,l,c,u);return n.runWebGLProgram(h,[a,s,i],a.dtype)},LH={kernelName:$h,backendName:"webgl",kernelFunc:PH};function WH(e,t,n,r){let a=k.sizeFromShape(t),s=k.sizeFromShape(e.shape)/a,i=xe({inputs:{x:e},attrs:{shape:[s,a]},backend:r}),o=hi(i,e.dtype,"max",r),l=xe({inputs:{x:o},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(o),l}function R_(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=F.getAxesPermutation(c,o),h=u!=null,d=n.shouldExecuteOnCPU([a]),p=a;if(h){if(d){let g=n.texData.get(p.dataId).values,w=new Array(o);for(let b=0;b<w.length;b++)w[b]=a.shape[u[b]];let x=AA(g,a.shape,a.dtype,u,w);p=n.makeTensorInfo(w,a.dtype);let _=n.texData.get(p.dataId);_.values=x}else p=rp(a,u,n);c=F.getInnerMostAxes(c.length,o)}F.assertAxesAreInnerMostDims("max",c,o);let[f,m]=F.computeOutAndReduceShapes(p.shape,c),A=f;i&&(A=F.expandShapeToKeepDim(f,l));let y;if(d){let g=n.texData.get(p.dataId).values,w=AL(g,k.sizeFromShape(m),A,a.dtype);y=n.makeTensorInfo(A,a.dtype);let x=n.texData.get(y.dataId);x.values=w}else y=WH(p,m,A,n);return h&&n.disposeIntermediateTensorInfo(p),y}var BH={kernelName:ms,backendName:"webgl",kernelFunc:R_},VH=Xw+`
|
|
return max(a, b);
|
|
`,UH=`
|
|
vec4 result = vec4(max(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+tp+`
|
|
return result;
|
|
`,HH=en({opSnippet:VH,packedOpSnippet:UH,cpuKernelImpl:yL}),jH={kernelName:As,backendName:"webgl",kernelFunc:HH};function GH(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;cl(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(F.eitherStridesOrDilationsAreOne(i,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=F.computePool2DInfo(a.shape,s,i,c,o,l);if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))return Cn({inputs:{x:a},backend:n});let h=new ac(u,"max",!1);return n.runWebGLProgram(h,[a],a.dtype)}var qH={kernelName:ys,backendName:"webgl",kernelFunc:GH};function XH(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:c}=r,u=[1,1,1],h=F.computePool3DInfo(a.shape,s,i,u,o,c,l),d=new xA(h,"max",!1);return n.runWebGLProgram(d,[a],a.dtype)}var KH={kernelName:ou,backendName:"webgl",kernelFunc:XH},ZH=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,a=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=a-1-e.padInfo.top,o=s-1-e.padInfo.left,l=a*s-1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
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 < ${a};
|
|
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 < ${s}; 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 * ${s} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},JH=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,c=e.effectiveFilterWidth,u=o-1-e.padInfo.front,h=l-1-e.padInfo.top,d=c-1-e.padInfo.left,p=o*l*c-1;this.userCode=`
|
|
const ivec3 pads = ivec3(${u}, ${h}, ${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 < ${o};
|
|
wD += ${a}) {
|
|
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 += ${s}) {
|
|
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 < ${c};
|
|
wC += ${i}) {
|
|
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 = ${p} -
|
|
int(getMaxPos(batch, idyD, idyR, idyC, ch));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue =
|
|
wD * ${l} * ${c} +
|
|
wR * ${c} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function YH(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:c,dimRoundingMode:u}=r,h=[1,1,1],d=F.computePool3DInfo(i.shape,o,l,h,c,u),p=new xA(d,"max",!0),f=n.runWebGLProgram(p,[i],i.dtype),m=new JH(d),A=n.runWebGLProgram(m,[a,f],i.dtype);return n.disposeIntermediateTensorInfo(f),A}var QH={kernelName:Oh,backendName:"webgl",kernelFunc:YH};function ej(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;cl([s,i],"maxPoolGrad");let{filterSize:l,strides:c,pad:u,dimRoundingMode:h}=r,d=F.computePool2DInfo(o.shape,l,c,1,u,h),p=!0,f=new ac(d,"max",p),m=n.runWebGLProgram(f,[o],o.dtype),A=new ZH(d),y=n.runWebGLProgram(A,[a,m],o.dtype);return n.disposeIntermediateTensorInfo(m),y}var tj={kernelName:Dh,backendName:"webgl",kernelFunc:ej};function nj(e,t,n,r){let a=new ac(n,"max",!1),s=r.runWebGLProgram(a,[e],"float32");a=new ac(n,"max",!0,!0,t);let i=r.runWebGLProgram(a,[e],"float32");return[s,i]}var rj={kernelName:zh,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;k.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let c=[1,1];k.assert(F.eitherStridesOrDilationsAreOne(s,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${c}'`);let u=F.computePool2DInfo(r.shape,a,s,c,i),[h,d]=nj(r,o,u,l);return[h,d]}};function aj(e,t,n,r){let a=k.sizeFromShape(t),s=k.sizeFromShape(e.shape)/a,i=xe({inputs:{x:e},attrs:{shape:[s,a]},backend:r}),o=hi(i,"float32","mean",r),l=xe({inputs:{x:o},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(o),l}var sj={kernelName:gs,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:a,axis:s}=t,i=n,o=r.shape.length,l=k.parseAxisParam(s,r.shape),c=l,u=F.getAxesPermutation(c,o),h=u!=null,d=i.shouldExecuteOnCPU([r]),p=[],f=r;if(h){if(d){let w=i.texData.get(f.dataId).values,x=new Array(o);for(let T=0;T<x.length;T++)x[T]=r.shape[u[T]];let _=AA(w,r.shape,r.dtype,u,x);f=i.makeTensorInfo(x,r.dtype);let b=i.texData.get(f.dataId);b.values=_}else f=rp(r,u,i);p.push(f),c=F.getInnerMostAxes(c.length,o)}F.assertAxesAreInnerMostDims("sum",c,o);let[m,A]=F.computeOutAndReduceShapes(f.shape,c),y=m;a&&(y=F.expandShapeToKeepDim(m,l));let g=aj(f,A,y,i);for(let w of p)i.disposeIntermediateTensorInfo(w);return g}};function ij(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=F.getAxesPermutation(c,o),h=a;u!=null&&(h=yn({inputs:{x:a},backend:n,attrs:{perm:u}}),c=F.getInnerMostAxes(c.length,a.shape.length)),F.assertAxesAreInnerMostDims("min",c,o);let[d,p]=F.computeOutAndReduceShapes(h.shape,c),f=k.sizeFromShape(p),m=xe({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=hi(m,m.dtype,"min",n),y;if(i){let g=F.expandShapeToKeepDim(d,l);y=xe({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=xe({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),u!=null&&n.disposeIntermediateTensorInfo(h),y}var oj={kernelName:xs,backendName:"webgl",kernelFunc:ij},lj=Xw+`
|
|
return min(a, b);
|
|
`,uj=`
|
|
vec4 result = vec4(min(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+tp+`
|
|
return result;
|
|
`,cj=en({opSnippet:lj,packedOpSnippet:uj,cpuKernelImpl:gL}),hj={kernelName:ws,backendName:"webgl",kernelFunc:cj},dj=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((c,u)=>c[0]+e[u]+c[1]);let r=e.length,a=pt(r),s=t.map(c=>c[0]).join(","),i=t.map((c,u)=>c[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),l=n==="reflect"?0:1;if(r===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
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=`
|
|
${a} start = ${a}(${s});
|
|
${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} 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};
|
|
}
|
|
}
|
|
${a} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
`}},pj=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((p,f)=>p[0]+e[f]+p[1]);let r=e.length,a=pt(r),s=t.map(p=>p[0]).join(","),i=t.map((p,f)=>p[0]+e[f]).join(","),o=cn("rc",r),l=cn("source",r),c=`${o[r-1]} < ${this.outputShape[r-1]}`,u=r===1?"source":`vec2(${l.slice(-2).join()})`,h=n==="reflect"?0:1,d="";if(r===1){let p=`
|
|
${a} source = rc;
|
|
if (source < start) {
|
|
source = start * 2 - source - ${h};
|
|
} else if (source >= end) {
|
|
source = (end - 1) * 2 - source + ${h};
|
|
}
|
|
source -= start;
|
|
`;d=`
|
|
${a} rc = outputLoc;
|
|
${p}
|
|
result[0] = getChannel(getX(${l.join()}), ${u});
|
|
${o[r-1]} += 1;
|
|
if(${c}) {
|
|
${p}
|
|
result[1] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
`}else{let p=`
|
|
${a} source = rc;
|
|
${a} lt = ${a}(lessThan(source, start));
|
|
${a} gte = ${a}(greaterThanEqual(source, end));
|
|
${a} orig = 1 - (lt + gte);
|
|
source = orig * source +
|
|
lt * (start * 2 - source - ${h}) +
|
|
gte * ((end - 1) * 2 - source + ${h});
|
|
source -= start;
|
|
`;d=`
|
|
${a} rc = outputLoc;
|
|
${p}
|
|
result[0] = getChannel(getX(${l.join()}), ${u});
|
|
${o[r-1]} += 1;
|
|
if(${c}) {
|
|
${p}
|
|
result[1] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
rc = outputLoc;
|
|
${o[r-2]} += 1;
|
|
if(${o[r-2]} < ${this.outputShape[r-2]}) {
|
|
${p}
|
|
result[2] = getChannel(getX(${l.join()}), ${u});
|
|
${o[r-1]} += 1;
|
|
if(${c}) {
|
|
${p}
|
|
result[3] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
const ${a} start = ${a}(${s});
|
|
const ${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${d}
|
|
setOutput(result);
|
|
}
|
|
`}},fj=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:a,mode:s}=n,i=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new pj(r.shape,a,s):new dj(r.shape,a,s);return t.runWebGLProgram(i,[r],r.dtype)},mj={kernelName:lu,backendName:"webgl",kernelFunc:fj},Aj=`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,yj=`
|
|
vec4 result = mod(a, b);
|
|
vec4 isNaN = vec4(equal(b, vec4(0.0)));
|
|
`+tp+`
|
|
return result;
|
|
`,gj=en({opSnippet:Aj,packedOpSnippet:yj}),xj={kernelName:ho,backendName:"webgl",kernelFunc:gj},wj=class{constructor(e,t,n){this.variableNames=["probs"],this.outputShape=[e,n],this.userCode=`
|
|
uniform float seed;
|
|
|
|
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}));
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.seedLoc==null&&(this.seedLoc=t.getUniformLocation(n,"seed")),t.gl.uniform1f(this.seedLoc,e)}}},_j=`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,bj=`
|
|
// 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;
|
|
`,F_=en({opSnippet:_j,packedOpSnippet:bj,checkOutOfBounds:!0}),vj={kernelName:os,backendName:"webgl",kernelFunc:F_},M_="return a - b;",$_=en({opSnippet:M_,packedOpSnippet:M_,supportsComplex:!0,cpuKernelImpl:NL}),kj={kernelName:Ps,backendName:"webgl",kernelFunc:$_};function D_(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=k.parseAxisParam([s],a.shape),o=R_({inputs:{x:a},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=F.expandShapeToKeepDim(o.shape,i),c=xe({inputs:{x:o},backend:n,attrs:{shape:l}}),u=$_({inputs:{a,b:c},backend:n}),h=N_({inputs:{x:u},backend:n}),d=gA({inputs:{x:h},backend:n,attrs:{axis:i,keepDims:!1}}),p=xe({inputs:{x:d},backend:n,attrs:{shape:l}}),f=F_({inputs:{a:h,b:p},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),f}var Ij={kernelName:Os,backendName:"webgl",kernelFunc:D_};function Nj(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r,l=o?a:D_({inputs:{logits:a},backend:n,attrs:{dim:a.shape.length-1}}),c=l.shape[0],u=l.shape[1],h=new wj(c,u,s),d=h.getCustomSetupFunc(i),p=n.runWebGLProgram(h,[l],"int32",d);return o||n.disposeIntermediateTensorInfo(l),p}var Sj={kernelName:Ph,backendName:"webgl",kernelFunc:Nj},O_="return -x;";function Tj(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let s=n.texData.get(r.dataId),[i,o]=wL(s.values,r.shape,r.dtype);return n.makeTensorInfo(o,r.dtype,i)}let a;return Q().getBool("WEBGL_PACK_UNARY_OPERATIONS")?a=new Al(r.shape,O_):a=new Fa(r.shape,O_),n.runWebGLProgram(a,[r],r.dtype)}var Ej={kernelName:po,backendName:"webgl",kernelFunc:Tj},Cj=Mr.nonMaxSuppressionV3Impl;function Rj(e){F.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r,c=n.readSync(a.dataId),u=n.readSync(s.dataId),{selectedIndices:h}=Cj(c,u,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}var Fj={kernelName:mo,backendName:"webgl",kernelFunc:Rj},Mj=Mr.nonMaxSuppressionV4Impl;function $j(e){F.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:c}=r,u=n.readSync(a.dataId),h=n.readSync(s.dataId),{selectedIndices:d,validOutputs:p}=Mj(u,h,i,o,l,c);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([p]))]}var Dj={kernelName:Ao,backendName:"webgl",kernelFunc:$j},Oj=Mr.nonMaxSuppressionV5Impl;function zj(e){F.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:c}=r,u=n.readSync(a.dataId),h=n.readSync(s.dataId),d=i,p=o,f=l,m=c,{selectedIndices:A,selectedScores:y}=Oj(u,h,d,p,f,m);return[n.makeTensorInfo([A.length],"int32",new Int32Array(A)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var Pj={kernelName:yo,backendName:"webgl",kernelFunc:zj},Lj=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)));
|
|
}
|
|
`}},Wj=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=k.sizeFromShape(a.shape),c=new Lj(l,s,i,o),u=xe({inputs:{x:a},backend:n,attrs:{shape:[l]}}),h=n.runWebGLProgram(c,[u],a.dtype);n.disposeIntermediateTensorInfo(u);let d=[...a.shape,s],p=xe({inputs:{x:h},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(h),p},Bj={kernelName:bs,backendName:"webgl",kernelFunc:Wj};function lp(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let a=ic({inputs:{input:r},backend:n}),s=lp({inputs:{x:a},backend:n}),i=op({inputs:{input:r},backend:n}),o=lp({inputs:{x:i},backend:n}),l=Ma({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return vA({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var Vj={kernelName:Do,backendName:"webgl",kernelFunc:lp};function z_(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 a=ic({inputs:{input:r},backend:n}),s=z_({inputs:{x:a},backend:n}),i=op({inputs:{input:r},backend:n}),o=lp({inputs:{x:i},backend:n}),l=Ma({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return vA({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var Uj={kernelName:go,backendName:"webgl",kernelFunc:z_};function Hj(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return bA({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(u=>{k.assertShapesMatch(s,u.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===u.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(u=>{let h=bA({inputs:{input:u},backend:n,attrs:{dim:a}});return o.push(h),h}),c=A_({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(u=>n.disposeIntermediateTensorInfo(u)),c}var jj={kernelName:xo,backendName:"webgl",kernelFunc:Hj},Gj=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((l,c)=>l[0]+e[c]+l[1]);let r=e.length,a=pt(r),s=t.map(l=>l[0]).join(","),i=t.map((l,c)=>l[0]+e[c]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);if(r===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start || outC >= end) {
|
|
setOutput(float(${n}));
|
|
} else {
|
|
setOutput(getX(outC - start));
|
|
}
|
|
}
|
|
`;return}this.userCode=`
|
|
${a} start = ${a}(${s});
|
|
${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outC = getOutputCoords();
|
|
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
|
|
setOutput(float(${n}));
|
|
} else {
|
|
${a} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
}
|
|
`}},qj=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,m)=>f[0]+e[m]+f[1]);let r=e.length,a=pt(r),s=t.map(f=>f[0]).join(","),i=t.map((f,m)=>f[0]+e[m]).join(","),o=cn("rc",r),l=cn("source",r),c=`${o[r-1]} < ${this.outputShape[r-1]}`,u=r===1?"source":`vec2(${l.slice(-2).join()})`,h=[`${a} rc = outputLoc;`,`${o[r-1]} += 1;
|
|
if(${c}) {
|
|
`,r===1?"":`}
|
|
rc = outputLoc;
|
|
${o[r-2]} += 1;
|
|
if(${o[r-2]} < ${this.outputShape[r-2]}) {`,r===1?"":` ${o[r-1]} += 1;
|
|
if(${c}) {`],d=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",p="";for(let f=0,m=r===1?2:4;f<m;f++)p+=`
|
|
${h[f]}
|
|
if (${d}) {
|
|
result[${f}] = float(${n});
|
|
} else {
|
|
${a} source = rc - start;
|
|
result[${f}] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
`;p+=r===1?"} ":"}}",this.userCode=`
|
|
const ${a} start = ${a}(${s});
|
|
const ${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${p}
|
|
setOutput(result);
|
|
}
|
|
`}},P_=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r,o=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new qj(a.shape,s,i):new Gj(a.shape,s,i);return n.runWebGLProgram(o,[a],a.dtype)},Xj={kernelName:vs,backendName:"webgl",kernelFunc:P_},Kj=`
|
|
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);
|
|
`,Zj=`
|
|
// 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));
|
|
`+tp+`
|
|
return result;
|
|
`,Jj=en({opSnippet:Kj,packedOpSnippet:Zj}),Yj={kernelName:ks,backendName:"webgl",kernelFunc:Jj};function Qj(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=[],c=k.parseAxisParam(s,a.shape),u=c,h=F.getAxesPermutation(u,o),d=a;h!=null&&(d=yn({inputs:{x:a},backend:n,attrs:{perm:h}}),u=F.getInnerMostAxes(u.length,o),l.push(d)),F.assertAxesAreInnerMostDims("prod",u,o);let p;if(n.shouldExecuteOnCPU([d])){let f=n.texData.get(d.dataId).values,{outVals:m,outShape:A,outDtype:y}=_L(d.shape,d.dtype,f,u);p=n.makeTensorInfo(A,y,m)}else{let[f,m]=F.computeOutAndReduceShapes(d.shape,u),A=k.sizeFromShape(m),y=xe({inputs:{x:d},backend:n,attrs:{shape:[-1,A]}}),g=jh(a.dtype),w=hi(y,g,"prod",n);p=xe({inputs:{x:w},backend:n,attrs:{shape:f}}),l.push(y),l.push(w)}if(i){l.push(p);let f=F.expandShapeToKeepDim(p.shape,c);p=xe({inputs:{x:p},backend:n,attrs:{shape:f}})}return l.forEach(f=>n.disposeIntermediateTensorInfo(f)),p}var eG={kernelName:wo,backendName:"webgl",kernelFunc:Qj},L_=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=bL(r,a,s,i);return t.makeTensorInfo([o.length],i,o)},tG={kernelName:uu,backendName:"webgl",kernelFunc:L_},nG="return 1.0 / x;",rG=Qe({opSnippet:nG}),aG={kernelName:_o,backendName:"webgl",kernelFunc:rG},sG=gr+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,iG=`
|
|
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;
|
|
`,oG=Qe({opSnippet:sG,packedOpSnippet:iG}),lG={kernelName:Ns,backendName:"webgl",kernelFunc:oG},uG=gr+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,cG=`
|
|
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;
|
|
`,hG=Qe({opSnippet:uG,packedOpSnippet:cG}),dG={kernelName:Ts,backendName:"webgl",kernelFunc:hG},pG=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let c=[r&&t>1?i-1:i,r&&n>1?o-1:o],u=[r&&t>1?t-1:t,r&&n>1?n-1:n],h;a?h="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":h="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${c[0]/u[0]},
|
|
${c[1]/u[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${h};
|
|
|
|
// 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);
|
|
}
|
|
`}},fG=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let c=[r&&t>1?i-1:i,r&&n>1?o-1:o],u=[r&&t>1?t-1:t,r&&n>1?n-1:n],h;a?h="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":h="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${c[0]/u[0]},
|
|
${c[1]/u[1]},
|
|
${c[1]/u[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.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 = ${h};
|
|
|
|
// 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 mG(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,c]=o,u=Q().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new fG(a.shape,l,c,s,i):new pG(a.shape,l,c,s,i);return n.runWebGLProgram(u,[a],"float32")}var AG={kernelName:Ss,backendName:"webgl",kernelFunc:mG},yG=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],c=o[0]/l[0],u=o[1]/l[1],h=1/c,d=1/u,p=Math.ceil(h)*2+2,f=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(${c});
|
|
const float widthScale = float(${u});
|
|
|
|
const float invHeightScale = float(${h});
|
|
const float invWidthScale = float(${d});
|
|
|
|
const int winHeight = int(${p});
|
|
const int winWidth = int(${f});
|
|
|
|
// 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 >= ${s}) {
|
|
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), ${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), ${a-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 gG(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new yG(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var xG={kernelName:Bh,backendName:"webgl",kernelFunc:gG},wG=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let c=[r&&t>1?i-1:i,r&&n>1?o-1:o],u=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0",d;a?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${c[0]/u[0]},
|
|
${c[1]/u[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.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 + ${h})));
|
|
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function _G(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,c]=o,u=new wG(a.shape,l,c,s,i);return n.runWebGLProgram(u,[a],a.dtype)}var bG={kernelName:cu,backendName:"webgl",kernelFunc:_G},vG=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],c=o[0]/l[0],u=o[1]/l[1],h=1/c,d=1/u,p=Math.ceil(h)*2+2,f=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(${c});
|
|
const float widthScale = float(${u});
|
|
|
|
const float invHeightScale = float(${h});
|
|
const float invWidthScale = float(${d});
|
|
|
|
const int winHeight = int(${p});
|
|
const int winWidth = int(${f});
|
|
|
|
// 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 >= ${s}) {
|
|
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(${o[0]}) *
|
|
(float(dyR) / float(${l[0]}));
|
|
|
|
float sourceFracCol =
|
|
float(${o[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(${a}) - 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 kG(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new vG(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var IG={kernelName:Wh,backendName:"webgl",kernelFunc:kG},NG=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=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,a=e.map((i,o)=>r(o)).join(","),s=pt(n);this.userCode=`
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${a}));
|
|
}
|
|
`}},SG=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=cn("rc",n),a=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,i=pt(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(${a}){
|
|
result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),
|
|
${e[0]} - (rc + 1) - 1);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`:this.userCode=`
|
|
void main() {
|
|
${i} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = ${o(r.slice())};
|
|
if(${a}){
|
|
result.g = ${l(r.slice())};
|
|
}
|
|
if(${s}) {
|
|
result.b = ${c(r.slice())};
|
|
if(${a}) {
|
|
result.a = ${u(r.slice())};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`;function o(p){return h(p)}function l(p){return p[n-1]="("+p[n-1]+" + 1)",h(p)}function c(p){return p[n-2]="("+p[n-2]+" + 1)",h(p)}function u(p){return p[n-1]="("+p[n-1]+" + 1)",p[n-2]="("+p[n-2]+" + 1)",h(p)}function h(p){let f=e.map((y,g)=>d(g,p)),m=f.join(","),A=f.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${A}))`}function d(p,f){return t.indexOf(p)!==-1&&e[p]!==1?`${e[p]} - ${f[p]} - 1`:`${f[p]}`}}};function TG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=a.shape.length,o=k.parseAxisParam(s,a.shape);if(i===0)return Cn({inputs:{x:a},backend:n});let l=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new SG(a.shape,o):new NG(a.shape,o);return n.runWebGLProgram(l,[a],a.dtype)}var EG={kernelName:Es,backendName:"webgl",kernelFunc:TG},CG=class{constructor(e,t,n,r){this.variableNames=["Image"],this.outputShape=[];let a=e[1],s=e[2],i=Math.sin(t).toFixed(3),o=Math.cos(t).toFixed(3);this.outputShape=e;let[l,c]=F.getImageCenter(r,a,s),u=l.toFixed(3),h=c.toFixed(3),d="";typeof n=="number"?d=`float outputValue = ${n.toFixed(2)};`:d=`
|
|
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) - ${u}) * ${o} - (float(y) - ${h}) * ${i};
|
|
float coordYFloat = (float(x) - ${u}) * ${i} + (float(y) - ${h}) * ${o};
|
|
int coordX = int(round(coordXFloat + ${u}));
|
|
int coordY = int(round(coordYFloat + ${h}));
|
|
${d}
|
|
if(coordX >= 0 && coordX < ${s} && coordY >= 0 && coordY < ${a}) {
|
|
outputValue = getImage(coords[0], coordY, coordX, coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},RG={kernelName:zo,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=new CG(r.shape,a,s,i);return o.runWebGLProgram(l,[r],r.dtype)}},FG=`
|
|
// 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;
|
|
}
|
|
}
|
|
`,MG=Qe({opSnippet:FG}),$G={kernelName:Cs,backendName:"webgl",kernelFunc:MG},DG="return inversesqrt(x);",OG=Qe({opSnippet:DG,cpuKernelImpl:vL}),zG={kernelName:Rs,backendName:"webgl",kernelFunc:OG},W_=class{constructor(e,t,n,r,a,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=pt(a.length),l=pt(s.length),c="";n===1?c="i":n===2&&(c="i, j");let u=`getIndices(${c})`,h="";r===1?h="i":r===2&&(h="i, coords[1]");let d=`getUpdates(${h})`,p=t>1?"strides[j]":"strides";this.userCode=`
|
|
${o} strides = ${o}(${a});
|
|
|
|
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(${u});
|
|
flattenedIndex += index * ${p};
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += ${d};
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`}};function PG(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:c,strides:u,outputSize:h}=F.calculateShapes(s,a,i),d=[h/c,c];if(h===0)return n.makeTensorInfo(i,a.dtype);let p=xe({inputs:{x:a},backend:n,attrs:{shape:[l,o]}}),f=xe({inputs:{x:s},backend:n,attrs:{shape:[l,c]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),A=new W_(l,o,p.shape.length,f.shape.length,u,d),y=n.runWebGLProgram(A,[f,p,m],f.dtype),g=xe({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(m),g}var LG={kernelName:vo,backendName:"webgl",kernelFunc:PG},WG=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let r,a;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)a="resRC",r="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let c=0;c<t.length;c++)l.push(`${i[c]}`),c<e&&o.push(`${i[c]}`);r=o.join(),a=l.join()}let s=pt(n);this.userCode=`
|
|
void main() {
|
|
${s} resRC = getOutputCoords();
|
|
float cVal = getC(${r});
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(${a}));
|
|
} else {
|
|
setOutput(getB(${a}));
|
|
}
|
|
}
|
|
`}};function BG(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=new WG(r.shape.length,a.shape,a.shape.length);return n.runWebGLProgram(i,[r,a,s],er(a.dtype,s.dtype))}var VG={kernelName:ko,backendName:"webgl",kernelFunc:BG},UG=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = ${F.SELU_SCALEALPHA};
|
|
float scale = ${F.SELU_SCALE};
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,HG=Qe({opSnippet:UG}),jG={kernelName:Io,backendName:"webgl",kernelFunc:HG},GG="return 1.0 / (1.0 + exp(-1.0 * x));",qG=Qe({opSnippet:GG}),XG={kernelName:Ms,backendName:"webgl",kernelFunc:qG},KG=`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`,ZG=Qe({opSnippet:KG}),JG={kernelName:To,backendName:"webgl",kernelFunc:ZG},YG=Qw+`
|
|
return sin(x);
|
|
`,QG=Qe({opSnippet:YG}),eq={kernelName:Fs,backendName:"webgl",kernelFunc:QG},tq=`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`,nq=Qe({opSnippet:tq}),rq={kernelName:So,backendName:"webgl",kernelFunc:nq},aq=`
|
|
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;
|
|
`,sq=Qe({opSnippet:aq}),iq={kernelName:Eo,backendName:"webgl",kernelFunc:sq},oq=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;k.assert(a.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,g)=>y*g),l=[[0,0]];l.push(...i);for(let y=1+s.length;y<a.shape.length;++y)l.push([0,0]);let c=[],u=P_({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),h=F.getReshaped(u.shape,s,o,!1),d=F.getPermuted(h.length,s.length,!1),p=F.getReshapedPermuted(u.shape,s,o,!1),f=xe({inputs:{x:u},backend:n,attrs:{shape:h}}),m=yn({inputs:{x:f},backend:n,attrs:{perm:d}}),A=xe({inputs:{x:m},backend:n,attrs:{shape:p}});return c.push(u),c.push(f),c.push(m),c.forEach(y=>n.disposeIntermediateTensorInfo(y)),A},lq={kernelName:hu,backendName:"webgl",kernelFunc:oq};function uq(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:c,strides:u,outputSize:h}=F.calculateShapes(s,a,o),d=!1,p=new W_(c,l,a.shape.length,s.shape.length,u,[h,1],d),f=n.runWebGLProgram(p,[s,a,i],s.dtype),m=xe({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(f),m}var cq={kernelName:Vh,backendName:"webgl",kernelFunc:uq};function hq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=k.parseAxisParam(i,a.shape)[0],l=F.prepareSplitSize(a,s,o),c=a.shape.length,u=new Array(c).fill(0),h=a.shape.slice();return l.map(d=>{let p=[...h];p[o]=d;let f=sc({inputs:{x:a},backend:n,attrs:{begin:u,size:p}});return u[o]+=d,f})}var dq={kernelName:Co,backendName:"webgl",kernelFunc:hq},pq="return sqrt(x);",fq=Qe({opSnippet:pq}),mq={kernelName:$s,backendName:"webgl",kernelFunc:fq},Aq="return x * x;",yq=Qe({opSnippet:Aq}),gq={kernelName:du,backendName:"webgl",kernelFunc:yq},B_="return (a - b) * (a - b);",xq=en({opSnippet:B_,packedOpSnippet:B_}),wq={kernelName:zs,backendName:"webgl",kernelFunc:xq};function _q({inputs:e,attrs:t,backend:n}){let{x:r}=e,a=gr+`
|
|
return x > 0.0 ? 1.0 : float(${t.alpha});
|
|
`,s=new Fa(r.shape,a);return n.runWebGLProgram(s,[r],r.dtype)}var bq={kernelName:Oo,backendName:"webgl",kernelFunc:_q},vq=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,a=pt(n.length),s=pt(n.length),i="";if(r===1)i="coords * strides + begin";else{let o=0;i=n.map((l,c)=>(o++,n.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${o-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=`
|
|
${a} begin = ${a}(${e});
|
|
${a} strides = ${a}(${t});
|
|
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${i}));
|
|
}
|
|
`}};function kq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:c,ellipsisMask:u,newAxisMask:h,shrinkAxisMask:d}=r,{nonStrided:p,$begin:f,$strides:m,size:A,newShape:y,outShape:g}=on.sliceInfo(a.shape,s,i,o,l,c,u,h,d),w=xe({inputs:{x:a},backend:n,attrs:{shape:y}}),x;if(p){let b=sc({inputs:{x:w},backend:n,attrs:{begin:f,size:A}});x=xe({inputs:{x:b},backend:n,attrs:{shape:g}}),n.disposeIntermediateTensorInfo(b)}else if(g.some(b=>b===0))x=n.makeTensorInfo(g,a.dtype,[]);else if(n.shouldExecuteOnCPU([w])){let b=n.texData.get(w.dataId).values,T=He(w.shape,w.dtype,b),S=IL(g,T,m,f);x=n.makeTensorInfo(g,w.dtype,S.values)}else{let b=new vq(f,m,g);x=n.runWebGLProgram(b,[w],w.dtype)}let _=xe({inputs:{x},backend:n,attrs:{shape:g}});return n.disposeIntermediateTensorInfo(w),n.disposeIntermediateTensorInfo(x),_}var Iq={kernelName:Ro,backendName:"webgl",kernelFunc:kq},Nq="return tan(x);",Sq=Qe({opSnippet:Nq}),Tq={kernelName:Fo,backendName:"webgl",kernelFunc:Sq},Eq=`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`,Cq=Qe({opSnippet:Eq}),Rq={kernelName:Ls,backendName:"webgl",kernelFunc:Cq},Mq=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[s]*t[s];this.outputShape=n,this.rank=n.length;let r=pt(this.rank),a=Fq(e);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${a}));
|
|
}
|
|
`}};function Fq(e){let t=e.length;if(t>5)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 a=0;a<e.length;a++)r.push(`imod(${n[a]}, ${e[a]})`);return r.join()}function V_(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;if(a.dtype==="string"){let o=n.readSync(a.dataId).map(u=>k.decodeString(u)),l=He(a.shape,a.dtype,o),c=SL(l,s);return n.makeTensorInfo(c.shape,c.dtype,c.values)}let i=new Mq(a.shape,s);return n.runWebGLProgram(i,[a],a.dtype)}var $q={kernelName:ga,backendName:"webgl",kernelFunc:V_};function Dq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r,o=n.readSync(a.dataId),[l,c]=TL(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(c.shape,c.dtype,c.values)]}var Oq={kernelName:Mo,backendName:"webgl",kernelFunc:Dq};function zq(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;cl(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=r.readSync(s.dataId),{outputValues:o,outputShape:l,indices:c}=EL(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([c.length],"int32",c)]}var Pq={kernelName:Uh,backendName:"webgl",kernelFunc:zq};function Lq(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a,o=i.shape.length,l=a.shape[s],c=new Array(o-1),u=0;for(let m=0;m<o;m++)m!==s&&(c[u++]=i.shape[m]);let h=[],d=new Array(o).fill(0),p=i.shape.slice();p[s]=1;let f=new Array(l);for(let m=0;m<f.length;m++){d[s]=m;let A=sc({inputs:{x:i},backend:n,attrs:{begin:d,size:p}}),y=xe({inputs:{x:A},backend:n,attrs:{shape:c}});f[m]=y,h.push(A)}return h.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var Wq={kernelName:$o,backendName:"webgl",kernelFunc:Lq},Bq=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,r=e.batchSize,a=e.inSize,s=e.numSegments,i=s*Math.ceil(a/n);this.outputShape=[r,i];let o="0.0",l="sumValue",c=Math.floor(n/4)*4,u=n%4,h=`
|
|
sumValue += dot(values, segFilter);
|
|
`,d="";a%n>0&&(d=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return initializationValue;
|
|
}
|
|
`);let p="";a%n>0&&(p=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return -1.0;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${o};
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${d}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
float getSegmentIdAtIndex(int inIdx) {
|
|
${p}
|
|
return getSegmentIds(inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = int(floor(float(outIdx) / float(
|
|
${s})) * float(${n}));
|
|
int currentSeg = int(mod(float(outIdx), float(${s})));
|
|
|
|
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
|
|
);
|
|
|
|
${h}
|
|
}
|
|
|
|
int inIdx = inOffset + ${c};
|
|
if (${u===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
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===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
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===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
|
|
);
|
|
|
|
${h}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function Vq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r,o=a.shape.length,l=[],c=0,u=F.getAxesPermutation([c],o),h=a;u!=null&&(h=yn({inputs:{x:a},backend:n,attrs:{perm:u}}),l.push(h),c=F.getInnerMostAxes(1,o)[0]);let d=F.segment_util.computeOutShape(h.shape,c,i),p=k.sizeFromShape([h.shape[c]]),f=xe({inputs:{x:h},backend:n,attrs:{shape:[-1,p]}});l.push(f);let m=jh(a.dtype),A=(x,_,b,T,S)=>{let N=x.shape[0],C=x.shape[1],$=F.segment_util.segOpComputeOptimalWindowSize(C,S),D={windowSize:$,inSize:C,batchSize:N,numSegments:S},O=new Bq(D,_),B=n.compileAndRun(O,[x,b],T);if(l.push(B),B.shape[1]===S)return B;let H=L_({backend:n,attrs:{start:0,stop:S,step:1,dtype:"float32"}}),X=V_({inputs:{x:H},backend:n,attrs:{reps:[C/$]}});return l.push(H),l.push(X),A(B,_,X,T,S)},y=A(f,"unsortedSegmentSum",s,m,i),g=xe({inputs:{x:y},backend:n,attrs:{shape:d}}),w=g;if(u!=null){l.push(g);let x=F.getUndoAxesPermutation(u);w=yn({inputs:{x:w},backend:n,attrs:{perm:x}})}return l.forEach(x=>n.disposeIntermediateTensorInfo(x)),w}var Uq={kernelName:pu,backendName:"webgl",kernelFunc:Vq},Hq=[OH,LH,kW,NW,EW,FW,$W,zW,LW,BW,jW,qW,ZW,QW,iB,nB,uB,pB,hB,yB,xB,_B,IB,FB,$B,WB,VB,GB,KB,sW,QB,uV,hV,rV,mV,yV,pV,wV,vV,NV,TV,CV,MV,LV,BV,DV,HV,qV,JV,tU,sU,lU,uU,cU,dU,fU,AU,gU,wU,kU,TU,CU,FU,DU,LU,UU,qU,aW,KU,YB,YU,tH,aH,oW,lH,dH,fH,_H,gH,IH,TH,FH,BH,KH,qH,QH,tj,rj,jH,sj,oj,hj,mj,xj,Sj,dW,Ej,Fj,Dj,Pj,OB,Bj,Uj,jj,Xj,Yj,uW,eG,tG,zB,vj,aG,dG,lG,fW,AG,xG,bG,IG,EG,RG,$G,zG,LG,VG,jG,XG,JG,eq,rq,CB,Ij,iq,lq,cq,dq,mq,gq,wq,bq,Iq,kj,_W,Tq,Rq,$q,Oq,bW,Pq,Wq,Uq,Vj];for(let e of Hq)Po(e);var Rn;(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"})(Rn||(Rn={}));var oc;(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"})(oc||(oc={}));var U_;function jq(e){U_=e.wasm.cwrap(Bs,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Gq(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t;if(a.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:c,activation:u,leakyreluAlpha:h}=r,d=n.dataIdMap.get(a.dataId).id,p=n.dataIdMap.get(s.dataId).id,f=0;if(i!=null){let S=n.dataIdMap.get(i.dataId);if(S.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${S.shape.length}.`);f=S.id}let m=o==null?0:n.dataIdMap.get(o.dataId).id,A=oc[u];if(A==null)throw new Error(`${u} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?a.shape[2]:a.shape[1],g=c?s.shape[1]:s.shape[2],w=a.shape[0],x=n.makeOutput([w,y,g],a.dtype),_=n.dataIdMap.get(x.dataId).id,b=new Uint8Array(new Int32Array(a.shape).buffer),T=new Uint8Array(new Int32Array(s.shape).buffer);return U_(d,b,a.shape.length,p,T,s.shape.length,l,c,A,f,m,h||0,_),x}var qq={kernelName:Bs,backendName:"wasm",setupFunc:jq,kernelFunc:Gq};function Fn(e){let t;function n(a){t=a.wasm.cwrap(e,null,["number","number"])}function r(a){let{backend:s,inputs:{x:i}}=a,o=s.dataIdMap.get(i.dataId).id,l=s.makeOutput(i.shape,i.dtype),c=s.dataIdMap.get(l.dataId).id;return k.sizeFromShape(l.shape)===0||t(o,c),l}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var Xq=Fn(Di);function hn(e,t,n){let r;function a(i){r=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:c,b:u}=l,h=o.dataIdMap.get(c.dataId).id,d=o.dataIdMap.get(u.dataId).id,p=n!=null?n:c.dtype,f=F.assertAndGetBroadcastShape(c.shape,u.shape),m=o.makeOutput(f,p);if(k.sizeFromShape(f)===0)return m;let A=new Uint8Array(new Int32Array(c.shape).buffer),y=new Uint8Array(new Int32Array(u.shape).buffer),g=o.dataIdMap.get(m.dataId).id,w=()=>r(h,A,c.shape.length,d,y,u.shape.length,Rn[c.dtype],g);if(t&&c.dtype==="float32")return w(),m;let x=F.getBroadcastDims(c.shape,f),_=F.getBroadcastDims(u.shape,f),b=x.every((S,N)=>S===N),T=_.every((S,N)=>S===N);if(b&&T)return w(),m;throw new Error(`Broadcasting along outer dims is not yet supported for ${c.dtype} ${e}.`)}return{kernelName:e,backendName:"wasm",setupFunc:a,kernelFunc:s}}var Kq=!0,Zq=hn(Aa,Kq),H_;function Jq(e){H_=e.wasm.cwrap(Ja,null,["array","number","number","number"])}function Yq(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(k.sizeFromShape(r.shape)===0)return r;let a=t.map(o=>n.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(a).buffer),i=n.dataIdMap.get(r.dataId).id;return H_(s,a.length,Rn[r.dtype],i),r}var Qq={kernelName:Ja,backendName:"wasm",setupFunc:Jq,kernelFunc:Yq};function up(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype),a=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(a),r}var eX={kernelName:ro,backendName:"wasm",kernelFunc:up},j_;function tX(e){j_=e.wasm.cwrap(Ws,null,["number","array","number","number","number","array","number"])}function cp(e){let{inputs:t,backend:n,attrs:r}=e,[a,s]=rX(t.x.shape,r.perm),i=!0;for(let f=0;f<s.length;f++)s[f]!==f&&(i=!1);let o=nX(t.x.shape,r.perm),l={dataId:t.x.dataId,shape:a,dtype:t.x.dtype};if(i){let f=up({inputs:t,backend:n});return f.shape=o,f}let c=n.makeOutput(o,l.dtype),u=n.dataIdMap.get(l.dataId).id,h=n.dataIdMap.get(c.dataId).id,d=new Uint8Array(new Int32Array(s).buffer),p=new Uint8Array(new Int32Array(l.shape).buffer);return j_(u,p,l.shape.length,Rn[l.dtype],h,d,s.length),c}function nX(e,t){let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];return n}function rX(e,t){let n=[],r=[];for(let a=0;a<e.length;++a)e[a]!==1&&n.push(e[a]),e[t[a]]!==1&&r.push(t[a]);for(let a=0;a<r.length;++a){let s=-1;for(let i=0;i<r.length;++i)r[i]>=a&&(s===-1||r[s]>r[i])&&(s=i);r[s]=a}return[n,r]}var aX={kernelName:Ws,backendName:"wasm",kernelFunc:cp,setupFunc:tX};function wl(e,t,n){let r=e.shape,a=e.shape.length,s=k.parseAxisParam(t,r),i=s,o=F.getAxesPermutation(i,a),l=null,c=!1;if(o!=null){let u=new Array(a);for(let d=0;d<u.length;d++)u[d]=r[o[d]];i=F.getInnerMostAxes(i.length,a),l=cp({inputs:{x:e},attrs:{perm:o},backend:n});let h=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(l.dataId).id!==h&&(c=!0)}return{transposed:l,originalAxes:s,axes:i,inputWasTransposed:c}}var G_;function sX(e){G_=e.wasm.cwrap(Ya,null,["number","number","number","number","number"])}function iX(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a}=r,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=i,l=s,{transposed:c,axes:u,inputWasTransposed:h}=wl(s,a,t);if(h){let y=t.dataIdMap.get(c.dataId).id;y!==i&&(l=c,o=y)}let d=l.shape.slice(0,-1),p=t.makeOutput(d,"int32"),f=t.dataIdMap.get(p.dataId).id,m=k.sizeFromShape(p.shape),A=l.shape[u[0]];return G_(o,Rn[l.dtype],m,A,f),h&&t.disposeData(c.dataId),p}var oX={kernelName:Ya,backendName:"wasm",kernelFunc:iX,setupFunc:sX},q_;function lX(e){q_=e.wasm.cwrap(Qa,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function uX(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:c}=n,u=F.computePool2DInfo(a.shape,i,o,1,l,c),h=u.filterHeight,d=u.filterWidth,p=u.padInfo.top,f=u.padInfo.right,m=u.padInfo.bottom,A=u.padInfo.left,y=u.strideHeight,g=u.strideWidth,w=u.inChannels;if(u.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${u.dataFormat}'. Please use 'channelsLast'.`);if(u.dilationWidth!==1||u.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${u.dilationHeight}, ${u.dilationWidth}].`);let x=r.makeOutput(u.outShape,"float32"),_=r.dataIdMap.get(x.dataId).id;return q_(s,a.shape[0],a.shape[1],a.shape[2],h,d,p,f,m,A,y,g,w,_),x}var cX={kernelName:Qa,backendName:"wasm",setupFunc:lX,kernelFunc:uX};function xr(e){let{inputs:t,attrs:n}=e,{x:r}=t,{shape:a}=n,s=k.sizeFromShape(r.shape),i=k.inferFromImplicitShape(a,s);return k.assert(s===k.sizeFromShape(i),()=>`new shape: ${i}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),{dataId:r.dataId,shape:i,dtype:r.dtype}}var hX={kernelName:bo,backendName:"wasm",kernelFunc:xr},X_;function dX(e){X_=e.wasm.cwrap(es,null,["number","array","number","number","array","number","number","number","number"])}function pX(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;if(a.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=a.shape.length,c=s.shape.length,u=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[c-1]:s.shape[c-2],d=i?a.shape[l-1]:a.shape[l-2],p=o?s.shape[c-2]:s.shape[c-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),A=k.sizeFromShape(f),y=k.sizeFromShape(m),g=A===y||A===1||y===1;k.assert(l>=2&&c>=2&&g,()=>`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 (${f}) and (${m}).`);let w=(A>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([d,p]);k.assert(u===h,()=>`Error in matMul: inner shapes (${u}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[A,u,d]:[A,d,u],_=o?[y,p,h]:[y,h,p],b=xr({inputs:{x:a},backend:n,attrs:{shape:x}}),T=xr({inputs:{x:s},backend:n,attrs:{shape:_}}),S=n.dataIdMap.get(b.dataId).id,N=n.dataIdMap.get(T.dataId).id,C=i?b.shape[2]:b.shape[1],$=o?T.shape[1]:T.shape[2],D=Math.max(A,y),O=n.makeOutput([D,C,$],b.dtype),B=n.dataIdMap.get(O.dataId).id,H=new Uint8Array(new Int32Array(b.shape).buffer),X=new Uint8Array(new Int32Array(T.shape).buffer);return X_(S,H,b.shape.length,N,X,T.shape.length,i,o,B),O.shape=w,O}var fX={kernelName:es,backendName:"wasm",setupFunc:dX,kernelFunc:pX};function hp(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,a=r.makeOutput(t.shape,n),s=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(a).set(s),a}var mX={kernelName:ts,backendName:"wasm",kernelFunc:hp},K_;function AX(e){K_=e.wasm.cwrap(ya,null,["number","number","number","number"])}function yX(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o=n.dataIdMap.get(a.dataId).id,l=n.makeOutput(a.shape,a.dtype),c=n.dataIdMap.get(l.dataId).id;return K_(o,s,i,c),l}var gX={kernelName:ya,backendName:"wasm",setupFunc:AX,kernelFunc:yX};function Z_(e){let{inputs:t,backend:n}=e,r=k.parseAxisParam(e.attrs.axis,t[0].shape)[0],a=F.computeOutShape(t.map(p=>p.shape),r),s=t.filter(p=>k.sizeFromShape(p.shape)>0);if(s.length===1)return up({inputs:{x:s[0]},backend:n});let i=n.makeOutput(a,t[0].dtype);if(k.sizeFromShape(a)===0)return i;let o=s.map(p=>p.shape);if(F.assertParamsConsistent(o,r),s[0].dtype==="string"){let p=s.map(w=>{let x=k.sizeFromShape(w.shape.slice(r));return xr({inputs:{x:w},backend:n,attrs:{shape:[-1,x]}})}),f=p.map(w=>({vals:n.readSync(w.dataId),shape:w.shape}));a=F.computeOutShape(p.map(w=>w.shape),1);let m=p[0].shape[0]===1,A=jm(f,a,t[0].dtype,m),y=F.computeOutShape(s.map(w=>w.shape),r);i.shape=y;let g=n.dataIdMap.get(i.dataId);return g.stringBytes=F.fromStringArrayToUint8(A),i}let l=k.sizeFromShape(s[0].shape.slice(0,r)),c=0,u=s.map(p=>{let f=k.sizeFromShape(p.shape.slice(r));return c+=f,f}),h=s.map(p=>n.typedArrayFromHeap(p)),d=n.typedArrayFromHeap(i);for(let p=0;p<l;p++){let f=p*c;for(let m=0;m<h.length;m++){let A=u[m],y=p*A,g=h[m].subarray(y,y+A);d.set(g,f),f+=A}}return i}var xX={kernelName:Hi,backendName:"wasm",kernelFunc:Z_},J_;function wX(e){J_=e.wasm.cwrap(ns,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _X(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:c,pad:u,dimRoundingMode:h,dataFormat:d}=n,p=F.convertConv2DDataFormat(d),f=F.computeConv2DInfo(a.shape,s.shape,l,c,u,h,!1,p),m=f.filterHeight,A=f.filterWidth,y=f.padInfo.top,g=f.padInfo.right,w=f.padInfo.bottom,x=f.padInfo.left,_=f.dilationHeight,b=f.dilationWidth,T=f.strideHeight,S=f.strideWidth,N=f.inChannels,C=f.outChannels,$=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let D=r.makeOutput(f.outShape,"float32"),O=r.dataIdMap.get(D.dataId).id;return J_(i,a.shape[0],a.shape[1],a.shape[2],o,m,A,y,g,w,x,$,_,b,T,S,N,C,O),D}var bX={kernelName:ns,backendName:"wasm",setupFunc:wX,kernelFunc:_X},Y_;function vX(e){Y_=e.wasm.cwrap(rs,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function kX(e){let{backend:t,inputs:n,attrs:r}=e,{dy:a,filter:s}=n,{strides:i,pad:o,dataFormat:l,dimRoundingMode:c,inputShape:u}=r,h=1,d=F.convertConv2DDataFormat(l),p=F.computeConv2DInfo(u,s.shape,i,h,o,c,!1,d),{batchSize:f,filterHeight:m,filterWidth:A,inChannels:y,inHeight:g,inWidth:w,outChannels:x,outHeight:_,outWidth:b,strideHeight:T,strideWidth:S}=p,N=m-1-p.padInfo.top,C=A-1-p.padInfo.left,$=p.dataFormat==="channelsLast",D=k.computeStrides(p.inShape),O=k.computeStrides(a.shape),[B,H,X]=k.computeStrides(s.shape),Z=D[0],ee=$?D[1]:D[2],Y=$?D[2]:1,ie=$?1:D[1],re=O[0],ne=$?O[1]:O[2],ae=$?O[2]:1,de=$?1:O[1],ue=t.makeOutput(p.inShape,"float32"),me=t.dataIdMap.get(ue.dataId).id,ye=t.dataIdMap.get(a.dataId).id,be=t.dataIdMap.get(s.dataId).id;return Y_(ye,be,f,m,A,g,w,y,_,b,x,T,S,N,C,B,H,X,Z,ee,Y,ie,re,ne,ae,de,me),ue}var IX={kernelName:rs,backendName:"wasm",setupFunc:vX,kernelFunc:kX},NX=Fn(as),kA;(function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"})(kA||(kA={}));var Q_;function SX(e){Q_=e.wasm.cwrap(Gi,null,["number","number","number","number","array","number","number","number","number","number"])}function TX(e){let{backend:t,inputs:n,attrs:r}=e,{method:a,extrapolationValue:s,cropSize:i}=r,{image:o,boxes:l,boxInd:c}=n,u=l.shape[0],[h,d]=i,p=[u,h,d,o.shape[3]],f=t.dataIdMap.get(o.dataId),m;o.dtype!=="float32"&&(m=hp({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(m.dataId));let A=f.id,y=t.dataIdMap.get(l.dataId).id,g=t.dataIdMap.get(c.dataId).id,w=t.makeOutput(p,"float32"),x=t.dataIdMap.get(w.dataId).id,_=new Uint8Array(new Int32Array(o.shape).buffer);return Q_(A,y,g,u,_,h,d,kA[a],s,x),m!=null&&t.disposeData(m.dataId),w}var EX={kernelName:Gi,backendName:"wasm",setupFunc:SX,kernelFunc:TX},eb;function CX(e){eb=e.wasm.cwrap(ss,null,["number","number","number","number","number","number"])}function RX(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length;k.assert(a.dtype==="float32"||a.dtype==="int32",()=>`cumsum does not support ${a.dtype} tensors in the WASM backend`);let c=F.getAxesPermutation([s],l),u=a;c!==null&&(u=cp({inputs:{x:a},attrs:{perm:c},backend:n}));let h=F.getInnerMostAxes(1,l)[0];F.assertAxesAreInnerMostDims("cumsum",[h],l);let d=n.makeOutput(u.shape,u.dtype),p=u.shape[h],f=n.dataIdMap.get(u.dataId).id,m=n.dataIdMap.get(d.dataId).id;eb(f,i?1:0,o?1:0,p,m,Rn[a.dtype]);let A=d;if(c!==null){let y=F.getUndoAxesPermutation(c);A=cp({inputs:{x:d},attrs:{perm:y},backend:n}),n.disposeData(u.dataId),n.disposeData(d.dataId)}return A}var FX={kernelName:ss,backendName:"wasm",setupFunc:CX,kernelFunc:RX},tb;function MX(e){tb=e.wasm.cwrap(qi,null,["number","number","number","array","number","array","array","number","number"])}function $X(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{blockSize:s,dataFormat:i}=r;k.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=i==="NHWC"?a.shape[1]:a.shape[2],c=i==="NHWC"?a.shape[2]:a.shape[3],u=i==="NHWC"?a.shape[3]:a.shape[1],h=l*s,d=c*s,p=u/(s*s),f=i==="NHWC"?[o,h,d,p]:[o,p,h,d],m=t.makeOutput(f,"float32"),A=t.dataIdMap.get(a.dataId).id,y=new Uint8Array(new Int32Array(k.computeStrides(a.shape)).buffer),g=new Uint8Array(new Int32Array(f).buffer),w=new Uint8Array(new Int32Array(k.computeStrides(f)).buffer),x=t.dataIdMap.get(m.dataId).id;return tb(A,s,i==="NHWC"?1:0,y,a.shape.length-1,g,w,f.length,x),m}var DX={kernelName:qi,backendName:"wasm",setupFunc:MX,kernelFunc:$X},nb;function OX(e){nb=e.wasm.cwrap(is,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function zX(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:c,pad:u,dimRoundingMode:h}=n,d=c==null?[1,1]:c,p=F.computeConv2DInfo(a.shape,s.shape,l,d,u,h,!0),f=p.filterHeight,m=p.filterWidth,A=p.padInfo.top,y=p.padInfo.right,g=p.padInfo.bottom,w=p.padInfo.left,x=p.dilationHeight,_=p.dilationWidth,b=p.strideHeight,T=p.strideWidth,S=p.inChannels,N=p.outChannels,C=p.padInfo.type==="SAME"?1:0;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let $=r.makeOutput(p.outShape,"float32"),D=r.dataIdMap.get($.dataId).id;return nb(i,a.shape[0],a.shape[1],a.shape[2],o,f,m,A,y,g,w,C,x,_,b,T,S,N,D),$}var PX={kernelName:is,backendName:"wasm",setupFunc:OX,kernelFunc:zX},LX=!1,WX=hn(Zi,LX,"bool"),BX=Fn(ls);function IA(e){let{inputs:t,attrs:n,backend:r}=e,{input:a}=t,{dim:s}=n,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(k.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),xr({inputs:{x:a},backend:r,attrs:{shape:o}})}var VX={kernelName:Ji,backendName:"wasm",kernelFunc:IA};function UX(e){let{attrs:{shape:t,value:n,dtype:r},backend:a}=e,s=a.makeOutput(t,r);return a.typedArrayFromHeap(s).fill(n),s}var HX={kernelName:ru,backendName:"wasm",kernelFunc:UX},rb;function jX(e){rb=e.wasm.cwrap(Qi,null,["number","number","number","number","number","number"])}function GX(e){let{inputs:t,backend:n}=e,{image:r}=t,a=n.makeOutput(r.shape,r.dtype),s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,[o,l,c,u]=r.shape;return rb(s,o,l,c,u,i),a}var qX={kernelName:Qi,backendName:"wasm",kernelFunc:GX,setupFunc:jX},XX=Fn(us),KX=!1,ZX=hn(cs,KX),ab;function JX(e){ab=e.wasm.cwrap(hs,null,["number","number","number","number","number","number","number"])}function YX(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:a}=r,{x:s,mean:i,variance:o,offset:l,scale:c}=n,u=t.dataIdMap.get(s.dataId).id,h=t.dataIdMap.get(i.dataId).id,d=t.dataIdMap.get(o.dataId).id,p=l!=null?t.dataIdMap.get(l.dataId).id:0,f=c!=null?t.dataIdMap.get(c.dataId).id:0,m=t.makeOutput(s.shape,s.dtype);if(k.sizeFromShape(s.shape)===0)return m;let A=t.dataIdMap.get(m.dataId).id;return ab(u,h,d,p,f,a,A),m}var QX={kernelName:hs,backendName:"wasm",setupFunc:JX,kernelFunc:YX},sb;function eK(e){sb=e.wasm.cwrap(Vs,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 tK(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dilations:u,dataFormat:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=n,m=F.computeConv2DInfo(a.shape,s.shape,l,u,c,d),A=oc[p];if(A==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,g=r.dataIdMap.get(s.dataId).id,w=m.outChannels,x=0;if(i!=null){let ae=r.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==w)throw new Error(`FusedConv2D bias shape (${ae.shape}) does not match the number of output channels (${w})`);x=ae.id}let _=m.filterHeight,b=m.filterWidth,T=m.padInfo.top,S=m.padInfo.right,N=m.padInfo.bottom,C=m.padInfo.left,$=m.dilationHeight,D=m.dilationWidth,O=m.strideHeight,B=m.strideWidth,H=m.inChannels,X=m.padInfo.type==="SAME"?1:0,Z=m.batchSize,ee=m.inHeight,Y=m.inWidth;if(h!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${h}'. Please use 'NHWC'.`);let ie=r.makeOutput(m.outShape,"float32"),re=r.dataIdMap.get(ie.dataId).id,ne=o==null?0:r.dataIdMap.get(o.dataId).id;return sb(y,Z,ee,Y,g,_,b,x,T,S,N,C,X,$,D,O,B,H,w,A,ne,f||0,re),ie}var nK={kernelName:Vs,backendName:"wasm",setupFunc:eK,kernelFunc:tK},ib;function rK(e){ib=e.wasm.cwrap(Us,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 aK(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dilations:u,dataFormat:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=n,m=F.computeConv2DInfo(a.shape,s.shape,l,u,c,d,!0),A=oc[p];if(A==null)throw new Error(`${p} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,g=r.dataIdMap.get(s.dataId).id,w=m.outChannels,x=0;if(i!=null){let ae=r.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==w)throw new Error(`FusedDepthwiseConv2D bias shape (${ae.shape}) does not match the number of output channels (${w})`);x=ae.id}let _=m.filterHeight,b=m.filterWidth,T=m.padInfo.top,S=m.padInfo.right,N=m.padInfo.bottom,C=m.padInfo.left,$=m.dilationHeight,D=m.dilationWidth,O=m.strideHeight,B=m.strideWidth,H=m.inChannels,X=m.padInfo.type==="SAME"?1:0,Z=m.batchSize,ee=m.inHeight,Y=m.inWidth;if(h!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${h}'. Please use 'NHWC'.`);let ie=r.makeOutput(m.outShape,"float32"),re=r.dataIdMap.get(ie.dataId).id,ne=o==null?0:r.dataIdMap.get(o.dataId).id;return ib(y,Z,ee,Y,g,_,b,x,T,S,N,C,X,$,D,O,B,H,w,A,ne,f||0,re),ie}var sK={kernelName:Us,backendName:"wasm",setupFunc:rK,kernelFunc:aK},ob;function iK(e){ob=e.wasm.cwrap(to,null,["number","number","number","number","number","number","array","number"])}function oK(e){let{backend:t,inputs:n}=e,{params:r,indices:a}=n,[s,i,o,l]=gf.prepareAndValidate(r,a),c=t.makeOutput(s,r.dtype);if(i===0)return c;let u=a.shape,h=u[u.length-1],d=t.dataIdMap.get(r.dataId).id,p=t.dataIdMap.get(a.dataId).id,f=new Uint8Array(new Int32Array(l).buffer),m=t.dataIdMap.get(c.dataId).id;return ob(d,Rn[r.dtype],p,i,h,o,f,m),c}var lK={kernelName:to,backendName:"wasm",setupFunc:iK,kernelFunc:oK},lb;function uK(e){lb=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function cK(e){let{backend:t,inputs:n,attrs:r}=e,{x:a,indices:s}=n,{axis:i,batchDims:o}=r,l=k.parseAxisParam(i,a.shape)[0],c=F.segment_util.collectGatherOpShapeInfo(a,s,l,o),u=xr({inputs:{x:a},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=k.sizeFromShape(s.shape),d=xr({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),p=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],f=t.makeOutput(p,a.dtype);if(k.sizeFromShape(a.shape)===0)return f;let m=u.shape.length-1,A=t.dataIdMap.get(u.dataId).id,y=t.dataIdMap.get(d.dataId).id,g=t.dataIdMap.get(f.dataId).id,w=new Uint8Array(new Int32Array(k.computeStrides(u.shape)).buffer),x=new Uint8Array(new Int32Array(k.computeStrides(p)).buffer);return lb(A,Rn[a.dtype],w,m,y,c.batchSize,x,g),f.shape=c.outputShape,f}var hK={kernelName:eo,backendName:"wasm",setupFunc:uK,kernelFunc:cK},dK=!1,pK=hn(no,dK,"bool"),fK=!1,mK=hn(ds,fK,"bool"),ub;function AK(e){ub=e.wasm.cwrap(ps,null,["number","number","number"])}function yK(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,a=r.dataIdMap.get(t.dataId).id,s=r.makeOutput(t.shape,t.dtype);if(k.sizeFromShape(t.shape)!==0){let i=r.dataIdMap.get(s.dataId).id;ub(a,n,i)}return s}var gK={kernelName:ps,backendName:"wasm",setupFunc:AK,kernelFunc:yK},xK=!1,wK=hn(oo,xK,"bool"),_K=!1,bK=hn(lo,_K,"bool"),vK=Fn(fs),kK=!1,IK=hn(co,kK,"bool"),cb;function NK(e){cb=e.wasm.cwrap(ms,null,["number, number, number"])}function SK(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:c,axes:u,originalAxes:h,inputWasTransposed:d}=wl(i,a,t);if(d){let g=t.dataIdMap.get(c.dataId).id;l=c,o=g}let p=l.shape.length;F.assertAxesAreInnerMostDims("max",u,p);let[f,m]=F.computeOutAndReduceShapes(l.shape,u),A=k.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(k.sizeFromShape(l.shape)!==0){let g=t.dataIdMap.get(y.dataId).id;cb(o,A,g)}if(d&&t.disposeData(c.dataId),s){let g=F.expandShapeToKeepDim(y.shape,h);y.shape=g}return y}var TK={kernelName:ms,backendName:"wasm",setupFunc:NK,kernelFunc:SK},EK=!1,CK=hn(As,EK),hb;function RK(e){hb=e.wasm.cwrap(ys,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function FK(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:c}=n,u=F.computePool2DInfo(a.shape,i,o,1,l,c),h=u.filterHeight,d=u.filterWidth,p=u.padInfo.top,f=u.padInfo.right,m=u.padInfo.bottom,A=u.padInfo.left,y=u.dilationHeight,g=u.dilationWidth,w=u.strideHeight,x=u.strideWidth,_=u.inChannels,b=u.outChannels;if(u.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${u.dataFormat}'. Please use 'channelsLast'.`);let T=r.makeOutput(u.outShape,"float32"),S=r.dataIdMap.get(T.dataId).id;return hb(s,a.shape[0],a.shape[1],a.shape[2],h,d,p,f,m,A,y,g,w,x,_,b,S),T}var MK={kernelName:ys,backendName:"wasm",setupFunc:RK,kernelFunc:FK},db;function $K(e){db=e.wasm.cwrap(gs,null,["number, number, number"])}function DK(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=wl(i,a,t),f=h;if(p){let x=t.dataIdMap.get(u.dataId).id;x!==o&&(c=u,l=x,f=F.getInnerMostAxes(f.length,c.shape.length))}F.assertAxesAreInnerMostDims("mean",f,c.shape.length);let[m,A]=F.computeOutAndReduceShapes(c.shape,f),y=k.sizeFromShape(A),g=c;c.dtype!=="float32"&&(g=hp({backend:t,inputs:{x:c},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(g.dataId).id);let w=t.makeOutput(m,"float32");if(k.sizeFromShape(c.shape)!==0){let x=t.dataIdMap.get(w.dataId).id;db(l,y,x)}if(p&&t.disposeData(u.dataId),s){let x=F.expandShapeToKeepDim(w.shape,d);w.shape=x}return c.dtype!=="float32"&&t.disposeData(g.dataId),w}var OK={kernelName:gs,backendName:"wasm",setupFunc:$K,kernelFunc:DK},pb;function zK(e){pb=e.wasm.cwrap(xs,null,["number, number, number"])}function PK(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=wl(i,a,t);if(p){let w=t.dataIdMap.get(u.dataId).id;w!==o&&(c=u,l=w)}let f=c.shape.length;F.assertAxesAreInnerMostDims("min",h,f);let[m,A]=F.computeOutAndReduceShapes(c.shape,h),y=k.sizeFromShape(A),g=t.makeOutput(m,c.dtype);if(k.sizeFromShape(c.shape)!==0){let w=t.dataIdMap.get(g.dataId).id;pb(l,y,w)}if(p&&t.disposeData(u.dataId),s){let w=F.expandShapeToKeepDim(g.shape,d);g.shape=w}return g}var LK={kernelName:xs,backendName:"wasm",setupFunc:zK,kernelFunc:PK},WK=!1,BK=hn(ws,WK),VK=!0,UK=hn(_s,VK),HK=Fn(po);function NA(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],a=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:a,pSelectedScores:s,pValidOutputs:i}}var fb;function jK(e){fb=e.wasm.cwrap(mo,"number",["number","number","number","number","number"])}function GK(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i}=r,{boxes:o,scores:l}=n,c=t.dataIdMap.get(o.dataId).id,u=t.dataIdMap.get(l.dataId).id,h=fb(c,u,s,a,i),{pSelectedIndices:d,selectedSize:p,pSelectedScores:f,pValidOutputs:m}=NA(t,h);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([p],"int32",d)}var qK={kernelName:mo,backendName:"wasm",setupFunc:jK,kernelFunc:GK},mb;function XK(e){mb=e.wasm.cwrap(Ao,"number",["number","number","number","number","number","bool"])}function KK(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=r,{boxes:l,scores:c}=n,u=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(c.dataId).id,d=mb(u,h,s,a,i,o),{pSelectedIndices:p,selectedSize:f,pSelectedScores:m,pValidOutputs:A}=NA(t,d);t.wasm._free(m);let y=t.makeOutput([f],"int32",p),g=t.makeOutput([],"int32",A);return[y,g]}var ZK={kernelName:Ao,backendName:"wasm",setupFunc:XK,kernelFunc:KK},Ab;function JK(e){Ab=e.wasm.cwrap(yo,"number",["number","number","number","number","number","number"])}function YK(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=r,{boxes:l,scores:c}=n,u=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(c.dataId).id,d=Ab(u,h,s,a,i,o),{pSelectedIndices:p,selectedSize:f,pSelectedScores:m,pValidOutputs:A}=NA(t,d);t.wasm._free(A);let y=t.makeOutput([f],"int32",p),g=t.makeOutput([f],"float32",m);return[y,g]}var QK={kernelName:yo,backendName:"wasm",setupFunc:JK,kernelFunc:YK},eZ=!1,tZ=hn(fo,eZ,"bool"),yb;function nZ(e){yb=e.wasm.cwrap(bs,null,["number","number","number","number","number"])}function rZ(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=n.makeOutput([...a.shape,s],"int32"),c=n.dataIdMap.get(l.dataId).id,u=n.dataIdMap.get(a.dataId).id;return yb(u,s,i,o,c),l}var aZ={kernelName:bs,backendName:"wasm",setupFunc:nZ,kernelFunc:rZ};function sZ(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var iZ={kernelName:go,backendName:"wasm",kernelFunc:sZ};function oZ(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return IA({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(l=>{k.assertShapesMatch(s,l.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=t.map(l=>IA({inputs:{input:l},backend:n,attrs:{dim:a}}));return Z_({inputs:o,backend:n,attrs:{axis:a}})}var lZ={kernelName:xo,backendName:"wasm",kernelFunc:oZ},gb;function uZ(e){gb=e.wasm.cwrap(vs,null,["number","array","number","number","array","array","number","number"])}function cZ(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:a}}=e,s=r.map((f,m)=>f[0]+t.shape[m]+f[1]),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,c=new Uint8Array(new Int32Array(t.shape).buffer),u=r.map(f=>f[0]),h=r.map(f=>f[1]),d=new Uint8Array(new Int32Array(u).buffer),p=new Uint8Array(new Int32Array(h).buffer);return gb(i,c,t.shape.length,Rn[t.dtype],d,p,a,l),o}var hZ={kernelName:vs,backendName:"wasm",kernelFunc:cZ,setupFunc:uZ},dZ=!1,pZ=hn(ks,dZ),xb;function fZ(e){xb=e.wasm.cwrap(Is,null,["number","number","number"])}function mZ(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,o=n.makeOutput(r.shape,"float32"),l=n.dataIdMap.get(o.dataId).id;return xb(s,i,l),o}var AZ={kernelName:Is,backendName:"wasm",setupFunc:fZ,kernelFunc:mZ},wb;function yZ(e){wb=e.wasm.cwrap(wo,null,["number","number","number","number"])}function gZ(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=wl(i,a,t),f=h;if(p){let w=t.dataIdMap.get(u.dataId).id;w!==o&&(c=u,l=w,f=F.getInnerMostAxes(f.length,c.shape.length))}F.assertAxesAreInnerMostDims("prod",f,c.shape.length);let[m,A]=F.computeOutAndReduceShapes(c.shape,f),y=k.sizeFromShape(A),g=t.makeOutput(m,c.dtype);if(k.sizeFromShape(c.shape)!==0){let w=t.dataIdMap.get(g.dataId).id;wb(l,y,Rn[g.dtype],w)}if(p&&t.disposeData(u.dataId),s){let w=F.expandShapeToKeepDim(g.shape,d);g.shape=w}return g}var xZ={kernelName:wo,backendName:"wasm",setupFunc:yZ,kernelFunc:gZ},wZ=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=Xm(r,a,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},_Z={kernelName:uu,backendName:"wasm",kernelFunc:wZ},bZ=!0,vZ=hn(os,bZ),kZ=Fn(Ns),IZ=Fn(Ts),_b;function NZ(e){_b=e.wasm.cwrap(Ss,null,["number","number","number","number","number","number","number","number","number","number"])}function SZ(e){let{backend:t,inputs:n,attrs:r}=e,{images:a}=n,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,c]=o,[u,h,d,p]=a.shape,f=[u,l,c,p],m=t.dataIdMap.get(a.dataId),A;m.dtype!=="float32"&&(A=hp({backend:t,inputs:{x:a},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(A.dataId));let y=m.id,g=t.makeOutput(f,"float32");if(k.sizeFromShape(a.shape)===0)return g;let w=t.dataIdMap.get(g.dataId).id;return _b(y,u,h,d,p,l,c,s?1:0,i?1:0,w),A!=null&&t.disposeData(A.dataId),g}var TZ={kernelName:Ss,backendName:"wasm",setupFunc:NZ,kernelFunc:SZ},bb;function EZ(e){bb=e.wasm.cwrap(Es,null,["number","array","number","array","number","number"])}function CZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=k.parseAxisParam(s,a.shape);if(a.shape.length===0)return up({inputs:{x:a},backend:n});let o=n.makeOutput(a.shape,a.dtype),l=n.dataIdMap.get(a.dataId).id,c=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(i).buffer),h=new Uint8Array(new Int32Array(a.shape).buffer);return bb(l,u,i.length,h,a.shape.length,c),xr({inputs:{x:o},attrs:{shape:a.shape},backend:n})}var RZ={kernelName:Es,backendName:"wasm",kernelFunc:CZ,setupFunc:EZ},vb;function FZ(e){vb=e.wasm.cwrap(zo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function MZ(e){let{inputs:t,backend:n,attrs:r}=e,{image:a}=t,{radians:s,fillValue:i,center:o}=r,l=n.makeOutput(a.shape,a.dtype),c=n.dataIdMap.get(a.dataId).id,u=n.dataIdMap.get(l.dataId).id,[h,d,p,f]=a.shape,[m,A]=F.getImageCenter(o,d,p),y=i===0,g=255,w=typeof i=="number"?[i,i,i,y?0:g]:[...i,g],x=new Uint8Array(new Int32Array(w).buffer);return vb(c,h,d,p,f,s,m,A,x,w.length,u),l}var $Z={kernelName:zo,backendName:"wasm",kernelFunc:MZ,setupFunc:FZ},DZ=Fn(Cs),OZ=Fn(Rs),kb;function zZ(e){kb=e.wasm.cwrap(vo,null,["number","number","number","number","number","number","array","number","number"])}function PZ(e){let{backend:t,inputs:n,attrs:r}=e,{indices:a,updates:s}=n,{shape:i}=r,o=t.makeOutput(i,s.dtype);if(k.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:c,sliceSize:u,strides:h,outputSize:d}=xf.calculateShapes(s,a,i),p=t.dataIdMap.get(a.dataId).id,f=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(h).buffer),A=t.dataIdMap.get(o.dataId).id;return kb(p,f,Rn[s.dtype],l,c,u,m,d,A),o}var LZ={kernelName:vo,backendName:"wasm",setupFunc:zZ,kernelFunc:PZ},Ib;function WZ(e){Ib=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function BZ(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(a.dataId).id,l=n.dataIdMap.get(s.dataId).id,c=n.makeOutput(a.shape,a.dtype),u=n.dataIdMap.get(c.dataId).id,h=r.shape.length,d=a.shape.length,p=h===0||h>1||d===1?1:k.sizeFromShape(a.shape.slice(1));return Ib(i,o,l,p,u),c}var VZ={kernelName:ko,backendName:"wasm",kernelFunc:BZ,setupFunc:WZ},Nb;function UZ(e){Nb=e.wasm.cwrap(Ms,null,["number","number"])}function HZ(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(a.dataId).id;return k.sizeFromShape(a.shape)===0||Nb(r,s),a}var jZ={kernelName:"Sigmoid",backendName:"wasm",setupFunc:UZ,kernelFunc:HZ},GZ=Fn(Fs);function dp(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:a}=e,[s,i]=on.parseSliceParams(t,n,r),o=on.isSliceContinous(t.shape,s,i),l=a.readSync(t.dataId),c=a.makeOutput(i,t.dtype),u=k.computeStrides(t.shape),h=a.dataIdMap.get(c.dataId);if(o){let f=on.computeFlatOffset(s,u);return t.dtype==="string"?h.stringBytes=l.slice(f,f+k.sizeFromShape(i)):a.typedArrayFromHeap(c).set(l.subarray(f,f+k.sizeFromShape(i))),c}if(t.dtype==="string"){let f=Ud(l,s,i,t.shape,t.dtype);return h.stringBytes=f,c}let d=a.typedArrayFromHeap(c),p=t.shape.length;if(p===2)qZ(l,u[0],d,s,i);else if(p===3)XZ(l,u[0],u[1],d,s,i);else if(p===4)KZ(l,u[0],u[1],u[2],d,s,i);else{let f=Ud(l,s,i,t.shape,t.dtype);d.set(f)}return c}function qZ(e,t,n,r,a){let s=0,i=r[0],o=r[1],l=i+a[0];for(let c=i;c<l;c++){let u=c*t+o;n.set(e.subarray(u,u+a[1]),s),s+=a[1]}}function XZ(e,t,n,r,a,s){let i=0,o=a[0],l=a[1],c=a[2],u=o+s[0],h=l+s[1];for(let d=o;d<u;d++)for(let p=l;p<h;p++){let f=d*t+p*n+c;r.set(e.subarray(f,f+s[2]),i),i+=s[2]}}function KZ(e,t,n,r,a,s,i){let o=0,l=s[0],c=s[1],u=s[2],h=l+i[0],d=c+i[1],p=u+i[2],f=s[3];for(let m=l;m<h;m++)for(let A=c;A<d;A++)for(let y=u;y<p;y++){let g=m*t+A*n+y*r+f;a.set(e.subarray(g,g+i[3]),o),o+=i[3]}}var ZZ={kernelName:No,backendName:"wasm",kernelFunc:dp},Sb;function JZ(e){Sb=e.wasm.cwrap(Os,null,["number","number","number","number"])}function YZ(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,a=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[r],l=k.sizeFromShape(n.shape)/o;return k.sizeFromShape(s.shape)===0||Sb(a,i,o,l),s}var QZ={kernelName:Os,backendName:"wasm",setupFunc:JZ,kernelFunc:YZ};function eJ(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=n,o=k.parseAxisParam(i,a.shape)[0],l=F.prepareSplitSize(a,s,o),c=new Array(a.shape.length).fill(0),u=a.shape.slice();return l.map(h=>{let d=[...u];d[o]=h;let p=dp({inputs:{x:a},attrs:{begin:c,size:d},backend:r});return c[o]+=h,p})}var tJ={kernelName:Co,backendName:"wasm",kernelFunc:eJ},nJ=Fn($s),rJ=Fn(du),aJ=!0,sJ=hn(zs,aJ),Tb;function iJ(e){Tb=e.wasm.cwrap(Ro,null,["number","array","number","array","array","array","array","array","number","number"])}function oJ(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{begin:s,end:i,strides:o}=r;o==null&&(o=new Array(s.length));let{beginMask:l,endMask:c,ellipsisMask:u,newAxisMask:h,shrinkAxisMask:d}=r,p=F.slice_util.maskToAxes(u);if(p.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(u!==0&&h!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(u!==0&&d!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=a.shape.length-s.length,m=F.slice_util.maskToAxes(h),A=a.shape.slice();m.forEach(N=>{s[N]=0,i[N]=1,A.splice(N,0,1)});let y=xr({inputs:{x:a},attrs:{shape:A},backend:t}),{begin:g,end:w,strides:x}=F.slice_util.getNormalizedAxes(y.shape,p,f,s,i,o,l,c,u);s=g,i=w,o=x;let _=F.slice_util.maskToAxes(d);_.forEach(N=>{i[N]=s[N]+1,o[N]=1});let b=F.slice_util.computeOutShape(s,i,o),T=b.filter((N,C)=>_.indexOf(C)===-1);if(o.every(N=>N===1)){let N=dp({inputs:{x:a},attrs:{begin:s,size:b},backend:t});return xr({inputs:{x:N},attrs:{shape:T},backend:t})}let S=t.makeOutput(T,"float32");if(!T.some(N=>N===0)){let N=t.dataIdMap.get(y.dataId).id,C=new Uint8Array(new Int32Array(k.computeStrides(y.shape)).buffer),$=new Uint8Array(new Int32Array(s).buffer),D=new Uint8Array(new Int32Array(i).buffer),O=new Uint8Array(new Int32Array(o).buffer),B=new Uint8Array(new Int32Array(T).buffer),H=new Uint8Array(new Int32Array(k.computeStrides(T)).buffer),X=t.dataIdMap.get(S.dataId).id;Tb(N,C,y.shape.length,$,D,O,B,H,T.length,X)}return xr({inputs:{x:S},attrs:{shape:T},backend:t})}var lJ={kernelName:Ro,backendName:"wasm",setupFunc:iJ,kernelFunc:oJ},uJ=!0,cJ=hn(Ps,uJ),Eb;function hJ(e){Eb=e.wasm.cwrap(Ds,null,["number, number, number"])}function dJ(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=wl(i,a,t),f=h;if(p){let w=t.dataIdMap.get(u.dataId).id;w!==o&&(c=u,l=w,f=F.getInnerMostAxes(f.length,c.shape.length))}F.assertAxesAreInnerMostDims("sum",f,c.shape.length);let[m,A]=F.computeOutAndReduceShapes(c.shape,f),y=k.sizeFromShape(A),g=t.makeOutput(m,c.dtype);if(k.sizeFromShape(c.shape)!==0){let w=t.dataIdMap.get(g.dataId).id;Eb(l,y,w)}if(p&&t.disposeData(u.dataId),s){let w=F.expandShapeToKeepDim(g.shape,d);g.shape=w}return g}var pJ={kernelName:Ds,backendName:"wasm",setupFunc:hJ,kernelFunc:dJ},fJ=Fn(Ls),Cb;function mJ(e){Cb=e.wasm.cwrap(ga,null,["number","array","number","array","number","number"])}function AJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,s=n.dataIdMap.get(a.dataId).id,{reps:i}=r,o=new Array(a.shape.length);for(let d=0;d<o.length;d++)o[d]=a.shape[d]*i[d];let l=new Uint8Array(new Int32Array(a.shape).buffer),c=new Uint8Array(new Int32Array(o).buffer),u=n.makeOutput(o,a.dtype),h=n.dataIdMap.get(u.dataId).id;return Cb(s,l,a.shape.length,c,o.length,Rn[u.dtype],h),u}var yJ={kernelName:ga,backendName:"wasm",setupFunc:mJ,kernelFunc:AJ},Rb;function gJ(e){Rb=e.wasm.cwrap(Mo,null,["number","array","number","number","number","bool","number","number"])}var xJ=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{k:a,sorted:s}=n,i=t.dataIdMap.get(r.dataId).id,o=new Uint8Array(new Int32Array(r.shape).buffer),l=r.shape.slice();l[l.length-1]=a;let c=t.makeOutput(l,r.dtype),u=t.dataIdMap.get(c.dataId).id,h=t.makeOutput(l,"int32"),d=t.dataIdMap.get(h.dataId).id;return Rb(i,o,r.shape.length,Rn[r.dtype],a,s,u,d),[c,h]},wJ={kernelName:Mo,backendName:"wasm",setupFunc:gJ,kernelFunc:xJ};function _J(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape[s],o=a.shape.length,l=new Array(o-1),c=0;for(let p=0;p<o;p++)p!==s&&(l[c++]=a.shape[p]);let u=new Array(i),h=new Array(o).fill(0),d=a.shape.slice();d[s]=1;for(let p=0;p<u.length;p++)h[s]=p,u[p]=dp({inputs:{x:a},attrs:{begin:h,size:d},backend:n});return u.map(({dataId:p,dtype:f})=>({dataId:p,dtype:f,shape:l}))}var bJ={kernelName:$o,backendName:"wasm",kernelFunc:_J};function vJ(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var kJ={kernelName:Do,backendName:"wasm",kernelFunc:vJ},IJ=[Xq,Zq,Qq,oX,cX,fX,mX,gX,xX,bX,IX,NX,EX,FX,DX,PX,WX,BX,VX,HX,qX,XX,ZX,qq,QX,nK,sK,lK,hK,pK,mK,eX,gK,wK,bK,vK,IK,TK,CK,MK,OK,LK,BK,UK,HK,qK,ZK,QK,tZ,aZ,iZ,lZ,hZ,pZ,AZ,xZ,_Z,vZ,kZ,IZ,hX,TZ,RZ,$Z,OZ,DZ,LZ,VZ,jZ,GZ,ZZ,QZ,tJ,nJ,rJ,sJ,lJ,cJ,pJ,fJ,yJ,wJ,aX,bJ,kJ];for(let e of IJ)Po(e);var SA=Q();SA.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])));SA.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(SA.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 Fb=Ko(S8()),NJ='var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;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:selfThreadId})}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};this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["DYNAMIC_BASE"]=e.data.DYNAMIC_BASE;Module["DYNAMICTOP_PTR"]=e.data.DYNAMICTOP_PTR;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)}Module=WasmBackendModuleThreadedSimd(Module);postMessage({"cmd":"loaded"})}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;threadInfoStruct=e.data.threadInfoStruct;Module["__register_pthread_ptr"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;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["dynCall_ii"](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"){Atomics.store(Module["HEAPU32"],threadInfoStruct+4>>2,ex instanceof Module["ExitStatus"]?ex.status:-2);Atomics.store(Module["HEAPU32"],threadInfoStruct+0>>2,1);Module["_emscripten_futex_wake"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module["ExitStatus"]))throw ex}}}else if(e.data.cmd==="cancel"){if(threadInfoStruct){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(threadInfoStruct){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.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");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()}}}}',SJ=Ko(T8()),o0=class extends Zl{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new ph(this,Bn())}write(e,t,n){let r={};return this.move(r,e,t,n),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=k.now();return e(),{kernelMs:k.now()-t}}move(e,t,n,r){let a=this.dataIdNextNumber++;if(r==="string"){let l=t;this.dataIdMap.set(e,{id:a,stringBytes:l,shape:n,dtype:r,memoryOffset:null});return}let s=k.sizeFromShape(n),i=s*k.bytesPerElement(r),o=this.wasm._malloc(i);this.dataIdMap.set(e,{id:a,memoryOffset:o,shape:n,dtype:r}),this.wasm.tfjs.registerTensor(a,s,o),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,i),o)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:r,stringBytes:a}=this.dataIdMap.get(e);if(n==="string")return a;let s=this.wasm.HEAPU8.slice(t,t+k.sizeFromShape(r)*k.bytesPerElement(n));return TJ(s.buffer,n)}disposeData(e){let t=this.dataIdMap.get(e);this.wasm._free(t.memoryOffset),this.wasm.tfjs.disposeData(t.id),this.dataIdMap.delete(e)}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let r;if(n==null)r=this.write(null,e,t);else{r={};let a=this.dataIdNextNumber++;this.dataIdMap.set(r,{id:a,memoryOffset:n,shape:e,dtype:t});let s=k.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,s,n)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:a}=this.dataIdMap.get(n),s=k.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,a,s);case"int32":return new Int32Array(r,a,s);case"bool":return new Uint8Array(r,a,s);default:throw new Error(`Unknown dtype ${t}`)}}};function EJ(e){return(t,n)=>(k.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(a=>{WebAssembly.instantiate(a,t).then(s=>{n(s.instance)})})}),{})}function Mb(e,t,n){if(pp!=null)return pp;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),lc!=null&&lc[r]!=null?lc[r]:n+r}async function CJ(){let[e,t]=await Promise.all([Q().getAsync("WASM_HAS_SIMD_SUPPORT"),Q().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let a={};a.locateFile=(l,c)=>{if(l.endsWith(".worker.js")){let u=NJ,h=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(h)}return l.endsWith(".wasm")?Mb(e,t,uc!=null?uc:c):c+l},TA&&(a.instantiateWasm=EJ(Mb(e,t,uc!=null?uc:"")));let s;t&&e&&pp==null?(s=Fb.default(a),s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Fb.default.toString()],{type:"text/javascript"})):s=SJ.default(a);let i=null;s.tfjs={init:s.cwrap("init",null,[]),registerTensor:s.cwrap("register_tensor",null,["number","number","number"]),disposeData:s.cwrap("dispose_data",i,["number"]),dispose:s.cwrap("dispose",i,[])};let o=!1;s.onRuntimeInitialized=()=>{o=!0,cc=!1,n({wasm:s})},s.onAbort=()=>{o||cc||(cc=!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"}))}})}function TJ(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 RJ=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],pp=null,uc=null,lc={},cc=!1,TA=!1;function G4(e,t=!1){if(Mt("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),cc)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");pp=e,TA=t}function l0(e,t=!1){if(cc)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")uc=e;else{lc=e;let n=RJ.filter(r=>lc[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.`)}TA=t}var u0="2.8.3",FJ=2;Au("wasm",async()=>{let{wasm:e}=await CJ();return new o0(e)},FJ);var c0={};Pe(c0,{maxNorm:()=>MJ,minMaxNorm:()=>OJ,nonNeg:()=>DJ,unitNorm:()=>$J});var EA;function Bt(){return EA==null&&(EA=wf().epsilon()),EA}function wr(){return"channelsLast"}var la=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,la.prototype)}},_r=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,_r.prototype)}},V=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,V.prototype)}},ze=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,ze.prototype)}},$b=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,$b.prototype)}},zJ=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,zJ.prototype)}};function di(e,t){if(Array.isArray(e)){let n=[];for(let r=0;r<t;r++)n=n.concat(e);return n}else{let n=new Array(t);return n.fill(e),n}}function Wr(e,t){if(!e)throw new $b(t)}function Db(e,t){let n=0;for(let r of e)r===t&&n++;return n}function gn(e){return e.length===1?e[0]:e}function yt(e){return Array.isArray(e)?e:[e]}function ua(e){let t=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return t[0]!=="_"?t:"private"+t}function pi(e){return e.length<=1||e.indexOf("_")===-1?e:e.replace(/[_]+(\w|$)/g,(t,n)=>n.toUpperCase())}var sr={};function CA(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function RA(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>RA(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:RA(r))}}}function hc(e,t={},n={},r="object",a=!1){if(typeof e=="string"){let s=e,i;if(s in n)i=n[s];else if(s in sr)i=sr[s];else if(i=t[s],i==null)throw new V(`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 i}else{let s=e;if(s.className==null||s.config==null)throw new V(`${r}: Improper config format: ${JSON.stringify(s)}.
|
|
'className' and 'config' must set.`);let i=s.className,o,l;if(i in n?[o,l]=n[i]:i in sr?[o,l]=sr.className:i in t&&([o,l]=t[i]),o==null)throw new V(`Unknown ${r}: ${i}. 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 c={};for(let p of Object.keys(sr))c[p]=sr[p];for(let p of Object.keys(n))c[p]=n[p];let u=s.config;u.customObjects=c;let h=Object.assign({},sr);for(let p of Object.keys(n))sr[p]=n[p];RA(s.config);let d=l(o,s.config,n,a);return sr=Object.assign({},h),d}else{let c=Object.assign({},sr);for(let h of Object.keys(n))sr[h]=n[h];let u=new o(s.config);return sr=Object.assign({},c),u}}}function PJ(e,t){return e<t?-1:e>t?1:0}function fp(e,t){return-1*PJ(e,t)}function $a(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function LJ(e){if(e==null)throw new V(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function fi(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new V(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function FA(e,t,n=0,r=Infinity){return Wr(n>=0),Wr(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every(a=>typeof a===t)}function Kt(e,t){Array.isArray(e)?(k.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>Kt(n,`element ${r+1} of ${t}`))):k.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${Ob(e)}.`)}function Ob(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>Ob(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function WJ(e,t){let n=k.now(),r;return(...a)=>{let s=k.now();return s-n<t||(n=s,r=e(...a)),r}}function zb(e){return e==="relu"?"relu":e==="linear"?"linear":e==="elu"?"elu":null}function MA(e,t){return U(()=>Yt(Ce(W(e,e),t,!0)))}var dc=class extends se.Serializable{getConfig(){return{}}},$A=class extends dc{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 U(()=>{let t=MA(e,this.axis),n=mn(t,0,this.maxValue);return W(e,Te(n,oe(Bt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};$A.className="MaxNorm";se.registerClass($A);var DA=class extends dc{constructor(e){super();this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return U(()=>Te(e,oe(Bt(),MA(e,this.axis))))}getConfig(){return{axis:this.axis}}};DA.className="UnitNorm";se.registerClass(DA);var OA=class extends dc{apply(e){return Fr(e)}};OA.className="NonNeg";se.registerClass(OA);var zA=class extends dc{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 U(()=>{let t=MA(e,this.axis),n=oe(W(this.rate,mn(t,this.minValue,this.maxValue)),W(1-this.rate,t));return W(e,Te(n,oe(Bt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};zA.className="MinMaxNorm";se.registerClass(zA);var Pb={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Vt(e){return CA(e)}function Lb(e,t={}){return hc(e,se.SerializationMap.getMap().classNameMap,t,"constraint")}function Ut(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in Pb?Pb[e]:e,config:{}};return Lb(t)}else return e instanceof dc?e:Lb(e)}function MJ(e){return new $A(e)}function $J(e){return new DA(e)}function DJ(){return new OA}function OJ(e){return new zA(e)}var h0={};Pe(h0,{constant:()=>UJ,glorotNormal:()=>ZJ,glorotUniform:()=>KJ,heNormal:()=>JJ,heUniform:()=>YJ,identity:()=>qJ,leCunNormal:()=>QJ,leCunUniform:()=>eY,ones:()=>VJ,orthogonal:()=>tY,randomNormal:()=>jJ,randomUniform:()=>HJ,truncatedNormal:()=>GJ,varianceScaling:()=>XJ,zeros:()=>BJ});var nY=["channelsFirst","channelsLast"],rY=["nearest","bilinear"],aY=["valid","same","causal"],sY=["max","avg"],iY=["sum","mul","concat","ave"],_l=new Map;function Ft(e){fi(nY,"DataFormat",e)}function oY(e){fi(rY,"InterpolationFormat",e)}function Kn(e){fi(aY,"PaddingMode",e)}function Wb(e){fi(sY,"PoolMode",e)}var pc=[],Bb="/";function mi(e,t){pc.push(e);try{let n=t();return pc.pop(),n}catch(n){throw pc.pop(),n}}function lY(){return pc.length===0?"":pc.join(Bb)+Bb}function Ub(e){if(!Vb(e))throw new Error("Not a valid tensor name: '"+e+"'");return lY()+e}function Hb(e){if(!Vb(e))throw new Error("Not a valid tensor name: '"+e+"'");_l.has(e)||_l.set(e,0);let t=_l.get(e);if(_l.set(e,_l.get(e)+1),t>0){let n=`${e}_${t}`;return _l.set(n,1),n}else return e}var uY=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function Vb(e){return!!e.match(uY)}function cY(e){return e===parseInt(e.toString(),10)}function Da(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let a=t;a<n;++a)r*=e[a];return r}function jb(e){return e=Array.isArray(e)?new Float32Array(e):e,nn(e)}function bl(e){return Ho(jb(e)).dataSync()[0]}function Oa(e){return jn(jb(e)).dataSync()[0]}function br(e,t){if(t<e)throw new V(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let r=e;r<t;++r)n.push(r);return n}function fc(e,t){return e.asType(t)}function mc(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),e.reshape(n)}function hY(e,t){return U(()=>{if(e.shape.length!==2)throw new V(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=mc(e,1);return PA(n,[1,t,1])})}function dY(e){let t=[Da(e.shape)];return e.reshape(t)}function pY(e){if(e.rank<=1)throw new V(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],Da(e.shape,1)];return e.reshape(t)}function Ai(e,t,n){return U(()=>{switch(e.rank){case 1:return fd(e,t,n);case 2:return Gf(e,[t,0],[n,e.shape[1]]);case 3:return md(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return Ru(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Me(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Me(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 V(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function LA(e,t,n){return U(()=>{switch(e.rank){case 1:return fd(e,t,n);case 2:return Gf(e,[0,t],[e.shape[0],n]);case 3:return md(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return Ru(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new V(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function mp(e,t,n,r){return U(()=>{switch(e.rank){case 1:return fd(e,t,n);case 2:switch(r){case 1:return Ai(e,t,n);case 2:return LA(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return Ai(e,t,n);case 2:return md(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return LA(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return Ai(e,t,n);case 2:return Ru(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return Ru(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return LA(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${r}`)}default:throw new V(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function WA(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),dt(e,t)}function Gb(e,t){switch(e.rank){case 1:return yg([e,t]);case 2:return jl([e,t],0);case 3:return gg([e,t],0);case 4:return xg([e,t],0);default:throw new V(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function PA(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new V(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return wa(e,t)}function Ap(e,t=0,n=1,r,a){return Fg(e,t,n,r,a)}function Br(e,t,n,r){if(e.rank<2||t.rank<2)throw new ze(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let a=e.shape.slice(-1)[0],s=t.shape.slice(-2)[0];if(a!==s)throw new ze(`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 a=!1,s=!1;return ka.matMul({a:e,b:t,transposeA:a,transposeB:s,bias:r?BA(e.rank,r,wr()):null,activation:n})}else{let a=e.shape.slice(),s=a.pop();e=e.reshape([-1,s]);let i=t.shape.slice(),o=i.pop(),l=i.pop(),c=[...i,o],u=Array.from({length:t.rank},(f,m)=>m===0?t.rank-2:m<=t.rank-2?m-1:m);t=t.transpose(u).reshape([l,-1]);let h=[...a,...c],d=!1,p=!1;return ka.matMul({a:e,b:t,transposeA:d,transposeB:p,bias:r?BA(e.rank,r,wr()):null,activation:n}).reshape(h)}}function qb(e,t,n){return U(()=>(Array.isArray(t)?t=nn(t,"int32"):t=t.toInt(),Gs(e,t,n)))}function Ac(e){return W(e,e)}function BA(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new V(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1,1,1]):t.reshape([1,r[3],r[0],r[1],r[2]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,1,1,r[0]]):t.reshape([1].concat(r))}else if(e===4){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1,1]):t.reshape([1,r[2],r[0],r[1]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,1,r[0]]):t.reshape([1].concat(r))}else if(e===3){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1]):t.reshape([1,r[1],r[0]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,r[0]]):t.reshape([1].concat(r))}else if(e<3)return t;throw new V(`Unsupported input rank by biasAdd: ${t.rank}`)}function Vr(e,t,n){return U(()=>(n==null&&(n=wr()),Ft(n),e.add(BA(e.rank,t,n))))}function fY(e,t=1){if(t!==1)throw new ze(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Bo(e)}function mY(e){return U(()=>Te(e,Pt(e).add(1)))}function Xb(e,t,n,r){return U(()=>Yg(e,t,n,r))}function AY(e){return U(()=>{let t=oe(.5,W(.2,e));return mn(t,0,1)})}function yc(e,t,n=!1){return n?e():t()}var yY=["fanIn","fanOut","fanAvg"],gY=["normal","uniform","truncatedNormal"];function xY(e){fi(yY,"FanMode",e)}function wY(e){fi(gY,"Distribution",e)}var ir=class extends se.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},VA=class extends ir{apply(e,t){return Rt(e,t)}};VA.className="Zeros";se.registerClass(VA);var yp=class extends ir{apply(e,t){return Cr(e,t)}};yp.className="Ones";se.registerClass(yp);var UA=class extends ir{constructor(e){super();if(typeof e!="object")throw new V(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new V(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return U(()=>W(Ee(this.value),Cr(e,t)))}getConfig(){return{value:this.value}}};UA.className="Constant";se.registerClass(UA);var HA=class extends ir{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 jo(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};HA.className="RandomUniform";se.registerClass(HA);var jA=class extends ir{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 ze(`randomNormal does not support dType ${t}.`);return Ap(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};jA.className="RandomNormal";se.registerClass(jA);var GA=class extends ir{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 ze(`truncatedNormal does not support dType ${t}.`);return yd(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};GA.className="TruncatedNormal";se.registerClass(GA);var qA=class extends ir{constructor(e){super();this.gain=e.gain!=null?e.gain:1}apply(e,t){return U(()=>{if(e.length!==2||e[0]!==e[1])throw new V("Identity matrix initializer can only be used for 2D square matrices.");return W(this.gain,zf(e[0]))})}getConfig(){return{gain:this.gain}}};qA.className="Identity";se.registerClass(qA);function _Y(e,t="channelsLast"){let n,r;if(Ft(t),e.length===2)n=e[0],r=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let a=Da(e,2);n=e[1]*a,r=e[0]*a}else if(t==="channelsLast"){let a=Da(e,0,e.length-2);n=e[e.length-2]*a,r=e[e.length-1]*a}}else{let a=Da(e);n=Math.sqrt(a),r=Math.sqrt(a)}return[n,r]}var xn=class extends ir{constructor(e){super();if(e.scale<0)throw new V(`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,xY(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,wY(this.distribution),this.seed=e.seed}apply(e,t){let n=_Y(e),r=n[0],a=n[1],s=this.scale;if(this.mode==="fanIn"?s/=Math.max(1,r):this.mode==="fanOut"?s/=Math.max(1,a):s/=Math.max(1,(r+a)/2),this.distribution==="normal"){let i=Math.sqrt(s);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new ze(`${this.getClassName()} does not support dType ${t}.`);return yd(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*s);return jo(e,-i,i,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};xn.className="VarianceScaling";se.registerClass(xn);var gp=class extends xn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return xn.className}};gp.className="GlorotUniform";se.registerClass(gp);var xp=class extends xn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return xn.className}};xp.className="GlorotNormal";se.registerClass(xp);var wp=class extends xn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return xn.className}};wp.className="HeNormal";se.registerClass(wp);var _p=class extends xn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return xn.className}};_p.className="HeUniform";se.registerClass(_p);var bp=class extends xn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return xn.className}};bp.className="LeCunNormal";se.registerClass(bp);var vp=class extends xn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return xn.className}};vp.className="LeCunNormal";se.registerClass(vp);var XA=class extends ir{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 ze("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return U(()=>{if(e.length<2)throw new ze("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=Ap(n,0,1,"float32"),a=e0.gramSchmidt(r);return e[0]>e[1]&&(a=a.transpose()),W(this.gain,a)})}getConfig(){return{gain:this.gain,seed:this.seed}}};XA.className="Orthogonal";se.registerClass(XA);var Kb={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 Zb(e,t={}){return hc(e,se.SerializationMap.getMap().classNameMap,t,"initializer")}function St(e){return CA(e)}function wt(e){if(typeof e=="string"){let t=e in Kb?Kb[e]:e;if(t==="GlorotNormal")return new xp;if(t==="GlorotUniform")return new gp;if(t==="HeNormal")return new wp;if(t==="HeUniform")return new _p;if(t==="LeCunNormal")return new bp;if(t==="LeCunUniform")return new vp;{let n={};return n.className=t,n.config={},Zb(n)}}else return e instanceof ir?e:Zb(e)}function BJ(){return new VA}function VJ(){return new yp}function UJ(e){return new UA(e)}function HJ(e){return new HA(e)}function jJ(e){return new jA(e)}function GJ(e){return new GA(e)}function qJ(e){return new qA(e)}function XJ(e){return new xn(e)}function KJ(e){return new gp(e)}function ZJ(e){return new xp(e)}function JJ(e){return new wp(e)}function YJ(e){return new _p(e)}function QJ(e){return new bp(e)}function eY(e){return new vp(e)}function tY(e){return new XA(e)}var d0={};Pe(d0,{Layer:()=>Ze,RNN:()=>$r,RNNCell:()=>gc,activation:()=>zY,add:()=>GY,alphaDropout:()=>EQ,average:()=>qY,averagePooling1d:()=>KA,averagePooling2d:()=>ZA,averagePooling3d:()=>JA,avgPool1d:()=>nQ,avgPool2d:()=>aQ,avgPool3d:()=>iQ,avgPooling1d:()=>rQ,avgPooling2d:()=>sQ,avgPooling3d:()=>oQ,batchNormalization:()=>QY,bidirectional:()=>_Q,concatenate:()=>XY,conv1d:()=>EY,conv2d:()=>CY,conv2dTranspose:()=>RY,conv3d:()=>FY,convLstm2d:()=>yQ,convLstm2dCell:()=>gQ,cropping2D:()=>$Y,dense:()=>PY,depthwiseConv2d:()=>OY,dot:()=>YY,dropout:()=>LY,elu:()=>vY,embedding:()=>jY,flatten:()=>BY,gaussianDropout:()=>TQ,gaussianNoise:()=>SQ,globalAveragePooling1d:()=>lQ,globalAveragePooling2d:()=>uQ,globalMaxPool1d:()=>vQ,globalMaxPool2d:()=>kQ,globalMaxPooling1d:()=>Jb,globalMaxPooling2d:()=>Yb,gru:()=>hQ,gruCell:()=>dQ,input:()=>y0,inputLayer:()=>bY,layerNormalization:()=>eQ,leakyReLU:()=>IY,lstm:()=>pQ,lstmCell:()=>fQ,masking:()=>CQ,maxPool1d:()=>IQ,maxPool2d:()=>NQ,maxPooling1d:()=>Qb,maxPooling2d:()=>e3,maxPooling3d:()=>cQ,maximum:()=>KY,minimum:()=>ZY,multiply:()=>JY,permute:()=>HY,prelu:()=>NY,reLU:()=>kY,repeatVector:()=>VY,reshape:()=>UY,rnn:()=>xQ,separableConv2d:()=>MY,simpleRNN:()=>mQ,simpleRNNCell:()=>AQ,softmax:()=>SY,spatialDropout1d:()=>WY,stackedRNNCells:()=>wQ,thresholdedReLU:()=>TY,timeDistributed:()=>bQ,upSampling2d:()=>DY,zeroPadding2d:()=>tQ});var RQ=0;function t3(){return RQ++}var kp={};function Ip(e=""){return e in kp||(kp[e]=0),kp[e]+=1,e+kp[e].toString()}function YA(e){return Array.isArray(e)&&Array.isArray(e[0])}function Np(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function Le(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new V(`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 V(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Sp(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((r,a)=>r*a);return t}var n3="Variable",p0=class{constructor(e,t="float32",n=n3,r=!0,a=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=t3(),n=n==null?n3:n,this.originalName=Ub(n),this.name=Hb(this.originalName),this.trainable_=r,this.constraint=a,this.val=$g(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),FQ(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 FQ(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function QA(e){return e.map(t=>t.read())}function ey(e){e.forEach(t=>{t[0].write(t[1])})}var Gt=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||{}}},yr=class{constructor(e,t,n,r,a,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=a,this.outputTensorIndex=i,this.id=t3(),s!=null&&(this.originalName=Ub(s),this.name=Hb(this.originalName)),this.rank=t.length}},MQ=0,Tp=class{constructor(e,t){this.callArgs=t,this.id=MQ++,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}}},$Q=0,Ze=class extends se.Serializable{constructor(e={}){super();this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=$Q++,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=ua(n)+"_"+Ip(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 a=null;e.batchSize!=null&&(a=e.batchSize),n=[a].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 _r(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new V(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return gn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return gn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new la(`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 la(`Layer ${this.name} is not connected, no input to return.`);return gn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new la(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new la(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return gn(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=yt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=yt(this.inputSpec);if(e.length!==t.length)throw new V(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;n<e.length;n++){let r=e[n],a=t[n];if(a==null)continue;let s=r.rank;if(a.ndim!=null&&s!==a.ndim)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${a.ndim}, found ndim=${s}`);if(a.maxNDim!=null&&s>a.maxNDim)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${a.maxNDim}, found ndim=${s}`);if(a.minNDim!=null&&s<a.minNDim)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${a.minNDim}, found ndim=${s}.`);if(a.dtype!=null&&r.dtype!==a.dtype)throw new V(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${a.dtype}, found dtype=${r.dtype}.`);if(a.axes){let i=r.shape;for(let o in a.axes){let l=Number(o),c=a.axes[o],u=l>=0?i[l]:i[i.length+l];if(c!=null&&[c,null].indexOf(u)===-1)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${c} but got shape ${i}.`)}}if(a.shape!=null)for(let i=0;i<a.shape.length;++i){let o=a.shape[i],l=r.shape[i];if(o!=null&&l!=null&&o!==l)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected shape=${a.shape}, found shape=${r.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){this._callHook!=null&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=yt(e),r=!0;for(let s of n)if(!(s instanceof yr)){r=!1;break}let a=!0;for(let s of n)if(s instanceof yr){a=!1;break}if(r===a)throw new V("Arguments to apply() must be all SymbolicTensors or all Tensors");return mi(this.name,()=>{if(!this.built){this.assertInputCompatibility(e);let s=[];for(let i of yt(e))s.push(i.shape);this.build(gn(s)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&a&&(this._refCount=1)}if(this.assertInputCompatibility(e),a){let s=this.call(e,t),i=yt(s),o=[];for(let l of i)n.indexOf(l)!==-1&&(l=l.clone()),o.push(l);if(s=gn(o),this.activityRegularizer!=null)throw new ze("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return s}else{let s=DQ(e),i=this.computeOutputShape(s),o,l=OQ(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?s[0]:s),i!=null&&i.length>0&&Array.isArray(i[0])?o=i.map((c,u)=>new yr(l,c,this,yt(e),t,this.name,u)):o=new yr(l,i,this,yt(e),t,this.name),this.addInboundNode(e,o,null,null,s,i,t),this._refCount++,this.activityRegularizer!=null)throw new ze("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return o}})}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 la(`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 la(`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 _r(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Sp(this.weights)}build(e){this.built=!0}getWeights(e=!1){return QA(e?this.trainableWeights:this.weights)}setWeights(e){U(()=>{let t=this.weights;if(t.length!==e.length)throw new V(`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=QA(t);for(let a=0;a<r.length;++a){let s=r[a],i=t[a],o=e[a];if(!k.arraysEqual(s.shape,o.shape))throw new V(`Layer weight shape ${s.shape} not compatible with provided weight shape ${o.shape}`);n.push([i,o])}ey(n)})}addWeight(e,t,n,r,a,s,i){if(this._addedWeightNames.indexOf(e)!==-1)throw new V(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(r=wt("zeros"));let o=r.apply(t,n),l=new p0(o,n,e,s,i);return o.dispose(),a!=null&&this.addLoss(()=>a.apply(l.read())),s==null&&(s=!0),s?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=yt(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,a,s,i=null){let o=yt(e);t=yt(t),n=yt(n),r=yt(r),a=Np(a),s=Np(s);let l=[],c=[],u=[];for(let h of o)l.push(h.sourceLayer),c.push(h.nodeIndex),u.push(h.tensorIndex);new Tp({outboundLayer:this,inboundLayers:l,nodeIndices:c,tensorIndices:u,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:a,outputShapes:s},i);for(let h=0;h<t.length;h++)t[h].sourceLayer=this,t[h].nodeIndex=this.inboundNodes.length-1,t[h].tensorIndex=h}getConfig(){let e={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(e.batchInputShape=this.batchInputShape),this.dtype!=null&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach(e=>e.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 DQ(e){e=yt(e);let t=[];for(let n of e)t.push(n.shape);return gn(t)}function OQ(e){return"float32"}function r3(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 a=[];for(let s=0;s<r.inboundLayers.length;s++){let i=r.inputTensors[s],o=r.inboundLayers[s],l=r.nodeIndices[s],c=r3(i,o,l);for(let u of c)a.indexOf(u)===-1&&a.push(u)}return a}}}var vl=class extends Ze{constructor(e){super({dtype:e.dtype,name:e.name!=null?e.name:Ip("input").toString()});if(e.batchSize==null&&(e.batchSize=null),e.sparse==null&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,e.inputShape!=null&&e.batchInputShape!=null)throw new V("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let t=e.batchInputShape;if(t==null){if(e.inputShape==null)throw new V("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(e.batchSize!=null)throw new V("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let r=new yr(this.dtype,this.batchInputShape,this,[],{},this.name);r.nodeIndex=0,r.tensorIndex=0,new Tp({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[r],outputTensors:[r],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new V(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};vl.className="InputLayer";se.registerClass(vl);function a3(e){if(e.batchShape==null&&e.shape==null)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");if(e.batchShape!=null&&e.shape!=null)throw new V("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=e.batchShape;e.shape!=null&&t==null&&(t=[null].concat(e.shape));let n=e.dtype;return n==null&&(n="float32"),new vl({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}async function za(e){if(e==null)return;let t=[],n=[],r=[];for(let a in e){let s=e[a];if(typeof s!="number"){let i=s;t.push(i.data()),n.push(a),r.push(i)}}if(t.length>0){let a=await Promise.all(t);for(let s=0;s<a.length;++s)e[n[s]]=a[s][0];$e(r)}}function s3(e){if(e!=null)for(let t in e){let n=e[t];typeof n!="number"&&n.dispose()}}var i3;(function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"})(i3||(i3={}));var zQ=125,kl=class{constructor(){this.validationData=null}setParams(e){this.params=e}async onEpochBegin(e,t){}async onEpochEnd(e,t){}async onBatchBegin(e,t){}async onBatchEnd(e,t){}async onTrainBegin(e){}async onTrainEnd(e){}setModel(e){}},f0=class{constructor(e,t=10){e==null&&(e=[]),this.callbacks=e,this.queueLength=t}append(e){this.callbacks.push(e)}setParams(e){for(let t of this.callbacks)t.setParams(e)}setModel(e){for(let t of this.callbacks)t.setModel(e)}async onEpochBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochBegin(e,t)}async onEpochEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochEnd(e,t)}async onBatchBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchBegin(e,t)}async onBatchEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchEnd(e,t)}async onTrainBegin(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainBegin(e)}async onTrainEnd(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainEnd(e)}},PQ=class extends kl{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){t==null&&(t={});let n=t.size==null?0:t.size;this.seen+=n;for(let r in t){let a=t[r];if(typeof a=="number")this.totals.hasOwnProperty(r)||(this.totals[r]=0),this.totals[r]=this.totals[r]+a*n;else{let s;r in this.totals?s=this.totals[r]:this.totals[r]=0;let i=U(()=>oe(this.totals[r],W(a,n)));this.totals[r]=i,s!=null&&s.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:U(()=>{let r=W(Te(1,this.seen),this.totals[n]);t[n]=r,this.totals[n].dispose(),jt(t[n])}))}},m0=class extends kl{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 a in this.history){let s=this.history[a];for(let i=0;i<s.length;++i)if(typeof s[i]!="number"){let o=s[i];e.push(o.data()),t.push(a),n.push(i)}}let r=await Promise.all(e);for(let a=0;a<r.length;++a)this.history[t[a]][n[a]].dispose(),this.history[t[a]][n[a]]=r[a][0]}},A0=class extends kl{constructor(e,t){super();if(this.currentEpoch=0,this.yieldEvery=t||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=zQ),this.yieldEvery==="never"&&e.onYield!=null)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");k.isNumber(this.yieldEvery)&&(this.maybeWait=WJ(this.maybeWait.bind(this),this.yieldEvery)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let r=[];this.yield!=null&&(await za(n),r.push(this.yield(e,t,n))),r.push(Nd()),await Promise.all(r)}async onEpochBegin(e,t){this.currentEpoch=e,this.epochBegin!=null&&(await za(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];this.epochEnd!=null&&(await za(t),n.push(this.epochEnd(e,t))),this.yieldEvery==="epoch"&&n.push(Nd()),await Promise.all(n)}async onBatchBegin(e,t){this.batchBegin!=null&&(await za(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];this.batchEnd!=null&&(await za(t),n.push(this.batchEnd(e,t))),this.yieldEvery==="batch"?n.push(Nd()):k.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){this.trainBegin!=null&&(await za(e),await this.trainBegin(e))}async onTrainEnd(e){this.trainEnd!=null&&(await za(e),await this.trainEnd(e))}};function o3(e,t){return e==null&&(e={}),e instanceof kl?[e]:Array.isArray(e)&&e[0]instanceof kl?e:yt(e).map(n=>new A0(n,t))}var or=class{constructor(){}static registerCallbackConstructor(e,t){k.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),or.checkForDuplicate(t),or.constructors[e]==null&&(or.constructors[e]=[]),or.constructors[e].push(t)}static checkForDuplicate(e){for(let t in or.constructors)or.constructors[+t].forEach(n=>{if(n===e)throw new V("Duplicate callback constructor.")})}static clear(){or.constructors={}}static createCallbacks(e){let t=[];for(let n in or.constructors){let r=+n;e>=r&&t.push(...or.constructors[r])}return t.map(n=>new n)}};or.constructors={};function l3(e,t,n,r,a,s,i,o,l){let c=new m0,u=[new PQ,...or.createCallbacks(t)];e!=null&&u.push(...e),u.push(c);let h=new f0(u);return h.setParams({epochs:n,initialEpoch:r,samples:a,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:h,history:c}}function vr(e,t={},n=!1){return hc(e,se.SerializationMap.getMap().classNameMap,t,"layer",n)}function Ep(e,t){return U(()=>{e.dtype!=="float32"&&(e=e.asType("float32"));let n=Ce(Ac(e),t,!0),r=vu(n.shape,Bt()),a=Yt(Ar(n,r));return Te(e,a)})}function yi(e,t){return U(()=>It(Ac(_e(t,e)),-1))}function Cp(e,t){return U(()=>It(Pt(_e(t,e)),-1))}function Il(e,t){return U(()=>{let n=_e(e,t),r=mn(Pt(e),Bt(),Number.MAX_VALUE),a=Pt(Te(n,r));return W(100,It(a,-1))})}function LQ(e,t){return U(()=>{let n=mn(t,Bt(),Number.MAX_VALUE),r=kn(oe(1,n)),a=mn(e,Bt(),Number.MAX_VALUE),s=kn(oe(1,a));return It(Ac(_e(r,s)),-1)})}function WQ(e,t){return U(()=>{let n=Ar(0,_e(1,W(e,t)));return It(Ac(n),-1)})}function BQ(e,t){return U(()=>{let n=Ar(0,_e(1,W(e,t)));return It(n,-1)})}function VQ(e,t){return U(()=>{let n=Ce(W(e,t),-1),r=jn(W(_e(1,e),t),-1);return Ar(0,oe(1,_e(r,n)))})}function UQ(e,t){return U(()=>{let n=Math.log(2),r=_e(t,e),a=_e(oe(r,Uo(W(-2,r))),n);return It(a,-1)})}function xc(e,t,n=!1){return U(()=>{if(n)t=Fu(t);else{let r=Ce(t,t.shape.length-1,!0);t=Te(t,r)}return t=mn(t,Bt(),1-Bt()),kt(Ce(W(e.toFloat(),kn(t)),t.shape.length-1))})}function Rp(e,t,n=!1){return U(()=>{let r=Vo(dY(e)).toInt();t=mn(t,Bt(),1-Bt());let a=t.shape,s=Lo(r,a[a.length-1]).reshape(a);return xc(s,t,n)})}function HQ(e,t){if(!k.arraysEqual(e.shape,t.shape))throw new V(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return U(()=>{let n=t.relu(),r=t.abs().neg();return n.sub(t.mul(e)).add(r.exp().log1p())})}function Fp(e,t){return U(()=>{let n;return n=mn(t,Bt(),1-Bt()),n=kn(Te(n,_e(1,n))),It(HQ(e,n),-1)})}function jQ(e,t){return U(()=>{let n=mn(e,Bt(),1),r=mn(t,Bt(),1);return Ce(W(e,kn(Te(n,r))),-1)})}function GQ(e,t){return U(()=>{let n=kn(oe(Bt(),t));return It(_e(t,W(e,n)),-1)})}function ty(e,t){return U(()=>{let n=Ep(e,-1),r=Ep(t,-1),a=W(n,r);return kt(Ce(a,-1))})}var Mp={meanSquaredError:yi,meanAbsoluteError:Cp,meanAbsolutePercentageError:Il,meanSquaredLogarithmicError:LQ,squaredHinge:WQ,hinge:BQ,categoricalHinge:VQ,logcosh:UQ,categoricalCrossentropy:xc,sparseCategoricalCrossentropy:Rp,binaryCrossentropy:Fp,kullbackLeiblerDivergence:jQ,poisson:GQ,cosineProximity:ty};function ny(e){if(typeof e=="string"){if(e in Mp)return Mp[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 V(t)}else return e}function ry(e,t){return U(()=>{let n=W(.5,In(t)),r=fc(Hn(t,n),e.dtype);return It(Qr(e,r),-1)})}function ay(e,t){return U(()=>fc(Qr(gu(e,-1),gu(t,-1)),"float32"))}function u3(e,t){return U(()=>tr(e.equal(1),t.equal(1)).sum().cast("float32"))}function qQ(e,t){return U(()=>tr(e.equal(1),t.equal(0)).sum().cast("float32"))}function XQ(e,t){return U(()=>tr(e.equal(0),t.equal(1)).sum().cast("float32"))}function c3(e,t){return U(()=>{let n=u3(e,t),r=XQ(e,t),a=n.add(r);return An(Hn(a,0),n.div(a),0).cast("float32")})}function KQ(e,t){return U(()=>{let n=u3(e,t),r=qQ(e,t),a=n.add(r);return An(Hn(a,0),n.div(a),0).cast("float32")})}function h3(e,t){return Fp(e,t)}function d3(e,t){return e.rank===t.rank&&(e=e.squeeze([e.rank-1])),t=t.argMax(-1),t.dtype!==e.dtype&&(t=t.asType(e.dtype)),Qr(e,t).asType("float32")}var ZQ=yi,JQ=yi,YQ=Cp,QQ=Cp,eee=Il,tee=Il,sy=xc,nee=ty,p3=Rp,$p={binaryAccuracy:ry,categoricalAccuracy:ay,precision:c3,categoricalCrossentropy:sy,sparseCategoricalCrossentropy:p3,mse:ZQ,MSE:JQ,mae:YQ,MAE:QQ,mape:eee,MAPE:tee,cosine:nee};function ree(e){if(typeof e=="string"&&e in $p)return $p[e];if(typeof e!="string"&&e!=null)return e;throw new V(`Unknown metric ${e}`)}function Dp(e){if(Wr(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(Mp))if(Mp[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys($p))if($p[n]===e){t=n;break}return t!==void 0?t:e.name}}function aee(e){let t={Adagrad:()=>Xs.adagrad(.01),Adadelta:()=>Xs.adadelta(1,.95,Bt()),Adam:()=>Xs.adam(.001,.9,.999,Bt()),Adamax:()=>Xs.adamax(.002,.9,.999,Bt(),0),RMSProp:()=>Xs.rmsprop(.001,.9,0,Bt()),SGD:()=>Xs.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 V(`Unknown Optimizer ${e}`)}var f3=1*1024*1024;function m3(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!iy(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>f3&&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 <= ${f3}.`)}}function iy(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"||!iy(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!iy(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function uee(e,t,n,r=console.log){let a=iee(e),s=["Layer (type)","Output shape","Param #"];a?(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(u=>Math.floor(t*u)));let i;if(!a){s.push("Receives inputs"),i=[];for(let u in e.nodesByDepth)i.push(...e.nodesByDepth[u])}r("_".repeat(t)),Op(s,n,r),r("=".repeat(t));let o=e.layers;for(let u=0;u<o.length;++u)a?oee(o[u],n,r):lee(o[u],n,i,r),r((u===o.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let l=see(e),c=Sp(e.nonTrainableWeights);r(`Total params: ${l+c}`),r(`Trainable params: ${l}`),r(`Non-trainable params: ${c}`),r("_".repeat(t))}function see(e){let t;return e.collectedTrainableWeights!=null?t=Sp(e.collectedTrainableWeights):t=Sp(e.trainableWeights),t}function iee(e){let t=!0,n=[],r=[];for(let a in e.nodesByDepth)n.push(e.nodesByDepth[a]);for(let a of n){if(a.length>1||a.length===1&&a[0].inboundLayers.length>1){t=!1;break}r.push(...a)}if(t)for(let a of e.layers){let s=!1;for(let i of a.inboundNodes)if(r.indexOf(i)!==-1)if(s){t=!1;break}else s=!0;if(!t)break}return t}function Op(e,t,n=console.log){let r="";for(let a=0;a<e.length;++a)a>0&&(r=r.slice(0,r.length-1)+" "),r+=e[a],r=r.slice(0,t[a]),r+=" ".repeat(t[a]-r.length);n(r)}function oee(e,t,n){let r;try{r=JSON.stringify(e.outputShape)}catch(o){r="multiple"}let a=e.name,s=e.getClassName(),i=[`${a} (${s})`,r,e.countParams().toString()];Op(i,t,n)}function lee(e,t,n,r){let a;try{a=JSON.stringify(e.outputShape)}catch(u){a="multiple"}let s=[];for(let u of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(u)===-1))for(let h=0;h<u.inboundLayers.length;++h){let d=u.inboundLayers[h].name,p=u.nodeIndices[h],f=u.tensorIndices[h];s.push(`${d}[${p}][${f}]`)}let i=e.name,o=e.getClassName(),l=s.length===0?"":s[0],c=[`${i} (${o})`,a,e.countParams().toString(),l];Op(c,t,r);for(let u=1;u<s.length;++u)Op(["","","",s[u]],t,r)}function A3(e,t,n){return(e==="inboundNodes"||e==="outputLayers"||e==="inputLayers")&&t===0&&typeof n=="string"}function wc(e,t){if(e===null)return null;if(typeof e=="string")return pi(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let s=e[a];A3(t,a,s)?n.push(s):n.push(wc(s,t))}return n}else{let n={};for(let r of Object.keys(e)){let a=e[r];if(r==="name"&&typeof a=="string")n[r]=a;else{let s=pi(r);n[s]=wc(a,s)}}return n}}function oy(e,t){if(e==null)return null;if(typeof e=="string")return ua(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let s=e[a];A3(t,a,s)?n.push(s):n.push(oy(s,t))}return n}else{let n={};for(let r of Object.keys(e)){let a=e[r],s=ua(r);(r==="name"||r==="className")&&typeof a=="string"?n[s]=a:n[s]=oy(a,r)}return n}}var am="2.8.3";function cee(e,t){if(e.dtype==null||e.dtype===t.dtype)return t;try{return ge(t,e.dtype)}catch(n){throw new V(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}var gi=class{constructor(e){if(this.id2Value={},this.id2Mask={},this.name2Id={},e instanceof gi)for(let t in e.id2Value)this.id2Value[t]=e.id2Value[t],t in e.id2Mask&&(this.id2Mask[t]=e.id2Mask[t]);else{if(e==null)return;for(let t of e)this.add(t.key,t.value)}}add(e,t,n){if(this.id2Value[e.id]==null)this.id2Value[e.id]=cee(e,t),this.name2Id[e.name]=e.id,n!=null&&(this.id2Mask[e.id]=n);else throw new V(`Duplicate key: name=${e.name}, id=${e.id}`);return this}addFeed(e){this.add(e.key,e.value)}hasKey(e){return this.id2Value[e.id]!=null}names(){return Object.keys(this.name2Id)}getValue(e){if(e instanceof yr){if(this.id2Value[e.id]==null)throw new V(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}else{let t=this.name2Id[e];if(t==null)throw new V(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof yr){if(this.id2Value[e.id]==null)throw new V(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}else{let t=this.name2Id[e];if(t==null)throw new V(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){this.id2Mask!=null&&$e(this.id2Mask)}},ly={},y3={};function _c(e,t,n,r){let a=n==null?!1:n.training,s=Array.isArray(e),i=s?e:[e],o=i.map(f=>f.name),l=[],c=t.names();for(let f of o)c.indexOf(f)!==-1?l.push(t.getValue(f)):l.push(null);r!=null&&(r.maxNumTensors=-Infinity,r.minNumTensors=Infinity);let u=o.join(",")+"|"+t.names().join(","),h,d;if(ly[u]==null){let f=hee(i,t);h=f.sorted,d=f.recipientCounts,ly[u]=h,y3[u]=d}h=ly[u],d={},a||Object.assign(d,y3[u]);let p=new gi(t);for(let f=0;f<h.length;++f){if(r!=null){let N=qh().numTensors;N>r.maxNumTensors&&(r.maxNumTensors=N),N<r.minNumTensors&&(r.minNumTensors=N)}let m=h[f],A=m.sourceLayer;if(A instanceof vl)continue;let y=[],g=[],w=[],x=!1;for(let N of m.inputs){let C=p.getValue(N),$=p.getMask(N);y.push(C),g.push($),$!=null&&(x=!0),a||(d[N.name]--,d[N.name]===0&&!t.hasKey(N)&&o.indexOf(N.name)===-1&&!C.isDisposed&&N.sourceLayer.stateful!==!0&&w.push(C))}x&&(n=n||{},n.mask=g[0]);let _=yt(A.apply(y,n)),b=null;A.supportsMasking&&(b=A.computeMask(y,g));let T=dee(m),S=Array.isArray(T)?T:[T];for(let N=0;N<S.length;++N){p.hasKey(S[N])||p.add(S[N],_[N],Array.isArray(b)?b[0]:b);let C=o.indexOf(S[N].name);C!==-1&&(l[C]=_[N])}a||$e(w)}return p.disposeMasks(),s?l:l[0]}function hee(e,t){k.assert(e!=null&&e.length>0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let a=g3(e[0],t);n=a.sorted,r=a.recipientMap}else{let a=new Set;for(let s of e){let{sorted:i,recipientMap:o}=g3(s,t);for(let l of i)a.has(l.name)||(n.push(l),a.add(l.name));for(let l in o)r[l]==null&&(r[l]=new Set),o[l].forEach(c=>r[l].add(c))}}return{sorted:n,recipientCounts:pee(r)}}function pee(e){let t={};for(let n in e)t[n]=e[n].size;return t}function g3(e,t){let n=new Set,r=[],a={};for(let o of t.names())n.add(o);let s=[],i=[];for(s.push(e);s.length>0;){let o=s[s.length-1];if(n.has(o.name)){s.pop();continue}let l=i[i.length-1]===s.length-1;if(o.inputs.length===0||l)s.pop(),r.push(o),n.add(o.name),l&&i.pop();else{i.push(s.length-1);for(let c of o.inputs)a[c.name]==null&&(a[c.name]=new Set),a[c.name].add(o.name),!n.has(c.name)&&s.push(c)}}return{sorted:r,recipientMap:a}}function dee(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;r<e.sourceLayer.inboundNodes.length;++r)for(let a of e.sourceLayer.inboundNodes[r].outputTensors)if(a.id===e.id){n=r;break}t=e.sourceLayer.getOutputAt(n)}return t}var Ur=class extends Ze{constructor(e){super({});if(this.containerNodes=new Set,this.name=e.name,this.name==null){let y=this.getClassName().toLowerCase();this.name=Ip(y)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(e.inputs)?this.inputs=e.inputs.slice():this.inputs=[e.inputs],Array.isArray(e.outputs)?this.outputs=e.outputs.slice():this.outputs=[e.outputs],$a(this.inputs).length!==this.inputs.length)throw new V(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(y=>y.name)}`);$a(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 g=y.sourceLayer,w=y.nodeIndex,x=y.tensorIndex;this.outputLayers.push(g),this.outputLayersNodeIndices.push(w),this.outputLayersTensorIndices.push(x)}for(let y of this.inputs){let g=y.sourceLayer,w=y.nodeIndex,x=y.tensorIndex;Wr(w===0,"input layer has >1 nodes"),Wr(x===0,"input layer has >1 tensors"),this.inputLayers.push(g),this.inputLayersNodeIndices.push(w),this.inputLayersTensorIndices.push(x)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;y<this.inputLayers.length;y++){let g=this.inputLayers[y];if(!(g instanceof vl))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${e.inputs}. Input ${y} (0-based) originates from layer type ${g.getClassName()}.`);this.inputNames.push(g.name),this.feedInputShapes.push(g.batchInputShape),this.feedInputNames.push(g.name)}for(let y of this.outputLayers)this.outputNames.push(y.name);this.internalInputShapes=this.inputs.map(y=>y.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let t={},n={},r={},a={},s={},i=[],o=(y,g,w,x,_,b)=>{(x==null||_==null||b==null)&&(x=y.sourceLayer,_=y.nodeIndex,b=y.tensorIndex);let T=x.inboundNodes[_];if(w.indexOf(T)!==-1)throw new _r(`The tensor ${y.name} at layer "${x.name}" is part of a cycle.`);if(g.indexOf(T)!==-1)return;this.containerNodes.add(Ur.nodeKey(x,_)),x.id in s||(s[x.id]=Object.keys(s).length),w.indexOf(T)===-1&&w.push(T);let S=T.inboundLayers.length;for(let N=0;N<S;N++){let C=T.inputTensors[N],$=T.inboundLayers[N],D=T.nodeIndices[N],O=T.tensorIndices[N];o(C,g,w,$,D,O)}for(g.push(T);w.indexOf(T)>=0;)w.splice(w.indexOf(T),1);i.push(T)},l=[],c=[];for(let y of this.outputs)o(y,l,c);let u=i.slice().reverse();for(let y of u){n[y.id]=y,y.id in t||(t[y.id]=0);let g=t[y.id],w=r[y.outboundLayer.id]==null?0:r[y.outboundLayer.id];g=Math.max(g,w),r[y.outboundLayer.id]=g,a[y.outboundLayer.id]=y.outboundLayer,t[y.id]=g;for(let x=0;x<y.inboundLayers.length;x++){let _=y.inboundLayers[x],b=y.nodeIndices[x],T=_.inboundNodes[b],S=t[T.id]==null?0:t[T.id];t[T.id]=Math.max(g+1,S),n[T.id]=T}}let h={};for(let y in t){let g=t[y];g in h||(h[g]=[]),h[g].push(n[y])}let d={};for(let y in r){let g=r[y];g in d||(d[g]=[]),d[g].push(a[y])}let p=Object.keys(d).map(y=>parseInt(y,10)).sort(fp);this.layers=[];for(let y of p){let g=d[y];g.sort((w,x)=>{let _=s[w.id],b=s[x.id];return _<b?-1:_>b?1:0});for(let w of g)w instanceof Ur&&this.internalContainerRefs.push(w),this.layers.push(w)}this.layersByDepth=d,p=Object.keys(h).map(y=>parseInt(y,10)).sort(fp);let f=this.inputs.slice(),m=[];for(let y of p)for(let g of h[y]){let w=g.outboundLayer;if(w!=null){for(let x of g.inputTensors)if(f.indexOf(x)===-1)throw new _r(`Graph disconnected: cannot obtain value for tensor ${x} at layer "${w.name}". The following previous layers were accessed without issue: ${m}`);for(let x of g.outputTensors)f.push(x);m.push(w.name)}}this.nodesByDepth=h;let A=this.layers.map(y=>y.name);for(let y of A){let g=A.filter(w=>w===y).length;if(g!==1)throw new _r(`The name "${y}" is used ${g} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(A))}this.outboundNodes=[],this.inboundNodes=[],new Tp({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 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 V("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 s of this.layers)for(let i of s.weights){if(n[i.originalName]!=null)throw new V(`Duplicate weight name: ${i.originalName}`);n[i.originalName]=i,r++}let a=[];for(let s in e){let i=s;if(n[s]==null){let o=s.split("/");i=o.slice(0,-2).concat([o[o.length-1]]).join("/")}if(n[i]!=null)a.push([n[i],e[s]]);else if(t)throw new V(`Provided weight data has no target variable: ${s}`);delete n[i]}if(t){let s=[];for(let i in n)s.push(i);if(s.length>0)throw new V(`${s.length} of ${r} weights are not set: ${s}`)}ey(a)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${am}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=oy(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return U(()=>{e=yt(e);let n=new gi;for(let r=0;r<this.inputs.length;++r)n.add(this.inputs[r],e[r]);return _c(this.outputs,n,t)})}computeMask(e,t){return U(()=>{e=yt(e);let n;return t==null?n=di(null,e.length):n=yt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Np(e);if(t.length!==this.inputLayers.length)throw new V(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;i<t.length;i++){let o=this.inputLayers[i],l=t[i],c=o.name+"_0_0";n[c]=l}let r=Object.keys(this.nodesByDepth).map(i=>parseInt(i,10)).sort(fp);if(r.length>1)for(let i of r){let o=this.nodesByDepth[i];for(let l of o){let c=l.outboundLayer;if(this.inputLayers.map(f=>f.id).indexOf(c.id)!==-1)continue;let u=[];for(let f=0;f<l.inboundLayers.length;f++){let m=l.inboundLayers[f],A=l.nodeIndices[f],y=l.tensorIndices[f],g=`${m.name}_${A}_${y}`,w=n[g];u.push(w)}let h=c.computeOutputShape(gn(u)),d=Np(h),p=c.inboundNodes.indexOf(l);for(let f=0;f<d.length;f++){let m=`${c.name}_${p}_${f}`;n[m]=d[f]}}}let a=[],s=[];for(let i=0;i<this.outputLayers.length;i++){let o=this.outputLayers[i],l=this.outputLayersNodeIndices[i],c=this.outputLayersTensorIndices[i],u=`${o.name}_${l}_${c}`;s.push(u)}for(let i=0;i<s.length;i++){let o=s[i];Wr(o in n),a.push(n[o])}return gn(a)}runInternalGraph(e,t){t==null&&(t=di(null,e.length));let n={};for(let o=0;o<this.inputs.length;++o){let l=this.inputs[o],c=e[o],u=t[o];n[l.id]=[c,u]}let r=Object.keys(this.nodesByDepth).map(o=>parseInt(o,10)).sort(fp);for(let o of r){let l=this.nodesByDepth[o];for(let c of l){let u=c.outboundLayer,h=c.inputTensors,d=c.outputTensors,p=new Array;for(let f of h)f.id in n&&p.push(n[f.id]);if(p.length===h.length){let f={},m,A,y,g;if(c.callArgs!=null&&(f=c.callArgs),p.length===1){let[w,x]=p[0];f.mask==null&&(f.mask=x),y=yt(u.call(w,f)),g=yt(u.computeMask(w,x)),m=[w],A=[x]}else m=p.map(w=>w[0]),A=p.map(w=>w[1]),f.mask==null&&(f.mask=A),y=yt(u.call(m,f)),g=yt(u.computeMask(m,A));if(u.activityRegularizer)throw new ze("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let w=0;w<d.length;++w){let x=d[w],_=y[w],b=g[w];n[x.id]=[_,b]}}}}let a=[],s=[],i=[];for(let o of this.outputs){Wr(o.id in n,`Could not compute output ${o.name} : ${o.id}`);let[l,c]=n[o.id];i.push(l.shape),a.push(l),s.push(c)}return[a,s,i]}buildNodeConversionMap(e){let t={},n;for(let r of this.layers){n=r instanceof Ur?1:0;for(let a=0;a<r.inboundNodes.length;a++){let s=Ur.nodeKey(r,a);this.containerNodes.has(s)&&(t[s]=n,n+=1)}}return t}getLayer(e,t){if(t!=null){if(this.layers.length<=t)throw new V(`Was asked to retrieve layer at index ${t}, but model only has ${this.layers.length} layer(s).`);return this.layers[t]}else if(e==null)throw new V("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===e)return n;throw new V(`No such layer: ${e}`)}calculateLosses(){return U(()=>{let e=[];for(let t of this.layers)for(let n=0;n<t.inboundNodes.length;++n){let r=Ur.nodeKey(t,n);this.containerNodes.has(r)&&e.push(...t.calculateLosses())}return e})}getConfig(){let e={name:this.name},t=this.buildNodeConversionMap(this.layers),n=[];for(let s of this.layers){let i=s.getClassName(),o=s.getConfig(),l=[];for(let u=0;u<s.inboundNodes.length;u++){let h=s.inboundNodes[u],d=Ur.nodeKey(s,u),p={};if(this.containerNodes.has(d)){if(h.callArgs)try{JSON.stringify(h.callArgs),p=h.callArgs}catch(f){console.warn(`Layer ${s.name} was passed non-serializable keyword arguments: ${h.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),p={}}if(h.inboundLayers.length>0){let f=[];for(let m=0;m<h.inboundLayers.length;m++){let A=h.inboundLayers[m],y=h.nodeIndices[m],g=h.tensorIndices[m],w=Ur.nodeKey(A,y),x=t[w];x==null&&(x=0),f.push([A.name,x,g,p])}l.push(f)}}}let c={};c.name=s.name,c.className=i,c.config=o,c.inboundNodes=l,n.push(c)}e.layers=n;let r=[];for(let s=0;s<this.inputLayers.length;s++){let i=this.inputLayers[s],o=this.inputLayersNodeIndices[s],l=Ur.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let c=t[l];c==null&&(c=0);let u=this.inputLayersTensorIndices[s];r.push([i.name,c,u])}e.inputLayers=r;let a=[];for(let s=0;s<this.outputLayers.length;s++){let i=this.outputLayers[s],o=this.outputLayersNodeIndices[s],l=Ur.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let c=t[l];c==null&&(c=0);let u=this.outputLayersTensorIndices[s];a.push([i.name,c,u])}return e.outputLayers=a,e}static fromConfig(e,t,n={},r=!1){let a={},s={};function i(m,A){m.name in s?s[m.name].push(A):s[m.name]=[A]}function o(m,A){let y=[],g;for(let w of A){let x=w[0],_=w[1],b=w[2];if(g=w[3]==null?{}:w[3],!(x in a)){i(m,A);return}let T=a[x];if(T.inboundNodes.length<=_){i(m,A);return}let S=T.inboundNodes[_];y.push(S.outputTensors[b])}y.length>0&&m.apply(gn(y),g)}function l(m){let A=m.name,y=vr(m,t.customObjects!=null?t.customObjects:{});y.setFastWeightInitDuringBuild(r),a[A]=y,m.inboundNodes.forEach(g=>{if(!(g instanceof Array))throw new V(`Corrupted configuration, expected array for nodeData: ${g}`);i(y,g)})}let c=t.name,u=t.layers;for(let m of u)l(m);for(;!LJ(s);)for(let m of u){let A=a[m.name];if(A.name in s){let y=s[A.name];delete s[A.name];for(let g of y)o(A,g)}}let h=[],d=[],p=t.inputLayers;for(let m of p){let A=m[0],y=m[1],g=m[2];Wr(A in a);let w=a[A].inboundNodes[y].outputTensors;h.push(w[g])}let f=t.outputLayers;for(let m of f){let A=m[0],y=m[1],g=m[2];Wr(A in a);let w=a[A].inboundNodes[y].outputTensors;d.push(w[g])}return new e({inputs:h,outputs:d,name:c})}get stateful(){if(this._stateful)throw new V("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(){U(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function fee(e,t,n){let r=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(a=>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 a=[];return t.forEach(s=>{s in e?a.push(e[s]):a.push(null)}),a}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 x3(e,t){return fee(e,t,"classWeight")}async function w3(e,t,n,r){if(t!=null||r!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let a=U(()=>{if(e.shape.length===1)return e.clone();if(e.shape.length===2)if(e.shape[1]>1){let o=1;return e.argMax(o)}else{if(e.shape[1]===1)return e.reshape([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.`)}),s=Array.from(await a.data());$e(a);let i=[];return s.forEach(o=>{if(n[o]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${o} exists in the data but not in classWeight`);i.push(n[o])}),nn(i,"float32")}else return null}function mee(e,t){return W(e,t)}var Aee=32;function b3(e,t){let n,r,a=t;n=a.xs,r=a.ys,k.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 s=_3("input",e.inputNames,n),i=_3("output",e.outputNames,r),o=s[0].shape[0];k.assert(s.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),k.assert(i.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l<s.length;l++)k.assert(s[l].shape[0]===o,()=>`Batch size mismatch: input ${e.inputNames[l]} has ${s[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);for(let l=0;l<i.length;l++)k.assert(i[l].shape[0]===o,()=>`Batch size mismatch: output ${e.outputNames[l]} has ${i[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);return{xs:s,ys:i}}function _3(e,t,n){if(n instanceof j)return[n];if(Array.isArray(n))return k.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 a of t){if(n[a]==null)throw new V(`The feature data generated by the dataset lacks the required ${e} key '${a}'.`);r.push(n[a])}return r}}function yee(e){if(e.length===3)throw new ze("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function xee(e,t,n){let r=n.batchesPerEpoch!=null;if(k.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),k.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),k.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}`),k.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}`),k.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 a=n.validationData!=null,s,i;if(a)if(v3(n.validationData))k.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 A=yee(n.validationData);s=A.xs,i=A.ys}let o=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),c;a?c=l.slice().concat(l.map(A=>"val_"+A)):c=l.slice();let u=o3(n.callbacks,n.yieldEvery),h=n.verbose==null?1:n.verbose,{callbackList:d,history:p}=l3(u,h,n.epochs,null,null,gee(t,n),null,a,c);d.setModel(e),e.history=p,await d.onTrainBegin(),e.stopTraining_=!1;let f=n.initialEpoch==null?0:n.initialEpoch,m=await t.iterator();for(;f<n.epochs;){let A={};await d.onEpochBegin(f);let y=0,g=0;for(r||(m=await t.iterator());r?y<n.batchesPerEpoch:!0;){let w=await m.next();if(r&&w.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${y} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(w.value!=null){let{xs:x,ys:_}=b3(e,w.value),b={};b.batch=g,b.size=x[0].shape[0],await d.onBatchBegin(g,b);let T=[];if(n.classWeight!=null){let C=x3(n.classWeight,e.outputNames);for(let $=0;$<C.length;++$)T.push(await w3(_[$],null,C[$]))}let S=x.concat(_).concat(T),N=o(S);$e(S);for(let C=0;C<l.length;++C){let $=l[C],D=N[C];b[$]=D,jt(D)}await d.onBatchEnd(g,b),s3(b),g++,y++}if(r?y>=n.batchesPerEpoch:w.done){if(a){let x;v3(n.validationData)?x=yt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):x=yt(e.evaluate(s,i,{batchSize:n.validationBatchSize==null?Aee:n.validationBatchSize,verbose:0}));for(let _=0;_<e.metricsNames.length;++_)A[`val_${e.metricsNames[_]}`]=x[_]}break}if(e.stopTraining_)break}if(await d.onEpochEnd(f,A),f++,e.stopTraining_)break}return await d.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function gee(e,t){let n=null;return t.batchesPerEpoch!=null?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}function v3(e){return typeof e.iterator=="function"}function wee(e){return typeof e.next=="function"}async function _ee(e,t,n){n=n||{};let r=n.batches!=null,a=e.testFunction,s=[];if(n.verbose>0)throw new ze("Verbose mode is not implemented yet.");k.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 i=wee(t)?t:await t.iterator(),o=0,l=0;for(;r?l<n.batches:!0;){let c=await i.next();if(s=U(()=>{if(c.value){let{xs:u,ys:h}=b3(e,c.value),d=u.concat(h),p=U(()=>a(d));if($e(d),l===0)for(let m=0;m<p.length;++m)s.push(Ee(0));let f=d[0].shape[0];for(let m=0;m<p.length;++m){let A=p[m],y=s[m];s[m]=U(()=>oe(s[m],W(f,A))),l>0&&$e(y)}$e(p),o+=f,++l}return s}),c.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 c=0;c<s.length;++c){let u=s[c];s[c]=Te(s[c],o),$e(u)}return gn(s)}function uy(e){k.assert(e>0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function bc(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>Ai(r,t,n-t)):Ai(e,t,n-t)}function cy(e,t){return U(()=>e==null?null:Array.isArray(e)?e.map(n=>cy(n,t)):qb(e,t.dtype==="int32"?t:t.toInt()))}function hy(e,t){let n=[],r=0,a=null;for(;r<e;)a=r+t,a>=e&&(a=e),n.push([r,a]),r=a;return n}async function bee(e,t,n,r,a,s,i,o,l,c,u,h,d,p,f){a==null&&(a=32),s==null&&(s=1),u==null&&(u=!0),d==null&&(d=0);let m=!1;if(l!=null&&c!=null&&(m=!0),f!=null&&(m=!0,p==null))throw new V("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let A=e.checkNumSamples(n,a,p,"steps_per_epoch"),y;A!=null&&(y=br(0,A)),i==null&&(i=1);let{callbackList:g,history:w}=l3(o,i,s,d,A,p,a,m,h);g.setModel(e),e.history=w,await g.onTrainBegin(),e.stopTraining_=!1;for(let x=d;x<s;++x){await g.onEpochBegin(x);let _={};if(p!=null)throw new ze("stepsPerEpoch mode is not implemented yet.");{if(u==="batch")throw new ze("batch shuffling is not implemneted yet");u&&k.shuffle(y);let b=nn(y),T=hy(A,a);for(let S=0;S<T.length;++S){let N={};if(await g.onBatchBegin(S,N),U(()=>{let C=T[S][0],$=T[S][1],D=Ai(b,C,$-C);N.batch=S,N.size=$-C;let O=cy(n,D),B=t(O);for(let H=0;H<r.length;++H){let X=r[H],Z=B[H];N[X]=Z,jt(Z)}if(S===T.length-1&&m){let H=e.testLoop(l,c,a);for(let X=0;X<r.length;++X){let Z=r[X],ee=H[X];jt(ee),_["val_"+Z]=ee}}}),await g.onBatchEnd(S,N),s3(N),e.stopTraining_)break}b.dispose()}if(await g.onEpochEnd(x,_),e.stopTraining_)break}return await g.onTrainEnd(),await e.history.syncData(),e.history}async function vee(e,t,n,r={}){if(e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;let a,s,i,o,l,c,u;try{let h=r.batchSize==null?32:r.batchSize;uy(h);let d=!1,p=await e.standardizeUserData(t,n,r.sampleWeight,r.classWeight,d,h);a=p[0],s=p[1],u=p[2];let f=!1,m;if(r.validationData!=null&&r.validationData.length>0){if(f=!0,r.validationData.length===2)i=r.validationData[0],o=r.validationData[1];else throw r.validationData.length===3?new ze("validationData including sample weights is not supported yet."):new V(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);let b=!0,T=await e.standardizeUserData(i,o,null,null,b,h);l=T[0],c=T[1],m=l.concat(c)}else if(r.validationSplit!=null&&r.validationSplit>0&&r.validationSplit<1){f=!0;let b=Math.floor(a[0].shape[0]*(1-r.validationSplit)),T=a[0].shape[0];l=bc(a,b,T),a=bc(a,0,b),c=bc(s,b,T),s=bc(s,0,b),m=l.concat(c)}else r.validationSteps!=null&&(f=!0);let A=a.concat(s).concat(u);e.checkTrainableWeightsConsistency();let y=e.makeTrainFunction(),g=e.getDedupedMetricsNames(),w,x;f?(e.makeTestFunction(),w=e.testFunction,x=g.slice().concat(g.map(b=>"val_"+b))):(w=null,m=[],x=g.slice());let _=o3(r.callbacks,r.yieldEvery);return await bee(e,y,A,g,h,r.epochs,r.verbose,_,w,m,r.shuffle,x,r.initialEpoch,null,null)}finally{e.isTraining=!1,xi(a,t),xi(s,n),xi(l,i),xi(c,o),u!=null&&$e(u)}}function k3(e){let t=[];e instanceof j&&(e=[e]);for(let n=0;n<e.length;++n){let r=e[n];if(r.rank===1)t.push(mc(r,1));else{if(r.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(r)}}return t}function xi(e,t){if(e==null)return;let n=[];if(t instanceof j)n.push(t.id);else if(Array.isArray(t))t.forEach(a=>n.push(a.id));else if(t!=null)for(let a in t){let s=t[a];n.push(s.id)}let r=[];if(e instanceof j)n.indexOf(e.id)===-1&&r.push(e);else if(Array.isArray(e))e.forEach(a=>{n.indexOf(a.id)===-1&&r.push(a)});else if(e!=null)for(let a in e){let s=e[a];n.indexOf(s.id)===-1&&r.push(s)}r.forEach(a=>{a.isDisposed||a.dispose()})}function kee(e){return e instanceof j}function dy(e){return Array.isArray(e)}function I3(e){return!kee(e)&&!dy(e)}function N3(e,t,n,r=!0,a=""){if(t==null||t.length===0){if(e!=null){let i=!1;if(dy(e)&&e.length>0)i=!0;else if(I3(e)){for(let o in e)if(e.hasOwnProperty(o)){i=!0;break}}else i=!0;if(i)throw new V(`Error when checking model ${a} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(i=>null);let s;if(I3(e)){e=e,s=[];for(let i of t){if(e[i]==null)throw new V(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(e[i])}}else if(dy(e)){if(e=e,e.length!==t.length)throw new V(`Error when checking model ${a}: 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}`);s=e}else{if(e=e,t.length>1)throw new V(`The model ${a} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=k3(s),n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new V(`Error when checking ${a}: expected ${t[i]} to have ${n[i].length} dimension(s). but got array with shape ${o.shape}`);for(let l=0;l<n[i].length;++l){if(l===0&&!r)continue;let c=o.shape[l],u=n[i][l];if(u!=null&&u>=0&&c!==u)throw new V(`Error when checking ${a}: expected ${t[i]} to have shape [${n[i]}], but got array with shape [${o.shape}].`)}}return s}function Iee(e,t,n){let r=$a(e.map(s=>s.shape[0]));r.sort();let a=$a(t.map(s=>s.shape[0]));if(a.sort(),r.length>1)throw new V(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(s=>s.shape))}`);if(a.length>1)throw new V(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(s=>s.shape))}`);if(r.length>0&&a.length>0&&!k.arraysEqual(r,a))throw new V(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${a[0]} target sample(s).`)}function Nee(e,t,n){let r=[yi,Fp,xc];for(let a=0;a<e.length;++a){let s=e[a],i=t[a],o=n[a];if(i!=null){if(i===xc&&s.shape[s.shape.length-1]===1)throw new V(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(r.indexOf(i)!==-1){let l=s.shape.slice(1),c=o.slice(1);for(let u=0;u<l.length;++u){let h=l[u],d=c[u];if(d!=null&&h!==d)throw new V(`A target Tensor with shape ${s.shape} was passed for an output of shape ${o}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function S3(e,t,n,r=!0,a=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new V(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new V(`The model expects ${t.length} ${a} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new V(`Error when checking ${a}: expected ${t[i]} to have ${n[i].length} dimension(s), but got array with shape ${JSON.stringify(o.shape)}`);for(let l=0;l<n[i].length;++l){if(l===0&&!r)continue;let c=o.shape[l],u=n[i][l];if(u!=null&&u!==c)throw new V(`Error when checking ${a}: expected ${t[i]} to have shape ${JSON.stringify(n[i])} but got array with shape ${JSON.stringify(o.shape)}.`)}}}function See(e,t){if(e==null||Array.isArray(e)&&e.length===0)return t.map(r=>[]);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 a of t){let s=n.hasOwnProperty(a)?n[a]:[];Array.isArray(s)||(s=[s]),r.push(s)}return r}}var Tee="layers-model",ra=class extends Ur{constructor(e){super(e);this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new V("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).");uee(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=aee(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof na))throw new V("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 s in e.loss)if(this.outputNames.indexOf(s)===-1)throw new V(`Unknown entry in loss dictionary: "${s}". Only expected the following keys: ${this.outputNames}`);for(let s of this.outputNames)e.loss[s]==null&&console.warn(`Output "${s}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${s} during training`),t.push(ny(e.loss[s]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new V(`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(s=>ny(s))}else{let s=ny(e.loss);this.outputs.forEach(i=>{t.push(s)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let s=0;s<this.outputs.length;++s){let i=this.internalOutputShapes[s],o=this.outputNames[s];this.feedOutputNames.push(o),this.feedOutputShapes.push(i),this.feedLossFns.push(this.lossFunctions[s])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],mi("loss",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=this.lossFunctions[s];this.outputs.length>1&&(this.metricsTensors.push([i,s]),this.metricsNames.push(this.outputNames[s]+"_loss"))}});let r=See(e.metrics,this.outputNames),a=(s,i,o)=>{this.outputNames.length>1&&(i=this.outputNames[s]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([o,s])};mi("metric",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=r[s];(o=>{let l="",c,u,h;for(let d of o){if(typeof d=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(d)!==-1){let f=this.internalOutputShapes[s];f[f.length-1]===1||this.lossFunctions[s]===Fp?["accuracy","acc"].indexOf(d)!==-1?u=ry:["crossentropy","ce"].indexOf(d)!==-1&&(u=h3):this.lossFunctions[s]===Rp?["accuracy","acc"].indexOf(d)!==-1?u=d3:["crossentropy","ce"].indexOf(d)!==-1&&(u=p3):["accuracy","acc"].indexOf(d)!==-1?u=ay:["crossentropy","ce"].indexOf(d)!==-1&&(u=sy);let m;["accuracy","acc"].indexOf(d)!==-1?m="acc":["crossentropy","ce"].indexOf(d)!==-1&&(m="ce"),h=u,c=l+m}else h=ree(d),c=l+Dp(d);let p;mi(c,()=>{p=h}),a(s,c,p)}})(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(e,t,n={}){let r=n.batchSize==null?32:n.batchSize;uy(r);let a=!0,s=this.standardizeUserDataXY(e,t,a,r);try{let i=s[0].concat(s[1]);this.makeTestFunction();let o=this.testFunction,l=this.testLoop(o,i,r,n.verbose,n.steps);return gn(l)}finally{xi(s[0],e),xi(s[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),_ee(this,e,t)}checkNumSamples(e,t,n,r="steps"){let a;if(n!=null){if(a=null,t!=null)throw new V(`If ${r} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?a=e[0].shape[0]:a=e.shape[0];else throw new V(`Either the input data should have a defined shape, or ${r} shoud be specified.`);return a}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new V("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],a=this.retrieveSymbolicTensors(r),s=new gi;if(e instanceof j&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new V(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let o=0;o<this.inputs.length;++o)s.add(this.inputs[o],e[o])}else for(let o of this.inputs){let l=e[o.name];if(l==null)throw new V(`No value is provided for the model's input ${o.name}`);s.add(o,l)}let i=_c(a,s);return n?i:i[0]}retrieveSymbolicTensors(e){let t=di(null,e.length),n=e.length;for(let r of this.layers){let a=Array.isArray(r.output)?r.output:[r.output],s=a.map(i=>i.name);for(let i=0;i<e.length;++i){let o=s.indexOf(e[i]);if(o!==-1&&(t[i]=a[o],n--),n===0)break}if(n===0)break}if(n>0){let r=[];throw t.forEach((a,s)=>{a==null&&r.push(e[s])}),new V(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(r)}`)}return t}predictLoop(e,t=32,n=!1){return U(()=>{let r=this.checkNumSamples(e);if(n)throw new ze("Verbose predictLoop() is not implemented yet.");let a=hy(r,t),s=this.outputs.map(i=>[]);for(let i=0;i<a.length;++i)U(()=>{let o=a[i][0],l=a[i][1],c=bc(e,o,l),u=[];if(Array.isArray(c))for(let d=0;d<c.length;++d)u.push({key:this.inputs[d],value:c[d]});else u.push({key:this.inputs[0],value:c});let h=new gi(u);return _c(this.outputs,h)}).forEach((o,l)=>s[l].push(o));return gn(s.map(i=>dt(i,0)))})}predict(e,t={}){let n=k3(e);S3(n,this.inputNames,this.feedInputShapes,!1);try{let r=t.batchSize==null?32:t.batchSize;return uy(r),this.predictLoop(n,r)}finally{xi(n,e)}}predictOnBatch(e){S3(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 _r("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let a=[];for(let s=0;s<this.feedOutputShapes.length;++s){let i=this.feedOutputShapes[s];this.feedLossFns[s]===Rp?a.push(i.slice(0,i.length-1).concat([1])):a.push(i)}if(e=N3(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=N3(t,this.feedOutputNames,a,!1,"target"),Iee(e,t,null),Nee(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&r!=null&&r>0&&e[0].shape[0]%r!=0)throw new V(`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,a=!0,s){let[i,o]=this.standardizeUserDataXY(e,t,a,s);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(r!=null){let c=x3(r,this.outputNames);l=[];for(let u=0;u<c.length;++u)l.push(await w3(o[u],null,c[u]))}return[i,o,l]}testLoop(e,t,n,r=0,a){return U(()=>{let s=this.checkNumSamples(t,n,a,"steps"),i=[];if(r>0)throw new ze("Verbose mode is not implemented yet.");if(a!=null)throw new ze("steps mode in testLoop() is not implemented yet");{let o=hy(s,n),l=nn(br(0,s));for(let c=0;c<o.length;++c){let u=o[c][0],h=o[c][1],d=Ai(l,u,h-u),p=cy(t,d),f=e(p);if(c===0)for(let m=0;m<f.length;++m)i.push(Ee(0));for(let m=0;m<f.length;++m){let A=f[m];i[m]=oe(i[m],W(h-u,A))}}for(let c=0;c<i.length;++c)i[c]=Te(i[c],s)}return i})}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let r=e[n],a=r;Db(e,r)>1&&(a+=`_${Db(e.slice(0,n),r)}`),t.push(a)}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),a=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),s=[],i=()=>{let c=[];for(let p=0;p<this.inputs.length;++p)c.push({key:this.inputs[p],value:n[p]});let u=new gi(c),h=_c(this.outputs,u,{training:!0}),d;for(let p=0;p<this.lossFunctions.length;++p){let f=this.lossFunctions[p](r[p],h[p]);a[p]!=null&&(f=mee(f,a[p]));let m=It(f);t.push(m),p===0?d=f:d=oe(d,f)}for(let p=0;p<this.metricsTensors.length;++p){let f;if(this.outputs.length>1&&p<this.outputs.length)f=t[p];else{let m=this.metricsTensors[p][0],A=this.metricsTensors[p][1];f=It(m(r[A],h[A]))}jt(f),s.push(f)}return d=It(d),this.calculateLosses().forEach(p=>{d=oe(d,p)}),d},o=this.collectedTrainableWeights.map(c=>c.read()),l=!0;return[this.optimizer_.minimize(i,l,o)].concat(s)}}makeTestFunction(){this.testFunction=e=>U(()=>{let t=[],n,r=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let l=0;l<this.inputs.length;++l)s.push({key:this.inputs[l],value:r[l]});let i=new gi(s),o=_c(this.outputs,i);for(let l=0;l<this.lossFunctions.length;++l){let c=this.lossFunctions[l],u=It(c(a[l],o[l]));l===0?n=u:n=oe(n,u),t.push(n)}for(let l=0;l<this.metricsTensors.length;++l){let c=this.metricsTensors[l][0],u=this.metricsTensors[l][1],h=It(c(a[u],o[u]));t.push(h)}return t})}async fit(e,t,n={}){return vee(this,e,t,n)}async fitDataset(e,t){return xee(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),r=n[0],a=n[1],s=this.makeTrainFunction()(r.concat(a)),i=[];for(let o of s){let l=await o.data();i.push(l[0])}return $e(s),gn(i)}getNamedWeights(e){let t=[],n=e!=null&&e.trainableOnly,r=n?this.trainableWeights:this.weights,a=this.getWeights(n);for(let s=0;s<r.length;++s)n&&!r[s].trainable||t.push({name:r[s].originalName,tensor:a[s]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(e.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let t=qh().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-qh().numTensors}return e}getLossIdentifiers(){let e;if(typeof this.loss=="string")e=ua(this.loss);else if(Array.isArray(this.loss)){for(let t of this.loss)if(typeof t!="string")throw new Error("Serialization of non-string loss is not supported.");e=this.loss.map(t=>ua(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]=ua(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[ua(Dp(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>ua(Dp(e)));{let e={};for(let t in this.metrics)e[t]=ua(Dp(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=wc(e.optimizer_config),n=vr(t),r;if(typeof e.loss=="string")r=pi(e.loss);else if(Array.isArray(e.loss))r=e.loss.map(s=>pi(s));else if(e.loss!=null){r={};for(let s in e.loss)r[s]=pi(e.loss[s])}let a;if(Array.isArray(e.metrics))a=e.metrics.map(s=>pi(s));else if(e.metrics!=null){a={};for(let s in e.metrics)a[s]=pi(e.metrics[s])}this.compile({loss:r,metrics:a,optimizer:n})}async save(e,t){if(typeof e=="string"){let i=fn.getSaveHandlers(e);if(i.length===0)throw new V(`Cannot find any save handlers for URL '${e}'`);if(i.length>1)throw new V(`Found more than one (${i.length}) save handlers for URL '${e}'`);e=i[0]}if(e.save==null)throw new V("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await fn.encodeWeights(this.getNamedWeights(t)),r=!1,a=null,s={modelTopology:this.toJSON(a,r),format:Tee,generatedBy:`TensorFlow.js tfjs-layers v${am}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){s.trainingConfig=this.getTrainingConfig();let i="optimizer",{data:o,specs:l}=await fn.encodeWeights(await this.optimizer.getWeights(),i);n.specs.push(...l),n.data=fn.concatenateArrayBuffers([n.data,o])}if(this.userDefinedMetadata!=null){let i=!0;m3(this.userDefinedMetadata,this.name,i),s.userDefinedMetadata=this.userDefinedMetadata}return s.weightData=n.data,s.weightSpecs=n.specs,e.save(s)}setUserDefinedMetadata(e){m3(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};ra.className="Model";se.registerClass(ra);var T3=class extends ra{};T3.className="Functional";se.registerClass(T3);async function Eee(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let r=wc(n),a=vr(r,t);if(e.weightsManifest!=null){let s=await fn.loadWeights(e.weightsManifest,e.pathPrefix,a.weights.map(o=>o.originalName)),i={};for(let o of a.weights)i[o.originalName]=s[o.originalName];a.loadWeights(i),$e(s)}return a}async function Ree(e,t){if(t==null&&(t={}),typeof e=="string"){let n=fn.getLoadHandlers(e,t);if(n.length===0)n.push(fn.browserHTTPRequest(e,t));else if(n.length>1)throw new V(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return Cee(e,void 0,t)}async function Cee(e,t,n){if(n==null&&(n={}),e.load==null)throw new V("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let r=await e.load(),a=r.modelTopology;a.model_config!=null&&(a=a.model_config);let s=n.strict==null?!0:n.strict,i=r.weightData!=null&&r.weightSpecs!=null&&s,o=vr(wc(a),t,i),l=r.trainingConfig;if(l!=null&&o.loadTrainingConfig(l),r.userDefinedMetadata!=null&&o.setUserDefinedMetadata(r.userDefinedMetadata),r.weightData!=null){if(r.weightSpecs==null)throw new V("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:c,optimizerWeights:u}=Fee(r.weightData,r.weightSpecs);o.loadWeights(c,s),o.optimizer!=null&&u.length>0&&await o.optimizer.setWeights(u),$e(c),$e(u.map(h=>h.tensor))}return o}function Fee(e,t){let n=fn.decodeWeights(e,t),r={},a=[];return t.forEach(s=>{s.group==="optimizer"?a.push({name:s.name,tensor:n[s.name]}):r[s.name]=n[s.name]}),{modelWeights:r,optimizerWeights:a}}var Xo=class extends ra{constructor(e){super({inputs:[],outputs:[]});if(e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:Ip("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(t=>t<0))throw new V(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Xo||e instanceof ra,n;if(t){if(n=e,n.outputs.length!==1)throw new V("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 V("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 V("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let r=a3({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 V(`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 V("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=r3(this.outputs[0])}this.inboundNodes=[],new Tp({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:di(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(ft(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 ra({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 _r("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 _r("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 _r("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 _r("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 a,s={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new V("Legacy serialization format not supported yet.");a=t}else k.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."),a=t.layers,delete t.layers,s=t;let i=new e(s);if(!(i instanceof Xo))throw new ze(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let o of a){let l=vr(o,void 0,r);r&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(e){if(this.model==null)throw new V("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 V("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}}};Xo.className="Sequential";se.registerClass(Xo);function q4(e){return new ra(e)}function X4(e){return new Xo(e)}function K4(e,t){return t==null&&(t={}),Ree(e,t)}function y0(e){return a3(e)}function Z4(e,t){or.registerCallbackConstructor(e,t)}var Mn=class extends se.Serializable{getConfig(){return{}}},E3=class extends Mn{apply(e,t=1){return fY(e,t)}};E3.className="elu";se.registerClass(E3);var C3=class extends Mn{apply(e){return hd(e)}};C3.className="selu";se.registerClass(C3);var R3=class extends Mn{apply(e){return Fr(e)}};R3.className="relu";se.registerClass(R3);var F3=class extends Mn{apply(e){return U(()=>qs(6,Fr(e)))}};F3.className="relu6";se.registerClass(F3);var M3=class extends Mn{apply(e){return e}};M3.className="linear";se.registerClass(M3);var $3=class extends Mn{apply(e){return Qn(e)}};$3.className="sigmoid";se.registerClass($3);var D3=class extends Mn{apply(e){return AY(e)}};D3.className="hardSigmoid";se.registerClass(D3);var O3=class extends Mn{apply(e){return Uo(e)}};O3.className="softplus";se.registerClass(O3);var z3=class extends Mn{apply(e){return mY(e)}};z3.className="softsign";se.registerClass(z3);var P3=class extends Mn{apply(e){return Wo(e)}};P3.className="tanh";se.registerClass(P3);var py=class extends Mn{apply(e,t=-1){return Fu(e,t)}};py.className="softmax";se.registerClass(py);var L3=class extends Mn{apply(e,t=-1){return rd(e,t)}};L3.className="logSoftmax";se.registerClass(L3);var W3=class extends Mn{apply(e,t=1){return U(()=>Qn(e.mul(t)).mul(e))}};W3.className="swish";se.registerClass(W3);function Pa(e){return e.getClassName()}function fy(e,t={}){return hc(e,se.SerializationMap.getMap().classNameMap,t,"activation")}function La(e){if(e==null){let t={};return t.className="linear",t.config={},fy(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},fy(t)}else return e instanceof Mn?e:fy(e)}function my(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 B3=class extends se.Serializable{},vc=class extends B3{constructor(e){super();my(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 U(()=>{let t=Rt([1]);return this.hasL1&&(t=oe(t,Ce(W(this.l1,Pt(e))))),this.hasL2&&(t=oe(t,Ce(W(this.l2,Ac(e))))),t.asScalar()})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};vc.className="L1L2";se.registerClass(vc);function Mee(e){return my(e),new vc({l1:e!=null?e.l1:null,l2:0})}function $ee(e){return my(e),new vc({l2:e!=null?e.l2:null,l1:0})}var V3={l1l2:"L1L2"};function mt(e){return CA(e)}function U3(e,t={}){return hc(e,se.SerializationMap.getMap().classNameMap,t,"regularizer")}function _t(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in V3?V3[e]:e,config:{}};return U3(t)}else return e instanceof B3?e:U3(e)}var Ay=class extends Ze{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Le(e);let n=Fr(e);return this.maxValue!=null&&(n=mn(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};Ay.className="ReLU";se.registerClass(Ay);var yy=class extends Ze{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=Le(e);return ku(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};yy.className="LeakyReLU";se.registerClass(yy);var gy=class extends Ze{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=wt(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=_t(e.alphaRegularizer),this.alphaConstraint=Ut(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 V(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=ft(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<e.length;++r)n[r]=e[r];this.inputSpec=[new Gt({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=Le(e),Eu(e,this.alpha.read())}getConfig(){let e={alphaInitializer:St(this.alphaInitializer),alphaRegularizer:mt(this.alphaRegularizer),alphaConstraint:Vt(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};gy.className="PReLU";se.registerClass(gy);var xy=class extends Ze{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA=1,e==null&&(e={}),e.alpha!=null&&e.alpha!==this.DEFAULT_ALPHA)throw new ze(`Non-default alpha value (${e.alpha}) is not supported by the ELU layer yet.`);this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Le(e);return Bo(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};xy.className="ELU";se.registerClass(xy);var wy=class extends Ze{constructor(e){super(e==null?{}:e);this.DEFAULT_THETA=1,e==null&&(e={}),this.theta=e.theta==null?this.DEFAULT_THETA:e.theta}call(e,t){let n=Le(e);return n.mul(fc(n.greater(this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};wy.className="ThresholdedReLU";se.registerClass(wy);var _y=class extends Ze{constructor(e){super(e==null?{}:e);this.DEFAULT_AXIS=1,e==null&&(e={}),this.softmax=new py().apply,this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis}call(e,t){let n=Le(e);return this.softmax(n,this.axis)}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};_y.className="Softmax";se.registerClass(_y);function Nl(e,t,n){if(typeof e=="number")return di(e,t);if(e.length!==t)throw new V(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let r=0;r<t;++r){let a=e[r];if(!cY(a))throw new V(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${a}`)}return e}function kr(e,t,n,r,a=1){if(e==null)return e;let s=t+(t-1)*(a-1),i;return n==="same"?i=e:i=e-s+1,Math.floor((i+r-1)/r)}function zp(e,t,n,r){if(e==null)return null;if(r==="valid")e=e*t+Oa([n-t,0]);else if(r==="same")e=e*t;else throw new V(`Unsupport padding mode: ${r}.`);return e}function by(e,t){return U(()=>(Ft(t),t==="channelsFirst"?st(e,[0,2,3,1]):e))}function H3(e,t){return U(()=>(Ft(t),t==="channelsFirst"?st(e,[0,2,3,4,1]):e))}function Dee(e,t,n,r=1,a="valid",s,i=1){return U(()=>{if(s==null&&(s=wr()),Ft(s),e.shape.length!==3)throw new V(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new V(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new V(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(e=st(e,[0,2,1])),a==="causal")throw new ze("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=Jh(e,t,r,a==="same"?"same":"valid","NWC",i);return n!=null&&(o=Vr(o,n)),o})}function j3(e,t,n,r=[1,1],a="valid",s,i,o=null){return U(()=>{if(s==null&&(s=wr()),Ft(s),e.rank!==3&&e.rank!==4)throw new V(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new V(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=by(e,s);if(a==="causal")throw new ze("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=ka.conv2d({x:l,filter:t,strides:r,pad:a==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),s==="channelsFirst"&&(l=st(l,[0,3,1,2])),l})}function Oee(e,t,n,r=[1,1,1],a="valid",s,i){return U(()=>{if(s==null&&(s=wr()),Ft(s),e.rank!==4&&e.rank!==5)throw new V(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new V(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=H3(e,s);if(a==="causal")throw new ze("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=Rf(o,t,r,a==="same"?"same":"valid","NDHWC",i),n!=null&&(o=Vr(o,n)),s==="channelsFirst"&&(o=st(o,[0,4,1,2,3])),o})}var vy=class extends Ze{constructor(e,t){super(t);if(this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",vy.verifyArgs(t),this.rank=e,Kt(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new ze(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Nl(t.kernelSize,e,"kernelSize"),this.strides=Nl(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,Kn(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Ft(this.dataFormat),this.activation=La(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=wt(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Ut(t.biasConstraint),this.biasRegularizer=_t(t.biasRegularizer),this.activityRegularizer=_t(t.activityRegularizer),this.dilationRate=Nl(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new V(`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 V(`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 V(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(Wr("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!FA(e.kernelSize,"number",1,3))throw new V(`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:Pa(this.activation),useBias:this.useBias,biasInitializer:St(this.biasInitializer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),biasConstraint:Vt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},kc=class extends vy{constructor(e,t){super(e,t);this.kernel=null,kc.verifyArgs(t),this.filters=t.filters,Kt(this.filters,"filters"),this.kernelInitializer=wt(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Ut(t.kernelConstraint),this.kernelRegularizer=_t(t.kernelRegularizer)}build(e){e=ft(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new V(`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 U(()=>{e=Le(e);let n,r=this.bias==null?null:this.bias.read(),a=zb(this.activation.getClassName());if(a!=null&&this.rank===2)n=j3(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate,a);else{if(this.rank===1)n=Dee(e,this.kernel.read(),r,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=j3(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=Oee(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new ze("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=ft(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let a=0;a<n.length;++a){let s=kr(n[a],this.kernelSize[a],this.padding,this.strides[a],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[a]);t.push(s)}let r=[e[0]];return this.dataFormat==="channelsLast"?(r=r.concat(t),r.push(this.filters)):(r.push(this.filters),r=r.concat(t)),r}getConfig(){let e={filters:this.filters,kernelInitializer:St(this.kernelInitializer),kernelRegularizer:mt(this.kernelRegularizer),kernelConstraint:Vt(this.kernelConstraint)},t=super.getConfig();return Object.assign(e,t),e}static verifyArgs(e){if(!("filters"in e)||typeof e.filters!="number"||e.filters<1)throw new V(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},Ic=class extends kc{constructor(e){super(2,e);Ic.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!FA(e.kernelSize,"number",1,2))throw new V(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};Ic.className="Conv2D";se.registerClass(Ic);var Pp=class extends kc{constructor(e){super(3,e);Pp.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 V(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};Pp.className="Conv3D";se.registerClass(Pp);var ky=class extends Ic{constructor(e){super(e);if(this.inputSpec=[new Gt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new V(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=ft(e),e.length!==4)throw new V("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 V("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 Gt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return U(()=>{let n=Le(e);if(n.shape.length!==4)throw new V(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,a=r[0],s,i;this.dataFormat==="channelsFirst"?(s=2,i=3):(s=1,i=2);let o=r[s],l=r[i],c=this.kernelSize[0],u=this.kernelSize[1],h=this.strides[0],d=this.strides[1],p=zp(o,h,c,this.padding),f=zp(l,d,u,this.padding),m=[a,p,f,this.filters];this.dataFormat!=="channelsLast"&&(n=st(n,[0,2,3,1]));let A=Yh(n,this.kernel.read(),m,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(A=st(A,[0,3,1,2])),this.bias!=null&&(A=Vr(A,this.bias.read(),this.dataFormat)),this.activation!=null&&(A=this.activation.apply(A)),A})}computeOutputShape(e){e=ft(e);let t=e.slice(),n,r,a;this.dataFormat==="channelsFirst"?(n=1,r=2,a=3):(n=3,r=1,a=2);let s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[r]=zp(t[r],o,s,this.padding),t[a]=zp(t[a],l,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};ky.className="Conv2DTranspose";se.registerClass(ky);var G3=class extends kc{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 V("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new V("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 V(`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=wt(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=_t(t.depthwiseRegularizer),this.depthwiseConstraint=Ut(t.depthwiseConstraint),this.pointwiseInitializer=wt(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=_t(t.pointwiseRegularizer),this.pointwiseConstraint=Ut(t.pointwiseConstraint)}build(e){if(e=ft(e),e.length<this.rank+2)throw new V(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(e)}`);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null||e[t]<0)throw new V(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],r=this.kernelSize.concat([n,this.depthMultiplier]),a=[];for(let i=0;i<this.rank;++i)a.push(1);a.push(n*this.depthMultiplier,this.filters);let s=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",r,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,s,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",a,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,s,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,s,this.biasConstraint):this.bias=null,this.inputSpec=[new Gt({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return U(()=>{e=Le(e);let n;if(this.rank===1)throw new ze("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=st(e,[0,2,3,1])),n=Hf(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Vr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=st(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=St(this.depthwiseInitializer),e.pointwiseInitializer=St(this.pointwiseInitializer),e.depthwiseRegularizer=mt(this.depthwiseRegularizer),e.pointwiseRegularizer=mt(this.pointwiseRegularizer),e.depthwiseConstraint=Vt(this.depthwiseConstraint),e.pointwiseConstraint=Vt(this.pointwiseConstraint),e}};G3.className="SeparableConv";var Iy=class extends G3{constructor(e){super(2,e)}};Iy.className="SeparableConv2D";se.registerClass(Iy);var Lp=class extends kc{constructor(e){super(1,e);Lp.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"&&!FA(e.kernelSize,"number",1,1))throw new V(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};Lp.className="Conv1D";se.registerClass(Lp);var Ny=class extends Ze{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 U(()=>{if(e=Le(e),this.dataFormat==="channelsLast"){let n=mp(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return mp(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=mp(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return mp(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}};Ny.className="Cropping2D";se.registerClass(Ny);var Sy=class extends Ze{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,Ft(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,oY(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 U(()=>{let n=Le(e),r=n.shape;if(this.dataFormat==="channelsFirst"){n=st(n,[0,2,3,1]);let a=this.size[0]*r[2],s=this.size[1]*r[3],i=this.interpolation==="nearest"?n.resizeNearestNeighbor([a,s]):n.resizeBilinear([a,s]);return st(i,[0,3,1,2])}else{let a=this.size[0]*r[1],s=this.size[1]*r[2];return this.interpolation==="nearest"?n.resizeNearestNeighbor([a,s]):n.resizeBilinear([a,s])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};Sy.className="UpSampling2D";se.registerClass(Sy);function zee(e,t,n=[1,1],r="valid",a,s){return U(()=>{a==null&&(a=wr()),Ft(a);let i=by(e,a);if(e.rank!==4)throw new V(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new V(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=js(i,t,n,r==="same"?"same":"valid","NHWC",s),a==="channelsFirst"&&(i=st(i,[0,3,1,2])),i})}var Ty=class extends vy{constructor(e){super(2,e);this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=wt(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Ut(e.depthwiseConstraint),this.depthwiseRegularizer=_t(e.depthwiseRegularizer)}build(e){if(e=ft(e),e.length<4)throw new V(`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 V(`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 U(()=>{e=Le(e);let n=zee(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Vr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=ft(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,a=kr(t,this.kernelSize[0],this.padding,this.strides[0]),s=kr(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],r,a,s]:[e[0],a,s,r]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=St(this.depthwiseInitializer),e.depthwiseRegularizer=mt(this.depthwiseRegularizer),e.depthwiseConstraint=Vt(this.depthwiseRegularizer),e}};Ty.className="DepthwiseConv2D";se.registerClass(Ty);function q3(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new V("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 a(s){return s==null||Array.isArray(s)?s:[s]}return t=a(t),n=a(n),{inputs:e,initialState:t,constants:n}}function X3(e,t,n,r=!1,a,s,i=!1,o=!1){return U(()=>{let l=t.shape.length;if(l<3)throw new V(`Input should be at least 3D, but is ${l}D.`);let c=[1,0].concat(br(2,l));if(t=st(t,c),s!=null)throw new ze("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),a!=null&&(a=a.asType("bool").asType("float32"),a.rank===l-1&&(a=Un(a,-1)),a=st(a,c)),r&&(t=Nn(t,0),a!=null&&(a=Nn(a,0)));let u=[],h,d=n,p=t.shape[0],f=nr(t),m;a!=null&&(m=nr(a));for(let y=0;y<p;++y){let g=f[y],w=U(()=>e(g,d));if(a==null)h=w[0],d=w[1];else{let x=U(()=>{let _=m[y],b=In(_).sub(_),T=w[0].mul(_).add(d[0].mul(b)),S=d.map((N,C)=>w[1][C].mul(_).add(N.mul(b)));return{output:T,newStates:S}});h=x.output,d=x.newStates}o&&u.push(h)}let A;return o&&(A=Sn(u,1)),[h,A,d]})}var $r=class extends Ze{constructor(e){super(e);let t;if(e.cell==null)throw new V("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new Wp({cells:e.cell}):t=e.cell,t.stateSize==null)throw new V("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 Gt({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 br(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){YA(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 a=[];for(let s of t)a.push([e[0],s]);return[r].concat(a)}else return r}computeMask(e,t){return U(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let r=this.states.map(a=>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;n<e;++n)t.push(null);return t}else return this.states_}set states(e){this.states_=e}build(e){let t=null;if(this.numConstants!=null)throw new ze("Constants support is not implemented in RNN yet.");YA(e)&&(e=e[0]),e=e;let n=this.stateful?e[0]:null,r=e.slice(2);this.inputSpec[0]=new Gt({shape:[n,null,...r]});let a=[e[0]].concat(e.slice(2));if(t!=null)throw new ze("Constants support is not implemented in RNN yet.");this.cell.build(a);let s;if(Array.isArray(this.cell.stateSize)?s=this.cell.stateSize:s=[this.cell.stateSize],this.stateSpec!=null){if(!k.arraysEqual(this.stateSpec.map(i=>i.shape[i.shape.length-1]),s))throw new V(`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=s.map(i=>new Gt({shape:[null,i]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){U(()=>{if(!this.stateful)throw new la("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new V("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=>Rt([n,r])):this.states_=[Rt([n,this.cell.stateSize])];else if(e==null)$e(this.states_),this.keptStates!=null&&($e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>Rt([n,r])):this.states_[0]=Rt([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new V(`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()):$e(this.states_);for(let r=0;r<this.states_.length;++r){let a=e[r],s=Array.isArray(this.cell.stateSize)?this.cell.stateSize[r]:this.cell.stateSize,i=[n,s];if(!k.arraysEqual(a.shape,i))throw new V(`State ${r} is incompatible with layer ${this.name}: expected shape=${i}, received shape=${a.shape}`);this.states_[r]=a}}this.states_=this.states_.map(r=>jt(r.clone()))})}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let a=q3(e,n,r,this.numConstants);e=a.inputs,n=a.initialState,r=a.constants;let s=[],i=[];if(n!=null){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(let o of n)this.stateSpec.push(new Gt({shape:o.shape}));i=i.concat(this.stateSpec)}if(r!=null&&(t.constants=r,s=s.concat(r),this.numConstants=r.length),s[0]instanceof yr){let o=[e].concat(s),l=this.inputSpec.concat(i),c=this.inputSpec;this.inputSpec=l;let u=super.apply(o,t);return this.inputSpec=c,u}else return super.apply(e,t)}call(e,t){return U(()=>{let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;e=Le(e),a==null&&(this.stateful?a=this.states_:a=this.getInitialState(e));let s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(a.length!==s)throw new V(`RNN Layer has ${s} state(s) but was passed ${a.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:r},o=X3((d,p)=>{let f=this.cell.call([d].concat(p),i);return[f[0],f.slice(1)]},e,a,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],c=o[1],u=o[2];this.stateful&&this.resetStates(u,r);let h=this.returnSequences?c:l;return this.returnState?[h].concat(u):h})}getInitialState(e){return U(()=>{let t=Rt(e.shape);return t=Ce(t,[1,2]),t=mc(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?PA(t,[1,n]):t):this.cell.stateSize>1?[PA(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()===$r.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let r=t.cell,a=vr(r,n);return new e(Object.assign(t,{cell:a}))}};$r.className="RNN";se.registerClass($r);var gc=class extends Ze{},Bp=class extends gc{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,Kt(this.units,"units"),this.activation=La(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=wt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=_t(e.kernelRegularizer),this.recurrentRegularizer=_t(e.recurrentRegularizer),this.biasRegularizer=_t(e.biasRegularizer),this.kernelConstraint=Ut(e.kernelConstraint),this.recurrentConstraint=Ut(e.recurrentConstraint),this.biasConstraint=Ut(e.biasConstraint),this.dropout=bl([1,Oa([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=bl([1,Oa([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=ft(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 U(()=>{if(e=e,e.length!==2)throw new V(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=t.training==null?!1:t.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=Wa({ones:()=>In(e),rate:this.dropout,training:r})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=Wa({ones:()=>In(n),rate:this.recurrentDropout,training:r}));let a,s=this.dropoutMask,i=this.recurrentDropoutMask;s!=null?a=Br(W(e,s),this.kernel.read()):a=Br(e,this.kernel.read()),this.bias!=null&&(a=Vr(a,this.bias.read())),i!=null&&(n=W(n,i));let o=oe(a,Br(n,this.recurrentKernel.read()));return this.activation!=null&&(o=this.activation.apply(o)),[o,o]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Pa(this.activation),useBias:this.useBias,kernelInitializer:St(this.kernelInitializer),recurrentInitializer:St(this.recurrentInitializer),biasInitializer:St(this.biasInitializer),kernelRegularizer:mt(this.kernelRegularizer),recurrentRegularizer:mt(this.recurrentRegularizer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),kernelConstraint:Vt(this.kernelConstraint),recurrentConstraint:Vt(this.recurrentConstraint),biasConstraint:Vt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};Bp.className="SimpleRNNCell";se.registerClass(Bp);var Ey=class extends $r{constructor(e){e.cell=new Bp(e),super(e)}call(e,t){return U(()=>{this.cell.dropoutMask!=null&&($e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&($e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return new e(t)}};Ey.className="SimpleRNN";se.registerClass(Ey);var Vp=class extends gc{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 V("GRUCell does not support reset_after parameter set to true.");this.units=e.units,Kt(this.units,"units"),this.activation=La(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=La(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=wt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=_t(e.kernelRegularizer),this.recurrentRegularizer=_t(e.recurrentRegularizer),this.biasRegularizer=_t(e.biasRegularizer),this.kernelConstraint=Ut(e.kernelConstraint),this.recurrentConstraint=Ut(e.recurrentConstraint),this.biasConstraint=Ut(e.biasConstraint),this.dropout=bl([1,Oa([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=bl([1,Oa([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=ft(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 U(()=>{if(e=e,e.length!==2)throw new V(`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],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=Wa({ones:()=>In(e),rate:this.dropout,training:n,count:3})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=Wa({ones:()=>In(r),rate:this.recurrentDropout,training:n,count:3}));let a=this.dropoutMask,s=this.recurrentDropoutMask,i,o,l;0<this.dropout&&this.dropout<1&&(e=W(e,a[0]));let c=Br(e,this.kernel.read());this.useBias&&(c=Vr(c,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(r=W(r,s[0]));let u=this.recurrentKernel.read(),[h,d]=sn(u,[2*this.units,this.units],u.rank-1),p=Br(r,h),[f,m,A]=sn(c,3,c.rank-1),[y,g]=sn(p,2,p.rank-1);i=this.recurrentActivation.apply(oe(f,y)),o=this.recurrentActivation.apply(oe(m,g));let w=Br(W(o,r),d);l=this.activation.apply(oe(A,w));let x=oe(W(i,r),W(oe(1,kt(i)),l));return[x,x]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Pa(this.activation),recurrentActivation:Pa(this.recurrentActivation),useBias:this.useBias,kernelInitializer:St(this.kernelInitializer),recurrentInitializer:St(this.recurrentInitializer),biasInitializer:St(this.biasInitializer),kernelRegularizer:mt(this.kernelRegularizer),recurrentRegularizer:mt(this.recurrentRegularizer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),kernelConstraint:Vt(this.kernelConstraint),recurrentConstraint:Vt(this.recurrentConstraint),biasConstraint:Vt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign({},e,t)}};Vp.className="GRUCell";se.registerClass(Vp);var Cy=class extends $r{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Vp(e),super(e)}call(e,t){return U(()=>{this.cell.dropoutMask!=null&&($e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&($e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};Cy.className="GRU";se.registerClass(Cy);var Nc=class extends gc{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,Kt(this.units,"units"),this.activation=La(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=La(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=wt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=_t(e.kernelRegularizer),this.recurrentRegularizer=_t(e.recurrentRegularizer),this.biasRegularizer=_t(e.biasRegularizer),this.kernelConstraint=Ut(e.kernelConstraint),this.recurrentConstraint=Ut(e.recurrentConstraint),this.biasConstraint=Ut(e.biasConstraint),this.dropout=bl([1,Oa([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=bl([1,Oa([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=ft(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 a=this.biasInitializer,s=this.units;r=new(t=class extends ir{apply(i,o){let l=a.apply([s]),c=new yp().apply([s]),u=a.apply([s*2]);return Gb(Gb(l,c),u)}},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 U(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new V(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],a=e[2];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=Wa({ones:()=>In(e),rate:this.dropout,training:n,count:4})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=Wa({ones:()=>In(r),rate:this.recurrentDropout,training:n,count:4}));let s=this.dropoutMask,i=this.recurrentDropoutMask,o,l,c,u;0<this.dropout&&this.dropout<1&&(e=W(e,s[0]));let h=Br(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(r=W(r,i[0])),h=oe(h,Br(r,this.recurrentKernel.read())),this.useBias&&(h=Vr(h,this.bias.read()));let[d,p,f,m]=sn(h,4,h.rank-1);o=this.recurrentActivation.apply(d),l=this.recurrentActivation.apply(p),c=oe(W(l,a),W(o,this.activation.apply(f))),u=this.recurrentActivation.apply(m);let A=W(u,this.activation.apply(c));return[A,A,c]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Pa(this.activation),recurrentActivation:Pa(this.recurrentActivation),useBias:this.useBias,kernelInitializer:St(this.kernelInitializer),recurrentInitializer:St(this.recurrentInitializer),biasInitializer:St(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:mt(this.kernelRegularizer),recurrentRegularizer:mt(this.recurrentRegularizer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),kernelConstraint:Vt(this.kernelConstraint),recurrentConstraint:Vt(this.recurrentConstraint),biasConstraint:Vt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign({},e,t)}};Nc.className="LSTMCell";se.registerClass(Nc);var Ry=class extends $r{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Nc(e),super(e)}call(e,t){return U(()=>{this.cell.dropoutMask!=null&&($e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&($e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};Ry.className="LSTM";se.registerClass(Ry);var Wp=class extends gc{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 U(()=>{e=e;let n=e.slice(1),r=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?r.push(n.splice(0,i.stateSize.length)):r.push(n.splice(0,1));r.reverse();let a=[],s;for(let i=0;i<this.cells.length;++i){let o=this.cells[i];n=r[i],i===0?s=[e[0]].concat(n):s=[s[0]].concat(n),s=o.call(s,t),a.push(s.slice(1))}n=[];for(let i of a.slice().reverse())n.push(...i);return[s[0]].concat(n)})}build(e){YA(e)&&(e=e[0]),e=e;let t;this.cells.forEach((n,r)=>{mi(`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=r=>({className:r.getClassName(),config:r.getConfig()}),n={cells:this.cells.map(t)};return Object.assign({},e,n)}static fromConfig(e,t,n={}){let r=[];for(let a of t.cells)r.push(vr(a,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 QA(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,a=e.splice(r);for(let s=0;s<n.weights.length;++s)t.push([n.weights[s],a[s]])}ey(t)}};Wp.className="StackedRNNCells";se.registerClass(Wp);function Wa(e){let{ones:t,rate:n,training:r=!1,count:a=1}=e,s=()=>Xb(t(),n),i=()=>yc(s,t,r);return!a||a<=1?jt(i().clone()):Array(a).fill(void 0).map(i).map(o=>jt(o.clone()))}var Pee=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 a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n},K3=class extends $r{constructor(e){if(e.unroll)throw new ze("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new ze("It is not possible at the moment to stack convolutional cells.");super(e);this.inputSpec=[new Gt({ndim:5})]}call(e,t){return U(()=>{if(this.cell.dropoutMask!=null&&($e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&($e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new V("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}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 U(()=>{let{stateSize:t}=this.cell,n=e.shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)],s=Rt(a);return Array.isArray(t)?Array(t.length).fill(s):[s]})}resetStates(e,t=!1){U(()=>{if(!this.stateful)throw new la("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)];if(n[0]==null)throw new V("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(()=>Rt(a)):this.states_=[Rt(a)];else if(e==null)$e(this.states_),this.keptStates!=null&&($e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Rt(a)):this.states_[0]=Rt(a);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new V(`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()):$e(this.states_);for(let s=0;s<this.states_.length;++s){let i=e[s],o=a;if(!k.arraysEqual(i.shape,o))throw new V(`State ${s} is incompatible with layer ${this.name}: expected shape=${o}, received shape=${i.shape}`);this.states_[s]=i}}this.states_=this.states_.map(s=>jt(s.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:a,strides:s,dilationRate:i}=this.cell,o=t==="channelsFirst",l=e[o?3:2],c=e[o?4:3],u=kr(l,r[0],a,s[0],i[0]),h=kr(c,r[1],a,s[1],i[1]);return[...e.slice(0,2),...o?[n,u,h]:[u,h,n]]}};K3.className="ConvRNN2D";var Up=class extends Nc{constructor(e){let{filters:t,kernelSize:n,strides:r,padding:a,dataFormat:s,dilationRate:i}=e;super(Object.assign({},e,{units:t}));this.filters=t,Kt(this.filters,"filters"),this.kernelSize=Nl(n,2,"kernelSize"),this.kernelSize.forEach(o=>Kt(o,"kernelSize")),this.strides=Nl(r||1,2,"strides"),this.strides.forEach(o=>Kt(o,"strides")),this.padding=a||"valid",Kn(this.padding),this.dataFormat=s||"channelsLast",Ft(this.dataFormat),this.dilationRate=Nl(i||1,2,"dilationRate"),this.dilationRate.forEach(o=>Kt(o,"dilationRate"))}build(e){var t;e=ft(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new V(`The channel dimension of the input should be defined. Found ${e[n]}`);let r=e[n],a=4,s=this.kernelSize.concat([r,this.filters*a]);this.kernel=this.addWeight("kernel",s,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*a]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let o;if(this.unitForgetBias){let l=this.biasInitializer,c=this.filters;o=new(t=class extends ir{apply(u,h){let d=l.apply([c]),p=Cr([c]),f=l.apply([c*2]);return WA([d,p,f])}},t.className="CustomInit",t)}else o=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*a],null,o,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return U(()=>{if(e.length!==3)throw new V(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,r=e[0],a=e[1],s=e[2],i=4;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=Wa({ones:()=>In(r),rate:this.dropout,training:n,count:i}));let o=this.dropoutMask,l=(Y,ie,re)=>!ie||!ie[re]?Y:W(ie[re],Y),c=l(r,o,0),u=l(r,o,1),h=l(r,o,2),d=l(r,o,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=Wa({ones:()=>In(a),rate:this.recurrentDropout,training:n,count:i}));let p=this.recurrentDropoutMask,f=l(a,p,0),m=l(a,p,1),A=l(a,p,2),y=l(a,p,3),g=3,[w,x,_,b]=sn(this.kernel.read(),i,g),[T,S,N,C]=this.useBias?sn(this.bias.read(),i):[null,null,null,null];c=this.inputConv(c,w,T,this.padding),u=this.inputConv(u,x,S,this.padding),h=this.inputConv(h,_,N,this.padding),d=this.inputConv(d,b,C,this.padding);let[$,D,O,B]=sn(this.recurrentKernel.read(),i,g);f=this.recurrentConv(f,$),m=this.recurrentConv(m,D),A=this.recurrentConv(A,O),y=this.recurrentConv(y,B);let H=this.recurrentActivation.apply(oe(c,f)),X=this.recurrentActivation.apply(oe(u,m)),Z=oe(W(X,s),W(H,this.activation.apply(oe(h,A)))),ee=W(this.recurrentActivation.apply(oe(d,y)),this.activation.apply(Z));return[ee,ee,Z]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=Pee(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 a=Yr(e,t,this.strides,r||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Vr(a,n,this.dataFormat):a}recurrentConv(e,t){return Yr(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};Up.className="ConvLSTM2DCell";se.registerClass(Up);var Fy=class extends K3{constructor(e){let t=new Up(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};Fy.className="ConvLSTM2D";se.registerClass(Fy);var Hp=class extends Ze{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.noiseShape.length;++r)n.push(this.noiseShape[r]==null?t[r]:this.noiseShape[r]);return n}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e);if(0<this.rate&&this.rate<1){let r=t.training==null?!1:t.training,a=this.getNoiseShape(n);return yc(()=>Xb(n,this.rate,a,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()}};Hp.className="Dropout";se.registerClass(Hp);var My=class extends Hp{constructor(e){super(e);this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};My.className="SpatialDropout1D";se.registerClass(My);var $y=class extends Ze{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,Kt(this.units,"units"),this.activation=La(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Ut(e.kernelConstraint),this.biasConstraint=Ut(e.biasConstraint),this.kernelRegularizer=_t(e.kernelRegularizer),this.biasRegularizer=_t(e.biasRegularizer),this.activityRegularizer=_t(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=ft(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=ft(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e),r=zb(this.activation.getClassName()),a;return r!=null?a=Br(n,this.kernel.read(),r,this.bias?this.bias.read():null):(a=Br(n,this.kernel.read()),this.bias!=null&&(a=Vr(a,this.bias.read())),this.activation!=null&&(a=this.activation.apply(a))),a})}getConfig(){let e={units:this.units,activation:Pa(this.activation),useBias:this.useBias,kernelInitializer:St(this.kernelInitializer),biasInitializer:St(this.biasInitializer),kernelRegularizer:mt(this.kernelRegularizer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),kernelConstraint:Vt(this.kernelConstraint),biasConstraint:Vt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};$y.className="Dense";se.registerClass($y);var Dy=class extends Ze{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=ft(e);for(let t of e.slice(1))if(t==null)throw new V(`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],Da(e,1)]}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let r=[0];for(let a=2;a<n.rank;++a)r.push(a);r.push(1),n=n.transpose(r)}return pY(n)})}getConfig(){let e={};this.dataFormat!=null&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};Dy.className="Flatten";se.registerClass(Dy);var Oy=class extends Ze{constructor(e){super(e);this.supportsMasking=!0,this.activation=La(e.activation)}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e);return this.activation.apply(n)})}getConfig(){let e={activation:Pa(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Oy.className="Activation";se.registerClass(Oy);var zy=class extends Ze{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 U(()=>(e=Le(e),hY(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};zy.className="RepeatVector";se.registerClass(zy);var Py=class extends Ze{constructor(e){super(e);this.targetShape=e.targetShape;for(let t=0;t<this.targetShape.length;++t)this.isUnknown(this.targetShape[t])&&(this.targetShape[t]=null)}isUnknown(e){return e<0||e==null}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",r=t.slice(),a=1,s=null;for(let o=0;o<r.length;++o){let l=r[o];if(this.isUnknown(l))if(s===null)s=o;else throw new V("Can only specifiy one unknown dimension.");else a*=l}let i=Da(e);if(s!==null){if(a===0||i%a!=0)throw new V(n);r[s]=i/a}else if(i!==a)throw new V(n);return r}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e),r=n.shape,a=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return n.reshape(a)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};Py.className="Reshape";se.registerClass(Py);var Ly=class extends Ze{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=br(1,e.dims.length+1);if(!k.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 Gt({ndim:this.dims.length+1})]}computeOutputShape(e){e=ft(e);let t=e.slice();return this.dims.forEach((n,r)=>{t[r+1]=e[n]}),t}call(e,t){return st(Le(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};Ly.className="Permute";se.registerClass(Ly);var Wy=class extends Ze{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=Le(e),r=-1;return yu(ba(n,this.maskValue),r)}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e),r=-1,a=!0,s=yu(ba(n,this.maskValue),r,a);return n.mul(s.asType(n.dtype))})}};Wy.className="Masking";se.registerClass(Wy);var By=class extends Ze{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(yt(e.inputLength))}this.inputDim=e.inputDim,Kt(this.inputDim,"inputDim"),this.outputDim=e.outputDim,Kt(this.outputDim,"outputDim"),this.embeddingsInitializer=wt(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=_t(e.embeddingsRegularizer),this.activityRegularizer=_t(e.activityRegularizer),this.embeddingsConstraint=Ut(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 U(()=>this.maskZero?(e=Le(e),ba(e,Ge(e))):null)}computeOutputShape(e){if(e=ft(e),this.inputLength==null)return[...e,this.outputDim];let t=yt(this.inputLength);if(t.length!==e.length-1)throw new V(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r<t.length;++r){let a=t[r],s=e[r+1];if(a!=null&&s!=null&&a!==s)throw new V(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);a==null&&(t[n]=s),n++}}return[e[0],...t,this.outputDim]}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Le(e);return n.dtype!=="int32"&&(n=fc(n,"int32")),qb(this.embeddings.read(),n.as1D()).reshape(ft(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:St(this.embeddingsInitializer),embeddingsRegularizer:mt(this.embeddingsRegularizer),activityRegularizer:mt(this.activityRegularizer),embeddingsConstraint:Vt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};By.className="Embedding";se.registerClass(By);var wi=class extends Ze{constructor(e){super(e||{});this.supportsMasking=!0}mergeFunction(e){throw new ze}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(t.length===0)return e;let n=e.slice(0,e.length-t.length);for(let r=0;r<t.length;++r){let a=e[e.length-t.length+r],s=t[r];if(a==null||s==null||a<0||s<0)n.push(null);else if(a===1)n.push(s);else if(s===1)n.push(a);else{if(a!==s)throw new V("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(a)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[ft(e)]),e=e,e.length<2)throw new V(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let a of e)a!=null&&a[0]!==null&&t.push(a[0]);if(t=$a(t),t.length>1)throw new V(`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 a=1;a<e.length;++a){let s=e[a]==null?null:e[a].slice(1);n=this.computeElementwiseOpOutputShape(n,s)}let r=e.map(a=>a.length);e.indexOf(null)===-1&&$a(r).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return U(()=>{if(e=e,this.reshapeRequired){let n=[],r=e.map(a=>a.rank);if(r.indexOf(null)===-1){let a=Oa(r);for(let s of e){let i=s.rank;for(let o=0;o<a-i;++o)s=mc(s,1);n.push(s)}return this.mergeFunction(n)}else{let a=!1;for(let o of e){let l=o.rank;if(l==null){let c=o.shape,u=c[0],h=c.slice(1).concat([u]),d=o.reshape([u].concat(Da(c.slice(1))));d=st(d,[1,0]),d=d.reshape(h),n.push(d),a=!0}else if(l>1){let c=br(1,l).concat([0]);n.push(st(o,c)),a=!0}else n.push(o)}let s=this.mergeFunction(n),i=s.rank;if(a){if(i==null){let o=s.shape,l=o.length,c=o[l-1],u=[c].concat(o.slice(0,o.length-1));s=st(s.reshape([-1,c]),[1,0]).reshape(u)}else if(i>1){let o=[i-1].concat(br(0,i-1));s=st(s,o)}}return s}}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<e.length;++r){let a=e[r]==null?null:e[r].slice(1);t=this.computeElementwiseOpOutputShape(t,a)}let n=[];for(let r of e)r!=null&&r[0]!==null&&n.push(r[0]);return n=$a(n),n.length===1?t=n.concat(t):t=[null].concat(t),t}computeMask(e,t){return U(()=>{if(t==null)return null;if(!Array.isArray(t))throw new V("`mask` should be an Array");if(!Array.isArray(e))throw new V("`inputs` should be an Array");if(t.length!==e.length)throw new V(`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:Un(r,0));let n=t[0];for(let r=1;r<t.length-1;++r)n=tr(n,t[r]);return n})}},Vy=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=oe(t,e[n]);return t})}};Vy.className="Add";se.registerClass(Vy);var Uy=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=W(t,e[n]);return t})}};Uy.className="Multiply";se.registerClass(Uy);var Hy=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=oe(t,e[n]);return W(1/e.length,t)})}};Hy.className="Average";se.registerClass(Hy);var jy=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=Ar(t,e[n]);return t})}};jy.className="Maximum";se.registerClass(jy);var Gy=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=qs(t,e[n]);return t})}};Gy.className="Minimum";se.registerClass(Gy);var qy=class extends wi{constructor(e){super(e);this.DEFAULT_AXIS=-1,e==null&&(e={}),this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){if(!(Array.isArray(e)&&Array.isArray(e[0]))||e.length===1)throw new V("A `Concatenate` layer should be called on a list of at least 2 inputs");e=e;let t=!0;for(let r of e)if(r!=null){t=!1;break}if(t)return;let n=[];for(let r=0;r<e.length;++r){let a=e[r].slice();a.splice(this.axis,1);let s=!1;for(let i of n)if(k.arraysEqual(i,a)){s=!0;break}s||n.push(a)}if(n.length>1)throw new V("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return U(()=>WA(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new V("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 a of t.slice(1)){if(n[r]==null||a[r]==null){n[r]=null;break}n[r]+=a[r]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new V("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new V("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new V(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return U(()=>{let n=!0;if(t.forEach(s=>{if(s!=null){n=!1;return}}),n)return null;let r=[];for(let s=0;s<e.length;++s)t[s]==null?r.push(In(e[s]).asType("bool")):t[s].rank<e[s].rank?r.push(Un(t[s],-1)):r.push(t[s]);let a=dt(r,this.axis);return Zh(a,-1,!1)})}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};qy.className="Concatenate";se.registerClass(qy);function Sc(e,t){for(;e<0;)e+=t;return e}function Lee(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new ze("batchDot is not implemented for tensors of 4D or higher rank yet");if(k.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),k.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 ze("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,a=t.shape.length;n==null&&(n=[r-1,a-2]);let s=n;return U(()=>{let i;if(r>a){i=r-a;let l=[];for(let c=0;c<i;++c)l.push(1);t=t.reshape(t.shape.concat(l))}else if(a>r){i=a-r;let l=[];for(let c=0;c<i;++c)l.push(1);e=e.reshape(e.shape.concat(l))}else i=0;let o;if(e.shape.length===2&&t.shape.length===2)s[0]===s[1]?o=e.mul(t).sum(s[0]):o=e.transpose([1,0]).mul(t).sum(s[1]);else{let l=s[0]!==e.shape.length-1,c=s[1]===t.shape.length-1;o=e.matMul(t,l,c)}if(i>0){let l;r>a?l=r+a-3:l=r-1;let c=[];for(let u=l;u<l+i;++u)c.push(u);o=o.squeeze(c)}return o.shape.length===1&&(o=o.expandDims(1)),o})}var Xy=class extends wi{constructor(e){super(e);this.axes=e.axes,this.normalize=e.normalize==null?!1:e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){k.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],n=e[1];if(t.length>3||n.length>3)throw new ze("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 V(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(e.length!==2)throw new V(`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((a,s)=>Sc(a,e[s].shape.length)):r=[Sc(this.axes,t.shape.length),Sc(this.axes,n.shape.length)],this.normalize&&(t=Ep(t,r[0]),n=Ep(n,r[1])),Lee(t,n,r)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Sc(this.axes,e.length),Sc(this.axes,t.length)],n}computeOutputShape(e){k.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 ze("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 a=t.concat(n);return a.length===1&&a.push(1),a}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};Xy.className="Dot";se.registerClass(Xy);var Ky=class extends Ze{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 U(()=>{this.invokeCallHook(e,t);let n=Le(e);return yc(()=>Ap(n.shape,0,this.stddev).add(n),()=>n,t.training||!1)})}};Ky.className="GaussianNoise";se.registerClass(Ky);var Zy=class extends Ze{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 U(()=>{this.invokeCallHook(e,t);let n=Le(e);return this.rate>0&&this.rate<1?yc(()=>{let r=Math.sqrt(this.rate/(1-this.rate));return n.mul(Ap(n.shape,1,r))},()=>n,t.training||!1):n})}};Zy.className="GaussianDropout";se.registerClass(Zy);var Jy=class extends Ze{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Le(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 U(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return yc(()=>{let r=Le(e),a=1.6732632423543772,s=1.0507009873554805,i=-a*s,o=ea(jo(n),this.rate);o=fc(o,"float32");let l=((1-this.rate)*(1+this.rate*i**2))**-.5,c=-l*i*this.rate;return r.mul(o).add(o.add(-1).mul(i)).mul(l).add(c)},()=>Le(e),t.training||!1)}return e})}};Jy.className="AlphaDropout";se.registerClass(Jy);function Tc(e,t,n,r,a,s=.001){let i;if(e.rank===2)i=pg(e,t,n,r,a,s);else if(e.rank===3)i=fg(e,t,n,r,a,s);else if(e.rank===4)i=mg(e,t,n,r,a,s);else throw new ze(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return i}function Wee(e,t,n,r,a=.001){return U(()=>{let s=id(e,r),i=s.mean,o=s.variance;return[Tc(e,i,o,n,t,a),i,o]})}function Bee(e,t,n,r,a=.001){return U(()=>{let s=id(e,r),i=s.mean,o=s.variance,l=[];for(let p of br(0,e.rank))r.indexOf(p)!==-1?l.push(1):l.push(e.shape[p]);let c=i.reshape(l),u=o.reshape(l),h=t==null?null:t.reshape(l),d=n==null?null:n.reshape(l);return[Tc(e,c,u,d,h,a),i,o]})}function Vee(e,t,n,r,a=.001){return k.arraysEqual(r.slice().sort(),br(0,e.rank-1))?Wee(e,t,n,r,a):Bee(e,t,n,r,a)}var Yy=class extends Ze{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=wt(e.betaInitializer||"zeros"),this.gammaInitializer=wt(e.gammaInitializer||"ones"),this.movingMeanInitializer=wt(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=wt(e.movingVarianceInitializer||"ones"),this.betaConstraint=Ut(e.betaConstraint),this.gammaConstraint=Ut(e.gammaConstraint),this.betaRegularizer=_t(e.betaRegularizer),this.gammaRegularizer=_t(e.gammaRegularizer)}build(e){e=ft(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new V(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Gt({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 U(()=>{let n=t.training==null?!1:t.training,r=Le(e),a=r.shape,s=a.length,i=br(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=di(1,s);l[o]=a[o];let c=i.slice();c.sort();let u=!k.arraysEqual(c,br(0,s).slice(0,s-1)),h=()=>{if(u){let A=this.movingMean.read().reshape(l),y=this.movingVariance.read().reshape(l),g=this.center?this.beta.read().reshape(l):null,w=this.scale?this.gamma.read().reshape(l):null;return Tc(r,A,y,g,w,this.epsilon)}else return Tc(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 h();let[d,p,f]=Vee(r,this.gamma.read(),this.beta.read(),i,this.epsilon),m=(A,y,g)=>{U(()=>{let w=1-g,x=A.read(),_=x.sub(y).mul(w);A.write(x.sub(_))})};return(()=>{m(this.movingMean,p,this.momentum),m(this.movingVariance,f,this.momentum)})(),d})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:St(this.betaInitializer),gammaInitializer:St(this.gammaInitializer),movingMeanInitializer:St(this.movingMeanInitializer),movingVarianceInitializer:St(this.movingVarianceInitializer),betaRegularizer:mt(this.betaRegularizer),gammaRegularizer:mt(this.gammaRegularizer),betaConstraint:Vt(this.betaConstraint),gammaConstraint:Vt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Yy.className="BatchNormalization";se.registerClass(Yy);var Qy=class extends Ze{constructor(e){if(e==null&&(e={}),super(e),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=wt(e.betaInitializer||"zeros"),this.gammaInitializer=wt(e.gammaInitializer||"ones"),this.betaRegularizer=_t(e.betaRegularizer),this.gammaRegularizer=_t(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=ft(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let a=0;a<this.axis.length;++a)this.axis[a]<0&&(this.axis[a]+=t);for(let a of this.axis)if(a<0||a>=t)throw new Error(`Invalid axis: ${a}`);if(this.axis.length!==$a(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(a=>e[a]),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=Le(e),r=n.shape,a=r.length;return U(()=>{let s=!0,{mean:i,variance:o}=id(n,this.axis,s),l=di(1,a);for(let f of this.axis)l[f]=r[f];let c=f=>f!=null&&f.shape.length!==a&&this.axis!==[a-1]?f.reshape(l):f,u=c(this.gamma.read()),h=c(this.beta.read()),d=[],p=[];for(let f=0;f<a;++f)this.axis.indexOf(f)!==-1?(d.push(r[f]),p.push(1)):(d.push(1),p.push(r[f]));return i=i.tile(d),o=o.tile(d),u=u.tile(p),h=h.tile(p),Tc(n,i,o,h,u,this.epsilon)})}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:St(this.betaInitializer),gammaInitializer:St(this.gammaInitializer),betaRegularizer:mt(this.betaRegularizer),gammaRegularizer:mt(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};Qy.className="LayerNormalization";se.registerClass(Qy);function Uee(e,t,n){return U(()=>{if(e.rank!==4)throw new V(`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 V("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=wr()),n!=="channelsLast"&&n!=="channelsFirst")throw new V(`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]],ta(e,r)})}var e2=class extends Ze{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?wr():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 V(`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 V(`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 V(`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 Gt({ndim:4})]}computeOutputShape(e){e=ft(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 U(()=>Uee(Le(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};e2.className="ZeroPadding2D";se.registerClass(e2);function jp(e,t,n,r,a,s){return U(()=>{Ft(a),Wb(s),Kn(r),n==null&&(n=[1,1]),r==null&&(r="valid"),a==null&&(a=wr()),s==null&&(s="max"),e=by(e,a);let i,o=r==="same"?"same":"valid";return s==="max"?i=Su(e,t,n,o):i=xu(e,t,n,o),a==="channelsFirst"&&(i=st(i,[0,3,1,2])),i})}function Z3(e,t,n,r,a,s){return U(()=>{Ft(a),Wb(s),Kn(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),a==null&&(a=wr()),s==null&&(s="max"),e=H3(e,a);let i,o=r==="same"?"same":"valid";return s==="max"?i=Wf(e,t,n,o):i=Ef(e,t,n,o),a==="channelsFirst"&&(i=st(i,[0,4,1,2,3])),i})}var J3=class extends Ze{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),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 V(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(Kt(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 V(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);Kt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,Kn(this.padding),this.inputSpec=[new Gt({ndim:3})]}computeOutputShape(e){e=ft(e);let t=kr(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return U(()=>{this.invokeCallHook(e,t),e=mc(Le(e),2);let n=this.poolingFunction(Le(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return va(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},t2=class extends J3{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Ft(a),Kn(r),jp(e,t,n,r,a,"max")}};t2.className="MaxPooling1D";se.registerClass(t2);var n2=class extends J3{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Ft(a),Kn(r),jp(e,t,n,r,a,"avg")}};n2.className="AveragePooling1D";se.registerClass(n2);var Y3=class extends Ze{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),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 V(`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];Kt(this.poolSize,"poolSize"),Kt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ft(this.dataFormat),Kn(this.padding),this.inputSpec=[new Gt({ndim:4})]}computeOutputShape(e){e=ft(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=kr(t,this.poolSize[0],this.padding,this.strides[0]),n=kr(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 U(()=>(this.invokeCallHook(e,t),this.poolingFunction(Le(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}},r2=class extends Y3{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Ft(a),Kn(r),jp(e,t,n,r,a,"max")}};r2.className="MaxPooling2D";se.registerClass(r2);var a2=class extends Y3{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Ft(a),Kn(r),jp(e,t,n,r,a,"avg")}};a2.className="AveragePooling2D";se.registerClass(a2);var Q3=class extends Ze{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),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 V(`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];Kt(this.poolSize,"poolSize"),Kt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ft(this.dataFormat),Kn(this.padding),this.inputSpec=[new Gt({ndim:5})]}computeOutputShape(e){e=ft(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=kr(t,this.poolSize[0],this.padding,this.strides[0]),n=kr(n,this.poolSize[1],this.padding,this.strides[1]),r=kr(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 U(()=>(this.invokeCallHook(e,t),this.poolingFunction(Le(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}},s2=class extends Q3{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Ft(a),Kn(r),Z3(e,t,n,r,a,"max")}};s2.className="MaxPooling3D";se.registerClass(s2);var i2=class extends Q3{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Ft(a),Kn(r),Z3(e,t,n,r,a,"avg")}};i2.className="AveragePooling3D";se.registerClass(i2);var e7=class extends Ze{constructor(e){super(e);this.inputSpec=[new Gt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new ze}},o2=class extends e7{constructor(e){super(e||{})}call(e,t){return U(()=>{let n=Le(e);return It(n,1)})}};o2.className="GlobalAveragePooling1D";se.registerClass(o2);var l2=class extends e7{constructor(e){super(e||{})}call(e,t){return U(()=>{let n=Le(e);return jn(n,1)})}};l2.className="GlobalMaxPooling1D";se.registerClass(l2);var t7=class extends Ze{constructor(e){super(e);this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ft(this.dataFormat),this.inputSpec=[new Gt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new ze}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},u2=class extends t7{call(e,t){return U(()=>{let n=Le(e);return this.dataFormat==="channelsLast"?It(n,[1,2]):It(n,[2,3])})}};u2.className="GlobalAveragePooling2D";se.registerClass(u2);var c2=class extends t7{call(e,t){return U(()=>{let n=Le(e);return this.dataFormat==="channelsLast"?jn(n,[1,2]):jn(n,[2,3])})}};c2.className="GlobalMaxPooling2D";se.registerClass(c2);var n7=class extends Ze{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,a=vr(r,n);delete t.layer;let s={layer:a};return Object.assign(s,t),new e(s)}},h2=class extends n7{constructor(e){super(e);this.supportsMasking=!0}build(e){if(e=ft(e),e.length<3)throw new V(`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=ft(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 U(()=>(e=Le(e),X3((n,r)=>[Le(this.layer.call(n,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};h2.className="TimeDistributed";se.registerClass(h2);function Hee(e){fi(iY,"BidirectionalMergeMode",e)}var jee="concat",d2=class extends n7{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=vr(n),t.goBackwards=t.goBackwards!==!0;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=vr(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?jee:e.mergeMode,Hee(this.mergeMode),e.weights)throw new ze("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,a;return this.returnState&&(a=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(a).concat(a.slice()):[n].concat(a).concat(a.slice()):gn(r)}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let a=q3(e,n,r,this.numConstants);if(e=a.inputs,n=a.initialState,r=a.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&r==null)return super.apply(e,t);let s=[],i=[];if(n!=null){let l=n.length;if(l%2>0)throw new V("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);let c=n.map(u=>new Gt({shape:u.shape}));this.forwardLayer.stateSpec=c.slice(0,l/2),this.backwardLayer.stateSpec=c.slice(l/2),i.push(...c)}if(r!=null)throw new ze("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof yr;for(let l of s)if(l instanceof yr!==o)throw new V("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){let l=[e].concat(s),c=this.inputSpec.concat(i),u=this.inputSpec;this.inputSpec=c;let h=super.apply(l,t);return this.inputSpec=u,h}else return super.apply(e,t)}call(e,t){return U(()=>{let n=t.initialState,r,a;if(n==null)r=this.forwardLayer.call(e,t),a=this.backwardLayer.call(e,t);else{let o=n.slice(0,n.length/2),l=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:o})),a=this.backwardLayer.call(e,Object.assign(t,{initialState:l}))}let s;this.returnState&&(Array.isArray(r)&&(s=r.slice(1).concat(a.slice(1))),r=r[0],a=a[0]),this.returnSequences&&(a=Nn(a,1));let i;return this.mergeMode==="concat"?i=WA([r,a]):this.mergeMode==="sum"?i=oe(r,a):this.mergeMode==="ave"?i=W(.5,oe(r,a)):this.mergeMode==="mul"?i=W(r,a):this.mergeMode==null&&(i=[r,a]),this.returnState?this.mergeMode==null?i.concat(s):[i].concat(s):i})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){mi(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),mi(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 r=this.forwardLayer.states.map(a=>null);return Array.isArray(n)?n.concat(r).concat(r):[n].concat(r).concat(r)}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=vr(t.layer);if(delete t.layer,t.numConstants!=null)throw new ze("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};d2.className="Bidirectional";se.registerClass(d2);function bY(e){return new vl(e)}function vY(e){return new xy(e)}function kY(e){return new Ay(e)}function IY(e){return new yy(e)}function NY(e){return new gy(e)}function SY(e){return new _y(e)}function TY(e){return new wy(e)}function EY(e){return new Lp(e)}function CY(e){return new Ic(e)}function RY(e){return new ky(e)}function FY(e){return new Pp(e)}function MY(e){return new Iy(e)}function $Y(e){return new Ny(e)}function DY(e){return new Sy(e)}function OY(e){return new Ty(e)}function zY(e){return new Oy(e)}function PY(e){return new $y(e)}function LY(e){return new Hp(e)}function WY(e){return new My(e)}function BY(e){return new Dy(e)}function VY(e){return new zy(e)}function UY(e){return new Py(e)}function HY(e){return new Ly(e)}function jY(e){return new By(e)}function GY(e){return new Vy(e)}function qY(e){return new Hy(e)}function XY(e){return new qy(e)}function KY(e){return new jy(e)}function ZY(e){return new Gy(e)}function JY(e){return new Uy(e)}function YY(e){return new Xy(e)}function QY(e){return new Yy(e)}function eQ(e){return new Qy(e)}function tQ(e){return new e2(e)}function KA(e){return new n2(e)}function nQ(e){return KA(e)}function rQ(e){return KA(e)}function ZA(e){return new a2(e)}function aQ(e){return ZA(e)}function sQ(e){return ZA(e)}function JA(e){return new i2(e)}function iQ(e){return JA(e)}function oQ(e){return JA(e)}function lQ(e){return new o2(e)}function uQ(e){return new u2(e)}function Jb(e){return new l2(e)}function Yb(e){return new c2(e)}function Qb(e){return new t2(e)}function e3(e){return new r2(e)}function cQ(e){return new s2(e)}function hQ(e){return new Cy(e)}function dQ(e){return new Vp(e)}function pQ(e){return new Ry(e)}function fQ(e){return new Nc(e)}function mQ(e){return new Ey(e)}function AQ(e){return new Bp(e)}function yQ(e){return new Fy(e)}function gQ(e){return new Up(e)}function xQ(e){return new $r(e)}function wQ(e){return new Wp(e)}function _Q(e){return new d2(e)}function bQ(e){return new h2(e)}var vQ=Jb,kQ=Yb,IQ=Qb,NQ=e3;function SQ(e){return new Ky(e)}function TQ(e){return new Zy(e)}function EQ(e){return new Jy(e)}function CQ(e){return new Wy(e)}var g0={};Pe(g0,{MAPE:()=>nte,MSE:()=>ste,binaryAccuracy:()=>Gee,binaryCrossentropy:()=>qee,categoricalAccuracy:()=>Kee,categoricalCrossentropy:()=>Zee,cosineProximity:()=>Qee,mape:()=>rte,meanAbsoluteError:()=>ete,meanAbsolutePercentageError:()=>tte,meanSquaredError:()=>ate,mse:()=>ite,precision:()=>Jee,recall:()=>Yee,sparseCategoricalAccuracy:()=>Xee});function Gee(e,t){return ry(e,t)}function qee(e,t){return h3(e,t)}function Xee(e,t){return d3(e,t)}function Kee(e,t){return ay(e,t)}function Zee(e,t){return sy(e,t)}function Jee(e,t){return c3(e,t)}function Yee(e,t){return KQ(e,t)}function Qee(e,t){return ty(e,t)}function ete(e,t){return Cp(e,t)}function tte(e,t){return Il(e,t)}function nte(e,t){return Il(e,t)}function rte(e,t){return Il(e,t)}function ate(e,t){return yi(e,t)}function ste(e,t){return yi(e,t)}function ite(e,t){return yi(e,t)}var x0={};Pe(x0,{modelFromJSON:()=>Eee});var w0={};Pe(w0,{l1:()=>lte,l1l2:()=>ote,l2:()=>ute});function ote(e){return new vc(e)}function lte(e){return Mee(e)}function ute(e){return $ee(e)}var _0=class extends kl{constructor(){super(...arguments);this.model=null}setModel(e){if(!(e instanceof ra))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function Gp(e,t){return e<t}function r7(e,t){return e>t}var b0=class extends _0{constructor(e){super();if(e==null&&(e={}),e.restoreBestWeights)throw new ze("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=Gp:this.mode==="max"?this.monitorFunc=r7:this.monitor.indexOf("acc")!==-1?this.monitorFunc=r7:this.monitorFunc=Gp,this.monitorFunc===Gp&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Gp?Infinity:-Infinity}async onEpochEnd(e,t){await za(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 cte(e){return new b0(e)}var J4={earlyStopping:cte},Ir;(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"})(Ir||(Ir={}));var a7;(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={}))})(a7||(a7={}));var p2={};function Y4(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};p2[e]=n}function s7(e){return p2[e]}function Q4(e){delete p2[e]}function I(e,t,n,r,a){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return wn(t.inputNames[s.inputIndexStart],n,r,a);if(s.type==="tensors")return t.inputNames.slice(o,l).map(h=>wn(h,n,r,a));let c=wn(t.inputNames.slice(o)[0],n,r,a),u=c.dataSync();return s.type==="number"?u[0]:k.toNestedArray(c.shape,u)}let i=t.attrParams[e];return i&&i.value}function wn(e,t,n,r){let[a,s]=$n(e);if(r!=null){let o=r.getHashTableHandleByName(a);if(o!=null)return o}let i=n.currentContextIds.find(o=>!!t[qp(a,o)]);return i!==void 0?t[qp(a,i)][s]:void 0}function hte(e,t,n){return t[qp(e,n.currentContextId)]}function ca(e,t){let[n,r]=$n(e);return[qp(n,t&&t.currentContextId),r]}function qp(e,t){return t?`${e}-${t}`:e}function $n(e){let t=e.split(":");return t.length===1?[e,0]:[t[0],Number(t[t.length-1])]}function Xp(e,t,n){let r=I("pad",e,t,n);if(r==="explicit"){r=I("explicitPaddings",e,t,n);let a=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)a[s][0]=r[s*2],a[s][1]=r[s*2+1];return a}return r}function ha(e){return e.kept?e:Tr(e)}var i7={};Pe(i7,{json:()=>dte});var dte=[{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}]}],o7={};Pe(o7,{json:()=>pte});var pte=[{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}]}],l7={};Pe(l7,{json:()=>fte});var fte=[{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"}]}],u7={};Pe(u7,{json:()=>mte});var mte=[{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"}]}],c7={};Pe(c7,{json:()=>Ate});var Ate=[{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"}]}],h7={};Pe(h7,{json:()=>yte});var yte=[{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}]}],d7={};Pe(d7,{json:()=>gte});var gte=[{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"}]}],p7={};Pe(p7,{json:()=>xte});var xte=[{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"}]}],f7={};Pe(f7,{json:()=>wte});var wte=[{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}]}],m7={};Pe(m7,{json:()=>_te});var _te=[{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"}]}],A7={};Pe(A7,{json:()=>bte});var bte=[{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}]}],y7={};Pe(y7,{json:()=>vte});var vte=[{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}]}],g7={};Pe(g7,{json:()=>kte});var kte=[{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}]}],x7={};Pe(x7,{json:()=>Ite});var Ite=[{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"}]}],w7={};Pe(w7,{json:()=>Nte});var Nte=[{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}]}],_7={};Pe(_7,{json:()=>Ste});var Ste=[{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}]}],b7={};Pe(b7,{json:()=>Tte});var Tte=[{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:[]}],k7=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[i7,o7,l7,u7,c7,h7,d7,A7,m7,p7,y7,g7,x7,w7,_7,b7,f7],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=[],a=[],s=[],i=n.reduce((f,m)=>(f[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?r.push(f[m.name]):m.op==="Const"?a.push(f[m.name]):(m.input==null||m.input.length===0)&&s.push(f[m.name]),f),{}),o=[],l=[],c={},u={};t!=null&&(c=this.mapSignatureEntries(t.inputs),u=this.mapSignatureEntries(t.outputs));let h=Object.keys(i);h.forEach(f=>{let m=i[f];m.inputNames.forEach(A=>{let[y]=ca(A);m.inputs.push(i[y]),i[y].children.push(m)})}),Object.keys(u).length===0?h.forEach(f=>{let m=i[f];m.children.length===0&&l.push(m)}):Object.keys(u).forEach(f=>{let[m]=ca(f),A=i[m];A!=null&&(A.signatureKey=u[f],l.push(A))}),Object.keys(c).length>0?Object.keys(c).forEach(f=>{let[m]=ca(f),A=i[m];A&&(A.signatureKey=c[f],o.push(A))}):o=r;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((f,m)=>(f[m.signature.name]=this.mapFunction(m),f),{}));let p={nodes:i,inputs:o,outputs:l,weights:a,placeholders:r,signature:t,functions:d};return s.length>0&&(p.initNodes=s),p}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=s7(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};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((r,a)=>(r[a.name]={type:a.type,inputIndexStart:a.start,inputIndexEnd:a.end},r),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((r,a)=>{let s=a.type,i;switch(a.type){case"string":i=f2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=f2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"string[]":i=b2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=b2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"number":i=A2(e.attr,a.tfName,a.defaultValue||0),i===void 0&&!!a.tfDeprecatedName&&(i=A2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"number[]":i=_2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=_2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool":i=m2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=m2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool[]":i=k2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=k2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape":i=w2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=w2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape[]":i=v2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=v2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype":i=g2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=g2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype[]":i=x2(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=x2(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"func":i=v7(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=v7(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${a.type} for op: ${e.op}`)}return r[a.name]={value:i,type:s},r},{})),n}mapFunction(e){let t=e.nodeDef,n=[],r=[],a={};t!=null&&(a=t.reduce((c,u)=>(c[u.name]=this.mapNode(u),u.op==="Const"&&r.push(c[u.name]),c),{}));let s=[],i=[];e.signature.inputArg.forEach(c=>{let[u]=ca(c.name),h={name:u,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:y2(c.type),type:"dtype"}},children:[]};h.signatureKey=c.name,s.push(h),a[u]=h}),Object.keys(a).forEach(c=>{let u=a[c];u.inputNames.forEach(h=>{let[d]=ca(h);u.inputs.push(a[d]),a[d].children.push(u)})});let o=e.ret;e.signature.outputArg.forEach(c=>{let[u,h]=ca(o[c.name]),d=a[u];d!=null&&(d.defaultOutput=h,i.push(d))});let l=this.mapArgsToSignature(e);return{nodes:a,inputs:s,outputs:i,weights:r,placeholders:n,signature:l}}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 Ete(e){let t=Q().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 I7(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):Ete(e);return t?n:n.toLowerCase()}function f2(e,t,n,r=!1){let a=e[t];return a!=null?I7(a.s,r):n}function m2(e,t,n){let r=e[t];return r?r.b:n}function A2(e,t,n){let r=e[t]||{},a=r.i!=null?r.i:r.f!=null?r.f:n;return typeof a=="number"?a:parseInt(a,10)}function y2(e){switch(typeof e=="string"&&(e=Ir[e]),e){case Ir.DT_FLOAT:return"float32";case Ir.DT_INT32:case Ir.DT_INT64:case Ir.DT_INT8:case Ir.DT_UINT8:return"int32";case Ir.DT_BOOL:return"bool";case Ir.DT_DOUBLE:return"float32";case Ir.DT_STRING:return"string";default:return null}}function v7(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function g2(e,t,n){let r=e[t];return r&&r.type?y2(r.type):n}function x2(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(a=>y2(a)):n}function N7(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function w2(e,t,n){let r=e[t];return r&&r.shape?N7(r.shape):n}function _2(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map(a=>typeof a=="number"?a:parseInt(a,10)):n}function b2(e,t,n,r=!1){let a=e[t];return a&&a.list&&a.list.s?a.list.s.map(s=>I7(s,r)):n}function v2(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(a=>N7(a)):n}function k2(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var Cte=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,a)=>(r[a]=this.getAttr(a),r),{}))}getInput(e){return wn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return wn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return A2(this.node.rawAttrs,e,t);if(n.s!=null)return f2(this.node.rawAttrs,e,t);if(n.b!=null)return m2(this.node.rawAttrs,e,t);if(n.shape!=null)return w2(this.node.rawAttrs,e,t);if(n.type!=null)return g2(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return _2(this.node.rawAttrs,e,t);if(n.list.s!=null)return b2(this.node.rawAttrs,e,t);if(n.list.shape!=null)return v2(this.node.rawAttrs,e,t);if(n.list.b!=null)return k2(this.node.rawAttrs,e,t);if(n.list.type!=null)return x2(this.node.rawAttrs,e,t)}return t}},Rte=(e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[oe(I("a",e,t,n),I("b",e,t,n))];case"AddN":return[hh(I("tensors",e,t,n))];case"FloorMod":case"Mod":return[sd(I("a",e,t,n),I("b",e,t,n))];case"Mul":return[W(I("a",e,t,n),I("b",e,t,n))];case"RealDiv":case"Div":return[Te(I("a",e,t,n),I("b",e,t,n))];case"DivNoNan":return[$f(I("a",e,t,n),I("b",e,t,n))];case"FloorDiv":return[Kh(I("a",e,t,n),I("b",e,t,n))];case"Sub":return[_e(I("a",e,t,n),I("b",e,t,n))];case"Minimum":return[qs(I("a",e,t,n),I("b",e,t,n))];case"Maximum":return[Ar(I("a",e,t,n),I("b",e,t,n))];case"Pow":return[Rr(I("a",e,t,n),I("b",e,t,n))];case"SquaredDifference":return[Du(I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Fte=(e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[Pt(I("x",e,t,n))];case"Acos":return[_f(I("x",e,t,n))];case"Acosh":return[bf(I("x",e,t,n))];case"Asin":return[kf(I("x",e,t,n))];case"Asinh":return[If(I("x",e,t,n))];case"Atan":return[Nf(I("x",e,t,n))];case"Atan2":return[Sf(I("x",e,t,n),I("y",e,t,n))];case"Atanh":return[Tf(I("x",e,t,n))];case"Ceil":return[Cf(I("x",e,t,n))];case"Complex":return[xa(I("real",e,t,n),I("imag",e,t,n))];case"Cos":return[bu(I("x",e,t,n))];case"Cosh":return[Qh(I("x",e,t,n))];case"Elu":return[Bo(I("x",e,t,n))];case"Erf":return[Df(I("x",e,t,n))];case"Exp":return[Vn(I("x",e,t,n))];case"Expm1":return[Of(I("x",e,t,n))];case"Floor":return[Vo(I("x",e,t,n))];case"Log":return[kn(I("x",e,t,n))];case"Log1p":return[nd(I("x",e,t,n))];case"Imag":return[td(I("x",e,t,n))];case"Neg":return[kt(I("x",e,t,n))];case"Reciprocal":return[Vf(I("x",e,t,n))];case"Real":return[Cu(I("x",e,t,n))];case"Relu":return[Fr(I("x",e,t,n))];case"Round":return[Uf(I("x",e,t,n))];case"Selu":return[hd(I("x",e,t,n))];case"Sigmoid":return[Qn(I("x",e,t,n))];case"Sin":return[dd(I("x",e,t,n))];case"Sign":return[jf(I("x",e,t,n))];case"Sinh":return[pd(I("x",e,t,n))];case"Softplus":return[Uo(I("x",e,t,n))];case"Sqrt":return[Yt(I("x",e,t,n))];case"Square":return[ht(I("x",e,t,n))];case"Tanh":return[Wo(I("x",e,t,n))];case"Tan":return[Xf(I("x",e,t,n))];case"ClipByValue":return[mn(I("x",e,t,n),I("clipValueMin",e,t,n),I("clipValueMax",e,t,n))];case"Relu6":return[ud(I("x",e,t,n))];case"Rsqrt":return[cd(wn(e.inputNames[0],t,n))];case"Prod":return[od(I("x",e,t,n),I("axes",e,t,n))];case"LeakyRelu":return[ku(I("x",e,t,n),I("alpha",e,t,n))];case"Prelu":return[Eu(I("x",e,t,n),I("alpha",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function lr(e,t,n=""){k.assert(Mte(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function Mte(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==-1&&t[n]!==-1&&e[n]!==t[n])return!1;return!0}var $te=class{constructor(e,t,n,r,a,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=a,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Ee(0),jt(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),lr(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,jt(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.size();r++)e.push(r)}if(e.length===0)return mr([],[0].concat(this.elementShape));let n=this.readMany(e);return lr(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),Sn(n,0)}concat(e){if(!!e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`);if(this.size()===0)return mr([],[0].concat(this.elementShape));let t=[];for(let r=0;r<this.size();r++)t.push(r);let n=this.readMany(t);return lr(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),dt(n,0)}scatter(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);if(e.length!==t.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t.shape[0]}`);let n=Math.max(...e);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,nr(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(o=>(n+=o,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 a=n===0?0:t.size/n,s=[];U(()=>{t=K(t,[1,n,a]);for(let o=0;o<e.length;++o){let l=o===0?0:r[o-1],c=[0,l,0],u=[1,e[o],a];s[o]=K(Me(t,c,u),this.elementShape)}return s});let i=[];for(let o=0;o<e.length;o++)i[o]=o;this.writeMany(i,s)}},Ec=class{constructor(e,t,n,r=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,e!=null&&e.forEach(a=>{if(n!==a.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${a.dtype}`);lr(t,a.shape,"TensorList shape mismatch: "),jt(a)}),this.idTensor=Ee(0),this.maxNumElements=r,jt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Ec([...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.`);return lr(e,this.elementShape,"TensorList shape mismatch: "),U(()=>{let r=this.tensors.map(a=>K(a,e));return Sn(r,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=this.tensors.pop();return lr(n.shape,e,"TensorList shape mismatch: "),K(n,e)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(lr(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");jt(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.`);return lr(this.tensors[e].shape,t,"TensorList shape mismatch: "),this.tensors[e]}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.`);lr(this.elementShape,t.shape,"TensorList shape mismatch: "),jt(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}`);return lr(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size()),e.length===0?mr([],[0].concat(this.elementShape)):U(()=>{let r=e.map(a=>K(this.tensors[a],n));return Sn(r,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);return lr(this.elementShape,t,"TensorList shape mismatch: "),this.size()===0?mr([],[0].concat(this.elementShape)):U(()=>{let n=this.tensors.map(r=>K(r,t));return dt(n,0)})}};function Dte(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 a=e.shape.slice(1);lr(a,t,"TensorList shape mismatch: ");let s=nr(e);return new Ec(s,t,r)}function Ote(e,t,n){return new Ec([],e,t,n)}function zte(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 a=Math.max(...t);if(r!=null&&r!==-1&&a>=r)throw new Error(`Max index must be < array size (${a} vs. ${r})`);let s=new Ec([],n,e.dtype,r),i=nr(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function Pte(e,t,n){let r=0,a=t.map(l=>(r+=l,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 s=r===0?0:e.size/r,i=U(()=>{let l=[];e=K(e,[1,r,s]);for(let c=0;c<t.length;++c){let u=c===0?0:a[c-1],h=[0,u,0],d=[1,t[c],s];l[c]=K(Me(e,h,d),n)}return e.dispose(),l}),o=new Ec([],n,e.dtype,t.length);for(let l=0;l<i.length;l++)o.setItem(l,i[l]);return o}var Lte=async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{let r=I("thenBranch",e,t,n),a=I("elseBranch",e,t,n),s=I("cond",e,t,n),i=I("args",e,t,n);return(await s.data())[0]?n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=I("body",e,t,n),a=I("cond",e,t,n),s=I("args",e,t,n),i=await n.functionMap[a].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map(u=>u.id),l=await i[0].data();i.forEach(u=>{!u.kept&&o.indexOf(u.id)===-1&&u.dispose()});let c=s;for(;l[0];){let u=c;c=await n.functionMap[r].executeFunctionAsync(c,n.tensorArrayMap,n.tensorListMap);let h=c.map(p=>p.id);u.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&h.indexOf(p.id)===-1&&p.dispose()});let d=await n.functionMap[a].executeFunctionAsync(c,n.tensorArrayMap,n.tensorListMap);l=await d[0].data(),d.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&h.indexOf(p.id)===-1&&p.dispose()})}return c}case"LoopCond":{let r=I("pred",e,t,n);return[ha(r)]}case"Switch":{let r=I("pred",e,t,n),a=I("data",e,t,n);return a.kept||(a=ha(a)),(await r.data())[0]?[void 0,a]:[a,void 0]}case"Merge":{let r=e.inputNames.find(a=>wn(a,t,n)!==void 0);if(r){let a=wn(r,t,n);return[ha(a)]}return}case"Enter":{let r=I("frameName",e,t,n),a=I("tensor",e,t,n);return n.enterFrame(r),[ha(a)]}case"Exit":{let r=I("tensor",e,t,n);return n.exitFrame(),[ha(r)]}case"NextIteration":{let r=I("tensor",e,t,n);return n.nextIteration(),[ha(r)]}case"TensorArrayV3":{let r=I("size",e,t,n),a=I("dtype",e,t,n),s=I("elementShape",e,t,n),i=I("dynamicSize",e,t,n),o=I("clearAfterRead",e,t,n),l=I("identicalElementShapes",e,t,n),c=I("name",e,t,n),u=new $te(c,a,r,s,l,i,o);return n.addTensorArray(u),[u.idTensor,Ee(1)]}case"TensorArrayWriteV3":{let r=I("tensorArrayId",e,t,n),a=I("index",e,t,n),s=I("tensor",e,t,n),i=n.getTensorArray(r.id);return i.write(a,s),[i.idTensor]}case"TensorArrayReadV3":{let r=I("tensorArrayId",e,t,n),a=I("index",e,t,n);return[n.getTensorArray(r.id).read(a)]}case"TensorArrayGatherV3":{let r=I("tensorArrayId",e,t,n),a=I("indices",e,t,n),s=I("dtype",e,t,n);return[n.getTensorArray(r.id).gather(a,s)]}case"TensorArrayScatterV3":{let r=I("tensorArrayId",e,t,n),a=I("indices",e,t,n),s=I("tensor",e,t,n),i=n.getTensorArray(r.id);return i.scatter(a,s),[i.idTensor]}case"TensorArrayConcatV3":{let r=I("tensorArrayId",e,t,n),a=n.getTensorArray(r.id),s=I("dtype",e,t,n);return[a.concat(s)]}case"TensorArraySplitV3":{let r=I("tensorArrayId",e,t,n),a=I("tensor",e,t,n),s=I("lengths",e,t,n),i=n.getTensorArray(r.id);return i.split(s,a),[i.idTensor]}case"TensorArraySizeV3":{let r=I("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return[Ee(a.size(),"int32")]}case"TensorArrayCloseV3":{let r=I("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return a.clearAndClose(),[a.idTensor]}case"TensorListSetItem":{let r=I("tensorListId",e,t,n),a=I("index",e,t,n),s=I("tensor",e,t,n),i=n.getTensorList(r.id);return i.setItem(a,s),[i.idTensor]}case"TensorListGetItem":{let r=I("tensorListId",e,t,n),a=I("index",e,t,n),s=I("elementShape",e,t,n),i=I("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(a,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let r=I("indices",e,t,n),a=I("tensor",e,t,n),s=I("elementShape",e,t,n),i=I("numElements",e,t,n),o=zte(a,r,s,i);return n.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r=I("elementShape",e,t,n),a=I("elementDType",e,t,n),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=I(s,e,t,n),o=Ote(r,a,i);return n.addTensorList(o),[o.idTensor]}case"TensorListGather":{let r=I("tensorListId",e,t,n),a=I("indices",e,t,n),s=I("elementShape",e,t,n),i=I("elementDType",e,t,n);return[n.getTensorList(r.id).gather(a,i,s)]}case"TensorListStack":{let r=I("tensorListId",e,t,n),a=I("elementShape",e,t,n),s=I("elementDType",e,t,n),i=I("numElements",e,t,n);return[n.getTensorList(r.id).stack(a,s,i)]}case"TensorListFromTensor":{let r=I("tensor",e,t,n),a=I("elementShape",e,t,n),s=I("elementDType",e,t,n),i=Dte(r,a,s);return n.addTensorList(i),[i.idTensor]}case"TensorListConcat":{let r=I("tensorListId",e,t,n),a=n.getTensorList(r.id),s=I("dtype",e,t,n),i=I("elementShape",e,t,n);return[a.concat(s,i)]}case"TensorListPushBack":{let r=I("tensorListId",e,t,n),a=I("tensor",e,t,n),s=n.getTensorList(r.id);return s.pushBack(a),[s.idTensor]}case"TensorListPopBack":{let r=I("tensorListId",e,t,n),a=I("elementShape",e,t,n),s=I("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(a,s)]}case"TensorListSplit":{let r=I("tensor",e,t,n),a=I("elementShape",e,t,n),s=I("lengths",e,t,n),i=Pte(r,s,a);return n.addTensorList(i),[i.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function S7(e,t,n){let[r,a]=I("fusedOps",e,t,n),s=r==="biasadd",i=a==="prelu",o=r==="fusedbatchnorm",l=I("numArgs",e,t,n);if(s){if(i&&l!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&l!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(o)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported.");let c=I("strides",e,t,n),u=Xp(e,t,n),h=I("dataFormat",e,t,n).toUpperCase(),d=I("dilations",e,t,n),[p,f]=I("args",e,t,n),m=I("leakyreluAlpha",e,t,n);return{stride:c,pad:u,dataFormat:h,dilations:d,biasArg:p,preluArg:f,activationFunc:a,leakyreluAlpha:m}}var Wte=(e,t,n)=>{switch(e.op){case"Conv1D":{let r=I("stride",e,t,n),a=I("pad",e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilation",e,t,n);return[Jh(I("x",e,t,n),I("filter",e,t,n),r,a,s,i)]}case"Conv2D":{let r=I("strides",e,t,n),a=Xp(e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[Yr(I("x",e,t,n),I("filter",e,t,n),[r[1],r[2]],a,s,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:c,leakyreluAlpha:u}=S7(e,t,n);return[ka.conv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:c,preluActivationWeights:l,leakyreluAlpha:u})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:c,leakyreluAlpha:u}=S7(e,t,n);return[ka.depthwiseConv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:c,preluActivationWeights:l,leakyreluAlpha:u})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=I("outputShape",e,t,n),a=I("strides",e,t,n),s=Xp(e,t,n);return[Yh(I("x",e,t,n),I("filter",e,t,n),r,[a[1],a[2]],s)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=I("strides",e,t,n),a=Xp(e,t,n),s=I("dilations",e,t,n),i=I("dataFormat",e,t,n).toUpperCase();return[js(I("input",e,t,n),I("filter",e,t,n),[r[1],r[2]],a,i,[s[1],s[2]])]}case"Conv3D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[Rf(I("x",e,t,n),I("filter",e,t,n),[r[1],r[2],r[3]],a,s,[i[1],i[2],i[3]])]}case"AvgPool":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[xu(I("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPool":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Su(I("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPoolWithArgmax":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n),i=I("includeBatchInIndex",e,t,n),{result:o,indexes:l}=Eg(I("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a,i);return[o,l]}case"AvgPool3D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Ef(I("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"MaxPool3D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Wf(I("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"Dilation2D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("dilations",e,t,n),i=r[1],o=r[2],l=s[1],c=s[2];return[Mf(I("x",e,t,n),I("filter",e,t,n),[i,o],a,[l,c],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Bte=(e,t,n)=>{switch(e.op){case"Fill":{let r=I("shape",e,t,n),a=I("dtype",e,t,n),s=I("value",e,t,n);return[vu(r,s,a)]}case"LinSpace":{let r=I("start",e,t,n),a=I("stop",e,t,n),s=I("num",e,t,n);return[Ig(r,a,s)]}case"Multinomial":{let r=I("logits",e,t,n),a=I("numSamples",e,t,n),s=I("seed",e,t,n);return[Cg(r,a,s)]}case"OneHot":{let r=I("indices",e,t,n),a=I("depth",e,t,n),s=I("onValue",e,t,n),i=I("offValue",e,t,n);return[Lo(r,a,s,i)]}case"Ones":return[Cr(I("shape",e,t,n),I("dtype",e,t,n))];case"OnesLike":return[In(I("x",e,t,n))];case"RandomUniform":return[jo(I("shape",e,t,n),I("minval",e,t,n),I("maxval",e,t,n),I("dtype",e,t,n))];case"Range":{let r=I("start",e,t,n),a=I("stop",e,t,n),s=I("step",e,t,n);return[ld(r,a,s,I("dtype",e,t,n))]}case"TruncatedNormal":{let r=I("shape",e,t,n),a=I("mean",e,t,n),s=I("stdDev",e,t,n),i=I("seed",e,t,n);return[yd(r,a,s,I("dtype",e,t,n),i)]}case"Zeros":return[Rt(I("shape",e,t,n),I("dtype",e,t,n))];case"ZerosLike":return[Ge(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function I2(e,t,n){let r=I("boxes",e,t,n),a=I("scores",e,t,n),s=I("maxOutputSize",e,t,n),i=I("iouThreshold",e,t,n),o=I("scoreThreshold",e,t,n),l=I("softNmsSigma",e,t,n);return{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var Vte=async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}=I2(e,t,n),c=await Ot.nonMaxSuppressionWithScoreAsync(r,a,s,i,o,l);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=I2(e,t,n),l=I("padToMaxOutputSize",e,t,n),c=await Ot.nonMaxSuppressionPaddedAsync(r,a,s,i,o,l);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=I2(e,t,n);return[await Ot.nonMaxSuppressionAsync(r,a,s,i,o)]}case"Where":{let r=ge(I("condition",e,t,n),"bool"),a=[await Jf(r)];return r.dispose(),a}case"ListDiff":return Mg(I("x",e,t,n),I("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},Ute=(e,t,n)=>{switch(e.op){case"TopKV2":{let r=I("x",e,t,n),a=I("k",e,t,n),s=I("sorted",e,t,n),i=Kf(r,a,s);return[i.values,i.indices]}case"Unique":{let r=I("x",e,t,n),a=gd(r);return[a.values,a.indices]}case"UniqueV2":{let r=I("x",e,t,n),a=I("axis",e,t,n),s=gd(r,a);return[s.values,s.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Hte=(e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=I("default",e,t,n);return[wn(e.name,t,n)||r];case"Placeholder":return[wn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",e,t,n);return[ha(c)]}case"IdentityN":return I("x",e,t,n).map(c=>ha(c));case"Snapshot":let a=I("x",e,t,n);return[ha(a)];case"Shape":return[nn(I("x",e,t,n).shape,"int32")];case"ShapeN":return I("x",e,t,n).map(c=>nn(c.shape));case"Size":return[Ee(I("x",e,t,n).size,"int32")];case"Rank":return[Ee(I("x",e,t,n).rank,"int32")];case"NoOp":return[Ee(1)];case"Print":let s=I("x",e,t,n),i=I("data",e,t,n),o=I("message",e,t,n),l=I("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(o);for(let c=0;c<i.length;c++)console.log(Array.prototype.slice.call(i[c].dataSync()).slice(0,l));return[s];default:throw TypeError(`Node type ${e.op} is not implemented`)}},jte=class{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=Ee(0),this.tensorMap=new Map,jt(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach(e=>e.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(r=>r.dispose()),this.tensorMap.clear(),U(()=>{let r=nr(t),a=n.length,s=r.length;k.assert(a===s,()=>`The number of elements doesn't match, keys has ${a} elements, the values has ${s} elements.`);for(let i=0;i<a;i++){let o=n[i],l=r[i];jt(l),this.tensorMap.set(o,l)}return this.handle})}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return U(()=>{let r=[];for(let a=0;a<n.length;a++){let s=n[a],i=this.findWithDefault(s,t);r.push(i)}return Sn(r)})}findWithDefault(e,t){let n=this.tensorMap.get(e);return n!=null?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}},Gte=async(e,t,n,r)=>{switch(e.op){case"HashTable":case"HashTableV2":{let a=I("keyDType",e,t,n),s=I("valueDType",e,t,n),i=new jte(a,s);return r.addHashTable(e.name,i),[i.handle]}case"LookupTableImport":case"LookupTableImportV2":{let a=I("tableHandle",e,t,n,r),s=I("keys",e,t,n),i=I("values",e,t,n);return[await r.getHashTableById(a.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let a=I("tableHandle",e,t,n,r),s=I("keys",e,t,n),i=I("defaultValue",e,t,n);return[await r.getHashTableById(a.id).find(s,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},qte=(e,t,n)=>{switch(e.op){case"ResizeBilinear":{let r=I("images",e,t,n),a=I("size",e,t,n),s=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[Ot.resizeBilinear(r,[a[0],a[1]],s,i)]}case"ResizeNearestNeighbor":{let r=I("images",e,t,n),a=I("size",e,t,n),s=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[Ot.resizeNearestNeighbor(r,[a[0],a[1]],s,i)]}case"CropAndResize":{let r=I("image",e,t,n),a=I("boxes",e,t,n),s=I("boxInd",e,t,n),i=I("cropSize",e,t,n),o=I("method",e,t,n),l=I("extrapolationValue",e,t,n);return[Ot.cropAndResize(r,a,s,i,o,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Xte=(e,t,n)=>{switch(e.op){case"Equal":return[Qr(I("a",e,t,n),I("b",e,t,n))];case"NotEqual":return[ba(I("a",e,t,n),I("b",e,t,n))];case"Greater":return[Hn(I("a",e,t,n),I("b",e,t,n))];case"GreaterEqual":return[ea(I("a",e,t,n),I("b",e,t,n))];case"Less":return[Iu(I("a",e,t,n),I("b",e,t,n))];case"LessEqual":return[_a(I("a",e,t,n),I("b",e,t,n))];case"LogicalAnd":return[tr(I("a",e,t,n),I("b",e,t,n))];case"LogicalNot":return[Nu(I("a",e,t,n))];case"LogicalOr":return[ad(I("a",e,t,n),I("b",e,t,n))];case"Select":case"SelectV2":return[An(I("condition",e,t,n),I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Kte=(e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[Ke(I("a",e,t,n),I("b",e,t,n),I("transposeA",e,t,n),I("transposeB",e,t,n))];case"Transpose":return[st(I("x",e,t,n),I("perm",e,t,n))];case"_FusedMatMul":let[r,a]=I("fusedOps",e,t,n),s=r==="biasadd",i=a==="prelu",o=I("numArgs",e,t,n),l=I("leakyreluAlpha",e,t,n);if(s){if(i&&o!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&o!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[c,u]=I("args",e,t,n);return[ka.matMul({a:I("a",e,t,n),b:I("b",e,t,n),transposeA:I("transposeA",e,t,n),transposeB:I("transposeB",e,t,n),bias:c,activation:a,preluActivationWeights:u,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Zte=(e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[Hs(I("x",e,t,n),I("mean",e,t,n),I("variance",e,t,n),I("offset",e,t,n),I("scale",e,t,n),I("epsilon",e,t,n))];case"FusedBatchNormV3":return[Hs(I("x",e,t,n),I("mean",e,t,n),I("variance",e,t,n),I("offset",e,t,n),I("scale",e,t,n),I("epsilon",e,t,n))];case"LRN":return[Pf(I("x",e,t,n),I("radius",e,t,n),I("bias",e,t,n),I("alpha",e,t,n),I("beta",e,t,n))];case"Softmax":return[Fu(I("x",e,t,n))];case"LogSoftmax":return[rd(I("x",e,t,n))];case"SparseToDense":return[Yf(I("sparseIndices",e,t,n),I("outputShape",e,t,n),I("sparseValues",e,t,n),I("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Jte=(e,t,n)=>{switch(e.op){case"Max":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[jn(I("x",e,t,n),i,o)]}case"Mean":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[It(I("x",e,t,n),i,o)]}case"Min":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Ho(I("x",e,t,n),i,o)]}case"Sum":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Ce(I("x",e,t,n),i,o)]}case"All":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Zh(I("x",e,t,n),i,o)]}case"Any":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[yu(I("x",e,t,n),i,o)]}case"ArgMax":{let i=I("axis",e,t,n);return[gu(I("x",e,t,n),i)]}case"ArgMin":{let i=I("axis",e,t,n);return[vf(I("x",e,t,n),i)]}case"Prod":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[od(I("x",e,t,n),i,o)]}case"Cumsum":{let i=I("axis",e,t,n),o=I("exclusive",e,t,n),l=I("reverse",e,t,n);return[ed(I("x",e,t,n),i,o,l)]}case"Bincount":let r=I("x",e,t,n),a=I("weights",e,t,n),s=I("size",e,t,n);return[Ag(r,a,s)];case"DenseBincount":{let i=I("x",e,t,n),o=I("weights",e,t,n),l=I("size",e,t,n),c=I("binaryOutput",e,t,n);return[wg(i,o,l,c)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Yte=(e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=I("n",e,t,n),a=I("axis",e,t,n),s=I("tensors",e,t,n);return s=s.slice(0,r),[dt(s,a)]}case"Gather":{let r=I("x",e,t,n),a=I("indices",e,t,n);return[Gs(r,ge(a,"int32"),0)]}case"GatherV2":{let r=I("axis",e,t,n),a=I("batchDims",e,t,n),s=I("x",e,t,n),i=I("indices",e,t,n);return[Gs(s,ge(i,"int32"),r,a)]}case"Reverse":{let r=I("dims",e,t,n),a=[];for(let i=0;i<r.length;i++)r[i]&&a.push(i);let s=I("x",e,t,n);return[Nn(s,a)]}case"ReverseV2":{let r=I("axis",e,t,n),a=I("x",e,t,n);return[Nn(a,r)]}case"Slice":{let r=I("begin",e,t,n),a=I("size",e,t,n);return[Me(I("x",e,t,n),r,a)]}case"StridedSlice":{let r=I("begin",e,t,n),a=I("end",e,t,n),s=I("strides",e,t,n),i=I("beginMask",e,t,n),o=I("endMask",e,t,n),l=I("ellipsisMask",e,t,n),c=I("newAxisMask",e,t,n),u=I("shrinkAxisMask",e,t,n),h=I("x",e,t,n);return[qf(h,r,a,s,i,o,l,c,u)]}case"Pack":return U(()=>{let r=I("axis",e,t,n),a=I("tensors",e,t,n),s=a[0].shape,i=va(a[0]).shape,o=a.map(l=>{let c=k.arraysEqual(l.shape,s);if(!c&&!k.arraysEqual(va(l).shape,i))throw new Error("the input tensors shape does not match");return c?l:K(l,s)});return[Sn(o,r)]});case"Unpack":{let r=I("axis",e,t,n),a=I("tensor",e,t,n);return nr(a,r)}case"Tile":{let r=I("reps",e,t,n);return[wa(I("x",e,t,n),r)]}case"Split":case"SplitV":{let r=I("axis",e,t,n),a=I("numOrSizeSplits",e,t,n),s=I("x",e,t,n);return sn(s,a,r)}case"ScatterNd":{let r=I("indices",e,t,n),a=I("values",e,t,n),s=I("shape",e,t,n);return[Zg(r,a,s)]}case"GatherNd":{let r=I("x",e,t,n),a=I("indices",e,t,n);return[Jg(r,a)]}case"SparseToDense":{let r=I("sparseIndices",e,t,n),a=I("outputShape",e,t,n),s=I("sparseValues",e,t,n),i=I("defaultValue",e,t,n);return[Yf(r,s,a,s.dtype===i.dtype?i:ge(i,s.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Qte=(e,t,n)=>{switch(e.op){case"FFT":return[Mu(I("x",e,t,n))];case"IFFT":return[Go(I("x",e,t,n))];case"RFFT":return[$u(I("x",e,t,n))];case"IRFFT":return[Ad(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},ene=(e,t,n)=>{switch(e.op){case"Cast":return[ge(I("x",e,t,n),I("dtype",e,t,n))];case"ExpandDims":{let r=I("axis",e,t,n);return[Un(I("x",e,t,n),r)]}case"Squeeze":{let r=I("axis",e,t,n);return[va(I("x",e,t,n),r)]}case"Reshape":return[K(I("x",e,t,n),I("shape",e,t,n))];case"MirrorPad":return[Bf(I("x",e,t,n),I("padding",e,t,n),I("mode",e,t,n))];case"PadV2":case"Pad":return[ta(I("x",e,t,n),I("padding",e,t,n),I("constantValue",e,t,n))];case"SpaceToBatchND":{let r=I("blockShape",e,t,n),a=I("paddings",e,t,n);return[Tu(I("x",e,t,n),r,a)]}case"BatchToSpaceND":{let r=I("blockShape",e,t,n),a=I("crops",e,t,n);return[wu(I("x",e,t,n),r,a)]}case"DepthToSpace":{let r=I("blockSize",e,t,n),a=I("dataFormat",e,t,n).toUpperCase();return[Ff(I("x",e,t,n),r,a)]}case"BroadcastTo":return[_u(I("x",e,t,n),I("shape",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function T7(e,t,n,r){let a=((s,i,o)=>{switch(s.category){case"arithmetic":return U(()=>Rte(s,i,o));case"basic_math":return U(()=>Fte(s,i,o));case"control":return Lte(s,i,o);case"convolution":return U(()=>Wte(s,i,o));case"creation":return U(()=>Bte(s,i,o));case"dynamic":return Vte(s,i,o);case"evaluation":return U(()=>Ute(s,i,o));case"image":return U(()=>qte(s,i,o));case"graph":return U(()=>Hte(s,i,o));case"logical":return U(()=>Xte(s,i,o));case"matrices":return U(()=>Kte(s,i,o));case"normalization":return U(()=>Zte(s,i,o));case"reduction":return U(()=>Jte(s,i,o));case"slice_join":return U(()=>Yte(s,i,o));case"spectral":return U(()=>Qte(s,i,o));case"transformation":return U(()=>ene(s,i,o));case"hash_table":return Gte(s,i,o,r);case"custom":let l=s7(s.op);if(l&&l.customExecutor)return l.customExecutor(new Cte(s,i,o));throw TypeError(`Custom op ${s.op} is not registered.`);default:throw TypeError(`Unknown op '${s.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 k.isPromise(a)?a.then(s=>[].concat(s)):[].concat(a)}var E7=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;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map(t=>t.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 R7(e,t,n,r){let a=new Set,s=[],i=null,o=null,l=new Set,c=Object.keys(e).map(d=>$n(d)[0]),u=[];r!=null&&(u=r.map(d=>$n(d.name)[0]));let h=[...t];for(;h.length>0;){let d=h.pop();if((C7(d)||tne(d)||nne(d))&&i==null&&(i=d,o=i.children.map(p=>p.name).filter(p=>a.has(p))),a.add(d.name),n[d.name]==null&&c.indexOf(d.name)===-1&&u.indexOf(d.name)===-1){if(d.inputs.length===0){s.push(d.name);continue}d.inputs.forEach(p=>{l.has(p.name)||(l.add(p.name),h.push(p))})}}return{inputs:e,outputs:t,usedNodes:a,missingInputs:s,dynamicNode:i,syncInputs:o}}function rne(e,t,n){let{usedNodes:r,inputs:a}=n,s=[],i=Object.keys(a).map(u=>$n(u)[0]).map(u=>e.nodes[u]),o=e.initNodes;i.forEach(u=>{r.has(u.name)&&s.push(u)}),e.weights.forEach(u=>{r.has(u.name)&&s.push(u)}),o!=null&&o.forEach(u=>{r.has(u.name)&&s.push(u)});let l=new Set,c=[];for(;s.length>0;){let u=s.pop();l.add(u.name),t[u.name]||c.push(u),u.children.forEach(h=>{!l.has(h.name)&&r.has(h.name)&&h.inputs.every(d=>l.has(d.name))&&s.push(h)})}return c}var ane=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],sne=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],ine=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2"];function C7(e){return ane.indexOf(e.op)>=0}function tne(e){return sne.indexOf(e.op)>=0}function nne(e){return ine.indexOf(e.op)>=0}var N2=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 N2(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(a=>a.name).sort(),r=t.map(a=>a.name).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)}compile(e,t){let n=R7(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:a,syncInputs:s}=n;if(a!=null)throw new Error(`This execution contains the node '${a.name}', which has the dynamic op '${a.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(r.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${r}]`)}return rne(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(u=>this.graph.nodes[$n(u)[0]]),a=t.map(u=>$n(u)[0]),s=a.map(u=>this.graph.nodes[u]);s.length===0&&(s=this._outputs);let i=this.getCompilationKey(r,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));let l={},c={};return U(()=>{let u=new E7(this.weightMap,l,c,this.functionExecutorMap),h=Object.assign({},this.weightMap);Object.keys(e).forEach(f=>{let[m,A]=$n(f),y=[];y[A]=e[f],h[m]=y});let d=this.getFrozenTensorIds(h),p={};for(let f=0;f<o.length;f++){let m=o[f];if(!h[m.name]){let A=T7(m,h,u,this._resourceManager);if(k.isPromise(A))throw new Error(`The execution of the op '${m.op}' returned a promise. Please use model.executeAsync() instead.`);h[m.name]=A,this.checkTensorForDisposal(m.name,m,h,u,d,a,p)}}return this.parent==null&&u.dispose(d),t.map(f=>wn(f,h,u))})}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,a,s,i){t.category==="control"||s.indexOf(e)!==-1||(n[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=hte(o.name,n,r);l!=null&&l.forEach(c=>{if(c&&!a.has(c.id)){let u=i[c.id];u===1?(c.dispose(),delete i[c.id]):u!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}async _executeAsync(e,t,n=!1,r={},a={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));let s=new E7(this.weightMap,r,a,this.functionExecutorMap),i=await this.executeWithControlFlow(e,s,t,n),o=t.map(h=>wn(h,i,s)),l=o.map(h=>h.id),c=Object.keys(e).map(h=>e[h].id),u=new Set([...l,...c,...this.weightIds]);return Object.keys(i).forEach(h=>{i[h].forEach(d=>{d&&!d.isDisposed&&!u.has(d.id)&&d.dispose()})}),this.parent==null&&s.dispose(u),o}async executeFunctionAsync(e,t,n){let r=e.reduce((a,s,i)=>(a[this.inputs[i].name]=s,a),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){let a=Object.keys(e),s=a.map(g=>this.graph.nodes[$n(g)[0]]),i=n.map(g=>$n(g)[0]),o=i.map(g=>this.graph.nodes[g]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:c,dynamicNode:u,syncInputs:h}=R7(e,o,this.weightMap,this._initNodes),d=[...s,...this.graph.weights,...this._initNodes||[]].map(g=>({node:g,contexts:t.currentContext})),p=Object.assign({},this.weightMap);Object.keys(e).forEach(g=>{let[w,x]=$n(g),_=[];_[x]=e[g],p[w]=_});let f={},m=this.getFrozenTensorIds(p),A={};for(;d.length>0;){let g=this.processStack(s,d,t,p,A,m,i,f,l);await Promise.all(g)}u==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 y=o.filter(g=>!C7(g)&&!wn(g.name,p,t)).map(g=>g.name);if(y.length>0){let g="";throw u!=null&&(g=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${a}]. Consider providing the following inputs: [${c}]. ${g}`)}return p}processStack(e,t,n,r,a,s,i,o,l){let c=[];for(;t.length>0;){let u=t.pop();n.currentContext=u.contexts;let h="";if(u.node.op==="Enter"&&I("isConstant",u.node,r,n)&&([h]=ca(u.node.name,n)),r[u.node.name]==null){let d=T7(u.node,r,n,this._resourceManager);h||([h]=ca(u.node.name,n));let p=n.currentContext;k.isPromise(d)?c.push(d.then(f=>(r[h]=f,n.currentContext=p,this.checkTensorForDisposal(h,u.node,r,n,s,i,o),this.processChildNodes(u.node,t,n,r,a,l),f))):(r[h]=d,this.checkTensorForDisposal(h,u.node,r,n,s,i,o),this.processChildNodes(u.node,t,n,r,a,l))}else this.processChildNodes(u.node,t,n,r,a,l)}return c}processChildNodes(e,t,n,r,a,s){e.children.forEach(i=>{let[o]=ca(i.name,n);a[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!wn(l,r,n))&&(a[o]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(l=>!!wn(l,r,n))&&(a[o]=!0,t.push({contexts:n.currentContext,node:i})))})}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]=$n(t),a=this.graph.nodes[r];if(a.attrParams.shape&&a.attrParams.shape.value){let s=a.attrParams.shape.value,i=s.length===n.shape.length&&n.shape.every((o,l)=>s[l]===-1||s[l]===o);k.assert(i,()=>`The shape of dict['${a.name}'] provided in model.execute(dict) must be [${s}], but was [${n.shape}]`)}a.attrParams.dtype&&a.attrParams.dtype.value&&k.assert(n.dtype===a.attrParams.dtype.value,()=>`The dtype of dict['${a.name}'] provided in model.execute(dict) must be ${a.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]=$n(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]=$n(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},one=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]}},lne="?tfjs-format=file",une="model.json",v0=class{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",t==null&&(this.loadOptions={}),this.resourceManager=new one}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=fn.browserHTTPRequest(e,this.loadOptions);else{let t=fn.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(fn.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=fn.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new N2(k7.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let a=k7.Instance.transformGraph(e.modelInitializer);this.initializer=new N2(a),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=fn.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 j)&&!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 pr(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}${une}${lne}`);let n=new v0(e,t);return await n.load(),n}var e8="2.8.3",k0={};Pe(k0,{CSVDataset:()=>M7,Dataset:()=>Sl,FileDataSource:()=>$7,TextLineDataset:()=>F7,URLDataSource:()=>D7,array:()=>cne,csv:()=>dne,func:()=>pne,generator:()=>fne,microphone:()=>Ane,version_data:()=>yne,webcam:()=>mne,zip:()=>hne});var gne=Ko(N0()),xne=Ko(N0());function wne(e,t){return Kp(e,t)}function Kp(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 a=t(e);if(a.recurse&&a.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(a.recurse)if(Tl(e)){let s=Array.isArray(e)?[]:{};r.add(e);for(let i in e){let o=e[i],l=Kp(o,t,n,r);s[i]=l}return r.delete(e),s}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,a.value),a.value}function _ne(e,t=z7){return O7(e,t)}function O7(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let a=t(e);if(a.recurse&&a.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(a.recurse)if(Tl(r)){let s=Array.isArray(r)?[]:{};n.add(r);for(let i in r){let o=e.map(c=>c[i]),l=O7(o,t,n);s[i]=l}return n.delete(r),s}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return a.value}function z7(e){return e===null?null:Tl(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function P7(e,t){let n=new Map;Kp(e,t,n);for(let r of Array.from(n.keys())){let a=n.get(r);if(k.isPromise(a)){let s=await a;n.set(r,s)}}return Kp(e,t,n)}function Tl(e){return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof j))}function vne(e){return e==null||bne(e)||Array.isArray(e)||typeof e=="object"&&e instanceof j||k.isTypedArray(e)}function bne(e){return e===null||typeof e!="object"&&typeof e!="function"}function Ine(e){return wne(e,kne)}function kne(e){return e instanceof j?{value:e.clone(),recurse:!1}:Tl(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var L7=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}},S2=class extends L7{constructor(){super(S2.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;r<n;r++)t[r]=this.get(this.wrap(this.begin+r));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};S2.INITIAL_CAPACITY=32;function W7(e){return new Nne(e)}function T2(e){return new Sne(e)}function Tne(e,t){return new B7(e,t)}function Cne(e,t=Ba.FAIL){return new Ene(e,t)}var Zt=class{async toArray(){let e=[],t=await this.next();for(;!t.done;)e.push(t.value),t=await this.next();return e}async toArrayForTest(){let e=this.prefetch(100),t=[],n=await e.next();for(;!n.done;)t.push(n.value),n=await e.next();return t}async resolveFully(){let e=await this.next();for(;!e.done;)e=await this.next()}async resolveWhile(e){let t=await this.next(),n=e(t.value);for(;!t.done&&n;)t=await this.next(),n=e(t.value)}handleErrors(e){return new zne(this,e)}filter(e){return new Dne(this,e)}map(e){return new One(this,e)}mapAsync(e){return new V7(this,e)}serialMapAsync(e){return new V7(this,e).serial()}flatmap(e){return new Pne(this,e)}async forEachAsync(e){return this.map(e).resolveFully()}async serialForEach(e){return this.serialMapAsync(e).resolveWhile(t=>t===!0)}rowMajorBatch(e,t=!0){return new $ne(this,e,t)}columnMajorBatch(e,t=!0,n=z7){return this.rowMajorBatch(e,t).map(r=>_ne(r,n))}concatenate(e,t){return new B7(W7([this,e]),t)}take(e){return e<0||e==null?this:new Mne(this,e)}skip(e){return e<0||e==null?this:new Fne(this,e)}prefetch(e){return new U7(this,e)}shuffle(e,t){return new Lne(this,e,t)}serial(){return new Rne(this)}},Nne=class extends Zt{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:Ine(e),done:!1}}},Sne=class extends Zt{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}}},Rne=class extends Zt{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()}},Fne=class extends Zt{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++<this.maxCount;){let e=await this.upstream.next();if(e.done)return e;$e(e.value)}return this.upstream.next()}},Mne=class extends Zt{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},$ne=class extends Zt{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.length<this.batchSize;){let t=await this.upstream.next();if(t.done)return this.enableSmallLastBatch&&e.length>0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},Dne=class extends Zt{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;$e(e.value)}}},One=class extends Zt{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=fr.getTensorsInContainer(e.value),n=this.transform(e.value),r=fr.getTensorsInContainer(n);for(let a of t)fr.isTensorInList(a,r)||a.dispose();return{value:n,done:!1}}},zne=class extends Zt{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}}}},V7=class extends Zt{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=fr.getTensorsInContainer(e.value),n=await this.transform(e.value),r=fr.getTensorsInContainer(n);for(let a of t)fr.isTensorInList(a,r)||a.dispose();return{value:n,done:!1}}},E2=class extends Zt{constructor(){super();this.outputQueue=new S2,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}}},Pne=class extends E2{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=fr.getTensorsInContainer(e.value),n=this.transform(e.value),r=fr.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let a of t)fr.isTensorInList(a,r)||a.dispose();return!0}},B7=class extends Zt{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}},Ba;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(Ba||(Ba={}));var Ene=class extends Zt{constructor(e,t=Ba.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(s){return s instanceof Zt?{value:s.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let a=await P7(this.iterators,r);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case Ba.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case Ba.SHORTEST:return{value:null,done:!0};case Ba.LONGEST:default:}return this.count++,{value:a,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},U7=class extends Zt{constructor(e,t){super();this.upstream=e,this.bufferSize=t,this.buffer=new L7(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()}},Lne=class extends U7{constructor(e,t,n){super(e,t);this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=xne.alea(n||k.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}}},Sl=class{constructor(){this.size=null}batch(e,t=!0){let n=this;k.assert(e>0,()=>`batchSize needs to be positive, but it is
|
|
${e}`);let r;return this.size===Infinity||this.size==null?r=this.size:t?r=Math.ceil(this.size/e):r=Math.floor(this.size/e),Dn(async()=>(await n.iterator()).columnMajorBatch(e,t,Wne),r)}concatenate(e){let t=this,n;return this.size===Infinity||e.size===Infinity?n=Infinity:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,Dn(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===Infinity?n=Infinity:n=null,Dn(async()=>(await t.iterator()).filter(r=>U(()=>e(r))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Dn(async()=>(await t.iterator()).map(n=>U(()=>e(n))),this.size)}mapAsync(e){let t=this;return Dn(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 Dn(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=Infinity:n=null,Dn(async()=>{let r=T2(async()=>({value:await t.iterator(),done:!1}));return Tne(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<e||e===void 0||e<0)?n=0:n=null,Dn(async()=>(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,a=gne.alea(t||k.now().toString());return Dn(async()=>{let s=a.int32();return n&&(s+=a.int32()),(await r.iterator()).shuffle(e,s.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,Dn(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Sl.MAX_BUFFER_SIZE=1e4;function Dn(e,t=null){return new class extends Sl{constructor(){super(...arguments);this.size=t}async iterator(){return e()}}}function cne(e){return Dn(async()=>W7(e),e.length)}function hne(e){if(!Tl(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<e.length;n++)t=t==null?e[n].size:Math.min(t,e[n].size);else if(e instanceof Object)for(let n in e)t=t==null?e[n].size:Math.min(t,e[n].size);return Dn(async()=>{let n=await P7(e,r=>{if(r instanceof Sl)return{value:r.iterator(),recurse:!1};if(Tl(r))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return Cne(n,Ba.SHORTEST)},t)}function Wne(e){if(e===null)return null;let t=e[0];return vne(t)?{value:Bne(e),recurse:!1}:{value:null,recurse:!0}}function Bne(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof j?Sn(e):mr(e)}var F7=class extends Sl{constructor(e){super();this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(`
|
|
`).map(e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e))}},Zp='"',Cc=Symbol("out"),H7=Symbol("field"),Jp=Symbol("quote"),C2=Symbol("quoteafterquote"),j7=Symbol("quoteinquote"),M7=class extends Sl{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 F7(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(k.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&&k.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,a)=>(r[a]=r[a]+1||1,r),{}),n=Object.keys(t).filter(r=>t[r]>1);if(k.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 e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let t=e.value;return this.parseRow(t,!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 a=0;a<this.fullColumnNames.length;a++){let s=this.fullColumnNames[a],i=this.columnConfigs?this.columnConfigs[s]:null;if(!(this.configuredColumnsOnly&&!i)){let o=t[a],l=null;if(o==="")if(i&&i.default!==void 0)l=i.default;else{if(i&&(i.required||i.isLabel))throw new Error(`Required column ${s} is empty in this line: ${e}`);l=void 0}else{let c=Number(o);if(isNaN(c))i&&i.dtype==="bool"?l=this.getBoolean(o):l=o;else if(!i||!i.dtype)l=c;else switch(i.dtype){case"float32":l=c;break;case"int32":l=Math.floor(c);break;case"bool":l=this.getBoolean(o);break;default:l=c}}i&&i.isLabel?r[s]=l:n[s]=l}}return Object.keys(r).length===0?n:{xs:n,ys:r}}getBoolean(e){return e==="1"||e.toLowerCase()==="true"?1:0}parseRow(e,t=!0){let n=[],r=0,a=e.length,s=Cc;for(let i=0;i<a;i++)switch(s){case Cc:switch(e.charAt(i)){case Zp:r=i+1,s=Jp;break;case this.delimiter:if(r=i+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),s=Cc;break;default:s=H7,r=i;break}break;case H7:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(r,i)),s=Cc,r=i+1;break;default:}break;case Jp:switch(e.charAt(i)){case Zp:s=C2;break;default:}break;case C2:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(r,i-1)),s=Cc,r=i+1;break;case Zp:s=Jp;break;default:s=j7;break}break;case j7:switch(e.charAt(i)){case Zp:s=Jp;break;default:}break;default:}if(s===C2?n.push(e.substring(r,a-1)):n.push(e.substring(r)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},G7=class extends Zt{constructor(e){super();this.microphoneConfig=e,this.isClosed=!1,this.fftSize=e.fftSize||1024;let t=Math.log2(this.fftSize);if(this.fftSize<0||t<4||t>14||!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(Q().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");let t=new G7(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 a=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-Infinity&&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(a),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,a)=>n.set(r,a*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(k.sizeFromShape(t));return n.set(e,n.length-e.length),mr(n,t)}},q7=class extends Zt{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=nn([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,r=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,a=(1-n)/2,s=(1-r)/2,i=a+n,o=r+s;this.cropBox=dr([s,a,o,i],[1,4])}else this.cropBox=dr([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(Q().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 q7(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&k.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=Kl.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 U(()=>{let t=e.toFloat().expandDims(0),n;n=Ot.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let r=n.shape;return n.reshape(r.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(e=>e.stop());try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},X7=class{},K7=class extends Zt{split(e){return new Vne(this,e)}},Vne=class extends K7{constructor(e,t){super();this.upstream=e,this.impl=new Une(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Une=class extends E2{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}},jne=class extends Zt{decodeUTF8(){return new Hne(this)}},Hne=class extends K7{constructor(e){super();this.upstream=e,this.impl=new Gne(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Gne=class extends E2{constructor(e){super();if(this.upstream=e,Q().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=O8();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 Q().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},Z7=class extends jne{constructor(e,t={}){super();this.file=e,this.options=t,k.assert(e instanceof Uint8Array||(Q().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((e,t)=>{let n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{let r=new FileReader;r.onload=s=>{let i=r.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(i)},r.onabort=s=>t(new Error("Aborted")),r.onerror=s=>t(new Error(s.type));let a=this.file.slice(this.offset,n);r.readAsArrayBuffer(a)}this.offset=n}),done:!1}}};async function Xne(e,t={}){let n,r;typeof e=="string"?n=e:(n=e.url,r=qne(e));let a=await k.fetch(n,r);if(a.ok){let s=new Uint8Array(await a.arrayBuffer());return new Z7(s,t)}else throw new Error(a.statusText)}var qne=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 J7(e){return typeof e=="string"&&e.substr(0,7)==="file://"}var $7=class extends X7{constructor(e,t={}){super();this.input=e,this.options=t}async iterator(){if(J7(this.input)&&Q().get("IS_NODE")){let e=require("fs");this.input=e.readFileSync(this.input.substr(7))}return new Z7(this.input,this.options)}},D7=class extends X7{constructor(e,t={}){super();this.url=e,this.fileOptions=t}async iterator(){return J7(this.url)?new $7(this.url,this.fileOptions).iterator():Xne(this.url,this.fileOptions)}};function dne(e,t={}){return new M7(new D7(e),t)}function pne(e){let t=T2(e);return Dn(async()=>t)}function fne(e){return Dn(async()=>{let t=await e();return T2(()=>t.next())})}async function mne(e,t){return q7.create(e,t)}async function Ane(e){return G7.create(e)}var yne="2.8.3",t8={tfjs:z8,"tfjs-core":P8,"tfjs-data":L8,"tfjs-layers":W8,"tfjs-converter":B8,"tfjs-backend-cpu":n0,"tfjs-backend-webgl":s0,"tfjs-backend-wasm":u0},dn={name:"humangl",priority:99,canvas:null,gl:null,width:1024,height:1024,webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function Kne(){if(!dg(dn.name)){Ye("backend registration:",dn.name);try{dn.canvas=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(dn.width,dn.height):document.createElement("canvas")}catch(e){Ye("error: cannot create canvas:",e);return}try{dn.gl=dn.canvas.getContext("webgl2",dn.webGLattr)}catch(e){Ye("error: cannot get WebGL2 context:",e);return}try{tm(2,dn.gl)}catch(e){Ye("error: cannot set WebGL2 context:",e);return}try{let e=new nm(dn.gl);Au(dn.name,()=>new rm(e),dn.priority)}catch(e){Ye("error: cannot register WebGL backend:",e);return}try{fu("webgl").forEach(e=>{let t={...e,backendName:dn.name};Po(t)})}catch(e){Ye("error: cannot update WebGL backend registration:",e);return}try{vn.set("WEBGL_VERSION",2),vn.set("WEBGL_MAX_TEXTURE_SIZE",dn.gl.getParameter(dn.gl.MAX_TEXTURE_SIZE)),vn.set("WEBGL_FORCE_F16_TEXTURES",!0),vn.set("WEBGL_PACK_DEPTHWISECONV",!0)}catch(e){Ye("error: cannot set WebGL backend flags:",e);return}Ye("backend registered:",dn.name)}}var R2=Ve(z6()),Rc=Ve(P6()),Fc=Ve(L6()),Mc=Ve(W6()),$c=Ve(B6()),F2=Ve(X6());function hf(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function dh(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function J6(e,t,n){let r=t.shape[1],a=t.shape[2],s=[[e.startPoint[1]/r,e.startPoint[0]/a,e.endPoint[1]/r,e.endPoint[0]/a]];return Ot.cropAndResize(t,s,[0],n)}function K6(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]],a=e.palmLandmarks.map(s=>[s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:r,palmLandmarks:a,confidence:e.confidence}}function df(e,t=1.5){let n=dh(e),r=hf(e),a=[t*r[0]/2,t*r[1]/2],s=[n[0]-a[0],n[1]-a[1]],i=[n[0]+a[0],n[1]+a[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function pf(e){let t=dh(e),n=hf(e),r=Math.max(...n)/2,a=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:s,palmLandmarks:e.palmLandmarks}}function Zne(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Y6(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Zne(n)}var Y7=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Za(e,t){let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}function Jne(e,t){let n=[];for(let r=0;r<e.length;r++)n.push(e[r][t]);return n}function Q7(e,t){let n=[],r=e.length;for(let a=0;a<r;a++){n.push([]);for(let s=0;s<r;s++)n[a].push(Za(e[a],Jne(t,s)))}return n}function J2(e,t){let n=Math.cos(e),r=Math.sin(e),a=[[n,-r,0],[r,n,0],[0,0,1]],s=Y7(t[0],t[1]),i=Q7(s,a),o=Y7(-t[0],-t[1]);return Q7(i,o)}function Q6(e){let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],r=[-Za(t[0],n),-Za(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[1]),[0,0,1]]}function Y2(e,t){return[Za(e,t[0]),Za(e,t[1])]}var M2=Ve(n4()),Yp=Ve(r4()),ev=Ve(s4()),Yne=Ve(Gl()),$2={};G2($2,{default:()=>tv});var tv={backend:"webgl",wasmPath:"../assets/",async:!0,profile:!1,deallocate:!1,scoped:!1,videoOptimized:!0,warmup:"face",filter:{enabled:!0,width:0,height:0,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:"../models/blazeface-back.json",inputSize:256,rotation:!1,maxFaces:10,skipFrames:11,minConfidence:.5,iouThreshold:.2,scoreThreshold:.5},mesh:{enabled:!0,modelPath:"../models/facemesh.json",inputSize:192,returnRawData:!1},iris:{enabled:!0,modelPath:"../models/iris.json",inputSize:64},age:{enabled:!0,modelPath:"../models/age-ssrnet-imdb.json",inputSize:64,skipFrames:31},gender:{enabled:!0,minConfidence:.1,modelPath:"../models/gender-ssrnet-imdb.json",inputSize:64,skipFrames:41},emotion:{enabled:!0,inputSize:64,minConfidence:.2,skipFrames:21,modelPath:"../models/emotion-large.json"},embedding:{enabled:!1,inputSize:112,modelPath:"../models/mobilefacenet.json"}},body:{enabled:!0,modelPath:"../models/posenet.json",inputSize:257,maxDetections:10,scoreThreshold:.5,nmsRadius:20,outputStride:16,modelType:"MobileNet"},hand:{enabled:!0,rotation:!1,inputSize:256,skipFrames:12,minConfidence:.1,iouThreshold:.1,scoreThreshold:.5,maxHands:1,landmarks:!0,detector:{modelPath:"../models/handdetect.json"},skeleton:{modelPath:"../models/handskeleton.json"}}},nv=`
|
|
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`,rv=`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
2Q==`,Qne="0.9.26",At=()=>typeof performance!="undefined"?performance.now():parseInt(Number(process.hrtime.bigint())/1e3/1e3);function El(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,r)=>(Object.keys(r||{}).forEach(a=>{let s=n[a],i=r[a];Array.isArray(s)&&Array.isArray(i)?n[a]=s.concat(...i):t(s)&&t(i)?n[a]=El(s,i):n[a]=i}),n),{})}var av=class{constructor(e={}){this.tf=Q2,this.version=Qne,this.config=El(tv,e),this.fx=null,this.state="idle",this.numTensors=0,this.analyzeMemoryLeaks=!1,this.checkSanity=!1,this.firstRun=!0,this.perf={},this.models={facemesh:null,posenet:null,handpose:null,iris:null,age:null,gender:null,emotion:null},this.facemesh=R2,this.age=Rc,this.gender=Fc,this.emotion=Mc,this.body=F2,this.hand=M2}profile(){return this.config.profile?Yne.data:{}}analyze(...e){if(!this.analyzeMemoryLeaks)return;let t=Bn().state.numTensors,n=this.numTensors;this.numTensors=t;let r=t-n;r!==0&&Ye(...e,r)}sanity(e){if(!this.checkSanity)return null;if(!e)return"input is not defined";if(vn.flags.IS_NODE&&!(e instanceof j))return"input must be a tensor";try{Xh()}catch(t){return"backend not loaded"}return null}simmilarity(e,t){return this.config.face.embedding.enabled?$c.simmilarity(e,t):0}async load(e){this.state="load";let t=At();e&&(this.config=El(this.config,e)),this.firstRun&&(Ye(`version: ${this.version} TensorFlow/JS version: ${lg}`),await this.checkBackend(!0),vn.flags.IS_BROWSER&&(Ye("configuration:",this.config),Ye("tf flags:",vn.flags))),this.config.async?[this.models.facemesh,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.posenet,this.models.handpose]=await Promise.all([this.models.facemesh||(this.config.face.enabled?R2.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?Rc.load(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Fc.load(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Mc.load(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?$c.load(this.config):null),this.models.posenet||(this.config.body.enabled?F2.load(this.config):null),this.models.handpose||(this.config.hand.enabled?M2.load(this.config):null)]):(this.config.face.enabled&&!this.models.facemesh&&(this.models.facemesh=await R2.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await Rc.load(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Fc.load(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Mc.load(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await $c.load(this.config)),this.config.body.enabled&&!this.models.posenet&&(this.models.posenet=await F2.load(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await M2.load(this.config))),this.firstRun&&(Ye("tf engine state:",Bn().state.numBytes,"bytes",Bn().state.numTensors,"tensors"),this.firstRun=!1);let n=Math.trunc(At()-t);n>(this.perf.load||0)&&(this.perf.load=n)}async checkBackend(e){if(this.config.backend&&this.config.backend!==""&&e||Xh()!==this.config.backend){let t=At();this.state="backend",Ye("setting backend:",this.config.backend),this.config.backend==="wasm"&&(Ye("settings wasm path:",this.config.wasmPath),l0(this.config.wasmPath),await Q().getAsync("WASM_HAS_SIMD_SUPPORT")||Ye("warning: wasm simd support is not enabled")),this.config.backend==="humangl"&&Kne();try{await cg(this.config.backend)}catch(n){Ye("error: cannot set backend:",this.config.backend,n)}if(ug(),Xh()==="webgl"){this.config.deallocate&&(Ye("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),vn.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1)),vn.set("WEBGL_FORCE_F16_TEXTURES",!0),vn.set("WEBGL_PACK_DEPTHWISECONV",!0);let n=await wf().getGPGPUContext().gl;Ye(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}await hg(),this.perf.backend=Math.trunc(At()-t)}}async detectFace(e){var t;let n,r,a,s,i,o=[];this.state="run:face",n=At();let l=await((t=this.models.facemesh)==null?void 0:t.estimateFaces(e,this.config));this.perf.face=Math.trunc(At()-n);for(let c of l){if(this.analyze("Get Face"),!c.image||c.image.isDisposedInternal){Ye("Face object is disposed:",c.image);continue}this.analyze("Start Age:"),this.config.async?r=this.config.face.age.enabled?Rc.predict(c.image,this.config):{}:(this.state="run:age",n=At(),r=this.config.face.age.enabled?await Rc.predict(c.image,this.config):{},this.perf.age=Math.trunc(At()-n)),this.analyze("Start Gender:"),this.config.async?a=this.config.face.gender.enabled?Fc.predict(c.image,this.config):{}:(this.state="run:gender",n=At(),a=this.config.face.gender.enabled?await Fc.predict(c.image,this.config):{},this.perf.gender=Math.trunc(At()-n)),this.analyze("Start Emotion:"),this.config.async?s=this.config.face.emotion.enabled?Mc.predict(c.image,this.config):{}:(this.state="run:emotion",n=At(),s=this.config.face.emotion.enabled?await Mc.predict(c.image,this.config):{},this.perf.emotion=Math.trunc(At()-n)),this.analyze("End Emotion:"),this.analyze("Start Embedding:"),this.config.async?i=this.config.face.embedding.enabled?$c.predict(c.image,this.config):{}:(this.state="run:embedding",n=At(),i=this.config.face.embedding.enabled?await $c.predict(c.image,this.config):{},this.perf.embedding=Math.trunc(At()-n)),this.analyze("End Emotion:"),this.config.async&&([r,a,s,i]=await Promise.all([r,a,s,i])),this.analyze("Finish Face:"),c.image.dispose(),this.config.face.iris.enabled||(delete c.annotations.leftEyeIris,delete c.annotations.rightEyeIris);let u=c.annotations.leftEyeIris&&c.annotations.rightEyeIris?11.7*Math.max(Math.abs(c.annotations.leftEyeIris[3][0]-c.annotations.leftEyeIris[1][0]),Math.abs(c.annotations.rightEyeIris[4][1]-c.annotations.rightEyeIris[2][1])):0;o.push({confidence:c.confidence,box:c.box,mesh:c.mesh,boxRaw:c.boxRaw,meshRaw:c.meshRaw,annotations:c.annotations,age:r.age,gender:a.gender,genderConfidence:a.confidence,emotion:s,embedding:i,iris:u!==0?Math.trunc(u)/100:0}),this.analyze("End Face")}return this.analyze("End FaceMesh:"),this.config.async&&(this.perf.face&&delete this.perf.face,this.perf.age&&delete this.perf.age,this.perf.gender&&delete this.perf.gender,this.perf.emotion&&delete this.perf.emotion),o}async image(e,t={}){this.state="image",this.config=El(this.config,t);let n=ev.process(e,this.config);return n.tensor.dispose(),n.canvas}async detect(e,t={}){return new Promise(async n=>{var r,a,s,i;this.state="config";let o;this.config=El(this.config,t),this.state="check";let l=this.sanity(e);l&&(Ye(l,e),n({error:l}));let c,u,h,d=At();await this.checkBackend(),await this.load(),this.config.scoped&&Bn().startScope(),this.analyze("Start Scope:"),o=At();let p=ev.process(e,this.config);if(!p||!p.tensor){Ye("could not convert input to tensor"),n({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(At()-o),this.analyze("Get Image:"),this.config.async?(h=this.config.face.enabled?this.detectFace(p.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",o=At(),h=this.config.face.enabled?await this.detectFace(p.tensor):[],this.perf.face=Math.trunc(At()-o)),this.analyze("Start Body:"),this.config.async?(c=this.config.body.enabled?(r=this.models.posenet)==null?void 0:r.estimatePoses(p.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",o=At(),c=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(p.tensor,this.config)):[],this.perf.body=Math.trunc(At()-o)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(s=this.models.handpose)==null?void 0:s.estimateHands(p.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",o=At(),u=this.config.hand.enabled?await((i=this.models.handpose)==null?void 0:i.estimateHands(p.tensor,this.config)):[],this.perf.hand=Math.trunc(At()-o)),this.analyze("End Hand:"),this.config.async&&([h,c,u]=await Promise.all([h,c,u])),p.tensor.dispose(),this.config.scoped&&Bn().endScope(),this.analyze("End Scope:");let f=[];this.config.gesture.enabled&&(o=At(),f=[...Yp.face(h),...Yp.body(c),...Yp.hand(u),...Yp.iris(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(At()-o)),this.perf.total=Math.trunc(At()-d),this.state="idle",n({face:h,body:c,hand:u,gesture:f,performance:this.perf,canvas:p.canvas})})}async warmupBitmap(){let e=(r,a="application/octet-stream")=>fetch(`data:${a};base64,${r}`).then(s=>s.blob()),t,n;switch(this.config.warmup){case"face":t=await e(nv);break;case"full":t=await e(rv);break;default:t=null}if(t){let r=await createImageBitmap(t);n=await this.detect(r,$2),r.close()}return n}async warmupCanvas(){return new Promise(e=>{let t,n=0;switch(this.config.warmup){case"face":n=256,t="data:image/jpeg;base64,"+nv;break;case"full":n=1200,t="data:image/jpeg;base64,"+rv;break;default:t=null}let r=new Image(n,n);r.onload=()=>{let a=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(n,n):document.createElement("canvas");a.width=n,a.height=n;let s=a.getContext("2d");s.drawImage(r,0,0);let i=s.getImageData(0,0,n,n);this.detect(i,$2).then(o=>e(o))},t?r.src=t:e(null)})}async warmup(e){let t=At();e&&(this.config=El(this.config,e));let n=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await this.warmupBitmap():r=await this.warmupCanvas(),this.config.videoOptimized=n;let a=At();return Ye("Warmup",this.config.warmup,Math.round(a-t),"ms",r),r}};async function ere(e,t,n){if(!e)return;let r=t.getContext("2d");r.font=n.baseFont,r.fillStyle=n.baseLabel;let a=1;for(let s=0;s<e.length;s++){let[i,o]=Object.entries(e[s]);if(o.length>1&&o[1].length>0){let l=i[1]>0?`#${i[1]}`:"",c=`${i[0]} ${l}: ${o[1]}`;r.fillStyle="black",r.fillText(c,8,2+a*n.baseLineHeight),r.fillStyle=n.baseLabel,r.fillText(c,6,0+a*n.baseLineHeight),a+=1}}}async function tre(e,t,n,r){if(!e)return;let a=t.getContext("2d");for(let s of e){a.font=n.baseFont,a.strokeStyle=n.baseColor,a.fillStyle=n.baseColor,a.lineWidth=n.baseLineWidth,a.beginPath(),n.drawBoxes&&a.rect(s.box[0],s.box[1],s.box[2],s.box[3]);let i=[];if(s.genderConfidence&&i.push(`${s.gender||""} ${Math.trunc(100*s.genderConfidence)}% confident`),s.age&&i.push(`age: ${s.age||""}`),s.iris&&i.push(`iris distance: ${s.iris}`),s.emotion&&s.emotion.length>0){let o=s.emotion.map(l=>`${Math.trunc(100*l.score)}% ${l.emotion}`);i.push(o.join(" "))}i.length===0&&i.push("face"),a.fillStyle=n.baseLabel;for(let o=0;o<i.length;o++)a.fillStyle="black",a.fillText(i[o],s.box[0]+1,s.box[1]-(i.length-o)*n.baseLineHeight+6),a.fillStyle=n.baseLabel,a.fillText(i[o],s.box[0]+0,s.box[1]-(i.length-o)*n.baseLineHeight+5);if(a.fillStyle=n.baseColor,a.stroke(),a.lineWidth=1,s.mesh){if(n.drawPoints)for(let o of s.mesh)a.fillStyle=n.useDepth?`rgba(${127.5+2*o[2]}, ${127.5-2*o[2]}, 255, 0.5)`:n.baseColor,a.beginPath(),a.arc(o[0],o[1],2,0,2*Math.PI),a.fill();if(n.drawPolygons){for(let o=0;o<r.length/3;o++){let l=[r[o*3+0],r[o*3+1],r[o*3+2]].map(u=>s.mesh[u]),c=new Path2D;c.moveTo(l[0][0],l[0][1]);for(let u of l)c.lineTo(u[0],u[1]);c.closePath(),a.strokeStyle=n.useDepth?`rgba(${127.5+2*l[0][2]}, ${127.5-2*l[0][2]}, 255, 0.3)`:n.baseColor,a.stroke(c),n.fillPolygons&&(a.fillStyle=n.useDepth?`rgba(${127.5+2*l[0][2]}, ${127.5-2*l[0][2]}, 255, 0.3)`:n.baseColor,a.fill(c))}if(s.annotations&&s.annotations.leftEyeIris){a.strokeStyle=n.useDepth?"rgba(255, 200, 255, 0.3)":n.baseColor,a.beginPath();let o=Math.abs(s.annotations.leftEyeIris[3][0]-s.annotations.leftEyeIris[1][0])/2,l=Math.abs(s.annotations.leftEyeIris[4][1]-s.annotations.leftEyeIris[2][1])/2;a.ellipse(s.annotations.leftEyeIris[0][0],s.annotations.leftEyeIris[0][1],o,l,0,0,2*Math.PI),a.stroke(),n.fillPolygons&&(a.fillStyle=n.useDepth?"rgba(255, 255, 200, 0.3)":n.baseColor,a.fill())}if(s.annotations&&s.annotations.rightEyeIris){a.strokeStyle=n.useDepth?"rgba(255, 200, 255, 0.3)":n.baseColor,a.beginPath();let o=Math.abs(s.annotations.rightEyeIris[3][0]-s.annotations.rightEyeIris[1][0])/2,l=Math.abs(s.annotations.rightEyeIris[4][1]-s.annotations.rightEyeIris[2][1])/2;a.ellipse(s.annotations.rightEyeIris[0][0],s.annotations.rightEyeIris[0][1],o,l,0,0,2*Math.PI),a.stroke(),n.fillPolygons&&(a.fillStyle=n.useDepth?"rgba(255, 255, 200, 0.3)":n.baseColor,a.fill())}}}}}var Va=[];async function nre(e,t,n){if(!e)return;let r=t.getContext("2d");r.lineJoin="round";for(let a=0;a<e.length;a++){if(!Va[a]&&n.buffered&&(Va[a]={...e[a]}),r.fillStyle=n.baseColor,r.strokeStyle=n.baseColor,r.font=n.baseFont,r.lineWidth=n.baseLineWidth,n.drawPoints)for(let s=0;s<e[a].keypoints.length;s++)r.beginPath(),n.buffered?(Va[a].keypoints[s].position.x=(Va[a].keypoints[s].position.x+e[a].keypoints[s].position.x)/2,Va[a].keypoints[s].position.y=(Va[a].keypoints[s].position.y+e[a].keypoints[s].position.y)/2,r.arc(Va[a].keypoints[s].position.x,Va[a].keypoints[s].position.y,2,0,2*Math.PI)):r.arc(e[a].keypoints[s].position.x,e[a].keypoints[s].position.y,2,0,2*Math.PI),r.fill();if(n.drawPolygons){let s=new Path2D,i,o;i=e[a].keypoints.find(l=>l.part==="leftShoulder"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="rightShoulder"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="rightHip"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftHip"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftShoulder"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="leftHip"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="leftKnee"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftAnkle"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="rightHip"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="rightKnee"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="rightAnkle"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="leftShoulder"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="leftElbow"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftWrist"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="rightShoulder"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="rightElbow"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="rightWrist"),o&&s.lineTo(o.position.x,o.position.y)),r.stroke(s)}}}async function rre(e,t,n){if(!e)return;let r=t.getContext("2d");r.lineJoin="round";for(let a of e){if(r.font=n.baseFont,r.lineWidth=n.baseLineWidth,n.drawBoxes&&(r.lineWidth=n.baseLineWidth,r.beginPath(),r.strokeStyle=n.baseColor,r.fillStyle=n.baseColor,r.rect(a.box[0],a.box[1],a.box[2],a.box[3]),r.fillStyle="black",r.fillText("hand",a.box[0]+3,1+a.box[1]+n.baseLineHeight,a.box[2]),r.fillStyle=n.baseLabel,r.fillText("hand",a.box[0]+2,0+a.box[1]+n.baseLineHeight,a.box[2]),r.stroke()),n.drawPoints&&a.landmarks&&a.landmarks.length>0)for(let s of a.landmarks)r.fillStyle=n.useDepth?`rgba(${127.5+2*s[2]}, ${127.5-2*s[2]}, 255, 0.5)`:n.baseColor,r.beginPath(),r.arc(s[0],s[1],2,0,2*Math.PI),r.fill();if(n.drawPolygons){let s=i=>{if(!!i)for(let o=0;o<i.length;o++)r.lineWidth=n.baseLineWidth,r.beginPath(),r.strokeStyle=n.useDepth?`rgba(${127.5+2*i[o][2]}, ${127.5-2*i[o][2]}, 255, 0.5)`:n.baseColor,r.moveTo(i[o>0?o-1:0][0],i[o>0?o-1:0][1]),r.lineTo(i[o][0],i[o][1]),r.stroke()};s(a.annotations.indexFinger),s(a.annotations.middleFinger),s(a.annotations.ringFinger),s(a.annotations.pinky),s(a.annotations.thumb)}}}var Dc={face:tre,body:nre,hand:rre,gesture:ere};var Oc=0,sv=!1,bt={background:"darkslategray",hover:"lightgray",itemBackground:"black",itemColor:"white",buttonBackground:"lightblue",buttonHover:"lightgreen",checkboxOn:"lightgreen",checkboxOff:"lightcoral",rangeBackground:"lightblue",rangeLabel:"white",chartColor:"lightblue"};function are(){if(sv)return;let e=`
|
|
:root { --rounded: 0.2rem; }
|
|
.menu { position: absolute; top: 0rem; right: 0; width: max-content; padding: 0 0.2rem 0 0.2rem; line-height: 1.8rem; z-index: 10;
|
|
box-shadow: 0 0 8px dimgrey; background: ${bt.background}; border-radius: var(--rounded); border-color: black; border-style: solid; border-width: thin; }
|
|
|
|
.menu:hover { box-shadow: 0 0 8px ${bt.hover}; }
|
|
.menu-container { display: block; max-height: 100vh; }
|
|
.menu-container-fadeout { max-height: 0; overflow: hidden; transition: max-height, 0.5s ease; }
|
|
.menu-container-fadein { max-height: 100vh; overflow: hidden; transition: max-height, 0.5s ease; }
|
|
.menu-item { display: flex; white-space: nowrap; padding: 0.2rem; cursor: default; width: 100%; }
|
|
.menu-title { cursor: pointer; }
|
|
.menu-hr { margin: 0.2rem; border: 1px solid rgba(0, 0, 0, 0.5) }
|
|
.menu-label { padding: 0; font-weight: 800; }
|
|
|
|
.menu-list { margin-right: 0.8rem; }
|
|
select:focus { outline: none; }
|
|
.menu-list-item { background: ${bt.itemBackground}; color: ${bt.itemColor}; border: none; padding: 0.2rem; font-family: inherit;
|
|
font-variant: inherit; border-radius: var(--rounded); font-weight: 800; }
|
|
|
|
.menu-chart-title { padding: 0; font-size: 0.8rem; font-weight: 800; align-items: center}
|
|
.menu-chart-canvas { background: transparent; margin: 0.2rem 0 0.2rem 0.6rem; }
|
|
|
|
.menu-button { border: 0; background: ${bt.buttonBackground}; width: -webkit-fill-available; padding: 8px; margin: 8px; cursor: pointer; box-shadow: 4px 4px 4px 0 dimgrey;
|
|
border-radius: var(--rounded); justify-content: center; font-family: inherit; font-variant: inherit; font-size: 1rem; font-weight: 800; }
|
|
.menu-button:hover { background: ${bt.buttonHover}; box-shadow: 4px 4px 4px 0 black; }
|
|
.menu-button:focus { outline: none; }
|
|
|
|
.menu-checkbox { width: 2.8rem; height: 1rem; background: ${bt.itemBackground}; margin: 0.5rem 0.5rem 0 0; position: relative; border-radius: var(--rounded); }
|
|
.menu-checkbox:after { content: 'OFF'; color: ${bt.checkboxOff}; position: absolute; right: 0.2rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
|
|
.menu-checkbox:before { content: 'ON'; color: ${bt.checkboxOn}; position: absolute; left: 0.3rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
|
|
.menu-checkbox-label { width: 1.3rem; height: 0.8rem; cursor: pointer; position: absolute; top: 0.1rem; left: 0.1rem; z-index: 1; background: ${bt.checkboxOff};
|
|
border-radius: var(--rounded); transition: left 0.6s ease; }
|
|
|
|
input[type=checkbox] { visibility: hidden; }
|
|
input[type=checkbox]:checked + label { left: 1.4rem; background: ${bt.checkboxOn}; }
|
|
|
|
.menu-range { margin: 0.2rem 0.5rem 0 0; width: 3.5rem; background: transparent; color: ${bt.rangeBackground}; }
|
|
.menu-range:before { color: ${bt.rangeLabel}; margin: 0 0.4rem 0 0; font-weight: 800; font-size: 0.6rem; position: relative; top: 0.3rem; content: attr(value); }
|
|
|
|
input[type=range] { -webkit-appearance: none; }
|
|
input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 1rem; cursor: pointer; background: ${bt.itemBackground}; border-radius: var(--rounded); border: 1px; }
|
|
input[type=range]::-moz-range-track { width: 100%; height: 1rem; cursor: pointer; background: ${bt.itemBackground}; border-radius: var(--rounded); border: 1px; }
|
|
input[type=range]::-webkit-slider-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1rem; border-radius: var(--rounded); background: ${bt.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
|
|
input[type=range]::-moz-range-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1rem; border-radius: var(--rounded); background: ${bt.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
|
|
|
|
.svg-background { fill:darkslategrey; cursor:pointer; opacity: 0.6; }
|
|
.svg-foreground { fill:white; cursor:pointer; opacity: 0.8; }
|
|
`,t=document.createElement("style");t.innerHTML=e,document.getElementsByTagName("head")[0].appendChild(t),sv=!0}var iv=class{constructor(t,n,r,a){a&&(bt={...bt,...a}),are(),this.createMenu(t,n,r),this.id=0,this.instance=Oc,Oc++,this._maxFPS=0,this.hidden=0}createMenu(t,n="",r={top:null,left:null,bottom:null,right:null}){this.menu=document.createElement("div"),this.menu.id=`menu-${Oc}`,this.menu.className="menu",r&&(r.top&&(this.menu.style.top=r.top),r.bottom&&(this.menu.style.bottom=r.bottom),r.left&&(this.menu.style.left=r.left),r.right&&(this.menu.style.right=r.right)),this.container=document.createElement("div"),this.container.id=`menu-container-${Oc}`,this.container.className="menu-container menu-container-fadein";let a=document.createElement("div");a.className="menu-title",a.id=`menu-title-${Oc}`;let s=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width: 2rem; height: 2rem; vertical-align: top;">
|
|
<path d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-51.37 182.31L232.06 348.16a10.38 10.38 0 0 1-16.12 0L99.37 214.31C92.17 206 97.28 192 107.43 192h233.14c10.15 0 15.26 14 8.06 22.31z" class="svg-background"/>
|
|
<path d="M348.63 214.31L232.06 348.16a10.38 10.38 0 0 1-16.12 0L99.37 214.31C92.17 206 97.28 192 107.43 192h233.14c10.15 0 15.26 14 8.06 22.31z" class="svg-foreground"/>
|
|
</svg>`;n&&(a.innerHTML=`${n}${s}`),this.menu.appendChild(a),a.addEventListener("click",()=>{this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"),this.menu.style.borderStyle=this.container.classList.contains("menu-container-fadeout")?"none":"solid"}),this.menu.appendChild(this.container),typeof t=="object"?t.appendChild(this.menu):document.getElementById(t).appendChild(this.menu)}get newID(){return this.id++,`menu-${this.instance}-${this.id}`}get ID(){return`menu-${this.instance}-${this.id}`}get width(){return this.menu.offsetWidth}get height(){return this.menu.offsetHeight}hide(){this.container.classList.contains("menu-container-fadein")&&(this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"))}visible(){return this.container.classList.contains("menu-container-fadein")}toggle(t){if(this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"),this.container.classList.contains("menu-container-fadein")&&t){let n=t.x||(t.touches&&t.touches[0]?t.touches[0].pageX:null);n&&(this.menu.style.left=`${n-this.menu.offsetWidth/2}px`),this.menu.offsetLeft<0&&(this.menu.style.left=0),this.menu.offsetLeft+this.menu.offsetWidth>window.innerWidth&&(this.menu.style.left=null,this.menu.style.right=0),this.menu.style.borderStyle="solid"}else this.menu.style.borderStyle="none"}addTitle(t){let n=document.createElement("div");return n.className="menu-title",n.id=this.newID,n.innerHTML=t,this.menu.appendChild(n),n.addEventListener("click",()=>{this.hidden=!this.hidden;let r=document.getElementsByClassName("menu");for(let a of r)a.style.display=this.hidden?"none":"block"}),n}addLabel(t){let n=document.createElement("div");return n.className="menu-item menu-label",n.id=this.newID,n.innerHTML=t,this.container.appendChild(n),n}addBool(t,n,r,a){let s=document.createElement("div");return s.className="menu-item",s.innerHTML=`<div class="menu-checkbox"><input class="menu-checkbox" type="checkbox" id="${this.newID}" ${n[r]?"checked":""}/><label class="menu-checkbox-label" for="${this.ID}"></label></div>${t}`,this.container.appendChild(s),s.addEventListener("change",i=>{n[r]=i.target.checked,a&&a(i.target.checked)}),s}async addList(t,n,r,a){let s=document.createElement("div");s.className="menu-item";let i="";for(let o of n)i+=`<option value="${o}" ${o===r?"selected":""}>${o}</option>`;return s.innerHTML=`<div class="menu-list"><select name="${this.ID}" class="menu-list-item">${i}</select><label for="${this.ID}"></label></div>${t}`,s.style.fontFamily=document.body.style.fontFamily,s.style.fontSize=document.body.style.fontSize,s.style.fontVariant=document.body.style.fontVariant,this.container.appendChild(s),s.addEventListener("change",o=>{a&&a(n[o.target.selectedIndex])}),s}addRange(t,n,r,a,s,i,o){let l=document.createElement("div");return l.className="menu-item",l.innerHTML=`<input class="menu-range" type="range" id="${this.newID}" min="${a}" max="${s}" step="${i}" value="${n[r]}">${t}`,this.container.appendChild(l),l.addEventListener("change",c=>{n[r]=parseInt(c.target.value)===parseFloat(c.target.value)?parseInt(c.target.value):parseFloat(c.target.value),c.target.setAttribute("value",c.target.value),o&&o(c.target.value)}),l.input=l.children[0],l}addHTML(t){let n=document.createElement("div");return n.className="menu-item",n.id=this.newID,t&&(n.innerHTML=t),this.container.appendChild(n),n}addButton(t,n,r){let a=document.createElement("button");return a.className="menu-item menu-button",a.style.fontFamily=document.body.style.fontFamily,a.style.fontSize=document.body.style.fontSize,a.style.fontVariant=document.body.style.fontVariant,a.type="button",a.id=this.newID,a.innerText=t,this.container.appendChild(a),a.addEventListener("click",()=>{a.innerText===t?a.innerText=n:a.innerText=t,r&&r(a.innerText!==t)}),a}addValue(t,n,r=""){let a=document.createElement("div");return a.className="menu-item",a.id=`menu-val-${t}`,a.innerText=`${t}: ${n}${r}`,this.container.appendChild(a),a}updateValue(t,n,r=""){let a=document.getElementById(`menu-val-${t}`);a?a.innerText=`${t}: ${n}${r}`:this.addValue(t,n)}addChart(t,n,r=150,a=40,s){s&&(bt.chartColor=s);let i=document.createElement("div");return i.className="menu-item menu-chart-title",i.id=this.newID,i.innerHTML=`<font color=${bt.chartColor}>${t}</font><canvas id="menu-canvas-${n}" class="menu-chart-canvas" width="${r}px" height="${a}px"></canvas>`,this.container.appendChild(i),i}async updateChart(t,n){if(!n||n.length===0)return;let r=document.getElementById(`menu-canvas-${t}`);if(!r)return;let a=r.getContext("2d");a.fillStyle=bt.background,a.fillRect(0,0,r.width,r.height);let s=r.width/n.length,i=1+Math.max(...n),o=r.height/i;for(let l=0;l<n.length;l++){let c=a.createLinearGradient(0,(i-n[l])*o,0,0);c.addColorStop(.1,bt.chartColor),c.addColorStop(.4,bt.background),a.fillStyle=c,a.fillRect(l*s,0,s-4,r.height),a.fillStyle=bt.background,a.font=`${s/1.5}px "Segoe UI"`,a.fillText(Math.round(n[l]),l*s+1,r.height-1,s-1)}}},zc=iv;var sre=`
|
|
#gl-bench { position: absolute; right: 1rem; bottom: 1rem; z-index:1000; -webkit-user-select: none; -moz-user-select: none; user-select: none; }
|
|
#gl-bench div { position: relative; display: block; margin: 4px; padding: 0 7px 0 10px; background: darkslategray; border-radius: 0.2rem; cursor: pointer; opacity: 0.9; }
|
|
#gl-bench svg { height: 60px; margin: 0 0px 0px 4px; }
|
|
#gl-bench text { font-size: 16px; font-family: 'Lato', 'Segoe UI'; dominant-baseline: middle; text-anchor: middle; }
|
|
#gl-bench .gl-mem { font-size: 12px; fill: white; }
|
|
#gl-bench .gl-fps { font-size: 13px; fill: white; }
|
|
#gl-bench line { stroke-width: 5; stroke: white; stroke-linecap: round; }
|
|
#gl-bench polyline { fill: none; stroke: white; stroke-linecap: round; stroke-linejoin: round; stroke-width: 3.5; }
|
|
#gl-bench rect { fill: black; }
|
|
#gl-bench .opacity { stroke: black; }
|
|
`,ire=`
|
|
<div class="gl-box">
|
|
<svg viewBox="0 0 55 60">
|
|
<text x="27" y="56" class="gl-fps">00 FPS</text>
|
|
<text x="30" y="8" class="gl-mem"></text>
|
|
<rect x="0" y="14" rx="4" ry="4" width="55" height="32"></rect>
|
|
<polyline class="gl-chart"></polyline>
|
|
</svg>
|
|
<svg viewBox="0 0 14 60" class="gl-cpu-svg">
|
|
<line x1="7" y1="38" x2="7" y2="11" class="opacity"/>
|
|
<line x1="7" y1="38" x2="7" y2="11" class="gl-cpu" stroke-dasharray="0 27"/>
|
|
<path d="M5.35 43c-.464 0-.812.377-.812.812v1.16c-.783.1972-1.421.812-1.595 1.624h-1.16c-.435 0-.812.348-.812.812s.348.812.812.812h1.102v1.653H1.812c-.464 0-.812.377-.812.812 0 .464.377.812.812.812h1.131c.1943.783.812 1.392 1.595 1.595v1.131c0 .464.377.812.812.812.464 0 .812-.377.812-.812V53.15h1.653v1.073c0 .464.377.812.812.812.464 0 .812-.377.812-.812v-1.131c.783-.1943 1.392-.812 1.595-1.595h1.131c.464 0 .812-.377.812-.812 0-.464-.377-.812-.812-.812h-1.073V48.22h1.102c.435 0 .812-.348.812-.812s-.348-.812-.812-.812h-1.16c-.1885-.783-.812-1.421-1.595-1.624v-1.131c0-.464-.377-.812-.812-.812-.464 0-.812.377-.812.812v1.073H6.162v-1.073c0-.464-.377-.812-.812-.812zm.58 3.48h2.088c.754 0 1.363.609 1.363 1.363v2.088c0 .754-.609 1.363-1.363 1.363H5.93c-.754 0-1.363-.609-1.363-1.363v-2.088c0-.754.609-1.363 1.363-1.363z" style="fill: grey"></path>
|
|
</svg>
|
|
<svg viewBox="0 0 14 60" class="gl-gpu-svg">
|
|
<line x1="7" y1="38" x2="7" y2="11" class="opacity"/>
|
|
<line x1="7" y1="38" x2="7" y2="11" class="gl-gpu" stroke-dasharray="0 27"/>
|
|
<path d="M1.94775 43.3772a.736.736 0 10-.00416 1.472c.58535.00231.56465.1288.6348.3197.07015.18975.04933.43585.04933.43585l-.00653.05405v8.671a.736.736 0 101.472 0v-1.4145c.253.09522.52785.1495.81765.1495h5.267c1.2535 0 2.254-.9752 2.254-2.185v-3.105c0-1.2075-1.00625-2.185-2.254-2.185h-5.267c-.28865 0-.5635.05405-.8165.1495.01806-.16445.04209-.598-.1357-1.0787-.22425-.6072-.9499-1.2765-2.0125-1.2765zm2.9095 3.6455c.42435 0 .7659.36225.7659.8119v2.9785c0 .44965-.34155.8119-.7659.8119s-.7659-.36225-.7659-.8119v-2.9785c0-.44965.34155-.8119.7659-.8119zm4.117 0a2.3 2.3 0 012.3 2.3 2.3 2.3 0 01-2.3 2.3 2.3 2.3 0 01-2.3-2.3 2.3 2.3 0 012.3-2.3z" style="fill: grey"></path>
|
|
</svg>
|
|
</div>
|
|
`,ov=class{constructor(t,n={}){this.css=sre,this.svg=ire,this.paramLogger=()=>{},this.chartLogger=()=>{},this.chartLen=20,this.chartHz=20,this.names=[],this.cpuAccums=[],this.gpuAccums=[],this.activeAccums=[],this.chart=new Array(this.chartLen),this.now=()=>performance&&performance.now?performance.now():Date.now(),this.updateUI=()=>{[].forEach.call(this.nodes["gl-gpu-svg"],o=>o.style.display=this.trackGPU?"inline":"none")},Object.assign(this,n),this.detected=0,this.finished=[],this.isFramebuffer=0,this.frameId=0;let r,a=0,s,i=o=>{++a<20?r=requestAnimationFrame(i):(this.detected=Math.ceil(1e3*a/(o-s)/70),cancelAnimationFrame(r)),s||(s=o)};if(requestAnimationFrame(i),t){let o=async(u,h)=>Promise.resolve(setTimeout(()=>{t.getError();let d=this.now()-u;h.forEach((p,f)=>{p&&(this.gpuAccums[f]+=d)})},0)),l=(u,h,d)=>{let p=h.now();u.apply(d,arguments),h.trackGPU&&h.finished.push(o(p,h.activeAccums.slice(0)))},c="drawElements";t[c]?t[c]=l(t[c],this,t):console.log("bench: cannot attach to webgl function")}if(!this.withoutUI){this.dom||(this.dom=document.body);let o=document.createElement("div");o.id="gl-bench",this.dom.appendChild(o),this.dom.insertAdjacentHTML("afterbegin",'<style id="gl-bench-style">'+this.css+"</style>"),this.dom=o,this.dom.addEventListener("click",()=>{this.trackGPU=!this.trackGPU,this.updateUI()}),this.paramLogger=((l,c,u)=>{let h=["gl-cpu","gl-gpu","gl-mem","gl-fps","gl-gpu-svg","gl-chart"],d={...h};return h.forEach(p=>d[p]=c.getElementsByClassName(p)),this.nodes=d,(p,f,m,A,y,g,w)=>{d["gl-cpu"][p].style.strokeDasharray=(f*.27).toFixed(0)+" 100",d["gl-gpu"][p].style.strokeDasharray=(m*.27).toFixed(0)+" 100",d["gl-mem"][p].innerHTML=u[p]?u[p]:A?"mem: "+A.toFixed(0)+"mb":"",d["gl-fps"][p].innerHTML="FPS: "+y.toFixed(1),l(u[p],f,m,A,y,g,w)}})(this.paramLogger,this.dom,this.names),this.chartLogger=((l,c)=>{let u={"gl-chart":c.getElementsByClassName("gl-chart")};return(h,d,p)=>{let f="",m=d.length;for(let A=0;A<m;A++){let y=(p+A+1)%m;d[y]!==void 0&&(f=f+" "+(55*A/(m-1)).toFixed(1)+","+(45-d[y]*22/60/this.detected).toFixed(1))}u["gl-chart"][h].setAttribute("points",f),l(this.names[h],d,p)}})(this.chartLogger,this.dom)}}addUI(t){this.names.indexOf(t)===-1&&(this.names.push(t),this.dom&&(this.dom.insertAdjacentHTML("beforeend",this.svg),this.updateUI()),this.cpuAccums.push(0),this.gpuAccums.push(0),this.activeAccums.push(!1))}nextFrame(t){this.frameId++;let n=t||this.now();if(this.frameId<=1)this.paramFrame=this.frameId,this.paramTime=n;else{let r=n-this.paramTime;if(r>=1e3){let a=this.frameId-this.paramFrame,s=a/r*1e3;for(let i=0;i<this.names.length;i++){let o=this.cpuAccums[i]/r*100,l=this.gpuAccums[i]/r*100,c=performance&&performance.memory?performance.memory.usedJSHeapSize/(1<<20):0;this.paramLogger(i,o,l,c,s,r,a),this.cpuAccums[i]=0,Promise.all(this.finished).then(()=>{this.gpuAccums[i]=0,this.finished=[]})}this.paramFrame=this.frameId,this.paramTime=n}}if(!this.detected||!this.chartFrame)this.chartFrame=this.frameId,this.chartTime=n,this.circularId=0;else{let r=n-this.chartTime,a=this.chartHz*r/1e3;for(;--a>0&&this.detected;){let i=(this.frameId-this.chartFrame)/r*1e3;this.chart[this.circularId%this.chartLen]=i;for(let o=0;o<this.names.length;o++)this.chartLogger(o,this.chart,this.circularId);this.circularId++,this.chartFrame=this.frameId,this.chartTime=n}}}begin(t){this.updateAccums(t)}end(t){this.updateAccums(t)}updateAccums(t){let n=this.names.indexOf(t);n===-1&&(n=this.names.length,this.addUI(t));let r=this.now(),a=r-this.t0;for(let s=0;s<n+1;s++)this.activeAccums[s]&&(this.cpuAccums[s]+=a);this.activeAccums[n]=!this.activeAccums[n],this.t0=r}},lv=ov;var Hr={},pe=new av(Hr),le={baseColor:"rgba(173, 216, 230, 0.3)",baseBackground:"rgba(50, 50, 50, 1)",baseLabel:"rgba(173, 216, 230, 1)",baseFontProto:'small-caps {size} "Segoe UI"',baseLineWidth:12,crop:!0,columns:2,busy:!1,facing:!0,useWorker:!1,worker:"worker.js",samples:["../assets/sample6.jpg","../assets/sample1.jpg","../assets/sample4.jpg","../assets/sample5.jpg","../assets/sample3.jpg","../assets/sample2.jpg"],compare:"../assets/sample-me.jpg",drawBoxes:!0,drawPoints:!1,drawPolygons:!0,fillPolygons:!1,useDepth:!0,console:!0,maxFPSframes:10,modelsPreload:!0,menuWidth:0,menuHeight:0,camera:{},detectFPS:[],drawFPS:[],buffered:!1,drawThread:null,detectThread:null,framesDraw:0,framesDetect:0,bench:!1},we={},Qp,_i,e1={};function ore(...e){if(!Array.isArray(e))return e;let t="";for(let n of e)typeof n=="object"?t+=JSON.stringify(n).replace(/{|}|"|\[|\]/g,"").replace(/,/g,", "):t+=n;return t}function On(...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")}`;le.console&&console.log(n,...e)}function Zn(e){document.getElementById("status").innerText=e}var bi;async function lre(e){var n,r,a,s;if(document.getElementById("compare-container").style.display=pe.config.face.embedding.enabled?"block":"none",!pe.config.face.embedding.enabled||((n=e==null?void 0:e.face)==null?void 0:n.length)>0&&((r=e==null?void 0:e.face[0].embedding)==null?void 0:r.length)!==192)return;bi||(bi=e,document.getElementById("compare-canvas").getContext("2d").drawImage(bi.canvas,0,0,200,200));let t=pe.simmilarity((a=bi==null?void 0:bi.face[0])==null?void 0:a.embedding,(s=e==null?void 0:e.face[0])==null?void 0:s.embedding);document.getElementById("simmilarity").innerText=`simmilarity: ${Math.trunc(1e3*t)/10}%`}var uv=performance.now();async function t1(e){let t=e1,n=document.getElementById("canvas");le.drawFPS.push(1e3/(performance.now()-uv)),le.drawFPS.length>le.maxFPSframes&&le.drawFPS.shift(),uv=performance.now(),await we.process.updateChart("FPS",le.detectFPS),(le.buffered||!t.canvas)&&(t.canvas=await pe.image(e,Hr));let r=n.getContext("2d");r.fillStyle=le.baseBackground,r.fillRect(0,0,n.width,n.height),t.canvas?(t.canvas.width!==n.width&&(n.width=t.canvas.width),t.canvas.height!==n.height&&(n.height=t.canvas.height),r.drawImage(t.canvas,0,0,t.canvas.width,t.canvas.height,0,0,t.canvas.width,t.canvas.height)):r.drawImage(e,0,0,e.width,e.height,0,0,n.width,n.height),await Dc.face(t.face,n,le,pe.facemesh.triangulation),await Dc.body(t.body,n,le),await Dc.hand(t.hand,n,le),await Dc.gesture(t.gesture,n,le),await lre(t);let a=pe.tf.engine(),s=a.backendInstance?`gpu: ${(a.backendInstance.numBytesInGPU?a.backendInstance.numBytesInGPU:0).toLocaleString()} bytes`:"",i=`system: ${a.state.numBytes.toLocaleString()} bytes ${s} | tensors: ${a.state.numTensors.toLocaleString()}`,o=t.canvas?`processing: ${t.canvas.width} x ${t.canvas.height}`:"",l=Math.trunc(10*le.detectFPS.reduce((h,d)=>h+d,0)/le.detectFPS.length)/10,c=Math.trunc(10*le.drawFPS.reduce((h,d)=>h+d,0)/le.drawFPS.length)/10,u=le.detectFPS.length>5&&l<5?'<font color="lightcoral">warning: your performance is low: try switching to higher performance backend, lowering resolution or disabling some models</font>':"";document.getElementById("log").innerHTML=`
|
|
video: ${le.camera.name} | facing: ${le.camera.facing} | screen: ${window.innerWidth} x ${window.innerHeight} camera: ${le.camera.width} x ${le.camera.height} ${o}<br>
|
|
backend: ${pe.tf.getBackend()} | ${i}<br>
|
|
performance: ${ore(t.performance)}ms FPS process:${l} refresh:${c}<br>
|
|
${u}<br>
|
|
`,le.framesDraw++,le.lastFrame=performance.now(),le.buffered?le.drawThread=requestAnimationFrame(()=>t1(e,n)):!le.buffered&&le.drawThread&&(On("stopping buffered refresh"),cancelAnimationFrame(le.drawThread),le.drawThread=null)}async function n1(){var c;if(le.busy)return null;le.busy=!0;let e=document.getElementById("video"),t=document.getElementById("canvas"),n=document.getElementById("log"),r=e.srcObject?e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState>2&&!e.paused:!1,a="";if(Zn("setting up camera"),!navigator.mediaDevices)return a="camera access not supported",n.innerText+=`
|
|
${a}`,On(a),Zn(a),le.busy=!1,a;let s,i={audio:!1,video:{facingMode:le.facing?"user":"environment",resizeMode:le.crop?"crop-and-scale":"none"}};window.innerWidth>window.innerHeight?i.video.width={ideal:window.innerWidth}:i.video.height={ideal:window.innerHeight-document.getElementById("menubar").offsetHeight};try{s=await navigator.mediaDevices.getUserMedia(i)}catch(u){return u.name==="PermissionDeniedError"||u.name==="NotAllowedError"?a="camera permission denied":u.name==="SourceUnavailableError"?a="camera not available":a=`camera error: ${u.message||u}`,n.innerText+=`
|
|
${a}`,Zn(a),On("camera error:",u),le.busy=!1,a}if(s)e.srcObject=s;else return le.busy=!1,"camera stream empty";let o=s.getVideoTracks()[0],l=o.getSettings();return le.camera={name:(c=o.label)==null?void 0:c.toLowerCase(),width:l.width,height:l.height,facing:l.facingMode==="user"?"front":"back"},new Promise(u=>{e.onloadeddata=async()=>{e.width=e.videoWidth,e.height=e.videoHeight,t.width=e.width,t.height=e.height,t.style.width=t.width>t.height?"100vw":"",t.style.height=t.width>t.height?"":"100vh",le.menuWidth.input.setAttribute("value",e.width),le.menuHeight.input.setAttribute("value",e.height);let h=Math.trunc(window.devicePixelRatio*(8+4*t.width/window.innerWidth));le.baseFont=le.baseFontProto.replace(/{size}/,`${h}px`),le.baseLineHeight=h+2,r&&e.play(),r&&!le.detectThread&&Pc(e,t),le.busy=!1,Zn(""),u()}})}function cv(){if(!_i){let e=null;_i=new lv(e,{trackGPU:!1,chartHz:20,chartLen:20}),_i.begin()}}function ure(e,t,n,r){Qp||(On("creating worker thread"),Qp=new Worker(le.worker,{type:"module"}),Qp.addEventListener("message",a=>{a.data.result.performance&&a.data.result.performance.total&&le.detectFPS.push(1e3/a.data.result.performance.total),le.detectFPS.length>le.maxFPSframes&&le.detectFPS.shift(),le.bench&&(_i||cv(),_i.nextFrame(r)),document.getElementById("gl-bench")&&(document.getElementById("gl-bench").style.display=le.bench?"block":"none"),e1=a.data.result,le.framesDetect++,le.drawThread||t1(e),le.detectThread=requestAnimationFrame(s=>Pc(e,n,s))})),Qp.postMessage({image:t.data.buffer,width:n.width,height:n.height,userConfig:Hr},[t.data.buffer])}function Pc(e,t,n){var a;if(!(e.srcObject&&e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState>2&&!e.paused)&&e.srcObject){le.drawThread&&cancelAnimationFrame(le.drawThread),le.detectThread&&cancelAnimationFrame(le.detectThread),le.drawThread=null,le.detectThread=null,e.paused?On("camera paused"):e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState<=2?setTimeout(()=>Pc(e,t),500):On(`camera not ready: track state: ${(a=e.srcObject)==null?void 0:a.getVideoTracks()[0].readyState} stream state: ${e.readyState}`),clearTimeout(le.drawThread),le.drawThread=null,On("frame statistics: process:",le.framesDetect,"refresh:",le.framesDraw),On("memory",pe.tf.engine().memory());return}if(Zn(""),le.useWorker){let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(t.width,t.height):document.createElement("canvas");s.width=t.width,s.height=t.height;let i=s.getContext("2d");i.drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height);let o=i.getImageData(0,0,t.width,t.height);ure(e,o,t,Hr,n)}else pe.detect(e,Hr).then(s=>{s.performance&&s.performance.total&&le.detectFPS.push(1e3/s.performance.total),le.detectFPS.length>le.maxFPSframes&&le.detectFPS.shift(),le.bench&&(_i||cv(),_i.nextFrame(n)),document.getElementById("gl-bench")&&(document.getElementById("gl-bench").style.display=le.bench?"block":"none"),s.error?(On(s.error),document.getElementById("log").innerText+=`
|
|
Human error: ${s.error}`):(e1=s,le.drawThread||t1(e),le.framesDetect++,le.detectThread=requestAnimationFrame(i=>Pc(e,t,i)))})}async function cre(e){return new Promise(t=>{let n=new Image;n.onload=async()=>{On("Processing image:",n.src);let r=document.getElementById("canvas");n.width=n.naturalWidth,n.height=n.naturalHeight,r.width=pe.config.filter.width&&pe.config.filter.width>0?pe.config.filter.width:n.naturalWidth,r.height=pe.config.filter.height&&pe.config.filter.height>0?pe.config.filter.height:n.naturalHeight,e1=await pe.detect(n,Hr),await t1(n);let s=document.createElement("canvas");s.className="thumbnail",s.width=window.innerWidth/(le.columns+.1),s.height=r.height/(window.innerWidth/s.width),s.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,s.width,s.height),document.getElementById("samples-container").appendChild(s),n.src="",t(!0)},n.src=e})}async function hv(){Hr.videoOptimized=!0,document.getElementById("samples-container").style.display="none",document.getElementById("canvas").style.display="block";let e=document.getElementById("video"),t=document.getElementById("canvas");if(e.srcObject!==null&&!e.paused)document.getElementById("play").style.display="block",document.getElementById("btnStart").className="button button-start",document.getElementById("btnStart").innerHTML="start<br>video",Zn("paused"),e.pause();else{let n=await n1();if(n)Zn(n);else{document.getElementById("play").style.display="none";for(let r of Object.values(we))r.hide();Zn(""),document.getElementById("btnStart").className="button button-stop",document.getElementById("btnStart").innerHTML="pause<br>video",await e.play(),le.detectThread||Pc(e,t)}}}async function hre(){document.getElementById("play").style.display="none",Hr.videoOptimized=!1;let e=Math.trunc(window.devicePixelRatio*(8+4*le.columns));le.baseFont=le.baseFontProto.replace(/{size}/,`${e}px`),le.baseLineHeight=e+2,document.getElementById("canvas").style.display="none",document.getElementById("samples-container").style.display="block",On("Running detection of sample images"),Zn("processing images"),document.getElementById("samples-container").innerHTML="";for(let t of le.samples)await cre(t);Zn("")}function dre(){let e=[];window.innerWidth>800?e=[`${document.getElementById("btnDisplay").offsetLeft-50}px`,`${document.getElementById("btnImage").offsetLeft-50}px`,`${document.getElementById("btnProcess").offsetLeft-50}px`,`${document.getElementById("btnModel").offsetLeft-50}px`]:e=["0rem","11rem","21.1rem","33rem"],we.display=new zc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[0]}),we.display.addBool("perf monitor",le,"bench",t=>le.bench=t),we.display.addBool("buffered output",le,"buffered",t=>le.buffered=t),we.display.addBool("crop & scale",le,"crop",()=>n1()),we.display.addBool("camera facing",le,"facing",()=>n1()),we.display.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.display.addBool("use 3D depth",le,"useDepth"),we.display.addBool("draw boxes",le,"drawBoxes"),we.display.addBool("draw polygons",le,"drawPolygons"),we.display.addBool("Fill Polygons",le,"fillPolygons"),we.display.addBool("draw points",le,"drawPoints"),we.image=new zc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[1]}),we.image.addBool("enabled",pe.config.filter,"enabled"),le.menuWidth=we.image.addRange("image width",pe.config.filter,"width",0,3840,10,t=>pe.config.filter.width=parseInt(t)),le.menuHeight=we.image.addRange("image height",pe.config.filter,"height",0,2160,10,t=>pe.config.filter.height=parseInt(t)),we.image.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.image.addRange("brightness",pe.config.filter,"brightness",-1,1,.05,t=>pe.config.filter.brightness=parseFloat(t)),we.image.addRange("contrast",pe.config.filter,"contrast",-1,1,.05,t=>pe.config.filter.contrast=parseFloat(t)),we.image.addRange("sharpness",pe.config.filter,"sharpness",0,1,.05,t=>pe.config.filter.sharpness=parseFloat(t)),we.image.addRange("blur",pe.config.filter,"blur",0,20,1,t=>pe.config.filter.blur=parseInt(t)),we.image.addRange("saturation",pe.config.filter,"saturation",-1,1,.05,t=>pe.config.filter.saturation=parseFloat(t)),we.image.addRange("hue",pe.config.filter,"hue",0,360,5,t=>pe.config.filter.hue=parseInt(t)),we.image.addRange("pixelate",pe.config.filter,"pixelate",0,32,1,t=>pe.config.filter.pixelate=parseInt(t)),we.image.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.image.addBool("negative",pe.config.filter,"negative"),we.image.addBool("sepia",pe.config.filter,"sepia"),we.image.addBool("vintage",pe.config.filter,"vintage"),we.image.addBool("kodachrome",pe.config.filter,"kodachrome"),we.image.addBool("technicolor",pe.config.filter,"technicolor"),we.image.addBool("polaroid",pe.config.filter,"polaroid"),we.process=new zc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[2]}),we.process.addList("backend",["cpu","webgl","wasm","humangl"],pe.config.backend,t=>pe.config.backend=t),we.process.addBool("async operations",pe.config,"async",t=>pe.config.async=t),we.process.addBool("enable profiler",pe.config,"profile",t=>pe.config.profile=t),we.process.addBool("memory shield",pe.config,"deallocate",t=>pe.config.deallocate=t),we.process.addBool("use web worker",le,"useWorker"),we.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.process.addLabel("model parameters"),we.process.addRange("max objects",pe.config.face.detector,"maxFaces",1,50,1,t=>{pe.config.face.detector.maxFaces=parseInt(t),pe.config.body.maxDetections=parseInt(t),pe.config.hand.maxHands=parseInt(t)}),we.process.addRange("skip frames",pe.config.face.detector,"skipFrames",0,50,1,t=>{pe.config.face.detector.skipFrames=parseInt(t),pe.config.face.emotion.skipFrames=parseInt(t),pe.config.face.age.skipFrames=parseInt(t),pe.config.hand.skipFrames=parseInt(t)}),we.process.addRange("min confidence",pe.config.face.detector,"minConfidence",0,1,.05,t=>{pe.config.face.detector.minConfidence=parseFloat(t),pe.config.face.gender.minConfidence=parseFloat(t),pe.config.face.emotion.minConfidence=parseFloat(t),pe.config.hand.minConfidence=parseFloat(t)}),we.process.addRange("score threshold",pe.config.face.detector,"scoreThreshold",.1,1,.05,t=>{pe.config.face.detector.scoreThreshold=parseFloat(t),pe.config.hand.scoreThreshold=parseFloat(t),pe.config.body.scoreThreshold=parseFloat(t)}),we.process.addRange("overlap",pe.config.face.detector,"iouThreshold",.1,1,.05,t=>{pe.config.face.detector.iouThreshold=parseFloat(t),pe.config.hand.iouThreshold=parseFloat(t)}),we.process.addBool("detection rotation",pe.config.face.detector,"rotation",t=>{pe.config.face.detector.rotation=t,pe.config.hand.rotation=t}),we.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.process.addButton("process sample images","process images",()=>hre()),we.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.process.addChart("FPS","FPS"),we.models=new zc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[3]}),we.models.addBool("face detect",pe.config.face,"enabled"),we.models.addBool("face mesh",pe.config.face.mesh,"enabled"),we.models.addBool("face iris",pe.config.face.iris,"enabled"),we.models.addBool("face age",pe.config.face.age,"enabled"),we.models.addBool("face gender",pe.config.face.gender,"enabled"),we.models.addBool("face emotion",pe.config.face.emotion,"enabled"),we.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.models.addBool("body pose",pe.config.body,"enabled"),we.models.addBool("hand pose",pe.config.hand,"enabled"),we.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.models.addBool("gestures",pe.config.gesture,"enabled"),we.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),we.models.addBool("face compare",pe.config.face.embedding,"enabled",t=>{bi=null,pe.config.face.embedding.enabled=t}),document.getElementById("btnDisplay").addEventListener("click",t=>we.display.toggle(t)),document.getElementById("btnImage").addEventListener("click",t=>we.image.toggle(t)),document.getElementById("btnProcess").addEventListener("click",t=>we.process.toggle(t)),document.getElementById("btnModel").addEventListener("click",t=>we.models.toggle(t)),document.getElementById("btnStart").addEventListener("click",()=>hv()),document.getElementById("play").addEventListener("click",()=>hv())}async function pre(){On("Demo starting ..."),On("Browser:",navigator==null?void 0:navigator.userAgent),dre(),document.getElementById("log").innerText=`Human: version ${pe.version}`,le.modelsPreload&&!le.useWorker&&(Zn("loading"),await pe.load(Hr)),le.useWorker||(Zn("initializing"),await pe.warmup(Hr)),Zn("human: ready"),document.getElementById("loader").style.display="none",document.getElementById("play").style.display="block",On("Demo ready...")}window.onload=pre;window.onresize=n1;
|
|
/**
|
|
* @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 See the LICENSE file. */
|
|
//# sourceMappingURL=demo-browser-index.js.map
|