@wannaby/wanna-sdk 3.2.0 → 3.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.js +701 -652
- package/iframe.html +1 -1
- package/package.json +1 -1
- package/sdk/sdk.js +249 -244
package/core.js
CHANGED
|
@@ -67,22 +67,22 @@ A.exports=function(A,e){if(g(e,A))return A
|
|
|
67
67
|
throw r("Incorrect invocation")}},df07827806fadf4d661a:(A,e,t)=>{var i=t("bdf769e41bfccf0b5dda"),g=t("2a0da7f8b0aa3e275f00"),r=i.String,I=i.TypeError
|
|
68
68
|
A.exports=function(A){if(g(A))return A
|
|
69
69
|
throw I(r(A)+" is not an object")}},"8eac9fec38e8f8cd4cf9":A=>{A.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},"52c7838129330b77cc10":(A,e,t)=>{"use strict"
|
|
70
|
-
var i,g,r,I=t("8eac9fec38e8f8cd4cf9"),o=t("dec3257ec25bafd29a51"),a=t("bdf769e41bfccf0b5dda"),s=t("53a2db31217b81c0bcc8"),B=t("2a0da7f8b0aa3e275f00"),n=t("334e42222163b1cc58f4"),E=t("e68bb734733f827e1129"),C=t("f833281187ac99ca08a4"),c=t("936077f555ba2e1f41b4"),h=t("cf7a74b85e1315e84b8a"),d=t("f3eac8819ce5b9c00ce2").f,l=t("824370004034813fe09f"),u=t("3b1e538d99c22812074d"),w=t("289b953beca9076338f6"),D=t("2ac951b1c6c29ae2d7c7"),f=t("bdf45fe30438806b64af"),m=a.Int8Array,p=m&&m.prototype,y=a.Uint8ClampedArray,R=y&&y.prototype,N=m&&u(m),S=p&&u(p),G=Object.prototype,k=a.TypeError,b=D("toStringTag"),_=f("TYPED_ARRAY_TAG"),U=f("TYPED_ARRAY_CONSTRUCTOR"),L=I&&!!w&&"Opera"!==E(a.opera),
|
|
70
|
+
var i,g,r,I=t("8eac9fec38e8f8cd4cf9"),o=t("dec3257ec25bafd29a51"),a=t("bdf769e41bfccf0b5dda"),s=t("53a2db31217b81c0bcc8"),B=t("2a0da7f8b0aa3e275f00"),n=t("334e42222163b1cc58f4"),E=t("e68bb734733f827e1129"),C=t("f833281187ac99ca08a4"),c=t("936077f555ba2e1f41b4"),h=t("cf7a74b85e1315e84b8a"),d=t("f3eac8819ce5b9c00ce2").f,l=t("824370004034813fe09f"),u=t("3b1e538d99c22812074d"),w=t("289b953beca9076338f6"),D=t("2ac951b1c6c29ae2d7c7"),f=t("bdf45fe30438806b64af"),m=a.Int8Array,p=m&&m.prototype,y=a.Uint8ClampedArray,R=y&&y.prototype,N=m&&u(m),S=p&&u(p),G=Object.prototype,k=a.TypeError,b=D("toStringTag"),_=f("TYPED_ARRAY_TAG"),U=f("TYPED_ARRAY_CONSTRUCTOR"),L=I&&!!w&&"Opera"!==E(a.opera),v=!1,H={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},x={BigInt64Array:8,BigUint64Array:8},isTypedArray=function(A){if(!B(A))return!1
|
|
71
71
|
var e=E(A)
|
|
72
|
-
return n(
|
|
73
|
-
for(i in
|
|
72
|
+
return n(H,e)||n(x,e)}
|
|
73
|
+
for(i in H)(r=(g=a[i])&&g.prototype)?c(r,U,g):L=!1
|
|
74
74
|
for(i in x)(r=(g=a[i])&&g.prototype)&&c(r,U,g)
|
|
75
|
-
if((!L||!s(N)||N===Function.prototype)&&(N=function TypedArray(){throw k("Incorrect invocation")},L))for(i in
|
|
76
|
-
if((!L||!S||S===G)&&(S=N.prototype,L))for(i in
|
|
77
|
-
if(L&&u(R)!==S&&w(R,S),o&&!n(S,b))for(i in
|
|
78
|
-
A.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_CONSTRUCTOR:U,TYPED_ARRAY_TAG:
|
|
75
|
+
if((!L||!s(N)||N===Function.prototype)&&(N=function TypedArray(){throw k("Incorrect invocation")},L))for(i in H)a[i]&&w(a[i],N)
|
|
76
|
+
if((!L||!S||S===G)&&(S=N.prototype,L))for(i in H)a[i]&&w(a[i].prototype,S)
|
|
77
|
+
if(L&&u(R)!==S&&w(R,S),o&&!n(S,b))for(i in v=!0,d(S,b,{get:function(){return B(this)?this[_]:void 0}}),H)a[i]&&c(a[i],_,i)
|
|
78
|
+
A.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_CONSTRUCTOR:U,TYPED_ARRAY_TAG:v&&_,aTypedArray:function(A){if(isTypedArray(A))return A
|
|
79
79
|
throw k("Target is not a typed array")},aTypedArrayConstructor:function(A){if(s(A)&&(!w||l(N,A)))return A
|
|
80
|
-
throw k(C(A)+" is not a typed array constructor")},exportTypedArrayMethod:function(A,e,t,i){if(o){if(t)for(var g in
|
|
80
|
+
throw k(C(A)+" is not a typed array constructor")},exportTypedArrayMethod:function(A,e,t,i){if(o){if(t)for(var g in H){var r=a[g]
|
|
81
81
|
if(r&&n(r.prototype,A))try{delete r.prototype[A]}catch(t){try{r.prototype[A]=e}catch(A){}}}S[A]&&!t||h(S,A,t?e:L&&p[A]||e,i)}},exportTypedArrayStaticMethod:function(A,e,t){var i,g
|
|
82
|
-
if(o){if(w){if(t)for(i in
|
|
83
|
-
try{return h(N,A,t?e:L&&N[A]||e)}catch(A){}}for(i in
|
|
82
|
+
if(o){if(w){if(t)for(i in H)if((g=a[i])&&n(g,A))try{delete g[A]}catch(A){}if(N[A]&&!t)return
|
|
83
|
+
try{return h(N,A,t?e:L&&N[A]||e)}catch(A){}}for(i in H)!(g=a[i])||g[A]&&!t||h(g,A,e)}},isView:function isView(A){if(!B(A))return!1
|
|
84
84
|
var e=E(A)
|
|
85
|
-
return"DataView"===e||n(
|
|
85
|
+
return"DataView"===e||n(H,e)||n(x,e)},isTypedArray,TypedArray:N,TypedArrayPrototype:S}},"1e04dbea6390ec3fc535":(A,e,t)=>{"use strict"
|
|
86
86
|
var i=t("5ffb25713e4b2f29c7c2").forEach,g=t("c65508fd091732242f4a")("forEach")
|
|
87
87
|
A.exports=g?[].forEach:function forEach(A){return i(this,A,arguments.length>1?arguments[1]:void 0)}},bd27725e0ae41a8ab5b8:(A,e,t)=>{var i=t("1e1ff1d51f2b5ee31a22")
|
|
88
88
|
A.exports=function(A,e){for(var t=0,g=i(e),r=new A(g);g>t;)r[t]=e[t++]
|
|
@@ -141,8 +141,8 @@ var N,S,G,getIterationMethod=function(A){if(A===c&&L)return L
|
|
|
141
141
|
if(!D&&A in _)return _[A]
|
|
142
142
|
switch(A){case m:return function keys(){return new t(this,A)}
|
|
143
143
|
case p:return function values(){return new t(this,A)}
|
|
144
|
-
case y:return function entries(){return new t(this,A)}}return function(){return new t(this)}},k=e+" Iterator",b=!1,_=A.prototype,U=_[f]||_["@@iterator"]||c&&_[c],L=!D&&U||getIterationMethod(c),
|
|
145
|
-
if(
|
|
144
|
+
case y:return function entries(){return new t(this,A)}}return function(){return new t(this)}},k=e+" Iterator",b=!1,_=A.prototype,U=_[f]||_["@@iterator"]||c&&_[c],L=!D&&U||getIterationMethod(c),v="Array"==e&&_.entries||U
|
|
145
|
+
if(v&&(N=s(v.call(new A)))!==Object.prototype&&N.next&&(r||s(N)===w||(B?B(N,w):o(N[f])||C(N,f,returnThis)),n(N,k,!0,!0),r&&(h[k]=returnThis)),l&&c==p&&U&&U.name!==p&&(!r&&u?E(_,"name",p):(b=!0,L=function values(){return g(U,this)})),c)if(S={values:getIterationMethod(p),keys:d?L:getIterationMethod(m),entries:getIterationMethod(y)},R)for(G in S)(D||b||!(G in _))&&C(_,G,S[G])
|
|
146
146
|
else i({target:e,proto:!0,forced:D||b},S)
|
|
147
147
|
return r&&!R||_[f]===L||C(_,f,L,{name:c}),h[e]=L,S}},dec3257ec25bafd29a51:(A,e,t)=>{var i=t("e9a410afd7c260527400")
|
|
148
148
|
A.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"0407c2026c873ff7ebfd":(A,e,t)=>{var i=t("bdf769e41bfccf0b5dda"),g=t("2a0da7f8b0aa3e275f00"),r=i.document,I=g(r)&&g(r.createElement)
|
|
@@ -365,12 +365,12 @@ i({target:"Object",stat:!0},{entries:function entries(A){return g(A)}})},"4beec9
|
|
|
365
365
|
i({target:"Object",stat:!0},{fromEntries:function fromEntries(A){var e={}
|
|
366
366
|
return g(A,(function(A,t){r(e,A,t)}),{AS_ENTRIES:!0}),e}})},"837615960468ad3093e4":(A,e,t)=>{var i=t("d2c6015c070e2bebfb14"),g=t("dec3257ec25bafd29a51"),r=t("82b7ec0fd61b13ba2316"),I=t("f5744e90f1ecd97358e7"),o=t("831515cbcc3ce4e71d1a"),a=t("592865d8f0d2e0243197")
|
|
367
367
|
i({target:"Object",stat:!0,sham:!g},{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(A){for(var e,t,i=I(A),g=o.f,s=r(i),B={},n=0;s.length>n;)void 0!==(t=g(i,e=s[n++]))&&a(B,e,t)
|
|
368
|
-
return B}})},c06c15d06f4af9a8ce93:(A,e,t)=>{"use strict"
|
|
368
|
+
return B}})},d27f89af22774db80ad2:(A,e,t)=>{t("d2c6015c070e2bebfb14")({target:"Object",stat:!0},{hasOwn:t("334e42222163b1cc58f4")})},c06c15d06f4af9a8ce93:(A,e,t)=>{"use strict"
|
|
369
369
|
var i=t("d2c6015c070e2bebfb14"),g=t("96709e75f40e34025574"),r=t("f7b4cdbdc48628bf0542"),I=t("e9a410afd7c260527400"),o=t("d700abe7aa15e6cea2b3"),a=t("53a2db31217b81c0bcc8"),s=t("35fa39bb446db3f1bf02"),B=t("13cd6036100dfd2c16c3"),n=t("cf7a74b85e1315e84b8a")
|
|
370
370
|
if(i({target:"Promise",proto:!0,real:!0,forced:!!r&&I((function(){r.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(A){var e=s(this,o("Promise")),t=a(A)
|
|
371
371
|
return this.then(t?function(t){return B(e,A()).then((function(){return t}))}:A,t?function(t){return B(e,A()).then((function(){throw t}))}:A)}}),!g&&a(r)){var E=o("Promise").prototype.finally
|
|
372
372
|
r.prototype.finally!==E&&n(r.prototype,"finally",E,{unsafe:!0})}},"302d5b9d0be817529ac1":(A,e,t)=>{"use strict"
|
|
373
|
-
var i,g,r,I,o=t("d2c6015c070e2bebfb14"),a=t("96709e75f40e34025574"),s=t("bdf769e41bfccf0b5dda"),B=t("d700abe7aa15e6cea2b3"),n=t("62f94fd1f8d4430e8346"),E=t("f7b4cdbdc48628bf0542"),C=t("cf7a74b85e1315e84b8a"),c=t("fef5915794f7d242d691"),h=t("289b953beca9076338f6"),d=t("3517cca774d8c0209c08"),l=t("6110ffbf076d979bdbcf"),u=t("47252be5c531eaa4f043"),w=t("53a2db31217b81c0bcc8"),D=t("2a0da7f8b0aa3e275f00"),f=t("2f9e9b75053b40e5f9b8"),m=t("d9f3eee07e527622f375"),p=t("2f8c66eb1c64fa2f6f17"),y=t("5eaad31011787ab80b06"),R=t("35fa39bb446db3f1bf02"),N=t("80170dd13f17db553afa").set,S=t("d83d221dd5cbc6da88b5"),G=t("13cd6036100dfd2c16c3"),k=t("6368ba608c3d68cfe909"),b=t("4d0a4b8680ffcfcaff45"),_=t("01888946f87e63f28fb4"),U=t("c0d1de502735433bad24"),L=t("4aa145be81408656c4d5"),
|
|
373
|
+
var i,g,r,I,o=t("d2c6015c070e2bebfb14"),a=t("96709e75f40e34025574"),s=t("bdf769e41bfccf0b5dda"),B=t("d700abe7aa15e6cea2b3"),n=t("62f94fd1f8d4430e8346"),E=t("f7b4cdbdc48628bf0542"),C=t("cf7a74b85e1315e84b8a"),c=t("fef5915794f7d242d691"),h=t("289b953beca9076338f6"),d=t("3517cca774d8c0209c08"),l=t("6110ffbf076d979bdbcf"),u=t("47252be5c531eaa4f043"),w=t("53a2db31217b81c0bcc8"),D=t("2a0da7f8b0aa3e275f00"),f=t("2f9e9b75053b40e5f9b8"),m=t("d9f3eee07e527622f375"),p=t("2f8c66eb1c64fa2f6f17"),y=t("5eaad31011787ab80b06"),R=t("35fa39bb446db3f1bf02"),N=t("80170dd13f17db553afa").set,S=t("d83d221dd5cbc6da88b5"),G=t("13cd6036100dfd2c16c3"),k=t("6368ba608c3d68cfe909"),b=t("4d0a4b8680ffcfcaff45"),_=t("01888946f87e63f28fb4"),U=t("c0d1de502735433bad24"),L=t("4aa145be81408656c4d5"),v=t("12349297345593d1db1e"),H=t("2ac951b1c6c29ae2d7c7"),x=t("341d9aed1b509e970178"),Y=t("9e5845a66ef1b7714ac7"),J=t("86f7db590a96c349c0e7"),T=H("species"),K="Promise",P=L.getterFor(K),O=L.set,q=L.getterFor(K),z=E&&E.prototype,j=E,V=z,W=s.TypeError,Z=s.document,X=s.process,$=b.f,AA=$,eA=!!(Z&&Z.createEvent&&s.dispatchEvent),tA=w(s.PromiseRejectionEvent),iA="unhandledrejection",gA=!1,rA=v(K,(function(){var A=m(j),e=A!==String(j)
|
|
374
374
|
if(!e&&66===J)return!0
|
|
375
375
|
if(a&&!V.finally)return!0
|
|
376
376
|
if(J>=51&&/native code/.test(A))return!1
|
|
@@ -451,11 +451,11 @@ handlePrototype(r)},"1e9f329c34da89a4efd6":(A,e,t)=>{var i=t("bdf769e41bfccf0b5d
|
|
|
451
451
|
for(var E in g)handlePrototype(i[E]&&i[E].prototype,E)
|
|
452
452
|
handlePrototype(r,"DOMTokenList")},"8e5531a739ad2a362fcc":function(A,e,t){var i
|
|
453
453
|
!function(g,r){"use strict"
|
|
454
|
-
var I="function",o="undefined",a="object",s="string",B="major",n="model",E="name",C="type",c="vendor",h="version",d="architecture",l="console",u="mobile",w="tablet",D="smarttv",f="wearable",m="embedded",p="Amazon",y="Apple",R="ASUS",N="BlackBerry",S="Browser",G="Chrome",k="Firefox",b="Google",_="Huawei",U="LG",L="Microsoft",
|
|
454
|
+
var I="function",o="undefined",a="object",s="string",B="major",n="model",E="name",C="type",c="vendor",h="version",d="architecture",l="console",u="mobile",w="tablet",D="smarttv",f="wearable",m="embedded",p="Amazon",y="Apple",R="ASUS",N="BlackBerry",S="Browser",G="Chrome",k="Firefox",b="Google",_="Huawei",U="LG",L="Microsoft",v="Motorola",H="Opera",x="Samsung",Y="Sharp",J="Sony",T="Xiaomi",K="Zebra",P="Facebook",O="Chromium OS",q="Mac OS",enumerize=function(A){for(var e={},t=0;t<A.length;t++)e[A[t].toUpperCase()]=A[t]
|
|
455
455
|
return e},has=function(A,e){return typeof A===s&&-1!==lowerize(e).indexOf(lowerize(A))},lowerize=function(A){return A.toLowerCase()},trim=function(A,e){if(typeof A===s)return A=A.replace(/^\s\s*/,""),typeof e===o?A:A.substring(0,350)},rgxMapper=function(A,e){for(var t,i,g,o,s,B,n=0;n<e.length&&!s;){var E=e[n],C=e[n+1]
|
|
456
456
|
for(t=i=0;t<E.length&&!s&&E[t];)if(s=E[t++].exec(A))for(g=0;g<C.length;g++)B=s[++i],typeof(o=C[g])===a&&o.length>0?2===o.length?typeof o[1]==I?this[o[0]]=o[1].call(this,B):this[o[0]]=o[1]:3===o.length?typeof o[1]!==I||o[1].exec&&o[1].test?this[o[0]]=B?B.replace(o[1],o[2]):r:this[o[0]]=B?o[1].call(this,B,o[2]):r:4===o.length&&(this[o[0]]=B?o[3].call(this,B.replace(o[1],o[2])):r):this[o]=B||r
|
|
457
457
|
n+=2}},strMapper=function(A,e){for(var t in e)if(typeof e[t]===a&&e[t].length>0){for(var i=0;i<e[t].length;i++)if(has(e[t][i],A))return"?"===t?r:t}else if(has(e[t],A))return"?"===t?r:t
|
|
458
|
-
return A},z={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},j={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[E,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[E,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[E,h],[/opios[\/ ]+([\w\.]+)/i],[h,[E,v+" Mini"]],[/\bopr\/([\w\.]+)/i],[h,[E,v]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[E,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[E,"UC"+S]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i],[h,[E,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[h,[E,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[E,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[E,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[h,[E,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[E,/(.+)/,"$1 Secure "+S],h],[/\bfocus\/([\w\.]+)/i],[h,[E,k+" Focus"]],[/\bopt\/([\w\.]+)/i],[h,[E,v+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[E,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[E,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[E,v+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[E,"MIUI "+S]],[/fxios\/([-\w\.]+)/i],[h,[E,k]],[/\bqihu|(qi?ho?o?|360)browser/i],[[E,"360 "+S]],[/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i],[[E,/(.+)/,"$1 "+S],h],[/(comodo_dragon)\/([\w\.]+)/i],[[E,/_/g," "],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[E,h],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i,/\[(linkedin)app\]/i],[E],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[E,P],h],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[E,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[E,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[h,[E,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[E,G+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[E,G+" WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[E,"Android "+S]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[E,h],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[h,[E,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[h,E],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[E,[h,strMapper,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[E,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[E,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[E,k+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[E,h],[/(cobalt)\/([\w\.]+)/i],[E,[h,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[d,"amd64"]],[/(ia32(?=;))/i],[[d,lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[d,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[d,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[d,"armhf"]],[/windows (ce|mobile); ppc;/i],[[d,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[d,/ower/,"",lowerize]],[/(sun4\w)[;\)]/i],[[d,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[d,lowerize]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[n,[c,x],[C,w]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[n,[c,x],[C,u]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[n,[c,y],[C,u]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[n,[c,y],[C,w]],[/(macintosh);/i],[n,[c,y]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[n,[c,Y],[C,u]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[n,[c,_],[C,w]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[n,[c,_],[C,u]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[n,/_/g," "],[c,T],[C,u]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[n,/_/g," "],[c,T],[C,w]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[n,[c,"OPPO"],[C,u]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[n,[c,"Vivo"],[C,u]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[n,[c,"Realme"],[C,u]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[n,[c,H],[C,u]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[n,[c,H],[C,w]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[n,[c,U],[C,w]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[n,[c,U],[C,u]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[n,[c,"Lenovo"],[C,w]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[n,/_/g," "],[c,"Nokia"],[C,u]],[/(pixel c)\b/i],[n,[c,b],[C,w]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[n,[c,b],[C,u]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[n,[c,J],[C,u]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[n,"Xperia Tablet"],[c,J],[C,w]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[n,[c,"OnePlus"],[C,u]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[n,[c,p],[C,w]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[n,/(.+)/g,"Fire Phone $1"],[c,p],[C,u]],[/(playbook);[-\w\),; ]+(rim)/i],[n,c,[C,w]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[n,[c,N],[C,u]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[n,[c,R],[C,w]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[n,[c,R],[C,u]],[/(nexus 9)/i],[n,[c,"HTC"],[C,w]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[c,[n,/_/g," "],[C,u]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[n,[c,"Acer"],[C,w]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[n,[c,"Meizu"],[C,u]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[c,n,[C,u]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[c,n,[C,w]],[/(surface duo)/i],[n,[c,L],[C,w]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[n,[c,"Fairphone"],[C,u]],[/(u304aa)/i],[n,[c,"AT&T"],[C,u]],[/\bsie-(\w*)/i],[n,[c,"Siemens"],[C,u]],[/\b(rct\w+) b/i],[n,[c,"RCA"],[C,w]],[/\b(venue[\d ]{2,7}) b/i],[n,[c,"Dell"],[C,w]],[/\b(q(?:mv|ta)\w+) b/i],[n,[c,"Verizon"],[C,w]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[n,[c,"Barnes & Noble"],[C,w]],[/\b(tm\d{3}\w+) b/i],[n,[c,"NuVision"],[C,w]],[/\b(k88) b/i],[n,[c,"ZTE"],[C,w]],[/\b(nx\d{3}j) b/i],[n,[c,"ZTE"],[C,u]],[/\b(gen\d{3}) b.+49h/i],[n,[c,"Swiss"],[C,u]],[/\b(zur\d{3}) b/i],[n,[c,"Swiss"],[C,w]],[/\b((zeki)?tb.*\b) b/i],[n,[c,"Zeki"],[C,w]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[c,"Dragon Touch"],n,[C,w]],[/\b(ns-?\w{0,9}) b/i],[n,[c,"Insignia"],[C,w]],[/\b((nxa|next)-?\w{0,9}) b/i],[n,[c,"NextBook"],[C,w]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[c,"Voice"],n,[C,u]],[/\b(lvtel\-)?(v1[12]) b/i],[[c,"LvTel"],n,[C,u]],[/\b(ph-1) /i],[n,[c,"Essential"],[C,u]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[n,[c,"Envizen"],[C,w]],[/\b(trio[-\w\. ]+) b/i],[n,[c,"MachSpeed"],[C,w]],[/\btu_(1491) b/i],[n,[c,"Rotor"],[C,w]],[/(shield[\w ]+) b/i],[n,[c,"Nvidia"],[C,w]],[/(sprint) (\w+)/i],[c,n,[C,u]],[/(kin\.[onetw]{3})/i],[[n,/\./g," "],[c,L],[C,u]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[n,[c,K],[C,w]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[n,[c,K],[C,u]],[/smart-tv.+(samsung)/i],[c,[C,D]],[/hbbtv.+maple;(\d+)/i],[[n,/^/,"SmartTV"],[c,x],[C,D]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[c,U],[C,D]],[/(apple) ?tv/i],[c,[n,y+" TV"],[C,D]],[/crkey/i],[[n,G+"cast"],[c,b],[C,D]],[/droid.+aft(\w)( bui|\))/i],[n,[c,p],[C,D]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[n,[c,Y],[C,D]],[/(bravia[\w ]+)( bui|\))/i],[n,[c,J],[C,D]],[/(mitv-\w{5}) bui/i],[n,[c,T],[C,D]],[/Hbbtv.*(technisat) (.*);/i],[c,n,[C,D]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[c,trim],[n,trim],[C,D]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[C,D]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[c,n,[C,l]],[/droid.+; (shield) bui/i],[n,[c,"Nvidia"],[C,l]],[/(playstation [345portablevi]+)/i],[n,[c,J],[C,l]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[n,[c,L],[C,l]],[/((pebble))app/i],[c,n,[C,f]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[n,[c,y],[C,f]],[/droid.+; (glass) \d/i],[n,[c,b],[C,f]],[/droid.+; (wt63?0{2,3})\)/i],[n,[c,K],[C,f]],[/(quest( 2| pro)?)/i],[n,[c,P],[C,f]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[c,[C,m]],[/(aeobc)\b/i],[n,[c,p],[C,m]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[n,[C,u]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[n,[C,w]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[C,w]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[C,u]],[/(android[-\w\. ]{0,9});.+buil/i],[n,[c,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[E,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[E,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[E,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,E]],os:[[/microsoft (windows) (vista|xp)/i],[E,h],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[E,[h,strMapper,z]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[E,"Windows"],[h,strMapper,z]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/ios;fbsv\/([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[E,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[E,q],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[h,E],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[E,h],[/\(bb(10);/i],[h,[E,N]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[E,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[E,k+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[E,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[h,[E,"watchOS"]],[/crkey\/([\d\.]+)/i],[h,[E,G+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[E,O],h],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[E,h],[/(sunos) ?([\w\.\d]*)/i],[[E,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[E,h]]},UAParser=function(A,e){if(typeof A===a&&(e=A,A=r),!(this instanceof UAParser))return new UAParser(A,e).getResult()
|
|
458
|
+
return A},z={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},j={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[E,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[E,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[E,h],[/opios[\/ ]+([\w\.]+)/i],[h,[E,H+" Mini"]],[/\bopr\/([\w\.]+)/i],[h,[E,H]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[E,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[E,"UC"+S]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i],[h,[E,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[h,[E,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[E,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[E,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[h,[E,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[E,/(.+)/,"$1 Secure "+S],h],[/\bfocus\/([\w\.]+)/i],[h,[E,k+" Focus"]],[/\bopt\/([\w\.]+)/i],[h,[E,H+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[E,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[E,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[E,H+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[E,"MIUI "+S]],[/fxios\/([-\w\.]+)/i],[h,[E,k]],[/\bqihu|(qi?ho?o?|360)browser/i],[[E,"360 "+S]],[/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i],[[E,/(.+)/,"$1 "+S],h],[/(comodo_dragon)\/([\w\.]+)/i],[[E,/_/g," "],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[E,h],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i,/\[(linkedin)app\]/i],[E],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[E,P],h],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[E,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[E,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[h,[E,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[E,G+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[E,G+" WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[E,"Android "+S]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[E,h],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[h,[E,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[h,E],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[E,[h,strMapper,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[E,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[E,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[E,k+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[E,h],[/(cobalt)\/([\w\.]+)/i],[E,[h,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[d,"amd64"]],[/(ia32(?=;))/i],[[d,lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[d,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[d,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[d,"armhf"]],[/windows (ce|mobile); ppc;/i],[[d,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[d,/ower/,"",lowerize]],[/(sun4\w)[;\)]/i],[[d,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[d,lowerize]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[n,[c,x],[C,w]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[n,[c,x],[C,u]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[n,[c,y],[C,u]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[n,[c,y],[C,w]],[/(macintosh);/i],[n,[c,y]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[n,[c,Y],[C,u]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[n,[c,_],[C,w]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[n,[c,_],[C,u]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[n,/_/g," "],[c,T],[C,u]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[n,/_/g," "],[c,T],[C,w]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[n,[c,"OPPO"],[C,u]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[n,[c,"Vivo"],[C,u]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[n,[c,"Realme"],[C,u]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[n,[c,v],[C,u]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[n,[c,v],[C,w]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[n,[c,U],[C,w]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[n,[c,U],[C,u]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[n,[c,"Lenovo"],[C,w]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[n,/_/g," "],[c,"Nokia"],[C,u]],[/(pixel c)\b/i],[n,[c,b],[C,w]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[n,[c,b],[C,u]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[n,[c,J],[C,u]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[n,"Xperia Tablet"],[c,J],[C,w]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[n,[c,"OnePlus"],[C,u]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[n,[c,p],[C,w]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[n,/(.+)/g,"Fire Phone $1"],[c,p],[C,u]],[/(playbook);[-\w\),; ]+(rim)/i],[n,c,[C,w]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[n,[c,N],[C,u]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[n,[c,R],[C,w]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[n,[c,R],[C,u]],[/(nexus 9)/i],[n,[c,"HTC"],[C,w]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[c,[n,/_/g," "],[C,u]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[n,[c,"Acer"],[C,w]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[n,[c,"Meizu"],[C,u]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[c,n,[C,u]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[c,n,[C,w]],[/(surface duo)/i],[n,[c,L],[C,w]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[n,[c,"Fairphone"],[C,u]],[/(u304aa)/i],[n,[c,"AT&T"],[C,u]],[/\bsie-(\w*)/i],[n,[c,"Siemens"],[C,u]],[/\b(rct\w+) b/i],[n,[c,"RCA"],[C,w]],[/\b(venue[\d ]{2,7}) b/i],[n,[c,"Dell"],[C,w]],[/\b(q(?:mv|ta)\w+) b/i],[n,[c,"Verizon"],[C,w]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[n,[c,"Barnes & Noble"],[C,w]],[/\b(tm\d{3}\w+) b/i],[n,[c,"NuVision"],[C,w]],[/\b(k88) b/i],[n,[c,"ZTE"],[C,w]],[/\b(nx\d{3}j) b/i],[n,[c,"ZTE"],[C,u]],[/\b(gen\d{3}) b.+49h/i],[n,[c,"Swiss"],[C,u]],[/\b(zur\d{3}) b/i],[n,[c,"Swiss"],[C,w]],[/\b((zeki)?tb.*\b) b/i],[n,[c,"Zeki"],[C,w]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[c,"Dragon Touch"],n,[C,w]],[/\b(ns-?\w{0,9}) b/i],[n,[c,"Insignia"],[C,w]],[/\b((nxa|next)-?\w{0,9}) b/i],[n,[c,"NextBook"],[C,w]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[c,"Voice"],n,[C,u]],[/\b(lvtel\-)?(v1[12]) b/i],[[c,"LvTel"],n,[C,u]],[/\b(ph-1) /i],[n,[c,"Essential"],[C,u]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[n,[c,"Envizen"],[C,w]],[/\b(trio[-\w\. ]+) b/i],[n,[c,"MachSpeed"],[C,w]],[/\btu_(1491) b/i],[n,[c,"Rotor"],[C,w]],[/(shield[\w ]+) b/i],[n,[c,"Nvidia"],[C,w]],[/(sprint) (\w+)/i],[c,n,[C,u]],[/(kin\.[onetw]{3})/i],[[n,/\./g," "],[c,L],[C,u]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[n,[c,K],[C,w]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[n,[c,K],[C,u]],[/smart-tv.+(samsung)/i],[c,[C,D]],[/hbbtv.+maple;(\d+)/i],[[n,/^/,"SmartTV"],[c,x],[C,D]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[c,U],[C,D]],[/(apple) ?tv/i],[c,[n,y+" TV"],[C,D]],[/crkey/i],[[n,G+"cast"],[c,b],[C,D]],[/droid.+aft(\w)( bui|\))/i],[n,[c,p],[C,D]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[n,[c,Y],[C,D]],[/(bravia[\w ]+)( bui|\))/i],[n,[c,J],[C,D]],[/(mitv-\w{5}) bui/i],[n,[c,T],[C,D]],[/Hbbtv.*(technisat) (.*);/i],[c,n,[C,D]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[c,trim],[n,trim],[C,D]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[C,D]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[c,n,[C,l]],[/droid.+; (shield) bui/i],[n,[c,"Nvidia"],[C,l]],[/(playstation [345portablevi]+)/i],[n,[c,J],[C,l]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[n,[c,L],[C,l]],[/((pebble))app/i],[c,n,[C,f]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[n,[c,y],[C,f]],[/droid.+; (glass) \d/i],[n,[c,b],[C,f]],[/droid.+; (wt63?0{2,3})\)/i],[n,[c,K],[C,f]],[/(quest( 2| pro)?)/i],[n,[c,P],[C,f]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[c,[C,m]],[/(aeobc)\b/i],[n,[c,p],[C,m]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[n,[C,u]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[n,[C,w]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[C,w]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[C,u]],[/(android[-\w\. ]{0,9});.+buil/i],[n,[c,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[E,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[E,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[E,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,E]],os:[[/microsoft (windows) (vista|xp)/i],[E,h],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[E,[h,strMapper,z]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[E,"Windows"],[h,strMapper,z]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/ios;fbsv\/([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[E,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[E,q],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[h,E],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[E,h],[/\(bb(10);/i],[h,[E,N]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[E,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[E,k+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[E,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[h,[E,"watchOS"]],[/crkey\/([\d\.]+)/i],[h,[E,G+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[E,O],h],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[E,h],[/(sunos) ?([\w\.\d]*)/i],[[E,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[E,h]]},UAParser=function(A,e){if(typeof A===a&&(e=A,A=r),!(this instanceof UAParser))return new UAParser(A,e).getResult()
|
|
459
459
|
var t=typeof g!==o&&g.navigator?g.navigator:r,i=A||(t&&t.userAgent?t.userAgent:""),l=t&&t.userAgentData?t.userAgentData:r,D=e?function(A,e){var t={}
|
|
460
460
|
for(var i in A)e[i]&&e[i].length%2===0?t[i]=e[i].concat(A[i]):t[i]=A[i]
|
|
461
461
|
return t}(j,e):j,f=t&&t.userAgent==i
|
|
@@ -482,78 +482,79 @@ try{return this||new Function("return this")()}catch(A){if("object"===typeof win
|
|
|
482
482
|
var A={}
|
|
483
483
|
__webpack_require__.r(A),__webpack_require__.d(A,{emit:()=>emit,setEmitAction:()=>setEmitAction})
|
|
484
484
|
__webpack_require__("41d983a9671842059e02")
|
|
485
|
-
var e,t="".concat("WANNA","_").concat("EVENT"),i="".concat(t,"_SDK_LOADED"),g="".concat(t,"_LOAD_RESOURCE_MODEL"),r="".concat(t,"_LOAD_RESOURCE_MODEL_ACKNOWLEDGE"),I="".concat(t,"_RESOURCE_LOAD_STARTED"),o="".concat(t,"_RESOURCE_LOAD_PROGRESS"),a="".concat(t,"_RESOURCE_LOAD_FINISHED"),s="".concat(t,"_RESOURCE_LOAD_FAILED"),B="".concat(t,"_START_INIT"),n="".concat(t,"_INIT_STARTED"),E="".concat(t,"_INIT_FINISHED"),C="".concat(t,"_INIT_FAILED"),c="".concat(t,"_LAZY_INIT_FAILED"),h="".concat(t,"_DESTROY"),d="".concat(t,"_DESTROY_ACKNOWLEDGE"),l="".concat(t,"_DESTROYED"),u="".concat(t,"_DESTROY_FAILED"),w="".concat(t,"_START_PIPELINE"),D="".concat(t,"_START_PIPELINE_ACKNOWLEDGE"),f="".concat(t,"_PIPELINE_STARTED"),m="".concat(t,"_PIPELINE_START_FAILED"),p="".concat(t,"_PAUSE_PIPELINE"),y="".concat(t,"_PAUSE_PIPELINE_ACKNOWLEDGE"),R="".concat(t,"_PIPELINE_PAUSED"),N="".concat(t,"_PIPELINE_PAUSE_FAILED"),S=("".concat(t,"_STOP_PIPELINE"),"".concat(t,"_STOP_PIPELINE_ACKNOWLEDGE"),"".concat(t,"_PIPELINE_STOPPED"),"".concat(t,"_PIPELINE_STOP_FAILED"),"".concat(t,"_CHANGE_CAMERA")),G="".concat(t,"_CHANGE_CAMERA_ACKNOWLEDGE"),k="".concat(t,"_CAMERA_CHANGED"),b="".concat(t,"_CAMERA_CHANGE_FAILED"),_="".concat(t,"_SWITCH_CAMERA_FACING_MODE"),U="".concat(t,"_SWITCH_CAMERA_FACING_MODE_ACKNOWLEDGE"),L="".concat(t,"_CAMERA_FACING_MODE_SWITCHED"),
|
|
485
|
+
var e,t="".concat("WANNA","_").concat("EVENT"),i="".concat(t,"_SDK_LOADED"),g="".concat(t,"_LOAD_RESOURCE_MODEL"),r="".concat(t,"_LOAD_RESOURCE_MODEL_ACKNOWLEDGE"),I="".concat(t,"_RESOURCE_LOAD_STARTED"),o="".concat(t,"_RESOURCE_LOAD_PROGRESS"),a="".concat(t,"_RESOURCE_LOAD_FINISHED"),s="".concat(t,"_RESOURCE_LOAD_FAILED"),B="".concat(t,"_START_INIT"),n="".concat(t,"_INIT_STARTED"),E="".concat(t,"_INIT_FINISHED"),C="".concat(t,"_INIT_FAILED"),c="".concat(t,"_LAZY_INIT_FAILED"),h="".concat(t,"_DESTROY"),d="".concat(t,"_DESTROY_ACKNOWLEDGE"),l="".concat(t,"_DESTROYED"),u="".concat(t,"_DESTROY_FAILED"),w="".concat(t,"_START_PIPELINE"),D="".concat(t,"_START_PIPELINE_ACKNOWLEDGE"),f="".concat(t,"_PIPELINE_STARTED"),m="".concat(t,"_PIPELINE_START_FAILED"),p="".concat(t,"_PAUSE_PIPELINE"),y="".concat(t,"_PAUSE_PIPELINE_ACKNOWLEDGE"),R="".concat(t,"_PIPELINE_PAUSED"),N="".concat(t,"_PIPELINE_PAUSE_FAILED"),S=("".concat(t,"_STOP_PIPELINE"),"".concat(t,"_STOP_PIPELINE_ACKNOWLEDGE"),"".concat(t,"_PIPELINE_STOPPED"),"".concat(t,"_PIPELINE_STOP_FAILED"),"".concat(t,"_CHANGE_CAMERA")),G="".concat(t,"_CHANGE_CAMERA_ACKNOWLEDGE"),k="".concat(t,"_CAMERA_CHANGED"),b="".concat(t,"_CAMERA_CHANGE_FAILED"),_="".concat(t,"_SWITCH_CAMERA_FACING_MODE"),U="".concat(t,"_SWITCH_CAMERA_FACING_MODE_ACKNOWLEDGE"),L="".concat(t,"_CAMERA_FACING_MODE_SWITCHED"),v="".concat(t,"_CAMERA_SWITCH_FACING_MODE_FAILED"),H="".concat(t,"_CAMERA_ACCESS_REQUESTED"),x="".concat(t,"_CAMERA_ACCESS_GRANTED"),Y="".concat(t,"_CAMERA_ACCESS_FAILED"),J="".concat(t,"_GET_CAMERAS_LIST"),T="".concat(t,"_GET_CAMERAS_LIST_ACKNOWLEDGE"),K="".concat(t,"_CAMERAS_LIST"),P="".concat(t,"_CAMERAS_LIST_FAILED"),O="".concat(t,"_SET_MODEL"),q="".concat(t,"_SET_MODEL_ACKNOWLEDGE"),z="".concat(t,"_MODEL_SET"),j="".concat(t,"_MODEL_SET_FAILED"),V="".concat(t,"_LOG_3D_VIEWER_DURATION"),W="".concat(t,"_LOG_3D_VIEWER_DURATION_ACKNOWLEDGE"),Z="".concat(t,"_LOG_3D_VIEWER_DURATION_SENT"),X="".concat(t,"_LOG_3D_VIEWER_DURATION_FAILED"),$="".concat(t,"_TAKE_PHOTO"),AA="".concat(t,"_TAKE_PHOTO_ACKNOWLEDGE"),eA="".concat(t,"_PHOTO_TAKEN"),tA="".concat(t,"_PHOTO_TAKE_FAILED"),iA="".concat(t,"_TRY_ON"),gA="".concat(t,"_3D_SUCCEEDED"),rA="".concat(t,"_ERROR"),IA="".concat(t,"_OBJECT_APPEARED"),oA="".concat(t,"_OBJECT_DISAPPEARED"),aA="".concat(t,"_DEBUG"),sA="".concat(t,"_DEBUG_ACKNOWLEDGE"),BA="".concat(t,"_DEBUG_FAILED"),QA="".concat(t,"_DEBUG_SUCCESS"),nA="".concat(t,"_FREEZE_ON_CAMERA_CHANGE"),EA="".concat(t,"_WARMED_UP"),CA="".concat(t,"_FRAME_SIZE_CHANGED"),cA="".concat(t,"_INIT_VIDEO"),hA="".concat(t,"_INIT_VIDEO_ACKNOWLEDGE"),dA="".concat(t,"_VIDEO_INITIALIZED"),lA="".concat(t,"_VIDEO_INIT_FAILED"),uA="".concat(t,"_LOG"),wA="".concat(t,"_SET_MODE"),DA="".concat(t,"_SET_MODE_ACKNOWLEDGE"),fA="".concat(t,"_MODE_SET"),mA="".concat(t,"_SET_MODE_FAILED"),pA="".concat(t,"_SET_POI"),yA="".concat(t,"_SET_POI_ACKNOWLEDGE"),RA="".concat(t,"_POI_SET"),MA="".concat(t,"_SET_POI_FAILED"),FA="".concat(t,"_RESET_CAMERA_POSITION"),NA="".concat(t,"_RESET_CAMERA_POSITION_ACKNOWLEDGE"),SA="".concat(t,"_RESET_CAMERA_POSITION_FINISHED"),GA="".concat(t,"_RESET_CAMERA_POSITION_FAILED"),kA="".concat(t,"_CAMERA_ZOOM"),bA="".concat(t,"_CAMERA_ZOOM_ACKNOWLEDGE"),_A="".concat(t,"_CAMERA_ZOOMED"),UA="".concat(t,"_CAMERA_ZOOM_FAILED"),LA="".concat(t,"_TOGGLE_PANNING_MODE"),vA="".concat(t,"_TOGGLE_PANNING_MODE_ACKNOWLEDGE"),HA="".concat(t,"_TOGGLE_PANNING_MODE_SUCCESS"),xA="".concat(t,"_TOGGLE_PANNING_MODE_FAILED"),YA="".concat(t,"_START_PANNING"),JA="".concat(t,"_FINISH_PANNING"),TA="".concat(t,"_ONBOARDING"),KA="".concat(t,"_ONBOARDING_ACKNOWLEDGE"),PA="".concat(t,"_ONBOARDING_SUCCESS"),OA="".concat(t,"_ONBOARDING_FAILED"),qA="".concat(t,"_TOGGLE_DIMENSIONS"),zA="".concat(t,"_TOGGLE_DIMENSIONS_ACKNOWLEDGE"),jA="".concat(t,"_TOGGLE_DIMENSIONS_SUCCESS"),VA="".concat(t,"_TOGGLE_DIMENSIONS_FAILED"),WA="".concat(t,"_INTERACTION_STARTED"),ZA="".concat(t,"_INTERACTION_ENDED"),XA="".concat(t,"_GET_WRIST_MEASUREMENT_CONFIG"),$A="".concat(t,"_GET_WRIST_MEASUREMENT_CONFIG_ACKNOWLEDGE"),Ae="".concat(t,"_WRIST_MEASUREMENT_CONFIG"),ee="".concat(t,"_WRIST_MEASUREMENT_CONFIG_FAILED"),te="".concat(t,"_GET_ASSET_URL"),ie="".concat(t,"_GET_ASSET_URL_ACKNOWLEDGE"),ge="".concat(t,"_GET_ASSET_URL_SUCCESS"),re="".concat(t,"_GET_ASSET_URL_FAILED"),Ie="".concat(t,"_WAIT_FOR_ALL_LOGS_SENT"),oe="".concat(t,"_WAIT_FOR_ALL_LOGS_SENT_ACKNOWLEDGE"),ae="".concat(t,"_WAIT_FOR_ALL_LOGS_SENT_SUCCESS"),se=("".concat(t,"_WAIT_FOR_ALL_LOGS_SENT_FAILED"),"".concat(t,"_SET_PERSON_HEIGHT")),Be="".concat(t,"_SET_PERSON_HEIGHT_ACKNOWLEDGE"),Qe="".concat(t,"_PERSON_HEIGHT_SET"),ne="".concat(t,"_SET_PERSON_HEIGHT_FAILED"),Ee="".concat(t,"_LOG_PUBLIC_EVENT"),Ce="".concat(t,"_LOG_PUBLIC_EVENT_ACKNOWLEDGE"),ce="".concat(t,"_PUBLIC_EVENT_LOGGED"),he="".concat(t,"_LOG_PUBLIC_EVENT_FAILED"),de="".concat(t,"_GET_GLTF_MODELS"),le="".concat(t,"_GET_GLTF_MODELS_ACKNOWLEDGE"),ue="".concat(t,"_GET_GLTF_MODELS_SUCCESS"),we="".concat(t,"_GET_GLTF_MODELS_FAILED"),De="".concat(t,"_SET_GLTF_MODEL"),fe="".concat(t,"_SET_GLTF_MODEL_ACKNOWLEDGE"),me="".concat(t,"_SET_GLTF_MODEL_SUCCESS"),pe="".concat(t,"_SET_GLTF_MODEL_FAILED"),ye=(__webpack_require__("e7bbd96008ef7aaad9a4"),__webpack_require__("d7a6bddb99bf06c1533a"),__webpack_require__("f027ff3ce19abd76d830"),__webpack_require__("7e550f9ece6e53452b4f"),new Uint8Array(16))
|
|
486
486
|
function rng(){if(!e&&!(e="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!==typeof msCrypto&&"function"===typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported")
|
|
487
|
-
return e(
|
|
488
|
-
const
|
|
489
|
-
for(var
|
|
490
|
-
const
|
|
491
|
-
if(!
|
|
487
|
+
return e(ye)}const Re=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
|
|
488
|
+
const Me=function validate(A){return"string"===typeof A&&Re.test(A)}
|
|
489
|
+
for(var Fe=[],Ne=0;Ne<256;++Ne)Fe.push((Ne+256).toString(16).substr(1))
|
|
490
|
+
const Se=function stringify(A){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Fe[A[e+0]]+Fe[A[e+1]]+Fe[A[e+2]]+Fe[A[e+3]]+"-"+Fe[A[e+4]]+Fe[A[e+5]]+"-"+Fe[A[e+6]]+Fe[A[e+7]]+"-"+Fe[A[e+8]]+Fe[A[e+9]]+"-"+Fe[A[e+10]]+Fe[A[e+11]]+Fe[A[e+12]]+Fe[A[e+13]]+Fe[A[e+14]]+Fe[A[e+15]]).toLowerCase()
|
|
491
|
+
if(!Me(t))throw TypeError("Stringified UUID is invalid")
|
|
492
492
|
return t}
|
|
493
|
-
const
|
|
493
|
+
const Ge=function v4(A,e,t){var i=(A=A||{}).random||(A.rng||rng)()
|
|
494
494
|
if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,e){t=t||0
|
|
495
495
|
for(var g=0;g<16;++g)e[t+g]=i[g]
|
|
496
|
-
return e}return
|
|
496
|
+
return e}return Se(i)}
|
|
497
497
|
|
|
498
498
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
499
|
-
var
|
|
500
|
-
class TraceError extends Error{constructor(A,e){if(super(A,e),this._name=
|
|
499
|
+
var ke="Error",be="Unknown error",_e="TraceError"
|
|
500
|
+
class TraceError extends Error{constructor(A,e){if(super(A,e),this._name=_e,this.name=_e,this.constructor!==TraceError)throw new Error("Not allowed to inherit TraceError")
|
|
501
501
|
var t=null===e||void 0===e?void 0:e.cause
|
|
502
|
-
"string"===typeof t&&(t=new Error(t)),this.cause=t,this.name=(null===e||void 0===e?void 0:e.name)||this.name,this.messageParams=null===e||void 0===e?void 0:e.messageParams,this.params=(null===e||void 0===e?void 0:e.params)||{}}rootCause(){for(var A=this;A instanceof Error&&A.cause;)A=A.cause
|
|
502
|
+
"string"===typeof t&&(t=new Error(t)),this.errorId=TraceError.generateErrorId(),this.cause=t,this.name=(null===e||void 0===e?void 0:e.name)||this.name,this.messageParams=null===e||void 0===e?void 0:e.messageParams,this.params=(null===e||void 0===e?void 0:e.params)||{}}rootCause(){for(var A=this;A instanceof Error&&A.cause;)A=A.cause
|
|
503
503
|
return A}getCallStack(){for(var A="",e=this;e;){var t=null
|
|
504
504
|
try{t=TraceError.isTraceError(e)?JSON.stringify(e.messageParams):""}catch(A){t="*impossible to stringify*"}A+="".concat(TraceError.getErrorStack(e)).concat(t?"\n".concat(t):""),e instanceof Error&&e.cause&&(A+="\nCaused by: "),e=e instanceof Error?e.cause:null}return A}getParams(){for(var A={},e=this;e&&TraceError.isTraceError(e);)A=Object.assign(Object.assign({},e.params),A),e=e.cause
|
|
505
|
-
return A}static generateErrorId(){return
|
|
506
|
-
return TraceError.isTraceError(A)&&(e=A.rootCause(),t=A.getParams()),{errorId:
|
|
505
|
+
return A}static generateErrorId(){return Ge()}static toObject(A){var e=A,t={},i=TraceError.generateErrorId()
|
|
506
|
+
return TraceError.isTraceError(A)&&(i=A.errorId,e=A.rootCause(),t=A.getParams()),{errorId:i,message:TraceError.getErrorMessage(e),name:TraceError.getErrorName(e),stack:TraceError.callStack(A),params:t}}static fromObject(A){var e=new TraceError(A.message,{name:A.name,params:A.params})
|
|
507
|
+
return e.stack=A.stack,e.errorId=A.errorId,e}static getErrorStack(A){var e="".concat(TraceError.getErrorName(A),": ").concat(TraceError.getErrorMessage(A)),t=(null===A||void 0===A?void 0:A.stack)||(null===A||void 0===A?void 0:A.toString())||""
|
|
507
508
|
return t.startsWith(e)||(t="".concat(e).concat(t?"\n".concat(t):"")),t}static callStack(A){var e
|
|
508
509
|
if(TraceError.isTraceError(A))return A.getCallStack()
|
|
509
510
|
if(A instanceof Error)return TraceError.getErrorStack(A)
|
|
510
|
-
if("object"===typeof A)try{return"Object received instead of Error: '".concat(JSON.stringify(A),"'")}catch(A){return"Non-serializable object received instead of Error =("}return(null===(e=null===A||void 0===A?void 0:A.toString)||void 0===e?void 0:e.call(A))||"".concat(
|
|
511
|
-
t=t instanceof Error?t.cause:null}return!1}return A instanceof e}static getRootCause(A){return TraceError.isTraceError(A)?A.rootCause():A}static getErrorName(A){return(null===A||void 0===A?void 0:A.name)||
|
|
511
|
+
if("object"===typeof A)try{return"Object received instead of Error: '".concat(JSON.stringify(A),"'")}catch(A){return"Non-serializable object received instead of Error =("}return(null===(e=null===A||void 0===A?void 0:A.toString)||void 0===e?void 0:e.call(A))||"".concat(ke,": ").concat(be)}static isTraceError(A){return A instanceof Error&&A._name===_e}static containsInstance(A,e){if(TraceError.isTraceError(A)){for(var t=A;t;){if(t instanceof e)return!0
|
|
512
|
+
t=t instanceof Error?t.cause:null}return!1}return A instanceof e}static getRootCause(A){return TraceError.isTraceError(A)?A.rootCause():A}static getErrorName(A){return(null===A||void 0===A?void 0:A.name)||ke}static getErrorMessage(A){return(null===A||void 0===A?void 0:A.message)||be}}const Ue=TraceError
|
|
512
513
|
__webpack_require__("302d5b9d0be817529ac1")
|
|
513
|
-
var
|
|
514
|
+
var Le=__webpack_require__("8e5531a739ad2a362fcc"),ve=__webpack_require__.n(Le)
|
|
514
515
|
function asyncGeneratorStep(A,e,t,i,g,r,I){try{var o=A[r](I),a=o.value}catch(A){return void t(A)}o.done?e(a):Promise.resolve(a).then(i,g)}
|
|
515
516
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
516
|
-
var
|
|
517
|
+
var He="none",xe="Chrome",Ye="Chrome WebView",Je="Facebook",Te="Instagram",Ke="KAKAOTALK",Pe="Mobile Safari",Oe="Safari",qe="Samsung Browser",ze="WeChat",je="iOS",Ve="Android",We="mobile",Ze="tablet",Xe=void 0,$e="Samsung",getNavigatorInstance=()=>!("undefined"===typeof window||!window.navigator&&!navigator)&&(window.navigator||navigator),At=function(){var A=function _asyncToGenerator(A){return function(){var e=this,t=arguments
|
|
517
518
|
return new Promise((function(i,g){var r=A.apply(e,t)
|
|
518
519
|
function _next(A){asyncGeneratorStep(r,i,g,_next,_throw,"next",A)}function _throw(A){asyncGeneratorStep(r,i,g,_next,_throw,"throw",A)}_next(void 0)}))}}((function*(){var A,e=getNavigatorInstance()
|
|
519
520
|
return null!==e&&void 0!==e&&null!==(A=e.userAgentData)&&void 0!==A&&A.getHighEntropyValues?yield e.userAgentData.getHighEntropyValues(["architecture","model","platformVersion","fullVersionList"]):{}}))
|
|
520
|
-
return function getUserAgentHints(){return A.apply(this,arguments)}}(),
|
|
521
|
-
|
|
522
|
-
var
|
|
523
|
-
|
|
521
|
+
return function getUserAgentHints(){return A.apply(this,arguments)}}(),et=new(ve()),tt=et.getDevice(),it=et.getOS(),gt=et.getBrowser(),rt=et.getUA()
|
|
522
|
+
gt.name===Oe&&it.name===je&&(gt.name=Pe),gt.version||gt.name!==Pe||(gt.version=it.version)
|
|
523
|
+
var It,ot,st=it.version,Bt=(gt.name,gt.name===Oe||gt.name,gt.name===Te),Qt=gt.name===Je,nt=gt.name===ze,Et=(gt.name,gt.name,gt.name,it.name===je||(It="iPad",(ot=getNavigatorInstance())&&ot.platform&&(-1!==ot.platform.indexOf(It)||"MacIntel"===ot.platform&&ot.maxTouchPoints>1&&!window.MSStream))),Ct=it.name===Ve,ct=gt.vendor||He,ht=tt.model||He,dt=tt.vendor||He,lt=gt.name||He,ut=tt.type===Xe
|
|
524
|
+
tt.type,tt.type,__webpack_require__("5652e634c5c30d93d4d6"),__webpack_require__("c814e6220534e23a38e3"),__webpack_require__("87e1f99482cebfda8add"),__webpack_require__("4beec9dec8d48546aa7e"),__webpack_require__("837615960468ad3093e4"),__webpack_require__("c06c15d06f4af9a8ce93"),__webpack_require__("81ac36b664e314030fc4"),__webpack_require__("1e9f329c34da89a4efd6")
|
|
524
525
|
function standalone_utils_asyncGeneratorStep(A,e,t,i,g,r,I){try{var o=A[r](I),a=o.value}catch(A){return void t(A)}o.done?e(a):Promise.resolve(a).then(i,g)}
|
|
525
526
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
526
|
-
var
|
|
527
|
+
var wt=function throttle(A,e){var t,i,g=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]
|
|
527
528
|
return function(){clearTimeout(i),!t||Date.now()-t>e?(t=Date.now(),A.apply(this,arguments)):g&&(i=setTimeout((()=>{A.apply(this,arguments)}),e))}},once=A=>{var e,t=!1,i=!1
|
|
528
529
|
function wrapper(){if(i){if(t)throw e
|
|
529
530
|
return e}try{e=A.apply(this,arguments)}catch(A){t=!0,e=A}return i=!0,e}return wrapper.reset=()=>{i=!1,t=!1},wrapper},onceSuccess=A=>{var e,t=!1
|
|
530
|
-
return function(){return t||(e instanceof Promise?e=e.catch((()=>A.apply(this,arguments))).then((A=>(t=!0,A))):(e=A.apply(this,arguments))instanceof Promise?e=e.then((A=>(t=!0,A))):t=!0),e}},
|
|
531
|
-
return function(){i&&!t&&(i=!1,A.apply(this,arguments)),clearTimeout(t),t=setTimeout((()=>{t=null,A.apply(this,arguments)}),e)}},
|
|
531
|
+
return function(){return t||(e instanceof Promise?e=e.catch((()=>A.apply(this,arguments))).then((A=>(t=!0,A))):(e=A.apply(this,arguments))instanceof Promise?e=e.then((A=>(t=!0,A))):t=!0),e}},Dt=function debounce(A,e){var t,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2]
|
|
532
|
+
return function(){i&&!t&&(i=!1,A.apply(this,arguments)),clearTimeout(t),t=setTimeout((()=>{t=null,A.apply(this,arguments)}),e)}},ft=function(){var A=function standalone_utils_asyncToGenerator(A){return function(){var e=this,t=arguments
|
|
532
533
|
return new Promise((function(i,g){var r=A.apply(e,t)
|
|
533
534
|
function _next(A){standalone_utils_asyncGeneratorStep(r,i,g,_next,_throw,"next",A)}function _throw(A){standalone_utils_asyncGeneratorStep(r,i,g,_next,_throw,"throw",A)}_next(void 0)}))}}((function*(A){return new Promise((e=>setTimeout(e,A)))}))
|
|
534
535
|
return function delay(e){return A.apply(this,arguments)}}(),clamp=(A,e,t)=>A<=e?e:A>=t?t:A
|
|
535
|
-
var
|
|
536
|
+
var mt,pt="error",yt="model",Rt=(mt="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0,function(A={}){var e,t,i=A
|
|
536
537
|
i.ready=new Promise(((A,i)=>{e=A,t=i}))
|
|
537
|
-
var g,r,I,o=Object.assign({},i),quit_=(A,e)=>{throw e},a="object"==typeof window,s="function"==typeof importScripts,B=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||s)&&(s?B=self.location.href:"undefined"!=typeof document&&document.currentScript&&(B=document.currentScript.src),
|
|
538
|
+
var g,r,I,o=Object.assign({},i),quit_=(A,e)=>{throw e},a="object"==typeof window,s="function"==typeof importScripts,B=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||s)&&(s?B=self.location.href:"undefined"!=typeof document&&document.currentScript&&(B=document.currentScript.src),mt&&(B=mt),B=0!==B.indexOf("blob:")?B.substr(0,B.replace(/[?#].*/,"").lastIndexOf("/")+1):"",g=A=>{var e=new XMLHttpRequest
|
|
538
539
|
return e.open("GET",A,!1),e.send(null),e.responseText},s&&(I=A=>{var e=new XMLHttpRequest
|
|
539
540
|
return e.open("GET",A,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),r=(A,e,t)=>{var i=new XMLHttpRequest
|
|
540
541
|
i.open("GET",A,!0),i.responseType="arraybuffer",i.onload=()=>{200==i.status||0==i.status&&i.response?e(i.response):t()},i.onerror=t,i.send(null)})
|
|
541
542
|
var n,E,C=i.print||console.log.bind(console),c=i.printErr||console.error.bind(console)
|
|
542
543
|
function tryParseAsDataURI(A){if(isDataURI(A))return function intArrayFromBase64(A){for(var e=atob(A),t=new Uint8Array(e.length),i=0;i<e.length;++i)t[i]=e.charCodeAt(i)
|
|
543
|
-
return t}(A.slice(
|
|
544
|
+
return t}(A.slice(v.length))}Object.assign(i,o),o=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&(quit_=i.quit),i.wasmBinary&&(n=i.wasmBinary),"object"!=typeof WebAssembly&&abort("no native wasm support detected")
|
|
544
545
|
var h,d,l,u,w,D,f,m,p,y=!1
|
|
545
546
|
function updateMemoryViews(){var A=E.buffer
|
|
546
547
|
i.HEAP8=d=new Int8Array(A),i.HEAP16=u=new Int16Array(A),i.HEAPU8=l=new Uint8Array(A),i.HEAPU16=w=new Uint16Array(A),i.HEAP32=D=new Int32Array(A),i.HEAPU32=f=new Uint32Array(A),i.HEAPF32=m=new Float32Array(A),i.HEAPF64=p=new Float64Array(A)}var R=[],N=[],S=[],G=0,k=null,b=null
|
|
547
548
|
function addRunDependency(A){G++,i.monitorRunDependencies?.(G)}function removeRunDependency(A){if(G--,i.monitorRunDependencies?.(G),0==G&&(null!==k&&(clearInterval(k),k=null),b)){var e=b
|
|
548
549
|
b=null,e()}}function abort(A){i.onAbort?.(A),c(A="Aborted("+A+")"),y=!0,h=1,A+=". Build with -sASSERTIONS for more info."
|
|
549
550
|
var e=new WebAssembly.RuntimeError(A)
|
|
550
|
-
throw t(e),e}var _,U,L,
|
|
551
|
+
throw t(e),e}var _,U,L,v="data:application/octet-stream;base64,",isDataURI=A=>A.startsWith(v)
|
|
551
552
|
function getBinaryPromise(A){return Promise.resolve().then((()=>function getBinarySync(A){if(A==_&&n)return new Uint8Array(n)
|
|
552
553
|
var e=tryParseAsDataURI(A)
|
|
553
554
|
if(e)return e
|
|
554
555
|
if(I)return I(A)
|
|
555
556
|
throw"both async and sync fetching of the wasm failed"}(A)))}function instantiateAsync(A,e,t,i){return function instantiateArrayBuffer(A,e,t){return getBinaryPromise(A).then((A=>WebAssembly.instantiate(A,e))).then((A=>A)).then(t,(A=>{c(`failed to asynchronously prepare wasm: ${A}`),abort(A)}))}(e,t,i)}function ExitStatus(A){this.name="ExitStatus",this.message=`Program terminated with exit(${A})`,this.status=A}isDataURI(_="data:application/octet-stream;base64,AGFzbQEAAAABvgM7YAF/AGABfwF/YAJ/fwBgAn9/AX9gA39/fwBgA39/fwF/YAR/f39/AGAEf39/fwF/YAAAYAABf2AFf39/f38AYAZ/f39/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AFf35+fn4AYAd/f39/f39/AGAEf399fQBgB39/f39/f38Bf2AIf39/f39/f38Bf2AEf35+fwBgAn9+AGACf3wAYAN/fn8BfmABfwF+YAp/f39/f39/f39/AX9gAn9+AX9gBn98f39/fwF/YAl/f39/f39/f38Bf2AJf39/f39/f39/AGANf39/f39/f39/f39/fwBgBH9/f38BfGADf39/AXxgAn9/AX1gAAF8YAV/f39/fwF8YAN/f3wAYAJ/fAF/YAt/f39/f39/f39/fwF/YAh/f39/f39+fwBgBH5+fn4Bf2AIf39/f39/f38AYAJ+fwF/YAV/f39/fgBgBX9/fX1/AGABfwF8YAR/f35+AGAAAX5gAn5+AXxgA35+fgF/YAN/f34AYAJ8fwF8YAJ/fwF+YAN/f34Bf2AEf399fQF/YAF8AX9gBH9/f30Bf2AEf39/fQBgA39/fQBgAX8BfQK8A0cBYQFhAAkBYQFiAAUBYQFjAAYBYQFkAAABYQFlAAQBYQFmAAEBYQFnAAcBYQFoAAMBYQFpABwBYQFqAAIBYQFrAAQBYQFsAAoBYQFtAAQBYQFuAAABYQFvAAoBYQFwAAEBYQFxAAEBYQFyAAMBYQFzAB0BYQF0AB4BYQF1AAUBYQF2AB8BYQF3AAsBYQF4AAQBYQF5AAwBYQF6AAgBYQFBAAEBYQFCAAcBYQFDAAUBYQFEAAIBYQFFAAQBYQFGAAABYQFHACABYQFIAA0BYQFJAAABYQFKAAQBYQFLAAEBYQFMAAwBYQFNAA8BYQFOAAYBYQFPAAMBYQFQAAEBYQFRAAQBYQFSAAcBYQFTAAUBYQFUAAcBYQFVACEBYQFWAAIBYQFXAAYBYQFYAAIBYQFZAAABYQFaAAABYQFfAAkBYQEkAAcBYQJhYQABAWECYmEACAFhAmNhACIBYQJkYQAAAWECZWEAAQFhAmZhACMBYQJnYQABAWECaGEAAwFhAmlhABEBYQJqYQAFAWECa2EACAFhAmxhACQBYQJtYQASAWECbmEAGAFhAm9hACUBYQJwYQALAWEC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AkAgACkDcCIEUA0AIAQgBX0iBCACIAFrrFkNACABIASnaiECCyAAIAI2AmggACAFIAAoAiwiACABa6x8NwN4IAAgAU8EQCABQQFrIAM6AAALIAMLKgEBfyAABEAgACgCACIBBEAgASAALwEGQQN0EFELIABCgICAgBA3AgALCzYBAX9BASAAIABBAU0bIQACQANAIAAQeyIBDQFB5MQCKAIAIgEEQCABEQgADAELCxAZAAsgAQsMACAAIAAoAgQQjwILwwoCBX8RfiMAQeAAayIFJAAgBEL///////8/gyEMIAIgBIVCgICAgICAgICAf4MhCiACQv///////z+DIg1CIIghDiAEQjCIp0H//wFxIQcCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAHQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIgtCgICAgICAwP//AFQgC0KAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEKDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQogAyEBDAILIAEgC0KAgICAgIDA//8AhYRQBEAgAiADhFAEQEKAgICAgIDg//8AIQpCACEBDAMLIApCgICAgICAwP//AIQhCkIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQCABIAuEIRlCACEBIBlQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rEGlBECAGayEGIAUpA1giDUIgiCEOIAUpA1AhAQsgAkL///////8/Vg0AIAVBQGsgAyAMIAMgDCAMUCIIG3kgCEEGdK18pyIIQQ9rEGkgBiAIa0EQaiEGIAUpA0ghDCAFKQNAIQMLIANCD4YiC0KAgP7/D4MiAiABQiCIIgR+IhAgC0IgiCITIAFC/////w+DIgF+fCIPQiCGIhEgASACfnwiCyARVK0gAiANQv////8PgyINfiIVIAQgE358IhEgDEIPhiISIANCMYiEQv////8PgyIDIAF+fCIUIA8gEFStQiCG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RQRAIARCgICAgICAIIQhBAwCCyABIApCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIFGyEEQgAgASAFGyEDDAILIAMgCUKAgICAgIDA//8AhYRQDQEgASAKhFAEQCADIAmEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAmEUEUNACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyILQjCIp0H//wFxIQcgDEIwiKdB//8BcSIFRQRAIAZB4ABqIAogCSAKIAkgCVAiBRt5IAVBBnStfKciBUEPaxBpIAYpA2ghCSAGKQNgIQpBECAFayEFCyABIAMgCBshAyALQv///////z+DIQEgBwR+IAEFIAZB0ABqIAMgASADIAEgAVAiBxt5IAdBBnStfKciB0EPaxBpQRAgB2shByAGKQNQIQMgBikDWAtCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCENIAIgBIUhBAJ+IANCA4YiAiAFIAdGDQAaIAUgB2siB0H/AEsEQEIAIQFCAQwBCyAGQUBrIAIgAUGAASAHaxBpIAZBMGogAiABIAcQpgEgBikDOCEBIAYpAzAgBikDQCAGKQNIhEIAUq2ECyEJIA1CgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5IAdBBnStfKdBDGsiBxBpIAUgB2shBSAGKQMoIQQgBikDICECDAELIAkgCnwiAiAJVK0gASALfHwiBEKAgICAgICACINQDQAgCUIBgyAEQj+GIAJCAYiEhCECIAVBAWohBSAEQgGIIQQLIAxCgICAgICAgICAf4MhASAFQf//AU4EQCABQoCAgICAgMD//wCEIQRCACEDDAELQQAhBwJAIAVBAEoEQCAFIQcMAQsgBkEQaiACIAQgBUH/AGoQaSAGIAIgBEEBIAVrEKYBIAYpAwAgBikDECAGKQMYhEIAUq2EIQIgBikDCCEECyACp0EHcSIFQQRLrSAEQj2GIAJCA4iEIgJ8IgMgAlStIARCA4hC////////P4MgB61CMIaEIAGEfCEEAkAgBUEERgRAIAQgA0IBgyIBIAN8IgMgAVStfCEEDAELIAVFDQELCyAAIAM3AwAgACAENwMIIAZB8ABqJAALQQECfyMAQRBrIgIkACACQQE7AQ4gAkEBOwEMIAJCATcDACACIAI2AgggACABIAJBCGpBfxBjIQMgAkEQaiQAIAMLIQEBfyAAQQNrIgBBBk0EfyAAQQJ0QcjSAWooAgAFQQALC5oCAQR/AkAgACgCACIERQ0AAkACQCAAKAIEIgUEQCABQQBIDQIgACgCCCIDIAVJDQEMAgsgAUEASA0BIAAoAgghAwsgBSABIANqQQFqIgFPBEAgAyAEag8LIAAoAhANAQJAIAFBgICAgARPBEBB/////wchAiABQQBIDQMMAQsgAUEBdCECCwJAIAAoAiAiAQRAIAQgAiABEQMAIgENASAAKAIAIAAoAhwRAAAgAEIANwIADAMLIAIgACgCGBEBACIBRQRAIAAoAgAgACgCHBEAACAAQgA3AgAMAwsgASAAKAIAIAAoAghBAWoQTRogACgCACAAKAIcEQAACyAAIAE2AgAgACACNgIEIAEgACgCCGohAgsgAg8LQQALZgEEfwJAIAEQdyICIAAoAgQgAC0ACyIDIAPAQQBIG0YEf0HcxAJBADYCAEGoASAAQQBBfyABIAIQISEFQdzEAigCACEEQdzEAkEANgIAIARBAUYNASAFRQVBAAsPC0EAEAUaEGQACwwAIAAgAS0AADoAAAsVACAAEJMBBEAgACgCBA8LIAAQkAILfgICfwF+IwBBEGsiAyQAIAACfiABRQRAQgAMAQsgAyABIAFBH3UiAnMgAmsiAq1CACACZyICQdEAahBpIAMpAwhCgICAgICAwACFQZ6AASACa61CMIZ8IAFBgICAgHhxrUIghoQhBCADKQMACzcDACAAIAQ3AwggA0EQaiQAC3oBA38CQAJAIAAiAUEDcUUNACABLQAARQRAQQAPCwNAIAFBAWoiAUEDcUUNASABLQAADQALDAELA0AgASICQQRqIQEgAigCACIDQX9zIANBgYKECGtxQYCBgoR4cUUNAAsDQCACIgFBAWohAiABLQAADQALCyABIABrC4EDAQR/IwBB8ABrIgIkACAAKAIAIgNBBGsoAgAhBCAD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IAAoAgAiAwRAIANBABBRCyAAIAI2AgAgAEEBOwEGQQghAwsgAkEAIAMQShogACgCACABIAFCP4ciBIUgBH03AwAgACABQj6Hp0EBcjsBBEEAC14BA39BcCECAkAgAUGQzgBLDQAgASAALwEGIgNLBEAgAUEIEFsiBEUNASAAKAIAIgIEQCAEIAIgA0EDdCIDEE0aIAIgAxBRCyAAIAQ2AgAgACABOwEGC0EAIQILIAILagEDfwJAIABFDQAgACgCACIDRQ0AAkAgACgCCCIBIAAoAgQiAk8NAAJAA0AgASACRg0BIAEgA2otAABBIE0EQCAAIAFBAWoiATYCCAwBCwsgASACRw0BCyAAIAJBAWs2AggLIAAhAQsgAQsRACAAIAFBBGogASgCABDcAQtXAQF/IAAoAgQiAARAIAAgACgCBCIBQQFrNgIEIAFFBEAgACAAKAIAKAIIEQAAAkAgAEEIaiIBKAIABEAgARD/AkF/Rw0BCyAAIAAoAgAoAhARAAALCwsLjwEBBH8jAEEQayIDJAAgASgCACEEIAMgASgCBCABLQALIgIgAsBBAEgiAhs2AgwgAyAEIAEgAhs2AgggACgCACAAIAAtAAsiBMBBAEgiAhsgAygCCCADKAIMIgEgACgCBCAEIAIbIgAgACABSyIEGxCXASICQX8gBCAAIAFJGyACGyEFIANBEGokACAFQR92C6UCAQJ/IAMgATYCCCADQgA3AgAgAiADNgIAIAAoAgAoAgAiAQRAIAAgATYCACACKAIAIQMLIAMgAyAAKAIEIgVGOgAMA0ACQCADIAVGDQAgAygCCCICLQAMDQACQCACIAIoAggiASgCACIERgRAAkAgASgCBCIERQ0AIAQtAAwNAAwCCyADIAIoAgBHBEAgAhCABCACKAIIIgIoAgghAQsgAkEBOgAMIAFBADoADCABEP8DDAILAkAgBEUNACAELQAMDQAMAQsgAyACKAIARgRAIAIQ/wMgAigCCCICKAIIIQELIAJBAToADCABQQA6AAwgARCABAwBCyACQQE6AAwgASABIAVGOgAMIARBAToADCABIQMMAQsLIAAgACgCCEEBajYCCAsbAQF/QQohASAAEJMBBH8gABDfAUEBawVBCgsLCgAgAC0AC0EHdgsMACAAIAAoAgQQkgILCgAgAEEwa0EKSQsQACAAQSBGIABBCWtBBUlyC0MBA38CQCACRQ0AA0AgAC0AACIEIAEtAAAiBUYEQCABQQFqIQEgAEEBaiEAIAJBAWsiAg0BDAILCyAEIAVrIQMLIAMLNAEBfgNAIAFBAEwEQEEADwsgACABQQFrIgFBA3RqKQMAIgJQDQALIAFBBnQgAnmna0FAawuYBQEEf0GA3n4hBAJAIABFDQAgACgCACIDRQ0AAkACQAJAIAMoAgBBA2sOBwADAQMDAwIDCyAAKAIEIQMCQCACRQ0AIAMgAygCACIAIAJqIgQ2AgAgACAESwRAIAMgAygCBEEBajYCBAtBACEEAkAgAEE/cSIARQ0AQcAAIABrIgYgAksEQCAAIQQMAQsgACADQRhqIgVqIAEgBhBNGiADIAUQqwEgAiAGayECIAEgBmohAQsgAkHAAE8EQANAIAMgARCrASABQUBrIQEgAkFAaiICQT9LDQALCyACRQ0AIAMgBGpBGGogASACEE0aC0EADwsgACgCBCEDAkAgAkUNACADIAMoAgAiACACaiIENgIAIAAgBEsEQCADIAMoAgRBAWo2AgQLQQAhBAJAIABBP3EiAEUNAEHAACAAayIGIAJLBEAgACEEDAELIAAgA0EcaiIFaiABIAYQTRogAyAFEMUBIAIgBmshAiABIAZqIQELIAJBwABPBEADQCADIAEQxQEgAUFAayEBIAJBQGoiAkE/Sw0ACwsgAkUNACADIARqQRxqIAEgAhBNGgtBAA8LAn8gACgCBCEFQQAgAkUNABogBSAFKAJAIgAgAmoiBDYCQCAAIARLBEAgBSAFKAJEQQFqNgJEC0EAIQQCQCAAQT9xIgBFDQBBwAAgAGsiAyACSwRAIAAhBAwBCyAAIAVqIAEgAxBNGiAFIAUQxAEgAiADayECIAEgA2ohAQsgAkE/cSEGAkADQCACIQMgASEAIAJBwABJDQEDQCAFIAAQxAEgAEFAayEAIANBQGoiA0E/Sw0ACyABIAJBQHEiAGohASAGIQIgAA0AC0F/DAELIAIEQCAEIAVqIAEgAhBNGgtBAAshBAsgBAslACAAQaDHADYCACAAQRxqELUDIABBEGoQRxogAEEEahBHGiAAC2UBAn8gAEEEaiEEAkAgACgCBCIDRQRAIAQhAAwBCwNAIAIgAyIAQRBqIgMQkAEEQCAAIQQgACgCACIDDQEMAgsgAyACEJABRQ0BIABBBGohBCAAKAIEIgMNAAsLIAEgADYCACAECxsBAX8gACgCACEBIABBADYCACABBEAgARBJCwsCAAsQACAALQAERQRAIAAQ0wMLC4YBAQR/IwBBEGsiBCQAIAQgAxBVIgU2AgAgBCAEQQ9qNgIEIARBATYCCCAFIAI2AgBB3MQCQQA2AgAgASAFQQRqIABBBGoQARpB3MQCKAIAIQZB3MQCQQA2AgAgBkEBRwRAIARBADYCACAEEJwBIARBEGokACAFDwsQACEHIAQQnAEgBxADAAsTACABQQF0QbDnAWpBAiAAEPwCC2IBA38jAEEQayIBJAACQCAALQAMQf8BRwRAQdzEAkEANgIAQeIAIAFBD2ogABAEQdzEAigCACEDQdzEAkEANgIAIANBAUYNAQsgAEH/AToADCABQRBqJAAPC0EAEAUaEGQACy4AIAAgACgCCEGAgICAeHEgAUH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AggLCQAgACABNgIACxYAIAIQVSEBIAAgAjYCBCAAIAE2AgALJAAgAEELTwR/IABBEGpBcHEiACAAQQFrIgAgAEELRhsFQQoLC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQEF/IQQgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LQX8hBCAAIAJWIAEgA1UgASADURsNACAAIAKFIAEgA4WEQgBSIQQLIAQLIAECfyAAEHdBAWoiARB7IgJFBEBBAA8LIAIgACABEE0LIAAgACABIAIQpgMiAQR/IAEFQQBBgIZ/IAJCABBQGwsLogEBBH8CQAJAIAAoAgAgAC8BBhCYASABaiICIAAvAQYiA0EGdE0EQCADIQIMAQtBcCEEIAJBBnYgAkE/cUEAR2oiAkGQzgBLDQEg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5////wNJBH8gCCABQQF0NgIMIAggASACajYCBCAKIAhBDGoQjgIoAgAQpQFBAWoFQe////8HCxCkASAIKAIEIQIgCCgCCBogBARAIAIgCSAEEHkLIAYEQCACIARqIAcgBhB5CyADIAQgBWoiCmshByADIApHBEAgAiAEaiAGaiAEIAlqIAVqIAcQeQsgAUEKRwRAIAkQSQsgACACEKMBIAAgCCgCCBCiASAAIAQgBmogB2oiABCCASAIQQA6AAwgACACaiAIQQxqEHQgCEEQaiQADwsQegALZgIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrEGkgAikDCEKAgICAgIDAAIVBnoABIAFrrUIwhnwhAyACKQMACzcDACAAIAM3AwggAkEQaiQAC1IBAn9BtPMBKAIAIgEgAEEHakF4cSICaiEAAkAgAkEAIAAgAU0bRQRAIAA/AEEQdE0NASAAECkNAQtBxL4CQTA2AgBBfw8LQbTzASAANgIAIAELgwECBX8BfgJAIABCgICAgBBUBEAgACEHDAELA0AgAUEBayIBIAAgAEIKgCIHQgp+fadBMHI6AAAgAEL/////nwFWIQUgByEAIAUNAAsLIAenIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEGIAMhAiAGDQALCyABC/EBAQN/An8CQCABQf8BcSICIgMEQCAAQQNxBEADQCAALQAAIgRFIAIgBEZyDQMgAEEBaiIAQQNxDQALCwJAIAAoAgAiAkF/cyACQYGChAhrcUGAgYKEeHENACADQYGChAhsIQMDQCACIANzIgJBf3MgAkGBgoQIa3FBgIGChHhxDQEgACgCBCECIABBBGohACACQYGChAhrIAJBf3NxQYCBgoR4cUUNAAsLIAFB/wFxIQMDQCAAIgItAAAiBARAIABBAWohACADIARHDQELCyACDAILIAAQdyAAagwBCyAACyIAQQAgAC0AACABQf8BcUYbC9oDAQh/IwBBQGoiBSQAIAVBBGoQywECQCAEEHEiBkUEQEGA/34hBAwBCyAFQQRqIgQQywECQCAEIAYQ7AEiBA0AIAYQrAEhByAFQgA3AyggBUIANwMgIAVCADcDGCAFQgA3AxAgBUEANgI8IAEEQANAIAVBBGoiBhDr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CHEgAiADcXJqIARBBXdqQaSGkYcHayIDQQV3akGkhpGHB2siB0EedyIIaiA9IARBHnciBGogA0EedyIJIAIgOGogAyAEciAGcSADIARxcmogB0EFd2pBpIaRhwdrIgIgCHJxIAIgCHFyaiAGIDNqIAcgCXIgBHEgByAJcXJqIAJBBXdqQaSGkYcHayIDQQV3akGkhpGHB2siBCADQR53IgZyIAJBHnciAnEgBCAGcXJqIAkgOWogAiADciAIcSACIANxcmogBEEFd2pBpIaRhwdrIgNBBXdqQaSGkYcHayIHQR53IglqIAYgOmogBEEedyIEIAcgA0EedyIIcnEgByAIcXJqIAIgQGogAyAEciAGcSADIARxcmogB0EFd2pBpIaRhwdrIgJBBXdqQaSGkYcHayIDQR53IgYgAkEedyIHcyAEID9qIAggCXMgAnNqIANBBXdqQar89KwDayICc2ogCCBBaiAHIAlzIANzaiACQQV3akGq/PSsA2siA0EFd2pBqvz0rANrIgRBHnciCGogBiBGaiADQR53IgkgAkEedyICcyAEc2ogBSAHaiACIAZzIANzaiAEQQV3akGq/PSsA2siA0EFd2pBqvz0rANrIgRBHnciBiADQR53IgdzIAIgRGogCCAJcyADc2ogBEEFd2pBqvz0rANrIgJzaiAJIENqIAcgCHMgBHNqIAJBBXdqQar89KwDayIDQQV3akGq/PSsA2siBCACQR53IgJzIANBHnciCHNqIAZqIAcgRWogAiAGcyADc2ogBEEFd2pBqvz0rANrIgNBBXdqQar89KwDayIGIARBHnciBHMgA0EedyIHc2ogCGogAyAIcyAEcyBNaiACaiAGQQV3akGq/PSsA2siAkEFd2pBqvz0rANrIgMgBkEedyIGcyACQR53IghzaiAHaiACIAdzIAZzIE5qIARqIANBBXdqQar89KwDayICQQV3akGq/PSsA2siBCADQR53IgNzIAJBHnciB3MgUGogCGogAiAIcyADcyBPaiAGaiAEQQV3akGq/PSsA2siBkEFd2pBqvz0rANrIghBHnciAjYCXCAKIAooAiQgCigCDHMgUHMgAXNBAXciCTYCRCAKIAooAiggCigCEHMgUXMgBXMiATYCCCAKIAFBAXciEjYCSCAKIARBHnciASAGIAdzcyBRaiADaiAIQQV3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ASAAQQA2AgAgAQRAIAAtAAgEQCABQRBqEK8DCyABBEAgARBJCwsLBwAgABDJAgtAAQF/IABBBGohAAN/IAAoAgAiAEUEQEEADwsgASAAQRBqIgIQkAENACACIAEQkAEEfyAAQQRqIQAMAQVBAQsLCxYAIAAgAUHMAEHQwgBBwMIAQQQQ2QELJwAgAQRAIAAgASgCABDNAiAAIAEoAgQQzQIgAUEQahBHGiABEEkLCwwAIAAgACgCBBDNAgsJACAAIAEQWRoLFQAgACABQccAQeA9QfjBAEECENkBC3cBA38jAEEQayIDJAAgACACLAAAIAEgAGsQgwQiACABIAAbIQAgA0EQaiQAAkAgACIDIAFGDQADQCACLQAAIQQDQCABIABBAWoiAEYEQCADIQEMAwsgAC0AACIFIARGDQALIAMgBToAACADQQFqIQMMAAsACyABC2oBA38CQCABKAIAKAIAIgFFBEBBCBBMIQBB3MQCQQA2AgBBiQEgAEGTEhABIQFB3MQCKAIAIQNB3MQCQQA2AgAgA0EBRw0BEAAhBCAAEE4gBBADAAsgACABEIkEDwsgAUH88gFB7gAQDAALJwAgACgCACgCACIARQRAQQAPCyAABH8gAC0ADEHAAEYFQQALQQBHCyQBAX9BCBBVIQIgACgCACEAIAIgASgCADYCBCACIAA2AgAgAguaDQEIf0HE8wFBADYCAEHA8wFBATYCABDsA0HE8wFBuL4CKAIANgIAQbi+AkHA8wE2AgAjAEFAaiIAJABByPMBQd0WEEsaQdTzAUHYGRBLGiAAQb/DACkAADcALyAAQbjDACkAADcDKCAAQbDDACkAADcDICAAQR82AjwgAEGowwApAAA3AxggACAAQRhqIgE2AjggACAAKQI4NwMQQeDzASAAQRBqELwBIABB3MMAKQAANwAtIABB18MAKQAANwMoIABBz8MAKQAANwMgIABBHTYCPCAAQcfDACkAADcDGCAAIAE2AjggACAAKQI4NwMIQezzASAAQQhqELwBIABBQGskACMAQTBrIgAkAEH48wFB/hUQSxpBhPQBQakUEEsaIABBDGoiAUGnLkH48wEQjQJB3MQCQQA2AgBBwgEgAEEYaiICIAFBgi4QAkHcxAIoAgAhAUHcxAJBADYCAAJAAkACQAJAAkAgAUEBRwRAQdzEAkEANgIA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9wILewEDfyMAQRBrIgUkAAJAIAIgABCSASIEIAAQdSIDa00EQCACRQ0BIAAQZiIEIANqIAEgAhB5IAAgAiADaiIBEN4BIAVBADoADyABIARqIAVBD2oQdAwBCyAAIAQgAiAEayADaiADIANBACACIAEQsQELIAVBEGokACAAC68BAQN/IwBBEGsiBSQAIAAQdSIEQQBPBEACQCACIAAQkgEiAyAEa00EQCACRQ0BIAAQZiIDIAQEfyACIANqIAMgBBCKASABIAJBACADIARqIAFLG0EAIAEgA08bagUgAQsgAhCKASAAIAIgBGoiARDeASAFQQA6AA8gASADaiAFQQ9qEHQMAQsgACADIAIgBGogA2sgBEEAQQAgAiABELEBCyAFQRBqJAAgAA8LEHoAC1sBAX8jAEEQayICJAAgAiABOgAPAkAgABCTAQRAIAAoAgAhASAAQQEQggEMAQsgACIBQQEQiQELIAEgAkEPahB0IAJBADoADiABQQFqIAJBDmoQdCACQRBqJAALPQEBfyMAQRBrIgIkACACQQA6AA8DQCABBEAgACACLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIAJBEGokAAvOAQEDfyMAQRBrIgUkAAJAIAJB7////wcgAWtNBEAgABBmIQYgBUEEaiIHIAAgAUHn////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAcgBUEMahCOAigCABClAUEBagVB7////wcLEKQBIAUoAgQhAiAFKAIIGiAEBEAgAiAGIAQQeQsgAyAERwRAIAIgBGogBCAGaiADIARrEHkLIAFBCkcEQCAGEEkLIAAgAhCjASAAIAUoAggQogEgBUEQaiQADAELEHoACyAAIAMQggEL3wEBBX8jAEEQayIFJAAjAEEgayIDJAAjAEEQayIEJAAgBCAANgIMIAQgACABajYCCCADQRhqIARBDGogBEEIahDxAiAEQRBqJAAgAygCGCEEIAMoAhwhBiMAQRBrIgEkACABIAY2AgwgAiAEIAYgBGsiBBD9AiABIAIgBGo2AgggA0EQaiABQQxqIAFBCGoQ8gIgAUEQaiQAIAMgACADKAIQEPMCNgIMIAMgAiADKAIUEPMCNgIIIAVBCGogA0EMaiADQQhqEPICIANBIGokACAFKAIMIQcgBUEQaiQAIAcLEQAgAgRAIAAgASACEMMBGgsLDwAgAEEMahBHGiAAEEcaCxMAIAAgACgCAEEBayIANgIAIAAL0gMCAn4CfyMAQSBrIgQkAAJAIAFC////////////AIMiA0KAgICAgIDAgDx9IANCgICAgICAwP/DAH1UBEAgAUIEhiAAQjyIhCEDIABC//////////8PgyIAQoGAgICAgICACFoEQCADQoGAgICAgICAwAB8IQIMAgsgA0KAgICAgICAgEB9IQIgAEKAgICAgICAgAhSDQEgAiADQgGDfCECDAELIABQIANCgICAgICAwP//AFQgA0KAgICAgIDA//8AURtFBEAgAUIEhiAAQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgA0L///////+//8MAVg0AQgAhAiADQjCIpyIFQZH3AEkNACAEQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiAiAFQYH3AGsQaSAEIAAgAkGB+AAgBWsQpgEgBCkDCEIEhiAEKQMAIgBCPIiEIQIgBCkDECAEKQMYhEIAUq0gAEL//////////w+DhCIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECCyAEQSBqJAAgAiABQoCAgICAgICAgH+DhL8Lqg8CBX8PfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhCyACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEMIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDAwDCyAMQoCAgICAgMD//wCEIQxCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgDYRQBEBCgICAgICA4P//ACAMIAIgA4RQGyEMQgAhAQwCCyACIAOEUARAIAxCgICAgICAwP//AIQhDEIAIQEMAgsgDUL///////8/WARAIAVBwAJqIAEgCyABIAsgC1AiBht5IAZBBnStfKciBkEPaxBpQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQaSAGIAdqQRBrIQYgBSkDuAIhCiAFKQOwAiEDCyAFQaACaiAKQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABBoIAVBkAJqQgAgBSkDqAJ9QgAgBEIAEGggBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQaCAFQfABaiAEQgBCACAFKQOIAn1CABBoIAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEGggBUHQAWogBEIAQgAgBSkD6AF9QgAQaCAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABBoIAVBsAFqIARCAEIAIAUpA8gBfUIAEGggBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQaCAFQZABaiADQg+GQgAgAkIAEGggBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDSAFKQOYAXwiBCANVK18IARCAVatfH1CABBoIAVBgAFqQgEgBH1CACACQgAQaCAGIAkgCGtqIQYCfyAFKQNwIhNCAYYiDiAFKQOIASIPQgGGIAUpA4ABQj+IhHwiEELn7AB9IhRCIIgiAiALQoCAgICAgMAAhCIVQgGGIhZCIIgiBH4iESABQgGGIg1CIIgiCiAQIBRWrSAOIBBWrSAFKQN4QgGGIBNCP4iEIA9CP4h8fHxCAX0iE0IgiCIQfnwiDiARVK0gDiAOIBNC/////w+DIhMgAUI/iCIXIAtCAYaEQv////8PgyILfnwiDlatfCAEIBB+fCAEIBN+IhEgCyAQfnwiDyARVK1CIIYgD0IgiIR8IA4gDiAPQiCGfCIOVq18IA4gDiAUQv////8PgyIUIAt+IhEgAiAKfnwiDyARVK0gDyAPIBMgDUL+////D4MiEX58Ig9WrXx8Ig5WrXwgDiAEIBR+IhggECARfnwiBCACIAt+fCILIAogE358IhBCIIggCyAQVq0gBCAYVK0gBCALVq18fEIghoR8IgQgDlStfCAEIA8gAiARfiICIAogFH58IgpCIIggAiAKVq1CIIaEfCICIA9UrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIBYgF4QhFSAFQdAAaiACIAQgAyASEGggAUIxhiAFKQNYfSAFKQNQIgFCAFKtfSEKQgAgAX0hCyAGQf7/AGoMAQsgBUHgAGogBEI/hiACQgGIhCICIARCAYgiBCADIBIQaCABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEKYBIAVBMGogDSAVIAZB8ABqEGkgBUEgaiADIBIgBSkDQCICIAUpA0giChBoIAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgQgAUIBhiINVK19IQEgBCANfQshBCAFQRBqIAMgEkIDQgAQaCAFIAMgEkIFQgAQaCAKIAIgAiADIAQgAkIBgyIEfCIDVCABIAMgBFStfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAvAAQIBfwJ+QX8hAwJAIABCAFIgAUL///////////8AgyIEQoCAgICAgMD//wBWIARCgICAgICAwP//AFEbDQAgAkL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFJxDQAgACAEIAWEhFAEQEEADwsgASACg0IAWQRAIAEgAlIgASACU3ENASAAIAEgAoWEQgBSDwsgAEIAUiABIAJVIAEgAlEbDQAgACABIAKFhEIAUiEDCyADCw8AIABBDGoQlAEgABBHGgu2CwEGfyAAIAFqIQUC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ASkDcEIAUw0DIAEgASgCBEEBazYCBAwDCwNAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARBTCyICQTBrQQpJIAJBwQBrQRpJciACQd8ARnJFIAJB4QBrQRpPcUUEQCAGQQFqIQYMAQsLQoCAgICAgOD//wAhFSACQSlGDQIgASkDcCIYQgBZBEAgASABKAIEQQFrNgIECwJAIAMEQCAGDQEMBAsMAQsDQCAYQgBZBEAgASABKAIEQQFrNgIECyAGQQFrIgYNAAsMAgtBxL4CQRw2AgAgAUIAEIMBC0IAIRULIAAgFjcDACAAIBU3AwggDEEwaiQAC8oGAgV/BH4jAEGAAWsiBSQAAkACQAJAIAMgBEIAQgAQpwFFDQACfyAEQv///////z+DIQsCfyAEQjCIp0H//wFxIgZB//8BRwRAQQQgBg0BGkECQQMgAyALhFAbDAILIAMgC4RQCwshCSACQjCIpyIIQf//AXEiB0H//wFGDQAgCQ0BCyAFQRBqIAEgAiADIAQQVyAFIAUpAxAiAiAFKQMYIgEgAiABEIEDIAUpAwghAiAFKQMAIQQMAQsgASACQv///////////wCDIgsgAyAEQv///////////wCDIgoQpwFBAEwEQCABIAsgAyAKEKcBBEAgASEEDAILIAVB8ABqIAEgAkIAQgAQVyAFKQN4IQIgBSkDcCEEDAELIARCMIinQf//AXEhBiAHBH4gAQUgBUHgAGogASALQgBCgICAgICAwLvAABBXIAUpA2giC0IwiKdB+ABrIQcgBSkDYAshBCAGRQRAIAVB0ABqIAMgCkIAQoCAgICAgMC7wAAQVyAFKQNYIgpCMIinQfgAayEGIAUpA1AhAwsgCkL///////8/g0KAgICAgIDAAIQhDCALQv///////z+DQoCAgICAgMAAhCELIAYgB0gEQANAAn4gCyAMfSADIARWrX0iCkIAWQRAIAogBCADfSIEhFAEQCAFQSBqIAEgAkIAQgAQVyAFKQMoIQIgBSkDICEEDAULIApCAYYgBEI/iIQMAQsgC0IBhiAEQj+IhAshCyAEQgGGIQQgB0EBayIHIAZKDQALIAYhBwsCQCALIAx9IAMgBFatfSIKQgBTBEAgCyEKDAELIAogBCADfSIEhEIAUg0AIAVBMGogASACQgBCABBXIAUpAzghAiAFKQMwIQQMAQsgCkL///////8/WARAA0AgBEI/iCENIAdBAWshByAEQgGGIQQgDSAKQgGGhCIKQoCAgICAgMAAVA0ACwsgCEGAgAJxIQYgB0EATARAIAVBQGsgBCAKQv///////z+DIAdB+ABqIAZyrUIwhoRCAEKAgICAgIDAwz8QVyAFKQNIIQIgBSkDQCEEDAELIApC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQVyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBXQf3/AiADIANB/f8CThtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBXIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBXQeiBfSADIANB6IF9TBtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBXIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIARCMIinQYCAAnFyrUIwhoQ3AwgLSgECfwJAIAAtAAAiAkUgAiABLQAAIgNHcg0AA0AgAS0AASEDIAAtAAEiAkUNASABQQFqIQEgAEEBaiEAIAIgA0YNAAsLIAIgA2sLDgAgACABIAJBtAQQ5AILDQAgACABIAJBABDkAgsMACAAIAAoAgQQlQILiQQAQbTsAUHAGRAxQczsAUGOEkEBQQAQMEHY7AFBtQ9BAUGAf0H/ABAOQfDsAUGuD0EBQYB/Qf8AEA5B5OwBQawPQQFBAEH/ARAOQfzsAUH3CUECQYCAfkH//wEQDkGI7QFB7glBAkEAQf//AxAOQZTtAUHmCkEEQYCAgIB4Qf////8HEA5BoO0BQd0KQQRBAEF/EA5BrO0BQf4UQQRBgICAgHhB/////wcQDkG47QFB9RRBBEEAQX8QDkHE7QFB2wxCgICA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AAv3AQEDfwJAIAAEQEEoQaDzASgCABEBACIBBEAgAUEAQSgQSiICIAAoAgxB/31xNgIMIAIgACgCFDYCFCACIAArAxg5AxgCQCAAKAIQIgEEQCACIAEQ8AEiATYCECABRQ0BCwJAIAAoAiAiAUUNACAALQANQQJxBEAgAiABNgIgDAELIAIgARDwASIBNgIgIAFFDQELIABBCGohA0EAIQADQCADKAIAIgMEQCADEL0DIgFFDQIgAARAIAAgATYCACABIAA2AgQFIAIgATYCCAsgASEADAELCyACKAIIIgFFDQMgASAANgIEDAMLIAIQrgELC0EADwsgAgsLACAAIAFBARC/Awu9AQEEfwJAIABFIAFFcg0AIAAoAgghAAJAIAJFBEADQCAARQ0DAkAgACgCICIDRQ0AIAMhBCADIAEiAkYNAwNAIAItAAAiBhCWAiAELQAAEJYCRw0BIAYEQCAEQQFqIQQgAkEBaiECDAEFIAMhAQwFCwALAAsgACgCACEADAALAAsDQCAARQ0CIAAoAiAiAkUEQEEAIQEMAgsgASACEJMDBEAgACgCACEADAELCyACIQELIABBACABGyEFCyAFC/EDAQZ/IwBBEGsiBiQAAn8CQAJAIAAEQCAAIQIDQAJAAn8gAi0AACIEQQhrIgVBGk1BAEEBIAV0QbeAgCBxGyAEQdwARnJFBEAgBEUNAiADQQVqIAMgBEEgSRsMAQsgA0EBagshAyACQQFqIQIMAQsLIAEgAiAAayADaiIFQQNqEHIiBEUNASAEQSI6AAAgAwRAIAQhAgNAIAAtAAAiAQRAAkAgAUEiRiABQSBJciABQdwARnJFBEAgAkEBaiICIAE6AAAMAQsgAkHcADoAASACQQJqIQECQAJAAkACQAJAAkACQCAALQAAIgNBCGsOBgEFAwYCBAALIANBIkcEQCADQdwARw0GIAFB3AA6AAAgASECDAcLIAFBIjoAACABIQIMBgsgAUHiADoAACABIQIMBQsgAUHmADoAACABIQIMBAsgAUHuADoAACABIQIMAwsgAUHyADoAACABIQIMAgsgAUH0ADoAACABIQIMAQsgBiADNgIAIAFBywkgBhCVAxogAkEGaiECCyAAQQFqIQAMAQsLIAQgBWpBIjsAAUEBDAQLIARBAWogACAFEE0aIAQgBWpBIjsAAUEBDAML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KAIAIQRB3MQCQQA2AgAgBEEBRw0BEAAhBSAAEE4gBRADAAsgACEGIwBBMGsiACQAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDAEGAAkGg8wEoAgARAQAhASAAQaDzASkCADcDGCAAQajzASgCADYCICAAQQA2AhQgAEGAAjYCBCAAIAE2AgACQAJAIAFFDQAgAiAAEK4CRQ0AIAAQ7wEgACgCCEEBaiEBQajzASgCACICBEAgACgCACABIAIRAwAiAQ0CDAELIAFBoPMBKAIAEQEAIgFFDQAgASAAKAIAIAAoAgQiAiAAKAIIQQFqIgMgAiADSRsQTSAAKAIIakEAOgAAIAAoAgBBpPMBKAIAEQAADAELQQAhASAAKAIAIgJFDQAgAkGk8wEoAgARAAALIABBMGokACAGIAEQSxogARBJDwsgAUH88gFB7gAQDAALIAAgACgCECIARQRAELsCAAsgACABIAAoAgAoAhgRAgALGwAgACgCACgCACIARQRAQQAPCyAAEK0CQQBHCyEBAX9BCBBVIQIgACgCACEAIAIgATYCBCACIAA2AgAgAgtMAQJ/IwBBEGsiASQAQShBoPMBKAIAEQEAIgIEQCACQQBBKBBKQcAANgIMCyABIAI2AgwgACABQQxqQYQBEI0ENgIAIAFBEGokACAACwkAIABBARDYAguRAQEDfyABKAIEIQIgACgCACEEIAAoAgQhAwNAIAMgBEZFBEAgAkEBayICIANBAWsiAy0AADoAAAwBCwsgASACNgIEIAAoAgAhAyAAIAI2AgAgASADNgIEIAAoAgQhAiAAIAEoAgg2AgQgASACNgIIIAAoAgghAiAAIAEoAgw2AgggASACNgIMIAEgASgCBDYCAAszAQF/IAEgACgCCCIBaiECA0AgASACRkUEQCABQQA6AAAgAUEBaiEBDAELCyAAIAI2AggLLAEBfyABQQBIBEAQzgEACyAAIAEQVSICNgIEIAAgAjYCACAAIAEgAmo2AggL1AIBBX8jAEEgayIDJAAgACACKQIANwOAAyABKAIAIQIgABC0AwJAIAAgAiABKAIEQQN0ELMDIgEEQEEIEEwhAEHcxAJBADYCAEHqACADQQhqIgIgARAEQdzEAigCACEBQdzEAkEANgIAAkACQAJAAkAgAUEBRwRAQdzEAkEANgIAQesAIANB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BEEQaiQACw4AIAAoAgAgASACEPADCwkAIAEgAhBZGgsMACABIAItAAA6AAALDAAgASACKgIAOAIAC2MBAn8jAEEQayICJAAgABChASABLQAMIgNB/wFHBEAgAkHVAzYCDCACQdYDNgIIIAJB1wM2AgQgAkEDaiAAIAEgAkEEaiADQQJ0aigCABEEACAAIAEtAAw6AAwLIAJBEGokAAv1BAEJfyMAQbABayIDJAAgA0EANgKsASADQYgQNgKoASADQdsXNgKkASADQQA2AqABIANByA82ApwBIANB6RU2ApgBIANBiBA2ApQBIANB2xc2ApABIANBhAFqIgYgASgCACABIAEtAAsiBcBBAEgiBBsiByAHIAEoAgQgBSAEG2oQ/QECQAJAAkACQCAALQAoRQRAIAEoAgAhBSADIAEoAgQgAS0ACyIEIATAQQBIIgQbNgKAASADIAUgASAEGzYCfEHcxAJBADYCACADIAMpAnw3AwhB0AMgA0EUaiIFIANBCGoQBEHcxAIoAgAhCEHcxAJBADYCACAIQQFGDQFB3MQCQQA2AgBBrwMgA0HwAGoiASADKAIUIAMoAhgQAkHcxAIoAgAhCUHcxAJBADYCACAJQQFGDQIgBiABEFogARBHGiAFEFwLQdzEAkEANgIAIANBFGoiARDkAUHcxAIoAgAhCkHcxAJBADYCACAKQQFGDQIgA0GLHi0AADoAGCADQYceKAAANgIUIANBATYCSCADIANBpAFqIANBkAFqIAAtACgbNgJgIAAoAgAhBiAALAALIQUgAyADKAKIASADLACPASIEQf8BcSAEQQBIIgQbNgJsIAMgAygChAEgA0GEAWoiByAEGzYCaCADQdIDNgI8IANB0wM2AjggAyACNgI0QdzEAkEANgIAIAMgBiAAIAVBAEgbIgA2AlRB1AMgASAAEAEaQdzEAigCACELQdzEAkEANgIAIAtBAUYNAiAHEEcaIANBsAFqJAAPCxAAIQEMAgsQACEBIANBFGoQXAwBCxAAIQELIANBhAFqEEcaIAEQAwALFwAgACABIAJB7PkBQfD5AUHQ5gAQ3wILoAQBD38jAEHQAGsiASQAIAAoAgQhCCABQRRqIgUgAC8BKhD1AkHcxAJBADYCAEHrACABQSBqIgZB2C4gBRACQdzEAigCACECQdzEAkEANgIAAkACQAJA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ADYCAAJAAkACQAJAAkACQAJAAkACQAJAIABBAUcEQEHcxAJBADYCACADIAE2AjxBkAIgA0FAayADQQxqEAEhBUHcxAIoAgAhB0HcxAJBADYCACAHQQFGDQFB3MQCQQA2AgAgA0EANgJYQf4BQRAQByEAQdzEAigCACEIQdzEAkEANgIAIAhBAUYNAiAAQYzdADYCACAAIAMoAjw2AgQgACAFKAIANgIIIAAgAygCRDYCDCADQQA2AkQgAyAANgJYIAMgATYCFEHcxAJBADYCAEGQAiADQRhqIANBBGoQASEEQdzEAigCACEJQdzEAkEANgIAIAlBAUYNA0HcxAJBADYCACADQQA2AjBB/gFBEBAHIQBB3MQCKAIAIQpB3MQCQQA2AgAgCkEBRg0EIABBlOAANgIAIAAgAygCFDYCBCAAIAQoAgA2AgggACADKAIcNgIMIANBADYCHCADIAA2AjBB3MQCQQA2AgBBkQIgAUEIaiACIANByABqIANBIGoiABALQdzEAigCACELQdzEAkEANgIAIAtBAUcNCkG48AEQBSEBIwEhAiAAEF0MBQtBuPABEAUhASMBIQIMCAtBuPABEAUhASMBIQIMBgtBuPABEAUhASMBIQIMBAtBuPABEAUhASMBIQIMAgtBuPABEAUhASMBIQILIAQQSBoLIANByABqEF0LIAUQSBoLIANB5ABqEEcaCwJAQbjwARAQIAJHDQAgARAPGkHcxAJBADYCAEGSAhANQdzEAigCACEMQdzEAkEANgIAIAxBAUYEQBAAIQFB3MQCQQA2AgBBpAEQDUHcxAIoAgAhDUHcxAJBADYCACANQQFHDQFBABAFGhBkCwALIANBBGoQSBogA0EMahBIGiABEAMACyADQSBqEF0gBBBIGiADQcgAahBdIAUQSBogA0HkAGoQRxogA0EEahBIGiADQQxqEEgaIANB8ABqJAALFQAgAUGw2wA2AgAgASAAKAIENgIECwsAIABBsNsAEIQCCwYAQazaAAsUACAAQQRqQQAgASgCBEGg2QBGGwsLACAAIAFBEBDeAgsOACAAQQRqENABIAAQSQsKACAAQQRqENABCxkAIAFBvNcANgIAIAFBBGogAEEEahDgAxoLEAAgAEGiAkG81wBBGBCfAQsJACAAEOIDEEkLBgBBrNcACxQAIABBBGpBACABKAIEQZzWAEYbC/UCAQR/IwBBIGsiAyQAIANBFGogASgCACACKAIAIAAoAgQoAswBENsDQdzEAkEANgIAQZoBIANBCGogAygCFCADKAIYEAJB3MQCKAIAIQFB3MQCQQA2AgACQAJAAkACQAJAAkAgAUEBRwRAIAMoAgwgAy0AEyIBIAHAQQBIGw0CQQgQTCEBQdzEAkEANgIAQZgBIAFBgiYQASEAQdzEAigCACEEQdzEAkEANgIAIARBAUYNA0HcxAJBADYCAEHtACAAQfTxAUHcABACQdzEAigCACEFQdzEAkEANgIAIAVBAUcNARAAIQAMBAsQACEADAQLAAsgA0EUaiIBEFxB3MQCQQA2AgBBoQIgASAAQRBqIANBCGoiARACQdzEAigCACEGQdzEAkEANgIAIAZBAUYEQBAAIQAgARBHGgwECyADQRRqEEgaIANBCGoQRxogA0EgaiQADwsQACEAIAEQTgsgA0EIahBHGgsgA0EUahBcCyAAEAMACw4AIABBBGoQzwEgABBJCwoAIABBBGoQzwELGQAgAUG01AA2AgAgAUEEaiAAQQRqEOMDGgsQACAAQaACQbTUAEEkEJ8BCwkAIAAQ5AMQSQsKACAAQRBqEKoCCwkAIAAQ5QMQSQsGAEGg2wALFAAgAEEEakEAIAEoAgRBtNoARhsLfwEFfyMAQRBrIgQkACMAQRBrIgMkACADQQRqIgFBATYCBCABQcAAEFU2AgggASgCCCICQczTADYCACACQgA3AgQgAkEQakEAQTAQSiEFIAFBADYCCCAAIAI2AgQgACAFNgIAIAEoAggiAARAIAAQSQsgA0EQaiQAIARBEGokAAuXCgEOfyMAQZABayIDJAAgAyABKAIANgIMIAMgASgCBDYCECABQQA2AgQgAyACKAIANgIEIAMgAigCBDYCCCACQQA2AgQgACgCBCEBQdzEAkEANgIAQZ4CIANBhAFqEAlB3MQCKAIAIQJB3MQCQQA2AgACQAJAIAJBAUcEQEHcxAJBADYCACADKAKEASECQZ8CIANB+ABqIAFBOGogAEEIaiIFEAJB3MQCKAIAIQBB3MQCQQA2AgACQAJAAkACQAJAAkACQAJAAkACQAJAIABBAUcEQCADIAMoAogBIgA2AkggAyABNgJAIAMgAygChAE2AkQgAARAIAAgACgCBEEBajYCBAtB3MQCQQA2AgBBkAIgA0HMAGogA0EMahABIQRB3MQCKAIAIQhB3MQCQQA2AgAgCEEBRg0BQdzEAkEANgIAQZYBIANB1ABqIAUQASEFQdzEAigCACEJQdzEAkEANgIAIAlBAUYNAiADQQA2AnBB3MQCQQA2AgBB/gFBJBAHIQBB3MQCKAIAIQpB3MQCQQA2AgAgCkEBRg0EIAMgADYCKCADIANBjwFqNgIsIANBATYCMCAAQbTUADYCACAAIAMoAkA2AgQgAEEIaiIGIAMoAkQ2AgAgACADKAJINgIMIANCADcCRCAAQRBqIgcgBCgCADYCACAAIAMoAlA2AhQgA0EANgJQQdzEAkEANgIAQZYBIABBGGogBRABGkHcxAIoAgAhC0HcxAJBADYCACALQQFGBEBBuPABEAUhASMBIQIgBxBIGiAGEI8BIANBKGoQnAEMCgsgAyAANgJwIANBADYCKCADQShqEJwBIAMgAygCiAEiADYCHCADIAE2AhQgAyADKAKEATYCGCAABEAgACAAKAIEQQFqNgIEC0HcxAJBADYCAEGQAiADQSBqIANBBGoQASEBQdzEAigCACEMQdzEAkEANgIAIAxBAUYNBUHcxAJBADYCACADQQA2AjhB/gFBGBAHIQBB3MQCKAIAIQ1B3MQCQQA2AgAgDUEBRg0GIABBvNcANgIAIAAgAygCFDYCBCAAIAMoAhg2AgggACADKAIcNgIMIANCADcCGCAAIAEoAgA2AhAgACADKAIkNgIUIANBADYCJCADIAA2AjhB3MQCQQA2AgBBkQIgAiADQfgAaiADQeAAaiADQShqIgAQC0HcxAIoAgAhDkHcxAJBADYCACAOQQFHDQ5BuPABEAUhASMBIQIgABBdDAcLQbjwARAFIQEjASECDAoLQbjwARAFIQEjASECDAELQbjwARAFIQEjASECIAQQSBoLIANBxABqEI8BDAYLQbjwARAFIQEjASECDAQLQbjwARAFIQEjASECIANBGGoQjwEMAgtBuPABEAUhASMBIQILIANBFGoQ0AELIANB4ABqEF0LIANBQGsQzwELIANB+ABqEEcaCwJAAkBBuPABEBAgAkYEQCABEA8aQdzEAkEANgIAQZICEA1B3MQCKAIAIQ9B3MQCQQA2AgAgD0EBRw0CEAAhAUHcxAJBADYCAEGkARANQdzEAigC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3MQCQQA2AgBBkAIgA0EYaiADQQRqEAEhBUHcxAIoAgAhCUHcxAJBADYCACAJQQFGDQNB3MQCQQA2AgAgA0EANgIwQf4BQRAQByEAQdzEAigCACEKQdzEAkEANgIAIApBAUYNBCAAQeDNADYCACAAIAMoAhQ2AgQgACAFKAIANgIIIAAgAygCHDYCDCADQQA2AhwgAyAANgIwQdzEAkEANgIAQZECIAJBCGogASADQcgAaiADQSBqIgYQC0HcxAIoAgAhC0HcxAJBADYCACALQQFHDQpBuPABEAUhASMBIQAgBhBdDAULQbjwARAFIQEjASEADAgLQbjwARAFIQEjASEADAYLQbjwARAFIQEjASEADAQLQbjwARAFIQEjASEADAILQbjwARAFIQEjASEACyAFEEgaCyADQcgAahBdCyAEEEgaCyADQeQAahBHGgsCQEG48AEQECAARw0AIAEQDxogAkEANgIAQdzEAkEANgIAQZICEA1B3MQCKAIAIQxB3MQCQQA2AgAgDEEBRgRAEAAhAUHcxAJBADYCAEGkARANQdzEAigCACENQdzEAkEANgIAIA1BAUcNAUEAEAUaEGQLAAsgA0EEahBIGiADQQxqEEgaIAEQAwALIANBIGoQXSAFEEgaIANByABqEF0gBBBIGiADQeQAahBHGiADQQRqEEgaIANBDGoQSBogA0HwAGokAAsVACABQcTJADYCACABIAApAgQ3AgQLCwAgAEHEyQAQ4QILGgAgACgCACIAKAIAIAAoAgQQ9wEgARCHARoLIAAgASwAACEBIAAoAgAiACgCACAAKAIEEPcBIAEQ+QILPgEBfSAAKAIAIQACfyABKgIAIgKLQwAAAE9dBEAgAqgMAQtBgICAgHgLIQEgACgCACAAKAIEEPcBIAEQ+QILFwAgACgCACABQQJ0aiACKgIAOAIAQQELsAIBBX8gACgCBCEDIAAoAgAhBSABKAIEIQQjAEEgayICJAAgAiAENgIYIAIgAEEIajYCCCACIAJBHGo2AhAgAiACQRhqNgIMA0AgAyAFRwRAIARBDGsiBCADQQxrIgMpAgA3AgAgBCADKAIINgIIIANCADcCACADQQA2AggMAQsLIAJBAToAFCACIAQ2AhwCQAJAIAJBCGoiAy0ADEUEQEHcxAJBADYCACADEPIDQdzEAigCACEGQdzE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YWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAZ2V0AGZpbGUgbWV0YWRhdGEgaXMgbm90IGFuIG9iamVjdABPYmplY3QAZmxvYXQAd2hhdABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AHVpbnQ2NF90AGtleXMAdHMAYmFkX3ZhcmlhbnRfYWNjZXNzAHNuZWFrZXJzAHNlc3Npb25fZnBzAGxvZ19tZWFzdXJlX2ZwcwBkb3dubG9hZF9kdXJhdGlvbl9tcwB0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scwBpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzAHNjYXJ2ZXMAY2xvdGhlcwBBcmdzRnVuY3RvcgB2ZWN0b3IAbG9nX2Vycm9yAGJ1ZmZlciBlcnJvcgBabGliIHVua25vd24gZXJyb3IAc3RyZWFtIGVycm9yAGZpbGUgZXJyb3IAZGF0YSBlcnJvcgB2aWV3ZXIAdXNlcgByZWZlcnJlcgBnZXRfbmV3X2xvZ2dlcgBMb2dnZXIARGF0YVByb3ZpZGVyAHBvaV9udW1iZXIAdW5zaWduZWQgY2hhcgBmb290d2VhcgByZWFyAGd6aXAAbG9nX2NoYW5nZV9tb2RlX3RvX3Z0bwBpbmZvAHVua25vd24AZGltZW5zaW9uc19zaG93bgB0cnlvbgBhcHBsaWNhdGlvbi9qc29uAHJzYUVuY3J5cHRpb24Ac3RkOjpleGNlcHRpb24AbG9nX21lYXN1cmVfc2Vzc2lvbl9pbml0aWFsaXphdGlvbgBkdXJhdGlvbgBleHBpcmF0aW9uAGluY29tcGF0aWJsZSB2ZXJzaW9uAG1ldGFWZXJzaW9uAGRvbWFpbgBzaWduAGxvZ19waG90b190YWtlbgBuYW4AYm9vbGVhbgBjaGVja3N1bQAvZGV2L3VyYW5kb20AZ2V0X2RldmljZV9kZXRlY3Rpb25fY2xpZW50X3VybABnZXRfbG9nX3VybABnZXRfZGF0YXBhY2tfZmlsZV91cmwAYm9vbABKU09OIG9iamVjdCBpcyBudWxsAG9wY2FsbABzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAG1vZGVsAGVtc2NyaXB0ZW46OnZhbABjdGFfbGluawBpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2sAaW5jb3JyZWN0IGhlYWRlciBjaGVjawBpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrAGluY29ycmVjdCBkYXRhIGNoZWNrAGRhdGFwYWNrAFByb21pc2VDYWxsYmFjawBwdXNoX2JhY2sAaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2sAZGV2aWNlX2RldGVjdGlvbl9jbGllbnRfdXJpAGV2ZW50c191cmkAYmFkX2FycmF5X25ld19sZW5ndGgAd2F0Y2gAaGVhZGVyIGNyYyBtaXNtYXRjaABnZXRfZXhjZXB0aW9uX21zZwB1bnNpZ25lZCBsb25nAHRlcm1pbmF0aW5nAHN0ZDo6d3N0cmluZwBiYXNpY19zdHJpbmcAc3RkOjpzdHJpbmcAc3RkOjp1MTZzdHJpbmcAc3RkOjp1MzJzdHJpbmcAVmFsdWUgaXMgbm90IGEgc3RyaW5nAENvbnRlbnQtRW5jb2RpbmcAJWxnAGNvbmZpZwBiYWcAJTEuMTdnACUxLjE1ZwBzY2FyZgBpbmYAcmVzaXplAGludmFsaWQgd2luZG93IHNpemUAdHJ1ZQBGYWlsZWQgdG8gY3JlYXRlIEpTT04gdmFsdWUAZXhwaXJhdGlvbl9kYXRlAGZhbHNlAFByb21pc2UAaW52YWxpZCBibG9jayB0eXBlAG5vICdtZXRhX3VybF90eXBlJyBmb3IgcGFzc2VkIHR5cGUAbm8gJ21ldGFfZXhwZXJpZW5jZV90eXBlJyBmb3IgcGFzc2VkIHR5cGUAQ29udGVudC1UeXBlAHNlc3Npb25fdGltZQBob3N0bmFtZQBidW5kbGUAZG91YmxlAHNlbGZpZQBsb2dfM2RfdG9nZ2xlX3Bhbm5pbmdfbW9kZQBmYWNpbmdfbW9kZQBjaGFuZ2VfbW9kZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAG1hcDo6YXQ6ICBrZXkgbm90IGZvdW5kAGtpbmQAYmluZABzdHJlYW0gZW5kAHZvaWQAY2xpZW50X2lkAGVycm9yX2lkAGxpY2Vuc2VfaWQAYnVuZGxlX2lkAGxvZ190cnlvbl9hdHRlbXB0ZWQAbG9nXzNkX2F0dGVtcHRlZABsb2dfY2FtZXJhX2FjY2Vzc19ncmFudGVkAGxvZ18zZF9wb2lfdXNlZAAzZF9QT0lfdXNlZABsb2dfM2RfY2xvc2VkAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABsb2dfdHJ5b25fY2FuY2VsZWQAbG9nX3Jlc2V0X2NsaWNrZWQAbW92ZV9vYmplY3RfY2xpY2tlZABsb2dfM2RfZGltZW5zaW9uc19jbGlja2VkAGxvZ19jdGFfY2xpY2tlZABsb2dfY2FtZXJhX2FjY2Vzc19kZW5pZWQAbG9nX2NhbWVyYV9zd2l0Y2hlZABsb2dfdHJ5b25fc3VjY2VlZGVkAGxvZ18zZF9zdWNjZWVkZWQAb3JpZ2luYWxfcGF5bG9hZABsb2dfY2hhbmdlX21vZGVfdG9fM2QAJVktJW0tJWQAc3RkOjpiYWRfYWxsb2MAZ2VuZXJpYwByYgB3ZWIAcndhAGdldF9tb2RlbF9tZXRhAGFwcGVuZF9tb2RlbF9sb2dnaW5nX2RhdGEAYXBwZW5kX2xvZ2dpbmdfZGF0YQBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fAF0AWwBQT1NUAEZhaWxlZCB0byBwYXJzZSBKU09OAE5BTgByc2EuTgBBRVMtMTI4LUdDTQBBRVMtMjU2LUdDTQBBRVMtMTkyLUdDTQBVUkwAaWQtZWNESABFQyBrZXkgZm9yIEVDREgASU5GAHJzYS5FAEFFUy0xMjgtRUNCAEFFUy0yNTYtRUNCAEFFUy0xOTItRUNCAFJTQQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AdmVjdG9yPGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AGZwc19wMQAxLjIuMTEAZnBzX3A1MABmcHNfcDEwACVZLSVtLSVkICVIOiVNOiVTLjAwMABodHRwczovL2FwaS53YW5uYS5mYXNoaW9uL3YxL2V2ZW50cy8AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLwBtZXRhX3VybF9wcmVmaXggaXMgZW1wdHkuAE1ldGFkYXRhIGpzb24gaXMgZW1wdHkuAFdyb25nIHByaXZhdGUga2V5OiBkZWNvZGVkIHN0cmluZyBpcyBlbXB0eS4AZXhwaXJhdGlvbl9kYXRlIGlzIGVtcHR5LgBEb21haW5zIGZpZWxkIGlzIGVtcHR5LgBGZXRjaCB1c2VyIGRhdGEgaXMgZW1wdHkuAFpsaWIgb3V0IG9mIG1lbW9yeS4AJ2J1bmRsZV9pZDo6d2ViJyBjb250YWlucyBlbXB0eSBhcnJheS4AJ3dlYicgaXMgbm90IGFuIGFycmF5LgBEYXRhcGFjayBkb2Vzbid0IGNvbnRhaW4gZmlsZXMuAFpsaWIgYnVmZmVyIGVycm9yLgBabGliIGVycm9yIHJlYWRpbmcvd3JpdGluZyBzdGRpbi4AWmxpYiBpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsLgBabGliIHZlcnNpb24gbWlzbWF0Y2guAFdyb25nIGtleSBzaXplLgAnYnVuZGxlX2lkOjp3ZWInIGNvbnRhaW5zIGFuIGVtcHR5IHN0cmluZyB2YWx1ZS4AJ2J1bmRsZV9pZDo6d2ViJyBjb250YWlucyBub3QgYSBzdHJpbmcgdmFsdWUuAERhdGFQcm92aWRlciBpcyBub3QgaW4gaW5pdGlhbCBzdGF0ZS4ARmFpbGVkIHRvIHBhcnNlIGV4cGlyYXRpb24gZGF0ZS4ARmFpbGVkIHRvIGNvbnZlcnQgZXhwaXJhdGlvbiBkYXRlIHRvIHRpbWUuAFdyb25nIGhvc3RuYW1lLgBIb3N0bmFtZSBtYXRjaGVyIGRvZXNuJ3Qgd29yayB3aXRoIGVtcHR5IHJ1bGUuAERhdGFQcm92aWRlciBpcyBub3QgaW5pdGlhbGl6ZWQuAEludGVncmF0aW9uIGlzIG5vdCBhbGxvd2VkLgBMaWNlbnNlIGhhcyBleHBpcmVkLgBabGliIGludmFsaWQgb3IgaW5jb21wbGV0ZSBkYXRhLgBDYW4ndCBpbmZsYXRlIGRhdGEuAENhbid0IGRlZmxhdGUgZGF0YS4ASW5wdXQgaXMgbm90IHZhbGlkIGJhc2U2NC1lbmNvZGVkIGRhdGEuAENhbid0IGluZmxhdGVJbml0Mi4AQ2FuJ3QgZGVmbGF0ZUluaXQyLgAqLgAnLgAiLgBtb2RlbC0AbWV0YS0ALioAKG51bGwpAGFib3J0ZWQgd2l0aCBlbXNjcmlwdGVuX2ZldGNoX2Nsb3NlKCkASlNPTiBkb2Vzbid0IGNvbnRhaW4ga2V5ICdidW5kbGVfaWQnACcgb2Yga2V5ICcATm8gZ2xvYmFscyBmb3IgJwAnIGRvZXNuJ3QgY29udGFpbiAnAFVuc3VwcG9ydGVkIHR5cGUgJwAiIgBGYWlsZWQgdG8gZ2V0IGhvc3RuYW1lIGZyb20gIgAiIFJlc3BvbnNlOiAiAEZhaWxlZCB0byBsb2cgbWVzc2FnZS4gQ29kZTogIgBLZXkgbm90IGZvdW5kIGluIEpTT04gb2JqZWN0IABNZXRhZmlsZSBzaXplIGlzIGxlc3MgdGhhbiAALiBSZWNlaXZlZCBzaXplIGlzOiAATGljZW5zZSBlcnJvcjogAE5vIGZpbGUgaW4gZGF0YXBhY2s6IABEb3dubG9hZGluZyBmYWlsZWQsIEhUVFAgZmFpbHVyZSBzdGF0dXMgY29kZTogAEZhaWxlZCB0byBzZXQgR0NNIGtleS4gRXJyb3IgY29kZTogAEZhaWxlZCB0byBwYXJzZSBSU0Ega2V5LiBFcnJvciBjb2RlOiAARmFpbGVkIHRvIHNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuIEVycm9yIGNvZGU6IABGYWlsZWQgdG8gc2V0IFJTQSBwYWRkaW5nLiBFcnJvciBjb2RlOiAARmFpbGVkIHRvIGRlY3J5cHQgZGF0YS4gRXJyb3IgY29kZTogAEZhaWxlZCB0byBzaWduIGRhdGEuIEVycm9yIGNvZGU6IABGYWlsZWQgdG8gY2FsY3VsYXRlIFNIQTI1Ni4gRXJyb3IgY29kZTogACwgACuBBAEMACqGSM49AgEAKoZIhvcNAQEBAE5TdDNfXzI4ZnVuY3Rpb25JRk4xMGVtc2NyaXB0ZW4zdmFsRU5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVFRUUATlN0M19fMjEwX19mdW5jdGlvbjM0X19tYXliZV9kZXJpdmVfZnJvbV91bmFyeV9mdW5jdGlvbklGTjEwZW1zY3JpcHRlbjN2YWxFTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRUVFRQBOU3QzX18yMzNfX3VuYXJ5X2Z1bmN0aW9uX2tlZXBfbGF5b3V0X2Jhc2VJTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRU4xMGVtc2NyaXB0ZW4zdmFsRUVFAAAA+HYAADgaAAAgdwAArxkAALQaAABOU3QzX18yMTBfX2Z1bmN0aW9uMzVfX21heWJlX2Rlcml2ZV9mcm9tX2JpbmFyeV9mdW5jdGlvbklGTjEwZW1zY3JpcHRlbjN2YWxFTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRUVFRQAAAPh2AADIGgAAfHcAAE0ZAAAAAAAAAgAAALwaAAACAAAAVBsAAAIAAABQTlN0M19fMjhmdW5jdGlvbklGTjEwZW1zY3JpcHRlbjN2YWxFTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRUVFRQAA2HcAAHwbAAAAAAAAXBsAAFBLTlN0M19fMjhmdW5jdGlvbklGTjEwZW1zY3JpcHRlbjN2YWxFTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRUVFRQDYdwAA8BsAAAEAAABcGwAAaWkAdgB2aQDgGwAAkBwAAFQcAADYHAAATjEwZW1zY3JpcHRlbjN2YWxFAAD4dgAAfBwAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAAD4dgAAmBwAAGlpaWkATlN0M19fMjhmdW5jdGlvbklGdk4xMGVtc2NyaXB0ZW4zdmFsRVMyX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uMzRfX21heWJlX2Rlcml2ZV9mcm9tX3VuYXJ5X2Z1bmN0aW9uSUZ2TjEwZW1zY3JpcHRlbjN2YWxFUzNfRUVFAPh2AAARHQAATlN0M19fMjEwX19mdW5jdGlvbjM1X19tYXliZV9kZXJpdmVfZnJvbV9iaW5hcnlfZnVuY3Rpb25JRnZOMTBlbXNjcmlwdGVuM3ZhbEVTM19FRUUATlN0M19fMjM0X19iaW5hcnlfZnVuY3Rpb25fa2VlcF9sYXlvdXRfYmFzZUlOMTBlbXNjcmlwdGVuM3ZhbEVTMl92RUUAAAAA+HYAAMAdAAAgdwAAbB0AAAgeAAB8dwAA5RwAAAAAAAACAAAAZB0AAAIAAAAQHgAAAgAAAFBOU3QzX18yOGZ1bmN0aW9uSUZ2TjEwZW1zY3JpcHRlbjN2YWxFUzJfRUVFAAAAANh3AAA8HgAAAAAAABweAABQS05TdDNfXzI4ZnVuY3Rpb25JRnZOMTBlbXNjcmlwdGVuM3ZhbEVTMl9FRUUAAADYdwAAfB4AAAEAAAAcHgAAbB4AADR2AACsHgAAkBwAAJAcAAB2aWlpaQAAANgcAACsdgAAaWlpAE5TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAPh2AADkHgAAUE5TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAAAAANh3AAAQHwAAAAAAAAgfAABQS05TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAAAA2HcAAEgfAAABAAAACB8AADgfAAA0dgAAOB8AANx2AAB2aWlmAEGgPwuFAjR2AAA4HwAAuHYAANx2AAB2aWlpZgAAALh2AABwHwAAkBwAAAgfAAC4dgAAAAAAAEx2AAAIHwAAuHYAANx2AABpaWlpZgAxMkRhdGFQcm92aWRlcgAAAAD4dgAA5h8AAFAxMkRhdGFQcm92aWRlcgDYdwAAACAAAAAAAAD4HwAAUEsxMkRhdGFQcm92aWRlcgAAAADYdwAAICAAAAEAAAD4HwAAECAAANgcAACQHAAAkBwAABAgAABkIAAANkxvZ2dlcgD4dgAAXCAAAJAcAAAQIAAA2BwAANgcAAA0IAAA2BwAANgcAAA0IAAAAAAAAGQgAAA0IAAAkBwAAEx2AABpaWlpaQBBsMEAC6UBkBwAABAgAADYHAAA2BwAAFA2TG9nZ2VyAAAAANh3AADAIAAAAAAAAGQgAABQSzZMb2dnZXIAAADYdwAA3CAAAAEAAABkIAAAkBwAAOggAACQHAAA6CAAANgcAAAAAAAAkBwAAOggAADYHAAAkBwAAJAcAADoIAAAkBwAAAAAAACQHAAA6CAAANgcAADYHAAAkBwAAOggAADcdgAA3HYAAGlpaWZmAEHgwgAL9mSQHAAA6CAAANgcAADYHAAAkBwAAGlpaWlpaQAANHYAAMwgAACQHAAAdmlpaQAAAAA0dgAAzCAAANgcAACQHAAA2BwAAOggAAAtLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0AAAAA/CIAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMTNDbGllbnRMaWNlbnNlQzFFUktOU18xN2Jhc2ljX3N0cmluZ192aWV3SWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFUktOU18xMmJhc2ljX3N0cmluZ0ljUzVfTlNfOWFsbG9jYXRvckljRUVFRVNFX1NFX1NFX0UzJF8wTlNBX0lTRl9FRUZ2Uks5SlNPTlZhbHVlRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2Uks5SlNPTlZhbHVlRUVFAAAAAPh2AADEIgAAIHcAABAiAAD0IgAAWk4xM0NsaWVudExpY2Vuc2VDMUVSS05TdDNfXzIxN2Jhc2ljX3N0cmluZ192aWV3SWNOUzBfMTFjaGFyX3RyYWl0c0ljRUVFRVJLTlMwXzEyYmFzaWNfc3RyaW5nSWNTM19OUzBfOWFsbG9jYXRvckljRUVFRVNDX1NDX1NDX0UzJF8wAAAAAPh2AAAIIwAAAAAAAMAjAADHAAAAyAAAAMkAAAAxNENsaWVudE1ldGFkYXRhAAAAAPh2AACsIwAAAAAAAFQkAACyAAAAygAAAMsAAADMAAAAzQAAAM4AAADPAAAA0AAAANEAAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjE0Q2xpZW50TWV0YWRhdGFDMUVSSzlKU09OVmFsdWVFMyRfME5TXzlhbGxvY2F0b3JJUzZfRUVGdlM1X0VFRQAAAAAgdwAA9CMAAPQiAABaTjE0Q2xpZW50TWV0YWRhdGFDMUVSSzlKU09OVmFsdWVFMyRfMAAA+HYAAGAkAAD5kVzTHH8+s0Z4ffJM7W7bplMH0mr3te7FJ7ckvm1pqwAAAACQHAAAkBwAAAAAAACUJQAANAEAADUBAAA2AQAANwEAADgBAAA5AQAAOgEAADsBAAA8AQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4xMkRhdGFQcm92aWRlcjRpbml0RVI2TG9nZ2VyRTMkXzBOU185YWxsb2NhdG9ySVM1X0VFRnZOMTBlbXNjcmlwdGVuM3ZhbEVTOV9FRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZOMTBlbXNjcmlwdGVuM3ZhbEVTM19FRUUAAAD4dgAAVCUAACB3AADoJAAAjCUAAAAAAAB4JgAAPQEAAD4BAAA/AQAAQAEAAEEBAABCAQAAQwEAAEQBAABFAQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWlpOMTJEYXRhUHJvdmlkZXI0aW5pdEVSNkxvZ2dlckVOSzMkXzBjbEVOMTBlbXNjcmlwdGVuM3ZhbEVTN19FVWxQS2NtRV9OU185YWxsb2NhdG9ySVNBX0VFRnZTOV9tRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UEtjbUVFRQD4dgAASyYAACB3AADMJQAAcCYAAJAcAABaWk4xMkRhdGFQcm92aWRlcjRpbml0RVI2TG9nZ2VyRU5LMyRfMGNsRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0VVbFBLY21FXwD4dgAAiCYAAAAAAAAYKAAARgEAAEcBAABIAQAASQEAAEoBAABLAQAATAEAAE0BAABOAQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWlpOMTJEYXRhUHJvdmlkZXI0aW5pdEVSNkxvZ2dlckVOSzMkXzBjbEVOMTBlbXNjcmlwdGVuM3ZhbEVTN19FVWxSS05TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVFX05TQl9JU0dfRUVGdlNGX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlJLTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRUVFRQAAAPh2AACxJwAAIHcAAAQnAAAQKAAAkBwAANgcAABaWk4xMkRhdGFQcm92aWRlcjRpbml0RVI2TG9nZ2VyRU5LMyRfMGNsRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0VVbFJLTlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOUzVfMTFjaGFyX3RyYWl0c0ljRUVOUzVfOWFsbG9jYXRvckljRUVFRUVfAAAA+HYAACwoAABaTjEyRGF0YVByb3ZpZGVyNGluaXRFUjZMb2dnZXJFMyRfMAD4dgAAvCgAAAAAAAC4KQAATwEAAFABAABRAQAAUgEAAFMBAABUAQAAVQEAAFYBAABXAQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4xMkRhdGFQcm92aWRlcjE0Z2V0X21vZGVsX21ldGFFUktOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFRTMkXzBOUzZfSVNCX0VFRnZOMTBlbXNjcmlwdGVuM3ZhbEVTRV9FRUUAAAAgdwAAFCkAAIwlAAAAAAAAICoAAFgBAABZAQAAWgEAAFsBAABcAQAATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTBEYXRhTG9hZGVyTlNfOWFsbG9jYXRvcklTMV9FRUVFACB3AADgKQAAXHMAAAAAAAAQKwAAXQEAAF4BAABfAQAAYAEAAGEBAABiAQAAYwEAAGQBAABlAQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWlpOMTJEYXRhUHJvdmlkZXIxNGdldF9tb2RlbF9tZXRhRVJLTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRUVOSzMkXzBjbEVOMTBlbXNjcmlwdGVuM3ZhbEVTRF9FVWxQS2NtRV9OUzZfSVNHX0VFRnZTRl9tRUVFAAAAACB3AABYKgAAcCYAAFpaTjEyRGF0YVByb3ZpZGVyMTRnZXRfbW9kZWxfbWV0YUVSS05TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlMwXzExY2hhcl90cmFpdHNJY0VFTlMwXzlhbGxvY2F0b3JJY0VFRUVFTkszJF8wY2xFTjEwZW1zY3JpcHRlbjN2YWxFU0JfRVVsUEtjbUVfAAAAAPh2AAAcKwAAAAAAAJQsAABmAQAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAbQEAAG4BAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laWk4xMkRhdGFQcm92aWRlcjE0Z2V0X21vZGVsX21ldGFFUktOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFRU5LMyRfMGNsRU4xMGVtc2NyaXB0ZW4zdmFsRVNEX0VVbFNBX0VfTlM2X0lTRV9FRUZ2U0FfRUVFAAAgdwAA4CsAABAoAABaWk4xMkRhdGFQcm92aWRlcjE0Z2V0X21vZGVsX21ldGFFUktOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TMF8xMWNoYXJfdHJhaXRzSWNFRU5TMF85YWxsb2NhdG9ySWNFRUVFRU5LMyRfMGNsRU4xMGVtc2NyaXB0ZW4zdmFsRVNCX0VVbFM4X0VfAPh2AACgLAAAWk4xMkRhdGFQcm92aWRlcjE0Z2V0X21vZGVsX21ldGFFUktOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TMF8xMWNoYXJfdHJhaXRzSWNFRU5TMF85YWxsb2NhdG9ySWNFRUVFRTMkXzAAAAAA+HYAADQtAAAAAAAAeC4AADQBAABvAQAAcAEAAHEBAAByAQAAcwEAAHQBAAB1AQAAdgEAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMTJEYXRhUHJvdmlkZXIxMWNoYW5nZV9tb2RlRVJLTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVNBX0UzJF8wTlM2X0lTQl9FRUZ2TjEwZW1zY3JpcHRlbjN2YWxFU0VfRUVFAAAAIHcAANQtAACMJQAAAAAAAGgvAAB3AQAAeAEAAHkBAAB6AQAAewEAAHwBAAB9AQAAfgEAAH8BAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laWk4xMkRhdGFQcm92aWRlcjExY2hhbmdlX21vZGVFUktOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFU0FfRU5LMyRfMGNsRU4xMGVtc2NyaXB0ZW4zdmFsRVNEX0VVbFBLY21FX05TNl9JU0dfRUVGdlNGX21FRUUAAAAAIHcAALAuAABwJgAAWlpOMTJEYXRhUHJvdmlkZXIxMWNoYW5nZV9tb2RlRVJLTlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOUzBfMTFjaGFyX3RyYWl0c0ljRUVOUzBfOWFsbG9jYXRvckljRUVFRVM4X0VOSzMkXzBjbEVOMTBlbXNjcmlwdGVuM3ZhbEVTQl9FVWxQS2NtRV8AAAAA+HYAAHQvAAAAAAAA7DAAAIABAACBAQAAggEAAIMBAACEAQAAhQEAAIYBAACHAQAAiAEAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpaTjEyRGF0YVByb3ZpZGVyMTFjaGFuZ2VfbW9kZUVSS05TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTQV9FTkszJF8wY2xFTjEwZW1zY3JpcHRlbjN2YWxFU0RfRVVsU0FfRV9OUzZfSVNFX0VFRnZTQV9FRUUAACB3AAA4MAAAECgAAFpaTjEyRGF0YVByb3ZpZGVyMTFjaGFuZ2VfbW9kZUVSS05TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlMwXzExY2hhcl90cmFpdHNJY0VFTlMwXzlhbGxvY2F0b3JJY0VFRUVTOF9FTkszJF8wY2xFTjEwZW1zY3JpcHRlbjN2YWxFU0JfRVVsUzhfRV8A+HYAAPgwAABaTjEyRGF0YVByb3ZpZGVyMTFjaGFuZ2VfbW9kZUVSS05TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlMwXzExY2hhcl90cmFpdHNJY0VFTlMwXzlhbGxvY2F0b3JJY0VFRUVTOF9FMyRfMAAAAAD4dgAAjDEAAPmRXNMcfz6zRnh98kztbtumUwfSave17sUntyS+bWmrWRQAAAQUAACSEwAA4hUAADkUAAAXFAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAAD4dgAAODIAAJAcAACQHAAAkBwAAJAcAAAAAAAAEDMAADQBAAAGAgAABwIAAAgCAAAJAgAACgIAAAsCAAAMAgAADQIAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOSzZMb2dnZXIxMXNlbmRfZXZlbnRfRVJLOUpTT05WYWx1ZUUzJF8wTlNfOWFsbG9jYXRvcklTNl9FRUZ2TjEwZW1zY3JpcHRlbjN2YWxFU0FfRUVFAAAAIHcAAJwyAACMJQAAWk5LNkxvZ2dlcjExc2VuZF9ldmVudF9FUks5SlNPTlZhbHVlRTMkXzAAAAD4dgAAHDMAAJAcAADYHAAApxIAAMIOAAAAAAAAljAHdyxhDu66UQmZGcRtB4/0anA1pWPpo5VknjKI2w6kuNx5HunV4IjZ0pcrTLYJvXyxfgctuOeRHb+QZBC3HfIgsGpIcbnz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CABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAA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AAD4dgAAoGwAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQAA+HYAAMhsAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lqRUUAAPh2AADwbAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbEVFAAD4dgAAGG0AAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQAA+HYAAEBtAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l4RUUAAPh2AABobQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJeUVFAAD4dgAAkG0AAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWZFRQAA+HYAALhtAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUAAPh2AADgbQAAghYAAEwZAABMGQAATBkAAEwZAABMGQAATBkAAEwZAABMGQAATBkAAH9/f39/f39/f39/f39/AADRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACgAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQARChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHh3QELIQ4AAAAAAAAAABkACg0ZGRkADQAAAgAJDgAAAAkADgAADgBBm94BCwEMAEGn3gELFRMAAAAAEwAAAAAJDAAAAAAADAAADABB1d4BCwEQAEHh3gELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBj98BCwESAEGb3wELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBB0t8BCw4aAAAAGhoaAAAAAAAACQBBg+ABCwEUAEGP4AELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBveABCwEWAEHJ4AELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBlOEBCwI1AgBBvOEBCwj//////////wBBgOIBC+4E/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAADHMAAF4AAAA3AgAAOAIAAE5TdDNfXzIxN2JhZF9mdW5jdGlvbl9jYWxsRQAgdwAA8HIAADh4AABOU3QzX18yMTRfX3NoYXJlZF9jb3VudEUAAAAA+HYAABhzAABOU3QzX18yMTlfX3NoYXJlZF93ZWFrX2NvdW50RQAAAHx3AAA8cwAAAAAAAAEAAAA0cwBBhOcBC5oMCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUAypo7AAAAAAAAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OQAAAACkdAAAXQAAADkCAAA6AgAAU3QxOGJhZF92YXJpYW50X2FjY2VzcwAAIHcAAIx0AAA4eAAATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAAAAAIHcAALB0AACYeQAATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAAAAIHcAAOB0AADUdAAATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAAAAIHcAABB1AADUdAAATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UAIHcAAEB1AAA0dQAATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAAAAACB3AABwdQAA1HQAAE4xMF9fY3h4YWJpdjEyOV9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvRQAAACB3AACkdQAANHUAAAAAAAAkdgAAPAIAAD0CAAA+AgAAPwIAAEACAABOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAIHcAAPx1AADUdAAAdgAAAOh1AAAwdgAARG4AAOh1AAA8dgAAYgAAAOh1AABIdgAAYwAAAOh1AABUdgAAaAAAAOh1AABgdgAAYQAAAOh1AABsdgAAcwAAAOh1AAB4dgAAdAAAAOh1AACEdgAAaQAAAOh1AACQdgAAagAAAOh1AACcdgAAbAAAAOh1AACodgAAbQAAAOh1AAC0dgAAeAAAAOh1AADAdgAAeQAAAOh1AADMdgAAZgAAAOh1AADYdgAAZAAAAOh1AADkdgAAAAAAAAR1AAA8AgAAQQIAAD4CAAA/AgAAQgIAAEMCAABEAgAARQIAAAAAAABodwAAPAIAAEYCAAA+AgAAPwIAAEICAABHAgAASAIAAEkCAABOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UAAAAAIHcAAEB3AAAEdQAAAAAAAMR3AAA8AgAASgIAAD4CAAA/AgAAQgIAAEsCAABMAgAATQIAAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAAAAgdwAAnHcAAAR1AAAAAAAAZHUAADwCAABOAgAAPgIAAD8CAABPAgAAAAAAAFB4AABdAAAAUAIAAFECAAAAAAAAeHgAAF0AAABSAgAAUwIAAAAAAAA4eAAAXQAAAFQCAABVAgAAU3Q5ZXhjZXB0aW9uAAAAAPh2AAAoeAAAU3Q5YmFkX2FsbG9jAAAAACB3AABAeAAAOHgAAFN0MjBiYWRfYXJyYXlfbmV3X2xlbmd0aAAAAAAgdwAAXHgAAFB4AAAAAAAAvHgAAFwAAABWAgAAVwIAAAAAAAB8eQAAbgAAAFgCAABZAgAAU3QxMWxvZ2ljX2Vycm9yACB3AACseAAAOHgAAAAAAAD0eAAAXAAAAFoCAABXAgAAU3QxNmludmFsaWRfYXJndW1lbnQAAAAAIHcAANx4AAC8eAAAAAAAACh5AABcAAAAWwIAAFcCAABTdDEybGVuZ3RoX2Vycm9yAAAAACB3AAAUeQAAvHgAAAAAAABceQAAXAAAAFwCAABXAgAAU3QxMm91dF9vZl9yYW5nZQAAAAAgdwAASHkAALx4AABTdDEzcnVudGltZV9lcnJvcgAAACB3AABoeQAAOHgAAFN0OXR5cGVfaW5mbwAAAAD4dgAAiHkAQaDzAQsaGAIAABkCAAAaAgAAqGgAAMBoAABwogEAOwI=")||(_=function locateFile(A){return i.locateFile?i.locateFile(A,B):B+A}(_))
|
|
556
|
-
var callRuntimeCallbacks=A=>{for(;A.length>0;)A.shift()(i)},
|
|
557
|
+
var callRuntimeCallbacks=A=>{for(;A.length>0;)A.shift()(i)},H=i.noExitRuntime||!0,x=[],Y=0
|
|
557
558
|
function ExceptionInfo(A){this.excPtr=A,this.ptr=A-24,this.set_type=function(A){f[this.ptr+4>>2]=A},this.get_type=function(){return f[this.ptr+4>>2]},this.set_destructor=function(A){f[this.ptr+8>>2]=A},this.get_destructor=function(){return f[this.ptr+8>>2]},this.set_caught=function(A){A=A?1:0,d[this.ptr+12|0]=A},this.get_caught=function(){return 0!=d[this.ptr+12|0]},this.set_rethrown=function(A){A=A?1:0,d[this.ptr+13|0]=A},this.get_rethrown=function(){return 0!=d[this.ptr+13|0]},this.init=function(A,e){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(e)},this.set_adjusted_ptr=function(A){f[this.ptr+16>>2]=A},this.get_adjusted_ptr=function(){return f[this.ptr+16>>2]},this.get_exception_ptr=function(){if(___cxa_is_pointer_type(this.get_type()))return f[this.excPtr>>2]
|
|
558
559
|
var A=this.get_adjusted_ptr()
|
|
559
560
|
return 0!==A?A:this.excPtr}}var findMatchingCatch=A=>{var e=Y
|
|
@@ -976,7 +977,7 @@ return i.length&&(f[e>>2]=BA.toHandle(i)),g},cA=[],hA={},getStringOrSymbol=A=>{v
|
|
|
976
977
|
return void 0===e?readLatin1String(A):e},emval_get_global=()=>"object"==typeof globalThis?globalThis:Function("return this")(),dA=(Reflect.construct,A=>A%4===0&&(A%100!==0||A%400===0)),lA=[0,31,60,91,121,152,182,213,244,274,305,335],uA=[0,31,59,90,120,151,181,212,243,273,304,334],ydayFromDate=A=>(dA(A.getFullYear())?lA:uA)[A.getMonth()]+A.getDate()-1,convertI32PairToI53Checked=(A,e)=>e+2097152>>>0<4194305-!!A?(A>>>0)+4294967296*e:NaN,stringToNewUTF8=A=>{var e=lengthBytesUTF8(A)+1,t=_malloc(e)
|
|
977
978
|
return t&&stringToUTF8(A,t,e),t},growMemory=A=>{var e=(A-E.buffer.byteLength+65535)/65536
|
|
978
979
|
try{return E.grow(e),updateMemoryViews(),1}catch(A){}},wA={init(){wA.xhrs=new HandleAllocator}},handleException=A=>{if(A instanceof ExitStatus||"unwind"==A)return h
|
|
979
|
-
quit_(1,A)},keepRuntimeAlive=()=>
|
|
980
|
+
quit_(1,A)},keepRuntimeAlive=()=>H||!1,_exit=(A,e)=>{var t
|
|
980
981
|
h=A,h=t=A,keepRuntimeAlive()||(i.onExit?.(t),y=!0),quit_(t,new ExitStatus(t))},callUserCallback=A=>{if(!y)try{A(),(()=>{if(!keepRuntimeAlive())try{_exit(h)}catch(A){handleException(A)}})()}catch(A){handleException(A)}},writeI53ToI64=(A,e)=>{f[A>>2]=e
|
|
981
982
|
var t=f[A>>2]
|
|
982
983
|
f[A+4>>2]=(e-t)/4294967296},arraySum=(A,e)=>{for(var t=0,i=0;i<=e;t+=A[i++]);return t},DA=[31,29,31,30,31,30,31,31,30,31,30,31],fA=[31,28,31,30,31,30,31,31,30,31,30,31],addDays=(A,e)=>{for(var t=new Date(A.getTime());e>0;){var i=dA(t.getFullYear()),g=t.getMonth(),r=(i?DA:fA)[g]
|
|
@@ -1250,7 +1251,7 @@ callRuntimeCallbacks(S)}()))}G>0||(function preRun(){if(i.preRun)for("function"=
|
|
|
1250
1251
|
var A
|
|
1251
1252
|
callRuntimeCallbacks(R)}(),G>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),doRun()}),1)):doRun()))}if(i.dynCall_jiji=(A,e,t,g,r)=>(i.dynCall_jiji=MA.Ia)(A,e,t,g,r),b=function runCaller(){yA||run(),yA||(b=runCaller)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()()
|
|
1252
1253
|
return run(),A.ready})
|
|
1253
|
-
const
|
|
1254
|
+
const Mt=Rt
|
|
1254
1255
|
__webpack_require__("c0bcaabf27b97f6af622")
|
|
1255
1256
|
function ui_asyncGeneratorStep(A,e,t,i,g,r,I){try{var o=A[r](I),a=o.value}catch(A){return void t(A)}o.done?e(a):Promise.resolve(a).then(i,g)}function ui_asyncToGenerator(A){return function(){var e=this,t=arguments
|
|
1256
1257
|
return new Promise((function(i,g){var r=A.apply(e,t)
|
|
@@ -1259,69 +1260,69 @@ function _next(A){ui_asyncGeneratorStep(r,i,g,_next,_throw,"next",A)}function _t
|
|
|
1259
1260
|
var getAvailableSize=A=>({width:A?A.offsetWidth:window.innerWidth,height:A?A.offsetHeight:window.innerHeight}),queueCalls=A=>{var e
|
|
1260
1261
|
return function(){if(e)e=e.then((()=>A.apply(this,arguments)),(()=>A.apply(this,arguments)))
|
|
1261
1262
|
else{var t=A.apply(this,arguments)
|
|
1262
|
-
e=t instanceof Promise?t:Promise.resolve(t)}return e}},
|
|
1263
|
+
e=t instanceof Promise?t:Promise.resolve(t)}return e}},Ft=function(){var A=ui_asyncToGenerator((function*(A){var{crossOrigin:e,async:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}
|
|
1263
1264
|
return new Promise(((i,g)=>{var r=document.createElement("script")
|
|
1264
1265
|
t?r.async=!0:r.defer=!0,r.src=A,e&&(r.crossOrigin="anonymous"),r.onload=()=>i(r),r.onerror=()=>g(new Error('Failed to load "'.concat(A,'"'))),document.body.appendChild(r)}))}))
|
|
1265
|
-
return function injectScript(e){return A.apply(this,arguments)}}(),
|
|
1266
|
-
return function runInsideRaf(e){return A.apply(this,arguments)}}(),
|
|
1267
|
-
const
|
|
1266
|
+
return function injectScript(e){return A.apply(this,arguments)}}(),Nt="application/javascript",getScriptBlob=A=>(A instanceof Promise?A:customFetch(A)).then((A=>A.blob())).then((A=>A.type===Nt?A:new Blob([A],{type:Nt}))),St=function(){var A=ui_asyncToGenerator((function*(A){return new Promise((e=>{requestAnimationFrame((()=>e(A())))}))}))
|
|
1267
|
+
return function runInsideRaf(e){return A.apply(this,arguments)}}(),Gt="CONNECTION_FAIL_ERROR",customFetch=(A,e)=>fetch(A,e).catch((e=>{throw e.name=Gt,e.message+=' url: "'.concat(A,'"'),e})),kt="vto",bt="3d"
|
|
1268
|
+
const _t=kt,Ut=bt
|
|
1268
1269
|
|
|
1269
1270
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1270
|
-
var
|
|
1271
|
-
const
|
|
1271
|
+
var Lt="sneakers",vt="watch",Ht="bag",xt="clothes",Yt="scarf",Jt="generic",Tt=[Lt,vt,Ht,xt,Yt]
|
|
1272
|
+
const Kt=Lt,Pt=vt,Ot=Ht,qt=Jt,zt=xt,jt=Yt,Vt="3.3.0"
|
|
1272
1273
|
__webpack_require__("9cae3d1f874f77656a8b"),__webpack_require__("d6dd597dc17c7e0d2f31")
|
|
1273
|
-
const
|
|
1274
|
+
const Wt=
|
|
1274
1275
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1275
|
-
class EventEmitter{constructor(){this.events={},this.verbose=!1,this.__setDefaultErrorListener()}__setDefaultErrorListener(){this.on(
|
|
1276
|
+
class EventEmitter{constructor(){this.events={},this.verbose=!1,this.__setDefaultErrorListener()}__setDefaultErrorListener(){this.on(pt,this.__defaultErrorListener.bind(this))}__defaultErrorListener(A){if(this.events.error&&1===this.events.error.length){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
1276
1277
|
console.error(A,"details:",t)}}__addListener(A,e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2]
|
|
1277
1278
|
this.events[A]=this.events[A]||[],t?this.events[A].unshift(e):this.events[A].push(e)}on(A,e){return this.__addListener(A,e),this}prependListener(A,e){return this.__addListener(A,e,!0),this}once(A,e){var t=this
|
|
1278
1279
|
return this.__addListener(A,(function selfRemovedListener(){e(...arguments),t.off(A,selfRemovedListener)})),this}off(A,e){var t=this.events[A]||[]
|
|
1279
|
-
return this.events[A]=t.filter((A=>A!==e)),0===this.events[A].length&&delete this.events[A],this}removeAllListeners(A){return delete this.events[A],A===
|
|
1280
|
+
return this.events[A]=t.filter((A=>A!==e)),0===this.events[A].length&&delete this.events[A],this}removeAllListeners(A){return delete this.events[A],A===pt&&this.__setDefaultErrorListener(),this}clearAll(){return this.events={},this.__setDefaultErrorListener(),this}debugEvent(A){if(this.verbose&&![uA,aA,QA].includes(A)){A||console.warn("Empty event param.")
|
|
1280
1281
|
for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
1281
1282
|
console.log("[".concat(this.constructor.name,"] Emit event: [").concat(A,"]. Data: ").concat(JSON.stringify(t)))}}emit(A){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
1282
1283
|
var g=this.events[A]
|
|
1283
1284
|
if(this.debugEvent(A,...t),A===uA){var r=t[0]
|
|
1284
1285
|
if("object"===typeof r){var{type:I,message:o,verbose:a}=r
|
|
1285
1286
|
if(!a||!this.verbose)return
|
|
1286
|
-
o&&("log"===I||"warn"===I||"info"===I||"error"===I?console[I]("[".concat(this.constructor.name,"] ").concat(o)):console.log("[".concat(this.constructor.name,"] ").concat(o)))}else r&&console.log("[".concat(this.constructor.name,"] ").concat(r))}return!!g&&(g.forEach((e=>{try{e(...t)}catch(i){this.emit(
|
|
1287
|
+
o&&("log"===I||"warn"===I||"info"===I||"error"===I?console[I]("[".concat(this.constructor.name,"] ").concat(o)):console.log("[".concat(this.constructor.name,"] ").concat(o)))}else r&&console.log("[".concat(this.constructor.name,"] ").concat(r))}return!!g&&(g.forEach((e=>{try{e(...t)}catch(i){this.emit(pt,i,{event:A,data:t,callback:e})}})),!0)}},getUserId=()=>{try{const A="wanna-user-id",e=12096e5,t=localStorage.getItem(A)
|
|
1287
1288
|
if(t){const[e,i]=t.split(":")
|
|
1288
|
-
return e&&Number.isFinite(Number(i))?Date.now()>Number(i)?(localStorage.removeItem(A),getUserId()):e:(localStorage.removeItem(A),getUserId())}const i=
|
|
1289
|
-
return localStorage.setItem(A,`${i}:${g}`),i}catch(A){return"anonymous"}},
|
|
1290
|
-
try{t=await
|
|
1289
|
+
return e&&Number.isFinite(Number(i))?Date.now()>Number(i)?(localStorage.removeItem(A),getUserId()):e:(localStorage.removeItem(A),getUserId())}const i=Ge(),g=Date.now()+e
|
|
1290
|
+
return localStorage.setItem(A,`${i}:${g}`),i}catch(A){return"anonymous"}},Zt=Ge(),Xt=getUserId(),getNonGuaranteedEventsParams=async A=>{let e,t={}
|
|
1291
|
+
try{t=await At()}catch(e){A.logError(new Ue(`Event param collection failed due to ${e}`,{cause:e}))}try{i=document.createElement("canvas").getContext("webgl2"),e=(g=i&&i.getExtension("WEBGL_debug_renderer_info"))?i.getParameter(g.UNMASKED_RENDERER_WEBGL):null}catch(e){A.logError(new Ue(`Event param collection failed due to ${e}`,{cause:e}))}var i,g
|
|
1291
1292
|
return{device_model_uah:t.model||"",platform_uah:t.platform||"",os_version_uah:t.platformVersion||"",browser_versions_uah:t.fullVersionList?t.fullVersionList.map((A=>`${A.brand} ${A.version}`)).sort().join("; "):"",webgl_renderer:e||""}}
|
|
1292
|
-
const
|
|
1293
|
+
const $t=
|
|
1293
1294
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1294
|
-
class MessageEmitter extends
|
|
1295
|
+
class MessageEmitter extends Wt{constructor(){var{targetToListenElement:A}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1295
1296
|
super(),this._setDefaultValues({targetToListenElement:A}),this.__handleEvent=this.__handleEvent.bind(this)}_setDefaultValues(){var{targetToListenElement:A=window}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1296
1297
|
this.origin=null,this.targetToPostElement=null,this.targetToListenElement=A}initListener(A){var{origin:e,targetToPostElement:t}=A
|
|
1297
1298
|
return this.targetToPostElement=t,this.origin=e,this.targetToListenElement.addEventListener("message",this.__handleEvent,!1),this}__handleEvent(A){if(this.origin===A.origin||"*"===this.origin){var{data:e}=A
|
|
1298
1299
|
if(e&&e.type){var{type:t,args:i=[]}=e
|
|
1299
1300
|
this.emit(t,...i,A)}}}remoteEmit(A){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
1300
1301
|
try{this.targetToPostElement.postMessage({type:A,args:t},this.origin)}catch(A){0}return this}destroy(){this.targetToListenElement.removeEventListener("message",this.__handleEvent,!1),this.clearAll(),this._setDefaultValues()}}
|
|
1301
|
-
const
|
|
1302
|
+
const Ai=new
|
|
1302
1303
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1303
|
-
class PublicSdkAdapter extends
|
|
1304
|
+
class PublicSdkAdapter extends $t{init(){let{origin:A="*",eventTarget:e=window.parent}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1304
1305
|
return this.initListener({origin:A,targetToPostElement:e}),this}remoteEmitError(A,e,t){t||(t=e,e=null)
|
|
1305
|
-
const i=
|
|
1306
|
-
this.remoteEmit(A,e,i),this.emit("error",i)}},setIfNotNil=(A,e,t)=>(null!=e&&(t[A]=e),t),areSizesEqual=(A,e)=>(null===A||void 0===A?void 0:A.width)===(null===e||void 0===e?void 0:e.width)&&(null===A||void 0===A?void 0:A.height)===(null===e||void 0===e?void 0:e.height),
|
|
1307
|
-
const
|
|
1306
|
+
const i=Ue.toObject(t)
|
|
1307
|
+
this.remoteEmit(A,e,i),this.emit("error",i)}},setIfNotNil=(A,e,t)=>(null!=e&&(t[A]=e),t),areSizesEqual=(A,e)=>(null===A||void 0===A?void 0:A.width)===(null===e||void 0===e?void 0:e.width)&&(null===A||void 0===A?void 0:A.height)===(null===e||void 0===e?void 0:e.height),ei="NEXT",ti="FINISH",ii="FINISH_ALL",gi={next(A){return{type:ei,context:A,delay:arguments.length>1&&void 0!==arguments[1]?arguments[1]:0}},finish(){return{type:ti,delay:arguments.length>0&&void 0!==arguments[0]?arguments[0]:0}},finishAll:()=>({type:ii})}
|
|
1308
|
+
const ri=
|
|
1308
1309
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1309
1310
|
class Pipeline{constructor(A,e,t){this.steps=A.map((A=>{const e=A.runner()
|
|
1310
1311
|
return{step:A,generator:e}})),this.onAfterRenderCallbacks=[],this.onStopCallback=()=>{},this.video=e,this.frame=t,this.persistentContext={}}async init(){const A=[this.frame.init()],e=this.steps.map((A=>{let{step:e,generator:t}=A
|
|
1311
1312
|
return Promise.resolve().then((()=>e.init())).then((A=>(t.next(),A)))})),t=await Promise.all([...A,...e]).then((e=>e.slice(A.length)))
|
|
1312
1313
|
return t.reduce(((A,e)=>e?{...A,...e}:A),{})}reInit(A){return Promise.all(this.steps.map((e=>{let{step:t}=e
|
|
1313
|
-
return Promise.resolve().then((()=>t.reInit(A)))}))).then((A=>A.reduce(((A,e)=>(e&&"object"===typeof e&&!Array.isArray(e)||(e={}),{...A,...e})),{})))}getError(A,e,t){return new
|
|
1314
|
+
return Promise.resolve().then((()=>t.reInit(A)))}))).then((A=>A.reduce(((A,e)=>(e&&"object"===typeof e&&!Array.isArray(e)||(e={}),{...A,...e})),{})))}getError(A,e,t){return new Ue(`Error in a pipline step: ${A}.`,{messageParams:{context:t,step:e.step.constructor.name}})}getInitialContext(){return{video:this.video,frame:this.frame,persistent:this.persistentContext}}async runSteps(){if(!this.running)return
|
|
1314
1315
|
let A=this.getInitialContext()
|
|
1315
1316
|
for(const e of this.steps)try{this.frame.enterStep(e.step)
|
|
1316
1317
|
const t=e.generator.next(A)
|
|
1317
1318
|
if(t.done)return
|
|
1318
1319
|
let i=t.value
|
|
1319
1320
|
if(e.generator.next(),!i)throw this.stop(),this.getError("You forgot to yield context",e,A)
|
|
1320
|
-
switch(i instanceof Promise&&(i=await i),i.delay&&await new Promise((A=>{setTimeout(A,i.delay)})),i.type){case
|
|
1321
|
+
switch(i instanceof Promise&&(i=await i),i.delay&&await new Promise((A=>{setTimeout(A,i.delay)})),i.type){case ei:A={...i.context}
|
|
1321
1322
|
break
|
|
1322
|
-
case
|
|
1323
|
-
case
|
|
1324
|
-
default:throw this.getError(`Unexpected type "${i.type}"`,e,A)}}catch(A){throw new
|
|
1323
|
+
case ti:return!0
|
|
1324
|
+
case ii:return this.stop(),!0
|
|
1325
|
+
default:throw this.getError(`Unexpected type "${i.type}"`,e,A)}}catch(A){throw new Ue(`Step ${e.step.constructor.name} failed to execute`,{cause:A})}}run(){let A
|
|
1325
1326
|
if(this.running)return this.runningPromise
|
|
1326
1327
|
this.running=!0
|
|
1327
1328
|
return this.runningPromise=(async()=>{for(A=performance.now();this.running;){this.stepsPromise=this.runSteps(),await this.stepsPromise
|
|
@@ -1346,38 +1347,39 @@ DynamicFrame_defineProperty(this,"proxiedMethods",["debugGrayframe","debugNnInpu
|
|
|
1346
1347
|
const t=A.slice(e).findIndex((A=>A.isSupported()))
|
|
1347
1348
|
if(t<0)throw new Error("No supported frames")
|
|
1348
1349
|
return e+t}_createProxiedProps(A){A.forEach((A=>{Object.defineProperty(this,A,{get(){return this.frame[A]}})}))}_createProxiedMethods(A){A.forEach((A=>{this[A]=function(){return this.frame[A].apply(this.frame,arguments)}}))}async init(){let A=!1
|
|
1349
|
-
for(;!A;)try{await this.frame.init(),A=!0}catch(A){this.logger.logError(new
|
|
1350
|
-
for(;!e;)try{await this.frame.next(A),e=!0}catch(A){this.logger.logError(new
|
|
1351
|
-
const e=this.frame
|
|
1352
|
-
|
|
1350
|
+
for(;!A;)try{await this.frame.init(),A=!0}catch(A){this.logger.logError(new Ue(`Failed to init "${this.frame.name}" frame`,{cause:A,params:{component:this.name}})),this._createNextFrame(this.frames,this.frameIndex+1)}}async next(A){let e=!1
|
|
1351
|
+
for(;!e;)try{await this.frame.next(A),e=!0}catch(A){this.logger.logError(new Ue(`Failed to get frame with "${this.frame.name}"`,{cause:A,params:{component:this.name}}))
|
|
1352
|
+
const e=this.frame,t=this.frameIndex+1
|
|
1353
|
+
if(!(t<this.frames.length))throw new Ue("No frame implementations left, giving up.",{cause:A})
|
|
1354
|
+
this._createNextFrame(this.frames,t),await this.init(),this.frame.acceptState(e),e.delete()}}static isSupported(){return!0}}DynamicFrame_defineProperty(DynamicFrame,"name","DynamicFrame")
|
|
1353
1355
|
|
|
1354
1356
|
;// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
1355
1357
|
const autoPlayClickVideo=A=>{let{playButton:e,video:t}=A
|
|
1356
1358
|
return new Promise(((A,i)=>{const listener=async()=>{try{await t.play(),A()}catch(A){i(A)}finally{e.removeEventListener("click",listener)}}
|
|
1357
|
-
try{e.style.display="initial",e.addEventListener("click",listener),e.click()}catch(A){i(A),e.removeEventListener("click",listener)}finally{e.style.display="none"}}))},utils_video_useAutoPlayClickVideo=()=>
|
|
1359
|
+
try{e.style.display="initial",e.addEventListener("click",listener),e.click()}catch(A){i(A),e.removeEventListener("click",listener)}finally{e.style.display="none"}}))},utils_video_useAutoPlayClickVideo=()=>nt&&Et,Ii=autoPlayClickVideo,getWebglCanvas=()=>document.getElementById("three-canvas"),getDebugCanvasesWrapper=()=>document.getElementById("debug-canvases"),getCurrentBackground=()=>document.getElementsByClassName("current-background")[0],getBackgroundCanvases=()=>[...document.querySelectorAll("#background-canvases > canvas")],getPlayButton=()=>document.getElementById("play-button"),getWindow=()=>window
|
|
1358
1360
|
__webpack_require__("19b450ff8abff61be1cd"),__webpack_require__("b3b040e9ce3071c7bbad")
|
|
1359
|
-
var
|
|
1361
|
+
var oi="CameraPermissionDeniedError"
|
|
1360
1362
|
|
|
1361
1363
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1362
|
-
class CameraPermissionDeniedError extends Error{constructor(A){super(`Camera permission denied: ${A.message}`),this.name
|
|
1364
|
+
class CameraPermissionDeniedError extends Error{constructor(A){super(`Camera permission denied: ${A.message}`),this.name=oi}}
|
|
1363
1365
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1364
|
-
class CameraHardwareError extends Error{constructor(A){super(`Camera hardware error: ${A}`),this.name="CameraHardwareError"}}var
|
|
1365
|
-
return A&&
|
|
1366
|
+
class CameraHardwareError extends Error{constructor(A){super(`Camera hardware error: ${A}`),this.name="CameraHardwareError"}}var ai=__webpack_require__("79f0231592bf2e084a8a"),si=__webpack_require__("6c753cb75fab3b780c2d"),isVersionGreaterOrEquals=(A,e)=>{var t=!1
|
|
1367
|
+
return A&&si.validate(A)&&(t=si.compare(A,e,">=")),t}
|
|
1366
1368
|
|
|
1367
1369
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1368
|
-
const
|
|
1369
|
-
var
|
|
1370
|
-
|
|
1371
|
-
const
|
|
1372
|
-
return((A,e,t)=>!Object.prototype.hasOwnProperty.call(t||{},A)||t[A]===e)(t,i,A)})),
|
|
1370
|
+
const Bi="15.0",Qi=Et&&(Ei=Bi,Ci=!1,(ni=st)&&si.validate(ni)&&(Ci=si.compare(ni,Ei,"=")),Ci)
|
|
1371
|
+
var ni,Ei,Ci
|
|
1372
|
+
Et&&isVersionGreaterOrEquals(st,Bi)&&isVersionGreaterOrEquals(st,"16.0")
|
|
1373
|
+
const ci=Et&&isVersionGreaterOrEquals(st,"16.2"),hi=Et&&isVersionGreaterOrEquals(st,"16.4"),di=Et&&isVersionGreaterOrEquals(st,"17.0"),isSimdAvailable=async()=>(Ct||di)&&await(0,ai.simd)(),matchDevicePredicate=A=>[["vendor",ct],["model",ht],["browser",lt]].every((e=>{let[t,i]=e
|
|
1374
|
+
return((A,e,t)=>!Object.prototype.hasOwnProperty.call(t||{},A)||t[A]===e)(t,i,A)})),li=[{vendor:"none",model:"ANA-NX9",browser:"Chrome",getCameraId:A=>{var e
|
|
1373
1375
|
return null===(e=A.filter((A=>A.label.includes("facing back"))).at(-1))||void 0===e?void 0:e.deviceId}}]
|
|
1374
|
-
const
|
|
1376
|
+
const ui=new class Camera{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1375
1377
|
this.stream=null,this.width=null,this.height=null,this.deviceId=null,this.devicesList=[],this.setOptions(A)}async __getStreamByCameraId(A){return this.deviceId===A&&this.stream?this.stream:this.init({cameraId:A})}getDimensionsConstraints(A){let{keyword:e}=A
|
|
1376
1378
|
return{width:{[e]:this.width},height:{[e]:this.height}}}combineConstraints(A){let{cameraId:e,facingMode:t,keyword:i}=A,g=this.getDimensionsConstraints({keyword:i})
|
|
1377
1379
|
return g=setIfNotNil("facingMode",t,g),g=setIfNotNil("deviceId",e,g),{video:g,audio:!1}}getDefaultCameraId(){var A,e
|
|
1378
1380
|
let t
|
|
1379
|
-
const i=null===(A=
|
|
1380
|
-
return i?t=i(this.devicesList):
|
|
1381
|
+
const i=null===(A=li.find((A=>matchDevicePredicate(A))))||void 0===A?void 0:A.getCameraId,g=null===(e=this.devicesList.find((A=>A.label.includes("0, facing back"))))||void 0===e?void 0:e.deviceId
|
|
1382
|
+
return i?t=i(this.devicesList):Ct&&g&&(t=g),t}setCameraId(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:""
|
|
1381
1383
|
this.deviceId=A}async getDefaultCameraConstraints(A){let{keyword:e,facingMode:t}=A
|
|
1382
1384
|
const i=this.getDefaultCameraId()
|
|
1383
1385
|
return i?this.combineConstraints({cameraId:i,keyword:e,facingMode:t}):this.combineConstraints({facingMode:{ideal:t||"environment"},keyword:e})}async getConstraints(A){let{cameraId:e,keyword:t,facingMode:i}=A
|
|
@@ -1385,7 +1387,7 @@ return e?this.combineConstraints({cameraId:e,keyword:t,facingMode:i}):this.getDe
|
|
|
1385
1387
|
try{return await navigator.mediaDevices.getUserMedia(A)}catch(A){if("NotAllowedError"===A.name)throw new CameraPermissionDeniedError(A)
|
|
1386
1388
|
if("NotReadableError"===A.name)throw new CameraHardwareError(A)
|
|
1387
1389
|
throw A}}async tryToGetStream(A){let{cameraId:e,facingMode:t}=A
|
|
1388
|
-
return await new Promise((async(A,i)=>{let g,r,I;(
|
|
1390
|
+
return await new Promise((async(A,i)=>{let g,r,I;(Bt||Qt)&&(I=setTimeout((()=>i(new Error("Too long initializing of the stream"))),2e4))
|
|
1389
1391
|
try{r=await this.getConstraints({keyword:"exact",cameraId:e,facingMode:t}),g=await this.getUserMedia(r)}catch(A){if(A instanceof CameraPermissionDeniedError)return void i(A)
|
|
1390
1392
|
try{r=await this.getConstraints({keyword:"ideal",cameraId:e,facingMode:t}),g=await this.getUserMedia(r)}catch(A){return void i(A)}}finally{clearTimeout(I)}A(g)}))}getDeviceIdFromStream(A){const e=A.getVideoTracks(),t=e&&e[0],i=t&&t.getSettings()
|
|
1391
1393
|
return i&&i.deviceId}async areLabelsEmpty(){return(await this.getDevicesList()||[]).every((A=>{let{label:e}=A
|
|
@@ -1393,13 +1395,13 @@ return!e||!/(back|front)/.test(e)}))}async init(A){let e
|
|
|
1393
1395
|
const t=(null===A||void 0===A?void 0:A.cameraId)||this.deviceId
|
|
1394
1396
|
let i=t
|
|
1395
1397
|
const g=(null===A||void 0===A?void 0:A.facingMode)||null
|
|
1396
|
-
if(0===this.devicesList.length){e=await this.tryToGetStream({cameraId:t,facingMode:g}),this.setStream(e),await this.setDevicesList(),i=this.validateCameraId(t),i||!
|
|
1398
|
+
if(0===this.devicesList.length){e=await this.tryToGetStream({cameraId:t,facingMode:g}),this.setStream(e),await this.setDevicesList(),i=this.validateCameraId(t),i||!hi||di||(i=this.devicesList[1].deviceId,e=await this.tryToGetStream({cameraId:i,facingMode:g}),this.setStream(e))
|
|
1397
1399
|
const A=this.getDeviceIdFromStream(e)
|
|
1398
1400
|
if(!t||i===A)return this.setCameraId(A),e}if(e=await this.tryToGetStream({cameraId:i,facingMode:g}),!e)throw new Error("We could not initialize the stream...")
|
|
1399
1401
|
return this._storeStream(e),this.validatePageRepaints(),e}_storeStream(A){const e=this.getDeviceIdFromStream(A)
|
|
1400
1402
|
this.setCameraId(e),this.setStream(A)}async switchTo(A){let{facingMode:e}=A
|
|
1401
1403
|
try{const A=this.combineConstraints({facingMode:e,keyword:"exact"}),t=await this.getUserMedia(A)
|
|
1402
|
-
return this._storeStream(t),t}catch(A){throw new
|
|
1404
|
+
return this._storeStream(t),t}catch(A){throw new Ue(`Failed to switch facing mode to '${e}'`,{cause:A})}}validatePageRepaints(){const A=setTimeout((()=>{emit(nA)}),2e3)
|
|
1403
1405
|
requestAnimationFrame((()=>{clearTimeout(A)}))}setOptions(A){this.width=(null===A||void 0===A?void 0:A.width)||1280,this.height=(null===A||void 0===A?void 0:A.height)||720,this.deviceId=(null===A||void 0===A?void 0:A.deviceId)||null}stopStream(){this.stream&&(this.stream.getTracks().forEach((A=>A.stop())),this.setStream(null))}setStream(A){this.stream=A}async getStream(){let{cameraId:A}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1404
1406
|
return A?this.__getStreamByCameraId(A):this.stream?this.stream:this.init()}hasStream(){return Boolean(this.stream)}cameraIdExists(A){return this.devicesList.some((e=>e.deviceId===A))}validateCameraId(A){return A&&!this.cameraIdExists(A)?null:A}async setDevicesList(){this.stream
|
|
1405
1407
|
const A=(await navigator.mediaDevices.enumerateDevices()).filter((A=>"videoinput"===A.kind))
|
|
@@ -1423,10 +1425,10 @@ if("object"!=typeof i)return i
|
|
|
1423
1425
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
1424
1426
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
1425
1427
|
(A,"string")
|
|
1426
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
1428
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const wi=getPlayButton()
|
|
1427
1429
|
class BaseFrame{constructor(A){let{nn:e,video:t,libInjector:i,resetStream:g,onSizeChange:r,enableFrameRotation:I=!1}=A
|
|
1428
1430
|
BaseFrame_defineProperty(this,"_acceptedProps",["sizeChanged","_currentStep","_index"]),this.name=this.constructor.name,[this._frame,this._prevFrame]=getBackgroundCanvases(),this.webglCanvas=getWebglCanvas(),this.nn=e,this.video=t,this.libInjector=i,this.resetStream=g,this._onSizeChange=r,this.width=0,this.height=0,this.sizeChanged=!1,this.bbox=[0,0,0,0],this.scaledBbox=[0,0,0,0],this.enableFrameRotation=I,this._currentStep=null,this._frameRate=0,this._timeLastCaptured=0,this._index=-1,this.cv=null,this._init=onceSuccess(this._init)}async _init(){await Promise.all([this.libInjector.getOpenCv()]).then((A=>{let[{cv:e}]=A
|
|
1429
|
-
this.cv=e}))}async init(){await Promise.race([this._init().catch((A=>{emit(c,
|
|
1431
|
+
this.cv=e}))}async init(){await Promise.race([this._init().catch((A=>{emit(c,Ue.toObject(A))})),Promise.resolve({})])}setStream(A){if(A){const e=ui.getStreamDetails(A)
|
|
1430
1432
|
this.shouldFlipX="user"===e.settings.facingMode}}setSize(A){let{width:e,height:t}=A
|
|
1431
1433
|
areSizesEqual(this,{width:e,height:t})?this.sizeChanged=!1:(this.sizeChanged=!0,this.width=e,this.height=t,this.setBbox([0,0,e,t]),this.onSizeChange(),this._onSizeChange({width:e,height:t}))}setBbox(A){this.bbox=A||[0,0,this.width,this.height],this.scaledBbox=scaleBboxToRatio(this.bbox,this.getDownscaledSize())}requiresRotation(A){const{width:e,height:t}=A||this
|
|
1432
1434
|
return this.enableFrameRotation&&Boolean(t>e)}enterStep(A){this._currentStep&&Object.keys(this._currentStep.performanceTime).filter((A=>{if(!this._currentStep.performanceTime[A].end)return this._currentStep.stopTimer(A),A.startsWith("p__")||(this._currentStep.performanceTime["p__"+A]=this._currentStep.performanceTime[A],delete this._currentStep.performanceTime[A]),!0})).map((e=>{e.startsWith("p__")?A.startTimer(e):A.startTimer("p__"+e)})),this._currentStep=A}startTimer(A){this._currentStep.startTimer(A)}stopTimer(A){this._currentStep.stopTimer(A)}profile(A,e){if(!this._currentStep)return e()
|
|
@@ -1434,8 +1436,8 @@ const t=this._currentStep
|
|
|
1434
1436
|
this._index
|
|
1435
1437
|
let i
|
|
1436
1438
|
t.startTimer(A)
|
|
1437
|
-
try{i=e()}catch(e){throw t.stopTimer(A),new
|
|
1438
|
-
checkReady()}))}async _checkVideo(){if(this.video.paused)try{await this.video.play().catch((()=>this.video.play())).catch((A=>autoPlayClickVideo({playButton:
|
|
1439
|
+
try{i=e()}catch(e){throw t.stopTimer(A),new Ue(`Failed to profile ${A}`,{cause:e})}return i instanceof Promise?i.catch((e=>{throw new Ue(`Failed to profile ${A}`,{cause:e})})).finally((()=>{t===this._currentStep?t.stopTimer(A):A.startsWith("p__")?this._currentStep.stopTimer(A):this._currentStep.stopTimer("p__"+A)})):(t.stopTimer(A),i)}_haveEnoughData(){return this.video.readyState===this.video.HAVE_ENOUGH_DATA}_isFrameRateIncreased(){return!!this._frameRate&&performance.now()-this._timeLastCaptured<1e3/this._frameRate}_isFrameReady(){return this._haveEnoughData()&&!this._isFrameRateIncreased()}_waitForFrame(){return new Promise((A=>{const checkReady=()=>{this._isFrameReady()?A():setTimeout(checkReady,0)}
|
|
1440
|
+
checkReady()}))}async _checkVideo(){if(this.video.paused)try{await this.video.play().catch((()=>this.video.play())).catch((A=>autoPlayClickVideo({playButton:wi,video:this.video})))}catch(A){throw new Ue("Failed to resume video.",{cause:A})}}async checkStream(){throw new Error("Not implemented")}async _checkStream(A){if(!A)return this.resetStream()
|
|
1439
1441
|
const e=A.getVideoTracks()[0]
|
|
1440
1442
|
return A.active&&e&&!e.muted?A:this.resetStream()}async next(A){await this._init(),A||(await this.profile("checkStream",(()=>this.checkStream())),await this.profile("waitForFrame",(()=>this._waitForFrame()))),this._timeLastCaptured=performance.now(),this._index++
|
|
1441
1443
|
const e=await this._requestFrame(A)
|
|
@@ -1451,13 +1453,13 @@ e.beginPath(),e.lineWidth="2",e.strokeStyle="red",e.rect(t,i,g,r),e.stroke()}deb
|
|
|
1451
1453
|
this.debugImage(A,e)}debugImage(A,e){this.cv.imshow(A,e)}delete(){}acceptState(A){this._acceptedProps.forEach((e=>{this[e]=A[e]})),this.width=0,this.height=0,this.sizeChanged=!0}getDebugData(){return{frame:this.name,mirroredX:this.shouldFlipX}}static isSupported(){return!1}_bgrU8MatToGrayMat(A,e){this.cv.cvtColor(A,e,this.cv.COLOR_BGR2GRAY)}_bgrU8MatToBgrF32Mat(A,e){A.convertTo(e,this.cv.CV_32F,1/255,0)}_matToTensorData(A){return{data:A.data32F,width:A.cols,height:A.rows}}}__webpack_require__("52b07ba05eba8f693663"),__webpack_require__("4203b339b536279ea291"),__webpack_require__("cbaf2240d78c47f0f156"),__webpack_require__("8e1a223b4032ef8649c8"),__webpack_require__("97736dd946dfb5b845a1"),__webpack_require__("8eaa32b36ac642742c6d"),__webpack_require__("316876464663ec88817e")
|
|
1452
1454
|
|
|
1453
1455
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1454
|
-
const
|
|
1456
|
+
const Di="I420",fi="NV12",mi="RGBA",pi="RGBX",yi="BGRA",Ri="BGRX",Mi={I420:"COLOR_YUV2BGR_I420",NV12:"COLOR_YUV2BGR_I420",RGBA:"COLOR_RGBA2BGR",RGBX:"COLOR_RGBA2BGR",BGRA:"COLOR_BGRA2BGR",BGRX:"COLOR_BGRA2BGR"}
|
|
1455
1457
|
|
|
1456
1458
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1457
1459
|
function processFormat(A,e){let{yuvCallback:t,rgbaCallback:i}=e
|
|
1458
|
-
switch(A){case
|
|
1460
|
+
switch(A){case Di:case fi:t()
|
|
1459
1461
|
break
|
|
1460
|
-
case
|
|
1462
|
+
case mi:case pi:case yi:case Ri:i()
|
|
1461
1463
|
break
|
|
1462
1464
|
default:throw new Error(`Unsupported format "${A}".`)}}function EncodedVideoFrame_defineProperty(A,e,t){return(e=function EncodedVideoFrame_toPropertyKey(A){var e=function EncodedVideoFrame_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
1463
1465
|
var t=A[Symbol.toPrimitive]
|
|
@@ -1477,18 +1479,18 @@ const{fullResSize:{width:g,height:r},downscaledSize:{width:I,height:o},channels:
|
|
|
1477
1479
|
return e?e.create(t,i,g):e=new this.cv.Mat(t,i,g),e}))}_frameToYUV(A,e){const{width:t,height:i}=A.visibleRect
|
|
1478
1480
|
this.matFullResEncoded?this.matFullResEncoded.create(3*i/2,t,this.cv.CV_8UC1):this.matFullResEncoded=new this.cv.Mat(3*i/2,t,this.cv.CV_8UC1),this.tmpCanvas=this.tmpCanvas||document.createElement("canvas"),this.tmpCanvas.width=t,this.tmpCanvas.height=i,this.tmpCanvas.getContext("2d").drawImage(A,0,0)
|
|
1479
1481
|
const g=this.cv.imread(this.tmpCanvas)
|
|
1480
|
-
switch(this.cv.cvtColor(g,this.matFullResEncoded,this.cv.COLOR_RGBA2YUV_I420),g.delete(),e){case
|
|
1481
|
-
case
|
|
1482
|
+
switch(this.cv.cvtColor(g,this.matFullResEncoded,this.cv.COLOR_RGBA2YUV_I420),g.delete(),e){case Di:return
|
|
1483
|
+
case fi:{const{data:A}=this.matFullResEncoded,e=t*i,g=t*i/4,r=new Uint8Array(t*i/2)
|
|
1482
1484
|
for(let t=0;t<g;++t)r[2*t]=A[e+t],r[2*t+1]=A[e+g+t]
|
|
1483
1485
|
A.set(r,e)
|
|
1484
1486
|
break}default:throw new Error(`Fallback to "${e}" is not supported.`)}}_mirrorEncodedData(){processFormat(this.format,{yuvCallback:()=>this._mirrorYUV(this.matFullResNonMirrored,this.matFullResEncoded,((A,e)=>flipX(A,e,this.cv))),rgbaCallback:()=>flipX(this.matFullResNonMirrored,this.matFullResEncoded,this.cv)})}_acceptBuffer(A,e){e?this.matFullResNonMirrored.data.set(new Uint8Array(A)):this.matFullResEncoded.data.set(new Uint8Array(A)),e&&this._mirrorEncodedData()}async _acceptVideoFrame(A,e){await A.copyTo(e?this.matFullResNonMirrored.data:this.matFullResEncoded.data),e&&this._mirrorEncodedData()}async acceptFrameData(A,e){let{buffer:t,format:i,frame:g}=A
|
|
1485
1487
|
const{height:r,width:I}=g.visibleRect
|
|
1486
1488
|
if(t)return this._updateSizes({format:i,height:r,width:I}),void this._acceptBuffer(t,e)
|
|
1487
1489
|
let o=!1
|
|
1488
|
-
this.FALLBACK_NON_YUV_TO_YUV_FORMAT&&!function isYUV(A){return A===
|
|
1490
|
+
this.FALLBACK_NON_YUV_TO_YUV_FORMAT&&!function isYUV(A){return A===Di||A===fi}(g.format)&&this.profile("slow-fallback-for-nv12-frame",(()=>{this._frameToYUV(g,this.FALLBACK_NON_YUV_TO_YUV_FORMAT)
|
|
1489
1491
|
const{timestamp:A,visibleRect:{width:e,height:t}}=g
|
|
1490
1492
|
g=new VideoFrame(this.matFullResEncoded.data,{format:this.FALLBACK_NON_YUV_TO_YUV_FORMAT,codedWidth:e,codedHeight:t,timestamp:A}),o=!0})),({format:i}=g),this._updateSizes({format:i,height:r,width:I})
|
|
1491
|
-
try{await this.profile("copyTo",(async()=>{await this._acceptVideoFrame(g,e)})),o&&g.close()}catch(A){if(!this.FALLBACK_FORMAT_FOR_COPY_TO||A)throw new
|
|
1493
|
+
try{await this.profile("copyTo",(async()=>{await this._acceptVideoFrame(g,e)})),o&&g.close()}catch(A){if(!this.FALLBACK_FORMAT_FOR_COPY_TO||A)throw new Ue("Failed to copy frame to mat",{cause:A||new Error("undefined error from copyTo")})
|
|
1492
1494
|
this.profile("slow-fallback-for-copyTo",(()=>{this._frameToYUV(g,this.FALLBACK_FORMAT_FOR_COPY_TO),this.format=this.FALLBACK_FORMAT_FOR_COPY_TO}))}}_extractI420UV(A,e){let{width:t,height:i}=e
|
|
1493
1495
|
const g=A.roi(new this.cv.Rect(0,i,t,i/2)),r=g.reshape(1,1)
|
|
1494
1496
|
g.delete()
|
|
@@ -1498,13 +1500,13 @@ return r.delete(),[o,a]}_extractNV12UV(A,e){let{width:t,height:i}=e
|
|
|
1498
1500
|
const g=A.roi(new this.cv.Rect(0,i,t,i/2)),r=g.reshape(2,0)
|
|
1499
1501
|
return g.delete(),this.uvVector=this.uvVector||new this.cv.MatVector,this.cv.split(r,this.uvVector),r.delete(),[this.uvVector.get(0),this.uvVector.get(1)]}_extractUV(A,e){let{width:t,height:i,format:g}=e
|
|
1500
1502
|
var r
|
|
1501
|
-
if(g===
|
|
1502
|
-
if(g===
|
|
1503
|
+
if(g===Di)return null===(r=this.uvVector)||void 0===r||r.delete(),this.uvVector=null,this._extractI420UV(A,{width:t,height:i})
|
|
1504
|
+
if(g===fi)return this._extractNV12UV(A,{width:t,height:i})
|
|
1503
1505
|
throw new Error(`Unsupported format "${g}".`)}_extractYUV(A,e){let{width:t,height:i,format:g}=e
|
|
1504
1506
|
const r=A.roi(new this.cv.Rect(0,0,t,i)),[I,o]=this._extractUV(A,{width:t,height:i,format:g})
|
|
1505
|
-
return[r,I,o]}_processYUV(A,e,t,i,g){const{width:r,height:I}=t,{width:o,height:a}=i,[s,B,n]=this._extractYUV(A,{width:r,height:I,format:this.format}),[E,C,c]=this._extractYUV(e,{width:o,height:a,format:
|
|
1507
|
+
return[r,I,o]}_processYUV(A,e,t,i,g){const{width:r,height:I}=t,{width:o,height:a}=i,[s,B,n]=this._extractYUV(A,{width:r,height:I,format:this.format}),[E,C,c]=this._extractYUV(e,{width:o,height:a,format:Di});[[s,E],[B,C],[n,c]].forEach((A=>{let[e,t]=A
|
|
1506
1508
|
g(e,t),e.delete(),t.delete()}))}_mirrorYUV(A,e){this._processYUV(A,e,this,this,((A,e)=>{flipX(A,e,this.cv)}))}_downscaleYUV(A,e,t){this._processYUV(A,e,this,this.getDownscaledSize(),t)}convertToBGR(A){processFormat(this.format,{yuvCallback:()=>this._downscaleYUV(this.matFullResEncoded,this.matDownscaledEncoded,((A,e)=>resize(A,e,this.cv))),rgbaCallback:()=>resize(this.matFullResEncoded,this.matDownscaledEncoded,this.cv)}),this._convertColor(this.matDownscaledEncoded,A)}convertBboxToBGR(A,e){processFormat(this.format,{yuvCallback:()=>this._downscaleYUV(this.matFullResEncoded,this.matDownscaledEncoded,((A,t)=>{const i=this.width/A.cols,g=this.height/A.rows
|
|
1507
|
-
resizeBbox(A,t,[Math.floor(e[0]/i),Math.floor(e[1]/g),Math.ceil(e[2]/i),Math.ceil(e[3]/g)],this.cv)})),rgbaCallback:()=>resizeBbox(this.matFullResEncoded,this.matDownscaledEncoded,e,this.cv)}),this._convertColor(this.matDownscaledEncoded,A)}_convertColor(A,e){this.cv.cvtColor(A,e,this.cv[
|
|
1509
|
+
resizeBbox(A,t,[Math.floor(e[0]/i),Math.floor(e[1]/g),Math.ceil(e[2]/i),Math.ceil(e[3]/g)],this.cv)})),rgbaCallback:()=>resizeBbox(this.matFullResEncoded,this.matDownscaledEncoded,e,this.cv)}),this._convertColor(this.matDownscaledEncoded,A)}_convertColor(A,e){this.cv.cvtColor(A,e,this.cv[Mi[this.format]])}}
|
|
1508
1510
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1509
1511
|
function drawImage(A,e,t,i){arguments.length>4&&void 0!==arguments[4]&&arguments[4]&&(A.translate(t,0),A.scale(-1,1)),A.drawImage(e,0,0,t,i)}function MediaStreamTrackProcessorFrame_defineProperty(A,e,t){return(e=function MediaStreamTrackProcessorFrame_toPropertyKey(A){var e=function MediaStreamTrackProcessorFrame_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
1510
1512
|
var t=A[Symbol.toPrimitive]
|
|
@@ -1515,9 +1517,9 @@ throw new TypeError("@@toPrimitive must return a primitive value.")}return("stri
|
|
|
1515
1517
|
(A,"string")
|
|
1516
1518
|
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class MediaStreamTrackProcessorFrame extends BaseFrame{constructor(){super(...arguments),MediaStreamTrackProcessorFrame_defineProperty(this,"fullscreenContextAttributes",{alpha:!1}),this.track=null,this.reader=null,this.promise=null,this.matFullResEncoded=null,this.matDownscaledEncoded=null,this.matDownscaledRgbaU8=null,this.matDownscaledBgrF32=null,this.matDownscaledBboxBgrF32=null,this.matDownscaledRotated=null,this.matDownscaledBboxBgrU8=null,this.matDownscaledGray=null,this.matricesInitialized=!1,this.getDownscaledBgrU8Mat=BaseFrame.cachePerFrame(this.getDownscaledBgrU8Mat),this.getDownscaledBboxBgrU8Mat=BaseFrame.cachePerFrame(this.getDownscaledBboxBgrU8Mat),this._init=onceSuccess(this._init)}async _init(){await super._init(),this.encodedVideoFrame=new EncodedVideoFrame({cv:this.cv,getDownscaledSize:this.getDownscaledSize.bind(this),profile:this.profile.bind(this)})}setStream(A){super.setStream(A),this.stream=A}isTrackValid(A){const e=null===A||void 0===A?void 0:A.getVideoTracks()[0]
|
|
1517
1519
|
return Boolean(e&&!e.muted)}async captureVideoStream(){const A=this.video.captureStream()
|
|
1518
|
-
return this.isTrackValid(A)?A:(await
|
|
1520
|
+
return this.isTrackValid(A)?A:(await ft(50),this.captureVideoStream())}async checkStream(){if(!this.stream){let A=null
|
|
1519
1521
|
if(this.video.srcObject)A=this.video.srcObject
|
|
1520
|
-
else if(this.video.src&&(A=await Promise.race([this.captureVideoStream(),
|
|
1522
|
+
else if(this.video.src&&(A=await Promise.race([this.captureVideoStream(),ft(500)]),!A))throw new Error("Failed to get stream from video.")
|
|
1521
1523
|
this.setStream(A)}if(this.video.srcObject&&(this._drawBackground(this.video,{width:this.video.videoWidth,height:this.video.videoHeight}),this._showFrame(),this.video.srcObject=null),this.video.src)await this._checkVideo()
|
|
1522
1524
|
else{const A=await this._checkStream(this.stream)
|
|
1523
1525
|
this.setStream(A)}const A=this.stream.getVideoTracks()[0]
|
|
@@ -1525,7 +1527,8 @@ this.track!==A&&(this.processor=new MediaStreamTrackProcessor({track:A}),this.re
|
|
|
1525
1527
|
const{width:i,height:g}=this.getDownscaledSize({width:e,height:t});[this.matDownscaledRgbaU8,this.matDownscaledBgrU8,this.matDownscaledBboxBgrU8,this.matDownscaledBgrF32,this.matDownscaledBboxBgrF32,this.matDownscaledRotated,this.matDownscaledGray]=[[this.matDownscaledRgbaU8,[g,i],this.cv.CV_8UC4],[this.matDownscaledBgrU8,[g,i],this.cv.CV_8UC3],[this.matDownscaledBboxBgrU8,[g,i],this.cv.CV_8UC3],[this.matDownscaledBgrF32,[g,i],this.cv.CV_32FC3],[this.matDownscaledBboxBgrF32,[g,i],this.cv.CV_32FC3],[this.matDownscaledRotated,[i,g],this.cv.CV_32FC3],[this.matDownscaledGray,[g,i],this.cv.CV_8UC1]].map((A=>{let[e,[t,i],g]=A
|
|
1526
1528
|
return e?e.create(t,i,g):e=new this.cv.Mat(t,i,g),e}))}async getFrameData(A){var e
|
|
1527
1529
|
this.promise&&await this.onBeforeRender(),null===(e=this.background)||void 0===e||e.close(),this.background=null
|
|
1528
|
-
let{value:t,done:i}=await this.profile("read",(async()=>{try{return await this.reader.read()}catch(A){throw new
|
|
1530
|
+
let{value:t,done:i}=await this.profile("read",(async()=>{try{return await this.reader.read()}catch(A){throw new Ue("Failed to read frame.",{cause:A})}}))
|
|
1531
|
+
if(!t)throw new Ue("Cannot read frame. Perhaps camera permissions were revoked.")
|
|
1529
1532
|
return{frame:t}}async readFrameData(A){const{frame:e}=A,t=e.visibleRect
|
|
1530
1533
|
return this.matricesInitialized&&areSizesEqual(this.encodedVideoFrame,t)||(this.preinitMatrices(t),this.matricesInitialized=!0),await this.encodedVideoFrame.acceptFrameData(A,this.shouldFlipX),t}async _requestFrame(A){if(A)throw new Error("eval is not supported yet");[this._frame,this._prevFrame]=[this._prevFrame,this._frame]
|
|
1531
1534
|
const e=await this.getFrameData(A),{frame:t}=e
|
|
@@ -1603,11 +1606,11 @@ if("object"!=typeof i)return i
|
|
|
1603
1606
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
1604
1607
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1605
1608
|
(A,"string")
|
|
1606
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
1609
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Fi=getDebugCanvasesWrapper(),Ni=document.getElementById("interactions-layer")
|
|
1607
1610
|
!
|
|
1608
1611
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
1609
|
-
function stopInAppDefaultGestures(A){function preventDefault(A){A.preventDefault()}A.addEventListener("touchstart",preventDefault),A.addEventListener("touchmove",preventDefault)}(
|
|
1610
|
-
const
|
|
1612
|
+
function stopInAppDefaultGestures(A){function preventDefault(A){A.preventDefault()}A.addEventListener("touchstart",preventDefault),A.addEventListener("touchmove",preventDefault)}(Ni)
|
|
1613
|
+
const Si=class Step{constructor(){Step_defineProperty(this,"debug",!1),Step_defineProperty(this,"sideToColor",{left:"red",right:"blue"}),this.timeSpent=null,this.performanceTime={}}init(){return Promise.resolve()}reInit(A){return Promise.resolve()}memClear(A){A&&A.delete()}clearTimer(){Object.keys(this.performanceTime).forEach((A=>{this.performanceTime[A].end&&delete this.performanceTime[A]}))}startTimer(A){this.performanceTime[A]={start:+Date.now(),end:null}}stopTimer(A){var e
|
|
1611
1614
|
this.performanceTime[A]||(A="p__"+A)
|
|
1612
1615
|
const t=+Date.now(),i=(null===(e=this.performanceTime[A])||void 0===e?void 0:e.start)||t
|
|
1613
1616
|
this.performanceTime[A]={start:i,end:t,total:t-i}}removeTimer(A){this.performanceTime[A]={}}setFitDimensions(A,e){let{width:t,height:i}=e
|
|
@@ -1620,7 +1623,7 @@ if("undefined"!==typeof OffscreenCanvas)return new OffscreenCanvas(A,e)
|
|
|
1620
1623
|
const t=document.createElement("canvas")
|
|
1621
1624
|
return t.width=A,t.height=e,t}getDebugCanvas(A,e,t){const i=`${this.constructor.name}_${A}`
|
|
1622
1625
|
let g=document.getElementById(i)
|
|
1623
|
-
return g||(g=document.createElement("canvas"),g.id=i,
|
|
1626
|
+
return g||(g=document.createElement("canvas"),g.id=i,Fi.appendChild(g)),g.style.display="initial",e&&(g.width=e.width,g.height=e.height,t&&(g.style.width=`${e.width}px`,g.style.height=`${e.height}px`)),g}clearCanvas(A){A.getContext("2d").clearRect(0,0,A.width,A.height)}min(A,e){return A<e?A:e}max(A,e){return A>e?A:e}debugKeypointsFromContext(A){const e=this.getDebugCanvas("nn-keypoints",A.frame),t=e.getContext("2d"),i={left:[0,40],right:[670,40]}
|
|
1624
1627
|
this.clearCanvas(e),["left","right"].forEach((g=>{A.objects[g].exists
|
|
1625
1628
|
{const e=A.objects[g].presence.toFixed(1),[r,I]=i[g]
|
|
1626
1629
|
t.font="40px serif",t.fillStyle=this.sideToColor[g],t.fillText(e,r,I)}const r=A.objects[g].keypoints,I=A.objects[g].keypointsPresence
|
|
@@ -1645,10 +1648,10 @@ g.fillStyle=t[e]||"black",g.beginPath(),r>0&&I>0&&g.arc(Math.floor(r),Math.floor
|
|
|
1645
1648
|
const r=A.getContext("2d")
|
|
1646
1649
|
i&&r.drawImage(i,0,0),r.strokeStyle=g,r.lineWidth=2,r.beginPath(),e.forEach(((A,e)=>{let[i,g]=A
|
|
1647
1650
|
const[I,o]=t[e]
|
|
1648
|
-
r.moveTo(Math.floor(i),Math.floor(g)),r.lineTo(Math.floor(I),Math.floor(o))})),r.stroke()}renderBackground(A,e){A.classList.add("current-background"),e&&e.classList.remove("current-background")}getInteractionsLayer(){return
|
|
1651
|
+
r.moveTo(Math.floor(i),Math.floor(g)),r.lineTo(Math.floor(I),Math.floor(o))})),r.stroke()}renderBackground(A,e){A.classList.add("current-background"),e&&e.classList.remove("current-background")}getInteractionsLayer(){return Ni}diffNorm(A,e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:A=>A
|
|
1649
1652
|
return A.map(((A,i)=>Math.abs(t(A)-t(e[i])))).reduce(((A,e)=>Math.max(A,e)),0)}*runner(){let A,e,t
|
|
1650
1653
|
const i=this.generator()
|
|
1651
|
-
try{for(i.next();;)A=yield,this.clearTimer(),this.timeSpent=null,t=performance.now(),e=i.next(A).value,e instanceof Promise?e=e.then((A=>(this.timeSpent=performance.now()-t,this.debug&&this.debugResult&&this.debugResult(A.context),A))):(this.timeSpent=performance.now()-t,this.debug&&this.debugResult&&this.debugResult(e.context)),i.next(),yield e}finally{i.return()}}*generator(){throw new Error("not implemented")}getDebugData(){return{}}},
|
|
1654
|
+
try{for(i.next();;)A=yield,this.clearTimer(),this.timeSpent=null,t=performance.now(),e=i.next(A).value,e instanceof Promise?e=e.then((A=>(this.timeSpent=performance.now()-t,this.debug&&this.debugResult&&this.debugResult(A.context),A))):(this.timeSpent=performance.now()-t,this.debug&&this.debugResult&&this.debugResult(e.context)),i.next(),yield e}finally{i.return()}}*generator(){throw new Error("not implemented")}getDebugData(){return{}}},Gi="TYPE_MODEL",ki="TYPE_OCCLUDER"
|
|
1652
1655
|
|
|
1653
1656
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1654
1657
|
class Vector{static zeros(A){const e=Array(A)
|
|
@@ -1663,7 +1666,7 @@ return[i*o-g*I,g*r-t*o,t*I-i*r]}static lerp(A,e,t){return Vector.add(Vector.mult
|
|
|
1663
1666
|
return Math.sqrt(e)}static normalize(A){const e=Vector.len(A)
|
|
1664
1667
|
return A.map((A=>A/e))}static add(A,e){if(A.length!==e.length)throw new Error("Unable to add vectors with unequal lengths")
|
|
1665
1668
|
return A.map(((A,t)=>A+e[t]))}static negate(A){return A.map((A=>-A))}static sub(A,e){return Vector.add(A,Vector.negate(e))}static multiplyScalar(A,e){return A.map((A=>A*e))}static distanceTo(A,e){return Vector.len(Vector.sub(A,e))}static mul(A,e){return A.map(((A,t)=>A*e[t]))}static div(A,e){return A.map(((A,t)=>A/e[t]))}static applyQuaternion(A,e){const[t,i,g]=A,[r,I,o,a]=e,s=r*t+o*g-a*i,B=r*i+a*t-I*g,n=r*g+I*i-o*t,E=-I*t-o*i-a*g
|
|
1666
|
-
return[s*r+E*-I+B*-a-n*-o,B*r+E*-o+n*-I-s*-a,n*r+E*-a+s*-o-B*-I]}}const
|
|
1669
|
+
return[s*r+E*-I+B*-a-n*-o,B*r+E*-o+n*-I-s*-a,n*r+E*-a+s*-o-B*-I]}}const bi=Vector,_i=Vector,range=function(A,e){return Array.from({length:e-A},((e,t)=>A+t))}
|
|
1667
1670
|
class M{static create(A,e,t){return Array.from({length:A},((A,i)=>Array.from({length:e},((A,e)=>t(i,e)))))}static zeros(A,e){return M.create(A,e,(()=>0))}static copy(A){return M.create(A.length,A[0].length,((e,t)=>A[e][t]))}static multiply(){for(var A=arguments.length,e=new Array(A),t=0;t<A;t++)e[t]=arguments[t]
|
|
1668
1671
|
if(e.length<2)throw new Error("Unexpected number of arguments")
|
|
1669
1672
|
return e.reduce(((A,e)=>{const t=M.zeros(A.length,e[0].length)
|
|
@@ -1707,7 +1710,7 @@ return[c/d,h/d]}static projection_iphone8(A){let{width:e,height:t}=A
|
|
|
1707
1710
|
return M3.projection_from_focal_in35mm(28,{width:e,height:t})}static rotation_from_rodrigues(A,e){let t,i
|
|
1708
1711
|
try{t=new A.Mat(3,3,A.CV_64F),i=new A.matFromArray(3,1,A.CV_64F,e),A.Rodrigues(i,t)
|
|
1709
1712
|
return M.from_cv_mat(A,t)}finally{t.delete(),i.delete()}}static rotate_vector(A,e){const t=super.vec_to_col(e),i=super.multiply(A,t)
|
|
1710
|
-
return super.to_vec(i)}}const
|
|
1713
|
+
return super.to_vec(i)}}const Ui=[[0,-1,0,0],[-1,0,0,0],[0,0,-1,0],[0,0,0,1]],Li=[[0,1,0,0],[1,0,0,0],[0,0,1,0],[0,0,0,1]]
|
|
1711
1714
|
class matrix_M4 extends(extend_square_matrix(4)){static translation(A,e,t){let i
|
|
1712
1715
|
return i=Array.isArray(A)?A:[A,e,t],matrix_M4.create(((A,e)=>A===e?1:3===e?i[A]:0))}static rotation_from_rodrigues(A,e){const t=M3.rotation_from_rodrigues(A,e)
|
|
1713
1716
|
return matrix_M4.create(((A,e)=>A<3&&e<3?t[A][e]:A===e?1:0))}static transform_from_rt(A,e){const t=matrix_M4.identity()
|
|
@@ -1721,30 +1724,30 @@ return[[t,0,A/2],[0,t,e/2],[0,0,1]]}static perspective_iphone8(A){let{width:e,he
|
|
|
1721
1724
|
const i=M3.projection_iphone8({width:e,height:t})
|
|
1722
1725
|
return matrix_M4.perspective_from_intrinsic(i,.025,200)}static unsafe_rt_invert(A){const[e,t,i,g]=A[0],[r,I,o,a]=A[1],[s,B,n,E]=A[2]
|
|
1723
1726
|
return[[e,r,s,-g],[t,I,B,-a],[i,o,n,-E],[0,0,0,1]]}static from_opencv_rt(A,e){let[t,i,g]=e
|
|
1724
|
-
const r=g>=0?
|
|
1727
|
+
const r=g>=0?Ui:Li,I=matrix_M4.transform_from_rt(A,[t,i,g])
|
|
1725
1728
|
return super.multiply(r,I)}static scale(){let A,e,t
|
|
1726
1729
|
for(var i=arguments.length,g=new Array(i),r=0;r<i;r++)g[r]=arguments[r]
|
|
1727
|
-
return 1===g.length?A=e=t=g[0]:[A,e,t]=g,[[A,0,0,0],[0,e,0,0],[0,0,t,0],[0,0,0,1]]}static view_matrix(A,e,t){const i=
|
|
1728
|
-
return[[...g,
|
|
1729
|
-
A[0][3]=t,A[1][3]=i,A[2][3]=g}static extractTranslation(A){return[A[0][3],A[1][3],A[2][3]]}static extractScale(A){return[
|
|
1730
|
+
return 1===g.length?A=e=t=g[0]:[A,e,t]=g,[[A,0,0,0],[0,e,0,0],[0,0,t,0],[0,0,0,1]]}static view_matrix(A,e,t){const i=_i.normalize(_i.sub(e,A)),g=_i.normalize(_i.cross(i,t)),r=_i.normalize(_i.cross(g,i))
|
|
1731
|
+
return[[...g,_i.dot(g,_i.negate(A))],[...r,_i.dot(r,_i.negate(A))],[..._i.negate(i),_i.dot(i,A)],[0,0,0,1]]}static setTranslation(A,e){const[t,i,g]=e
|
|
1732
|
+
A[0][3]=t,A[1][3]=i,A[2][3]=g}static extractTranslation(A){return[A[0][3],A[1][3],A[2][3]]}static extractScale(A){return[_i.len([A[0][0],A[1][0],A[2][0]]),_i.len([A[0][1],A[1][1],A[2][1]]),_i.len([A[0][2],A[1][2],A[2][2]])]}static extractRotation(A){const e=matrix_M4.identity(),t=matrix_M4.extractScale(A),i=1/t[0],g=1/t[1],r=1/t[2]
|
|
1730
1733
|
return e[0][0]=A[0][0]*i,e[1][0]=A[1][0]*i,e[2][0]=A[2][0]*i,e[3][0]=0,e[0][1]=A[0][1]*g,e[1][1]=A[1][1]*g,e[2][1]=A[2][1]*g,e[3][1]=0,e[0][2]=A[0][2]*r,e[1][2]=A[1][2]*r,e[2][2]=A[2][2]*r,e[3][2]=0,e[0][3]=0,e[1][3]=0,e[2][3]=0,e[3][3]=1,e}}M.M3=M3,M.M4=matrix_M4
|
|
1731
|
-
const
|
|
1734
|
+
const vi=M,getMatricesFromLoader=A=>{const e=A.get_rmdesc().get_left_autopos_matrix(),t=A.get_rmdesc().get_right_autopos_matrix()
|
|
1732
1735
|
return[e,t,e,t]},scaleAroundPoint2D=function(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1.5
|
|
1733
|
-
const t=M3.translation(
|
|
1734
|
-
return M3.multiply(g,i,t)},
|
|
1736
|
+
const t=M3.translation(_i.negate(A)),i=M3.scale(e),g=M3.translation(A)
|
|
1737
|
+
return M3.multiply(g,i,t)},Hi=matrix_M4.scale(-1,1,1)
|
|
1735
1738
|
function getUniversalOccluderName(A){return`universal_${A}_occluder.zip`}
|
|
1736
1739
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1737
1740
|
class Q{static identity(){return[1,0,0,0]}static multiply(A,e){let[t,i,g,r]=A,[I,o,a,s]=e
|
|
1738
|
-
return[t*I-i*o-g*a-r*s,t*o+i*I+g*s-r*a,t*a-i*s+g*I+r*o,t*s+i*a-g*o+r*I]}static normalize(A){return
|
|
1741
|
+
return[t*I-i*o-g*a-r*s,t*o+i*I+g*s-r*a,t*a-i*s+g*I+r*o,t*s+i*a-g*o+r*I]}static normalize(A){return _i.normalize(A)}static conjugate(A){let[e,t,i,g]=A
|
|
1739
1742
|
return[e,-t,-i,-g]}static to_rotation_matrix(A){const[e,t,i,g]=A,r=e*t,I=e*i,o=e*g,a=t*t,s=t*i,B=t*g,n=i*i,E=i*g,C=g*g
|
|
1740
|
-
return[1-2*(n+C),2*(s-o),2*(B+I),0,2*(s+o),1-2*(a+C),2*(E-r),0,2*(B-I),2*(E+r),1-2*(a+n),0,0,0,0,1]}static _from_vector_and_angle(A,e){const t=Math.sin(e/2),i=Math.cos(e/2),g=
|
|
1743
|
+
return[1-2*(n+C),2*(s-o),2*(B+I),0,2*(s+o),1-2*(a+C),2*(E-r),0,2*(B-I),2*(E+r),1-2*(a+n),0,0,0,0,1]}static _from_vector_and_angle(A,e){const t=Math.sin(e/2),i=Math.cos(e/2),g=_i.normalize(A)
|
|
1741
1744
|
return[i,g[0]*t,g[1]*t,g[2]*t]}static around_x(A){return Q._from_vector_and_angle([1,0,0],A)}static around_y(A){return Q._from_vector_and_angle([0,1,0],A)}static around_z(A){return Q._from_vector_and_angle([0,0,1],A)}static from_rotation_matrix(A){const e=A[0],t=A[1],i=A[2],g=A[4],r=A[5],I=A[6],o=A[8],a=A[9],s=A[10],B=e+r+s
|
|
1742
1745
|
return B>0?Q.normalize([B+1,a-I,i-o,g-t]):e>r&&e>s?Q.normalize([a-I,1+e-r-s,t+g,i+o]):r>s?Q.normalize([i-o,t+g,1+r-e-s,I+a]):Q.normalize([g-t,i+o,I+a,1+s-e-r])}static slerp(A,e,t){let[i,g,r,I]=A
|
|
1743
1746
|
const[o,a,s,B]=e
|
|
1744
|
-
let n=
|
|
1747
|
+
let n=_i.dot(A,e)
|
|
1745
1748
|
if(n<0&&(i=-i,g=-g,r=-r,I=-I,n=-n),n>=1-1e-16)return Q.normalize([i+t*(o-i),g+t*(a-g),r+t*(s-r),I+t*(B-I)])
|
|
1746
1749
|
const E=Math.acos(n),C=Math.sin(E),c=E*t,h=Math.sin(c),d=Math.cos(c)-n*h/C,l=h/C
|
|
1747
|
-
return[d*i+l*o,d*g+l*a,d*r+l*s,d*I+l*B]}}const
|
|
1750
|
+
return[d*i+l*o,d*g+l*a,d*r+l*s,d*I+l*B]}}const xi=
|
|
1748
1751
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1749
1752
|
class AsyncLRUCache{constructor(A){let{size:e,removeOnError:t=!1}=A
|
|
1750
1753
|
this._size=e,this._onDelete=()=>{},this._factory=null,this._removeOnError=t,this._setInitialValues()}_setInitialValues(){this._queue=[],this._cache={}}_addItemToCache(A,e){this._cache[A]={value:e,semaphore:0,forDelete:!1},this._queue.unshift(A)}addItem(A,e){if(this.exists(A))throw new Error(`Item with key "${A}" already exists.`)
|
|
@@ -1766,21 +1769,21 @@ if("object"!=typeof i)return i
|
|
|
1766
1769
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
1767
1770
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1768
1771
|
(A,"string")
|
|
1769
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
1772
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Yi="CACHE_LATEST",Ji="CACHE_LRU"
|
|
1770
1773
|
class ResourceManager{constructor(A){let{cacheStrategies:e}=A
|
|
1771
1774
|
this._initCaches(e)}_initCaches(A){const e=Object.entries(A).reduce(((A,e)=>{let[t,i]=e
|
|
1772
1775
|
return A[t]="string"===typeof i?i:i.name,A}),{})
|
|
1773
1776
|
this.cacheStrategies=e,this.caches={}
|
|
1774
1777
|
for(let[t,i]of Object.entries(e)){const e="string"===typeof A[t]?{}:A[t]
|
|
1775
1778
|
this._initCache(t,i,e)}}_initCache(A,e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}
|
|
1776
|
-
if(e===
|
|
1777
|
-
else{if(e!==
|
|
1779
|
+
if(e===Yi)this._initLatestCache(A)
|
|
1780
|
+
else{if(e!==Ji)throw new Error(`Unexpected cache strategy: "${e}".`)
|
|
1778
1781
|
this._initLruCache(A,t)}}_initLatestCache(A){this.caches[A]={}}_initLruCache(A){let{size:e=5}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}
|
|
1779
|
-
const t=new
|
|
1782
|
+
const t=new xi({size:e,removeOnError:!0})
|
|
1780
1783
|
this.caches[A]=t}getLoader(A,e){e=Array.isArray(e)?e:[e]
|
|
1781
1784
|
const t=this.cacheStrategies[A]
|
|
1782
|
-
if(t===
|
|
1783
|
-
if(t===
|
|
1785
|
+
if(t===Yi)return this._getLoaderCacheLatest(A,e)
|
|
1786
|
+
if(t===Ji)return this._getLoaderCacheLRU(A,e)
|
|
1784
1787
|
throw new Error(`Unexpected or empty strategy for resource: "${A}".`)}_getResourceId(A){if(!Array.isArray(A)||!A.length)throw new Error("Cannot generate id for empty files.")
|
|
1785
1788
|
return A.map((A=>A.getId())).join("|")}_getPromiseAll(A,e){return Promise.all(A.map((A=>e[A.getId()])))}_getLoaderCacheLatest(A,e){if(!this.caches||!this.caches[A])throw new Error(`Unknown resourceName: "${A}".`)
|
|
1786
1789
|
let t=!0
|
|
@@ -1790,46 +1793,73 @@ const g=this.caches[A]
|
|
|
1790
1793
|
for(let A of e){const e=A.getId()
|
|
1791
1794
|
i.hasOwnProperty(e)?g[e]=Promise.resolve(i[e]).catch((()=>(t=!1,A.load()))):(t=!1,g[e]=A.load())}return new ResourceLoader({id:this._getResourceId(e),cacheHit:t,promise:this._getPromiseAll(e,g)})}_getLoaderCacheLRU(A,e){if(!this.caches||!this.caches[A])throw new Error(`Unknown resourceName: "${A}".`)
|
|
1792
1795
|
const t=this.caches[A],i=e.every((A=>t.exists(A.getId()))),g=e.map((A=>t.exists(A.getId())?t.getItem(A.getId()):t.addItem(A.getId(),A.load())))
|
|
1793
|
-
return new ResourceLoader({id:this._getResourceId(e),cacheHit:i,promise:Promise.all(g)})}}ResourceManager_defineProperty(ResourceManager,"CACHE_LATEST",
|
|
1796
|
+
return new ResourceLoader({id:this._getResourceId(e),cacheHit:i,promise:Promise.all(g)})}}ResourceManager_defineProperty(ResourceManager,"CACHE_LATEST",Yi),ResourceManager_defineProperty(ResourceManager,"CACHE_LRU",Ji)
|
|
1794
1797
|
class ResourceLoader{constructor(A){let{id:e,cacheHit:t,promise:i}=A
|
|
1795
1798
|
this.id=e,this.cacheHit=t,this.promise=i}getId(){return this.id}async load(){return this.promise}}class ResourceFile{constructor(A){let{id:e,load:t}=A
|
|
1796
|
-
this.id=e,this._load=t}getId(){return this.id}async load(){try{return await this._load()}catch(A){throw new
|
|
1799
|
+
this.id=e,this._load=t}getId(){return this.id}async load(){try{return await this._load()}catch(A){throw new Ue(`Failed to load file: "${this.getId()}".`,{cause:A})}}}const Ti=ResourceManager
|
|
1797
1800
|
|
|
1798
1801
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1799
|
-
function loadBufferFile(A){return customFetch(A).then((A=>A.arrayBuffer())).then((A=>new Uint8Array(A))).catch((e=>{throw new
|
|
1802
|
+
function loadBufferFile(A){return customFetch(A).then((A=>A.arrayBuffer())).then((A=>new Uint8Array(A))).catch((e=>{throw new Ue(`Failed to load buffer file ${A}`,{cause:e})}))}function loadTextFile(A){return customFetch(A).then((A=>A.text())).catch((e=>{throw new Ue(`Failed to load text file ${A}`,{cause:e})}))}
|
|
1800
1803
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1801
1804
|
class ResourceFileFactory{static bufferResourceOf(A){return new ResourceFile({id:A,load:async()=>loadBufferFile(A)})}static textResourceOf(A){return new ResourceFile({id:A,load:async()=>loadTextFile(A)})}}
|
|
1802
1805
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1803
|
-
const
|
|
1804
|
-
class GemEnvMapResourcesLoader{constructor(A){this.modelMetaManager=A,this.RESOURCE_KEY="gemEnvMap",this.resourceManager=new
|
|
1805
|
-
if(e.length!==
|
|
1806
|
+
const Ki=["gem_cube_diffuse.wnbtex","gem_cube_ggx.wnbtex"]
|
|
1807
|
+
class GemEnvMapResourcesLoader{constructor(A){this.modelMetaManager=A,this.RESOURCE_KEY="gemEnvMap",this.resourceManager=new Ti({cacheStrategies:{[this.RESOURCE_KEY]:{name:Ti.CACHE_LRU,size:4}}})}async load(A){try{const e=await this.findGemDatapackEntries(A)
|
|
1808
|
+
if(e.length!==Ki.length)return{data:null,wasInCache:!0,loadingStartTime:0,loadingFinishTime:0}
|
|
1806
1809
|
const t=e.map((A=>ResourceFileFactory.bufferResourceOf(A.uri))),i=performance.now(),g=this.resourceManager.getLoader(this.RESOURCE_KEY,t),[r,I]=await g.load(),o=performance.now()
|
|
1807
|
-
return{data:{gemCubeDiffuse:r,gemCubeGgx:I},wasInCache:g.cacheHit,loadingStartTime:i,loadingFinishTime:o}}catch(e){throw new
|
|
1808
|
-
return
|
|
1810
|
+
return{data:{gemCubeDiffuse:r,gemCubeGgx:I},wasInCache:g.cacheHit,loadingStartTime:i,loadingFinishTime:o}}catch(e){throw new Ue(`Failed to load gem env map for model ${A}.`,{cause:e})}}async findGemDatapackEntries(A){const e=await this.modelMetaManager.getMeta(A)
|
|
1811
|
+
return Ki.map((A=>e.findUriDatapackEntryByName(A))).filter((A=>!!A))}}
|
|
1809
1812
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
1810
|
-
const
|
|
1811
|
-
class RMDescExtras{constructor(A){this.colorSpace=A.color_space??
|
|
1813
|
+
const Pi="srgb"
|
|
1814
|
+
class RMDescExtras{constructor(A){this.colorSpace=A.color_space??Pi}get_color_space(){return this.colorSpace}}class ModelDesc{constructor(A){var e,t
|
|
1812
1815
|
this.content=A,this.name=A.model??"",this.animationName=(null===(e=A.animation)||void 0===e?void 0:e.name)??"",this.startAtMidnight=(null===(t=A.animation)||void 0===t?void 0:t.start_at_midnight)??!1}get_name(){return this.name}is_animated(){return!!this.animationName}get_animation_name(){return this.animationName}is_empty(){return!this.name&&!this.animationName}start_at_midnight(){return this.startAtMidnight}}class RMDesc{constructor(A){this.content=A,this.raw=JSON.stringify(A)}get_extras(){return new RMDescExtras(this.content.extras??{})}get_left(){return new ModelDesc(this.content.left??{})}get_right(){return new ModelDesc(this.content.right??{})}get_left_autopos_matrix(){return this.content.leftapmat}get_right_autopos_matrix(){return this.content.rightapmat}get_raw(){return this.raw}printDebugData(){console.group("RMDesc:"),console.log(this.content),console.groupEnd()}}
|
|
1813
1816
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1814
|
-
const
|
|
1817
|
+
const Oi="r2",qi="INTERNAL_EVENT_LAZY_STEP_INIT_STARTED",zi="INTERNAL_EVENT_LAZY_STEP_INIT_FINISHED"
|
|
1815
1818
|
|
|
1816
1819
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1817
|
-
class TryonSuccessDetector extends
|
|
1820
|
+
class TryonSuccessDetector extends Wt{constructor(A){super(),this.threshold=A,this.framesCount=0,this.isTryonSucceed=!1}resetDetection(A){this.isTryonSucceed||void 0===this.modelId||this.modelId===A||this.emit("canceled",{modelId:this.modelId}),this.framesCount=0,this.isTryonSucceed=!1,this.modelId=A}tick(A){if(void 0===this.modelId)throw Error("'resetDetection' should be called before this method")
|
|
1818
1821
|
A?this.framesCount+=1:this.framesCount=0,this.framesCount>=this.threshold&&!this.isTryonSucceed&&(this.isTryonSucceed=!0,this.emit("succeed",{modelId:this.modelId}))}emit(A){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
1819
1822
|
return super.emit(A,...t)}on(A,e){return super.on(A,e)}}
|
|
1820
1823
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1821
|
-
const
|
|
1824
|
+
const ji=1080
|
|
1822
1825
|
function calculateRenderSize(A){const{width:e,height:t}=A,i=Math.min(A.width,A.height),g=function calculateRenderResolution(){const{innerWidth:A,innerHeight:e}=window,t=Math.min(A,e)
|
|
1823
|
-
return Math.min(
|
|
1824
|
-
return{width:Math.round(e*g),height:Math.round(t*g)}}
|
|
1826
|
+
return Math.min(ji,t*window.devicePixelRatio)}()/i
|
|
1827
|
+
return{width:Math.round(e*g),height:Math.round(t*g)}}__webpack_require__("d27f89af22774db80ad2")
|
|
1828
|
+
|
|
1829
|
+
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1830
|
+
const parseSpecularMaterialParams=A=>{const{KHR_materials_specular:e}=A.extensions??{},t={specular_color:(null===e||void 0===e?void 0:e.specularColorFactor)??[1,1,1],specular_intensity:.5}
|
|
1831
|
+
return e&&(t.specular_intensity=e.specularFactor??1),t},parseEmissiveStrengthParams=A=>{var e
|
|
1832
|
+
return{emissive_strength:(null===(e=A.extensions)||void 0===e||null===(e=e.KHR_materials_emissive_strength)||void 0===e?void 0:e.emissiveStrength)??1}},parseIorParams=A=>{var e
|
|
1833
|
+
return{ior:(null===(e=A.extensions)||void 0===e||null===(e=e.KHR_materials_ior)||void 0===e?void 0:e.ior)??1.5}},parseClearcoatMaterialParams=A=>{const{KHR_materials_clearcoat:e}=A.extensions||{}
|
|
1834
|
+
return{clearcoat:(null===e||void 0===e?void 0:e.clearcoatFactor)??0,clearcoat_roughness:(null===e||void 0===e?void 0:e.clearcoatRoughnessFactor)??0}},parseSheenMaterialParams=A=>{const e={sheen_factor:[0,0,0],sheen_roughness:0},{KHR_materials_sheen:t}=A.extensions||{}
|
|
1835
|
+
return t&&(t.sheenColorFactor&&(e.sheen_factor=t.sheenColorFactor),t.sheenRoughnessFactor&&(e.sheen_roughness=t.sheenRoughnessFactor)),e},parseTransmissiveMaterialParams=A=>{const e={transmission:0,thickness_factor:0,attenuation_distance:Number.POSITIVE_INFINITY,attenuation_color:[1,1,1]},{KHR_materials_transmission:t,KHR_materials_volume:i}=A.extensions||{}
|
|
1836
|
+
if(null!==t&&void 0!==t&&t.transmissionFactor&&(e.transmission=t.transmissionFactor),i){const{thicknessFactor:A,attenuationColor:t}=i
|
|
1837
|
+
A&&(e.thickness_factor=A),Object.hasOwn(i,"attenuationDistance")&&(e.attenuation_distance=i.attenuationDistance),t&&(e.attenuation_color=t)}return e},parseGemMaterialParams=A=>{const e={dispersion:[0,0,0],num_bounce:0,use_dedicated_gem_envmap:!1},{WNB_materials_gem:t}=A.extensions||{}
|
|
1838
|
+
if(t){const{numBounce:A,dispersion:i,useDedicatedGemEnvMap:g}=t
|
|
1839
|
+
A&&(e.num_bounce=A),i&&(e.dispersion=i),g&&(e.use_dedicated_gem_envmap=g)}return e},setMaterialParams=(A,e,t)=>{const i=(A=>{var e,t
|
|
1840
|
+
const i=A.pbrMetallicRoughness??{}
|
|
1841
|
+
return{color:i.baseColorFactor??[1,1,1,1],metalness:i.metallicFactor??1,roughness:i.roughnessFactor??1,normal_scale:(null===(e=A.normalTexture)||void 0===e?void 0:e.scale)??1,ao_strength:(null===(t=A.occlusionTexture)||void 0===t?void 0:t.strength)??1,emissive_factor:A.emissiveFactor??[1,1,1],...parseSpecularMaterialParams(A),...parseEmissiveStrengthParams(A),...parseIorParams(A)}})(t)
|
|
1842
|
+
switch(A.material_get_type(e)){case A.MaterialType.PBR_OPAQUE:e.set_material_params({...i,...parseClearcoatMaterialParams(t),...parseSheenMaterialParams(t)})
|
|
1843
|
+
break
|
|
1844
|
+
case A.MaterialType.PBR_TRANSMISSIVE:e.set_material_params({...i,...parseClearcoatMaterialParams(t),...parseTransmissiveMaterialParams(t)})
|
|
1845
|
+
break
|
|
1846
|
+
case A.MaterialType.PBR_GEM_TRANSMISSIVE:e.set_material_params({...i,...parseTransmissiveMaterialParams(t),...parseGemMaterialParams(t)})
|
|
1847
|
+
break
|
|
1848
|
+
default:throw new Error("Unexpected material type.")}e.set_blend_state({enabled:"BLEND"===t.alphaMode,src_factor_rgb:A.sg_blend_factor.BLENDFACTOR_ONE,dst_factor_rgb:A.sg_blend_factor.BLENDFACTOR_ONE_MINUS_SRC_ALPHA,op_rgb:A.sg_blend_op.BLENDOP_ADD,src_factor_alpha:A.sg_blend_factor.BLENDFACTOR_ONE,dst_factor_alpha:A.sg_blend_factor.BLENDFACTOR_ONE_MINUS_SRC_ALPHA,op_alpha:A.sg_blend_op.BLENDOP_ADD}),e.set_alpha_cutoff("MASK"===t.alphaMode?t.alphaCutoff??.5:0),e.set_cull_mode(t.doubleSided?A.sg_cull_mode.CULLMODE_NONE:A.sg_cull_mode.CULLMODE_BACK),e.set_depth_write("BLEND"!==t.alphaMode)},setModelStructure=(A,e,t,i)=>{if(!e.has_object(t))throw new Error(`Object not found in scene : ${t}.`)
|
|
1849
|
+
e.access_object(t).access((e=>(e.access_each_mesh((e=>{((A,e,t)=>{var i
|
|
1850
|
+
const g=e.get_material().get_gltf_material_id(),r=null===t||void 0===t||null===(i=t.materials)||void 0===i?void 0:i[g]
|
|
1851
|
+
if(!r)throw new Error(`No material with provided index found: ${g}.`);((A,e,t)=>{var i,g
|
|
1852
|
+
const r=e.get_material()
|
|
1853
|
+
null!==(i=t.extensions)&&void 0!==i&&i.WNB_materials_gem?A.material_get_type(r)!==A.MaterialType.PBR_GEM_TRANSMISSIVE&&e.set_material(new A.PbrGemTransmissiveMaterial):null!==(g=t.extensions)&&void 0!==g&&g.KHR_materials_transmission?A.material_get_type(r)!==A.MaterialType.PBR_TRANSMISSIVE&&e.set_material(new A.PbrTransmissiveMaterial):A.material_get_type(r)!==A.MaterialType.PBR_OPAQUE&&e.set_material(new A.PbrOpaqueMaterial)})(A,e,r),setMaterialParams(A,e.access_material(),r)})(A,e,i)})),!0)),(()=>{}))}
|
|
1854
|
+
function RenderStepMain_defineProperty(A,e,t){return(e=function RenderStepMain_toPropertyKey(A){var e=function RenderStepMain_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
1825
1855
|
var t=A[Symbol.toPrimitive]
|
|
1826
1856
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
1827
1857
|
if("object"!=typeof i)return i
|
|
1828
1858
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
1829
1859
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
1830
1860
|
(A,"string")
|
|
1831
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class ModelChangedError extends Error{constructor(){super("Model changed.")}}class RenderStepMain extends
|
|
1832
|
-
super(),RenderStepMain_defineProperty(this,"viewKeypointsRadius",.03),RenderStepMain_defineProperty(this,"init",once((()=>(this.internalEventsEmitter.emit(
|
|
1861
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class ModelChangedError extends Error{constructor(){super("Model changed.")}}class RenderStepMain extends Si{constructor(A){let{canvas:e,cacheCanvas:t,segmentationThreshold:i,dataProvider:g,modelsCacheSize:r=5,logger:I,type:o,nn:a,meanLeft:s,meanRight:B,viewer3dSize:n,mode:E,fpsCounter:C,fpsLogger:h,device:d,emitter:l,libInjector:u,modelsManager:w,datapackMetaManager:D,modelMetaManager:f,envMapResourceLoader:m,internalEventsEmitter:p,debug:y}=A
|
|
1862
|
+
super(),RenderStepMain_defineProperty(this,"viewKeypointsRadius",.03),RenderStepMain_defineProperty(this,"init",once((()=>(this.internalEventsEmitter.emit(qi,"render"),Promise.race([this._init().then((()=>{this.internalEventsEmitter.emit(zi,"render")})).catch((A=>{this.emitter.emit(c,Ue.toObject(A))})),{}]))))),this.emitter=l,this.internalEventsEmitter=p,this.libInjector=u,this.nn=a,this.fpsCounter=C,this.fpsLogger=h,this.meanLeft=s,this.meanRight=B,this.modelType=o,this.cacheCanvas=t,this.segmentationThreshold=i,this.dataProvider=g,this.modelId=null,this.renderedModelId=null,this.rightModel=null,this.leftModel=null,this.rightAnimationMixer=null,this.leftAnimationMixer=null,this.rightStartTime=0,this.leftStartTime=0,this.rightOccluder=null,this.leftOccluder=null,this.leftAutoposArray=null,this.rightAutoposArray=null,this.envMap=null,this.size=null,this.renderSize=null,this.customCanvas=e,this.logger=I,this.mode=E,this.tryonSuccessDetector=this.createTryonSuccessDetector(),this.viewKeypoints=!1,this.viewCubeMap=!1,this.renderContext={},this.leftModels=[],this.rightModels=[],this.camera=null,this.modelsManager=w,this.datapackMetaManager=D,this.modelMetaManager=f,this.envMapResourceLoader=m,this.viewerSize=n,this.device=d,this.debug=y,this._init=onceSuccess(this._init),this.initModels=function cachePromise(A,e){var t=new Map
|
|
1833
1863
|
return function(){for(var i=arguments.length,g=new Array(i),r=0;r<i;r++)g[r]=arguments[r]
|
|
1834
1864
|
var I=(null===e||void 0===e?void 0:e(...g))||JSON.stringify(g)
|
|
1835
1865
|
if(t.has(I))return t.get(I)
|
|
@@ -1837,38 +1867,38 @@ var o=A.apply(this,g).finally((()=>{t.delete(I)}))
|
|
|
1837
1867
|
return t.set(I,o),o}}(this.initModels,(A=>{let{modelId:e}=A
|
|
1838
1868
|
return e}))}__checkEnvMapMirror(){throw new Error("Not implemented.")}_getError(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:""
|
|
1839
1869
|
return Number.isInteger(A)&&(e=e&&`${e}: `,A=new Error(e+this.dataProvider.get_exception_msg(A))),A}_validateModelDidNotChange(A){if(this.modelId!==A)throw new ModelChangedError}_getTimeFromMidnight(){const A=new Date,e=new Date
|
|
1840
|
-
return e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),A.getTime()-e.getTime()}_getSecondsFromMidnight(){return this._getTimeFromMidnight()/1e3}getAnimationParams(A){if(A.is_animated())return{name:A.get_animation_name(),startAnimationAtMidnight:A.start_at_midnight()}}getModelRmdescParams(A){let e,t,i,{modelLoader:g}=A,r=
|
|
1870
|
+
return e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),A.getTime()-e.getTime()}_getSecondsFromMidnight(){return this._getTimeFromMidnight()/1e3}getAnimationParams(A){if(A.is_animated())return{name:A.get_animation_name(),startAnimationAtMidnight:A.start_at_midnight()}}getModelRmdescParams(A){let e,t,i,{modelLoader:g}=A,r=Pi
|
|
1841
1871
|
try{const A=g.get_rmdesc(),I=g.get_rmdesc().get_extras()
|
|
1842
1872
|
i=g.get_raw_rmdesc(),this.debug&&A.printDebugData(),r=I.get_color_space(),e=this.getAnimationParams(A.get_left()),t=this.getAnimationParams(A.get_right()),A.get_left().is_empty()?e=t:A.get_right().is_empty()&&(t=e)}catch(A){0}return{leftAnimation:e,rightAnimation:t,colorSpace:r,rawRmdesc:i}}async getOccluderUrl(A){return this.datapackMetaManager.getFileUrl(A)}async getAdditionalModelResources(A){let{modelId:e}=A
|
|
1843
1873
|
return await Promise.all([this.envMapResourceLoader.load(e)]).then((A=>{let[e]=A
|
|
1844
|
-
return{envMapResources:e}}))}async getObjectsFromLoader(A,e,t){throw new Error("Not implemented")}async getOccluderResources(A,e,t){this.modelsManager.ensureModelLoader({id:e,type:
|
|
1874
|
+
return{envMapResources:e}}))}async getObjectsFromLoader(A,e,t){throw new Error("Not implemented")}async getOccluderResources(A,e,t){this.modelsManager.ensureModelLoader({id:e,type:ki})
|
|
1845
1875
|
return await this.modelsManager.getItem(e,(async e=>{const i=await e
|
|
1846
1876
|
let g,r
|
|
1847
1877
|
try{var I
|
|
1848
1878
|
const e=await i.wait_for_load()
|
|
1849
|
-
this._validateModelDidNotChange(A),[g,r]=await this.getObjectsFromLoader(i,
|
|
1879
|
+
this._validateModelDidNotChange(A),[g,r]=await this.getObjectsFromLoader(i,ki,t)
|
|
1850
1880
|
const[o,a]=getMatricesFromLoader(i)
|
|
1851
1881
|
return{occluderLoadingStartTime:i.getLoadingStartTime(),occluderLoadingFinishTime:i.getLoadingFinishTime(),wasmDownloadTime:e,leftOccluderScene:g.scene,rightOccluderScene:null===(I=r)||void 0===I?void 0:I.scene,defaultOccluderLeftAutoposArray:o,defaultOccluderRightAutoposArray:a}}catch(e){var o,a
|
|
1852
|
-
throw this.disposeScene(null===(o=g)||void 0===o?void 0:o.scene),this.disposeScene(null===(a=r)||void 0===a?void 0:a.scene),new
|
|
1882
|
+
throw this.disposeScene(null===(o=g)||void 0===o?void 0:o.scene),this.disposeScene(null===(a=r)||void 0===a?void 0:a.scene),new Ue("Error in getOccluderResources",{cause:e,params:{model:A}})}}))}getOppositeSideAutoposMatrices(){let{modelAutopos:A,occluderAutopos:e,oppositeModelAutopos:t,oppositeOccluderAutopos:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1853
1883
|
throw new Error("Not implemented")}getOppositeSideModel(A){let{scene:e,animations:t}=A
|
|
1854
1884
|
throw new Error("Not implemented")}setupOccluders(A){throw new Error("Not implemented")}adjustOccluderAutoposMatrix(A){let{modelAutopos:e,occluderAutopos:t}=A
|
|
1855
1885
|
return t}validateUniversalOccluders(A){let{leftOccluderScene:e,rightOccluderScene:t}=A
|
|
1856
|
-
if(!e||!t)throw new Error("No occluder")}async getResourcesFromLoader(A,e,t){const[i,g]=await Promise.all([this.getOccluderResources(e,await this.getOccluderUrl(getUniversalOccluderName(this.modelType),e),t),this.getObjectsFromLoader(A,
|
|
1886
|
+
if(!e||!t)throw new Error("No occluder")}async getResourcesFromLoader(A,e,t){const[i,g]=await Promise.all([this.getOccluderResources(e,await this.getOccluderUrl(getUniversalOccluderName(this.modelType),e),t),this.getObjectsFromLoader(A,Gi,t)])
|
|
1857
1887
|
let[r,I]=g
|
|
1858
1888
|
const{wasmDownloadTime:o,leftOccluderScene:a,rightOccluderScene:s,occluderLoadingStartTime:B,occluderLoadingFinishTime:n,defaultOccluderLeftAutoposArray:E,defaultOccluderRightAutoposArray:C}=i,c=I&&!r,h=r&&!I
|
|
1859
1889
|
h&&(I=this.getOppositeSideModel(r,t)),c&&(r=this.getOppositeSideModel(I,t)),this.validateUniversalOccluders({leftOccluderScene:a,rightOccluderScene:s}),this.setupOccluders([a,s],t)
|
|
1860
1890
|
let[d,l,u,w]=getMatricesFromLoader(A)
|
|
1861
1891
|
return(E||C)&&(u=E,w=C),c||(u=this.adjustOccluderAutoposMatrix({modelAutopos:d,occluderAutopos:u})),h||(w=this.adjustOccluderAutoposMatrix({modelAutopos:l,occluderAutopos:w})),c&&([d,u]=this.getOppositeSideAutoposMatrices({modelAutopos:l,occluderAutopos:w,oppositeModelAutopos:d,oppositeOccluderAutopos:u,oppositeOccluderExists:Boolean(a)})),h&&([l,w]=this.getOppositeSideAutoposMatrices({modelAutopos:d,occluderAutopos:u,oppositeModelAutopos:l,oppositeOccluderAutopos:w,oppositeOccluderExists:Boolean(s)})),{wasmDownloadTime:o,occluderLoadingStartTime:B,occluderLoadingFinishTime:n,leftModel:r,rightModel:I,leftOccluderScene:a,rightOccluderScene:s,leftAutoposArray:d,rightAutoposArray:l,leftOccluderAutoposArray:u,rightOccluderAutoposArray:w}}async getModelResources(A){let{modelId:e,loadContext:t}=A
|
|
1862
|
-
const i=this.modelsManager.ensureModelLoader({id:e,type:
|
|
1863
|
-
try{i=await A}catch(A){throw new
|
|
1864
|
-
const[g,r]=await Promise.all([i.wait_for_load().then((A=>(this.emitter.emit(o,{id:e,type:
|
|
1892
|
+
const i=this.modelsManager.ensureModelLoader({id:e,type:Gi}),{wasmDownloadModelTime:g,...r}=await this.modelsManager.getItem(e,(async A=>{let i
|
|
1893
|
+
try{i=await A}catch(A){throw new Ue("Failed get modelLoader",{cause:A})}this.mode===_t&&this.modelsManager.ensureModelLoader({id:await this.getOccluderUrl(getUniversalOccluderName(this.modelType),e),type:ki})
|
|
1894
|
+
const[g,r]=await Promise.all([i.wait_for_load().then((A=>(this.emitter.emit(o,{id:e,type:yt,progress:100}),A))).catch((A=>{throw new Ue("Failed to download model",{cause:A})})),this.getAdditionalModelResources({modelId:e,loadContext:t}).catch((A=>{throw new Ue("Failed to download additional model resources",{cause:A})}))]),I=this.getModelRmdescParams({modelLoader:i})
|
|
1865
1895
|
this._validateModelDidNotChange(e)
|
|
1866
1896
|
const{occluderLoadingStartTime:a,occluderLoadingFinishTime:s,...B}=await this.getResourcesFromLoader(i,e,t)
|
|
1867
1897
|
return{modelLoadingStartTime:i.getLoadingStartTime(),modelLoadingFinishTime:i.getLoadingFinishTime(),occluderLoadingStartTime:a,occluderLoadingFinishTime:s,additionalResources:{...r,rmdescParams:I},wasmDownloadModelTime:g,...B}}))
|
|
1868
1898
|
return{wasmDownloadModelTime:g,wasModelInCache:i,...r}}async getResources(A){let e,t,i,g,r,o,s,B,n,E,C,c,h,d,l,{modelId:u,loadContext:w}=A
|
|
1869
|
-
this.emitter.emit(I,{id:u,type:
|
|
1870
|
-
try{({wasModelInCache:h,modelLoadingStartTime:d,modelLoadingFinishTime:l,additionalResources:E,leftModel:e,rightModel:t,leftOccluderScene:i,rightOccluderScene:g,leftAutoposArray:r,rightAutoposArray:o,leftOccluderAutoposArray:s,rightOccluderAutoposArray:B,wasmDownloadModelTime:n,occluderLoadingStartTime:C,occluderLoadingFinishTime:c}=await this.getModelResources({modelId:u,loadContext:w}))}catch(A){if(
|
|
1871
|
-
throw new
|
|
1899
|
+
this.emitter.emit(I,{id:u,type:yt})
|
|
1900
|
+
try{({wasModelInCache:h,modelLoadingStartTime:d,modelLoadingFinishTime:l,additionalResources:E,leftModel:e,rightModel:t,leftOccluderScene:i,rightOccluderScene:g,leftAutoposArray:r,rightAutoposArray:o,leftOccluderAutoposArray:s,rightOccluderAutoposArray:B,wasmDownloadModelTime:n,occluderLoadingStartTime:C,occluderLoadingFinishTime:c}=await this.getModelResources({modelId:u,loadContext:w}))}catch(A){if(Ue.containsInstance(A,ModelChangedError))throw this.emitter.emit(a,{id:u,type:yt}),A
|
|
1901
|
+
throw new Ue("Failed to get model resources",{cause:this._getError(A),params:{model:u}})}return this.emitter.emit(a,{id:u,type:yt}),{wasModelInCache:h,modelLoadingStartTime:d,modelLoadingFinishTime:l,additionalResources:E,wasmDownloadModelTime:n,occluderLoadingStartTime:C,occluderLoadingFinishTime:c,leftModel:e,rightModel:t,leftOccluderScene:i||{},rightOccluderScene:g||{},leftAutoposArray:r,rightAutoposArray:o,leftOccluderAutoposArray:s,rightOccluderAutoposArray:B}}updateOccluders(A){let{rightModel:e,leftModel:t,leftOccluderScene:i,rightOccluderScene:g,prevLeftOccluderAutoposArray:r,prevRightOccluderAutoposArray:I,loadContext:o}=A
|
|
1872
1902
|
throw new Error("Not implemented")}updateScenes(A){let{rightModel:e,leftModel:t,leftOccluderScene:i,rightOccluderScene:g,prevLeftAutoposArray:r,prevRightAutoposArray:I,prevLeftOccluderAutoposArray:o,prevRightOccluderAutoposArray:a,loadContext:s}=A
|
|
1873
1903
|
this.setRightRenderModel(e,I,s),this.setLeftRenderModel(t,r,s),this.setRightModelCameras(e),this.setLeftModelCameras(t),this.updateOccluders({rightModel:e,leftModel:t,leftOccluderScene:i,rightOccluderScene:g,prevLeftOccluderAutoposArray:o,prevRightOccluderAutoposArray:a,loadContext:s})}setRightModelCameras(A){this.rightModelCameras=A.cameras}setLeftModelCameras(A){this.leftModelCameras=A.cameras}__calcLoadingModelsTime(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]
|
|
1874
1904
|
for(const t of Object.keys(A))A[t]&&!A[t].wasInCache&&A[t].loadingStartTime&&A[t].loadingFinishTime&&e.push({start:A[t].loadingStartTime,finish:A[t].loadingFinishTime})
|
|
@@ -1877,12 +1907,12 @@ let e=A[0].start,t=A[0].finish
|
|
|
1877
1907
|
for(let i=1;i<A.length;i++)e>A[i].start&&(e=A[i].start),t<A[i].finish&&(t=A[i].finish)
|
|
1878
1908
|
return t-e})(e)}getLoadContext(){}destroyLoadContext(A){}unloadScene(){this.rightModel&&(this.disposeScene(this.rightModel),this.rightModel=null),this.leftModel&&(this.disposeScene(this.leftModel),this.leftModel=null),this.camera&&(this.disposeSceneForOcclusions(),this.disposeCamera()),this.leftModels=[],this.leftModel=null,this.rightModels=[],this.rightModel=null}applyLoadContext(A){let{context:e,firstLoad:t}=A}async initModels(A){let e,t,i,g,r,I,o,a,s,B,n,E,C,c,h,{modelId:d,attemptCount:l=0}=A
|
|
1879
1909
|
const u=this.getLoadContext()
|
|
1880
|
-
try{({modelLoadingStartTime:C,modelLoadingFinishTime:c,rightModel:t,leftModel:i,leftOccluderScene:g,rightOccluderScene:r,leftAutoposArray:I,rightAutoposArray:o,leftOccluderAutoposArray:a,rightOccluderAutoposArray:s,additionalResources:B,occluderLoadingStartTime:n,occluderLoadingFinishTime:E}=await this.getResources({modelId:d,loadContext:u}))}catch(A){if(this.destroyLoadContext(u),
|
|
1881
|
-
throw new
|
|
1910
|
+
try{({modelLoadingStartTime:C,modelLoadingFinishTime:c,rightModel:t,leftModel:i,leftOccluderScene:g,rightOccluderScene:r,leftAutoposArray:I,rightAutoposArray:o,leftOccluderAutoposArray:a,rightOccluderAutoposArray:s,additionalResources:B,occluderLoadingStartTime:n,occluderLoadingFinishTime:E}=await this.getResources({modelId:d,loadContext:u}))}catch(A){if(this.destroyLoadContext(u),Ue.containsInstance(A,ModelChangedError))return{modelWasSet:!1}
|
|
1911
|
+
throw new Ue("Error in initModels",{cause:A,params:{model:d}})}const w=[{start:C,finish:c},{start:n,finish:E}]
|
|
1882
1912
|
if(e=this.__calcLoadingModelsTime(B,w),h=this.getModelInfoFromAdditionalResources(B),this.modelId!==d)return{downloadingTime:e,modelWasSet:!1,modelInfo:h}
|
|
1883
1913
|
this.unloadScene()
|
|
1884
1914
|
const D=this.leftAutoposArray,f=this.rightAutoposArray,m=this.leftOccluderAutoposArray,p=this.rightOccluderAutoposArray
|
|
1885
|
-
return this.leftAutoposArray=I,this.rightAutoposArray=o,this.leftOccluderAutoposArray=a,this.rightOccluderAutoposArray=s,this.updateScenes({rightModel:t,leftModel:i,leftOccluderScene:g,rightOccluderScene:r,prevLeftAutoposArray:D,prevRightAutoposArray:f,prevLeftOccluderAutoposArray:m,prevRightOccluderAutoposArray:p,loadContext:u}),this.setAdditionalResources({additionalResources:B,leftModel:i,rightModel:t,loadContext:u}),this.applyLoadContext({context:u,firstLoad:!this.renderedModelId}),this.renderedModelId=d,this.tryonSuccessDetector.resetDetection(d),this.mode===
|
|
1915
|
+
return this.leftAutoposArray=I,this.rightAutoposArray=o,this.leftOccluderAutoposArray=a,this.rightOccluderAutoposArray=s,this.updateScenes({rightModel:t,leftModel:i,leftOccluderScene:g,rightOccluderScene:r,prevLeftAutoposArray:D,prevRightAutoposArray:f,prevLeftOccluderAutoposArray:m,prevRightOccluderAutoposArray:p,loadContext:u}),this.setAdditionalResources({additionalResources:B,leftModel:i,rightModel:t,loadContext:u}),this.applyLoadContext({context:u,firstLoad:!this.renderedModelId}),this.renderedModelId=d,this.tryonSuccessDetector.resetDetection(d),this.mode===Ut?this.logger.logEvent("log_3d_attempted",d):setTimeout((()=>{this.logger.logEvent("log_tryon_attempted",d)})),{modelInfo:h,downloadingTime:e,modelWasSet:!0}}getModelInfoFromAdditionalResources(){return{}}getAnimation(A){let{animationParams:e,animations:t}=A
|
|
1886
1916
|
const i=(null===e||void 0===e?void 0:e.name)&&(null===t||void 0===t?void 0:t.find)&&t.find((A=>{let{name:t}=A
|
|
1887
1917
|
return t===e.name}))
|
|
1888
1918
|
return i?{animation:i,startTime:e.startAnimationAtMidnight?0:this._getSecondsFromMidnight()}:{animation:null,startTime:0}}getAnimationMixer(A){let{animation:e,model:t}=A
|
|
@@ -1892,9 +1922,9 @@ return g?{animationMixer:this.getAnimationMixer({animation:g,model:i}),startTime
|
|
|
1892
1922
|
const{leftAnimation:g,rightAnimation:r}=e;({animationMixer:this.leftAnimationMixer,startTime:this.leftStartTime}=this.setupAnimation({animationParams:g,animations:null===t||void 0===t?void 0:t.animations,model:null===t||void 0===t?void 0:t.scene})),({animationMixer:this.rightAnimationMixer,startTime:this.rightStartTime}=this.setupAnimation({animationParams:r,animations:null===i||void 0===i?void 0:i.animations,model:null===i||void 0===i?void 0:i.scene}))}setAdditionalResources(A){let{additionalResources:e={},leftModel:t,rightModel:i,loadContext:g}=A
|
|
1893
1923
|
const{envMapResources:r,rmdescParams:I}=e
|
|
1894
1924
|
r.data.id!==this.currentEnvMapId&&this.__setEnvMap({envMap:r.data,envMapId:r.data.id}),this.setRmdescParams({rmdescParams:I,leftModel:t,rightModel:i,loadContext:g})}_destroyEnvMap(A){throw new Error("Not implemented")}_updateEnvMap(A){throw new Error("Not implemented")}__setEnvMap(A){let{envMap:e,envMapId:t}=A
|
|
1895
|
-
this.currentEnvMapId!==t&&(this._destroyEnvMap(this.envMap),this._updateEnvMap(e),this.envMap=e,this.currentEnvMapId=t)}async _init(){if(this.mode===
|
|
1925
|
+
this.currentEnvMapId!==t&&(this._destroyEnvMap(this.envMap),this._updateEnvMap(e),this.envMap=e,this.currentEnvMapId=t)}async _init(){if(this.mode===_t){const{cv:A}=await this.libInjector.getOpenCv()
|
|
1896
1926
|
this.cv=A}}async preloadModel(A){let{modelId:e}=A
|
|
1897
|
-
const t=this.modelsManager.ensureModelLoader({id:e,type:
|
|
1927
|
+
const t=this.modelsManager.ensureModelLoader({id:e,type:Gi}),{wasmDownloadTime:i}=await this.modelsManager.getItem(e,(async A=>{const e=await A
|
|
1898
1928
|
return{wasmDownloadTime:await e.wait_for_load()}}))
|
|
1899
1929
|
return{wasmDownloadTime:t?0:i}}async reInit(A){let{action:e,modelId:t,size:i,preloadedModelId:g,viewer3dSize:r,poi:I,resetCameraPosition:o,gotoDefaultPosition:a,cameraZoom:s,togglePanningMode:B,dimensions:n,visibilityChanged:E,setCustomPOI:C,getCurrentPOI:c,getPOIsList:h}=A
|
|
1900
1930
|
try{if("start"===e&&await this._init(),this.viewerCamera||this.camera){if(this.shouldUpdateViewerModel=!0,Number.isInteger(I))return this.viewerSetPOI(I)
|
|
@@ -1906,29 +1936,29 @@ if(n)return this.toggleDimensions(n.show,n.dimensionsUnit)
|
|
|
1906
1936
|
if(!0===E)return this.handleBecameVisible()
|
|
1907
1937
|
if(C)return this.viewerGoToCustomPOI(C)
|
|
1908
1938
|
if(c)return this.viewerGetCurrentPOI()
|
|
1909
|
-
if(h)return this.viewerGetPOIsList()}if(t){this.modelId=t,this.loadingModel=!0,this.mode===
|
|
1939
|
+
if(h)return this.viewerGetPOIsList()}if(t){this.modelId=t,this.loadingModel=!0,this.mode===_t&&this.unloadScene()
|
|
1910
1940
|
const{downloadingTime:A,modelWasSet:e,modelInfo:i={}}=await this.initModels({modelId:t})
|
|
1911
|
-
if(e&&(this.loadingModel=!1),this.mode===
|
|
1941
|
+
if(e&&(this.loadingModel=!1),this.mode===Ut){const{cameras:A}=this.get3dModeModel()
|
|
1912
1942
|
i.poi3dCount=(null===A||void 0===A?void 0:A.length)||0,i.available3dDimensionsUnits=this.getAvailableDimensions(),i.showDimensionsDelay=this.getShowDimensionsDelay()}return{modelWasSet:e,downloadingTime:A,modelInfo:i}}if(r&&!areSizesEqual(this.viewerSize,r)&&this.reset3dModeSize(r),i&&!areSizesEqual(this.size,i)&&this.resetFrameSize(i),g){const{wasmDownloadTime:A}=await this.preloadModel({modelId:g})
|
|
1913
1943
|
return{preloadedModelId:g,downloadingTime:A}}}catch(A){throw this._getError(A,"Failed to reinit RenderStep")}}getModelMatrix(A,e){throw new Error("Not implemented")}getNewMatrix(A,e,t){if(!e)return
|
|
1914
1944
|
const i=matrix_M4.from_array(e),g=matrix_M4.unsafe_rt_invert(i),r=matrix_M4.from_array(t)
|
|
1915
1945
|
return matrix_M4.multiply(A,g,r)}copyState(A,e,t){throw new Error("Not implemented")}setModelMatrix(A,e,t){throw new Error("Not implemented")}setupPrevState(A,e,t,i,g){if(A){const r=this.getNewMatrix(this.getModelMatrix(A,g),t,i)
|
|
1916
|
-
this.copyState(A,e,g),this.setModelMatrix(e,r,g)}}addModelToScene(A){throw new Error("Not implemented")}setRightRenderModel(A){this.addModelToScene(A.scene),this.rightModel=A.scene,this.addRightModel(this.rightModel)}setLeftRenderModel(A){this.addModelToScene(A.scene),this.leftModel=A.scene,this.addLeftModel(this.leftModel)}addLeftModel(A,e,t){this.leftModels.push({model:A,getTransform:e,type:t||
|
|
1946
|
+
this.copyState(A,e,g),this.setModelMatrix(e,r,g)}}addModelToScene(A){throw new Error("Not implemented")}setRightRenderModel(A){this.addModelToScene(A.scene),this.rightModel=A.scene,this.addRightModel(this.rightModel)}setLeftRenderModel(A){this.addModelToScene(A.scene),this.leftModel=A.scene,this.addLeftModel(this.leftModel)}addLeftModel(A,e,t){this.leftModels.push({model:A,getTransform:e,type:t||Gi})}addRightModel(A,e,t){this.rightModels.push({model:A,getTransform:e,type:t||Gi})}disposeScene(){throw new Error("Not implemented")}makeModelTransform(A,e,t){const i=M3.rotate_vector(A,t),g=_i.sub(e,i)
|
|
1917
1947
|
return matrix_M4.from_opencv_rt(A,g)}render(A,e,t,i,g){let{mean:r,autopos:I,oclAutopos:o}=i
|
|
1918
1948
|
const{rotation:a,translation:s}=t,B=this.makeModelTransform(a,s,r),n=matrix_M4.from_array(I),E=matrix_M4.from_array(o),C=matrix_M4.multiply(B,n),c=matrix_M4.multiply(B,E)
|
|
1919
1949
|
this.setModelMatrix(e,c),A.forEach((A=>{let{model:e,getTransform:t}=A
|
|
1920
1950
|
t?this.setModelMatrix(e,t(n,B)):this.setModelMatrix(e,C)})),this.viewKeypoints&&g&&this.setModelMatrix(g,matrix_M4.from_opencv_rt(a,s))}renderLeftOcclusions(){throw new Error("Not implemented")}renderRightOcclusions(){throw new Error("Not implemented")}disposeSceneForOcclusions(){throw new Error("Not implemented")}disposeCamera(){this.camera=null}resetFrameSize(A){this.size=A,this.renderSize=calculateRenderSize(A),this.camera&&(this.disposeCamera(),this.disposeSceneForOcclusions())}hideObject(A){throw new Error("Not implemented")}showObject(A){throw new Error("Not implemented")}hideAllObjects(){throw new Error("Not implemented")}objectExists(A){return Boolean((null===A||void 0===A?void 0:A.exists)&&A.rotation&&A.translation)}setupSceneForOcclusions(){throw new Error("Not implemented")}postRenderProcessing(){throw new Error("Not implemented")}updateSegmentationData(){throw new Error("Not implemented")}preRenderProcessing(){throw new Error("Not implemented")}showLeftObjects(){throw new Error("Not implemented")}showRightObjects(){throw new Error("Not implemented")}prepareContext(A){return A}configureRenderTarget(A){let{width:e,height:t}=A
|
|
1921
1951
|
throw new Error("Not implemented")}setViewportSize(A){}draw(){throw new Error("Not implemented")}*generator(){let A,e,t,i,g,r,I,o=!1
|
|
1922
|
-
try{for(;;){if(A=yield,A=this.prepareContext(A),({frame:e,segmentation:I}=A),({height:g,width:r}=e),[i,t]=I.size,this.loadingModel){yield new Promise((async t=>{await e.onBeforeRender(),requestAnimationFrame((()=>{e.renderBackground(),t(
|
|
1923
|
-
continue}if(!this.camera){if(!this.renderSize){yield
|
|
1924
|
-
continue}if(!areSizesEqual(this.size,{width:r,height:g})){yield
|
|
1952
|
+
try{for(;;){if(A=yield,A=this.prepareContext(A),({frame:e,segmentation:I}=A),({height:g,width:r}=e),[i,t]=I.size,this.loadingModel){yield new Promise((async t=>{await e.onBeforeRender(),requestAnimationFrame((()=>{e.renderBackground(),t(gi.next(A))}))}))
|
|
1953
|
+
continue}if(!this.camera){if(!this.renderSize){yield gi.finish()
|
|
1954
|
+
continue}if(!areSizesEqual(this.size,{width:r,height:g})){yield gi.finish()
|
|
1925
1955
|
continue}this.configureRenderTarget({width:this.renderSize.width,height:this.renderSize.height}),this.viewCubeMap&&this.__checkEnvMapMirror(),this.setupSceneForOcclusions({context:A,width:this.renderSize.width,height:this.renderSize.height,sWidth:t,sHeight:i,segmentationData:I.buffers,requiresRotation:e.requiresRotation()})}this.setViewportSize(e),this.hideAllObjects(),this.preRenderProcessing(A),this.updateSegmentationData({segmentation:I,sWidth:t,sHeight:i})
|
|
1926
1956
|
const a=this.objectExists(A.objects.left),s=this.objectExists(A.objects.right),B=this._getSecondsFromMidnight(),n=B-this.leftStartTime,E=B-this.rightStartTime
|
|
1927
1957
|
a&&(this.showLeftObjects(),this.render(this.leftModels,this.leftOccluder,A.objects.left,{mean:this.meanLeft,autopos:this.leftAutoposArray,oclAutopos:this.leftOccluderAutoposArray},this.leftKeypoints),this.renderLeftOcclusions({...A.objects.left,rightExists:s,leftAnimationTime:n})),s&&(this.showRightObjects(),this.render(this.rightModels,this.rightOccluder,A.objects.right,{mean:this.meanRight,autopos:this.rightAutoposArray,oclAutopos:this.rightOccluderAutoposArray},this.rightKeypoints),this.renderRightOcclusions({leftExists:a,rightAnimationTime:E})),(a||s)&&this.flush&&this.flush()
|
|
1928
1958
|
const C=a||s
|
|
1929
1959
|
C?o||this.emitter.emit(IA):o&&this.emitter.emit(oA),o=C
|
|
1930
1960
|
const c=this.renderedModelId
|
|
1931
|
-
this.tryonSuccessDetector.tick(C),yield new Promise((async t=>{await e.onBeforeRender(),this.startTimer("raf"),requestAnimationFrame((()=>{this.stopTimer("raf"),this.camera&&c===this.renderedModelId&&(e.renderBackground(),this.postRenderProcessing({context:A,leftExists:a,rightExists:s,leftAnimationTime:n,rightAnimationTime:E}),a&&this.leftAnimationMixer&&this.leftAnimationMixer.setTime(n),s&&this.rightAnimationMixer&&this.rightAnimationMixer.setTime(E),this.startTimer("draw"),this.draw(),this.stopTimer("draw"),this.fpsCounter.tick()),t(
|
|
1961
|
+
this.tryonSuccessDetector.tick(C),yield new Promise((async t=>{await e.onBeforeRender(),this.startTimer("raf"),requestAnimationFrame((()=>{this.stopTimer("raf"),this.camera&&c===this.renderedModelId&&(e.renderBackground(),this.postRenderProcessing({context:A,leftExists:a,rightExists:s,leftAnimationTime:n,rightAnimationTime:E}),a&&this.leftAnimationMixer&&this.leftAnimationMixer.setTime(n),s&&this.rightAnimationMixer&&this.rightAnimationMixer.setTime(E),this.startTimer("draw"),this.draw(),this.stopTimer("draw"),this.fpsCounter.tick()),t(gi.next(A))}))}))}}catch(A){throw this._getError(A,"Generator error")}finally{this.dataProvider.destroy()}}async prepareMode(A){if(A===_t&&!this.cv){const{cv:A}=await this.libInjector.getOpenCv()
|
|
1932
1962
|
this.cv=A}}start3dMode(){throw new Error("Not implemented")}render3dModeBackground(){let A=getCurrentBackground()
|
|
1933
1963
|
if(!A){const[e]=getBackgroundCanvases()
|
|
1934
1964
|
this.renderBackground(e),A=e}const{width:e,height:t}=this.viewerSize
|
|
@@ -1938,7 +1968,14 @@ this.fpsCounter.initCalcSessionFps()
|
|
|
1938
1968
|
const{p01Fps:t,p10Fps:i,p50Fps:g}=this.fpsCounter.getStat(),r=this.fpsCounter.getFps()
|
|
1939
1969
|
this.fpsLogger.initLogFps(),this.emitter.emit(iA,{fps:r,modelId:e}),this.logger.logEvent("log_tryon_succeeded",e,{p1:t,p10:i,p50:g})})).on("canceled",(A=>{let{modelId:e}=A
|
|
1940
1970
|
this.logger.logEvent("log_tryon_canceled",e)}))}prepareModelFor3dMode(){throw new Error("Not implemented")}viewerSetPOI(){throw new Error("Not implemented")}resetCameraPosition(){throw new Error("Not implemented")}gotoDefaultPosition(){throw new Error("Not implemented")}viewerCameraZoom(){throw new Error("Not implemented")}toggleDimensions(){throw new Error("Not implemented")}getAvailableDimensions(){throw new Error("Not implemented")}getShowDimensionsDelay(){throw new Error("Not implemented")}handleBecameVisible(){throw new Error("Not implemented")}viewerGoToCustomPOI(){throw new Error("Not implemented")}viewerGetCurrentPOI(){throw new Error("Not implemented")}viewerGetPOIsList(){throw new Error("Not implemented")}getDebugData(){var A,e
|
|
1941
|
-
return{renderResolution:`${null===(A=this.renderSize)||void 0===A?void 0:A.width}x${null===(e=this.renderSize)||void 0===e?void 0:e.height}`}}
|
|
1971
|
+
return{renderResolution:`${null===(A=this.renderSize)||void 0===A?void 0:A.width}x${null===(e=this.renderSize)||void 0===e?void 0:e.height}`}}async getGltfModels(){const A=this.renderedModelId
|
|
1972
|
+
if(!A)throw new Error("No model is set.")
|
|
1973
|
+
return await this.modelsManager.getItem(A,(async A=>{const e=await A,t=e.get_model_files(),i=e.get_rmdesc().get_left().get_name(),g=e.get_rmdesc().get_right().get_name(),[r,I]=this.getTagsForObjects(Gi)
|
|
1974
|
+
return((A,e,t)=>{if(e.length!==t.length)throw new Error("filenames and ids must have the same size.")
|
|
1975
|
+
return e.map(((A,e)=>[A,t[e]])).filter((A=>{let[e]=A
|
|
1976
|
+
return Boolean(null===e||void 0===e?void 0:e.endsWith(".gltf"))})).map((e=>{let t,[i,g]=e
|
|
1977
|
+
try{t=JSON.parse((new TextDecoder).decode(A[i]))}catch(A){throw new Ue("Failed to parse gltf.",{cause:A})}return{name:i,id:g,gltf:t}}))})(t,[i,g],[r,I])}))}setGltfModel(A){let{id:e,gltf:t}=A
|
|
1978
|
+
throw new Error("Not implemented.")}}function RenderStepR2_defineProperty(A,e,t){return(e=function RenderStepR2_toPropertyKey(A){var e=function RenderStepR2_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
1942
1979
|
var t=A[Symbol.toPrimitive]
|
|
1943
1980
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
1944
1981
|
if("object"!=typeof i)return i
|
|
@@ -1946,18 +1983,19 @@ throw new TypeError("@@toPrimitive must return a primitive value.")}return("stri
|
|
|
1946
1983
|
// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
1947
1984
|
(A,"string")
|
|
1948
1985
|
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class RenderStepR2 extends RenderStepMain{constructor(A){var e
|
|
1949
|
-
super(A),RenderStepR2_defineProperty(this,"type",RenderStepR2.type),RenderStepR2_defineProperty(this,"TAG_MODEL_LEFT",1),RenderStepR2_defineProperty(this,"TAG_MODEL_RIGHT",2),RenderStepR2_defineProperty(this,"TAG_OCCLUDER_LEFT",3),RenderStepR2_defineProperty(this,"TAG_OCCLUDER_RIGHT",4),RenderStepR2_defineProperty(this,"TAG_RED_OCCLUDER_LEFT",30),RenderStepR2_defineProperty(this,"TAG_RED_OCCLUDER_RIGHT",40),RenderStepR2_defineProperty(this,"cameraRotation",Q.around_z(Math.PI/2)),RenderStepR2_defineProperty(this,"envMapAdditionalRotation",Q.identity()),this.R2=A.r2Loader,this.initRenderer=onceSuccess(this.initRenderer),this.targetColorSpace=
|
|
1950
|
-
return t.startsWith("r2_")?{...A,[t.substring(3)]:i}:A}),{})),this._modelLoadOptions={max_anisotropy:Number(this._r2Params.max_anisotropy)||8}}reInit(
|
|
1986
|
+
super(A),RenderStepR2_defineProperty(this,"type",RenderStepR2.type),RenderStepR2_defineProperty(this,"TAG_MODEL_LEFT",1),RenderStepR2_defineProperty(this,"TAG_MODEL_RIGHT",2),RenderStepR2_defineProperty(this,"TAG_OCCLUDER_LEFT",3),RenderStepR2_defineProperty(this,"TAG_OCCLUDER_RIGHT",4),RenderStepR2_defineProperty(this,"TAG_RED_OCCLUDER_LEFT",30),RenderStepR2_defineProperty(this,"TAG_RED_OCCLUDER_RIGHT",40),RenderStepR2_defineProperty(this,"cameraRotation",Q.around_z(Math.PI/2)),RenderStepR2_defineProperty(this,"envMapAdditionalRotation",Q.identity()),this.R2=A.r2Loader,this.initRenderer=onceSuccess(this.initRenderer),this.targetColorSpace=Pi,this.logger.appendLoggingData({colorspace_target:this.targetColorSpace}),this.modelLoadingStats={},this.gemEnvMapResourceLoader=new GemEnvMapResourcesLoader(this.modelMetaManager),this._r2Params=(e=A.query,Object.entries(e||{}).reduce(((A,e)=>{let[t,i]=e
|
|
1987
|
+
return t.startsWith("r2_")?{...A,[t.substring(3)]:i}:A}),{})),this._modelLoadOptions={max_anisotropy:Number(this._r2Params.max_anisotropy)||8}}reInit(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
1988
|
+
const{shadow:e}=A
|
|
1951
1989
|
return e&&this._setShadowParams(e),super.reInit(A)}tryCatchWrap(A){try{return A()}catch(A){let e
|
|
1952
|
-
const t={params:{component:
|
|
1953
|
-
if(A instanceof String)e=new
|
|
1954
|
-
else if(A instanceof Error)e=new
|
|
1955
|
-
else if(Number.isInteger(A))e=new
|
|
1990
|
+
const t={params:{component:Oi}}
|
|
1991
|
+
if(A instanceof String)e=new Ue(A,t)
|
|
1992
|
+
else if(A instanceof Error)e=new Ue(A.message,{...t,cause:A})
|
|
1993
|
+
else if(Number.isInteger(A))e=new Ue(this.lib.get_exception_msg(A),t)
|
|
1956
1994
|
else{let i
|
|
1957
|
-
try{i=JSON.stringify(A)}catch{i=(null===A||void 0===A?void 0:A.toString)instanceof Function?A.toString():"Unknown error in wrapped function"}e=new
|
|
1995
|
+
try{i=JSON.stringify(A)}catch{i=(null===A||void 0===A?void 0:A.toString)instanceof Function?A.toString():"Unknown error in wrapped function"}e=new Ue(i,t)}throw e}}async initRenderer(){try{await this.R2.init(this.customCanvas),this.lib=this.R2.lib,this.shader_library=this.R2.shader_library,this.render_target=this.R2.render_target,this.render_system=this.R2.render_system,this.mask_render_system=this.R2.mask_render_system,this.tryCatchWrap((()=>{
|
|
1958
1996
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
1959
1997
|
var A,e
|
|
1960
|
-
this.scene=new this.lib.Scene,this.scene_view=new this.lib.SceneView,this.scene_view.set_scene(this.scene),this.scene_view.set_post_processing_params({...this.scene_view.get_post_processing_params(),luma_factor:1,target_color_space:(A=this.targetColorSpace,e=this.lib,"display-p3"===A?e.ColorSpace.DISPLAY_P3:e.ColorSpace.SRGB)}),this.render_system.set_scene_view(this.scene_view),this.mask_render_system.set_scene_view(this.scene_view)}))}catch(A){throw new
|
|
1998
|
+
this.scene=new this.lib.Scene,this.scene_view=new this.lib.SceneView,this.scene_view.set_scene(this.scene),this.scene_view.set_post_processing_params({...this.scene_view.get_post_processing_params(),luma_factor:1,target_color_space:(A=this.targetColorSpace,e=this.lib,"display-p3"===A?e.ColorSpace.DISPLAY_P3:e.ColorSpace.SRGB)}),this.render_system.set_scene_view(this.scene_view),this.mask_render_system.set_scene_view(this.scene_view)}))}catch(A){throw new Ue("Failed to init renderer.",{cause:A})}}async _init(){return this.initRenderer(),super._init()}_destroyEnvMap(A){}_updateEnvMap(A){const{dfgLut:e,ldCubeDiffuse:t,ldCubeGgx:i}=A
|
|
1961
1999
|
this.tryCatchWrap((()=>{this._setDfgLut(e)
|
|
1962
2000
|
const A=this.createEmptyRotatedEnvMap()
|
|
1963
2001
|
this.lib.load_env_map(A,t,i),this.scene_view.take_env_map(A),A.delete()}))}_setDfgLut(A){this.dfgLut||(this.dfgLut=this.lib.make_dfg_lut(A),this.render_system.set_dfg_lut(this.dfgLut),this.mask_render_system.set_dfg_lut(this.dfgLut))}setRmdescParams(A){const{rmdescParams:e,leftModel:t,rightModel:i,loadContext:g}=A,{colorSpace:r,rawRmdesc:I}=e
|
|
@@ -1974,13 +2012,14 @@ const I=this.lib.loadModel(g,t,e,i,this.shader_library,{...this._modelLoadOption
|
|
|
1974
2012
|
A(),r+=performance.now()-e}))}),o=performance.now()-A
|
|
1975
2013
|
await I
|
|
1976
2014
|
const a=performance.now()-A,s={loadModel:`${Math.floor(o+r)}/${Math.floor(a)}ms`}
|
|
1977
|
-
this.modelLoadingStats[t]=s}))}getTagsForObjects(A){switch(A){case
|
|
1978
|
-
case
|
|
2015
|
+
this.modelLoadingStats[t]=s}))}getTagsForObjects(A){switch(A){case Gi:return[this.TAG_MODEL_LEFT,this.TAG_MODEL_RIGHT]
|
|
2016
|
+
case ki:return[this.TAG_OCCLUDER_LEFT,this.TAG_OCCLUDER_RIGHT]
|
|
1979
2017
|
default:throw new Error(`Unexpected objects type: "${A}"`)}}getLoadContext(){return{scene:null,transforms:{}}}destroyLoadContext(A){let{scene:e}=A
|
|
1980
|
-
null===e||void 0===e||e.delete()}applyLoadContext(A){let{context:
|
|
1981
|
-
|
|
2018
|
+
null===e||void 0===e||e.delete()}applyLoadContext(A){let{context:e,firstLoad:t}=A
|
|
2019
|
+
super.applyLoadContext({context:e,firstLoad:t}),this.tryCatchWrap((()=>{const{scene:A,transforms:t}=e
|
|
2020
|
+
this.scene_view.set_scene(A),this.scene_view.access_scene_transform().update()
|
|
1982
2021
|
for(const[A,e]of Object.entries(t))this.setModelMatrix(Number(A),e)
|
|
1983
|
-
this.scene=
|
|
2022
|
+
this.scene=A}))}clearCanvas(){this.lib&&
|
|
1984
2023
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
1985
2024
|
function clearGl(A){A.scissor(0,0,A.canvas.width,A.canvas.height),A.colorMask(!0,!0,!0,!0),A.clearColor(0,0,0,0),A.clear(A.COLOR_BUFFER_BIT|A.DEPTH_BUFFER_BIT)}(this.lib.getContext())}unloadScene(){super.unloadScene(),this.scene&&(this.scene.delete(),this.scene=null),this.clearCanvas(),this.leftOccluder=null,this.rightOccluder=null}disposeRenderTargets(){for(var A=arguments.length,e=new Array(A),t=0;t<A;t++)e[t]=arguments[t]
|
|
1986
2025
|
e.forEach((A=>{null===A||void 0===A||A.delete()}))}disposeTextures(){for(var A=arguments.length,e=new Array(A),t=0;t<A;t++)e[t]=arguments[t]
|
|
@@ -2043,7 +2082,7 @@ c.take_object(D),D.delete(),this.scene_view.access_scene_transform().update(),th
|
|
|
2043
2082
|
const o={x:e,y:t,width:i,height:g},a=new this.lib.RenderTarget(o)
|
|
2044
2083
|
return a.set_pass({color_attachments:[{image:this.scene.get_texture(r).get(),mip_level:0,slice:0}],depth_stencil_attachment:{image:this.scene.get_texture(I).get(),mip_level:0,slice:0}}),a}disposeCamera(){this.camera&&this.camera.delete(),super.disposeCamera()}__reset_camera(A){let{width:e,height:t}=A
|
|
2045
2084
|
this.disposeCamera()
|
|
2046
|
-
const i=matrix_M4.make_intrinsics_for_frame_size(e,t),g=i[0][0],r=i[1][1],I=i[0][2],o=i[1][2],a=[0,0,0],s=
|
|
2085
|
+
const i=matrix_M4.make_intrinsics_for_frame_size(e,t),g=i[0][0],r=i[1][1],I=i[0][2],o=i[1][2],a=[0,0,0],s=_i.applyQuaternion([0,0,-1],this.cameraRotation),B=_i.applyQuaternion([0,1,0],this.cameraRotation)
|
|
2047
2086
|
this.tryCatchWrap((()=>{this.camera=new this.lib.RenderCamera,this.camera.look_at(a,s,B),this.camera.set_perspective_projection_with_intrinsic_params(g,r,I,o,.1,100)}))}configureRenderTarget(A){let{width:e,height:t}=A
|
|
2048
2087
|
this.customCanvas.width=e,this.customCanvas.height=t
|
|
2049
2088
|
const i={x:0,y:0,width:e,height:t}
|
|
@@ -2066,66 +2105,68 @@ this.lib.load_env_map(g,A,e)
|
|
|
2066
2105
|
let r=!1
|
|
2067
2106
|
i.access_each_object((A=>{this.accessMaterials(A.get_tag(),(A=>{this.lib.material_get_type(A)===this.lib.MaterialType.PBR_GEM_TRANSMISSIVE&&A.get_material_params().use_dedicated_gem_envmap&&(r=!0,A.set_env_map(g))}),i)}))}render3dModeBackground(){const A=super.render3dModeBackground(),e=A.getContext("2d"),{width:t,height:i}=A,g=e.getImageData(0,0,t,i),r=g.data.map(((A,e)=>e%4===3?A:255*Math.pow(A/255,2.2))),I=new Uint32Array(r.buffer,0,t*i)
|
|
2068
2107
|
for(let A=0;A<i/2;++A){const e=A*t,g=t*(i-A-1),r=I.slice(e,e+t)
|
|
2069
|
-
I.copyWithin(e,g,g+t),I.set(r,g)}return this.backgroundTexture=this.createTexture({width:t,height:i,data:r,min_filter:this.lib.sg_filter.FILTER_LINEAR,mag_filter:this.lib.sg_filter.FILTER_LINEAR}),this.scene_view.set_background(this.backgroundTexture),A}preRenderProcessing(){}
|
|
2108
|
+
I.copyWithin(e,g,g+t),I.set(r,g)}return this.backgroundTexture=this.createTexture({width:t,height:i,data:r,min_filter:this.lib.sg_filter.FILTER_LINEAR,mag_filter:this.lib.sg_filter.FILTER_LINEAR}),this.scene_view.set_background(this.backgroundTexture),A}preRenderProcessing(){}setGltfModel(A){let{id:e,gltf:t}=A
|
|
2109
|
+
if(!this.scene)throw new Error("Scene is empty.")
|
|
2110
|
+
setModelStructure(this.lib,this.scene,e,t)}}RenderStepR2_defineProperty(RenderStepR2,"type",Oi)
|
|
2070
2111
|
|
|
2071
2112
|
;// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
2072
|
-
const
|
|
2113
|
+
const Vi="TYPE_INNER_STUB",Wi={intersectLegWithShin:function(A,e,t){if(!t)return A.map(((A,t)=>this.max(A,255-e[t])))
|
|
2073
2114
|
for(let i=0;i<t.length;++i)t[i]=this.max(A[i],255-e[i])},getInnerStubs:async function(A,e){try{await A.wait_for_load()
|
|
2074
|
-
const[t,i]=await this.getObjectsFromLoader(A,
|
|
2075
|
-
return{leftInnerStub:null===t||void 0===t?void 0:t.scene,rightInnerStub:null===i||void 0===i?void 0:i.scene}}catch(A){throw new
|
|
2115
|
+
const[t,i]=await this.getObjectsFromLoader(A,Vi,e)
|
|
2116
|
+
return{leftInnerStub:null===t||void 0===t?void 0:t.scene,rightInnerStub:null===i||void 0===i?void 0:i.scene}}catch(A){throw new Ue("Error loading inner stub",{cause:A})}},_getAdditionalModelResources:async function(A){let{modelId:e,mainPromise:t,loadContext:i}=A
|
|
2076
2117
|
const g=[t],r=await this.modelMetaManager.getMeta(e)
|
|
2077
2118
|
if(!!r.findInlineDatapackEntryByLabel("inner_stub_rmdesc")){const A=this.innerStubLoaderFactory.create(r)
|
|
2078
2119
|
g.push(this.getInnerStubs(A,i))}return Promise.all(g).then((A=>{let[e,t={}]=A
|
|
2079
|
-
return{...e,...t}})).catch((A=>{throw new
|
|
2080
|
-
return[matrix_M4.multiply(
|
|
2120
|
+
return{...e,...t}})).catch((A=>{throw new Ue("Error loading sneakers additional model resources",{cause:A,params:{model:e}})}))},getOppositeSideAutoposMatrices:function(A){let{modelAutopos:e,occluderAutopos:t,oppositeModelAutopos:i,oppositeOccluderAutopos:g,oppositeOccluderExists:r}=A
|
|
2121
|
+
return[matrix_M4.multiply(Hi,matrix_M4.from_array(e)),r?matrix_M4.identity():matrix_M4.multiply(Hi,matrix_M4.from_array(t))].map((A=>matrix_M4.to_array(A)))},TYPE_INNER_STUB:Vi}
|
|
2081
2122
|
|
|
2082
2123
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2083
|
-
class TransformMatrix{static identity(){const A=
|
|
2124
|
+
class TransformMatrix{static identity(){const A=bi.zeros(16)
|
|
2084
2125
|
return A[0]=1,A[5]=1,A[10]=1,A[15]=1,A}static ofTranslation(A){const e=TransformMatrix.identity()
|
|
2085
|
-
return e[3]=A[0],e[7]=A[1],e[11]=A[2],e}static extractTranslation(A){return[A[3],A[7],A[11]]}static mul(A,e){const t=
|
|
2126
|
+
return e[3]=A[0],e[7]=A[1],e[11]=A[2],e}static extractTranslation(A){return[A[3],A[7],A[11]]}static mul(A,e){const t=bi.zeros(16)
|
|
2086
2127
|
for(let i=0;i<4;i++)for(let g=0;g<4;g++)for(let r=0;r<4;r++)t[4*i+g]+=A[4*i+r]*e[4*r+g]
|
|
2087
|
-
return t}static mulCol(A,e){const t=
|
|
2128
|
+
return t}static mulCol(A,e){const t=bi.zeros(4)
|
|
2088
2129
|
for(let i=0;i<4;i++)for(let g=0;g<4;g++)t[i]+=A[4*i+g]*e[g]
|
|
2089
|
-
return t}static copy(A){return A.slice()}}const
|
|
2130
|
+
return t}static copy(A){return A.slice()}}const Zi=TransformMatrix
|
|
2090
2131
|
function isModelSkinnable(A,e){let t=e[A].shin,i=e[A].foot
|
|
2091
2132
|
return t&&i}function findJointsTransform(A,e,t,i,g,r,I,o){let{frameWidth:a,frameHeight:s}=I
|
|
2092
|
-
const B=[a/2,0,0,a/2,0,-s/2,0,s/2,0,0,1,0,0,0,0,1],n=o.matFromArray(4,4,o.CV_32F,e.flat()).inv(o.DECOMP_LU).data32F,E=
|
|
2133
|
+
const B=[a/2,0,0,a/2,0,-s/2,0,s/2,0,0,1,0,0,0,0,1],n=o.matFromArray(4,4,o.CV_32F,e.flat()).inv(o.DECOMP_LU).data32F,E=Zi.mul(B,t.get_projection_matrix()),C=o.matFromArray(4,4,o.CV_32F,E).inv(o.DECOMP_LU).data32F,c=Zi.mul(t.get_view_matrix(),Zi.mul(r.get_scene_transform().get_world_space_transform(A),n)),h=o.matFromArray(4,4,o.CV_32F,c).inv(o.DECOMP_LU).data32F
|
|
2093
2134
|
let d=g[A].shin.flat(),l=g[A].foot.flat()
|
|
2094
|
-
l=
|
|
2095
|
-
let u=o.matFromArray(4,4,o.CV_32F,d).inv(o.DECOMP_LU).data32F,w=
|
|
2096
|
-
y=
|
|
2097
|
-
let S=[Math.cos(i.shinLine),Math.sin(i.shinLine)],G=
|
|
2098
|
-
k=
|
|
2099
|
-
let b=
|
|
2100
|
-
_=
|
|
2101
|
-
let U=
|
|
2135
|
+
l=Zi.mul(e.flat(),l),d=Zi.mul(l,d)
|
|
2136
|
+
let u=o.matFromArray(4,4,o.CV_32F,d).inv(o.DECOMP_LU).data32F,w=Zi.mulCol(d,[0,0,0,1]),D=Zi.mulCol(d,[0,1,0,0]),f=bi.normalize(D),m=bi.add(w,bi.multiplyScalar(f,.57)),p=Array.from(m),y=Zi.mulCol(Zi.mul(E,c),m),R=Zi.mulCol(Zi.mul(E,c),w),N=y[3]
|
|
2137
|
+
y=bi.multiplyScalar(y,1/y[3]),R=bi.multiplyScalar(R,1/R[3])
|
|
2138
|
+
let S=[Math.cos(i.shinLine),Math.sin(i.shinLine)],G=bi.len(bi.sub(y,R)),k=bi.add(R,bi.multiplyScalar(S.concat([0,0]),G))
|
|
2139
|
+
k=bi.multiplyScalar(k,N)
|
|
2140
|
+
let b=Zi.mulCol(c,m),_=Zi.mulCol(C,k)
|
|
2141
|
+
_=bi.multiplyScalar(_,1/_[3]),_=bi.multiplyScalar(_,1/_[2]),_=bi.multiplyScalar(_,b[2]),_[3]=1
|
|
2142
|
+
let U=Zi.mulCol(h,_),L=Zi.mulCol(u,p),v=Zi.mulCol(u,U),H=
|
|
2102
2143
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2103
|
-
function find_3d_rotation(A,e){let t=
|
|
2144
|
+
function find_3d_rotation(A,e){let t=bi.dot(A,e),i=M3.identity()
|
|
2104
2145
|
if(Math.abs(t-1)<1e-10)return M3.identity()
|
|
2105
2146
|
if(Math.abs(t+1)<1e-10)return M3.from_array([-1,0,0,0,-1,0,0,0,-1])
|
|
2106
|
-
{let g=
|
|
2107
|
-
return M3.add(i,o,I)}}(
|
|
2108
|
-
return[...
|
|
2147
|
+
{let g=bi.outer(e,A),r=bi.outer(A,e),I=M3.sub(M3.from_array(g.flat()),M3.from_array(r.flat())),o=M3.multiplyScalar(M3.multiply(I,I),1/(1+t))
|
|
2148
|
+
return M3.add(i,o,I)}}(bi.normalize(L.slice(0,3)),bi.normalize(v.slice(0,3)))
|
|
2149
|
+
return[...H[0],0,...H[1],0,...H[2],0,0,0,0,1]}function applyJointsTransforms(A,e,t,i,g,r){if(!isModelSkinnable(A,g))return
|
|
2109
2150
|
let I=g[A].shin.flat(),o=g[A].foot.flat()
|
|
2110
|
-
o=
|
|
2111
|
-
let a=r.matFromArray(4,4,r.CV_32F,o).inv(r.DECOMP_LU).data32F,s=
|
|
2151
|
+
o=Zi.mul(t.flat(),o),I=Zi.mul(o,I)
|
|
2152
|
+
let a=r.matFromArray(4,4,r.CV_32F,o).inv(r.DECOMP_LU).data32F,s=Zi.mul(a,I),B=Zi.mul(s,e)
|
|
2112
2153
|
i.access_object(A).access((A=>!A.get_name().includes("Shin_bone")||(A.set_transform_matrix(B),!1)),(A=>{}))}
|
|
2113
2154
|
// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
2114
|
-
const
|
|
2155
|
+
const Xi="\n #version 300 es\n precision lowp float;\n layout(location = 0) in vec3 a_pos;\n layout(location = 1) in vec2 a_tex_pos;\n\n out vec2 v_tex_pos;\n\n void main() {\n v_tex_pos = a_tex_pos;\n gl_Position = vec4(a_pos.y, -a_pos.x, a_pos.z, 1.0);\n }\n".trim(),$i="\n #version 300 es\n precision lowp float;\n layout(location = 0) in vec3 a_pos;\n layout(location = 1) in vec2 a_tex_pos;\n\n out vec2 v_tex_pos;\n\n void main() {\n v_tex_pos = a_tex_pos;\n gl_Position = vec4(a_pos, 1.0);\n }\n".trim(),Ag="\n #version 300 es\n precision lowp float;\n precision lowp sampler2D;\n uniform sampler2D u_tex;\n in vec2 v_tex_pos;\n out vec4 out_color;\n\n void main() {\n if (texture(u_tex, v_tex_pos).r > 0.5) {\n discard;\n } else {\n out_color = vec4(1.0, 1.0, 1.0, 1.0);\n }\n }\n".trim()
|
|
2115
2156
|
|
|
2116
2157
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2117
|
-
class Layout3InnerStubLoader{constructor(A,e,t){this.meta=A,this.resourceManager=e,this.resourceKey=t,this.loaded=!1,this.modelFiles={},this.rmdesc=null,this.loadingStartTime=0,this.loadingFinishTime=0,this.loadingPromise=this.initLoading()}get_model_files(){return this.modelFiles}is_loaded(){return this.loaded}wait_for_load(){return this.loadingPromise}get_rmdesc(){if(!this.rmdesc)throw new
|
|
2118
|
-
return this.rmdesc}get_raw_rmdesc(){if(!this.rmdesc)throw new
|
|
2158
|
+
class Layout3InnerStubLoader{constructor(A,e,t){this.meta=A,this.resourceManager=e,this.resourceKey=t,this.loaded=!1,this.modelFiles={},this.rmdesc=null,this.loadingStartTime=0,this.loadingFinishTime=0,this.loadingPromise=this.initLoading()}get_model_files(){return this.modelFiles}is_loaded(){return this.loaded}wait_for_load(){return this.loadingPromise}get_rmdesc(){if(!this.rmdesc)throw new Ue("No .rmdesc file in model archive")
|
|
2159
|
+
return this.rmdesc}get_raw_rmdesc(){if(!this.rmdesc)throw new Ue("No .rmdesc file in model archive")
|
|
2119
2160
|
return this.rmdesc.get_raw()}get_model_file(A){return this.modelFiles[A]}getLoadingStartTime(){return this.loadingStartTime}getLoadingFinishTime(){return this.loadingFinishTime}async initLoading(){this.loadingStartTime=performance.now()
|
|
2120
2161
|
const A=this.meta.findInlineDatapackEntryByLabel("inner_stub_rmdesc")
|
|
2121
|
-
if(!A)throw new
|
|
2162
|
+
if(!A)throw new Ue("No inner stub .rmdesc file found in model meta.")
|
|
2122
2163
|
this.rmdesc=new RMDesc(A.content)
|
|
2123
2164
|
const e=[this.rmdesc.get_left().get_name(),this.rmdesc.get_right().get_name()].filter((A=>!!A)),t=this.resourceManager.getLoader(this.resourceKey,e.map((A=>ResourceFileFactory.bufferResourceOf(this.meta.getUriDatapackEntryByName(A).uri))))
|
|
2124
2165
|
return(await t.load()).forEach(((A,t)=>{this.modelFiles[e[t]]=A})),this.loaded=!0,this.loadingFinishTime=performance.now(),this.loadingFinishTime-this.loadingStartTime}}
|
|
2125
2166
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2126
|
-
class InnerStubLoaderFactory{constructor(A){this.RESOURCE_KEY="innerStub",this.resourceManager=new
|
|
2167
|
+
class InnerStubLoaderFactory{constructor(A){this.RESOURCE_KEY="innerStub",this.resourceManager=new Ti({cacheStrategies:{[this.RESOURCE_KEY]:{name:Ti.CACHE_LRU,size:2*A}}})}create(A){return new Layout3InnerStubLoader(A,this.resourceManager,this.RESOURCE_KEY)}}const eg=
|
|
2127
2168
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2128
|
-
class PointSet{constructor(A){this.points=A}distanceTo(A){return this.points.map((e=>
|
|
2169
|
+
class PointSet{constructor(A){this.points=A}distanceTo(A){return this.points.map((e=>_i.distanceTo([e.x,e.y],[A.x,A.y])))}distanceToSet(A){return this.points.map((e=>A.distanceTo(e)))}distanceToSetDiag(A){return this.points.map(((e,t)=>_i.distanceTo([e.x,e.y],[A.points[t].x,A.points[t].y])))}}
|
|
2129
2170
|
function parabolaImitator(A){return clamp(A<(arguments.length>1&&void 0!==arguments[1]?arguments[1]:.05)?A/(arguments.length>2&&void 0!==arguments[2]?arguments[2]:2):A*(arguments.length>3&&void 0!==arguments[3]?arguments[3]:3.5),0,arguments.length>4&&void 0!==arguments[4]?arguments[4]:1)}function sum(A){return A.reduce(((A,e)=>A+e),0)}function RenderStepSneaker_defineProperty(A,e,t){return(e=function RenderStepSneaker_toPropertyKey(A){var e=function RenderStepSneaker_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2130
2171
|
var t=A[Symbol.toPrimitive]
|
|
2131
2172
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2143,7 +2184,7 @@ const g=!e,r=!t
|
|
|
2143
2184
|
if(g&&r)return this.leftInnerStub=null,void(this.rightInnerStub=null)
|
|
2144
2185
|
this.tryCatchWrap((()=>{g?e=this.getOppositeSideModel({scene:t},i).scene:r&&(t=this.getOppositeSideModel({scene:e},i).scene)
|
|
2145
2186
|
const A=this.createColoredMaterial({color:[1,1,1,1]})
|
|
2146
|
-
try{[e,t].forEach((e=>{this.accessMeshes(e,(e=>{e.set_material(A)}),i.scene)}))}finally{A.delete()}this.addLeftModel(e,((A,e)=>g?matrix_M4.multiply(e,
|
|
2187
|
+
try{[e,t].forEach((e=>{this.accessMeshes(e,(e=>{e.set_material(A)}),i.scene)}))}finally{A.delete()}this.addLeftModel(e,((A,e)=>g?matrix_M4.multiply(e,Hi):e)),this.addRightModel(t,((A,e)=>r?matrix_M4.multiply(e,Hi):e)),this.setObjectStencilBit(e,this.LEG_OCCLUSION_BIT_LEFT,i.scene),this.setObjectStencilBit(t,this.LEG_OCCLUSION_BIT_RIGHT,i.scene)})),[this.leftInnerStub,this.rightInnerStub]=[e,t]}setAdditionalResources(A){let{additionalResources:{leftInnerStub:e,rightInnerStub:t,...i},loadContext:g,...r}=A
|
|
2147
2188
|
super.setAdditionalResources({additionalResources:i,loadContext:g,...r}),this.setInnerStubs({leftInnerStub:e,rightInnerStub:t,loadContext:g})}updateOccluders(A){let{rightModel:e,leftModel:t,leftOccluderScene:i,rightOccluderScene:g,loadContext:r}=A
|
|
2148
2189
|
this.tryCatchWrap((()=>{const A=this.createColoredMaterial({color:[1,1,1,1]}),i=this.createColoredMaterial({color:[1,1,1,1]}),g=this.createColoredMaterial({color:[1,0,0,1]})
|
|
2149
2190
|
i.set_color_write_mask(this.lib.sg_color_mask.COLORMASK_NONE),i.set_depth_write(!0),[[t.scene,this.TAG_TRANSPARENT_SNEAKER_LEFT],[e.scene,this.TAG_TRANSPARENT_SNEAKER_RIGHT]].forEach((A=>{let[e,t]=A
|
|
@@ -2205,8 +2246,8 @@ n.set_material(i)
|
|
|
2205
2246
|
const E=new this.lib.Node
|
|
2206
2247
|
E.take_mesh(n),n.delete()
|
|
2207
2248
|
const C=new this.lib.SceneObject(g)
|
|
2208
|
-
return C.take_node(E),E.delete(),C}finally{A.delete()}}))}createInvertedSegmentationProgram(A){this.tryCatchWrap((()=>{const e=new this.lib.ProgramDescriptorBuilder,t=A?
|
|
2209
|
-
e.set_shader_source(this.lib.sg_shader_stage.SHADERSTAGE_VS,t),e.set_shader_source(this.lib.sg_shader_stage.SHADERSTAGE_FS,
|
|
2249
|
+
return C.take_node(E),E.delete(),C}finally{A.delete()}}))}createInvertedSegmentationProgram(A){this.tryCatchWrap((()=>{const e=new this.lib.ProgramDescriptorBuilder,t=A?Xi:$i
|
|
2250
|
+
e.set_shader_source(this.lib.sg_shader_stage.SHADERSTAGE_VS,t),e.set_shader_source(this.lib.sg_shader_stage.SHADERSTAGE_FS,Ag),e.set_image(this.lib.sg_shader_stage.SHADERSTAGE_FS,0,"u_tex",this.lib.sg_image_type.IMAGETYPE_2D,this.lib.sg_sampler_type.SAMPLERTYPE_FLOAT)
|
|
2210
2251
|
const i=e.build()
|
|
2211
2252
|
this.shader_library.take_program_descriptor(this.TAG_PROGRAM_INVERTED_SEGMENTATION,i),i.delete(),e.delete()}))}createInvertedSegmentationMaterial(A){let{alpha:e}=A
|
|
2212
2253
|
const t=new this.lib.ShaderMaterial
|
|
@@ -2238,15 +2279,15 @@ super.dispose(),null===(A=this.shader_library)||void 0===A||A.delete_program_des
|
|
|
2238
2279
|
this.frameWidth=t,this.frameHeight=i,this.frameRequiresRotation=e.requiresRotation(),this.meanLeft2D=A.objects.left.keypoints.reduce(((A,e)=>[A[0]+e.x,A[1]+e.y]),[0,0]).map((e=>e/A.objects.left.keypoints.length)),this.meanLeft2D[0]/=t,this.meanLeft2D[1]/=i,this.meanRight2D=A.objects.right.keypoints.reduce(((A,e)=>[A[0]+e.x,A[1]+e.y]),[0,0]).map((e=>e/A.objects.right.keypoints.length)),this.meanRight2D[0]/=t,this.meanRight2D[1]/=i
|
|
2239
2280
|
let{width:g,height:r}=e.getDownscaledSize()
|
|
2240
2281
|
const backformShinLine=A=>{let I=e.requiresRotation()?[A[0]*i/g,A[1]*t/r]:[A[0]*t/g,A[1]*i/r]
|
|
2241
|
-
return e.requiresRotation()&&(I=[-I[1],I[0]]),I=
|
|
2282
|
+
return e.requiresRotation()&&(I=[-I[1],I[0]]),I=bi.multiplyScalar(I,1/(bi.len(I)+1e-8)),Math.atan2(I[1],I[0])}
|
|
2242
2283
|
A.objects.left.shinLine=backformShinLine(A.objects.left.shinLineCoords),A.objects.right.shinLine=backformShinLine(A.objects.right.shinLineCoords)
|
|
2243
|
-
const I=[0,1],o=[.1,.3],kptsAlpha=(A,e)=>clamp(((A,e)=>{let t=new
|
|
2244
|
-
return sum(t.distanceToSetDiag(i))/A.length})(A,e)/(A=>{let e=new
|
|
2284
|
+
const I=[0,1],o=[.1,.3],kptsAlpha=(A,e)=>clamp(((A,e)=>{let t=new eg(A),i=new eg(e)
|
|
2285
|
+
return sum(t.distanceToSetDiag(i))/A.length})(A,e)/(A=>{let e=new eg(A)
|
|
2245
2286
|
return Math.max(...e.distanceToSet(e).flat())})(A)*40,I[0],I[1]),confidenceAlpha=A=>1-clamp((A-o[0])/(o[1]-o[0]),I[0],I[1]),alpha_blend_2d_angles=(A,e,t)=>(A%=2*Math.PI,e%=2*Math.PI,Math.abs(A-e)>Math.PI&&(A>e?e+=2*Math.PI:A+=2*Math.PI),((1-t)*A+t*e)%(2*Math.PI))
|
|
2246
2287
|
if(this.prev_keypoints.left){let e=kptsAlpha(A.objects.left.keypoints,this.prev_keypoints.left.kpts)*confidenceAlpha(A.objects.left.shinError)
|
|
2247
2288
|
A.objects.left.shinLine=alpha_blend_2d_angles(this.prev_keypoints.left.shinLine,A.objects.left.shinLine,e)}if(this.prev_keypoints.right){let e=kptsAlpha(A.objects.right.keypoints,this.prev_keypoints.right.kpts)*confidenceAlpha(A.objects.right.shinError)
|
|
2248
|
-
A.objects.right.shinLine=alpha_blend_2d_angles(this.prev_keypoints.right.shinLine,A.objects.right.shinLine,e)}this.prev_keypoints={left:this.objectExists(A.objects.left)?{kpts:A.objects.left.keypoints,shinLine:A.objects.left.shinLine}:null,right:this.objectExists(A.objects.right)?{kpts:A.objects.right.keypoints,shinLine:A.objects.right.shinLine}:null}}}Object.assign(RenderStepSneaker.prototype,
|
|
2249
|
-
const
|
|
2289
|
+
A.objects.right.shinLine=alpha_blend_2d_angles(this.prev_keypoints.right.shinLine,A.objects.right.shinLine,e)}this.prev_keypoints={left:this.objectExists(A.objects.left)?{kpts:A.objects.left.keypoints,shinLine:A.objects.left.shinLine}:null,right:this.objectExists(A.objects.right)?{kpts:A.objects.right.keypoints,shinLine:A.objects.right.shinLine}:null}}}Object.assign(RenderStepSneaker.prototype,Wi)
|
|
2290
|
+
const tg=RenderStepSneaker,ig={prepareContext:A=>(A.objects.left.exists&&(A.objects.right.exists=!1),A),postRenderProcessing:()=>{},getOppositeSideAutoposMatrices:A=>{let{modelAutopos:e,oppositeModelAutopos:t,occluderAutopos:i,oppositeOccluderAutopos:g,oppositeOccluderExists:r}=A
|
|
2250
2291
|
if(!r)throw new Error("Expected both occluders to exist")
|
|
2251
2292
|
return[t||matrix_M4.to_array(matrix_M4.identity()),g]}}
|
|
2252
2293
|
function RenderStepWatch_defineProperty(A,e,t){return(e=function RenderStepWatch_toPropertyKey(A){var e=function RenderStepWatch_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
@@ -2271,8 +2312,8 @@ null===(g=i)||void 0===g||g.delete()}}))}renderLeftOcclusions(){}renderRightOccl
|
|
|
2271
2312
|
this.tryCatchWrap((()=>{[this.leftSegmentationTexture,this.rightSegmentationTexture]=[r[0],r[1]].map((A=>this.setSceneTexture(this.createSegmentationTexture({width:i,height:g})))),[[this.leftSegmentationTexture,this.TAG_SEGMENTATION_PLANE_LEFT],[this.rightSegmentationTexture,this.TAG_SEGMENTATION_PLANE_RIGHT]].forEach((A=>{let[e,t]=A
|
|
2272
2313
|
this.createPlaneObject({alpha:e,tag:t,flipY:!0,no_color:!this.DEBUG_SEGMENTATION,stencil_bits:this.DEBUG_SEGMENTATION?[]:[this.OCCLUDER_OCCLUSION_BIT],requiresRotation:I})})),this.orderObjects(this.leftShadowReceiver,this.TAG_SEGMENTATION_PLANE_LEFT,this.TAG_OCCLUDER_LEFT,this.leftModel),this.orderObjects(this.rightShadowReceiver,this.TAG_SEGMENTATION_PLANE_RIGHT,this.TAG_OCCLUDER_RIGHT,this.rightModel),this.setObjectStencilBit(this.leftModel,this.OCCLUSION_BIT),this.setObjectStencilBit(this.rightModel,this.OCCLUSION_BIT)}))}updateSegmentationData(A){let{segmentation:e}=A
|
|
2273
2314
|
const{buffers:t,size:i}=e,[g,r]=i;[[this.leftSegmentationTexture,t[0]],[this.rightSegmentationTexture,t[1]]].forEach((A=>{let[e,t]=A
|
|
2274
|
-
return this.updateTexture(e,t)}))}disposeSceneForOcclusions(){this.disposeObjects(this.TAG_SEGMENTATION_PLANE_LEFT,this.TAG_SEGMENTATION_PLANE_RIGHT)}}Object.assign(RenderStepWatch.prototype,
|
|
2275
|
-
const
|
|
2315
|
+
return this.updateTexture(e,t)}))}disposeSceneForOcclusions(){this.disposeObjects(this.TAG_SEGMENTATION_PLANE_LEFT,this.TAG_SEGMENTATION_PLANE_RIGHT)}}Object.assign(RenderStepWatch.prototype,ig)
|
|
2316
|
+
const gg=RenderStepWatch,rg={Pelvis:0,L_Hip:1,R_Hip:2,Spine1:3,L_Knee:4,R_Knee:5,Spine2:6,L_Ankle:7,R_Ankle:8,Spine3:9,L_Foot:10,R_Foot:11,Neck:12,L_Collar:13,R_Collar:14,Head:15,L_Shoulder:16,R_Shoulder:17,L_Elbow:18,R_Elbow:19,L_Wrist:20,R_Wrist:21,L_Hand:22,R_Hand:23},Ig={L_Hip:"Pelvis",R_Hip:"Pelvis",Spine1:"Pelvis",L_Knee:"L_Hip",R_Knee:"R_Hip",Spine2:"Spine1",L_Ankle:"L_Knee",R_Ankle:"R_Knee",Spine3:"Spine2",L_Foot:"L_Ankle",R_Foot:"R_Ankle",Neck:"Spine3",L_Collar:"Spine3",R_Collar:"Spine3",Head:"Neck",L_Shoulder:"L_Collar",R_Shoulder:"R_Collar",L_Elbow:"L_Shoulder",R_Elbow:"R_Shoulder",L_Wrist:"L_Elbow",R_Wrist:"R_Elbow",L_Hand:"L_Wrist",R_Hand:"R_Wrist"},og=new Set(["L_Hip","R_Hip","L_Knee","R_Knee","L_Ankle","R_Ankle","L_Foot","R_Foot"]),ag=new Set(Object.keys(rg)),sg=["Pelvis","Spine1","Spine2","Spine3","Neck","L_Collar","R_Collar","Head","L_Shoulder","R_Shoulder"],toggleModelNode=function(A,e){let t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,g=!1
|
|
2276
2317
|
return A.access_each_node((A=>{const r=A.get_name();(Array.isArray(e)&&e.includes(r)||r===e)&&(g=!0,A.set_visible(t),null!==i&&A.access_each_mesh((A=>{const e=A.access_material(),t=e.get_material_params()
|
|
2277
2318
|
e.set_material_params({...t,color:[...t.color.slice(0,3),i]})})))})),g},getUnitedBoundingBox=(A,e,t,i)=>{let g={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}
|
|
2278
2319
|
return e.forEach((e=>{e&&(g=i.aabb_unite(g,getBoundingBox(A,e,t)))})),g},getBoundingBox=(A,e,t)=>{if("SceneObject"===e.$$.ptrType.registeredClass.name)return t.compute_scene_object_aabb(A.get_tag())
|
|
@@ -2291,11 +2332,11 @@ return A.forEach((A=>{const{min:[t,i,g],max:[r,I,o]}=e,[a,s,B]=A
|
|
|
2291
2332
|
e.min=[Math.min(t,a),Math.min(i,s),Math.min(g,B)],e.max=[Math.max(r,a),Math.max(I,s),Math.max(o,B)]})),e})(getAABBCorners(A).map((A=>matrix_M4.to_vec(matrix_M4.multiply(matrix_M4.from_array(e),matrix_M4.vec_to_col(A))).slice(0,3))))
|
|
2292
2333
|
|
|
2293
2334
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2294
|
-
function toColumn(A){return A.concat(1)}function transformPoint(A,e){return
|
|
2335
|
+
function toColumn(A){return A.concat(1)}function transformPoint(A,e){return Zi.mulCol(e,toColumn(A)).slice(0,3)}function calculateJointsPositions(A,e){return((A,e)=>{let t=new Array(e.length).fill(null)
|
|
2295
2336
|
const i=new Map(e.map(((A,e)=>[A,e])))
|
|
2296
2337
|
let g=0
|
|
2297
2338
|
return A.access((A=>{const r=A.get_name()
|
|
2298
|
-
return i.has(r)&&(t[i.get(r)]=A,g++),g<e.length}),(()=>{})),t})(A,Object.keys(
|
|
2339
|
+
return i.has(r)&&(t[i.get(r)]=A,g++),g<e.length}),(()=>{})),t})(A,Object.keys(rg)).map((t=>{if(!t)throw new Ue("No required node found")
|
|
2299
2340
|
return transformPoint([0,0,0],e.compute_world_space_transform(A.get_tag(),t.get_node_index()))}))}function RenderStepWearable_defineProperty(A,e,t){return(e=function RenderStepWearable_toPropertyKey(A){var e=function RenderStepWearable_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2300
2341
|
var t=A[Symbol.toPrimitive]
|
|
2301
2342
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2303,23 +2344,23 @@ if("object"!=typeof i)return i
|
|
|
2303
2344
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2304
2345
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2305
2346
|
(A,"string")
|
|
2306
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2347
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Bg=class RenderStepWearable extends RenderStepR2{constructor(){super(...arguments),RenderStepWearable_defineProperty(this,"DEBUG_SEGMENTATION",!1),RenderStepWearable_defineProperty(this,"DEBUG_OCCLUDERS",!1),RenderStepWearable_defineProperty(this,"TAG_PERSON_OCCLUDER",201),RenderStepWearable_defineProperty(this,"OCCLUSION_BIT",0),RenderStepWearable_defineProperty(this,"OCCLUDER_OCCLUSION_BIT",1),RenderStepWearable_defineProperty(this,"OCCLUDER_Z_SHIFT",.025),RenderStepWearable_defineProperty(this,"cameraRotation",Q.around_x(Math.PI)),RenderStepWearable_defineProperty(this,"envMapAdditionalRotation",Q.around_y(-Math.PI/2)),RenderStepWearable_defineProperty(this,"jointsRestPositions",null)}render(A,e,t){let{translation:i,jointsTransforms:g}=t
|
|
2307
2348
|
this._applyTransformToModel(this.leftModel,i),this._applyJointsTransformsTo(this.leftModel,g)}renderLeftOcclusions(A){let{translation:e,jointsTransforms:t}=A
|
|
2308
|
-
const i=
|
|
2349
|
+
const i=Zi.copy(e)
|
|
2309
2350
|
i[11]+=this.OCCLUDER_Z_SHIFT,this._applyTransformToModel(this.TAG_PERSON_OCCLUDER,i),this._applyJointsTransformsTo(this.TAG_PERSON_OCCLUDER,t)}_applyJointsTransformsTo(A,e){!
|
|
2310
2351
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2311
2352
|
function applyJointsTransformsTo(A,e,t){const i=A.get_tag()
|
|
2312
2353
|
A.accept((A=>{const g=A.get_name()
|
|
2313
|
-
return!
|
|
2354
|
+
return!ag.has(g)||og.has(g)||e.set_model_space_transform(i,A.get_node_index(),{local_transform:Zi.mul(A.get_transform_matrix(),t[rg[g]]),morph_weights:A.get_morph_weights()}),!0}),(()=>{}))}(this.scene.access_object(A),this.scene_view.access_scene_transform(),e)}_applyTransformToModel(A,e){this.scene_view.access_scene_transform().set_world_space_transform(A,e)}applyLoadContext(A){super.applyLoadContext(A),this.jointsRestPositions=calculateJointsPositions(this.scene.access_object(this.TAG_PERSON_OCCLUDER),this.scene_view.get_scene_transform())}setupOccluders(A,e){this.DEBUG_OCCLUDERS||this._makeModelTransparent(this.TAG_PERSON_OCCLUDER,e.scene)}prepareContext(A){return A.persistent.jointsRestPositions=this.jointsRestPositions,super.prepareContext(A)}_makeModelTransparent(A,e){const t=this.createTransparentMaterial()
|
|
2314
2355
|
this.accessMeshes(A,(A=>A.set_material(t)),e)}updateOccluders(){}renderRightOcclusions(){}validateUniversalOccluders(A){let{leftOccluderScene:e}=A
|
|
2315
|
-
if(!e)throw new
|
|
2356
|
+
if(!e)throw new Ue("Empty person occluder.")}showLeftObjects(){[this.TAG_PERSON_OCCLUDER,this.leftModel].map((A=>this.showObject(A)))}showRightObjects(){}setupSceneForOcclusions(A){let{context:e}=A
|
|
2316
2357
|
e.persistent.viewMatrix=this.camera.get_view_matrix()}getTaggedSegmentation(A){return[]}updateSegmentationData(A){let{segmentation:e,sWidth:t,sHeight:i}=A
|
|
2317
2358
|
const{buffers:g}=e,r=[]
|
|
2318
2359
|
this.getTaggedSegmentation(g).forEach((A=>{let[e,g]=A
|
|
2319
2360
|
this.removeObjectIfExists(g),e&&(this._createSegmentation(e,g,t,i),r.push(g))})),this.orderObjects(this.TAG_PERSON_OCCLUDER,r,this.leftModel)}_createSegmentation(A,e,t,i,g){this.tryCatchWrap((()=>{const r=this.setSceneTexture(this.createSegmentationTexture({width:t,height:i}))
|
|
2320
2361
|
this.createPlaneObject({alpha:r,tag:e,no_color:!this.DEBUG_SEGMENTATION,flipX:!1,...g}),this.updateTexture(r,A)}))}postRenderProcessing(){}getViewport(A){const e=function scaleBbox(A,e,t){const[i,g,r,I]=A,o=t.width/e.width,a=t.height/e.height
|
|
2321
2362
|
return[i*o,g*a,r*o,I*a]}(A.scaledBbox,A,this.renderSize),t=e[2],i=e[3]
|
|
2322
|
-
return{x:e[0],y:this.renderSize.height-e[1]-i,width:t,height:i}}getTagsForObjects(A){return A===
|
|
2363
|
+
return{x:e[0],y:this.renderSize.height-e[1]-i,width:t,height:i}}getTagsForObjects(A){return A===ki?[this.TAG_PERSON_OCCLUDER]:super.getTagsForObjects(A)}getOppositeSideModel(A){let{scene:e,animations:t}=A
|
|
2323
2364
|
return{scene:e,animations:t}}getOppositeSideAutoposMatrices(){return[[],[]]}unloadScene(){super.unloadScene(),this.jointsRestPositions=null}disposeSceneForOcclusions(){}}
|
|
2324
2365
|
function RenderStepBag_defineProperty(A,e,t){return(e=function RenderStepBag_toPropertyKey(A){var e=function RenderStepBag_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2325
2366
|
var t=A[Symbol.toPrimitive]
|
|
@@ -2328,7 +2369,7 @@ if("object"!=typeof i)return i
|
|
|
2328
2369
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2329
2370
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2330
2371
|
(A,"string")
|
|
2331
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2372
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Qg=class RenderStepBag extends Bg{constructor(){super(...arguments),RenderStepBag_defineProperty(this,"TAG_SEGMENTATION_PLANE_LEFT_HAND",101),RenderStepBag_defineProperty(this,"TAG_SEGMENTATION_PLANE_RIGHT_HAND",102),RenderStepBag_defineProperty(this,"TAG_SEGMENTATION_PLANE_PHONE",103)}getTaggedSegmentation(A){return[[A.phoneSegmentation,this.TAG_SEGMENTATION_PLANE_PHONE],[A.leftHandForearmSegmentation,this.TAG_SEGMENTATION_PLANE_LEFT_HAND],[A.rightHandForearmSegmentation,this.TAG_SEGMENTATION_PLANE_RIGHT_HAND]]}}
|
|
2332
2373
|
function RenderStepClothes_defineProperty(A,e,t){return(e=function RenderStepClothes_toPropertyKey(A){var e=function RenderStepClothes_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2333
2374
|
var t=A[Symbol.toPrimitive]
|
|
2334
2375
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2336,8 +2377,8 @@ if("object"!=typeof i)return i
|
|
|
2336
2377
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2337
2378
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2338
2379
|
(A,"string")
|
|
2339
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2340
|
-
const i=
|
|
2380
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const ng=class RenderStepClothes extends Bg{constructor(){super(...arguments),RenderStepClothes_defineProperty(this,"TAG_SEGMENTATION_HAND_FOREARM",102),RenderStepClothes_defineProperty(this,"TAG_SEGMENTATION_PLANE_PHONE",103),RenderStepClothes_defineProperty(this,"TAG_SEGMENTATION_PLANE_FACE",104),RenderStepClothes_defineProperty(this,"TAG_SEGMENTATION_HAND",105),RenderStepClothes_defineProperty(this,"TYPE_HANDS_OCCLUDER","TYPE_HANDS_OCCLUDER"),RenderStepClothes_defineProperty(this,"TAG_HANDS_OCCLUDER_LEFT",251),RenderStepClothes_defineProperty(this,"TAG_HANDS_OCCLUDER_RIGHT",252)}setupOccluders(A,e){this.DEBUG_OCCLUDERS||(this._makeModelTransparent(this.TAG_PERSON_OCCLUDER,e.scene),this._makeModelTransparent(this.TAG_HANDS_OCCLUDER_LEFT,e.scene),this._makeModelTransparent(this.TAG_HANDS_OCCLUDER_RIGHT,e.scene))}showLeftObjects(){[this.TAG_PERSON_OCCLUDER,!this.DEBUG_SEGMENTATION&&this.TAG_HANDS_OCCLUDER_LEFT,!this.DEBUG_SEGMENTATION&&this.TAG_HANDS_OCCLUDER_RIGHT,this.leftModel].map((A=>this.showObject(A)))}renderLeftOcclusions(A){let{translation:e,jointsTransforms:t}=A
|
|
2381
|
+
const i=Zi.copy(e)
|
|
2341
2382
|
i[11]+=this.OCCLUDER_Z_SHIFT,this._applyTransformToModel(this.TAG_PERSON_OCCLUDER,i),this._applyJointsTransformsTo(this.TAG_PERSON_OCCLUDER,t),this._applyTransformToModel(this.TAG_HANDS_OCCLUDER_LEFT,i),this._applyJointsTransformsTo(this.TAG_HANDS_OCCLUDER_LEFT,t),this._applyTransformToModel(this.TAG_HANDS_OCCLUDER_RIGHT,i),this._applyJointsTransformsTo(this.TAG_HANDS_OCCLUDER_RIGHT,t)}getTaggedSegmentation(A){return[[A.faceSegmentation,this.TAG_SEGMENTATION_PLANE_FACE],[A.phoneSegmentation,this.TAG_SEGMENTATION_PLANE_PHONE],[A.handForearmSegmentation,this.TAG_SEGMENTATION_HAND_FOREARM],[A.handSegmentation,this.TAG_SEGMENTATION_HAND]]}updateOccluders(A){let{loadContext:e}=A
|
|
2342
2383
|
this.tryCatchWrap((()=>{this.setObjectStencilBit(this.TAG_HANDS_OCCLUDER_LEFT,this.OCCLUDER_OCCLUSION_BIT,e.scene),this.setObjectStencilBit(this.TAG_HANDS_OCCLUDER_RIGHT,this.OCCLUDER_OCCLUSION_BIT,e.scene)}))}updateSegmentationData(A){let{segmentation:e,sWidth:t,sHeight:i}=A
|
|
2343
2384
|
const{buffers:g}=e,r=[]
|
|
@@ -2346,7 +2387,7 @@ if(this.removeObjectIfExists(g),e&&g!==this.TAG_SEGMENTATION_HAND_FOREARM)this._
|
|
|
2346
2387
|
else if(e&&g===this.TAG_SEGMENTATION_HAND_FOREARM){const A=this.DEBUG_SEGMENTATION?[]:[this.OCCLUDER_OCCLUSION_BIT],I=e.map((A=>255-A))
|
|
2347
2388
|
this._createSegmentation(I,g,t,i,{stencil_bits:A}),r.push(g)}})),this.orderObjects(this.TAG_PERSON_OCCLUDER,r,[this.TAG_HANDS_OCCLUDER_LEFT,this.TAG_HANDS_OCCLUDER_RIGHT],this.leftModel),this.setObjectStencilBit(this.leftModel,this.OCCLUSION_BIT)}getTagsForObjects(A){return A===this.TYPE_HANDS_OCCLUDER?[this.TAG_HANDS_OCCLUDER_LEFT,this.TAG_HANDS_OCCLUDER_RIGHT]:super.getTagsForObjects(A)}async getAdditionalModelResources(A){let{modelId:e,loadContext:t}=A
|
|
2348
2389
|
const i=await this.getOccluderUrl("hands_occluder.zip")
|
|
2349
|
-
return this.modelsManager.ensureModelLoader({id:i,type:
|
|
2390
|
+
return this.modelsManager.ensureModelLoader({id:i,type:ki}),Promise.all([super.getAdditionalModelResources({modelId:e,loadContext:t}),this.modelsManager.getItem(i,(async A=>{const e=await A
|
|
2350
2391
|
await e.wait_for_load()
|
|
2351
2392
|
const[i]=await this.getObjectsFromLoader(e,this.TYPE_HANDS_OCCLUDER,t)
|
|
2352
2393
|
return{modelOccluder:i.scene}}))]).then((A=>{let[e,t]=A
|
|
@@ -2358,14 +2399,14 @@ if("object"!=typeof i)return i
|
|
|
2358
2399
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2359
2400
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2360
2401
|
(A,"string")
|
|
2361
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2402
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Eg=class RenderStepScarf extends Bg{constructor(){super(...arguments),RenderStepScarf_defineProperty(this,"TAG_SEGMENTATION_PLANE_LEFT_HAND",101),RenderStepScarf_defineProperty(this,"TAG_SEGMENTATION_PLANE_RIGHT_HAND",102),RenderStepScarf_defineProperty(this,"TAG_SEGMENTATION_PLANE_PHONE",103),RenderStepScarf_defineProperty(this,"TAG_SEGMENTATION_PLANE_FACE",104)}getTaggedSegmentation(A){return[[A.faceSegmentation,this.TAG_SEGMENTATION_PLANE_FACE],[A.phoneSegmentation,this.TAG_SEGMENTATION_PLANE_PHONE],[A.leftHandForearmSegmentation,this.TAG_SEGMENTATION_PLANE_LEFT_HAND],[A.rightHandForearmSegmentation,this.TAG_SEGMENTATION_PLANE_RIGHT_HAND]]}}
|
|
2362
2403
|
|
|
2363
2404
|
;// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
2364
|
-
var
|
|
2365
|
-
var
|
|
2405
|
+
var Cg={maxDistance:5.5,minDistance:.4,zoomSpeed:.025,rotateSpeed:.03,dampingFactor:.0015},cg={FIRST_ROTATE:800,SECOND_ROTATE:1600,THIRD_ROTATE:800,DELAY:300,CYCLE_DELAY:1600},hg="in",dg="cm",lg="inch"
|
|
2406
|
+
var ug=__webpack_require__("2098992b303273f4e0d8")
|
|
2366
2407
|
|
|
2367
2408
|
;// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2368
|
-
const
|
|
2409
|
+
const wg={MAIN:"main",PLANE_AO:"plane_ao",DIMENSIONS_CM:"dimension_cm",DIMENSIONS_INCH:"dimension_inch",STRAP_LONG:"strap_long",STRAP_LONG_AO:"plane_ao_strap"},Dg=ug.Ay.Easing.Quadratic.InOut,fg=1300,mg=600,pg=500,yg=200,Rg=350,Mg=1.1,Fg=.9,Ng={zoomSpeed:.4,rotateSpeed:.3,dampingFactor:.04},Sg={rotateSpeed:.7},Gg={width:1920,height:1080},kg={width:2560,height:1440},bg=[{angle:-Math.PI/4,duration:cg.FIRST_ROTATE},{angle:Math.PI/2,duration:cg.SECOND_ROTATE},{angle:-Math.PI/4,duration:cg.THIRD_ROTATE}]
|
|
2369
2410
|
function CameraControls_defineProperty(A,e,t){return(e=function CameraControls_toPropertyKey(A){var e=function CameraControls_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2370
2411
|
var t=A[Symbol.toPrimitive]
|
|
2371
2412
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2373,9 +2414,9 @@ if("object"!=typeof i)return i
|
|
|
2373
2414
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2374
2415
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2375
2416
|
(A,"string")
|
|
2376
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class CameraControls extends
|
|
2417
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class CameraControls extends Wt{constructor(A){let{r2:e,orbitControls:t,animations:i,viewerSize:g,modelType:r,model:I,modelLength:o,modelCenter:a,interactionElement:s,scene:B,sceneView:n,renderSystem:E,get3dModeModel:C,tryCatchWrap:c,collidableNodes:h,enableDoubleClick:d}=A
|
|
2377
2418
|
super(),CameraControls_defineProperty(this,"initCameraControls",(()=>{const{width:A,height:e}=this.viewerSize
|
|
2378
|
-
this.camera=this.getNewCamera(A,e),this.cameraSafeDistance
|
|
2419
|
+
this.camera=this.getNewCamera(A,e),this.cameraSafeDistance=.35*this.modelLength,this.initialModelMatrix=matrix_M4.from_array(this.sceneView.access_scene_transform().get_world_space_transform(this.model.get_tag())),this.enableDoubleClick&&(this.detachDoubleClick=((A,e)=>{let t,i,g=0
|
|
2379
2420
|
const onPointerDown=r=>{if(!r.isPrimary)return
|
|
2380
2421
|
const I=(new Date).getTime(),o=I-g,a=[r.clientX,r.clientY]
|
|
2381
2422
|
if(clearTimeout(t),o<e&&o>0){const e={}
|
|
@@ -2383,34 +2424,34 @@ for(const A in r)e[A]=r[A]
|
|
|
2383
2424
|
const t=new CustomEvent("dblClick",{detail:{...e,firstPoint:i}})
|
|
2384
2425
|
A.dispatchEvent(t)}else t=setTimeout((function(){clearTimeout(t)}),e)
|
|
2385
2426
|
i=a,g=I}
|
|
2386
|
-
return A.addEventListener("pointerdown",onPointerDown),()=>{A.removeEventListener("pointerdown",onPointerDown)}})(this.interactionElement,350),this.interactionElement.addEventListener("dblClick",this.onDoubleClick)),this.scaleOrbitControlsSettings(),this.orbitControls.maxTargetDistance=this.modelLength/2,this.orbitControls.origin=this.modelCenter,this.orbitControls.on("change",this.onControlsChanged),this.orbitControls.on("overZoom",this.bounceZoomBack)})),CameraControls_defineProperty(this,"scaleOrbitControlsSettings",(()=>{const A=
|
|
2387
|
-
for(const[e,t]of Object.entries(A)){const A=
|
|
2427
|
+
return A.addEventListener("pointerdown",onPointerDown),()=>{A.removeEventListener("pointerdown",onPointerDown)}})(this.interactionElement,350),this.interactionElement.addEventListener("dblClick",this.onDoubleClick)),this.scaleOrbitControlsSettings(),this.orbitControls.maxTargetDistance=this.modelLength/2,this.orbitControls.origin=this.modelCenter,this.orbitControls.on("change",this.onControlsChanged),this.orbitControls.on("overZoom",this.bounceZoomBack)})),CameraControls_defineProperty(this,"scaleOrbitControlsSettings",(()=>{const A=Cg
|
|
2428
|
+
for(const[e,t]of Object.entries(A)){const A=Ng[e]??0,i=Sg[e]??1/0
|
|
2388
2429
|
this.orbitControls[e]=clamp(t*this.modelLength,A,i)}})),CameraControls_defineProperty(this,"getRenderCamera",(()=>this.camera)),CameraControls_defineProperty(this,"update",(()=>{this.orbitControls.updateCamera()})),CameraControls_defineProperty(this,"zoomToDirection",(A=>{const{position:e,target:t,distance:i,maxDistance:g,enabled:r,minDistanceBounceStart:I,maxDistanceBounceStart:o}=this.orbitControls
|
|
2389
2430
|
if(!1===r)return
|
|
2390
|
-
let a=i+.05*g*(A===
|
|
2391
|
-
return a=clamp(a,I,o),this.lookAtWithAnimation(this.getPositionOnDistance(e,t,a),t,
|
|
2392
|
-
return A.forEach((A=>{t.push(getAABBCorners(getBoundingBox(this.model,A,e)))})),t})),CameraControls_defineProperty(this,"updateMinDistance",((A,e,t)=>{const i=this.initialCollidableBoundingBoxes.map((A=>A.map((A=>matrix_M4.to_vec(matrix_M4.multiply(t,matrix_M4.vec_to_col(
|
|
2431
|
+
let a=i+.05*g*(A===hg?-1:1)
|
|
2432
|
+
return a=clamp(a,I,o),this.lookAtWithAnimation(this.getPositionOnDistance(e,t,a),t,pg)})),CameraControls_defineProperty(this,"getCollidableNodesBoundingBoxes",(A=>{const e=this.sceneView.access_scene_transform(),t=[]
|
|
2433
|
+
return A.forEach((A=>{t.push(getAABBCorners(getBoundingBox(this.model,A,e)))})),t})),CameraControls_defineProperty(this,"updateMinDistance",((A,e,t)=>{const i=this.initialCollidableBoundingBoxes.map((A=>A.map((A=>matrix_M4.to_vec(matrix_M4.multiply(t,matrix_M4.vec_to_col(_i.sub(A,e)))).slice(0,3)))))
|
|
2393
2434
|
let g=1/0
|
|
2394
|
-
i.forEach((e=>{g=Math.min(g,...e.map((e=>A[2]-e[2])))})),this.orbitControls.minDistance=A[2]+this.cameraSafeDistance-g})),CameraControls_defineProperty(this,"updateSceneTransformations",((A,e)=>{const t=
|
|
2395
|
-
matrix_M4.setTranslation(g,
|
|
2396
|
-
const r=
|
|
2435
|
+
i.forEach((e=>{g=Math.min(g,...e.map((e=>A[2]-e[2])))})),this.orbitControls.minDistance=A[2]+this.cameraSafeDistance-g})),CameraControls_defineProperty(this,"updateSceneTransformations",((A,e)=>{const t=_i.sub(A,e),i=matrix_M4.extractRotation(matrix_M4.view_matrix(t,[0,0,0],this.upDirection)),g=matrix_M4.copy(this.initialModelMatrix)
|
|
2436
|
+
matrix_M4.setTranslation(g,_i.sub(matrix_M4.extractTranslation(g),e)),this.sceneView.access_scene_transform().set_world_space_transform(this.model.get_tag(),matrix_M4.multiply(i,g).flat())
|
|
2437
|
+
const r=_i.negate(matrix_M4.extractTranslation(matrix_M4.from_array(this.camera.get_view_matrix()))),I=_i.len(t)/_i.len(r),o=_i.multiplyScalar(r,I)
|
|
2397
2438
|
this.updateMinDistance(o,e,i),this.camera.look_at(o,[0,0,0],this.upDirection)})),CameraControls_defineProperty(this,"lookAt",((A,e)=>{this.orbitControls.lookAt(A,e)})),CameraControls_defineProperty(this,"lookAtWithAnimation",(async(A,e,t)=>this.animations.playLookAt(A,e,t))),CameraControls_defineProperty(this,"lookAtWithBounceAnimation",(async(A,e,t)=>this.animations.playLookAtWithBounce(A,e,t))),CameraControls_defineProperty(this,"getPointPositionBeforeTransformations",(A=>{const{position:e,target:t}=this.orbitControls,i=matrix_M4.copy(this.initialModelMatrix),g=matrix_M4.transpose(matrix_M4.extractRotation(matrix_M4.view_matrix(e,t,this.upDirection))),r=matrix_M4.from_array(this.sceneView.access_scene_transform().get_world_space_transform(this.model.get_tag())),I=matrix_M4.extractTranslation(r)
|
|
2398
|
-
matrix_M4.setTranslation(i,
|
|
2399
|
-
return
|
|
2439
|
+
matrix_M4.setTranslation(i,_i.sub(I,A))
|
|
2440
|
+
return _i.negate(matrix_M4.extractTranslation(matrix_M4.multiply(g,i)))})),CameraControls_defineProperty(this,"focusOnPoint",(async A=>{const{modelLength:e,orbitControls:t}=this,{position:i,target:g,minDistance:r}=t,{hit:I,position_ws:o}=this.renderSystem.pick(A),a=_i.sub(i,g),s=_i.len(a)>1.6*e,B=s?2*r:3*e
|
|
2400
2441
|
let n=this.getPositionOnDistance(i,g,B),E=g
|
|
2401
2442
|
if(I&&s){const A=this.getPointPositionBeforeTransformations(o)
|
|
2402
|
-
n=
|
|
2403
|
-
return
|
|
2443
|
+
n=_i.add(n,_i.sub(A,g)),E=A}return this.lookAtWithAnimation(n,E,mg)})),CameraControls_defineProperty(this,"getPositionOnDistance",((A,e,t)=>{const i=_i.sub(A,e),g=t/_i.len(i)
|
|
2444
|
+
return _i.add(_i.multiplyScalar(i,g),e)})),CameraControls_defineProperty(this,"adjustRotationSpeed",(()=>{const A=_i.len(this.orbitControls.position),{minDistance:e,maxDistance:t}=this.orbitControls,i=((A,e,t)=>(A-e)/(t-e))(A,e,t),g=Ng.rotateSpeed,r=g+(Sg.rotateSpeed-g)*(A=>1-Math.pow(1-A,5))(i)
|
|
2404
2445
|
this.orbitControls.rotateSpeed=r})),CameraControls_defineProperty(this,"onControlsChanged",(A=>{let{position:e,target:t}=A
|
|
2405
2446
|
this.updateSceneTransformations(e,t),this.adjustRotationSpeed(),this.emit("change")})),CameraControls_defineProperty(this,"bounceZoomBack",(A=>{let{bounceTo:e}=A
|
|
2406
2447
|
if(void 0===e)return
|
|
2407
2448
|
const{position:t,target:i}=this.orbitControls
|
|
2408
|
-
return this.lookAtWithAnimation(this.getPositionOnDistance(t,i,e),i,
|
|
2409
|
-
|
|
2449
|
+
return this.lookAtWithAnimation(this.getPositionOnDistance(t,i,e),i,yg)})),CameraControls_defineProperty(this,"onDoubleClick",(A=>{const{width:e,height:t}=this.viewerSize,{firstPoint:i}=A.detail,g=[i[0]/e,i[1]/t],r=[A.detail.clientX/e,A.detail.clientY/t]
|
|
2450
|
+
_i.len(_i.sub(g,r))<=.05&&this.focusOnPoint(r)})),CameraControls_defineProperty(this,"setViewerSize",(A=>{this.viewerSize=A,updateCameraAspect(this.camera,A.width/A.height)})),CameraControls_defineProperty(this,"dispose",(()=>{this.orbitControls.dispose(),this.orbitControls.off("change",this.onControlsChanged),this.enableDoubleClick&&(this.detachDoubleClick(),this.interactionElement.removeEventListener("dblClick",this.onDoubleClick))})),this.r2=e,this.orbitControls=t,this.animations=i,this.viewerSize=g,this.modelType=r,this.model=I,this.modelLength=o,this.modelCenter=a,this.interactionElement=s,this.scene=B,this.sceneView=n,this.renderSystem=E,this.get3dModeModel=C,this.tryCatchWrap=c,this.initialCollidableBoundingBoxes=this.getCollidableNodesBoundingBoxes(h),this.enableDoubleClick=d,this.upDirection=[0,1,0],this.adjustRotationSpeed=Dt(this.adjustRotationSpeed,300),this.focusOnPoint=wt(this.focusOnPoint,mg,!1),this.initCameraControls()}getNewCamera(A,e){return this.tryCatchWrap((()=>{const t=new this.r2.RenderCamera
|
|
2410
2451
|
return updateCameraAspect(t,A/e),t}))}getZoomBounceDistances(){const{minDistance:A,maxDistance:e}=this.orbitControls
|
|
2411
|
-
return{minDistanceBounceStart:A*
|
|
2452
|
+
return{minDistanceBounceStart:A*Mg,maxDistanceBounceStart:e*Fg}}getDistanceToFitBoundingBox(A,e,t){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,g=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0
|
|
2412
2453
|
const{width:r,height:I}=this.viewerSize
|
|
2413
|
-
if(isBoundingBoxEmpty(t))return
|
|
2454
|
+
if(isBoundingBoxEmpty(t))return _i.len(_i.sub(A,e))
|
|
2414
2455
|
const o=Math.max(t.max[0],Math.abs(t.min[0])),a=Math.max(t.max[1],Math.abs(t.min[1])),s=t.max[2],B=1-g/r,n=39.6*(1-i/I),E=((A,e)=>360*Math.atan(Math.tan(A*Math.PI/360)*e)/Math.PI)(39.6,r/I)*B,C=o/Math.tan(Math.PI*E/360),c=a/Math.tan(Math.PI*n/360)
|
|
2415
2456
|
return Math.max(C,c)+s}}function Spherical_defineProperty(A,e,t){return(e=function Spherical_toPropertyKey(A){var e=function Spherical_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2416
2457
|
var t=A[Symbol.toPrimitive]
|
|
@@ -2429,12 +2470,12 @@ if("object"!=typeof i)return i
|
|
|
2429
2470
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2430
2471
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2431
2472
|
(A,"string")
|
|
2432
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class OrbitControls extends
|
|
2473
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class OrbitControls extends Wt{constructor(A,e){super(),OrbitControls_defineProperty(this,"enabled",!0),OrbitControls_defineProperty(this,"maxDistance",1/0),OrbitControls_defineProperty(this,"minDistance",0),OrbitControls_defineProperty(this,"maxTargetDistance",1/0),OrbitControls_defineProperty(this,"zoomSpeed",.03),OrbitControls_defineProperty(this,"rotateSpeed",.03),OrbitControls_defineProperty(this,"panningSpeed",.03),OrbitControls_defineProperty(this,"dampingFactor",.0015),OrbitControls_defineProperty(this,"isZooming",!1),OrbitControls_defineProperty(this,"isZoomInLocked",!1),OrbitControls_defineProperty(this,"isZoomOutLocked",!1),OrbitControls_defineProperty(this,"isPanningMode",!1),OrbitControls_defineProperty(this,"origin",[0,0,0]),OrbitControls_defineProperty(this,"spherical",new Spherical),OrbitControls_defineProperty(this,"sphericalDelta",new Spherical),OrbitControls_defineProperty(this,"zoomScale",1),OrbitControls_defineProperty(this,"pointers",[]),OrbitControls_defineProperty(this,"position",[0,0,-1]),OrbitControls_defineProperty(this,"target",[0,0,0]),OrbitControls_defineProperty(this,"desirableDistance",this.distance),OrbitControls_defineProperty(this,"zoomPointersStartDistance",null),OrbitControls_defineProperty(this,"rotateStart",null),OrbitControls_defineProperty(this,"panningStart",null),OrbitControls_defineProperty(this,"panningDelta",[0,0]),OrbitControls_defineProperty(this,"addListeners",(()=>{this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("pointercancel",this.onPointerUp),this.domElement.addEventListener("wheel",this.handleMouseWheelZoom,{passive:!1}),this.domElement.addEventListener("contextmenu",this.onContextMenu)})),OrbitControls_defineProperty(this,"removeListeners",(()=>{this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("pointercancel",this.onPointerUp),this.domElement.removeEventListener("wheel",this.handleMouseWheelZoom),this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp)})),OrbitControls_defineProperty(this,"onContextMenu",(A=>{A.preventDefault()})),OrbitControls_defineProperty(this,"onPointerDown",(A=>{0===this.pointers.length&&(this.domElement.setPointerCapture(A.pointerId),this.domElement.addEventListener("pointermove",this.onPointerMove),window.addEventListener("pointerup",this.onPointerUp),this.emit("start")),this.addPointer(A),("touch"===A.pointerType&&2===this.pointers.length||"touch"!==A.pointerType&&2===A.buttons)&&this.startPanning(A)})),OrbitControls_defineProperty(this,"onPointerMove",(A=>{this.enabled&&("touch"===A.pointerType?this.onTouchMove(A):this.onMouseMove(A))})),OrbitControls_defineProperty(this,"onTouchMove",(A=>{this.updatePointer(A),1===this.pointers.length?this.handleRotation(A):2===this.pointers.length&&(this.handlePanning(A),this.handleTouchZoom(A),this.updateCamera())})),OrbitControls_defineProperty(this,"onMouseMove",(A=>{this.updatePointer(A)
|
|
2433
2474
|
const e=1===A.buttons
|
|
2434
2475
|
return 2===A.buttons||e&&this.isPanningMode?(this.handlePanning(A),void this.updateCamera()):e?this.handleRotation(A):void this.onPointerUp(A)})),OrbitControls_defineProperty(this,"onPointerUp",(A=>{this.removePointer(A),0===this.pointers.length&&(this.domElement.releasePointerCapture(A.pointerId),this.domElement.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),this.isTouchDevice&&this.checkAndPerformOverZoom(),this.emit("end")),this.panningStart&&this.emit("finishPanning",this.isPanningMode),this.rotateStart=null,this.zoomPointersStartDistance=null,this.panningStart=null})),OrbitControls_defineProperty(this,"startPanning",(A=>{this.emit("startPanning"),this.panningStart=this.getCenterBetweenPointers()})),OrbitControls_defineProperty(this,"handlePanning",(A=>{this.panningStart??(this.panningStart=this.getCenterBetweenPointers())
|
|
2435
2476
|
const e=this.getCenterBetweenPointers()
|
|
2436
|
-
this.panningDelta=
|
|
2437
|
-
const e=[A.clientX,A.clientY],t=
|
|
2477
|
+
this.panningDelta=_i.add(this.panningDelta,_i.multiplyScalar(_i.sub(e,this.panningStart),this.panningSpeed/this.domElement.clientHeight)),this.panningStart=e})),OrbitControls_defineProperty(this,"handleRotation",(A=>{this.rotateStart??(this.rotateStart=[A.clientX,A.clientY])
|
|
2478
|
+
const e=[A.clientX,A.clientY],t=_i.multiplyScalar(_i.sub(e,this.rotateStart),this.rotateSpeed)
|
|
2438
2479
|
if(1-Math.abs(this.spherical.phi-Math.PI/2)/(Math.PI/2)<.01&&Math.abs(t[1])>Math.abs(t[0])){const A=this.domElement.clientWidth,i=e[0]/A>=.5?-1:1,g=this.spherical.phi<Math.PI/2?1:-1
|
|
2439
2480
|
t[0]=t[1]*i*g}this.rotateLeft(-2*Math.PI*t[0]/this.domElement.clientHeight),this.rotateUp(-2*Math.PI*t[1]/this.domElement.clientHeight),this.rotateStart=e.slice(0),this.updateCamera()})),OrbitControls_defineProperty(this,"rotateLeft",(A=>{this.sphericalDelta.theta+=A})),OrbitControls_defineProperty(this,"rotateUp",(A=>{this.sphericalDelta.phi+=A})),OrbitControls_defineProperty(this,"handleTouchZoom",(A=>{this.isZooming=!0,this.zoomPointersStartDistance??(this.zoomPointersStartDistance=this.getDistanceBetweenTwoPointers())
|
|
2440
2481
|
const e=this.getDistanceBetweenTwoPointers(),t=this.zoomPointersStartDistance/e,i=t>1?"zoomOut":"zoomIn"
|
|
@@ -2449,13 +2490,13 @@ return{maxZoomDelta:A-this.maxDistanceBounceStart,minZoomDelta:this.minDistanceB
|
|
|
2449
2490
|
let A=null
|
|
2450
2491
|
i?(A=this.maxDistanceBounceStart,this.isZoomOutLocked=!0):t&&(A=this.minDistanceBounceStart,this.isZoomInLocked=!0),this.emit("overZoom",{bounceTo:A})}),g)))})),OrbitControls_defineProperty(this,"getZoomScale",((A,e)=>{const{maxZoomDelta:t,minZoomDelta:i}=this.getDistancesToBounceZone()
|
|
2451
2492
|
let g=0
|
|
2452
|
-
return t>0&&"zoomOut"===e?g=t/(this.maxDistance-this.maxDistanceBounceStart):i>0&&"zoomIn"===e&&(g=i/(this.minDistanceBounceStart-this.minDistance)),Math.pow(A,this.zoomSpeed*(1-(A=>A*(2-A))(g)))})),OrbitControls_defineProperty(this,"updateCamera",(()=>{this.spherical.phi+=this.sphericalDelta.phi*this.dampingFactor,this.spherical.theta+=this.sphericalDelta.theta*this.dampingFactor,this.spherical.radius*=this.zoomScale,this.clampWithinLimits(),this.sphericalDelta.theta*=1-this.dampingFactor,this.sphericalDelta.phi*=1-this.dampingFactor,this.panningDelta=
|
|
2453
|
-
const A=
|
|
2454
|
-
this.zoomScale=1,
|
|
2455
|
-
const[A,e]=
|
|
2456
|
-
return
|
|
2457
|
-
return
|
|
2458
|
-
this.pointers[e]=A})),OrbitControls_defineProperty(this,"removePointer",(A=>{const e=this.pointers.findIndex((e=>e.pointerId===A.pointerId));-1!==e&&this.pointers.splice(e,1)})),OrbitControls_defineProperty(this,"lookAt",((A,e)=>{this.target=e,this.spherical.setFromCartesianCoords(
|
|
2493
|
+
return t>0&&"zoomOut"===e?g=t/(this.maxDistance-this.maxDistanceBounceStart):i>0&&"zoomIn"===e&&(g=i/(this.minDistanceBounceStart-this.minDistance)),Math.pow(A,this.zoomSpeed*(1-(A=>A*(2-A))(g)))})),OrbitControls_defineProperty(this,"updateCamera",(()=>{this.spherical.phi+=this.sphericalDelta.phi*this.dampingFactor,this.spherical.theta+=this.sphericalDelta.theta*this.dampingFactor,this.spherical.radius*=this.zoomScale,this.clampWithinLimits(),this.sphericalDelta.theta*=1-this.dampingFactor,this.sphericalDelta.phi*=1-this.dampingFactor,this.panningDelta=_i.multiplyScalar(this.panningDelta,1-this.dampingFactor)
|
|
2494
|
+
const A=_i.sub(this.target,this.getPanningShift()),e=_i.multiplyScalar(A,Math.min(this.maxTargetDistance/_i.len(_i.sub(A,this.origin)),1)),t=_i.add(this.spherical.getCartesianCoords(),e)
|
|
2495
|
+
this.zoomScale=1,_i.len(_i.sub(t,this.position))>1e-5?(this.position=t,this.target=e,this.emit("change",{position:t,target:e})):this.isZooming&&!this.isTouchDevice&&this.endZoomInteraction()})),OrbitControls_defineProperty(this,"endZoomInteraction",(()=>{this.emit("end")})),OrbitControls_defineProperty(this,"unlockZoom",Dt((()=>{this.isZoomInLocked=!1,this.isZoomOutLocked=!1,this.isZooming=!1}),100)),OrbitControls_defineProperty(this,"clampWithinLimits",(()=>{this.spherical.phi=clamp(this.spherical.phi,.01,Math.PI-.01),this.isZooming?(this.spherical.radius=clamp(this.spherical.radius,this.minDistance,this.maxDistance),this.desirableDistance=this.spherical.radius):this.spherical.radius=clamp(this.desirableDistance,this.minDistanceBounceStart,this.maxDistanceBounceStart)})),OrbitControls_defineProperty(this,"getDistanceBetweenTwoPointers",(()=>{if(2!==this.pointers.length)return
|
|
2496
|
+
const[A,e]=_i.sub([this.pointers[0].clientX,this.pointers[0].clientY],[this.pointers[1].clientX,this.pointers[1].clientY])
|
|
2497
|
+
return _i.len([A,e])})),OrbitControls_defineProperty(this,"getCenterBetweenPointers",(()=>{if(0!==this.pointers.length)return _i.multiplyScalar(this.pointers.reduce(((A,e)=>_i.add(A,[e.clientX,e.clientY])),[0,0]),1/this.pointers.length)})),OrbitControls_defineProperty(this,"getPanningShift",(()=>{const[A,e]=this.panningDelta,{phi:t,theta:i,radius:g}=this.spherical,{sin:r,cos:I}=Math,o=[A*I(i)+e*r(i)*I(t),-e*r(t),-A*r(i)+e*I(t)*I(i)]
|
|
2498
|
+
return _i.multiplyScalar(o,g)})),OrbitControls_defineProperty(this,"addPointer",(A=>{this.pointers.push(A)})),OrbitControls_defineProperty(this,"updatePointer",(A=>{const e=this.pointers.findIndex((e=>A.pointerId===e.pointerId))
|
|
2499
|
+
this.pointers[e]=A})),OrbitControls_defineProperty(this,"removePointer",(A=>{const e=this.pointers.findIndex((e=>e.pointerId===A.pointerId));-1!==e&&this.pointers.splice(e,1)})),OrbitControls_defineProperty(this,"lookAt",((A,e)=>{this.target=e,this.spherical.setFromCartesianCoords(_i.sub(A,e)),this.desirableDistance=this.distance,this.isZooming=!0,this.clampWithinLimits(),this.isZooming=!1,this.emit("change",{position:_i.add(this.spherical.getCartesianCoords(),e),target:e})})),this.domElement=A,this.domElement.style.touchAction="none",this.isTouchDevice=e,e||(this.endZoomInteraction=Dt(this.endZoomInteraction,100)),this.addListeners()}get distance(){return this.spherical.radius}get minDistanceBounceStart(){return this.minDistance*Mg}get maxDistanceBounceStart(){return this.maxDistance*Fg}dispose(){this.removeListeners()}togglePanningMode(A){this.isPanningMode=A,this.emit(A?"startPanning":"finishPanning",A)}}
|
|
2459
2500
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2460
2501
|
class CubicBezierCurve3{constructor(A,e,t,i){this.point0=A,this.point1=e,this.point2=t,this.point3=i}getPoint(A){return[this.getCubicBezierPoint(A,this.point0[0],this.point1[0],this.point2[0],this.point3[0]),this.getCubicBezierPoint(A,this.point0[1],this.point1[1],this.point2[1],this.point3[1]),this.getCubicBezierPoint(A,this.point0[2],this.point1[2],this.point2[2],this.point3[2])]}getCubicBezierPoint(A,e,t,i,g){return(A=>(1-A)**3)(A)*e+(A=>3*A*(1-A)**2)(A)*t+(A=>3*A**2*(1-A))(A)*i+(A=>A**3)(A)*g}}function AnimationsRunner_defineProperty(A,e,t){return(e=function AnimationsRunner_toPropertyKey(A){var e=function AnimationsRunner_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2461
2502
|
var t=A[Symbol.toPrimitive]
|
|
@@ -2465,9 +2506,9 @@ throw new TypeError("@@toPrimitive must return a primitive value.")}return("stri
|
|
|
2465
2506
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2466
2507
|
(A,"string")
|
|
2467
2508
|
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class AnimationsRunner{constructor(A){let{onAnimationUpdate:e,onAnimationStart:t,onAnimationsFinished:i}=A
|
|
2468
|
-
AnimationsRunner_defineProperty(this,"updateAnimations",(()=>{this.animations.some((A=>A.isPlaying()))?requestAnimationFrame(this.tweenUpdate):this.onAnimationsFinished()})),AnimationsRunner_defineProperty(this,"removeAnimation",(A=>{const e=this.animations.indexOf(A);-1!==e&&this.animations.splice(e,1)})),AnimationsRunner_defineProperty(this,"tweenUpdate",(A=>{(0,
|
|
2509
|
+
AnimationsRunner_defineProperty(this,"updateAnimations",(()=>{this.animations.some((A=>A.isPlaying()))?requestAnimationFrame(this.tweenUpdate):this.onAnimationsFinished()})),AnimationsRunner_defineProperty(this,"removeAnimation",(A=>{const e=this.animations.indexOf(A);-1!==e&&this.animations.splice(e,1)})),AnimationsRunner_defineProperty(this,"tweenUpdate",(A=>{(0,ug.yo)(A),this.onAnimationUpdate(),this.updateAnimations()})),AnimationsRunner_defineProperty(this,"playAnimation",(async A=>{let{from:e,to:t,onUpdate:i,duration:g,easing:r=Dg}=A
|
|
2469
2510
|
return new Promise((A=>{this.onAnimationStart()
|
|
2470
|
-
const I=new
|
|
2511
|
+
const I=new ug.K(e).to(t,g).easing(r).onUpdate(i).onComplete((()=>{this.removeAnimation(I),this.updateAnimations(),A()})).start()
|
|
2471
2512
|
this.animations.push(I),this.updateAnimations()}))})),AnimationsRunner_defineProperty(this,"stopAllAnimations",(()=>{this.animations.forEach((A=>A.stop())),this.animations=[],this.onAnimationsFinished()})),this.onAnimationUpdate=e,this.onAnimationStart=t,this.onAnimationsFinished=i,this.animations=[]}}function Animations_defineProperty(A,e,t){return(e=function Animations_toPropertyKey(A){var e=function Animations_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2472
2513
|
var t=A[Symbol.toPrimitive]
|
|
2473
2514
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2477,14 +2518,14 @@ throw new TypeError("@@toPrimitive must return a primitive value.")}return("stri
|
|
|
2477
2518
|
(A,"string")
|
|
2478
2519
|
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class Animations{constructor(A){var e=this
|
|
2479
2520
|
let{orbitControls:t,r2:i,onAnimationUpdate:g}=A
|
|
2480
|
-
Animations_defineProperty(this,"onAnyAnimationStart",(()=>{this.orbitControls.enabled=!1})),Animations_defineProperty(this,"onAllAnimationsFinished",(()=>{this.orbitControls.enabled=!0})),Animations_defineProperty(this,"playLookAt",(async(A,e,t)=>this._playLookAt(A,e,t,!1))),Animations_defineProperty(this,"playLookAtWithBounce",(async(A,e,t)=>this._playLookAt(A,e,t,!0))),Animations_defineProperty(this,"_playLookAt",(async function(A,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:
|
|
2521
|
+
Animations_defineProperty(this,"onAnyAnimationStart",(()=>{this.orbitControls.enabled=!1})),Animations_defineProperty(this,"onAllAnimationsFinished",(()=>{this.orbitControls.enabled=!0})),Animations_defineProperty(this,"playLookAt",(async(A,e,t)=>this._playLookAt(A,e,t,!1))),Animations_defineProperty(this,"playLookAtWithBounce",(async(A,e,t)=>this._playLookAt(A,e,t,!0))),Animations_defineProperty(this,"_playLookAt",(async function(A,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:fg,g=arguments.length>3&&void 0!==arguments[3]&&arguments[3]
|
|
2481
2522
|
const r=e.orbitControls.position.slice(),I=e.orbitControls.target.slice(),o=e.getPositionCurve(A)
|
|
2482
2523
|
return e.runner.playAnimation({from:{normalizedTime:0,position:r,target:I},to:{normalizedTime:1,position:A,target:t},duration:i,onUpdate:A=>{let{normalizedTime:t,position:i,target:r}=A,I=i
|
|
2483
2524
|
if(g){const A=o.getPoint(t)
|
|
2484
2525
|
I=new Spherical(A[2],A[0],A[1]).getCartesianCoords()}e.orbitControls.lookAt(I,r)}})})),Animations_defineProperty(this,"getPositionCurve",(A=>{const{maxDistance:e}=this.orbitControls,t=this.orbitControls.position.slice(),i=(new Spherical).setFromCartesianCoords(t),g=(new Spherical).setFromCartesianCoords(A)
|
|
2485
|
-
return new CubicBezierCurve3([i.phi,i.theta,i.radius],[i.phi,i.theta,.5*e],[g.phi,g.theta,.4*e],[g.phi,g.theta,g.radius])})),Animations_defineProperty(this,"playNodesOpacity",(async(A,e,t)=>this.runner.playAnimation({from:{opacity:e},to:{opacity:t},duration:
|
|
2526
|
+
return new CubicBezierCurve3([i.phi,i.theta,i.radius],[i.phi,i.theta,.5*e],[g.phi,g.theta,.4*e],[g.phi,g.theta,g.radius])})),Animations_defineProperty(this,"playNodesOpacity",(async(A,e,t)=>this.runner.playAnimation({from:{opacity:e},to:{opacity:t},duration:Rg,onUpdate:e=>{let{opacity:t}=e
|
|
2486
2527
|
A.forEach((A=>{A.access_each_mesh((A=>{const e=A.access_material(),i=e.get_material_params()
|
|
2487
|
-
e.set_material_params({...i,color:[...i.color.slice(0,3),t]})}))}))}}))),Animations_defineProperty(this,"stopAll",(()=>{this.runner.stopAllAnimations()})),this.orbitControls=t,this.r2=i,this.runner=new AnimationsRunner({orbitControls:t,r2:i,onAnimationStart:this.onAnyAnimationStart,onAnimationUpdate:g,onAnimationsFinished:this.onAllAnimationsFinished})}playSphericalDelta(A,e){let{theta:t=0,phi:i=0,radius:g=0}=A,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:
|
|
2528
|
+
e.set_material_params({...i,color:[...i.color.slice(0,3),t]})}))}))}}))),Animations_defineProperty(this,"stopAll",(()=>{this.runner.stopAllAnimations()})),this.orbitControls=t,this.r2=i,this.runner=new AnimationsRunner({orbitControls:t,r2:i,onAnimationStart:this.onAnyAnimationStart,onAnimationUpdate:g,onAnimationsFinished:this.onAllAnimationsFinished})}playSphericalDelta(A,e){let{theta:t=0,phi:i=0,radius:g=0}=A,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Dg
|
|
2488
2529
|
const{theta:I,phi:o,radius:a}=this.orbitControls.spherical
|
|
2489
2530
|
return this.runner.playAnimation({from:{theta:I,phi:o,radius:a},to:{theta:I+t,phi:o+i,radius:a+g},duration:e,easing:r,onUpdate:A=>{let{theta:e,phi:t,radius:i}=A
|
|
2490
2531
|
this.orbitControls.spherical.set(i,t,e)}})}}function Viewer3d_defineProperty(A,e,t){return(e=function Viewer3d_toPropertyKey(A){var e=function Viewer3d_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
@@ -2494,7 +2535,7 @@ if("object"!=typeof i)return i
|
|
|
2494
2535
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2495
2536
|
// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
2496
2537
|
(A,"string")
|
|
2497
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2538
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const _g={[dg]:wg.DIMENSIONS_CM,[lg]:wg.DIMENSIONS_INCH}
|
|
2498
2539
|
class Viewer3d extends RenderStepR2{constructor(A){super(A),Viewer3d_defineProperty(this,"cameraRotation",Q.identity()),Viewer3d_defineProperty(this,"envMapAdditionalRotation",Q.around_y(-Math.PI/2)),Viewer3d_defineProperty(this,"getOppositeSideAutoposMatrices",(A=>{let{oppositeModelAutopos:e,oppositeOccluderAutopos:t}=A
|
|
2499
2540
|
return[e||matrix_M4.to_array(matrix_M4.identity()),t]})),Viewer3d_defineProperty(this,"requestRender3dModeFrame",(()=>{this.isModelsAnimationsExist||this.requestedRenderFrame||(this.requestedRenderFrame=requestAnimationFrame(this.renderFrame))})),Viewer3d_defineProperty(this,"renderFrame",(()=>{this.requestedRenderFrame=null,null!==this.camera&&(this.first3dRenderSucceeded&&this.fpsCounter.tick(),this.viewerModel&&(this.camera=((A,e)=>{if(isBoundingBoxEmpty(e))return A
|
|
2500
2541
|
const t=A,i=getTransformedBoundingBox(e,t.get_view_matrix()),g=-matrix_M4.extractTranslation(matrix_M4.from_array(A.get_view_matrix()))[2],r=Math.max(.01,.99*(g-i.max[2])),I=Math.max(r+.01,1.01*(g-i.min[2])),o=t.get_projection_matrix()[5],a=2*Math.atan(1/o),s=o/t.get_projection_matrix()[0]
|
|
@@ -2503,43 +2544,43 @@ let g={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}
|
|
|
2503
2544
|
return i.for_each_object((A=>{if(A.get_visible()){const i=t.compute_scene_object_aabb(A.get_tag())
|
|
2504
2545
|
g=e.aabb_unite(i,g)}})),g})(this.scene_view,this.lib)),this.draw(),this.performModelsAnimations(),this.cameraControls.update(),this.first3dRenderSucceeded||(this.first3dRenderSucceeded=!0,this.logger.logEvent("log_3d_succeeded",this.modelId),this.emitter.emit(gA,{modelId:this.modelId}),this.fpsLogger.initLogFps(),this.fpsCounter.initCalcSessionFps())))})),Viewer3d_defineProperty(this,"getZoomToFitObject",(A=>{})),Viewer3d_defineProperty(this,"viewerSetPOI",(async A=>{const{cameras:e}=this.get3dModeModel(),t=e[A]
|
|
2505
2546
|
if(0!==A)return this.cameraControls.lookAtWithBounceAnimation(t.position,t.target)
|
|
2506
|
-
const{target:i}=this.getDefaultCameraPositionAndTarget(),g=this.getCameraPositionToFitModelPOI({position:
|
|
2507
|
-
return this.cameraControls.lookAtWithBounceAnimation(g,i)})),Viewer3d_defineProperty(this,"viewerCameraZoom",(async A=>this.cameraControls.zoomToDirection(A))),Viewer3d_defineProperty(this,"stopOnboarding",(()=>{this.animations.stopAll(),this.onboardingStopped=!0,this.cameraControls.orbitControls.off("start",this.stopOnboarding)})),this.viewKeypoints=!1,this.showSegmentation=!1,this.enableDoubleClick=A.enableDoubleClick}async getResourcesFromLoader(A,e,t){const i=await this.getObjectsFromLoader(A,
|
|
2547
|
+
const{target:i}=this.getDefaultCameraPositionAndTarget(),g=this.getCameraPositionToFitModelPOI({position:_i.sub(t.position,_i.sub(t.target,i)),target:i})
|
|
2548
|
+
return this.cameraControls.lookAtWithBounceAnimation(g,i)})),Viewer3d_defineProperty(this,"viewerCameraZoom",(async A=>this.cameraControls.zoomToDirection(A))),Viewer3d_defineProperty(this,"stopOnboarding",(()=>{this.animations.stopAll(),this.onboardingStopped=!0,this.cameraControls.orbitControls.off("start",this.stopOnboarding)})),this.viewKeypoints=!1,this.showSegmentation=!1,this.enableDoubleClick=A.enableDoubleClick}async getResourcesFromLoader(A,e,t){const i=await this.getObjectsFromLoader(A,Gi,t)
|
|
2508
2549
|
let[g,r]=i
|
|
2509
2550
|
if(!g&&!r)throw new Error("Unable to get left or right model")
|
|
2510
2551
|
const I=r&&!g
|
|
2511
2552
|
return g&&!r&&(r=this.getOppositeSideModel(g,t)),I&&(g=this.getOppositeSideModel(r,t)),{leftModel:g,rightModel:r}}getOppositeSideModel(A){let{scene:e,animations:t}=A
|
|
2512
2553
|
return{scene:e,animations:t}}updateOccluders(){}getAvailableDimensions(){const{model:A}=this.get3dModeModel(),e=[]
|
|
2513
|
-
return A.access_each_node((A=>{const t=Object.keys(
|
|
2554
|
+
return A.access_each_node((A=>{const t=Object.keys(_g).find((e=>_g[e]===A.get_name()))
|
|
2514
2555
|
t&&e.push(t)})),e}get3dModeModel(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null
|
|
2515
2556
|
return this.tryCatchWrap((()=>{if(this.viewerModelInfo)return this.viewerModelInfo
|
|
2516
|
-
const e=this.scene.access_object(this.leftModel),t=A?[A]:this.getSizeCalculationNodes(e),i=this.scene_view.get_scene_transform(),g=getUnitedBoundingBox(e,t,i,this.lib),r=
|
|
2557
|
+
const e=this.scene.access_object(this.leftModel),t=A?[A]:this.getSizeCalculationNodes(e),i=this.scene_view.get_scene_transform(),g=getUnitedBoundingBox(e,t,i,this.lib),r=_i.multiplyScalar(_i.add(g.min,g.max),.5),I=((A,e,t)=>{const i=[],g=[]
|
|
2517
2558
|
return A.access((A=>{g.push(A)
|
|
2518
2559
|
const r=A.get_lens_index()
|
|
2519
2560
|
if(-1!==r){const A=calculateFullTransform(g,e),I=getCameraTargetNodeRoute(g),o=I?matrix_M4.extractTranslation(calculateFullTransform(I,e)):t
|
|
2520
2561
|
i[r]={position:matrix_M4.extractTranslation(A),target:o}}return!0}),(()=>{g.pop()})),i})(e,i,r)
|
|
2521
|
-
return this.viewerModelInfo={model:e,cameras:I,modelLength:
|
|
2562
|
+
return this.viewerModelInfo={model:e,cameras:I,modelLength:_i.len(_i.sub(g.max,g.min)),modelCenter:r},this.viewerModelInfo}))}getSizeCalculationNodes(A){const e=getNodeByName(A,wg.MAIN)
|
|
2522
2563
|
if(e)return[e]
|
|
2523
2564
|
const t=[]
|
|
2524
|
-
return A.access((A=>(A.get_mesh_count()>0&&![
|
|
2565
|
+
return A.access((A=>(A.get_mesh_count()>0&&![wg.PLANE_AO,wg.STRAP_LONG_AO,wg.DIMENSIONS_CM,wg.DIMENSIONS_INCH].includes(A.get_name())&&t.push(A),!0)),(()=>{})),t}start3dMode(){if(this.currentModelId!==this.modelId){if(this.viewerModelInfo=null,this.destroyControls(),this.isModelsAnimationsExist=this.leftAnimationMixer||this.rightAnimationMixer,!this.viewerModel||this.shouldUpdateViewerModel){const A=this.get3dModeResolution()
|
|
2525
2566
|
this.apply3dModeResolution(A),this.render3dModeBackground(),this.mergePairModels(),this.prepareModelNodes()
|
|
2526
|
-
const{model:e,cameras:t,modelLength:i,modelCenter:g}=this.get3dModeModel(),r=this.getDefaultCameraPositionAndTarget(),I=t.length>0?{target:r.target,position:
|
|
2567
|
+
const{model:e,cameras:t,modelLength:i,modelCenter:g}=this.get3dModeModel(),r=this.getDefaultCameraPositionAndTarget(),I=t.length>0?{target:r.target,position:_i.sub(t[0].position,_i.sub(t[0].target,g))}:r,o=this.getInteractionsLayer(),a=new OrbitControls(o,(A=>"ios"===A||"android"===A)(this.device))
|
|
2527
2568
|
a.on("startPanning",(()=>{this.emitter.emit(YA),this.togglePanningModeCursor(!0)})).on("finishPanning",(A=>{this.emitter.emit(JA,A),this.togglePanningModeCursor(A)})).on("start",(()=>{this.emitter.emit(WA)})).on("end",(()=>{this.emitter.emit(ZA)})),this.animations=new Animations({orbitControls:a,r2:this.lib,onAnimationUpdate:this.requestRender3dModeFrame}),this.cameraControls=new CameraControls({r2:this.lib,orbitControls:a,animations:this.animations,viewerSize:this.viewerSize,modelType:this.modelType,model:e,modelLength:i,modelCenter:g,interactionElement:o,scene:this.scene,sceneView:this.scene_view,renderSystem:this.render_system,collidableNodes:this.getSizeCalculationNodes(e),get3dModeModel:this.get3dModeModel,tryCatchWrap:this.tryCatchWrap,enableDoubleClick:this.enableDoubleClick}),this.camera=this.cameraControls.getRenderCamera(),this.cameraControls.on("change",this.requestRender3dModeFrame),I.position=this.getCameraPositionToFitModelPOI(I),this.cameraControls.lookAt(I.position,I.target),this.viewerModel=e,this.currentModelId=this.modelId,this.first3dRenderSucceeded=!1}this.isModelsAnimationsExist?requestAnimationFrame(this.renderFrame):this.requestRender3dModeFrame()}}performModelsAnimations(){const A=this._getSecondsFromMidnight()
|
|
2528
2569
|
if(this.leftAnimationMixer||this.rightAnimationMixer){var e,t
|
|
2529
2570
|
const i=A-this.leftStartTime,g=A-this.rightStartTime
|
|
2530
2571
|
null===(e=this.leftAnimationMixer)||void 0===e||e.setTime(i),null===(t=this.rightAnimationMixer)||void 0===t||t.setTime(g),requestAnimationFrame(this.renderFrame)}}setupPrevState(A,e){}getCameraPositionToFitModelPOI(A){let{position:e,target:t,withDimensions:i=!1}=A
|
|
2531
|
-
return this.tryCatchWrap((()=>{const{model:A}=this.get3dModeModel(),{width:g,height:r}=this.viewerSize,{position:I,target:o}=this.cameraControls.orbitControls
|
|
2572
|
+
return this.tryCatchWrap((()=>{const{model:A}=this.get3dModeModel(),{width:g,height:r}=this.viewerSize,{position:I,target:o,maxDistanceBounceStart:a}=this.cameraControls.orbitControls
|
|
2532
2573
|
this.cameraControls.updateSceneTransformations(e,t)
|
|
2533
|
-
let
|
|
2534
|
-
if(i){const e=getNodesByNames(A,[
|
|
2535
|
-
|
|
2536
|
-
return this.cameraControls.updateSceneTransformations(I,o),this.cameraControls.getPositionOnDistance(e,t,
|
|
2537
|
-
return{position:
|
|
2574
|
+
let s=this.getSizeCalculationNodes(A)
|
|
2575
|
+
if(i){const e=getNodesByNames(A,[wg.DIMENSIONS_CM,wg.DIMENSIONS_INCH])
|
|
2576
|
+
s=[...s,...e]}const B=getUnitedBoundingBox(A,s,this.scene_view.get_scene_transform(),this.lib),n=2*((i?114:0)+.05*r),E=.1*g,C=this.cameraControls.getDistanceToFitBoundingBox(e,t,B,n,E)
|
|
2577
|
+
return this.cameraControls.updateSceneTransformations(I,o),this.cameraControls.getPositionOnDistance(e,t,Math.min(C,a))}))}getDefaultCameraPositionAndTarget(){const{modelCenter:A}=this.get3dModeModel()
|
|
2578
|
+
return{position:_i.add([1,0,0],A),target:A}}apply3dModeResolution(A){const{width:e,height:t}=A
|
|
2538
2579
|
this.configureRenderTarget(A),this.debug&&this.emitter.emit(aA,{viewerDebug:{resolution:{width:e,height:t}}})}reset3dModeSize(A){if(super.reset3dModeSize(A),this.camera){const e=this.get3dModeResolution()
|
|
2539
2580
|
this.apply3dModeResolution(e),this.cameraControls.setViewerSize(A),this.camera=this.cameraControls.getRenderCamera(),this.requestRender3dModeFrame()}}async showOnboarding(){this.onboardingStopped=!1,this.cameraControls.orbitControls.on("start",this.stopOnboarding)
|
|
2540
|
-
const{DELAY:A,CYCLE_DELAY:e}=
|
|
2581
|
+
const{DELAY:A,CYCLE_DELAY:e}=cg,runOnboardingCycle=async()=>{for await(const[e,t]of bg.entries()){if(this.onboardingStopped)return
|
|
2541
2582
|
await new Promise((A=>{const{angle:e,duration:i}=t
|
|
2542
|
-
this.animations.playSphericalDelta({theta:e},i).then(A),this.cameraControls.orbitControls.enabled=!0})),e<
|
|
2583
|
+
this.animations.playSphericalDelta({theta:e},i).then(A),this.cameraControls.orbitControls.enabled=!0})),e<bg.length-1&&await ft(A)}await ft(e),await runOnboardingCycle()}
|
|
2543
2584
|
return await runOnboardingCycle(),!0}viewerGetCurrentPOI(){const{target:A,position:e}=this.cameraControls.orbitControls
|
|
2544
2585
|
return{cameraPosition:e,pivot:A}}viewerGoToCustomPOI(A){let{cameraPosition:e,pivot:t}=A
|
|
2545
2586
|
return this.cameraControls.lookAtWithAnimation(e,t)}gotoDefaultPosition(){const{position:A,target:e}=this.getDefaultCameraPositionAndTarget()
|
|
@@ -2547,7 +2588,7 @@ return this.cameraControls.lookAtWithBounceAnimation(this.getCameraPositionToFit
|
|
|
2547
2588
|
return A.length>0?this.viewerSetPOI(0):this.gotoDefaultPosition()}viewerGetPOIsList(){const{cameras:A}=this.get3dModeModel()
|
|
2548
2589
|
return A.map((A=>{let{position:e,target:t}=A
|
|
2549
2590
|
return{cameraPosition:e,pivot:t}}))}togglePanningMode(A){var e
|
|
2550
|
-
null===(e=this.cameraControls)||void 0===e||null===(e=e.orbitControls)||void 0===e||e.togglePanningMode(A)}togglePanningModeCursor(A){this.getInteractionsLayer().style.cursor=A?"move":null}get3dModeResolution(){const{width:A,height:e}=this.viewerSize,{width:t,height:i}=
|
|
2591
|
+
null===(e=this.cameraControls)||void 0===e||null===(e=e.orbitControls)||void 0===e||e.togglePanningMode(A)}togglePanningModeCursor(A){this.getInteractionsLayer().style.cursor=A?"move":null}get3dModeResolution(){const{width:A,height:e}=this.viewerSize,{width:t,height:i}=ut?kg:Gg,g=window.devicePixelRatio||1
|
|
2551
2592
|
let r=A*g,I=e*g
|
|
2552
2593
|
const o=I*r/(t*i)
|
|
2553
2594
|
if(o>1){const A=Math.sqrt(1/o)
|
|
@@ -2558,8 +2599,8 @@ let i=(A=>{let e=-1
|
|
|
2558
2599
|
return A.access((A=>{const t=A.get_node_index()
|
|
2559
2600
|
return e=Math.max(e,t),!0}),(()=>{})),e})(A)
|
|
2560
2601
|
e.access_each_node((e=>{e.get_mesh_count()>0&&(e.set_node_index(++i),A.take_node(e))})),this.scene.remove_object(e.get_tag()),t.update()}))}prepareModelNodes(){const{model:A}=this.get3dModeModel()
|
|
2561
|
-
getNodeByName(A,
|
|
2562
|
-
const e=getNodesByNames(A,[
|
|
2602
|
+
getNodeByName(A,wg.MAIN)&&A.access_each_node((A=>{[wg.MAIN,wg.PLANE_AO].includes(A.get_name())||A.set_visible(!1)}))
|
|
2603
|
+
const e=getNodesByNames(A,[wg.PLANE_AO])
|
|
2563
2604
|
setNodesBlendingState(e,this.lib,!0)}disposeSceneForOcclusions(){}cancelRenderFrame(){this.requestedRenderFrame&&(cancelAnimationFrame(this.requestedRenderFrame),this.requestedRenderFrame=null)}unloadScene(){this.animations&&this.stopOnboarding(),this.cancelRenderFrame(),super.unloadScene(),this.currentModelId=null,this.viewerModelInfo=null,this.destroyControls()}destroyControls(){this.cameraControls&&(this.cameraControls.off("change",this.requestRender3dModeFrame),this.cameraControls.dispose())}applyDebugSettings(A){if(!this.debug||!this.camera)return
|
|
2564
2605
|
const{name:e,value:t}=A
|
|
2565
2606
|
switch(e){case"width":case"height":{const A=this.get3dModeResolution()
|
|
@@ -2568,45 +2609,46 @@ const runDebugAnimation=async()=>{const{modelLength:A,modelCenter:e}=this.get3dM
|
|
|
2568
2609
|
for(const A of t)await this.cameraControls.lookAtWithAnimation(A,e)
|
|
2569
2610
|
this.debugAnimationEnabled&&runDebugAnimation()}
|
|
2570
2611
|
this.debugAnimationEnabled&&(this.stopOnboarding(),runDebugAnimation())}}}reInit(A){const{viewerDebug:e,poi:t,resetCameraPosition:i,cameraZoom:g,dimensions:r,setCustomPOI:I,togglePanningMode:o}=A
|
|
2571
|
-
return(t||i||g||r||I||o)&&this.stopOnboarding(),e&&this.applyDebugSettings(e),super.reInit(A)}__reset_camera(){}}
|
|
2612
|
+
return(t||i||g||r||I||o)&&this.stopOnboarding(),e&&this.applyDebugSettings(e),super.reInit(A)}__reset_camera(){}setGltfModel(A){let{id:e,gltf:t}=A
|
|
2613
|
+
super.setGltfModel({id:e,gltf:t}),this.requestRender3dModeFrame()}}
|
|
2572
2614
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2573
|
-
class BagSettingsResourcesLoader{constructor(A){this.modelMetaManager=A,this.RESOURCE_REFERENCES_KEY="bagSettingsReferences",this.resourceManager=new
|
|
2615
|
+
class BagSettingsResourcesLoader{constructor(A){this.modelMetaManager=A,this.RESOURCE_REFERENCES_KEY="bagSettingsReferences",this.resourceManager=new Ti({cacheStrategies:{[this.RESOURCE_REFERENCES_KEY]:{name:Ti.CACHE_LRU,size:10}}})}async load(A){try{var e
|
|
2574
2616
|
const t=await this.modelMetaManager.getMeta(A),i=null===(e=t.findInlineDatapackEntryByName("bag_settings.json"))||void 0===e?void 0:e.content
|
|
2575
2617
|
if(!i||0===i.references.length)return{data:null,wasInCache:!0,loadingStartTime:0,loadingFinishTime:0}
|
|
2576
2618
|
const g=performance.now(),r=this.resourceManager.getLoader(this.RESOURCE_REFERENCES_KEY,i.references.map((A=>ResourceFileFactory.textResourceOf(t.getUriDatapackEntryByName(A.icon).uri)))),I=r.cacheHit,o=await r.load(),a=i.references.map(((A,e)=>({...A,image:o[e]}))),s=performance.now()
|
|
2577
|
-
return{data:{...i,references:a},wasInCache:I,loadingStartTime:g,loadingFinishTime:s}}catch(e){throw new
|
|
2619
|
+
return{data:{...i,references:a},wasInCache:I,loadingStartTime:g,loadingFinishTime:s}}catch(e){throw new Ue(`Failed to load bag settings for model ${A}.`,{cause:e})}}}function Viewer3dBag_defineProperty(A,e,t){return(e=function Viewer3dBag_toPropertyKey(A){var e=function Viewer3dBag_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2578
2620
|
var t=A[Symbol.toPrimitive]
|
|
2579
2621
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
2580
2622
|
if("object"!=typeof i)return i
|
|
2581
2623
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2582
2624
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2583
2625
|
(A,"string")
|
|
2584
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2626
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Ug={[wg.MAIN]:1,[wg.PLANE_AO]:1,[wg.DIMENSIONS_CM]:2,[wg.DIMENSIONS_INCH]:2,[wg.STRAP_LONG]:2,[wg.STRAP_LONG_AO]:2},Lg={[dg]:wg.DIMENSIONS_CM,[lg]:wg.DIMENSIONS_INCH}
|
|
2585
2627
|
|
|
2586
2628
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2587
|
-
const
|
|
2588
|
-
const{model:t,longStrapExist:i}=this.get3dModeModel(),g=
|
|
2629
|
+
const vg={[kt]:{[Kt]:tg,[Pt]:gg,[Ot]:Qg,[zt]:ng,[jt]:Eg},[bt]:{[Ot]:class Viewer3dBag extends Viewer3d{constructor(A){super(A),Viewer3dBag_defineProperty(this,"toggleDimensions",(async(A,e)=>{this.logger.logEvent("log_3d_dimensions_clicked",this.modelId,String(A))
|
|
2630
|
+
const{model:t,longStrapExist:i}=this.get3dModeModel(),g=Lg[e],r=getNodeByName(t,g)
|
|
2589
2631
|
if(!r)return
|
|
2590
|
-
const I=getNodesByNames(t,[
|
|
2632
|
+
const I=getNodesByNames(t,[wg.STRAP_LONG])
|
|
2591
2633
|
setNodesBlendingState(I,this.lib,!0)
|
|
2592
|
-
const o=getNodesByNames(t,[
|
|
2593
|
-
if(!A)return Promise.all([this.resetCameraPosition(),this.animations.playNodesOpacity([r],1,0).then((()=>{toggleModelNode(t,g,!1),i&&(toggleModelNode(t,
|
|
2634
|
+
const o=getNodesByNames(t,[wg.STRAP_LONG_AO,wg.STRAP_LONG])
|
|
2635
|
+
if(!A)return Promise.all([this.resetCameraPosition(),this.animations.playNodesOpacity([r],1,0).then((()=>{toggleModelNode(t,g,!1),i&&(toggleModelNode(t,wg.STRAP_LONG_AO,!0,0),toggleModelNode(t,wg.STRAP_LONG,!0,0)),this.animations.playNodesOpacity(o,0,1).then((()=>{setNodesBlendingState(I,this.lib,!1)}))}))])
|
|
2594
2636
|
const enableDimensions=()=>(toggleModelNode(t,g,!0,0),this.animations.playNodesOpacity([r],0,1).then((()=>{setNodesBlendingState(I,this.lib,!1)}))),{position:a,target:s}=this.getDimensionsCameraPositionAndTarget(),B=this.getCameraPositionToFitModelPOI({position:a,target:s,withDimensions:!0})
|
|
2595
|
-
return Promise.all([this.cameraControls.lookAtWithBounceAnimation(B,s),i?this.animations.playNodesOpacity(o,1,0).then((()=>(toggleModelNode(t,
|
|
2596
|
-
return A?
|
|
2637
|
+
return Promise.all([this.cameraControls.lookAtWithBounceAnimation(B,s),i?this.animations.playNodesOpacity(o,1,0).then((()=>(toggleModelNode(t,wg.STRAP_LONG_AO,!1),toggleModelNode(t,wg.STRAP_LONG,!1),enableDimensions()))):enableDimensions()])})),Viewer3dBag_defineProperty(this,"getShowDimensionsDelay",(()=>{const{longStrapExist:A}=this.get3dModeModel()
|
|
2638
|
+
return A?Rg:null})),this.bagSettingsResourcesLoader=new BagSettingsResourcesLoader(this.modelMetaManager)}getModelInfoFromAdditionalResources(A){let{bagSettings:e}=A
|
|
2597
2639
|
return{bagSettings:e.data}}async getAdditionalModelResources(A){let{modelId:e}=A
|
|
2598
2640
|
const t=[super.getAdditionalModelResources({modelId:e}),this.bagSettingsResourcesLoader.load(e)]
|
|
2599
2641
|
return Promise.all(t).then((A=>{let[e,t={}]=A
|
|
2600
2642
|
return{...e,bagSettings:t}}))}prepareModelNodes(){const{model:A}=this.get3dModeModel()
|
|
2601
2643
|
let e=!1
|
|
2602
2644
|
A.access_each_node((A=>{const t=A.get_name()
|
|
2603
|
-
Object.keys(
|
|
2604
|
-
const t=getNodesByNames(A,[
|
|
2645
|
+
Object.keys(Ug).includes(t)&&(A.renderOrder=Ug[t]),t===wg.MAIN&&(e=!0)})),e?(A.access_each_node((e=>{e!==A?e.set_visible(!1):e.set_visible(!0)})),toggleModelNode(A,[wg.MAIN,wg.PLANE_AO,wg.STRAP_LONG,wg.STRAP_LONG_AO],!0)):(A.access_each_node((A=>{A.set_visible(!0)})),toggleModelNode(A,[wg.DIMENSIONS_CM,wg.DIMENSIONS_INCH],!1))
|
|
2646
|
+
const t=getNodesByNames(A,[wg.PLANE_AO,wg.STRAP_LONG_AO,wg.DIMENSIONS_CM,wg.DIMENSIONS_INCH])
|
|
2605
2647
|
setNodesBlendingState(t,this.lib,!0)}getSizeCalculationNodes(A){const e=super.getSizeCalculationNodes(A)
|
|
2606
|
-
if(getNodeByName(A,
|
|
2648
|
+
if(getNodeByName(A,wg.MAIN)){const t=getNodeByName(A,wg.STRAP_LONG)
|
|
2607
2649
|
t&&e.push(t)}return e}get3dModeModel(){if(this.viewerModelInfo)return this.viewerModelInfo
|
|
2608
|
-
const A=this.scene.access_object(this.leftModel),e=getNodeByName(A,
|
|
2609
|
-
return super.get3dModeModel(e),this.viewerModelInfo.longStrapExist=void 0!==getNodeByName(A,
|
|
2650
|
+
const A=this.scene.access_object(this.leftModel),e=getNodeByName(A,wg.MAIN)
|
|
2651
|
+
return super.get3dModeModel(e),this.viewerModelInfo.longStrapExist=void 0!==getNodeByName(A,wg.STRAP_LONG),this.viewerModelInfo}},[Pt]:Viewer3d,[Kt]:Viewer3d,[zt]:Viewer3d,[jt]:Viewer3d,[qt]:Viewer3d}}
|
|
2610
2652
|
function RenderStepRoot_defineProperty(A,e,t){return(e=function RenderStepRoot_toPropertyKey(A){var e=function RenderStepRoot_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2611
2653
|
var t=A[Symbol.toPrimitive]
|
|
2612
2654
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2614,16 +2656,19 @@ if("object"!=typeof i)return i
|
|
|
2614
2656
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2615
2657
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2616
2658
|
(A,"string")
|
|
2617
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2659
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Hg=class RenderStepRoot extends Si{constructor(A){super(A),RenderStepRoot_defineProperty(this,"_init",onceSuccess((async()=>{const A=function getRenderStepByType(A,e){const t=vg[e][A]
|
|
2618
2660
|
if(!t)throw new Error(`No such render step for "${A}" type and "${e}" mode`)
|
|
2619
2661
|
return t}(this.props.type,this.props.mode)
|
|
2620
2662
|
this.logger.appendLoggingData({render:A.type})
|
|
2621
2663
|
const e=new A(this.props)
|
|
2622
|
-
await e.init(),this.realRenderStep=e}))),RenderStepRoot_defineProperty(this,"init",once((()=>Promise.race([this._init().catch((A=>{this.emitter.emit(c,
|
|
2664
|
+
await e.init(),this.realRenderStep=e}))),RenderStepRoot_defineProperty(this,"init",once((()=>Promise.race([this._init().catch((A=>{this.emitter.emit(c,Ue.toObject(A))})),{}])))),this.props=A,this.libInjector=A.libInjector,this.logger=A.logger,this.modelsManager=A.modelsManager,this.modelType=A.type,this.mode=A.mode}async reInit(A){return A.modelId&&this.startModelLoading(A.modelId),await this._init(),this.realRenderStep.reInit(A)}*generator(){let A=yield
|
|
2623
2665
|
const e=this.realRenderStep.generator()
|
|
2624
2666
|
for(e.next();;)yield e.next(A).value,e.next(),A=yield}start3dMode(){this.realRenderStep?this.realRenderStep.start3dMode():this._init().then((()=>this.realRenderStep.start3dMode()))}async prepareMode(A){return await this._init(),this.realRenderStep.prepareMode(A)}async showOnboarding(A){return await this._init(),this.realRenderStep.showOnboarding(A)}get timeSpent(){var A
|
|
2625
2667
|
return null===(A=this.realRenderStep)||void 0===A?void 0:A.timeSpent}set timeSpent(A){this.realRenderStep&&(this.realRenderStep.timeSpent=A)}get performanceTime(){var A
|
|
2626
|
-
return null===(A=this.realRenderStep)||void 0===A?void 0:A.performanceTime}set performanceTime(A){this.realRenderStep&&(this.realRenderStep.performanceTime=A)}startModelLoading(A){this.modelsManager.ensureModelLoader({id:A,type:
|
|
2668
|
+
return null===(A=this.realRenderStep)||void 0===A?void 0:A.performanceTime}set performanceTime(A){this.realRenderStep&&(this.realRenderStep.performanceTime=A)}startModelLoading(A){this.modelsManager.ensureModelLoader({id:A,type:Gi})}getDebugData(){return this.realRenderStep?this.realRenderStep.getDebugData():super.getDebugData()}async getGltfModels(){var A
|
|
2669
|
+
return await(null===(A=this.realRenderStep)||void 0===A?void 0:A.getGltfModels())}async setGltfModel(A){var e
|
|
2670
|
+
let{id:t,gltf:i}=A
|
|
2671
|
+
await(null===(e=this.realRenderStep)||void 0===e?void 0:e.setGltfModel({id:t,gltf:i}))}}
|
|
2627
2672
|
function GetRecordVideoFramesStep_defineProperty(A,e,t){return(e=function GetRecordVideoFramesStep_toPropertyKey(A){var e=function GetRecordVideoFramesStep_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2628
2673
|
var t=A[Symbol.toPrimitive]
|
|
2629
2674
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2631,7 +2676,7 @@ if("object"!=typeof i)return i
|
|
|
2631
2676
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2632
2677
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2633
2678
|
(A,"string")
|
|
2634
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class GetRecordVideoFramesStep extends
|
|
2679
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class GetRecordVideoFramesStep extends Si{constructor(A){super(),GetRecordVideoFramesStep_defineProperty(this,"DEBUG_RECORDING",!1),GetRecordVideoFramesStep_defineProperty(this,"loadNextFrameFromFile",(async A=>{if(this.framesCount<=0||this.frameCounter>=this.framesCount)return!0
|
|
2635
2680
|
this.startTimer("getImageBuffer")
|
|
2636
2681
|
const e=await window.getImageBuffer(this.frameCounter)
|
|
2637
2682
|
return this.stopTimer("getImageBuffer"),this.startTimer("loadImage"),new Promise(((t,i)=>{const g=new Image
|
|
@@ -2640,35 +2685,35 @@ throw A}return!1}async loadNextFrame(A){return window.bufferFilesCount?this.load
|
|
|
2640
2685
|
e.drawImage(A,0,0),e.font="72px serif",e.strokeStyle="red",e.strokeText("RECORDED FRAME",20,100)}*generator(){let A,e=0
|
|
2641
2686
|
const t=document.createElement("canvas")
|
|
2642
2687
|
for(;;)A=yield,yield new Promise((async i=>{e>0&&(A.frame.renderFullFrame(t),this.DEBUG_RECORDING?this._debugRecordingFrame(t):await A.frame.saveFrame(t,e-1,this.framesCount))
|
|
2643
|
-
if(await this.loadNextFrame(A.frame))return await A.frame.endFrames(),void i(
|
|
2644
|
-
e+=1,i(
|
|
2688
|
+
if(await this.loadNextFrame(A.frame))return await A.frame.endFrames(),void i(gi.finishAll())
|
|
2689
|
+
e+=1,i(gi.next(A))}))}}
|
|
2645
2690
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2646
|
-
class GetVideoFramesStep extends
|
|
2647
|
-
for(;;)A=yield,this.shouldResetStream?(this.shouldResetStream=!1,yield new Promise((e=>{A.frame.resetStream().then((t=>{A.frame.setStream(t),e(A.frame.next())}))})).then((()=>
|
|
2648
|
-
e&&(this.shouldResetStream=!0)}}const
|
|
2691
|
+
class GetVideoFramesStep extends Si{*generator(){let A
|
|
2692
|
+
for(;;)A=yield,this.shouldResetStream?(this.shouldResetStream=!1,yield new Promise((e=>{A.frame.resetStream().then((t=>{A.frame.setStream(t),e(A.frame.next())}))})).then((()=>gi.next(A)))):yield A.frame.next().then((()=>gi.next(A)))}reInit(A){let{resetStream:e}=A
|
|
2693
|
+
e&&(this.shouldResetStream=!0)}}const xg=
|
|
2649
2694
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2650
|
-
class FilterObjectPresenceStep extends
|
|
2695
|
+
class FilterObjectPresenceStep extends Si{constructor(A){let{appearThreshold:e=.8,disappearThreshold:t=.2}=A
|
|
2651
2696
|
super(),this.appearThreshold=e,this.disappearThreshold=t}*generator(){let A,e,t
|
|
2652
2697
|
const i={left:!0,right:!0}
|
|
2653
2698
|
for(;;){A=yield,e=A.objects,t={}
|
|
2654
2699
|
for(const[A,g]of Object.entries(e))g.presence>this.appearThreshold?t[A]=!0:g.presence<this.disappearThreshold?t[A]=!1:t[A]=i[A],i[A]=t[A]
|
|
2655
|
-
yield
|
|
2656
|
-
const
|
|
2700
|
+
yield gi.next({...A,objects:{...A.objects,left:{...A.objects.left,exists:t.left},right:{...A.objects.right,exists:t.right}}})}}}
|
|
2701
|
+
const Yg=
|
|
2657
2702
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2658
|
-
class FinalStep extends
|
|
2659
|
-
const
|
|
2703
|
+
class FinalStep extends Si{*generator(){for(yield,emit(EA);;)yield gi.finish(),yield}}
|
|
2704
|
+
const Jg=
|
|
2660
2705
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2661
|
-
class BaseNNStep extends
|
|
2706
|
+
class BaseNNStep extends Si{constructor(){let{subpixel:A,batchSize:e,interpolateSize:t,gpuArgmax:i,cacheCanvas:g,nn:r,dataProvider:I,type:o,internalEventsEmitter:a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
2662
2707
|
if(super(),this.subpixel=A,this.gpuArgmax=i,this.batchSize=e,this.interpolateSize=t,this.nn=r,this.type=o,this.dataProvider=I,this.debugNnKeypoints=!1,this.internalEventsEmitter=a,this.interpolateSize&&(this.batchSize=1),g&&this.batchSize)throw new Error("cacheCanvas is not working with delayed inference")}init(){throw new Error("Not implemented")}execute(A){throw new Error("Not implemented")}emptyKeypointsResult(A,e){const t={...e,...A}
|
|
2663
2708
|
return t.objects.left.keypoints=null,t.objects.right.keypoints=null,t}dispose(){}*generator(){let A,e,t,i,g=[],r=[],I=[],o=[],a=10,s=-this.interpolateSize-1
|
|
2664
|
-
const nextAction=(A,e)=>(i=A,this.debugNnKeypoints&&this.debugKeypointsFromContext(A),
|
|
2709
|
+
const nextAction=(A,e)=>(i=A,this.debugNnKeypoints&&this.debugKeypointsFromContext(A),gi.next(A,e))
|
|
2665
2710
|
try{for(;;)if(A=yield,this.batchSize)if(g.push(A),g.length===this.batchSize&&(I.length&&s>=0&&(t=I.shift()),this.interpolateSize&&(s+this.interpolateSize+1)%(this.interpolateSize+1)!==0?e=Promise.resolve([A]):(e=this.execute(g),s>0&&(s=0)),s++,I.push(e),g=[]),r.length)yield nextAction(r.shift(),a)
|
|
2666
2711
|
else if(t){performance.now()
|
|
2667
2712
|
yield t.then((A=>{r=A
|
|
2668
2713
|
let e=r.shift()
|
|
2669
|
-
return e.objects?(o.push(a),o.length>10&&o.shift(),a=o.reduce(((A,e)=>A+e),0)/o.length,nextAction(e)):(e=this.emptyKeypointsResult(e,i),nextAction(e,a))}))}else yield
|
|
2714
|
+
return e.objects?(o.push(a),o.length>10&&o.shift(),a=o.reduce(((A,e)=>A+e),0)/o.length,nextAction(e)):(e=this.emptyKeypointsResult(e,i),nextAction(e,a))}))}else yield gi.finish(a)
|
|
2670
2715
|
else yield this.execute([A]).then((A=>{let[e]=A
|
|
2671
|
-
return e?nextAction(e):
|
|
2716
|
+
return e?nextAction(e):gi.finish()}))}finally{this.dispose()}}}
|
|
2672
2717
|
function RunNNStepMain_defineProperty(A,e,t){return(e=function RunNNStepMain_toPropertyKey(A){var e=function RunNNStepMain_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2673
2718
|
var t=A[Symbol.toPrimitive]
|
|
2674
2719
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -2676,7 +2721,7 @@ if("object"!=typeof i)return i
|
|
|
2676
2721
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2677
2722
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2678
2723
|
(A,"string")
|
|
2679
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
2724
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Tg=class RunNNStepMain extends Jg{constructor(A){super(A),RunNNStepMain_defineProperty(this,"DEBUG_NN_INPUT",!1),RunNNStepMain_defineProperty(this,"DEBUG_BBOX",!1),this.libInjector=A.libInjector}sigmoid(A){return 1/(1+Math.exp(-A))}argmax(A,e){let[t,i,g,r]=e
|
|
2680
2725
|
const I=new Array(t)
|
|
2681
2726
|
let o,a,s
|
|
2682
2727
|
for(let e=0;e<t;++e){const t=new Array(i),B=e*A.strides[0]
|
|
@@ -2742,7 +2787,7 @@ this.data.set(g,r)}else this.data[r]=g}toArray(A,e,t){if(!A)return this.toArray(
|
|
|
2742
2787
|
const i=t[0],g=new Array(i)
|
|
2743
2788
|
if(1===t.length)for(let t=0;t<i;++t)g[t]=A[e+t]
|
|
2744
2789
|
else{const r=t.slice(1),I=r.reduce(((A,e)=>A*e))
|
|
2745
|
-
for(let t=0;t<i;++t)g[t]=this.toArray(A,e+t*I,r)}return g}}const
|
|
2790
|
+
for(let t=0;t<i;++t)g[t]=this.toArray(A,e+t*I,r)}return g}}const Kg=NdArray
|
|
2746
2791
|
|
|
2747
2792
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2748
2793
|
class UnsupportedEnvironmentError extends Error{constructor(A){super(A),this.name="UnsupportedEnvironmentError"}}function RunNNStepTfjs_defineProperty(A,e,t){return(e=function RunNNStepTfjs_toPropertyKey(A){var e=function RunNNStepTfjs_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
@@ -2752,31 +2797,31 @@ if("object"!=typeof i)return i
|
|
|
2752
2797
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
2753
2798
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2754
2799
|
(A,"string")
|
|
2755
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class RunNNStepTfjs extends
|
|
2800
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class RunNNStepTfjs extends Tg{constructor(){super(...arguments),RunNNStepTfjs_defineProperty(this,"initializeModel",onceSuccess((async A=>{const{h:e,w:t,channelsFirst:i}=this.nn,g=i?[1,3,e,t]:[1,e,t,3],r=this.tf.zeros(g,"float32")
|
|
2756
2801
|
try{null==A.resourceIdToCapturedInput&&A.setResourceIdToCapturedInput(A.executeInitializerGraph())
|
|
2757
2802
|
const e=A.normalizeInputs(r),{orderedNodes:t}=A.executor.compile(A.executor.mapInputs(e),A.executor._outputs)
|
|
2758
2803
|
let i=[]
|
|
2759
2804
|
const g=5
|
|
2760
2805
|
for(let A=1;A<=g;A++)i.push(t[Math.floor(A*t.length/g)-1].name)
|
|
2761
2806
|
this.tf.env().set("ENGINE_COMPILE_ONLY",!0)
|
|
2762
|
-
for(const t of i)await
|
|
2763
|
-
return{ok:!0,json:async()=>JSON.parse(e)}}catch(A){throw new
|
|
2764
|
-
return{ok:!0,arrayBuffer:async()=>(await
|
|
2807
|
+
for(const t of i)await St((()=>{this.tf.tidy((()=>{A.execute(e,[t])}))}))}finally{this.tf.env().set("ENGINE_COMPILE_ONLY",!1),r.dispose()}}))),RunNNStepTfjs_defineProperty(this,"loadModelConfig",onceSuccess((async()=>{try{const A=this.dataProvider.get_datapack_file_url(`models/${this.nn.name}/model.json`),e=await loadTextFile(A)
|
|
2808
|
+
return{ok:!0,json:async()=>JSON.parse(e)}}catch(A){throw new Ue("Failed to load model config",{cause:A})}}))),RunNNStepTfjs_defineProperty(this,"loadModelWeights",onceSuccess((async()=>{try{const A=this.dataProvider.get_datapack_file_url(`models/${this.nn.name}/group1-shard1of1.bin`),e=await loadBufferFile(A)
|
|
2809
|
+
return{ok:!0,arrayBuffer:async()=>(await ft(0),e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength))}}catch(A){throw new Ue("Failed to load model weights",{cause:A})}}))),RunNNStepTfjs_defineProperty(this,"modelFetchFunc",(async A=>A.endsWith("json")?this.loadModelConfig():this.loadModelWeights())),RunNNStepTfjs_defineProperty(this,"ensureModelLoaded",onceSuccess((async()=>{await St((()=>{this.tf.backend().checkCompileCompletion(),this.tf.backend().getUniformLocations()}))
|
|
2765
2810
|
let A=!1
|
|
2766
2811
|
for(;!A;)A=await this.ensureNoLeak((()=>this.checkModelLoaded(this.model)),!1),A||(this.model.dispose(),await this.loadModel())}))),RunNNStepTfjs_defineProperty(this,"loadOpenCV",onceSuccess((async()=>{const{cv:A}=await this.libInjector.getOpenCv()
|
|
2767
2812
|
this.cv=A,this.initOpenCV()}))),RunNNStepTfjs_defineProperty(this,"_init",onceSuccess((async()=>{await this.loadTf(),await Promise.all([this.loadModel(),this.loadOpenCV()]),await this.ensureNoLeak((()=>this.initializeModel(this.model)),!1),await this.ensureModelLoaded()})))}async checkModelLoaded(A){if("wasm"===this.tf.getBackend())return!0
|
|
2768
2813
|
const{h:e,w:t,channelsFirst:i}=this.nn,g=i?[1,3,e,t]:[1,e,t,3],r=this.tf.zeros(g,"float32")
|
|
2769
2814
|
let I,o
|
|
2770
|
-
try{I=await
|
|
2771
|
-
return!await
|
|
2815
|
+
try{I=await St((()=>this.tf.tidy((()=>A.execute(r))))),o=await St((()=>I.map((A=>this.tf.sum(A)))))
|
|
2816
|
+
return!await St((()=>o.every((A=>0===A.dataSync()[0]))))}finally{[...I,...o,r].forEach((A=>A.dispose()))}}async getLoadPromise(){let A
|
|
2772
2817
|
if(this.nn.url&&this.libInjector.useLocalLibs){let e=0
|
|
2773
2818
|
A=this.tf.loadGraphModel(this.nn.url,{weightUrlConverter:()=>{let A=this.nn.weightsUrl
|
|
2774
2819
|
return Array.isArray(this.nn.weightsUrl)&&(A=this.nn.weightsUrl[e],e+=1),A},fetchFunc:customFetch})}else A=this.tf.loadGraphModel("json",{fetchFunc:this.modelFetchFunc})
|
|
2775
|
-
return A}async loadModel(){this.model=await this.getLoadPromise()}initOpenCV(){}async init(){return this.internalEventsEmitter.emit(
|
|
2820
|
+
return A}async loadModel(){this.model=await this.getLoadPromise()}initOpenCV(){}async init(){return this.internalEventsEmitter.emit(qi,"nntfjs"),this.nn.url||this.loadModelWeights(),Promise.race([this._init().then((()=>{this.internalEventsEmitter.emit(zi,"nntfjs")})).catch((A=>{emit(c,Ue.toObject(A))})),{}])}async reInit(A){let{action:e}=A
|
|
2776
2821
|
"start"===e&&await this._init()}async loadTf(){this.tf=await this.libInjector.getLibrary("tfjs"),this.tf.enableProdMode()
|
|
2777
2822
|
const A=this.tf.env()
|
|
2778
2823
|
if(!A.getBool("HAS_WEBGL"))throw new UnsupportedEnvironmentError("tfjs: webgl is not supported")
|
|
2779
|
-
|
|
2824
|
+
Et&&A.set("WEBGL_USE_SHAPES_UNIFORMS",!0),Qi&&(A.set("WEBGL_BUFFER_SUPPORTED",!1),A.set("WEBGL_DOWNLOAD_FLOAT_ENABLED",!1),A.set("WEBGL_FENCE_API_ENABLED",!1),A.set("WEBGL_RENDER_FLOAT32_CAPABLE",!1),A.set("WEBGL_RENDER_FLOAT32_ENABLED",!1),A.set("WEBGL_VERSION",1))}ensureNoLeak(A,e){if(!e)return A()
|
|
2780
2825
|
const{numTensors:t}=this.tf.memory(),getResult=A=>{const{numTensors:e}=this.tf.memory()
|
|
2781
2826
|
if(e>t)throw new Error("Check tf for leaks!")
|
|
2782
2827
|
return A},i=A()
|
|
@@ -2817,8 +2862,8 @@ const[I,o,a,s]=r.shape,B=[a,s]
|
|
|
2817
2862
|
let n,E,C
|
|
2818
2863
|
if(this.gpuArgmax)throw new Error("Not implemented")
|
|
2819
2864
|
{this.startTimer("getOutputs")
|
|
2820
|
-
const A=await
|
|
2821
|
-
r.dispose(),n=await
|
|
2865
|
+
const A=await Kg.fromTf(r)
|
|
2866
|
+
r.dispose(),n=await Kg.fromTf(t),t.dispose(),this.stopTimer("getOutputs"),this.startTimer("cpuArgmax"),E=this.argmax(A,[I,2*this.nn.numKeypoints,a,s]),this.stopTimer("cpuArgmax"),this.subpixel&&(this.startTimer("subpixelArgmax"),E=this.subpixelArgmax(A,E,[I,2*this.nn.numKeypoints,a,s]),this.stopTimer("subpixelArgmax")),E=E.map(((A,t)=>this.getContextKeypoints(A,e[t])))
|
|
2822
2867
|
const i=4*I*2*this.nn.numKeypoints*s*a
|
|
2823
2868
|
this.startTimer("segmentations"),C=this.extractSegmentations(A.data,i,B),this.stopTimer("segmentations")}if(1!==I)throw new Error("not implemented")
|
|
2824
2869
|
C=[C],n.reshape([I,-1])
|
|
@@ -2834,17 +2879,17 @@ return this.getResults(i,A)}dispose(){super.dispose(),this.model.dispose()}}
|
|
|
2834
2879
|
function matSigmoidInplace(A,e){e.exp(A,A),A.invert_elements(),A.add_scalar(1),A.invert_elements()}
|
|
2835
2880
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2836
2881
|
function extractOutput(A,e){let{offset:t,size:i}=e
|
|
2837
|
-
return A.slice(t,t+i)}function angle6D2TransformMatrix(A){let e=
|
|
2838
|
-
const i=
|
|
2882
|
+
return A.slice(t,t+i)}function angle6D2TransformMatrix(A){let e=_i.zeros(3),t=_i.zeros(3)
|
|
2883
|
+
const i=_i.zeros(3)
|
|
2839
2884
|
let g=0
|
|
2840
2885
|
for(let i=0;i<3;++i)e[i]=A[g++],t[i]=A[g++]
|
|
2841
|
-
e=
|
|
2842
|
-
const r=
|
|
2886
|
+
e=_i.normalize(e)
|
|
2887
|
+
const r=_i.dot(e,t)
|
|
2843
2888
|
for(let A=0;A<3;++A)t[A]-=e[A]*r
|
|
2844
|
-
t=
|
|
2845
|
-
const I=
|
|
2889
|
+
t=_i.normalize(t)
|
|
2890
|
+
const I=_i.cross(e,t)
|
|
2846
2891
|
for(let A=0;A<3;++A)i[A]=I[A]
|
|
2847
|
-
const o=
|
|
2892
|
+
const o=_i.zeros(16)
|
|
2848
2893
|
for(let A=0;A<3;++A)o[4*A]=e[A],o[4*A+1]=t[A],o[4*A+2]=i[A]
|
|
2849
2894
|
return o[15]=1,o}function extractJointsTransforms(A){const e=A.length/6,t=new Array(e)
|
|
2850
2895
|
for(let i=0;i<e;++i){const e=A.slice(6*i,6*(i+1))
|
|
@@ -2867,7 +2912,7 @@ let[i,g]=A
|
|
|
2867
2912
|
i.size>g.size&&([i,g]=[g,i])
|
|
2868
2913
|
const r=await i.data(),I=await g.data()
|
|
2869
2914
|
g.dispose(),i.dispose()
|
|
2870
|
-
return assignResultsToContext(t,{flagsResult:this.parseFlags(r),segmentationsResult:parseSegmentations({masks:this.segmentationOutputs,segmentationMat:this.segmentationMat,data:new
|
|
2915
|
+
return assignResultsToContext(t,{flagsResult:this.parseFlags(r),segmentationsResult:parseSegmentations({masks:this.segmentationOutputs,segmentationMat:this.segmentationMat,data:new Kg(I,[1,this.nn.h,this.nn.w,this.nn.numSegmentations]),cv:this.cv}),segmentationSize:{width:this.nn.w,height:this.nn.h}}),e}}function RunNNStepTfLite_defineProperty(A,e,t){return(e=function RunNNStepTfLite_toPropertyKey(A){var e=function RunNNStepTfLite_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
2871
2916
|
var t=A[Symbol.toPrimitive]
|
|
2872
2917
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
2873
2918
|
if("object"!=typeof i)return i
|
|
@@ -2877,11 +2922,11 @@ throw new TypeError("@@toPrimitive must return a primitive value.")}return("stri
|
|
|
2877
2922
|
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}class TfLite{constructor(A){let{libInjector:e,nn:t}=A
|
|
2878
2923
|
this.libInjector=e,this.nn=t,this.numThreads=4,this.numOutputs=2,this.threads=!1,this.lib=null,this.inputPtr=0,this.outputPtrs=[0,0],this.outputSizes=[0,0]}async init(){({lib:this.lib,threads:this.threads}=await this.libInjector.getTfLite())}setNumThreads(A){this.numThreads=A}async initModel(A){const e=this.lib._malloc(A.byteLength)
|
|
2879
2924
|
this.lib.HEAPU8.set(A,e),this.lib.ccall("load_model","void",["number","number","number"],[e,A.byteLength,this.threads?this.numThreads:1]),this.inputPtr=this.lib.ccall("input_ptr","number",["number"],[0]),this.outputPtrs=Array.from(Array(this.numOutputs),((A,e)=>this.lib.ccall("output_ptr","number",["number"],[e]))),this.outputSizes=this.outputPtrs.map(((A,e)=>this.lib.ccall("output_size","number",["number"],[e])))}execute(A){this.lib.HEAPU8.set(new Uint8Array(A.buffer,A.byteOffset,A.byteLength),this.inputPtr)
|
|
2880
|
-
try{this.lib.ccall("infer_model","void",[],[])}catch(A){throw new
|
|
2925
|
+
try{this.lib.ccall("infer_model","void",[],[])}catch(A){throw new Ue("Failed to infer model",{cause:A})}return this.outputPtrs.map(((A,e)=>new Float32Array(this.lib.HEAPU8.buffer,A,this.outputSizes[e]/4)))}}class RunNNStepTfLite extends Tg{constructor(){super(...arguments),RunNNStepTfLite_defineProperty(this,"getModel",onceSuccess((async()=>{try{const A=this.nn.tfliteUrl&&this.libInjector.useLocalLibs?this.nn.tfliteUrl:this.dataProvider.get_datapack_file_url(`models/${this.nn.name}/model.tflite`)
|
|
2881
2926
|
return customFetch(A).then((A=>A.arrayBuffer())).then((A=>new Uint8Array(A)))}catch(A){throw Number.isInteger(A)&&(A=new Error(this.dataProvider.get_exception_msg(A))),A}}))),RunNNStepTfLite_defineProperty(this,"loadModel",onceSuccess((async()=>{this.tflite.setNumThreads(4)
|
|
2882
|
-
try{await this.tflite.initModel(await this.getModel())}catch(A){throw new
|
|
2927
|
+
try{await this.tflite.initModel(await this.getModel())}catch(A){throw new Ue("Failed to init tflite model",{cause:A})}}))),RunNNStepTfLite_defineProperty(this,"loadTflite",onceSuccess((async()=>{this.tflite=new TfLite({libInjector:this.libInjector,nn:this.nn}),await this.tflite.init()}))),RunNNStepTfLite_defineProperty(this,"loadOpenCV",onceSuccess((async()=>{({cv:this.cv}=await this.libInjector.getOpenCv()),this.initOpenCV()}))),RunNNStepTfLite_defineProperty(this,"_init",onceSuccess((async()=>{await Promise.all([this.loadOpenCV(),this.loadTflite().then((()=>{if(this.tflite)return this.loadModel()}))])}))),this.numSlices=2*this.nn.numKeypoints+this.nn.numSegmentations}initOpenCV(){const A=`CV_32FC${this.numSlices}`
|
|
2883
2928
|
if(!this.cv[A])throw new Error(`Unknown mat type: "${A}"`)
|
|
2884
|
-
this.matOutput=new this.cv.Mat(this.nn.h,this.nn.w,this.cv[A]),this.matVectorSlices=new this.cv.MatVector}async init(){return this.internalEventsEmitter.emit(
|
|
2929
|
+
this.matOutput=new this.cv.Mat(this.nn.h,this.nn.w,this.cv[A]),this.matVectorSlices=new this.cv.MatVector}async init(){return this.internalEventsEmitter.emit(qi,"nntflite"),this.getModel(),Promise.race([this._init().then((()=>{this.internalEventsEmitter.emit(zi,"nntflite")})).catch((A=>{emit(c,Ue.toObject(A))})),{nnLoadingStartTime:0,nnLoadingFinishTime:0}])}async reInit(A){let{action:e}=A
|
|
2885
2930
|
"start"===e&&await this._init()}profile(A,e){this.startTimer(A)
|
|
2886
2931
|
const t=e()
|
|
2887
2932
|
return t instanceof Promise?t.finally((()=>{this.stopTimer(A)})):(this.stopTimer(A),t)}subpixelArgmax(A,e){let[t,i]=e,g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:A=>A,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10
|
|
@@ -2901,20 +2946,20 @@ for(let e=0;e<this.nn.numSegmentations;++e){const t=this.matVectorSlices.get(2*t
|
|
|
2901
2946
|
matSigmoidInplace(t,this.cv),A.set(t.data32F,e*this.nn.w*this.nn.h),t.delete()}return this.extractSegmentations(A,0,[this.nn.h,this.nn.w])})),[o,a]=[0,1].map((A=>{const e=t.length,i=this.nn.presenceChannels[A],g=t[(e+i)%e],I=3*this.nn.numKeypoints,o=this.getKeypointsPresence(t.slice(A*I,(A+1)*I)),a=r.slice(A*this.nn.numKeypoints,(A+1)*this.nn.numKeypoints),s=this.nn.shinLineChannels&&this.nn.shinLineChannels.slice(2*A,2*A+2),B=this.nn.shinLineErrorChannels&&this.nn.shinLineErrorChannels[A]
|
|
2902
2947
|
return{keypointsPresence:o,presence:this.sigmoid(g),exists:g>0,keypoints:a,shinLineCoords:s&&[t[s[0]],t[s[1]]],shinError:B&&t[B]}}))
|
|
2903
2948
|
A.objects={left:o,right:a},A.segmentation={size:[this.nn.h,this.nn.w],buffers:I}}async execute(A){if(A.length>1)throw new Error("Unsupported batching")
|
|
2904
|
-
const[e]=A,{frame:t}=e,i=this.profile("getTensorData",(()=>{try{return this.getTensorData(t)}catch(A){throw new
|
|
2949
|
+
const[e]=A,{frame:t}=e,i=this.profile("getTensorData",(()=>{try{return this.getTensorData(t)}catch(A){throw new Ue("Failed to get tensor data",{cause:A})}}))
|
|
2905
2950
|
this.DEBUG_BBOX&&t.debugBbox(this.getDebugCanvas("bbox",{width:t.width,height:t.height})),this.DEBUG_NN_INPUT&&t.debugNnInput(this.getDebugCanvas("nn",{width:i.width,height:i.height},!0),i),await t.onBeforeExecute()
|
|
2906
2951
|
const g=this.profile("execute",(()=>this.tflite.execute(i.data)))
|
|
2907
2952
|
return this.extractResult(e,g),[e]}dispose(){super.dispose(),this.libInjector.releaseLibrary("tflite"),this.tflite.lib=null,this.tflite=null,this.cv=null}}
|
|
2908
2953
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2909
2954
|
class RunNNStepWearableTflite extends RunNNStepTfLite{initOpenCV(){this.segmentationMat=new this.cv.Mat(this.nn.h,this.nn.w,this.cv.CV_32F)}getTensorData(A){return A.getDownscaledBboxTensorData()}parseFlags(A){return{}}extractResult(A,e){let[t,i]=e
|
|
2910
|
-
assignResultsToContext(A,{flagsResult:this.parseFlags(t),segmentationsResult:parseSegmentations({masks:this.segmentationOutputs,data:new
|
|
2955
|
+
assignResultsToContext(A,{flagsResult:this.parseFlags(t),segmentationsResult:parseSegmentations({masks:this.segmentationOutputs,data:new Kg(i,[1,this.nn.h,this.nn.w,this.nn.numSegmentations]),segmentationMat:this.segmentationMat,cv:this.cv}),segmentationSize:{width:this.nn.w,height:this.nn.h}})}}
|
|
2911
2956
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2912
|
-
const
|
|
2957
|
+
const Pg={offset:0,size:144},Og={offset:154,size:3},qg={offset:209,size:1},zg={offset:210,size:1},jg={rightHandForearmMask:{channel:27},leftHandForearmMask:{channel:26},phoneMask:{channel:28}}
|
|
2913
2958
|
|
|
2914
2959
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
2915
|
-
function parseFlags(A){return{jointsTransforms:extractJointsTransforms(extractOutput(A,
|
|
2960
|
+
function parseFlags(A){return{jointsTransforms:extractJointsTransforms(extractOutput(A,Pg)),globalTransform:Zi.ofTranslation(Array.from(extractOutput(A,Og))),presence:extractOutput(A,qg)[0],phonePresence:extractOutput(A,zg)[0]}}
|
|
2916
2961
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2917
|
-
class RunNNStepBagTfjs extends RunNNStepWearableTfjs{constructor(){super(...arguments),this.segmentationOutputs=
|
|
2962
|
+
class RunNNStepBagTfjs extends RunNNStepWearableTfjs{constructor(){super(...arguments),this.segmentationOutputs=jg}parseFlags(A){return parseFlags(A)}}class RunNNStepBagTflite extends RunNNStepWearableTflite{constructor(){super(...arguments),this.segmentationOutputs=jg}parseFlags(A){return parseFlags(A)}}
|
|
2918
2963
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2919
2964
|
class OpticalFlowManager{constructor(A){this.cv=A,this.maxLevel=4,this.winSize=new this.cv.Size(50,50),this.termCriteria=new this.cv.TermCriteria(this.cv.TermCriteria_EPS|this.cv.TermCriteria_COUNT,10,.03),this.prevPyramid=new this.cv.MatVector,this.pyramid=new this.cv.MatVector}trackPoints(A,e){this.cv.buildOpticalFlowPyramid(A,this.pyramid,this.winSize,this.maxLevel)
|
|
2920
2965
|
const t=this.invokeOpticalFlow(e)
|
|
@@ -2923,107 +2968,107 @@ const e=new this.cv.matFromArray(A.length,2,this.cv.CV_32F,A.flat()),t=new this.
|
|
|
2923
2968
|
try{this.cv.calcOpticalFlowPyrLK_pyramids(this.prevPyramid,this.pyramid,e,t,i,g,this.winSize,this.maxLevel,this.termCriteria)
|
|
2924
2969
|
const r=Array(A.length),I=t.data32F,o=i.data
|
|
2925
2970
|
for(let e=0;e<t.rows;e++)r[e]=0===o[e]?A[e]:[I[2*e],I[2*e+1]]
|
|
2926
|
-
return r}catch(A){throw new
|
|
2971
|
+
return r}catch(A){throw new Ue("Failed to calculate optical flow",{cause:A})}finally{e.delete(),t.delete(),i.delete(),g.delete()}}reset(){this.prevPyramid.delete(),this.prevPyramid=new this.cv.MatVector}}
|
|
2927
2972
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2928
2973
|
class PoseComputationManager{constructor(A){this.cv=A,this.minPointsCount=6}solvePnP(A,e,t){if(A.length<this.minPointsCount)return[!1,null,null]
|
|
2929
2974
|
const i=this.cv.CV_64F,g=this.cv.matFromArray(A.length,3,i,A.flat()),r=this.cv.matFromArray(e.length,2,i,e.flat()),I=this.cv.matFromArray(3,3,i,t),o=new this.cv.Mat,a=new this.cv.Mat,s=new this.cv.Mat
|
|
2930
2975
|
try{let A=this.cv.solvePnP(g,r,I,o,s,a,!1,this.cv.SOLVEPNP_EPNP)
|
|
2931
2976
|
if(A&&(A=this.cv.solvePnP(g,r,I,o,s,a,!0,this.cv.SOLVEPNP_ITERATIVE)),!A)return[!1,null,null]
|
|
2932
2977
|
const e=matrix_M4.rotation_from_rodrigues(this.cv,M.from_cv_mat(this.cv,s)),t=M.from_cv_mat(this.cv,a)
|
|
2933
|
-
return[!0,M.to_vec(e),M.to_vec(t).slice(0,3)]}catch(A){throw new
|
|
2978
|
+
return[!0,M.to_vec(e),M.to_vec(t).slice(0,3)]}catch(A){throw new Ue("Failed to solve pnp",{cause:A})}finally{g.delete(),r.delete(),I.delete(),o.delete(),s.delete(),a.delete()}}}
|
|
2934
2979
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2935
2980
|
class StatefulComputer{constructor(A){this.computeNextValue=A,this.storedValue=null}compute(A){return this.storedValue=this.storedValue?this.computeNextValue(this.storedValue,A):A,this.storedValue}reset(){this.storedValue=null}}
|
|
2936
2981
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2937
2982
|
function computeJointsGlobalTransforms(A,e,t){const i=[]
|
|
2938
|
-
for(const g of Object.keys(
|
|
2939
|
-
i[r]=
|
|
2940
|
-
for(const g of A){const A=
|
|
2983
|
+
for(const g of Object.keys(rg)){const r=rg[g],I=Ig[g],o=I?i[rg[I]]:A,a=t[r],s=e[r]
|
|
2984
|
+
i[r]=Zi.mul(Zi.mul(o,Zi.ofTranslation(a)),Zi.mul(s,Zi.ofTranslation(bi.negate(a))))}return i}function computeJointsPositions(A,e,t){const i=[]
|
|
2985
|
+
for(const g of A){const A=rg[g]
|
|
2941
2986
|
i.push(transformPoint(e[A],t[A]))}return i}function computeJointsMeshPositions(A,e,t){const i=Array(e.length)
|
|
2942
|
-
for(let A=0;A<e.length;A++){i[A]=
|
|
2987
|
+
for(let A=0;A<e.length;A++){i[A]=bi.zeros(16)
|
|
2943
2988
|
for(let g=0;g<4;g++)for(let r=0;r<4;r++){const I=4*g+r
|
|
2944
2989
|
for(let g=0;g<e[A].length;g++){const[r,o]=e[A][g]
|
|
2945
2990
|
i[A][I]+=o*t[r][I]}}}return i.map(((e,t)=>transformPoint(A[t],e)))}
|
|
2946
2991
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2947
|
-
function projectPointToOpencvSpace(A,e){const[t,i,,g]=
|
|
2992
|
+
function projectPointToOpencvSpace(A,e){const[t,i,,g]=Zi.mulCol(e,toColumn(A)),r=[t/g,i/g]
|
|
2948
2993
|
return function convertFromOpenGlToOpenCVSpaceInPlace(A){A[0]=(A[0]+1)/2,A[1]=(1-A[1])/2}(r),r}function scalePoint(A,e,t){let[i,g]=A
|
|
2949
2994
|
return[i*(t.width/e.width),g*(t.height/e.height)]}function projectionMatrixFrom(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.1,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100
|
|
2950
2995
|
const i=A[0],g=A[4],r=e-t
|
|
2951
|
-
return[i/A[2],0,0,0,0,g/A[5],0,0,0,0,t/r,t*e/r,0,0,-1,0]}const
|
|
2996
|
+
return[i/A[2],0,0,0,0,g/A[5],0,0,0,0,t/r,t*e/r,0,0,-1,0]}const Vg=JSON.parse('{"W":[[-0.0670342743396759,0.2851885259151459,0.0032449353020638227],[0.003777990350499749,0.2879028618335724,0.06042288616299629],[0.07616502046585083,0.282633513212204,0.0013319245772436261],[0.10859954357147217,0.2666488289833069,0.013438087888062],[0.05935005098581314,0.258896142244339,0.03469371795654297],[0.028351638466119766,0.24979540705680847,0.054054319858551025],[0.003275811206549406,0.24533258378505707,0.05460682511329651],[-0.021493472158908844,0.24866095185279846,0.05424347147345543],[-0.05414045602083206,0.256844699382782,0.03507509082555771],[-0.06564442813396454,0.23618768155574799,0.052040938287973404],[-0.049001798033714294,0.2142186164855957,0.06883901357650757],[0.0012916993582621217,0.19116483628749847,0.08805926144123077],[0.07202834635972977,0.2197674959897995,0.06363009661436081],[0.14162635803222656,0.25185489654541016,0.03650950267910957],[-0.116208516061306,0.18822608888149261,0.0741225853562355],[-0.0496419258415699,0.16860558092594147,0.09924191236495972],[0.0010725661413744092,0.17357802391052246,0.0956256166100502],[0.08739244937896729,0.17362171411514282,0.09401733428239822],[0.11739575862884521,0.17396168410778046,0.08473397046327591],[0.13994504511356354,0.17199276387691498,0.07594182342290878],[0.12444806098937988,0.14173583686351776,0.10043170303106308],[0.06825992465019226,0.14166472852230072,0.1191890686750412],[0.0015895302640274167,0.12829022109508514,0.12011031061410904],[-0.047902509570121765,0.10563388466835022,0.1360519826412201],[-0.1064986139535904,0.12608718872070312,0.1156383752822876],[0.06819386780261993,0.12659549713134766,0.12875032424926758],[0.12015333771705627,0.0989239439368248,0.12506721913814545],[0.0025601170491427183,0.09151558578014374,0.1308031529188156],[-0.03423932567238808,0.07609562575817108,0.1370588093996048],[-0.08516895025968552,0.03599664196372032,0.1181034967303276],[-0.06604434549808502,0.024558117613196373,0.1239568218588829],[0.0018645630916580558,0.006299558561295271,0.14390769600868225],[0.08032397925853729,0.054042186588048935,0.13449688255786896],[0.12049878388643265,0.03649953380227089,0.10083246231079102],[0.10587798804044724,-0.015672966837882996,0.10719040036201477],[-0.04629475995898247,-0.01304212398827076,0.14439155161380768],[-0.10295768827199936,-0.03567085042595863,0.10676814615726471],[0.07117130607366562,-0.013850473798811436,0.13644756376743317],[0.020747100934386253,-0.057150326669216156,0.15983355045318604],[-0.10369129478931427,-0.077202707529068,0.11188778281211853],[-0.06689342111349106,-0.0782540813088417,0.1455792784690857],[-0.0026714238338172436,-0.07964145392179489,0.16255807876586914],[0.06147849187254906,-0.0783548429608345,0.14895473420619965],[0.11716889590024948,-0.07773824036121368,0.10093235969543457]],"n":[[[9,0.5083162188529968],[12,0.40946266055107117],[14,0.06890705972909927],[15,0.013314086943864822]],[[9,0.3130219578742981],[12,0.6140164136886597],[14,0.00571630010381341],[15,0.06724534928798676]],[[9,0.593102216720581],[12,0.27318909764289856],[13,0.12310980260372162],[16,0.010598893277347088]],[[9,0.2852371037006378],[12,0.0102176358923316],[13,0.6936635375022888],[16,0.010881726630032063]],[[9,0.6514266729354858],[12,0.16792413592338562],[13,0.1715087741613388],[15,0.009140417911112309]],[[9,0.8047480583190918],[12,0.1260119378566742],[13,0.06203717365860939],[14,0.007202845066785812]],[[9,0.9123064875602722],[12,0.06257989257574081],[13,0.011415788903832436],[14,0.013697851449251175]],[[9,0.8023254871368408],[12,0.12943746149539948],[14,0.06541182845830917],[15,0.002825214294716716]],[[9,0.6531810164451599],[12,0.16903121769428253],[14,0.1732672154903412],[15,0.004520540591329336]],[[9,0.7445388436317444],[12,0.0301669891923666],[14,0.21969987452030182],[15,0.005594270769506693]],[[9,0.9100150465965271],[12,0.008025020360946655],[14,0.07500991970300674],[15,0.00694999611005187]],[[3,0.0016959442291408777],[9,0.9853029251098633],[14,0.005165004171431065],[17,0.007836122065782547]],[[9,0.8229203820228577],[12,0.010936477221548557],[13,0.15898142755031586],[16,0.007161715999245644]],[[9,0.13728807866573334],[10,0.0014138936530798674],[13,0.8199062347412109],[16,0.041391771286726]],[[6,0.01244832668453455],[9,0.6946360468864441],[14,0.2895357310771942],[17,0.0033799000084400177]],[[6,0.028119763359427452],[9,0.9524573087692261],[14,0.014862744137644768],[17,0.004560161381959915]],[[6,0.019638046622276306],[9,0.9720686078071594],[12,0.0014598076231777668],[17,0.006833529565483332]],[[6,0.02755601331591606],[9,0.9153590798377991],[13,0.055160097777843475],[16,0.0019248353783041239]],[[6,0.026427021250128746],[9,0.8064203262329102],[13,0.16540364921092987],[15,0.0017490216996520758]],[[6,0.020616179332137108],[9,0.6729477643966675],[13,0.29148203134536743],[16,0.014954003505408764]],[[6,0.12808118760585785],[9,0.8075220584869385],[13,0.05854526534676552],[16,0.0058514829725027084]],[[6,0.14477920532226562],[9,0.8351560831069946],[13,0.017794564366340637],[16,0.0022701455745846033]],[[6,0.26860836148262024],[9,0.7183286547660828],[14,0.005997056141495705],[17,0.007065893150866032]],[[3,0.0075964489951729774],[6,0.4230806827545166],[9,0.5673036575317383],[14,0.0020191818475723267]],[[6,0.25829222798347473],[9,0.7168476581573486],[14,0.022918710485100746],[17,0.0019414299167692661]],[[6,0.253845751285553],[9,0.7265201210975647],[13,0.01798873394727707],[16,0.0016454035649076104]],[[6,0.5562059879302979],[9,0.42213088274002075],[13,0.02007417008280754],[16,0.0015889356145635247]],[[3,0.02195204235613346],[6,0.5951573252677917],[9,0.377634197473526],[14,0.005256425589323044]],[[1,0.00105667719617486],[3,0.03202398121356964],[6,0.6597716808319092],[9,0.3071476221084595]],[[0,0.007437651976943016],[3,0.07580146193504333],[6,0.8638856410980225],[9,0.05287524312734604]],[[0,0.004574339371174574],[3,0.15215124189853668],[6,0.8028835654258728],[9,0.04039083793759346]],[[0,0.021531743928790092],[3,0.3894800543785095],[6,0.5684242844581604],[9,0.020563920959830284]],[[3,0.035873085260391235],[6,0.8077408075332642],[9,0.1550101637840271],[13,0.0013759705470874906]],[[3,0.07629653811454773],[6,0.856023371219635],[9,0.05859913304448128],[13,0.009080983698368073]],[[0,0.02261139638721943],[3,0.40344852209091187],[6,0.5670594573020935],[9,0.006880642380565405]],[[0,0.024191560223698616],[3,0.43569299578666687],[6,0.5277100205421448],[9,0.012405410408973694]],[[0,0.038991495966911316],[3,0.5389872193336487],[6,0.4203125238418579],[9,0.001708783209323883]],[[0,0.028374871239066124],[3,0.4035349190235138],[6,0.5521810054779053],[9,0.015909239649772644]],[[0,0.11212236434221268],[3,0.726383626461029],[5,0.0006135199218988419],[6,0.1608804613351822]],[[0,0.16075140237808228],[3,0.6812017560005188],[5,0.001904829521663487],[6,0.156141996383667]],[[0,0.16511686146259308],[3,0.7020062804222107],[6,0.13191653788089752],[13,0.0009603415965102613]],[[0,0.1615496128797531],[3,0.738474428653717],[5,0.000746697885915637],[6,0.09922924637794495]],[[0,0.17024487257003784],[3,0.7002102732658386],[6,0.1290169209241867],[9,0.0005279314937070012]],[[0,0.16328594088554382],[2,0.001173901604488492],[3,0.6813648343086243],[6,0.15417534112930298]]]}'),Wg=JSON.parse('{"W":[[-0.005581510718911886,-0.1349666863679886,0.16438616812229156]],"n":[[[0,0.4565586745738983],[3,0.5216977000236511],[6,0.012674110010266304],[9,0.009069545194506645]]]}'),Zg=JSON.parse('{"W":[[0.0015895302640274167,0.12829022109508514,0.12011031061410904],[-0.09797707200050354,0.28524237871170044,-0.0340692400932312],[-0.00011176200496265665,0.5555177927017212,0.006299180444329977],[-0.12711624801158905,-1.1618430614471436,0.14703765511512756]]}'),Xg=Vg.n,$g=Vg.W,Ar=Wg.n,er=Wg.W,tr=Zg.W[0],ir=Zg.W[1],gr=Zg.W[2],rr=Zg.W[3]
|
|
2952
2997
|
|
|
2953
2998
|
;// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2954
|
-
class JointsBasedSmoothingStep extends
|
|
2955
|
-
this.opticalFlowManager=new OpticalFlowManager(A),this.poseComputationManager=new PoseComputationManager(A)},this._init=onceSuccess(this._init.bind(this))}async init(){return Promise.race([this._init().catch((A=>{emit(c,
|
|
2999
|
+
class JointsBasedSmoothingStep extends Si{constructor(A,e){super(),this.libInjector=A,this.lerpAlpha=e,this.DEBUG_OPTICAL_FLOW=!1,this.DEBUG_SOLVE_PNP=!1,this.minObjectLength=1,this.lerpTranslationComputer=new StatefulComputer(((A,e)=>bi.lerp(A,e,this.lerpAlpha))),this.slerpJointsQuaternionsComputer=new StatefulComputer(((A,e)=>e.map(((e,t)=>Q.slerp(A[t],e,this.lerpAlpha))))),this._init=async()=>{const{cv:A}=await this.libInjector.getOpenCv()
|
|
3000
|
+
this.opticalFlowManager=new OpticalFlowManager(A),this.poseComputationManager=new PoseComputationManager(A)},this._init=onceSuccess(this._init.bind(this))}async init(){return Promise.race([this._init().catch((A=>{emit(c,Ue.toObject(A))})),Promise.resolve()])}*generator(){let A,e=[]
|
|
2956
3001
|
for(;;){A=yield
|
|
2957
3002
|
const{exists:t,translation:i,jointsTransforms:g}=A.objects.left,{jointsRestPositions:r,viewMatrix:I}=A.persistent
|
|
2958
|
-
if(!t||!r||!I){this.lerpTranslationComputer.reset(),this.slerpJointsQuaternionsComputer.reset(),this.opticalFlowManager.reset(),yield
|
|
2959
|
-
continue}const o=matrix_M4.make_intrinsics_for_frame_size(A.frame.scaledBbox[2],A.frame.scaledBbox[3]).flat(),a=
|
|
3003
|
+
if(!t||!r||!I){this.lerpTranslationComputer.reset(),this.slerpJointsQuaternionsComputer.reset(),this.opticalFlowManager.reset(),yield gi.next(A)
|
|
3004
|
+
continue}const o=matrix_M4.make_intrinsics_for_frame_size(A.frame.scaledBbox[2],A.frame.scaledBbox[3]).flat(),a=Zi.mul(projectionMatrixFrom(o),I)
|
|
2960
3005
|
this.startTimer("runOpticalFlowWithFilter")
|
|
2961
3006
|
const s=this.runOpticalFlowWithFilter(i,g,r,A.frame,e,a)
|
|
2962
3007
|
this.stopTimer("runOpticalFlowWithFilter"),e=s,this.startTimer("runSolvePnP")
|
|
2963
3008
|
const[B,n]=this.runSolvePnP(i,g,r,s,A.frame,o,a)
|
|
2964
|
-
this.stopTimer("runSolvePnP"),A.objects.left.jointsTransforms=B,A.objects.left.translation=
|
|
3009
|
+
this.stopTimer("runSolvePnP"),A.objects.left.jointsTransforms=B,A.objects.left.translation=Zi.ofTranslation(n),A.objects.left.jointsProjections={chestPoint:s[sg.indexOf("Spine3")],neckPoint:s[sg.indexOf("Neck")]},yield gi.next(A)}}runSolvePnP(A,e,t,i,g,r,I){const o=this.lerpTranslationComputer.compute(Zi.extractTranslation(A)),a=this.slerpJointsQuaternionsComputer.compute(e.map((A=>Q.from_rotation_matrix(A)))).map((A=>Q.to_rotation_matrix(A))),s=this.getSelected3DPoints(Zi.ofTranslation(o),a,t),B=[],n=[],E={width:g.scaledBbox[2],height:g.scaledBbox[3]}
|
|
2965
3010
|
if(s.forEach(((A,e)=>{const t=i[e],r=[t[0]-g.scaledBbox[0],t[1]-g.scaledBbox[1]];(function isPointVisible(A,e){let[t,i]=A
|
|
2966
3011
|
return t>=0&&t<e.width&&i>=0&&i<e.height})(r,E)&&(B.push(A),n.push(r))})),this.DEBUG_SOLVE_PNP){const A=B.map((A=>function mapPointToFrameInPlace(A,e){return A[0]=A[0]*e.width,A[1]=A[1]*e.height,A}(projectPointToOpencvSpace(A,I),E)))
|
|
2967
3012
|
this.debugProjections("onlyVisible3DPointsProjections",A,g,"red"),this.debugProjections("onlyVisibleProjections",n,g,"yellow")}const[C,c,h]=this.poseComputationManager.solvePnP(B,n,r)
|
|
2968
|
-
return C?[[
|
|
3013
|
+
return C?[[Zi.mul(c,a[0]),...a.slice(1)],this.calculateResultTranslation(s[0],c,h,o)]:[a,o]}runOpticalFlowWithFilter(A,e,t,i,g,r){const I=this.getSelected3DPoints(A,e,t).map((A=>function mapPointToBboxInPlace(A,e){return A[0]=A[0]*e[2]+e[0],A[1]=A[1]*e[3]+e[1],A}(projectPointToOpencvSpace(A,r),i.scaledBbox)))
|
|
2969
3014
|
this.DEBUG_OPTICAL_FLOW&&this.debugProjections("predictedProjections",I,i,"red")
|
|
2970
3015
|
const o=i.getDownscaledSize(),a=g.map((A=>scalePoint(A,i,o))),s=i.getDownscaledGrayMat()
|
|
2971
3016
|
this.DEBUG_OPTICAL_FLOW&&this.debugOpticalFlowInput(s,a,i)
|
|
2972
3017
|
const B=this.opticalFlowManager.trackPoints(s,a).map((A=>scalePoint(A,o,i)))
|
|
2973
3018
|
this.DEBUG_OPTICAL_FLOW&&this.debugProjections("opticalFlowPoints",B,i,"blue")
|
|
2974
3019
|
const n=this.opticalFlowFilter(I,B,g)
|
|
2975
|
-
return this.DEBUG_OPTICAL_FLOW&&this.debugProjections("filteredOpticalFlowPoints",n,i,"green"),n}calculateResultTranslation(A,e,t,i){return
|
|
2976
|
-
return[...computeJointsPositions(
|
|
3020
|
+
return this.DEBUG_OPTICAL_FLOW&&this.debugProjections("filteredOpticalFlowPoints",n,i,"green"),n}calculateResultTranslation(A,e,t,i){return bi.add(bi.sub(bi.add(transformPoint(A,e),t),A),i)}getSelected3DPoints(A,e,t){const i=computeJointsGlobalTransforms(A,e,t)
|
|
3021
|
+
return[...computeJointsPositions(sg,t,i),...computeJointsMeshPositions($g,Xg,i)]}calculateObjectLength(A){return Math.max(bi.len(bi.sub(A[sg.indexOf("Spine3")],A[sg.indexOf("Neck")])),this.minObjectLength)}opticalFlowFilter(A,e,t){if(0===t.length||0===e.length)return A
|
|
2977
3022
|
const i=this.calculateObjectLength(A),g=Array(A.length)
|
|
2978
|
-
return A.forEach(((A,r)=>{const I=parabolaImitator((
|
|
2979
|
-
g[r]=
|
|
3023
|
+
return A.forEach(((A,r)=>{const I=parabolaImitator((bi.len(bi.sub(A,t[r]))+bi.len(bi.sub(A,e[r])))/(2*i))
|
|
3024
|
+
g[r]=bi.lerp(e[r],A,I)})),g}debugProjections(A,e,t,i){this.debugPoints(this.getDebugCanvas(A,t),e.map((A=>{let[e,t]=A
|
|
2980
3025
|
return{x:e,y:t}})),Array.from(Array(e.length)).fill(i))}debugOpticalFlowInput(A,e,t){t.debugImage(this.getDebugCanvas("opticalFlowInput.image",t.getDownscaledSize(),!0),A),this.debugPoints(this.getDebugCanvas("opticalFlowInput.points",t.getDownscaledSize(),!0),e.map((A=>{let[e,t]=A
|
|
2981
|
-
return{x:e,y:t}})),Array.from(Array(e.length)).fill("red"),2)}}const
|
|
3026
|
+
return{x:e,y:t}})),Array.from(Array(e.length)).fill("red"),2)}}const Ir=
|
|
2982
3027
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2983
|
-
class CalculatePersonBboxStep extends
|
|
3028
|
+
class CalculatePersonBboxStep extends Si{constructor(A){super(),this.alpha=A,this.BBOX_SCALE_LEFT=2.2,this.BBOX_SCALE_RIGHT=2.2,this.BBOX_SCALE_TOP=1.8,this.BBOX_SCALE_BOTTOM=6,this.distanceComputer=new StatefulComputer(((A,e)=>
|
|
2984
3029
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
2985
3030
|
function lerp(A,e,t){return A+(e-A)*t}(A,e,this.alpha)))}*generator(){let A
|
|
2986
3031
|
for(;;){A=yield
|
|
2987
3032
|
const{exists:e}=A.objects.left
|
|
2988
3033
|
let t=null
|
|
2989
|
-
if(e&&A.objects.left.jointsProjections){const{neckPoint:e,chestPoint:i}=A.objects.left.jointsProjections,g=this.distanceComputer.compute(
|
|
3034
|
+
if(e&&A.objects.left.jointsProjections){const{neckPoint:e,chestPoint:i}=A.objects.left.jointsProjections,g=this.distanceComputer.compute(bi.len(bi.sub(e,i)))
|
|
2990
3035
|
t=cornersToBboxCropped([e[0]-g*this.BBOX_SCALE_LEFT,e[1]-g*this.BBOX_SCALE_TOP],[e[0]+g*this.BBOX_SCALE_RIGHT,e[1]+g*this.BBOX_SCALE_BOTTOM],A.frame)}else this.distanceComputer.reset()
|
|
2991
|
-
A.frame.setBbox(t),yield
|
|
3036
|
+
A.frame.setBbox(t),yield gi.next(A)}}}
|
|
2992
3037
|
|
|
2993
3038
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2994
|
-
class FilterPhonePresenceStep extends
|
|
3039
|
+
class FilterPhonePresenceStep extends Si{constructor(A){super(),this.threshold=A}*generator(){let A
|
|
2995
3040
|
for(;;){A=yield
|
|
2996
3041
|
const{phonePresence:e}=A.segmentation.presence
|
|
2997
|
-
e<this.threshold&&(A.segmentation.buffers.phoneSegmentation=null),yield
|
|
3042
|
+
e<this.threshold&&(A.segmentation.buffers.phoneSegmentation=null),yield gi.next(A)}}}
|
|
2998
3043
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
2999
|
-
class FilterHandsVisibilityStep extends
|
|
3000
|
-
if(!i){yield
|
|
3001
|
-
continue}const g=computeJointsGlobalTransforms(t,e,i),[r,I]=computeJointsPositions(this.KEY_JOINTS,i,g),[o]=computeJointsMeshPositions(
|
|
3002
|
-
r[2]>o[2]&&(A.segmentation.buffers.leftHandForearmSegmentation=null),I[2]>o[2]&&(A.segmentation.buffers.rightHandForearmSegmentation=null),yield
|
|
3044
|
+
class FilterHandsVisibilityStep extends Si{constructor(){super(),this.KEY_JOINTS=["L_Wrist","R_Wrist"]}*generator(){for(;;){const A=yield,{jointsTransforms:e,translation:t}=A.objects.left,{jointsRestPositions:i}=A.persistent
|
|
3045
|
+
if(!i){yield gi.next(A)
|
|
3046
|
+
continue}const g=computeJointsGlobalTransforms(t,e,i),[r,I]=computeJointsPositions(this.KEY_JOINTS,i,g),[o]=computeJointsMeshPositions(er,Ar,g)
|
|
3047
|
+
r[2]>o[2]&&(A.segmentation.buffers.leftHandForearmSegmentation=null),I[2]>o[2]&&(A.segmentation.buffers.rightHandForearmSegmentation=null),yield gi.next(A)}}}
|
|
3003
3048
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3004
|
-
class ScaleBagSizeStep extends
|
|
3049
|
+
class ScaleBagSizeStep extends Si{constructor(A){super(),this.personHeightCM=A}*generator(){let A
|
|
3005
3050
|
for(;;){A=yield
|
|
3006
3051
|
const{exists:e,translation:t}=A.objects.left
|
|
3007
|
-
if(e&&this.personHeightCM){const A=
|
|
3008
|
-
t[7]+=o,t[11]+=s}yield
|
|
3052
|
+
if(e&&this.personHeightCM){const A=tr[2],e=ir[1],i=gr[1]-rr[1],g=this.personHeightCM/100/i,r=i/2,I=A*g,o=(e-r)*g+r-e,a=t[11],s=I-A+(a*g-a)
|
|
3053
|
+
t[7]+=o,t[11]+=s}yield gi.next(A)}}reInit(A){return null!==A&&void 0!==A&&A.hasOwnProperty("personHeight")&&(this.personHeightCM=A.personHeight),super.reInit()}getDebugData(){return{...super.getDebugData(),personHeight:this.personHeightCM?`${this.personHeightCM} cm`:"not specified"}}}
|
|
3009
3054
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3010
|
-
const
|
|
3055
|
+
const or={offset:0,size:144},ar={offset:154,size:3},sr={offset:209,size:1},Br={offset:210,size:1},Qr={faceMask:{channel:26},handMask:{channel:27},handForearmMask:{channel:29},phoneMask:{channel:30}}
|
|
3011
3056
|
|
|
3012
3057
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3013
|
-
function nnUtils_parseFlags(A){return{jointsTransforms:extractJointsTransforms(extractOutput(A
|
|
3058
|
+
function nnUtils_parseFlags(A){return{jointsTransforms:extractJointsTransforms(extractOutput(A,or)),globalTransform:Zi.ofTranslation(Array.from(extractOutput(A,ar))),presence:extractOutput(A,sr)[0],phonePresence:extractOutput(A,Br)[0]}}
|
|
3014
3059
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3015
|
-
class RunNNStepClothesTfjs extends RunNNStepWearableTfjs{constructor(){super(...arguments),this.segmentationOutputs=
|
|
3060
|
+
class RunNNStepClothesTfjs extends RunNNStepWearableTfjs{constructor(){super(...arguments),this.segmentationOutputs=Qr}parseFlags(A){return nnUtils_parseFlags(A)}}class RunNNStepClothesTflite extends RunNNStepWearableTflite{constructor(){super(...arguments),this.segmentationOutputs=Qr}parseFlags(A){return nnUtils_parseFlags(A)}}
|
|
3016
3061
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3017
|
-
const
|
|
3062
|
+
const nr={offset:0,size:144},Er={offset:154,size:3},Cr={offset:209,size:1},cr={offset:210,size:1},hr={rightHandForearmMask:{channel:27},leftHandForearmMask:{channel:26},faceMask:{channel:28},phoneMask:{channel:29}}
|
|
3018
3063
|
|
|
3019
3064
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3020
|
-
function scarf_nnUtils_parseFlags(A){return{jointsTransforms:extractJointsTransforms(extractOutput(A,
|
|
3065
|
+
function scarf_nnUtils_parseFlags(A){return{jointsTransforms:extractJointsTransforms(extractOutput(A,nr)),globalTransform:Zi.ofTranslation(Array.from(extractOutput(A,Er))),presence:extractOutput(A,Cr)[0],phonePresence:extractOutput(A,cr)[0]}}
|
|
3021
3066
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3022
|
-
class RunNNStepScarfTfjs extends RunNNStepWearableTfjs{constructor(){super(...arguments),this.segmentationOutputs=
|
|
3067
|
+
class RunNNStepScarfTfjs extends RunNNStepWearableTfjs{constructor(){super(...arguments),this.segmentationOutputs=hr}parseFlags(A){return scarf_nnUtils_parseFlags(A)}}class RunNNStepScarfTflite extends RunNNStepWearableTflite{constructor(){super(...arguments),this.segmentationOutputs=hr}parseFlags(A){return scarf_nnUtils_parseFlags(A)}}
|
|
3023
3068
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3024
|
-
const
|
|
3069
|
+
const dr={batchSize:0,interpolateSize:0,gpuArgmax:!1,disableOpticalFlow:!1,useKeypointsPresence:!1,filterKeypointsForPnP:!1,requiredNumberOfKeypoints:4},lr={...dr,networkName:"current_network",meanLeft:[.6152729814285715,.2921321985714286,.1368148742857143],meanRight:[-.6152729814285715,.2921321985714286,.1368148742857143],reprojectionThreshold:.07,appearThreshold:.7,disappearThreshold:.216,segmentationSmoothMultiplier:.7},ur={...dr,networkName:"current_network",meanLeft:[0,0,0],meanRight:[0,0,0],reprojectionThreshold:.2,appearThreshold:.84,disappearThreshold:.22},wr={...dr,networkName:"current_network",meanLeft:[0,0,0],meanRight:[0,0,0],reprojectionThreshold:.2,appearThreshold:.99,disappearThreshold:.22,lerpAlpha:.4,bboxAlpha:.01,phonePresenceThreshold:.5},Dr={...dr,networkName:"current_network",meanLeft:[0,0,0],meanRight:[0,0,0],reprojectionThreshold:.2,appearThreshold:.99,disappearThreshold:.22,lerpAlpha:.4,bboxAlpha:.01,phonePresenceThreshold:.5},fr={...dr,networkName:"current_network",meanLeft:[0,0,0],meanRight:[0,0,0],reprojectionThreshold:.2,appearThreshold:.99,disappearThreshold:.22,lerpAlpha:.4,bboxAlpha:.01,phonePresenceThreshold:.5},mr="OCCLUSION_REFINED_STUB_V2",pr="OCCLUSION_STUB_INTERSECTION",yr={[Kt]:lr,[Pt]:ur,[Ot]:wr,[zt]:Dr,[jt]:fr},inferenceConfigs=A=>{const e=yr[A]
|
|
3025
3070
|
if(!e)throw new Error(`No inference config for "${A}" type`)
|
|
3026
|
-
return e},
|
|
3071
|
+
return e},Rr={validateOcclusionType(){if(this.nn.occlusion!==mr)throw new Error(`Not implemented occlusion ${this.nn.occlusion}.`)},extractSegmentations(A,e,t){let[i,g]=t
|
|
3027
3072
|
const r=i*g,[I,o,a,s]=[0,1,2,3].map((t=>{const i=new Float32Array(A.buffer,e+t*r*4,r)
|
|
3028
3073
|
for(let A=0;A<i.length;++A)i[A]*=255
|
|
3029
3074
|
return new Uint8Array(i)}))
|
|
@@ -3035,10 +3080,10 @@ if("object"!=typeof i)return i
|
|
|
3035
3080
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
3036
3081
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3037
3082
|
(A,"string")
|
|
3038
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}Object.assign(RunNNStepSneakerTfjs.prototype,
|
|
3039
|
-
const
|
|
3083
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}Object.assign(RunNNStepSneakerTfjs.prototype,Rr),Object.assign(RunNNStepSneakerTflite.prototype,Rr)
|
|
3084
|
+
const Mr=class OpticalFlowStep extends Si{constructor(A){let{libInjector:e}=A
|
|
3040
3085
|
super(),OpticalFlowStep_defineProperty(this,"debug",!1),OpticalFlowStep_defineProperty(this,"_init",onceSuccess((async()=>{const{cv:A}=await this.libInjector.getOpenCv()
|
|
3041
|
-
this.cv=A,this.maxLevel=4,this.winSize=new this.cv.Size(50,50),this.termCriteria=new this.cv.TermCriteria(this.cv.TermCriteria_EPS|this.cv.TermCriteria_COUNT,10,.03),this.prevPyramid=new this.cv.MatVector,this.pyramid=new this.cv.MatVector}))),this.libInjector=e}async init(){return Promise.race([this._init().catch((A=>{emit(c,
|
|
3086
|
+
this.cv=A,this.maxLevel=4,this.winSize=new this.cv.Size(50,50),this.termCriteria=new this.cv.TermCriteria(this.cv.TermCriteria_EPS|this.cv.TermCriteria_COUNT,10,.03),this.prevPyramid=new this.cv.MatVector,this.pyramid=new this.cv.MatVector}))),this.libInjector=e}async init(){return Promise.race([this._init().catch((A=>{emit(c,Ue.toObject(A))})),Promise.resolve({})])}async reInit(A){let{action:e}=A
|
|
3042
3087
|
"start"===e&&await this._init()}distance(A,e){let t=A[0]-e[0],i=A[1]-e[1]
|
|
3043
3088
|
return t*=t,i*=i,Math.sqrt(t+i)}optical_flow_filter(A,e,t){let{opt_flow_radius_ratio:i=.05,decline:g=2,increase:r=3.5}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}
|
|
3044
3089
|
const I=[],o=[]
|
|
@@ -3046,7 +3091,7 @@ for(let i=0;i<A.length;i++)I[i]=this.distance(t[i],A[i]),o[i]=this.distance(t[i]
|
|
|
3046
3091
|
let a,s=0
|
|
3047
3092
|
for(let A=0;A<t.length;A++)for(let e=0;e<t.length;e++){const i=this.distance(t[A],t[e])
|
|
3048
3093
|
i>s&&(s=i)}const B=[]
|
|
3049
|
-
for(let n=0;n<A.length;n++)0===s?a=.8:(a=(I[n]+o[n])/(2*s),a=parabolaImitator(a,i,g,r,.8)),B.push(
|
|
3094
|
+
for(let n=0;n<A.length;n++)0===s?a=.8:(a=(I[n]+o[n])/(2*s),a=parabolaImitator(a,i,g,r,.8)),B.push(bi.lerp(e[n],t[n],a))
|
|
3050
3095
|
return B}debugGrayframe(A){const e=this.getDebugCanvas("grayframe",{width:A.cols,height:A.rows}),t=new Uint8ClampedArray(4*A.cols*A.rows)
|
|
3051
3096
|
for(let e=0;e<A.cols*A.rows;++e)t[4*e]=A.data[e],t[4*e+1]=A.data[e],t[4*e+2]=A.data[e],t[4*e+3]=255
|
|
3052
3097
|
e.getContext("2d").putImageData(new ImageData(t,A.cols,A.rows),0,0)}debugOpticalFlow(A,e,t,i){const g=this.getDebugCanvas("optical_flow",A)
|
|
@@ -3056,13 +3101,13 @@ return[e*r/i,t*I/g]}))}resizeKeypointArrayToObjects(A,e,t){let{width:i,height:g}
|
|
|
3056
3101
|
return A.map((A=>{let[e,t]=A
|
|
3057
3102
|
return{x:e*r/i,y:t*I/g}}))}resetFrameSize(){this.prev_points_both&&(this.prevPyramid.resize(0,this.prev_points_both),this.memClear(this.prev_points_both),this.prev_points_both=null)}*generator(){let A,e,t,i,g,r,I,o,a,s,B=3.5,n=2
|
|
3058
3103
|
try{for(;;){if(t=yield,g=t.objects,i=t.frame,r||(r=new this.cv.Mat,I=new this.cv.Mat,o=new this.cv.Mat),i.sizeChanged&&this.resetFrameSize(),g.left.keypoints&&g.right.keypoints?(a=this.resizeKeypointObjectsToArray(g.left.keypoints,i,i.getDownscaledSize()),s=this.resizeKeypointObjectsToArray(g.right.keypoints,i,i.getDownscaledSize()),B=3.5,n=2):(B=.1,n=10),this.cv.buildOpticalFlowPyramid(t.frame.getDownscaledGrayMat(),this.pyramid,this.winSize,this.maxLevel),this.prev_points_both){this.calcOpticalFlow(this.prevPyramid,this.pyramid,this.prev_points_both,r,I,o)
|
|
3059
|
-
const t=
|
|
3104
|
+
const t=vi.to_vec(vi.from_cv_mat(this.cv,this.prev_points_both)),i=vi.to_vec(vi.from_cv_mat(this.cv,r))
|
|
3060
3105
|
let g
|
|
3061
3106
|
g=a&&s?[...a,...s]:i
|
|
3062
3107
|
const E=this.optical_flow_filter(t.slice(0,A/2),i.slice(0,A/2),g.slice(0,A/2),{increase:B,decline:n}),C=this.optical_flow_filter(t.slice(A/2),i.slice(A/2),g.slice(A/2),{increase:B,decline:n})
|
|
3063
3108
|
e=[...E,...C],a=E,s=C}else A=a.length+s.length,e=[...a,...s],this.prev_points_both=new this.cv.Mat(A,1,this.cv.CV_32FC2);[this.prevPyramid,this.pyramid]=[this.pyramid,this.prevPyramid]
|
|
3064
3109
|
for(let t=0;t<A;++t)this.prev_points_both.data32F[2*t]=e[t][0],this.prev_points_both.data32F[2*t+1]=e[t][1]
|
|
3065
|
-
g.left.keypoints=this.resizeKeypointArrayToObjects(a,i.getDownscaledSize(),i),g.right.keypoints=this.resizeKeypointArrayToObjects(s,i.getDownscaledSize(),i),yield
|
|
3110
|
+
g.left.keypoints=this.resizeKeypointArrayToObjects(a,i.getDownscaledSize(),i),g.right.keypoints=this.resizeKeypointArrayToObjects(s,i.getDownscaledSize(),i),yield gi.next({...t})}}catch(A){throw Number.isInteger(A)&&(A=this.cv.exceptionFromPtr(A)),A}finally{this.memClear(r),this.memClear(I),this.memClear(o),this.memClear(this.pyramid),this.memClear(this.prevPyramid),this.memClear(this.prev_points_both)}}}
|
|
3066
3111
|
function SmoothSegmentationStep_defineProperty(A,e,t){return(e=function SmoothSegmentationStep_toPropertyKey(A){var e=function SmoothSegmentationStep_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
3067
3112
|
var t=A[Symbol.toPrimitive]
|
|
3068
3113
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -3070,7 +3115,7 @@ if("object"!=typeof i)return i
|
|
|
3070
3115
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
3071
3116
|
// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
3072
3117
|
(A,"string")
|
|
3073
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
3118
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Fr=class SmoothSegmentationStep extends Si{constructor(A){let{segmentationSmoothMultiplier:e}=A
|
|
3074
3119
|
super(),SmoothSegmentationStep_defineProperty(this,"prevLeft",{}),SmoothSegmentationStep_defineProperty(this,"prevRight",{}),this.segmentationSmoothMultiplier=e}getAlpha(A,e,t,i){let g=0
|
|
3075
3120
|
const r=A.map(((A,t)=>{const i=A&&e[t]
|
|
3076
3121
|
return i&&g++,i}))
|
|
@@ -3086,7 +3131,7 @@ this.calculateAndOverride(A.buffers,t,e)}A.buffers=t,A.keypointsPresence=i,A.key
|
|
|
3086
3131
|
this.perform(this.prevLeft,t,[e[0],e[2]]),this.perform(this.prevRight,i,[e[1],e[3]])}*generator(){let A
|
|
3087
3132
|
for(;;){A=yield
|
|
3088
3133
|
const{objects:e,segmentation:t}=A,{buffers:i}=t
|
|
3089
|
-
this.smoothSegmentation(e,i),yield
|
|
3134
|
+
this.smoothSegmentation(e,i),yield gi.next(A)}}}
|
|
3090
3135
|
function SolvePnPStep_defineProperty(A,e,t){return(e=function SolvePnPStep_toPropertyKey(A){var e=function SolvePnPStep_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
3091
3136
|
var t=A[Symbol.toPrimitive]
|
|
3092
3137
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -3094,9 +3139,9 @@ if("object"!=typeof i)return i
|
|
|
3094
3139
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
3095
3140
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3096
3141
|
(A,"string")
|
|
3097
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
3142
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Nr=class SolvePnPStep extends Si{constructor(A){let{nn:e,useKeypointsPresence:t,filterKeypointsForPnP:i,libInjector:g,requiredNumberOfKeypoints:r=4,reprojectionThreshold:I=.07,internalEventsEmitter:o}=A
|
|
3098
3143
|
super(),SolvePnPStep_defineProperty(this,"_init",onceSuccess((async()=>{const{cv:A}=await this.libInjector.getOpenCv()
|
|
3099
|
-
this.cv=A}))),this.libInjector=g,this.objectPoints=e.keypoints,this.useKeypointsPresence=t,this.filterKeypointsForPnP=i,this.requiredNumberOfKeypoints=r,this.reprojectionThreshold=I,this.internalEventsEmitter=o}async init(){return this.internalEventsEmitter.emit(
|
|
3144
|
+
this.cv=A}))),this.libInjector=g,this.objectPoints=e.keypoints,this.useKeypointsPresence=t,this.filterKeypointsForPnP=i,this.requiredNumberOfKeypoints=r,this.reprojectionThreshold=I,this.internalEventsEmitter=o}async init(){return this.internalEventsEmitter.emit(qi,"solvepnp"),Promise.race([this._init().then((()=>{this.internalEventsEmitter.emit(zi,"solvepnp")})).catch((A=>{emit(c,Ue.toObject(A))})),Promise.resolve({})])}async reInit(A){let{action:e}=A
|
|
3100
3145
|
"start"===e&&await this._init()}solvePnP(A,e,t){const i=A.length/3
|
|
3101
3146
|
if(i<this.max(4,this.requiredNumberOfKeypoints))return[!1,null,null]
|
|
3102
3147
|
const g=this.cv.CV_64F,r=this.cv.matFromArray(i,3,g,A),I=this.cv.matFromArray(i,2,g,e),o=this.cv.matFromArray(3,3,g,t),a=new this.cv.Mat,s=new this.cv.Mat,B=new this.cv.Mat
|
|
@@ -3125,81 +3170,86 @@ return[t-e-1,i-g-1]})),o=this.objectPoints[g]
|
|
|
3125
3170
|
this.useKeypointsPresence&&(this.filterKeypointsForPnP?(I=I.filter(((A,e)=>r.keypointsPresence[e])),o=o.filter(((A,e)=>r.keypointsPresence[e]))):r.keypointsPresence.filter((A=>A)).length<this.requiredNumberOfKeypoints&&(o=[],I=[]))
|
|
3126
3171
|
const[a,s,B]=this.solvePnP(o.flat(),I.flat(),e.flat())
|
|
3127
3172
|
let n,E,C
|
|
3128
|
-
this.stopTimer(`SOLVE_PNP_${g.toUpperCase()}`),a&&(C=M3.rotation_from_rodrigues(this.cv,s),n=this.projection_loss(C,B,e,o,I,A.frame),E=this.base_object_len(o,I)),r.loss=n/E,a&&r.loss<=this.reprojectionThreshold?(r.translation=B,r.rotation=C):r.exists=!1}yield
|
|
3173
|
+
this.stopTimer(`SOLVE_PNP_${g.toUpperCase()}`),a&&(C=M3.rotation_from_rodrigues(this.cv,s),n=this.projection_loss(C,B,e,o,I,A.frame),E=this.base_object_len(o,I)),r.loss=n/E,a&&r.loss<=this.reprojectionThreshold?(r.translation=B,r.rotation=C):r.exists=!1}yield gi.next({...A})}}}
|
|
3129
3174
|
|
|
3130
3175
|
;// Copyright © 2022 WANNABY Inc. All rights reserved.
|
|
3131
|
-
function getDiag2D(A){return A.reduce(((A,e,t)=>(A.push(e[t]),A)),[])}const
|
|
3132
|
-
for(;;){if(A=yield,e=A.objects,e.left.exists&&e.right.exists){let A=new
|
|
3176
|
+
function getDiag2D(A){return A.reduce(((A,e,t)=>(A.push(e[t]),A)),[])}const Sr=class RemoveObjectsOverlapStep extends Si{constructor(){super(),this.lstreak=0,this.rstreak=0}*generator(){let A,e,t={left:null,right:null}
|
|
3177
|
+
for(;;){if(A=yield,e=A.objects,e.left.exists&&e.right.exists){let A=new eg(e.left.keypoints),i=new eg(e.right.keypoints),g=A.distanceToSet(i),r=i.distanceToSet(A),I=g.map((A=>Math.min(...A))),o=r.map((A=>Math.min(...A))),a=(sum(I)+sum(o))/(I.length+o.length),s=A.distanceToSet(A),B=i.distanceToSet(i),n=Math.max(...s.flat()),E=Math.max(...B.flat())
|
|
3133
3178
|
if(a<Math.max(n,E)/10)if(this.lstreak>this.rstreak)e.right.exists=!1
|
|
3134
3179
|
else if(this.rstreak>this.lstreak)e.left.exists=!1
|
|
3135
3180
|
else if(null!==t.left&&null!==t.right){let A=getDiag2D(s),t=getDiag2D(B)
|
|
3136
|
-
sum(A)/A.length<sum(t)/t.length?e.right.exists=!1:e.left.exists=!1}}this.lstreak=e.left.exists?this.lstreak+1:0,this.rstreak=e.right.exists?this.rstreak+1:0,t.left=e.left.exists?e.left.keypoints:null,t.left=e.right.exists?e.right.keypoints:null,yield
|
|
3181
|
+
sum(A)/A.length<sum(t)/t.length?e.right.exists=!1:e.left.exists=!1}}this.lstreak=e.left.exists?this.lstreak+1:0,this.rstreak=e.right.exists?this.rstreak+1:0,t.left=e.left.exists?e.left.keypoints:null,t.left=e.right.exists?e.right.keypoints:null,yield gi.next({...A})}}}
|
|
3137
3182
|
|
|
3138
3183
|
;// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3139
|
-
const
|
|
3184
|
+
const Gr={validateOcclusionType(){if(this.nn.occlusion!==pr)throw new Error(`Not implemented occlusion ${this.nn.occlusion}.`)},extractSegmentations(A,e,t){let[i,g]=t
|
|
3140
3185
|
const r=i*g,[I,o]=[0,1].map((t=>{const i=new Float32Array(A.buffer,e+t*r*4,r)
|
|
3141
3186
|
for(let A=0;A<i.length;++A)i[A]=255*(1-i[A])
|
|
3142
3187
|
return new Uint8Array(i)}))
|
|
3143
3188
|
return[I,o]}}
|
|
3144
|
-
class RunNNStepWatchTfjs extends RunNNStepTfjs{}class RunNNStepWatchTflite extends RunNNStepTfLite{}
|
|
3189
|
+
class RunNNStepWatchTfjs extends RunNNStepTfjs{}class RunNNStepWatchTflite extends RunNNStepTfLite{}Object.assign(RunNNStepWatchTfjs.prototype,Gr),Object.assign(RunNNStepWatchTflite.prototype,Gr)
|
|
3190
|
+
const kr=new
|
|
3191
|
+
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3192
|
+
class ErrorHandler{init(A){this.logger=A}handleError(A){this.logger.logError(A),Ai.remoteEmit(rA,Ue.toObject(A))}}
|
|
3193
|
+
function inference_defineProperty(A,e,t){return(e=function inference_toPropertyKey(A){var e=function inference_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
3145
3194
|
var t=A[Symbol.toPrimitive]
|
|
3146
3195
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
3147
3196
|
if("object"!=typeof i)return i
|
|
3148
3197
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
3149
3198
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3150
3199
|
(A,"string")
|
|
3151
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}
|
|
3152
|
-
const
|
|
3153
|
-
const yr=new class Inference{constructor(){inference_defineProperty(this,"enableFrameRotation",!1)}createFrameProcessor(A){let{frameType:e=pr,isVideoSource:t,...i}=A
|
|
3200
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const br=Et?"dbc":"dynamic"
|
|
3201
|
+
const _r=new class Inference{constructor(){inference_defineProperty(this,"enableFrameRotation",!1)}createFrameProcessor(A){let{frameType:e=br,isVideoSource:t,...i}=A
|
|
3154
3202
|
const g={dynamic:DynamicFrame,dbc:DoubleBufferedCanvasFrame,mstpv:MediaStreamTrackProcessorFrame,vpf:VideoProcessorFrame,vsrf:VideoStreamReaderFrame}[e]
|
|
3155
3203
|
if(!g)throw new Error(`Unknown frame processor type: "${e}"`)
|
|
3156
3204
|
if(!g.isSupported())throw new Error(`Frame type ${e} is not supported`)
|
|
3157
3205
|
return"dynamic"===e&&(i.frames=[t?VideoStreamReaderFrame:MediaStreamTrackProcessorFrame,DoubleBufferedCanvasFrame]),new g(i)}async init(A){let{mode:e,...t}=A
|
|
3158
|
-
return this.mode=e,this.initParams=t,e===
|
|
3159
|
-
this.renderStep||this.initRenderStep(),this.enableFrameRotation=[
|
|
3206
|
+
return this.mode=e,this.initParams=t,e===_t?(this.initPipeline(),await this.pipeline.init()):(this.initRenderStep(),this.renderStep.init())}initPipeline(){const{frameType:A,libInjector:e,logger:t,nn:i,onSizeChange:g,resetStream:r,video:I,isVideoSource:o}=this.initParams
|
|
3207
|
+
this.renderStep||this.initRenderStep(),this.enableFrameRotation=[Lt,vt].includes(this.initParams.type),this.frame=this.createFrameProcessor({frameType:A,libInjector:e,logger:t,nn:i,onSizeChange:g,resetStream:r,video:I,isVideoSource:o,enableFrameRotation:this.enableFrameRotation}),this.pipeline=new ri(this._buildPipelineSteps(),I,this.frame)}_buildPipelineSteps(){switch(this.initParams.type){case Ht:
|
|
3160
3208
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3161
3209
|
return function buildBagSteps(A,e){const{appearThreshold:t,batchSize:i,cacheCanvas:g,dataProvider:r,disappearThreshold:I,gpuArgmax:o,interpolateSize:a,isRecordVideoMode:s,libInjector:B,nn:n,subpixel:E,type:C,useTflite:c,webglCanvas:h,internalEventsEmitter:d,lerpAlpha:l,bboxAlpha:u,phonePresenceThreshold:w,personHeight:D}=A,f=c?RunNNStepBagTflite:RunNNStepBagTfjs
|
|
3162
|
-
return[s?new GetRecordVideoFramesStep(h):new GetVideoFramesStep,new f({subpixel:E,gpuArgmax:o,cacheCanvas:g,batchSize:i,interpolateSize:a,nn:n,dataProvider:r,type:C,libInjector:B,internalEventsEmitter:d}),new
|
|
3163
|
-
case
|
|
3210
|
+
return[s?new GetRecordVideoFramesStep(h):new GetVideoFramesStep,new f({subpixel:E,gpuArgmax:o,cacheCanvas:g,batchSize:i,interpolateSize:a,nn:n,dataProvider:r,type:C,libInjector:B,internalEventsEmitter:d}),new xg({appearThreshold:t,disappearThreshold:I}),new ScaleBagSizeStep(D),new FilterPhonePresenceStep(w),new JointsBasedSmoothingStep(B,l),new FilterHandsVisibilityStep,e,new Ir(u),new Yg]}(this.initParams,this.renderStep)
|
|
3211
|
+
case xt:
|
|
3164
3212
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3165
3213
|
return function buildClothesSteps(A,e){const{appearThreshold:t,batchSize:i,cacheCanvas:g,dataProvider:r,disappearThreshold:I,gpuArgmax:o,interpolateSize:a,isRecordVideoMode:s,libInjector:B,nn:n,subpixel:E,type:C,useTflite:c,webglCanvas:h,internalEventsEmitter:d,lerpAlpha:l,bboxAlpha:u,phonePresenceThreshold:w}=A,D=c?RunNNStepClothesTflite:RunNNStepClothesTfjs
|
|
3166
|
-
return[s?new GetRecordVideoFramesStep(h):new GetVideoFramesStep,new D({subpixel:E,gpuArgmax:o,cacheCanvas:g,batchSize:i,interpolateSize:a,nn:n,dataProvider:r,type:C,libInjector:B,internalEventsEmitter:d}),new
|
|
3167
|
-
case
|
|
3214
|
+
return[s?new GetRecordVideoFramesStep(h):new GetVideoFramesStep,new D({subpixel:E,gpuArgmax:o,cacheCanvas:g,batchSize:i,interpolateSize:a,nn:n,dataProvider:r,type:C,libInjector:B,internalEventsEmitter:d}),new xg({appearThreshold:t,disappearThreshold:I}),new FilterPhonePresenceStep(w),new JointsBasedSmoothingStep(B,l),new FilterHandsVisibilityStep,e,new Ir(u),new Yg]}(this.initParams,this.renderStep)
|
|
3215
|
+
case Yt:
|
|
3168
3216
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3169
3217
|
return function buildScarfSteps(A,e){const{appearThreshold:t,batchSize:i,cacheCanvas:g,dataProvider:r,disappearThreshold:I,gpuArgmax:o,interpolateSize:a,isRecordVideoMode:s,libInjector:B,nn:n,subpixel:E,type:C,useTflite:c,webglCanvas:h,internalEventsEmitter:d,lerpAlpha:l,bboxAlpha:u,phonePresenceThreshold:w}=A,D=c?RunNNStepScarfTflite:RunNNStepScarfTfjs
|
|
3170
|
-
return[s?new GetRecordVideoFramesStep(h):new GetVideoFramesStep,new D({subpixel:E,gpuArgmax:o,cacheCanvas:g,batchSize:i,interpolateSize:a,nn:n,dataProvider:r,type:C,libInjector:B,internalEventsEmitter:d}),new
|
|
3171
|
-
case
|
|
3218
|
+
return[s?new GetRecordVideoFramesStep(h):new GetVideoFramesStep,new D({subpixel:E,gpuArgmax:o,cacheCanvas:g,batchSize:i,interpolateSize:a,nn:n,dataProvider:r,type:C,libInjector:B,internalEventsEmitter:d}),new xg({appearThreshold:t,disappearThreshold:I}),new FilterPhonePresenceStep(w),new JointsBasedSmoothingStep(B,l),new FilterHandsVisibilityStep,e,new Ir(u),new Yg]}(this.initParams,this.renderStep)
|
|
3219
|
+
case Lt:
|
|
3172
3220
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3173
3221
|
return function buildSneakersSteps(A,e){const{appearThreshold:t,batchSize:i,cacheCanvas:g,dataProvider:r,disableOpticalFlow:I,disappearThreshold:o,filterKeypointsForPnP:a,gpuArgmax:s,interpolateSize:B,isRecordVideoMode:n,libInjector:E,nn:C,reprojectionThreshold:c,requiredNumberOfKeypoints:h,segmentationSmoothMultiplier:d,subpixel:l,type:u,useKeypointsPresence:w,useTflite:D,webglCanvas:f,internalEventsEmitter:m}=A,p=D?RunNNStepSneakerTflite:RunNNStepSneakerTfjs
|
|
3174
|
-
return[n?new GetRecordVideoFramesStep(f):new GetVideoFramesStep,new p({subpixel:l,gpuArgmax:s,cacheCanvas:g,batchSize:i,interpolateSize:B,nn:C,dataProvider:r,type:u,libInjector:E,internalEventsEmitter:m}),...[I?[]:new
|
|
3175
|
-
case
|
|
3222
|
+
return[n?new GetRecordVideoFramesStep(f):new GetVideoFramesStep,new p({subpixel:l,gpuArgmax:s,cacheCanvas:g,batchSize:i,interpolateSize:B,nn:C,dataProvider:r,type:u,libInjector:E,internalEventsEmitter:m}),...[I?[]:new Mr({libInjector:E})].flat(),new Fr({segmentationSmoothMultiplier:d}),new xg({appearThreshold:t,disappearThreshold:o}),new Nr({nn:C,useKeypointsPresence:w,requiredNumberOfKeypoints:h,filterKeypointsForPnP:a,reprojectionThreshold:c,libInjector:E,internalEventsEmitter:m}),new Sr,e,new Yg]}(this.initParams,this.renderStep)
|
|
3223
|
+
case vt:
|
|
3176
3224
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3177
3225
|
return function buildWatchSteps(A,e){const{appearThreshold:t,batchSize:i,cacheCanvas:g,dataProvider:r,disableOpticalFlow:I,disappearThreshold:o,filterKeypointsForPnP:a,gpuArgmax:s,interpolateSize:B,isRecordVideoMode:n,libInjector:E,nn:C,reprojectionThreshold:c,requiredNumberOfKeypoints:h,subpixel:d,type:l,useKeypointsPresence:u,useTflite:w,webglCanvas:D,internalEventsEmitter:f}=A,m=w?RunNNStepWatchTflite:RunNNStepWatchTfjs
|
|
3178
|
-
return[n?new GetRecordVideoFramesStep(D):new GetVideoFramesStep,new m({subpixel:d,gpuArgmax:s,cacheCanvas:g,batchSize:i,interpolateSize:B,nn:C,dataProvider:r,type:l,libInjector:E,internalEventsEmitter:f}),...[I?[]:new
|
|
3179
|
-
default:throw new
|
|
3180
|
-
this.renderStep=new
|
|
3226
|
+
return[n?new GetRecordVideoFramesStep(D):new GetVideoFramesStep,new m({subpixel:d,gpuArgmax:s,cacheCanvas:g,batchSize:i,interpolateSize:B,nn:C,dataProvider:r,type:l,libInjector:E,internalEventsEmitter:f}),...[I?[]:new Mr({libInjector:E})].flat(),new xg({appearThreshold:t,disappearThreshold:o}),new Nr({nn:C,useKeypointsPresence:u,requiredNumberOfKeypoints:h,filterKeypointsForPnP:a,reprojectionThreshold:c,libInjector:E,internalEventsEmitter:f}),new Sr,e,new Yg]}(this.initParams,this.renderStep)
|
|
3227
|
+
default:throw new Ue(`Unknown model type: ${this.initParams.type}`)}}initRenderStep(){const{dataProvider:e,webglCanvas:t,cacheCanvas:i,segmentationThreshold:g,modelsCacheSize:r,logger:I,type:o,nn:a,meanLeft:s,meanRight:B,viewer3dSize:n,device:E,libInjector:C,modelsManager:c,datapackMetaManager:h,modelMetaManager:d,envMapResourceLoader:l,debug:u,fpsCounter:w,fpsLogger:D,internalEventsEmitter:f,enableDoubleClick:m,r2Loader:p,query:y}=this.initParams
|
|
3228
|
+
this.renderStep=new Hg({dataProvider:e,canvas:t,cacheCanvas:i,segmentationThreshold:g,modelsCacheSize:r,logger:I,type:o,nn:a,meanLeft:s,meanRight:B,viewer3dSize:n,libInjector:C,emitter:A,fpsCounter:w,fpsLogger:D,mode:this.mode,device:E,modelsManager:c,datapackMetaManager:h,modelMetaManager:d,envMapResourceLoader:l,internalEventsEmitter:f,debug:u,enableDoubleClick:m,r2Loader:p,query:y})}async reInit(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0
|
|
3181
3229
|
try{const{pipeline:e,renderStep:t}=this
|
|
3182
|
-
return this.mode===
|
|
3183
|
-
return(null===e||void 0===e?void 0:e.name)===
|
|
3184
|
-
throw t}}start(){
|
|
3185
|
-
this.mode===Mt?this.renderStep.start3dMode():this.pipeline.run().catch((e=>{A.logError(new Me("Pipeline failed.",{cause:e}))}))}async prepareMode(A){const{pipeline:e}=this
|
|
3230
|
+
return this.mode===kt&&e?await e.reInit(A):await t.reInit(A)}catch(t){if((A=>{var e=Ue.getRootCause(A),t=(null===e||void 0===e?void 0:e.message)||e||""
|
|
3231
|
+
return(null===e||void 0===e?void 0:e.name)===Gt||t.endsWith&&t.endsWith("HTTP failure status code: 0")})(t)&&e<5)return this.reInit(A,e+1)
|
|
3232
|
+
throw t}}start(){this.mode===Ut?this.renderStep.start3dMode():this.pipeline.run().catch((A=>{kr.handleError(new Ue("Pipeline failed.",{cause:A}))}))}async prepareMode(A){const{pipeline:e}=this
|
|
3186
3233
|
return await this.pause(),null===e||void 0===e||e.stop(),this.renderStep.realRenderStep.dispose(),this.renderStep=null,await this.init({...this.initParams,...A}),!0}stop(){this.pipeline&&(this.pipeline.stop(),this.pipeline=null),this.renderStep=null,this.initParams=null}async pause(){this.pipeline&&await this.pipeline.pause()}async showOnboarding(A){if(!this.renderStep)throw new Error("Render step has not been initialized yet")
|
|
3187
|
-
return this.renderStep.showOnboarding(A)}
|
|
3188
|
-
return this.
|
|
3234
|
+
return this.renderStep.showOnboarding(A)}async getGltfModels(){if(!this.renderStep)throw new Error("Render step has not been initialized yet")
|
|
3235
|
+
return this.renderStep.getGltfModels()}setGltfModel(A){let{id:e,gltf:t}=A
|
|
3236
|
+
if(!this.renderStep)throw new Error("Render step has not been initialized yet")
|
|
3237
|
+
this.renderStep.setGltfModel({id:e,gltf:t})}setStream(A){this.frame&&this.frame.setStream(A)}getDebugData(){let A={cameraResolution:this.frame?`${this.frame.width}x${this.frame.height}`:"",enableFrameRotation:this.enableFrameRotation}
|
|
3238
|
+
return this.frame&&(A={...A,...this.frame.getDebugData()}),this.pipeline&&(A={...A,...this.pipeline.getDebugData()}),A}},Ur=_r,Lr={current_network:{...{occlusion:mr,presenceChannels:[43,42],shinLineChannels:[44,45,46,47],shinLineErrorChannels:[48,49],numKeypoints:7,numSegmentations:4,segmentationExtract:"sigmoid",legSegmentationChannels:[14,15],shinSegmentationChannels:[16,17],h:160,w:160,keypoints:{left:[[.003437418571428541,.008509601428571434,.002596665714285712],[-.41033487142857145,.11493873142857142,-.029121094285714286],[.38472701857142855,-.16602557857142858,-.0630702742857143],[.26864875857142856,-.0302288485714286,.1308711957142857],[-.27453814142857147,.2351113014285714,-.029121094285714286],[-.24058894142857146,-.06417801857142857,.11187599571428572],[.26864875857142856,-.09812718857142858,-.12403139428571429]],right:[[-.003437418571428541,.008509601428571434,.002596665714285712],[.41033487142857145,.11493873142857142,-.029121094285714286],[-.38472701857142855,-.16602557857142858,-.0630702742857143],[-.26864875857142856,-.0302288485714286,.1308711957142857],[.27453814142857147,.2351113014285714,-.029121094285714286],[.24058894142857146,-.06417801857142857,.11187599571428572],[-.26864875857142856,-.09812718857142858,-.12403139428571429]]}},name:"current_network"}},vr={current_network:{...{occlusion:pr,presenceChannels:[67,66],numKeypoints:11,numSegmentations:2,h:96,w:160,keypoints:{left:[[-1.045245,3.374546,2.195376],[-1.014471,5.519645,.954189],[.938918,5.548434,.93742],[.962832,3.351265,2.208817],[.086582,4.56379,1.478994],[-1.027692,2.959061,-3.035946],[-.944437,1.312956,-2.274435],[.955185,1.309367,-2.278131],[.917633,2.814196,-3.141179],[-.01889,.425957,1.100461],[-.012251,6.066441,-1.870021]],right:[[1.045245,3.374546,2.195376],[1.014471,5.519645,.954189],[-.938918,5.548434,.93742],[-.962832,3.351265,2.208817],[-.086582,4.56379,1.478994],[1.027692,2.959061,-3.035946],[.944437,1.312956,-2.274435],[-.955185,1.309367,-2.278131],[-.917633,2.814196,-3.141179],[.01889,.425957,1.100461],[.012251,6.066441,-1.870021]]}},name:"current_network"}},Hr={current_network:{h:160,w:96,numSegmentations:29,name:"current_network"}},xr={current_network:{h:160,w:96,numSegmentations:31,name:"current_network"}},Yr={current_network:{h:160,w:96,numSegmentations:30,name:"current_network"}},Jr={[Kt]:Lr,[Pt]:vr,[Ot]:Hr,[zt]:xr,[jt]:Yr},config=(A,e)=>{const t=Jr[A]
|
|
3189
3239
|
if(!t)throw new Error(`No type network configs for "${A}" type`)
|
|
3190
3240
|
const i=t[e]
|
|
3191
3241
|
if(!i)throw new Error(`No network configs for "${e}" network name`)
|
|
3192
|
-
return i},
|
|
3193
|
-
const
|
|
3242
|
+
return i},Tr="Content-Type",Kr="application/wasm"
|
|
3243
|
+
const Pr=new class Wasm{wrapResponseWithValidContentType(A){if(A.headers.get(Tr)===Kr)return A
|
|
3194
3244
|
const e=new Headers(A.headers),{status:t,statusText:i}=A
|
|
3195
|
-
return e.set(
|
|
3245
|
+
return e.set(Tr,Kr),new Response(A.body,{headers:e,status:t,statusText:i})}instantiate(A,e){return A.then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,e)))}instantiateStreaming(A,e){const t=A.then((A=>[A.clone(),this.wrapResponseWithValidContentType(A)])),i=t.then((A=>{let[e,t]=A
|
|
3196
3246
|
return t}))
|
|
3197
3247
|
return WebAssembly.instantiateStreaming(i,e).catch((A=>{const i=t.then((A=>{let[e]=A
|
|
3198
3248
|
return e}))
|
|
3199
3249
|
return this.instantiate(i,e)}))}getInstantiateWasm(A,e){return(t,i)=>{const successCallback=A=>{let{instance:e,module:t}=A
|
|
3200
3250
|
return i(e,t)}
|
|
3201
3251
|
try{WebAssembly.instantiateStreaming?this.instantiateStreaming(A,t).then(successCallback).catch(e):WebAssembly.instantiate?this.instantiate(A,t).then(successCallback).catch(e):e(new Error("None of wasm instantiate methods is available."))}catch(A){e(A)}return{}}}initModule(A){let{initFunction:e,wasmFetchPromise:t,options:i={},moduleName:g=""}=A
|
|
3202
|
-
return t?new Promise(((A,r)=>{const wrappedReject=A=>r(new
|
|
3252
|
+
return t?new Promise(((A,r)=>{const wrappedReject=A=>r(new Ue(`Failed to init WASM module ${g}`,{cause:A}))
|
|
3203
3253
|
e({...i,instantiateWasm:this.getInstantiateWasm(t,wrappedReject)}).then(A).catch(wrappedReject)})):e()}},libraryLoader=(A,e)=>{let{libInjector:t,libraryName:i,mainBlob:g}=e
|
|
3204
3254
|
return i.indexOf("threaded")>=0?(async A=>{let{initFunction:e,libInjector:t,libraryName:i,mainBlob:g,workerFilename:r,wasmFetchPromise:I}=A
|
|
3205
3255
|
const[o,a]=await Promise.all([(s=g,new Promise(((A,e)=>{var t=new FileReader
|
|
@@ -3207,7 +3257,7 @@ t.onload=()=>A(t.result),t.onerror=()=>e(t.error),t.onabort=()=>e(new Error("Abo
|
|
|
3207
3257
|
var s
|
|
3208
3258
|
const B={mainScriptUrlOrBlob:o,locateFile:A=>A.endsWith(".worker.js")?a:A.endsWith(".wasm")&&I?"":t.getLibraryFileUrl(i,A)}
|
|
3209
3259
|
let n
|
|
3210
|
-
return n=I?
|
|
3260
|
+
return n=I?Pr.initModule({initFunction:e,wasmFetchPromise:I,options:B,moduleName:i}):e(B),n.finally((()=>{URL.revokeObjectURL(a)}))})({initFunction:A.default,libInjector:t,libraryName:i,mainBlob:g,wasmFetchPromise:t.getLibraryFile(i,`${i}.wasm`),workerFilename:`${i}.worker.js`}):Pr.initModule({initFunction:A.default,wasmFetchPromise:t.getLibraryFile(i,`${i}.wasm`),moduleName:i})}
|
|
3211
3261
|
function LibInjector_defineProperty(A,e,t){return(e=function LibInjector_toPropertyKey(A){var e=function LibInjector_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
3212
3262
|
var t=A[Symbol.toPrimitive]
|
|
3213
3263
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -3215,8 +3265,8 @@ if("object"!=typeof i)return i
|
|
|
3215
3265
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
3216
3266
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3217
3267
|
(A,"string")
|
|
3218
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
3219
|
-
class LibInjector{constructor(){LibInjector_defineProperty(this,"librariesPromises",{}),LibInjector_defineProperty(this,"preloadConfig",
|
|
3268
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const Or=getWindow(),getThreadedVersions=A=>[`${A}-threaded`,`${A}-threaded-simd`],getNonThreadedVersions=A=>[A,`${A}-simd`],getLibraryVersions=A=>[...getNonThreadedVersions(A),...getThreadedVersions(A)],getAdditionalLibraryFiles=A=>[`${A}.wasm`,A.indexOf("threaded")>=0&&`${A}.worker.js`].filter(Boolean),qr=[...getLibraryVersions("opencv"),...getLibraryVersions("tflite")]
|
|
3269
|
+
class LibInjector{constructor(){LibInjector_defineProperty(this,"librariesPromises",{}),LibInjector_defineProperty(this,"preloadConfig",qr.map((A=>({[A]:getAdditionalLibraryFiles(A)}))).reduce(Object.assign,{})),LibInjector_defineProperty(this,"preloadedFiles",{}),LibInjector_defineProperty(this,"importedLibs",qr),LibInjector_defineProperty(this,"customLoaders",qr.map((A=>({[A]:libraryLoader}))).reduce(Object.assign,{})),LibInjector_defineProperty(this,"libraryToGlobalName",{[Oi]:"wannaRender",tfjs:"tfjs",...qr.map((A=>({[A]:A}))).reduce(Object.assign,{})})}init(A){let{dataProvider:e,useLocalLibs:t,wasmConfig:i}=A
|
|
3220
3270
|
if(!e||void 0===t)throw new Error("Invalid arguments")
|
|
3221
3271
|
this.dataProvider=e,this.useLocalLibs=t,this._setupWasmConfig(i)}_setupWasmConfig(A){switch(A){case"simple":this.multiversionLibraryOptions={simd:!1,threads:!1}
|
|
3222
3272
|
break
|
|
@@ -3226,15 +3276,15 @@ case"threaded":this.multiversionLibraryOptions={simd:!1,threads:!0}
|
|
|
3226
3276
|
break
|
|
3227
3277
|
case"threaded-simd":this.multiversionLibraryOptions={simd:!0,threads:!0}}}async getInjectedLibrary(A,e){return this.librariesPromises[e]||(this.setupPreloadedFiles(e),this.librariesPromises[e]=this.importedLibs.includes(e)?this.importLibrary(A,e):this.loadLibrary(A,e)),this.librariesPromises[e].catch((A=>{throw delete this.librariesPromises[e],A})).finally((()=>{this.clearPreloadedFiles(e)}))}async importLibrary(A,e){let t,i
|
|
3228
3278
|
try{i=await getScriptBlob(A)
|
|
3229
|
-
const e=
|
|
3230
|
-
t=await(A=>import(A))(e).finally((()=>{
|
|
3231
|
-
try{t=await
|
|
3279
|
+
const e=Or.URL.createObjectURL(i)
|
|
3280
|
+
t=await(A=>import(A))(e).finally((()=>{Or.URL.revokeObjectURL(e)}))}catch(A){throw new Ue(`Failed to import script for "${e}"`,{cause:A})}return this.customLoaders[e]&&(t=await this.customLoaders[e](t,{libInjector:this,libraryName:e,mainBlob:i})),t}async loadLibrary(A,e){let t
|
|
3281
|
+
try{t=await Ft(A,{crossOrigin:!this.useLocalLibs,async:!0})}catch(A){throw new Ue(`Failed to inject script for "${e}"`,{cause:A})}let i=Or[e]
|
|
3232
3282
|
if(!i)throw new Error(`Failed to inject library "${e}"`)
|
|
3233
|
-
return delete
|
|
3283
|
+
return delete Or[e],this.customLoaders[e]&&(i=await this.customLoaders[e](i,{libInjector:this,libraryName:e,script:t})),t.remove(),i}getLocalUrl(A,e){return`./datapacks/${A}/${e}`}getDatapackUrl(A){try{return this.dataProvider.get_datapack_file_url("libs/"+A+"/"+A+".js")}catch(A){throw Number.isInteger(A)&&(A=new Error(this.dataProvider.get_exception_msg(A))),A}}getLibraryUrl(A,e){return this.useLocalLibs?this.getLocalUrl(A,`${A}.js`):this.getDatapackUrl(e)}getLibraryGlobalName(A){const e=this.libraryToGlobalName[A]
|
|
3234
3284
|
if(!e)throw new Error(`Failed to resolve global name for "${A}"`)
|
|
3235
3285
|
return e}getLibraryFileUrl(A,e){return this.useLocalLibs?this.getLocalUrl(A,e):this.getLibraryDatapackFileUrl(A,e)}getLibraryDatapackFileUrl(A,e){try{return this.dataProvider.get_datapack_file_url("libs/"+A+"/"+e)}catch(A){throw Number.isInteger(A)&&(A=new Error(this.dataProvider.get_exception_msg(A))),A}}async getLibraryFile(A,e){return this.preloadedFiles[A]||(this.preloadedFiles[A]={}),this.preloadedFiles[A][e]||(this.preloadedFiles[A][e]=customFetch(this.getLibraryFileUrl(A,e))),this.preloadedFiles[A][e].then((A=>{if(A.bodyUsed)throw new Error("Expected response to be used once.")
|
|
3236
3286
|
return A}))}setupPreloadedFiles(A){this.preloadConfig[A]&&this.preloadConfig[A].forEach((e=>{this.getLibraryFile(A,e)}))}clearPreloadedFiles(A){delete this.preloadedFiles[A]}async getLibrary(A){const e=this.getLibraryGlobalName(A),t=this.getLibraryUrl(A,e)
|
|
3237
|
-
return this.getInjectedLibrary(t,e)}async getRenderLibrary(){return this.getLibrary(
|
|
3287
|
+
return this.getInjectedLibrary(t,e)}async getRenderLibrary(){return this.getLibrary(Oi)}async getWasmSettings(){return this.multiversionLibraryOptions||(this.multiversionLibraryOptions=await(async()=>({simd:await isSimdAvailable(),threads:!1}))()),this.multiversionLibraryOptions}async getAvailableLibraryVersion(A,e){const{simd:t,threads:i}=e||this.multiversionLibraryOptions||await this.getWasmSettings()
|
|
3238
3288
|
return i&&(A+="-threaded"),t&&(A+="-simd"),{lib:await this.getLibrary(A),name:A,simd:t,threads:i}}async getOpenCv(A){const{lib:e,threads:t}=await this.getAvailableLibraryVersion("opencv",A)
|
|
3239
3289
|
return t&&e.setNumThreads(2),{cv:e}}async getTfLite(A){return await this.getAvailableLibraryVersion("tflite",A)}releaseLibrary(A){const e=Object.keys(this.librariesPromises).find((e=>e.startsWith(A)))
|
|
3240
3290
|
e&&delete this.librariesPromises[e]}}
|
|
@@ -3259,50 +3309,50 @@ if(e.has(A))return
|
|
|
3259
3309
|
i!==t.debugDiv&&i.classList.add("has-substeps")
|
|
3260
3310
|
const g=document.createElement("div"),r=document.createElement("span"),I=document.createElement("span")
|
|
3261
3311
|
"fps"===A&&I.classList.add("fps"),r.textContent=`${A}: `,g.appendChild(r),g.appendChild(I),i.appendChild(g),e.set(A,{wrapperElement:g,valueElement:I,tracker:new RunningMeanTracker(t.meanTrackerSize),substeps:new Map,emptyCount:0})})),ArInferenceDebugger_defineProperty(this,"updateLatencyHTML",(()=>{const A=this.fpsCounter.getFps()
|
|
3262
|
-
this.debugData.get("fps").customValue=A.toFixed(3),this.fillAdditionalData(),this.renderSteps(this.debugData)})),ArInferenceDebugger_defineProperty(this,"renderSteps",(A=>{for(let e of A.values())e.wrapperElement.style.display="block",e.valueElement.textContent=e.customValue??`${this.formatMs(e.tracker.avg)}ms`,e.substeps.size&&this.renderSteps(e.substeps)})),ArInferenceDebugger_defineProperty(this,"formatMs",(A=>(Math.floor(1e3*A)/1e3).toFixed(3))),this.pipeline=A,this.debugDiv=document.getElementById("debug"),this.fpsCounter=e,this.debugData=null,this.updateLatencyHTML=
|
|
3312
|
+
this.debugData.get("fps").customValue=A.toFixed(3),this.fillAdditionalData(),this.renderSteps(this.debugData)})),ArInferenceDebugger_defineProperty(this,"renderSteps",(A=>{for(let e of A.values())e.wrapperElement.style.display="block",e.valueElement.textContent=e.customValue??`${this.formatMs(e.tracker.avg)}ms`,e.substeps.size&&this.renderSteps(e.substeps)})),ArInferenceDebugger_defineProperty(this,"formatMs",(A=>(Math.floor(1e3*A)/1e3).toFixed(3))),this.pipeline=A,this.debugDiv=document.getElementById("debug"),this.fpsCounter=e,this.debugData=null,this.updateLatencyHTML=wt(this.updateLatencyHTML,1e3),this.getAdditionalData=i}fillAdditionalData(){const A=this.getAdditionalData(),e=this.debugData.get("additional")
|
|
3263
3313
|
e.customValue=" "
|
|
3264
|
-
for(let[t,i]of Object.entries(A))this.addStepMeasurement(t,e.substeps,e.wrapperElement),e.substeps.get(t).customValue=i}toggleDebugDiv(A){this.debugDiv&&(this.debugDiv.style.display=A===
|
|
3265
|
-
var g=new
|
|
3314
|
+
for(let[t,i]of Object.entries(A))this.addStepMeasurement(t,e.substeps,e.wrapperElement),e.substeps.get(t).customValue=i}toggleDebugDiv(A){this.debugDiv&&(this.debugDiv.style.display=A===_t?"block":"none")}}var zr={},jr=Uint8Array,Vr=Uint16Array,Wr=Int32Array,Zr=new jr([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Xr=new jr([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),$r=new jr([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(A,e){for(var t=new Vr(31),i=0;i<31;++i)t[i]=e+=1<<A[i-1]
|
|
3315
|
+
var g=new Wr(t[30])
|
|
3266
3316
|
for(i=1;i<30;++i)for(var r=t[i];r<t[i+1];++r)g[r]=r-t[i]<<5|i
|
|
3267
|
-
return{b:t,r:g}},
|
|
3268
|
-
|
|
3269
|
-
for(var
|
|
3270
|
-
|
|
3271
|
-
var I,o=new
|
|
3317
|
+
return{b:t,r:g}},AI=freb(Zr,2),eI=AI.b,tI=AI.r
|
|
3318
|
+
eI[28]=258,tI[258]=28
|
|
3319
|
+
for(var iI=freb(Xr,0),gI=iI.b,rI=(iI.r,new Vr(32768)),II=0;II<32768;++II){var oI=(43690&II)>>1|(21845&II)<<1
|
|
3320
|
+
oI=(61680&(oI=(52428&oI)>>2|(13107&oI)<<2))>>4|(3855&oI)<<4,rI[II]=((65280&oI)>>8|(255&oI)<<8)>>1}var hMap=function(A,e,t){for(var i=A.length,g=0,r=new Vr(e);g<i;++g)A[g]&&++r[A[g]-1]
|
|
3321
|
+
var I,o=new Vr(e)
|
|
3272
3322
|
for(g=1;g<e;++g)o[g]=o[g-1]+r[g-1]<<1
|
|
3273
|
-
if(t){I=new
|
|
3323
|
+
if(t){I=new Vr(1<<e)
|
|
3274
3324
|
var a=15-e
|
|
3275
|
-
for(g=0;g<i;++g)if(A[g])for(var s=g<<4|A[g],B=e-A[g],n=o[A[g]-1]++<<B,E=n|(1<<B)-1;n<=E;++n)I[
|
|
3276
|
-
return I}
|
|
3277
|
-
for(
|
|
3278
|
-
for(
|
|
3279
|
-
for(
|
|
3280
|
-
for(
|
|
3281
|
-
var
|
|
3282
|
-
for(
|
|
3283
|
-
var
|
|
3325
|
+
for(g=0;g<i;++g)if(A[g])for(var s=g<<4|A[g],B=e-A[g],n=o[A[g]-1]++<<B,E=n|(1<<B)-1;n<=E;++n)I[rI[n]>>a]=s}else for(I=new Vr(i),g=0;g<i;++g)A[g]&&(I[g]=rI[o[A[g]-1]++]>>15-A[g])
|
|
3326
|
+
return I},aI=new jr(288)
|
|
3327
|
+
for(II=0;II<144;++II)aI[II]=8
|
|
3328
|
+
for(II=144;II<256;++II)aI[II]=9
|
|
3329
|
+
for(II=256;II<280;++II)aI[II]=7
|
|
3330
|
+
for(II=280;II<288;++II)aI[II]=8
|
|
3331
|
+
var sI=new jr(32)
|
|
3332
|
+
for(II=0;II<32;++II)sI[II]=5
|
|
3333
|
+
var BI=hMap(aI,9,1),QI=hMap(sI,5,1),max=function(A){for(var e=A[0],t=1;t<A.length;++t)A[t]>e&&(e=A[t])
|
|
3284
3334
|
return e},bits=function(A,e,t){var i=e/8|0
|
|
3285
3335
|
return(A[i]|A[i+1]<<8)>>(7&e)&t},bits16=function(A,e){var t=e/8|0
|
|
3286
3336
|
return(A[t]|A[t+1]<<8|A[t+2]<<16)>>(7&e)},shft=function(A){return(A+7)/8|0},slc=function(A,e,t){(null==e||e<0)&&(e=0),(null==t||t>A.length)&&(t=A.length)
|
|
3287
|
-
var i=new
|
|
3288
|
-
return i.set(A.subarray(e,t)),i},
|
|
3337
|
+
var i=new jr(t-e)
|
|
3338
|
+
return i.set(A.subarray(e,t)),i},nI=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],err=function(A,e,t){var i=new Error(e||nI[A])
|
|
3289
3339
|
if(i.code=A,Error.captureStackTrace&&Error.captureStackTrace(i,err),!t)throw i
|
|
3290
3340
|
return i},inflt=function(A,e,t,i){var g=A.length,r=i?i.length:0
|
|
3291
|
-
if(!g||e.f&&!e.l)return t||new
|
|
3341
|
+
if(!g||e.f&&!e.l)return t||new jr(0)
|
|
3292
3342
|
var I=!t||2!=e.i,o=e.i
|
|
3293
|
-
t||(t=new
|
|
3343
|
+
t||(t=new jr(3*g))
|
|
3294
3344
|
var cbuf=function(A){var e=t.length
|
|
3295
|
-
if(A>e){var i=new
|
|
3345
|
+
if(A>e){var i=new jr(Math.max(2*e,A))
|
|
3296
3346
|
i.set(t),t=i}},a=e.f||0,s=e.p||0,B=e.b||0,n=e.l,E=e.d,C=e.m,c=e.n,h=8*g
|
|
3297
3347
|
do{if(!n){a=bits(A,s,1)
|
|
3298
3348
|
var d=bits(A,s+1,3)
|
|
3299
3349
|
if(s+=3,!d){var l=A[(G=shft(s)+4)-4]|A[G-3]<<8,u=G+l
|
|
3300
3350
|
if(u>g){o&&err(0)
|
|
3301
3351
|
break}I&&cbuf(B+l),t.set(A.subarray(G,u),B),e.b=B+=l,e.p=s=8*u,e.f=a
|
|
3302
|
-
continue}if(1==d)n=
|
|
3352
|
+
continue}if(1==d)n=BI,E=QI,C=9,c=5
|
|
3303
3353
|
else if(2==d){var w=bits(A,s,31)+257,D=bits(A,s+10,15)+4,f=w+bits(A,s+5,31)+1
|
|
3304
3354
|
s+=14
|
|
3305
|
-
for(var m=new
|
|
3355
|
+
for(var m=new jr(f),p=new jr(19),y=0;y<D;++y)p[$r[y]]=bits(A,s+3*y,7)
|
|
3306
3356
|
s+=3*D
|
|
3307
3357
|
var R=max(p),N=(1<<R)-1,S=hMap(p,R,1)
|
|
3308
3358
|
for(y=0;y<f;){var G,k=S[bits(A,s,N)]
|
|
@@ -3312,23 +3362,23 @@ for(16==G?(_=3+bits(A,s,3),s+=2,b=m[y-1]):17==G?(_=3+bits(A,s,7),s+=3):18==G&&(_
|
|
|
3312
3362
|
C=max(U),c=max(L),n=hMap(U,C,1),E=hMap(L,c,1)}else err(1)
|
|
3313
3363
|
if(s>h){o&&err(0)
|
|
3314
3364
|
break}}I&&cbuf(B+131072)
|
|
3315
|
-
for(var
|
|
3365
|
+
for(var v=(1<<C)-1,H=(1<<c)-1,x=s;;x=s){var Y=(b=n[bits16(A,s)&v])>>4
|
|
3316
3366
|
if((s+=15&b)>h){o&&err(0)
|
|
3317
3367
|
break}if(b||err(2),Y<256)t[B++]=Y
|
|
3318
3368
|
else{if(256==Y){x=s,n=null
|
|
3319
3369
|
break}var J=Y-254
|
|
3320
|
-
if(Y>264){var T=
|
|
3321
|
-
J=bits(A,s,(1<<T)-1)+
|
|
3370
|
+
if(Y>264){var T=Zr[y=Y-257]
|
|
3371
|
+
J=bits(A,s,(1<<T)-1)+eI[y],s+=T}var K=E[bits16(A,s)&H],P=K>>4
|
|
3322
3372
|
K||err(3),s+=15&K
|
|
3323
|
-
L=
|
|
3324
|
-
if(P>3){T=
|
|
3373
|
+
L=gI[P]
|
|
3374
|
+
if(P>3){T=Xr[P]
|
|
3325
3375
|
L+=bits16(A,s)&(1<<T)-1,s+=T}if(s>h){o&&err(0)
|
|
3326
3376
|
break}I&&cbuf(B+131072)
|
|
3327
3377
|
var O=B+J
|
|
3328
3378
|
if(B<L){var q=r-L,z=Math.min(L,O)
|
|
3329
3379
|
for(q+B<0&&err(3);B<z;++B)t[B]=i[q+B]}for(;B<O;B+=4)t[B]=t[B-L],t[B+1]=t[B+1-L],t[B+2]=t[B+2-L],t[B+3]=t[B+3-L]
|
|
3330
3380
|
B=O}}e.l=n,e.p=x,e.b=B,e.f=a,n&&(a=1,e.m=C,e.d=E,e.n=c)}while(!a)
|
|
3331
|
-
return B==t.length?t:slc(t,0,B)},
|
|
3381
|
+
return B==t.length?t:slc(t,0,B)},EI=new jr(0),mrg=function(A,e){var t={}
|
|
3332
3382
|
for(var i in A)t[i]=A[i]
|
|
3333
3383
|
for(var i in e)t[i]=e[i]
|
|
3334
3384
|
return t},wcln=function(A,e,t){for(var i=A(),g=A.toString(),r=g.slice(g.indexOf("[")+1,g.lastIndexOf("]")).replace(/\s+/g,"").split(","),I=0;I<i.length;++I){var o=i[I],a=r[I]
|
|
@@ -3336,30 +3386,30 @@ if("function"==typeof o){e+=";"+a+"="
|
|
|
3336
3386
|
var s=o.toString()
|
|
3337
3387
|
if(o.prototype)if(-1!=s.indexOf("[native code]")){var B=s.indexOf(" ",8)+1
|
|
3338
3388
|
e+=s.slice(B,s.indexOf("(",B))}else for(var n in e+=s,o.prototype)e+=";"+a+".prototype."+n+"="+o.prototype[n].toString()
|
|
3339
|
-
else e+=s}else t[a]=o}return e},
|
|
3340
|
-
|
|
3341
|
-
return function(A,e,t,i,g){var r=new Worker(
|
|
3389
|
+
else e+=s}else t[a]=o}return e},CI=[],wrkr=function(A,e,t,i){if(!CI[t]){for(var g="",r={},I=A.length-1,o=0;o<I;++o)g=wcln(A[o],g,r)
|
|
3390
|
+
CI[t]={c:wcln(A[I],g,r),e:r}}var a=mrg({},CI[t].e)
|
|
3391
|
+
return function(A,e,t,i,g){var r=new Worker(zr[e]||(zr[e]=URL.createObjectURL(new Blob([A+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))))
|
|
3342
3392
|
return r.onmessage=function(A){var e=A.data,t=e.$e$
|
|
3343
3393
|
if(t){var i=new Error(t[0])
|
|
3344
|
-
i.code=t[1],i.stack=t[2],g(i,null)}else g(null,e)},r.postMessage(t,i),r}(
|
|
3394
|
+
i.code=t[1],i.stack=t[2],g(i,null)}else g(null,e)},r.postMessage(t,i),r}(CI[t].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+e.toString()+"}",t,a,function(A){var e=[]
|
|
3345
3395
|
for(var t in A)A[t].buffer&&e.push((A[t]=new A[t].constructor(A[t])).buffer)
|
|
3346
|
-
return e}(a),i)},bInflt=function(){return[
|
|
3396
|
+
return e}(a),i)},bInflt=function(){return[jr,Vr,Wr,Zr,Xr,$r,eI,gI,BI,QI,rI,nI,hMap,max,bits,bits16,shft,slc,err,inflt,inflateSync,pbf,gopt]},pbf=function(A){return postMessage(A,[A.buffer])},gopt=function(A){return A&&{out:A.size&&new jr(A.size),dictionary:A.dictionary}},cbify=function(A,e,t,i,g,r){var I=wrkr(t,i,g,(function(A,e){I.terminate(),r(A,e)}))
|
|
3347
3397
|
return I.postMessage([A,e],e.consume?[A.buffer]:[]),function(){I.terminate()}},b2=function(A,e){return A[e]|A[e+1]<<8},b4=function(A,e){return(A[e]|A[e+1]<<8|A[e+2]<<16|A[e+3]<<24)>>>0},b8=function(A,e){return b4(A,e)+4294967296*b4(A,e+4)}
|
|
3348
|
-
function inflate(A,e,t){return t||(t=e,e={}),"function"!=typeof t&&err(7),cbify(A,e,[bInflt],(function(A){return pbf(inflateSync(A.data[0],gopt(A.data[1])))}),1,t)}function inflateSync(A,e){return inflt(A,{i:2},e&&e.out,e&&e.dictionary)}var
|
|
3349
|
-
try{
|
|
3398
|
+
function inflate(A,e,t){return t||(t=e,e={}),"function"!=typeof t&&err(7),cbify(A,e,[bInflt],(function(A){return pbf(inflateSync(A.data[0],gopt(A.data[1])))}),1,t)}function inflateSync(A,e){return inflt(A,{i:2},e&&e.out,e&&e.dictionary)}var cI="undefined"!=typeof TextDecoder&&new TextDecoder
|
|
3399
|
+
try{cI.decode(EI,{stream:!0}),1}catch(A){}var dutf8=function(A){for(var e="",t=0;;){var i=A[t++],g=(i>127)+(i>223)+(i>239)
|
|
3350
3400
|
if(t+g>A.length)return{s:e,r:slc(A,t-1)}
|
|
3351
3401
|
g?3==g?(i=((15&i)<<18|(63&A[t++])<<12|(63&A[t++])<<6|63&A[t++])-65536,e+=String.fromCharCode(55296|i>>10,56320|1023&i)):e+=1&g?String.fromCharCode((31&i)<<6|63&A[t++]):String.fromCharCode((15&i)<<12|(63&A[t++])<<6|63&A[t++]):e+=String.fromCharCode(i)}}
|
|
3352
3402
|
function strFromU8(A,e){if(e){for(var t="",i=0;i<A.length;i+=16384)t+=String.fromCharCode.apply(null,A.subarray(i,i+16384))
|
|
3353
|
-
return t}if(
|
|
3403
|
+
return t}if(cI)return cI.decode(A)
|
|
3354
3404
|
var g=dutf8(A),r=g.s
|
|
3355
3405
|
return(t=g.r).length&&err(8),r}var slzh=function(A,e){return e+30+b2(A,e+26)+b2(A,e+28)},zh=function(A,e,t){var i=b2(A,e+28),g=strFromU8(A.subarray(e+46,e+46+i),!(2048&b2(A,e+8))),r=e+46+i,I=b4(A,e+20),o=t&&4294967295==I?z64e(A,r):[I,b4(A,e+24),b4(A,e+42)],a=o[0],s=o[1],B=o[2]
|
|
3356
3406
|
return[b2(A,e+10),a,s,g,r+b2(A,e+30)+b2(A,e+32),B]},z64e=function(A,e){for(;1!=b2(A,e);e+=4+b2(A,e+2));return[b8(A,e+12),b8(A,e+4),b8(A,e+20)]}
|
|
3357
|
-
var
|
|
3407
|
+
var hI="function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout?setTimeout:function(A){A()}
|
|
3358
3408
|
|
|
3359
3409
|
;// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3360
3410
|
async function fetchWithProgress(A,e){const t=await customFetch(A)
|
|
3361
|
-
if(!t.ok)throw new
|
|
3362
|
-
if(!t.body)throw new
|
|
3411
|
+
if(!t.ok)throw new Ue(`Received not ok response from url '${A}', status ${t.status}: ${t.statusText}`)
|
|
3412
|
+
if(!t.body)throw new Ue(`Received response without a body from url '${A}'`)
|
|
3363
3413
|
const i=t.body.getReader(),g=t.headers.get("Content-Length"),r=g?+g:1/0
|
|
3364
3414
|
let I=0
|
|
3365
3415
|
const o=[]
|
|
@@ -3371,11 +3421,11 @@ let s=0
|
|
|
3371
3421
|
for(let A of o)a.set(A,s),s+=A.length
|
|
3372
3422
|
return a}
|
|
3373
3423
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3374
|
-
function noopOnProgress(){}const
|
|
3424
|
+
function noopOnProgress(){}const dI=class ZipModelLoader{constructor(A,e){this.modelUrl=A,this.onprogress=e,this.loaded=!1,this.modelFiles={},this.rmdesc=null,this.loadingStartTime=0,this.loadingFinishTime=0,this.loadingPromise=this.initLoading()}get_model_files(){return this.modelFiles}async initLoading(){this.loadingStartTime=performance.now()
|
|
3375
3425
|
const A=await fetchWithProgress(this.modelUrl,this.onprogress??noopOnProgress)
|
|
3376
3426
|
return await this.unzip(A),this.loaded=!0,this.loadingFinishTime=performance.now(),this.loadingFinishTime-this.loadingStartTime}async unzip(A){return new Promise((e=>{!function unzip(A,e,t){t||(t=e,e={}),"function"!=typeof t&&err(7)
|
|
3377
|
-
var i=[],tAll=function(){for(var A=0;A<i.length;++A)i[A]()},g={},cbd=function(A,e){
|
|
3378
|
-
|
|
3427
|
+
var i=[],tAll=function(){for(var A=0;A<i.length;++A)i[A]()},g={},cbd=function(A,e){hI((function(){t(A,e)}))}
|
|
3428
|
+
hI((function(){cbd=t}))
|
|
3379
3429
|
for(var r=A.length-22;101010256!=b4(A,r);--r)if(!r||A.length-r>65558)return cbd(err(13,0,1),null),tAll
|
|
3380
3430
|
var I=b2(A,r+8)
|
|
3381
3431
|
if(I){var o=I,a=b4(A,r+16),s=4294967295==a||65535==o
|
|
@@ -3383,12 +3433,12 @@ if(s){var B=b4(A,r-12);(s=101075792==b4(A,B))&&(o=I=b4(A,B+32),a=b4(A,B+48))}for
|
|
|
3383
3433
|
a=C
|
|
3384
3434
|
var cbl=function(A,e){A?(tAll(),cbd(A,null)):(e&&(g[E]=e),--I||cbd(null,g))}
|
|
3385
3435
|
if(!n||n({name:E,size:o,originalSize:B,compression:r}))if(r)if(8==r){var d=A.subarray(h,h+o)
|
|
3386
|
-
if(o<32e4)try{cbl(null,inflateSync(d,{out:new
|
|
3436
|
+
if(o<32e4)try{cbl(null,inflateSync(d,{out:new jr(B)}))}catch(A){cbl(A,null)}else i.push(inflate(d,{size:B},cbl))}else cbl(err(14,"unknown compression type "+r,1),null)
|
|
3387
3437
|
else cbl(null,slc(A,h,h+o))
|
|
3388
3438
|
else cbl(null,null)},E=0;E<o;++E)_loop_3()}else cbd(null,{})
|
|
3389
|
-
return tAll}(A,((A,t)=>{if(A)throw new
|
|
3390
|
-
Object.keys(t).forEach((A=>{A.endsWith(".rmdesc")?this.rmdesc=new RMDesc(JSON.parse(strFromU8(t[A]))):this.modelFiles[A]=new Int8Array(t[A].buffer)})),e()}))}))}is_loaded(){return this.loaded}wait_for_load(){return this.loadingPromise}get_rmdesc(){if(!this.rmdesc)throw new
|
|
3391
|
-
return this.rmdesc}get_raw_rmdesc(){if(!this.rmdesc)throw new
|
|
3439
|
+
return tAll}(A,((A,t)=>{if(A)throw new Ue("Failed to unzip model",{cause:A})
|
|
3440
|
+
Object.keys(t).forEach((A=>{A.endsWith(".rmdesc")?this.rmdesc=new RMDesc(JSON.parse(strFromU8(t[A]))):this.modelFiles[A]=new Int8Array(t[A].buffer)})),e()}))}))}is_loaded(){return this.loaded}wait_for_load(){return this.loadingPromise}get_rmdesc(){if(!this.rmdesc)throw new Ue("No .rmdesc file in model archive")
|
|
3441
|
+
return this.rmdesc}get_raw_rmdesc(){if(!this.rmdesc)throw new Ue("No .rmdesc file in model archive")
|
|
3392
3442
|
return this.rmdesc.get_raw()}get_model_file(A){return this.modelFiles[A]}getLoadingStartTime(){return this.loadingStartTime}getLoadingFinishTime(){return this.loadingFinishTime}}
|
|
3393
3443
|
|
|
3394
3444
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
@@ -3396,73 +3446,73 @@ class Layout3ModelLoader{constructor(A,e){this.meta=A,this.onprogress=e,this.loa
|
|
|
3396
3446
|
const A=sum(this.meta.assets.map((A=>A.size))),e=Array(this.meta.assets.length).fill(0),onAssetProgress=(t,i)=>{var g
|
|
3397
3447
|
e[t]=this.meta.assets[t].size*(i/100),null===(g=this.onprogress)||void 0===g||g.call(this,Math.round(sum(e)/A*100))}
|
|
3398
3448
|
return await Promise.all(this.meta.assets.map(((A,e)=>fetchWithProgress(A.uri,(A=>onAssetProgress(e,A))).then((e=>{this.modelFiles[A.name]=e}))))),Object.entries(this.meta.models).forEach((A=>{let[e,t]=A
|
|
3399
|
-
this.modelFiles[e]=(new TextEncoder).encode(JSON.stringify(t))})),this.loaded=!0,this.loadingFinishTime=performance.now(),this.loadingFinishTime-this.loadingStartTime}}const
|
|
3449
|
+
this.modelFiles[e]=(new TextEncoder).encode(JSON.stringify(t))})),this.loaded=!0,this.loadingFinishTime=performance.now(),this.loadingFinishTime-this.loadingStartTime}}const lI=
|
|
3400
3450
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3401
3451
|
class ModelsManager{constructor(A){let{modelsCacheSize:e,datapackMetaManager:t,modelMetaManager:i,logger:g,type:r,mode:I}=A
|
|
3402
|
-
this.logger=g,this.modelType=r,this.mode=I,this.modelMetaManager=i,this.datapackMetaManager=t,this.loadersCache=new
|
|
3403
|
-
switch(g){case
|
|
3452
|
+
this.logger=g,this.modelType=r,this.mode=I,this.modelMetaManager=i,this.datapackMetaManager=t,this.loadersCache=new xi({size:e,removeOnError:!0})}async createResourceLoader(A){let e,t,{id:i,type:g}=A
|
|
3453
|
+
switch(g){case ki:e=new dI(i)
|
|
3404
3454
|
break
|
|
3405
|
-
case
|
|
3455
|
+
case Gi:t=await this.modelMetaManager.getMeta(i),emit(o,{id:i,type:yt,progress:0}),e=new Layout3ModelLoader(t,(A=>{emit(o,{id:i,type:yt,progress:A})})),this.logger.logEvent("log_tech_download_start",i)
|
|
3406
3456
|
break
|
|
3407
|
-
default:throw new
|
|
3457
|
+
default:throw new Ue(`Unexpected resource type: ${g}`)}return e.wait_for_load(),e}ensureModelLoader(A){let{id:e,type:t}=A
|
|
3408
3458
|
const i=`${e}_${this.mode}`
|
|
3409
3459
|
if(!this.loadersCache.exists(i)){const A=this.createResourceLoader({id:e,type:t})
|
|
3410
3460
|
return this.loadersCache.addItem(i,A),!1}return!0}getItem(A,e){const t=`${A}_${this.mode}`
|
|
3411
|
-
return this.loadersCache.getItem(t,e)}},
|
|
3412
|
-
var
|
|
3413
|
-
!function(A){A[A.Idle=0]="Idle",A[A.InProgress=1]="InProgress"}(
|
|
3461
|
+
return this.loadersCache.getItem(t,e)}},uI=.01,wI=.1,DI=.5
|
|
3462
|
+
var fI
|
|
3463
|
+
!function(A){A[A.Idle=0]="Idle",A[A.InProgress=1]="InProgress"}(fI||(fI={}))
|
|
3414
3464
|
class FpsCounter{constructor(){let{debug:A=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3415
|
-
this.debug=A,this.fpsSpreading=[],this.frames=[],this.intervalId=null,this.sessionStatus=
|
|
3465
|
+
this.debug=A,this.fpsSpreading=[],this.frames=[],this.intervalId=null,this.sessionStatus=fI.Idle,this.sessionFrameCounter=0,this.sessionTime=0,this.fps=0}logDebugFps(A){this.debug&&emit(aA,{viewerDebug:{fps:A}})}resetFps(){this.fpsSpreading=[]}calcFps(){if(this.frames.length<2)return this.frames=[],void(this.fps=0)
|
|
3416
3466
|
const A=(this.frames[0]-this.frames[this.frames.length-1])/1e3,e=this.frames.length-1,t=A?e/A:0
|
|
3417
|
-
this.fps=Math.round(1e3*t)/1e3,0!==this.fps?(this.fpsSpreading.push(this.fps),this.logDebugFps(this.fps),this.sessionTime+=this.sessionStatus===
|
|
3418
|
-
this.sessionStatus===
|
|
3419
|
-
return{p01Fps:A[e]??0,p10Fps:A[t]??0,p50Fps:A[i]??0,sessionFps:this.sessionTime?this.sessionFrameCounter/this.sessionTime:0,sessionTime:this.sessionTime}}}const LowerPowerModeDetector_isLowPowerModeEnabled=()=>
|
|
3467
|
+
this.fps=Math.round(1e3*t)/1e3,0!==this.fps?(this.fpsSpreading.push(this.fps),this.logDebugFps(this.fps),this.sessionTime+=this.sessionStatus===fI.InProgress?A:0,this.frames=[this.frames[0]]):this.frames=[]}startCalcFps(){this.intervalId||(this.intervalId=setInterval((()=>{this.calcFps()}),400))}initCalcSessionFps(){this.sessionStatus=fI.InProgress}tick(){if(this.frames.unshift(performance.now()),!this.intervalId)return this.startCalcFps()
|
|
3468
|
+
this.sessionStatus===fI.InProgress&&this.sessionFrameCounter++}getFps(){return this.fps}getStat(){const A=this.fpsSpreading.sort(((A,e)=>A-e)),e=Math.floor(A.length*uI),t=Math.floor(A.length*wI),i=Math.floor(A.length*DI)
|
|
3469
|
+
return{p01Fps:A[e]??0,p10Fps:A[t]??0,p50Fps:A[i]??0,sessionFps:this.sessionTime?this.sessionFrameCounter/this.sessionTime:0,sessionTime:this.sessionTime}}}const LowerPowerModeDetector_isLowPowerModeEnabled=()=>Et?async function detectLowPowerModeIOS(){const A=document.createElement("video")
|
|
3420
3470
|
A.src="data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAC721kYXQhEAUgpBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBSCkG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAsJtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAALwABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAB7HRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAALwAAAAAAAAAAAAAAAQEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAC8AAAAAAAEAAAAAAWRtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAAKxEAAAIAFXEAAAAAAAtaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAFNvdW5kSGFuZGxlcgAAAAEPbWluZgAAABBzbWhkAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAADTc3RibAAAAGdzdHNkAAAAAAAAAAEAAABXbXA0YQAAAAAAAAABAAAAAAAAAAAAAgAQAAAAAKxEAAAAAAAzZXNkcwAAAAADgICAIgACAASAgIAUQBUAAAAAAfQAAAHz+QWAgIACEhAGgICAAQIAAAAYc3R0cwAAAAAAAAABAAAAAgAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAAAAAAAAIAAAFzAAABdAAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRhdGEAAAABAAAAAExhdmY1Ni40MC4xMDE=",A.muted=!0,A.playsInline=!0
|
|
3421
3471
|
try{return await A.play(),!1}catch(A){return!0}finally{A.src=""}}():Promise.resolve(!1)
|
|
3422
|
-
const
|
|
3472
|
+
const mI=
|
|
3423
3473
|
// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3424
3474
|
class Logger{constructor(){this.delayedErrors=[],this.delayedEvents=[],this.requestsList=[]}init(A){let{wasmLogger:e,debug:t}=A
|
|
3425
3475
|
this.wasmLogger=e,this.debug=t,this.delayedErrors.forEach((A=>{setTimeout((()=>{this.logErrorObject(A)}))})),this.delayedErrors=[],this.delayedEvents.forEach((A=>{setTimeout((()=>{this.logEvent(A.eventFnName,...A.params)}))})),this.delayedEvents=[]}appendLoggingData(A){this.wasmLogger.append_logging_data(A)}appendModelLoggingData(A,e){this.wasmLogger.append_model_logging_data(A,e)}logEvent(A){try{for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
3426
3476
|
if(!this.wasmLogger)return void this.delayedEvents.push({eventFnName:A,params:t})
|
|
3427
|
-
if(!this.wasmLogger[A])throw new
|
|
3428
|
-
this.addRequest(this.wasmLogger[A](...t).catch((e=>{throw new
|
|
3477
|
+
if(!this.wasmLogger[A])throw new Ue(`Event ${A} is not found`)
|
|
3478
|
+
this.addRequest(this.wasmLogger[A](...t).catch((e=>{throw new Ue(`Failed to log event ${A}.`,{cause:e})})))}catch(A){this.debug&&console.error(A),this.logError(A)}}logError(A){this.logErrorObject(Ue.toObject(A))}logErrorObject(A){try{if(A.name===oi)return void this.logEvent("log_camera_access_denied")
|
|
3429
3479
|
if(!this.wasmLogger)return void this.delayedErrors.push(A)
|
|
3430
|
-
const e=A.stack||`${A.name}: ${A.message}`,t=A.errorId
|
|
3431
|
-
this.debug&&(console.error("----------logging-error:",t),console.error(e),console.error("-----------error-params:",i),console.error("------------------------")),this.addRequest(this.wasmLogger.log_error(e,t,i).catch((A=>{throw new
|
|
3480
|
+
const e=A.stack||`${A.name}: ${A.message}`,t=A.errorId,i=A.params||{}
|
|
3481
|
+
this.debug&&(console.error("----------logging-error:",t),console.error(e),console.error("-----------error-params:",i),console.error("------------------------")),this.addRequest(this.wasmLogger.log_error(e,t,i).catch((A=>{throw new Ue(`Failed to log error id=${t}.`,{cause:A})})))}catch(A){this.debug&&console.error(A)}}async waitForAllLogsSent(){return new Promise((A=>{if(0===this.requestsList.length)return A()
|
|
3432
3482
|
this.resolveWaitingForAllLogs=A}))}isReady(){return void 0!==this.wasmLogger}addRequest(A){this.resolveWaitingForAllLogs||(this.requestsList.push(A),A.catch((A=>{console.error(A)})).finally((()=>this.removeRequest(A))))}removeRequest(A){const e=this.requestsList.indexOf(A)
|
|
3433
3483
|
this.requestsList.splice(e,1),0===this.requestsList.length&&this.resolveWaitingForAllLogs&&(this.resolveWaitingForAllLogs(),this.resolveWaitingForAllLogs=void 0)}}
|
|
3434
3484
|
class Debugger{constructor(A){let{enabled:e,dataProvider:t}=A
|
|
3435
3485
|
this.enabled=!1,this.enabled=e,this.dataProvider=t}handleDebug(A){if(this.enabled&&"datapack_info"===A){let A
|
|
3436
|
-
try{A=this.dataProvider.get_datapack_file_url(".info")}catch(A){return console.error(".info file not found in datapack"),!0}return customFetch(A).then((A=>A.text())).then((A=>{console.log(A)})).catch((A=>{console.error("Failed to fetch info file",A)})),!0}return!1}}var
|
|
3437
|
-
!function(A){A[A.NotStarted=0]="NotStarted",A[A.Idle=1]="Idle",A[A.InProgress=2]="InProgress"}(
|
|
3486
|
+
try{A=this.dataProvider.get_datapack_file_url(".info")}catch(A){return console.error(".info file not found in datapack"),!0}return customFetch(A).then((A=>A.text())).then((A=>{console.log(A)})).catch((A=>{console.error("Failed to fetch info file",A)})),!0}return!1}}var pI
|
|
3487
|
+
!function(A){A[A.NotStarted=0]="NotStarted",A[A.Idle=1]="Idle",A[A.InProgress=2]="InProgress"}(pI||(pI={}))
|
|
3438
3488
|
class FpsLogger{constructor(A){let{logger:e,fpsCounter:t,debug:i=!1}=A
|
|
3439
|
-
this.debug=i,this.logger=e,this.fpsCounter=t,this.fpsLogStatus=
|
|
3440
|
-
this.debug&&console.log(`[${this.constructor.name}] p1: ${A}fps; p10: ${e}fps; p50: ${t}fps;\n session: ${i}fps; session time: ${g}sec;`),A&&e&&t&&i&&this.logger.logEvent("log_measure_fps",{p1:A,p10:e,p50:t,session_fps:i,session_time:g}),this.startNewFpsInterval()}setLogFpsInterval(){this.intervalId=Number(setInterval((()=>{this.logFps()}),3e4))}initLogFps(){this.fpsLogStatus!==
|
|
3489
|
+
this.debug=i,this.logger=e,this.fpsCounter=t,this.fpsLogStatus=pI.NotStarted,this.intervalId=null,window.addEventListener("visibilitychange",(()=>{document.hidden?this.pauseInterval():this.fpsLogStatus===pI.Idle&&this.initLogFps()}))}pauseInterval(){this.intervalId&&(clearInterval(this.intervalId),this.fpsLogStatus=pI.Idle,this.intervalId=null)}startNewFpsInterval(){this.fpsCounter.resetFps()}logFps(){const{p01Fps:A,p10Fps:e,p50Fps:t,sessionFps:i,sessionTime:g}=this.fpsCounter.getStat()
|
|
3490
|
+
this.debug&&console.log(`[${this.constructor.name}] p1: ${A}fps; p10: ${e}fps; p50: ${t}fps;\n session: ${i}fps; session time: ${g}sec;`),A&&e&&t&&i&&this.logger.logEvent("log_measure_fps",{p1:A,p10:e,p50:t,session_fps:i,session_time:g}),this.startNewFpsInterval()}setLogFpsInterval(){this.intervalId=Number(setInterval((()=>{this.logFps()}),3e4))}initLogFps(){this.fpsLogStatus!==pI.InProgress&&(this.fpsLogStatus=pI.InProgress,this.startNewFpsInterval(),this.setLogFpsInterval())}}
|
|
3441
3491
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3442
3492
|
class ModelMeta{constructor(A){const e=JSON.parse(A)
|
|
3443
3493
|
this.assets=e.assets,this.models=e.models,this.rmdesc=new RMDesc(e.rmdesc),this.inlineDatapackEntries=e.datapack.filter(this.isInlineDatapackEntry),this.uriDatapackEntries=e.datapack.filter(this.isUriDatapackEntry)}findInlineDatapackEntryByLabel(A){return this.inlineDatapackEntries.find((e=>e.label===A))??null}findInlineDatapackEntryByName(A){return this.inlineDatapackEntries.find((e=>e.name===A))??null}findUriDatapackEntryByLabel(A){return this.uriDatapackEntries.find((e=>e.label===A))??null}findUriDatapackEntryByName(A){return this.uriDatapackEntries.find((e=>e.name===A))??null}getUriDatapackEntryByName(A){const e=this.findUriDatapackEntryByName(A)
|
|
3444
|
-
if(!e)throw new
|
|
3494
|
+
if(!e)throw new Ue(`Model datapack entry with name '${A}' not found.`)
|
|
3445
3495
|
return e}isUriDatapackEntry(A){return"uri"in A}isInlineDatapackEntry(A){return"content"in A}}
|
|
3446
3496
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3447
|
-
class ModelMetaManager{constructor(A,e){this.dataProvider=A,this.mode=e,this.cache=new
|
|
3497
|
+
class ModelMetaManager{constructor(A,e){this.dataProvider=A,this.mode=e,this.cache=new xi({size:10,removeOnError:!0})}async getMeta(A){const e=`${A}_${this.mode}`
|
|
3448
3498
|
return this.cache.exists(e)||this.cache.addItem(e,this.loadMeta(A)),await this.cache.getItem(e)}async loadMeta(A){try{const e=await this.dataProvider.get_model_meta(A)
|
|
3449
3499
|
return new ModelMeta(e)}catch(e){let t=e
|
|
3450
|
-
throw Number.isInteger(e)&&(t=new Error(this.dataProvider.get_exception_msg(e))),new
|
|
3500
|
+
throw Number.isInteger(e)&&(t=new Error(this.dataProvider.get_exception_msg(e))),new Ue(`Failed to get url for model '${A}'.`,{cause:t})}}}
|
|
3451
3501
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3452
3502
|
class DatapackMetaManager{constructor(A){this.dataProvider=A}getFileUrl(A){try{const e=this.dataProvider.get_datapack_file_url(A)
|
|
3453
|
-
if(!e)throw new
|
|
3503
|
+
if(!e)throw new Ue(`File '${A}' not found in datapack.`)
|
|
3454
3504
|
return e}catch(A){throw Number.isInteger(A)&&(A=new Error(this.dataProvider.get_exception_msg(A))),A}}}
|
|
3455
3505
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3456
|
-
class EnvMapResourcesLoader{constructor(A,e,t){this.datapackMetaManager=A,this.modelMetaManager=e,this.useTestEnvMap=t,this.RESOURCE_KEY="envMap",this.resourceManager=new
|
|
3457
|
-
return{data:{id:g.getId(),dfgLut:r,ldCubeDiffuse:I,ldCubeGgx:o},wasInCache:g.cacheHit,loadingStartTime:i,loadingFinishTime:a}}catch(e){throw new
|
|
3506
|
+
class EnvMapResourcesLoader{constructor(A,e,t){this.datapackMetaManager=A,this.modelMetaManager=e,this.useTestEnvMap=t,this.RESOURCE_KEY="envMap",this.resourceManager=new Ti({cacheStrategies:{[this.RESOURCE_KEY]:{name:Ti.CACHE_LRU,size:7}}})}async load(A){try{const e=await this.modelMetaManager.getMeta(A),t=[...this.getDatapackResourceFiles(),...this.getModelResourceFiles(e)],i=performance.now(),g=this.resourceManager.getLoader(this.RESOURCE_KEY,t),[r,I,o]=await g.load(),a=performance.now()
|
|
3507
|
+
return{data:{id:g.getId(),dfgLut:r,ldCubeDiffuse:I,ldCubeGgx:o},wasInCache:g.cacheHit,loadingStartTime:i,loadingFinishTime:a}}catch(e){throw new Ue(`Failed to load env map for model ${A}.`,{cause:e})}}getModelResourceFiles(A){return["ld_cube_diffuse.wnbtex","ld_cube_ggx.wnbtex"].map((e=>{if(this.useTestEnvMap)return ResourceFileFactory.bufferResourceOf(`./datapacks/assets/r2/test-envmap/${e}`)
|
|
3458
3508
|
const t=A.getUriDatapackEntryByName(e)
|
|
3459
3509
|
return ResourceFileFactory.bufferResourceOf(t.uri)}))}getDatapackResourceFiles(){return[ResourceFileFactory.bufferResourceOf(this.datapackMetaManager.getFileUrl("single_scatter_dfg_lut.wnbtex"))]}}
|
|
3460
3510
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3461
|
-
var
|
|
3511
|
+
var yI=["EXT_color_buffer_float"],__awaiter=function(A,e,t,i){return new(t||(t=Promise))((function(g,r){function fulfilled(A){try{step(i.next(A))}catch(A){r(A)}}function rejected(A){try{step(i.throw(A))}catch(A){r(A)}}function step(A){A.done?g(A.value):function adopt(A){return A instanceof t?A:new t((function(e){e(A)}))}(A.value).then(fulfilled,rejected)}step((i=i.apply(A,e||[])).next())}))}
|
|
3462
3512
|
|
|
3463
3513
|
;// Copyright © 2023 WANNABY Inc. All rights reserved.
|
|
3464
|
-
const
|
|
3465
|
-
const
|
|
3514
|
+
const RI=!1
|
|
3515
|
+
const MI=new class Webgl2Patcher{getBytesPerTexel(A){let{gl:e,format:t,type:i,data:g}=A
|
|
3466
3516
|
const r={[e.UNSIGNED_SHORT_5_6_5]:Uint16Array,[e.UNSIGNED_SHORT_4_4_4_4]:Uint16Array,[e.UNSIGNED_SHORT_5_5_5_1]:Uint16Array,[e.UNSIGNED_INT_2_10_10_10_REV]:Uint32Array,[e.UNSIGNED_INT_10F_11F_11F_REV]:Uint32Array,[e.HALF_FLOAT]:Uint16Array,[e.FLOAT]:Float32Array,[e.UNSIGNED_BYTE]:Uint8Array}
|
|
3467
3517
|
if(!r[i]||!(g instanceof r[i]||i===e.UNSIGNED_BYTE&&g instanceof Uint8ClampedArray))return 0
|
|
3468
3518
|
const I={[e.RED]:!0,[e.RG]:!0,[e.RGB]:!0,[e.RGBA]:!0},o={[e.ALPHA]:1,[e.LUMINANCE]:1,[e.RED]:1,[e.RED_INTEGER]:1,[e.LUMINANCE_ALPHA]:2,[e.RG]:2,[e.RG_INTEGER]:2,[e.RGB]:3,[e.RGB_INTEGER]:3,[e.RGBA]:4,[e.RGBA_INTEGER]:4}
|
|
@@ -3487,14 +3537,14 @@ if(!A)throw new Error("Empty context")
|
|
|
3487
3537
|
this.patchTexImage2D({gl:A}),this.patchTexSubImage2D({gl:A})}}
|
|
3488
3538
|
|
|
3489
3539
|
;// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3490
|
-
class R2Loader{constructor(A,e){this.libInjector=A,this.useLocalLibs=e,this.libraryName=e?"r2":"wannaRender"}async getRenderInitFunction(){try{return await this.libInjector.getRenderLibrary()}catch(A){throw new
|
|
3491
|
-
return await loadTextFile(A)}catch(A){throw new
|
|
3540
|
+
class R2Loader{constructor(A,e){this.libInjector=A,this.useLocalLibs=e,this.libraryName=e?"r2":"wannaRender"}async getRenderInitFunction(){try{return await this.libInjector.getRenderLibrary()}catch(A){throw new Ue("Failed to get renderer",{cause:A})}}async getShaders(){try{const A=this.libInjector.getLibraryFileUrl(this.useLocalLibs?this.libraryName:`${this.libraryName}/shaders`,"shaders.json")
|
|
3541
|
+
return await loadTextFile(A)}catch(A){throw new Ue("Failed to get shaders",{cause:A})}}getWasmUrl(){return this.libInjector.getLibraryFileUrl(this.libraryName,`${this.libraryName}.wasm`)}async getRendererWasm(){const A=this.getWasmUrl()
|
|
3492
3542
|
return customFetch(A)}async init(A){return this.initPromise||(this.initPromise=this.initR2(A)),this.initPromise}async initR2(A){let e
|
|
3493
|
-
if([this.lib,e]=await Promise.all([
|
|
3494
|
-
|
|
3543
|
+
if([this.lib,e]=await Promise.all([Pr.initModule({initFunction:await this.getRenderInitFunction(),wasmFetchPromise:this.getRendererWasm(),moduleName:"renderer"}),this.getShaders()]),this.context=new this.lib.WebGlContext(`#${A.id}`,!1,!0),function(){let{gl:A}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3544
|
+
ci&&MI.patchSafari162Bugs({gl:A})}({gl:A.getContext("webgl2")}),!this.context)throw new Error("Could not create WebGL context")
|
|
3495
3545
|
try{this.lib.setup(),this.shader_library=new this.lib.ShaderLibrary,this.lib.load_shader_library(this.shader_library,e),this.createRenderTarget()}catch(A){if(Number.isInteger(A)){const e=this.lib.get_exception_msg(A)
|
|
3496
3546
|
if("Program creation failed"===e)throw new UnsupportedEnvironmentError("Failed to load shaders: Program creation failed.")
|
|
3497
|
-
throw new
|
|
3547
|
+
throw new Ue(e)}throw A}}createRenderTarget(){const[A,e]=[100,100],t={x:0,y:0,width:A,height:e}
|
|
3498
3548
|
this.render_target=new this.lib.RenderTarget(t),this.render_system=new this.lib.RenderSystem(this.shader_library,this.render_target,A,e)
|
|
3499
3549
|
const i={...this.render_system.get_settings(),allocate_shadow_map:!1,allocate_ssr:!1}
|
|
3500
3550
|
this.render_system.set_settings({...i,allocate_shadow_map:!0,allocate_ssr:!0}),this.mask_render_system=new this.lib.RenderSystem(this.shader_library,this.render_target,{...i,postprocessing_enabled:!1,size:[A,e],ssr_size:[A,e],desired_msaa_samples:1})}dispose(){var A,e,t,i,g,r
|
|
@@ -3505,26 +3555,26 @@ const s=I.getContext("2d")
|
|
|
3505
3555
|
if(!s)throw new Error("Could not get 2d context for screenshot.")
|
|
3506
3556
|
let B
|
|
3507
3557
|
if([e,t].forEach((A=>{const{width:e,height:t}=getCropSizeByAspect(A,i.width/i.height)
|
|
3508
|
-
s.drawImage(A,0,0,e,t,0,0,o,a)})),B=g?await getImage(g):await
|
|
3558
|
+
s.drawImage(A,0,0,e,t,0,0,o,a)})),B=g?await getImage(g):await FI(),B){let A=B.width,e=B.height
|
|
3509
3559
|
e>36&&(A=Math.floor(36*A/e),e=36),A>199&&(e=Math.floor(199*e/A),A=199)
|
|
3510
3560
|
const t=o/i.width,g=calculateWatermarkOffset((null===r||void 0===r?void 0:r.x)??12,A,o,t),I=calculateWatermarkOffset((null===r||void 0===r?void 0:r.y)??-12,e,a,t)
|
|
3511
|
-
s.drawImage(B,g,I,A*t,e*t)}return new Promise(((A,e)=>{try{I.toBlob((i=>{i?A(i):e(new
|
|
3512
|
-
function calculateWatermarkOffset(A,e,t,i){return"center"===A?(t-e*i)/2:A>=0?A*i:t-(e+Math.abs(A))*i}const
|
|
3561
|
+
s.drawImage(B,g,I,A*t,e*t)}return new Promise(((A,e)=>{try{I.toBlob((i=>{i?A(i):e(new Ue("Failed to create screenshot",{params:{webglCanvas:t,width:o,height:a,watermarkUrl:g}}))}))}catch(A){e(new Ue("Error in getCanvasScreenshot",{cause:A,params:{webglCanvas:t,width:o,height:a,watermarkUrl:g}}))}}))}
|
|
3562
|
+
function calculateWatermarkOffset(A,e,t,i){return"center"===A?(t-e*i)/2:A>=0?A*i:t-(e+Math.abs(A))*i}const FI=once((async()=>{const A=new Blob(['<svg width="72" height="24" viewBox="0 0 72 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M11.2677 3L13.0218 13.41H13.123L14.9782 3H18.1809L14.9521 19.1538H11.5487L9.63931 8.05094H9.53985L7.63221 19.1538H4.22884L1 3H4.40337L6.20977 13.41H6.31188L8.11653 3H11.2677Z" fill="white"/>\n <path d="M25.609 3L30.2096 19.1538H26.7521L25.7608 15.4358H21.0842L20.0676 19.1538H16.8911L21.4909 3H25.609ZM21.8216 12.718H25.0234L23.4989 6.94866H23.3977L21.8216 12.718Z" fill="white"/>\n <path d="M39.5051 12.5639H39.6063V3H42.7322V19.1538H40.0636L34.5746 8.97449H34.4724V19.1538H31.3213V3H34.5501L39.5051 12.5639Z" fill="white"/>\n <path d="M52.5471 12.5639H52.6483V3H55.7742V19.1538H53.1056L47.6166 8.97449H47.5127V19.1538H44.3633V3H47.5921L52.5471 12.5639Z" fill="white"/>\n <path d="M65.6047 3L70.2019 19.1538H66.7479L65.7566 15.4358H61.0808L60.0642 19.1538H56.8868L61.4866 3H65.6047ZM61.8173 12.718H65.02L63.4945 6.94866H63.3951L61.8173 12.718Z" fill="white"/>\n</svg>\n'],{type:"image/svg+xml"}),e=URL.createObjectURL(A),t=await getImage(e)
|
|
3513
3563
|
return URL.revokeObjectURL(e),t})),getImage=A=>new Promise(((e,t)=>{const i=new Image
|
|
3514
3564
|
i.onload=()=>e(i),i.onerror=()=>t(new Error(`Failed to download ${A}.`)),i.crossOrigin="anonymous",i.src=A})),getCropSizeByAspect=(A,e)=>{let{width:t,height:i}=A
|
|
3515
3565
|
const g=t/i
|
|
3516
3566
|
return g>e?t=i*e:g<e&&(i=t/e),{width:t,height:i}}
|
|
3517
|
-
const
|
|
3567
|
+
const NI=
|
|
3518
3568
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3519
3569
|
class PublicLogger{constructor(A){this.logger=A}log(A,e){switch(A){case"log_cta_clicked":const{modelId:t,ctaLink:i}=e
|
|
3520
|
-
if("string"!==typeof t||"string"!==typeof i)throw new
|
|
3570
|
+
if("string"!==typeof t||"string"!==typeof i)throw new Ue("Invalid parameters for log_cta_clicked")
|
|
3521
3571
|
this.logger.logEvent("log_cta_clicked",t,i)
|
|
3522
3572
|
break
|
|
3523
3573
|
case"log_wrist_measure_event":const{eventName:g}=e
|
|
3524
|
-
if("string"!==typeof g)throw new
|
|
3574
|
+
if("string"!==typeof g)throw new Ue("Invalid parameters for log_wrist_measure_event")
|
|
3525
3575
|
this.logger.logEvent("log_wrist_measure_event",g)
|
|
3526
3576
|
break
|
|
3527
|
-
default:throw new
|
|
3577
|
+
default:throw new Ue(`Unknown UI event ${A}`)}}}
|
|
3528
3578
|
function src_defineProperty(A,e,t){return(e=function src_toPropertyKey(A){var e=function src_toPrimitive(A,e){if("object"!=typeof A||!A)return A
|
|
3529
3579
|
var t=A[Symbol.toPrimitive]
|
|
3530
3580
|
if(void 0!==t){var i=t.call(A,e||"default")
|
|
@@ -3532,163 +3582,162 @@ if("object"!=typeof i)return i
|
|
|
3532
3582
|
throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}
|
|
3533
3583
|
// Copyright © 2021 WANNABY Inc. All rights reserved.
|
|
3534
3584
|
(A,"string")
|
|
3535
|
-
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const
|
|
3536
|
-
let
|
|
3537
|
-
|
|
3585
|
+
return"symbol"==typeof e?e:e+""}(e))in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const SI=Date.now(),GI=getWindow(),kI=new mI,bI=new NI(kI)
|
|
3586
|
+
let _I
|
|
3587
|
+
kr.init(kI),
|
|
3538
3588
|
// Copyright © 2024 WANNABY Inc. All rights reserved.
|
|
3539
|
-
function initGlobalErrorListeners(A){window.addEventListener("error",(
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
A.logErrorObject(t),qt.remoteEmit(rA,t)}))}(mI),qt.on("error",(A=>{yI&&mI.logErrorObject(A)})),setEmitAction((function(A){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
3544
|
-
qt.remoteEmit(A,...t)}))
|
|
3545
|
-
const RI=document.getElementById("wrapper"),MI=document.getElementById("video"),FI=getWebglCanvas(),NI=getDebugCanvasesWrapper(),SI=document.getElementById("background-canvases"),GI=document.getElementById("screen-loading-stub"),kI=getPlayButton()
|
|
3546
|
-
yI=new class CoreSdk{constructor(){var A=this
|
|
3589
|
+
function initGlobalErrorListeners(A){window.addEventListener("error",(A=>{A.stopImmediatePropagation(),kr.handleError(new Ue(`Window error: ${A.message}`,{cause:A.error}))})),window.addEventListener("unhandledrejection",(A=>{A.stopImmediatePropagation(),kr.handleError(new Ue(`Unhandled rejection: ${A.reason}`,{cause:A.reason instanceof Error?A.reason:new Error(A.reason)}))}))}(),Ai.on("error",(A=>{_I&&kI.logError(Ue.fromObject(A))})),setEmitAction((function(A){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i]
|
|
3590
|
+
Ai.remoteEmit(A,...t)}))
|
|
3591
|
+
const UI=document.getElementById("wrapper"),LI=document.getElementById("video"),vI=getWebglCanvas(),HI=getDebugCanvasesWrapper(),xI=document.getElementById("background-canvases"),YI=document.getElementById("screen-loading-stub"),JI=getPlayButton()
|
|
3592
|
+
_I=new class CoreSdk{constructor(){var A=this
|
|
3547
3593
|
src_defineProperty(this,"setMode",queueCalls((async(A,e)=>{var t
|
|
3548
3594
|
if(this.mode===A)return
|
|
3549
3595
|
this.mode=A,this.type=e,await this.dataProvider.change_mode(A,e),null===(t=this.arInferenceDebugger)||void 0===t||t.toggleDebugDiv(A),this.modelsManager.modelType=e,this.modelsManager.mode=A,this.modelMetaManager.mode=A
|
|
3550
3596
|
const i=await this.getInferenceInitParams(A,e)
|
|
3551
|
-
return await
|
|
3552
|
-
return A.killStream(),A.initStream({cameraId:e,src:t,facingMode:i})})),src_defineProperty(this,"recalcDimensions",
|
|
3597
|
+
return await Ur.prepareMode(i),A===bt?(xI.style.display="none",this.hideVideo(),this.killStream(),this.initVideo.reset()):this.videoSize={width:0,height:0},!0}))),src_defineProperty(this,"setPersonHeight",queueCalls((async A=>{Ur.reInit({personHeight:A}),Ur.initParams&&(Ur.initParams.personHeight=A)}))),src_defineProperty(this,"resetStream",(async function(){let{cameraId:e,src:t,facingMode:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3598
|
+
return A.killStream(),A.initStream({cameraId:e,src:t,facingMode:i})})),src_defineProperty(this,"recalcDimensions",wt((function(){let{videoWidth:e,videoHeight:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:LI
|
|
3553
3599
|
const{width:i,height:g}=A.calcCanvasDimensions({videoWidth:e,videoHeight:t})
|
|
3554
|
-
i&&g&&[
|
|
3555
|
-
const i=t||
|
|
3556
|
-
areSizesEqual(A.videoSize,{width:g,height:i})||(A.videoSize={width:g,height:i},
|
|
3557
|
-
areSizesEqual(this.viewer3dSize,{width:A,height:e})||(this.viewer3dSize={width:A,height:e},
|
|
3600
|
+
i&&g&&[LI,vI,HI,xI].forEach((e=>A.setCssSize(e,{width:i,height:g})))}),50)),src_defineProperty(this,"handleVideoResize",wt((async function(){let{videoWidth:e,videoHeight:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3601
|
+
const i=t||LI.videoHeight,g=e||LI.videoWidth
|
|
3602
|
+
areSizesEqual(A.videoSize,{width:g,height:i})||(A.videoSize={width:g,height:i},Ai.remoteEmit(CA,A.videoSize),A.recalcDimensions({videoWidth:g,videoHeight:i}),A.pipelineInitialized&&await Ur.reInit({size:{height:i,width:g}}))}),50)),src_defineProperty(this,"handleWindowResize",wt((async()=>{const{width:A,height:e}=getAvailableSize(UI)
|
|
3603
|
+
areSizesEqual(this.viewer3dSize,{width:A,height:e})||(this.viewer3dSize={width:A,height:e},Ur.reInit({viewer3dSize:{height:e,width:A}}))
|
|
3558
3604
|
const{width:t,height:i}=this.videoSize
|
|
3559
3605
|
this.recalcDimensions({videoWidth:t,videoHeight:i})}),50)),src_defineProperty(this,"setupStream",onceSuccess((async function(){let{src:e,facingMode:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3560
3606
|
if(A.isRecordVideoMode)return
|
|
3561
3607
|
const{permissionGranted:i,error:g}=await A.checkCameraPermissions({src:e,facingMode:t})
|
|
3562
|
-
if(!i)throw new
|
|
3608
|
+
if(!i)throw new Ue("Failed to setup stream",{cause:g})}))),src_defineProperty(this,"setupVideoListeners",once((()=>{LI.addEventListener("loadedmetadata",this.handleVideoResize),LI.addEventListener("resize",this.handleVideoResize),LI.addEventListener("playing",(()=>{this.showVideo()}))}))),src_defineProperty(this,"setupVideo",queueCalls((async function(){let{src:e,stream:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3563
3609
|
return A.setupVideoListeners(),new Promise((async(i,g)=>{let r
|
|
3564
|
-
const onFirstReady=()=>{r(),
|
|
3610
|
+
const onFirstReady=()=>{r(),YI.style.display="none",i({width:LI.videoWidth,height:LI.videoHeight})},onError=()=>{r()
|
|
3565
3611
|
let A="Failed to init video."
|
|
3566
|
-
|
|
3567
|
-
r=()=>{
|
|
3612
|
+
LI.error&&(A+=` ${LI.error.code} ${LI.error.message}`),g(new Error(A))}
|
|
3613
|
+
r=()=>{LI.removeEventListener("loadedmetadata",onFirstReady),LI.removeEventListener("play",onFirstReady),LI.removeEventListener("error",onError)},LI.addEventListener("loadedmetadata",onFirstReady),LI.addEventListener("play",onFirstReady),LI.addEventListener("error",onError)
|
|
3568
3614
|
try{await A.setVideoSource({src:e,stream:t})}catch(A){r(),g(A)}}))}))),src_defineProperty(this,"handleStreamVisibilityChange",(()=>{var A
|
|
3569
|
-
this.mode!==
|
|
3570
|
-
return A.isRecordVideoMode?(t&&(
|
|
3615
|
+
this.mode!==bt&&("visible"===document.visibilityState&&(null!==Ur&&void 0!==Ur&&null!==(A=Ur.pipeline)&&void 0!==A&&A.running?Ur.reInit({resetStream:!0}):this.resetStream()))})),src_defineProperty(this,"setupStreamListeners",once((()=>{di&&document.addEventListener("visibilitychange",this.handleStreamVisibilityChange)}))),src_defineProperty(this,"initVideo",once((async function(){let e,{src:t,facingMode:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3616
|
+
return A.isRecordVideoMode?(t&&(LI.crossOrigin="anonymous",LI.src=t),void(YI.style.display="none")):(t||(await A.setupStream({facingMode:i}),e=await A.initStream(),A.setupStreamListeners()),await A.setupVideo({src:t,stream:e}))}))),src_defineProperty(this,"initPipelineSource",once((async()=>{await this.initVideo()}))),this.pipelineInitialized=!1,this.inDebugMode=!1,this.videoSize={width:0,height:0},this.viewer3dSize={width:0,height:0},this.modelId=null,this.delayedErrors=[],this.useLocalLibs=!1,this.loadedModels=new Set,this.internalEventsEmitter=new Wt,this.dataProvider=null,this.isLowPowerModeEnabled=!1,this._setupInternalEventsHandlers(),ut?UI.classList.add("desktopWrapper"):UI.classList.remove("desktopWrapper"),this._setupEventHandlers(),this._runLowPowerModeDetection()}_setupInternalEventsHandlers(){this.internalEventsEmitter.on(qi,(()=>{this.firstLazyStepInitStartedTimestamp||(this.firstLazyStepInitStartedTimestamp=Date.now()),this.lazyStepInitCounter=(this.lazyStepInitCounter||0)+1})),this.internalEventsEmitter.on(zi,(()=>{this.lazyStepInitCounter-=1,0===this.lazyStepInitCounter&&this.logMeasureSessionInitialization({initTimestamp:this.initTimestamp,downloadTimestamp:this.firstLazyStepInitStartedTimestamp})}))}_setupEventHandlers(){document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&this._runLowPowerModeDetection()}))}async _runLowPowerModeDetection(){this.isLowPowerModeEnabled=await LowerPowerModeDetector_isLowPowerModeEnabled(),kI.isReady()&&kI.appendLoggingData({low_power_mode:this.isLowPowerModeEnabled})}showVideo(){LI.classList.add("video-visible")}hideVideo(){LI.classList.remove("video-visible")}setModelId(A){this.modelId=A}logMeasureColdWarmStart(A){let{modelId:e,downloadingTime:t,startTime:i}=A
|
|
3571
3617
|
const g=performance.now()-i
|
|
3572
|
-
this.loadedModels.has(e)?
|
|
3618
|
+
this.loadedModels.has(e)?kI.logEvent("log_measure_warm_start",t,g):kI.logEvent("log_measure_cold_start",t,g)}logMeasureSessionInitialization(A){let{initTimestamp:e,downloadTimestamp:t}=A
|
|
3573
3619
|
const i=Date.now(),g=i-e,r=i-t
|
|
3574
|
-
if(g<0||r<0){const A=JSON.stringify({initTimestamp:e,initFileTimestamp:
|
|
3575
|
-
|
|
3576
|
-
this.mode===
|
|
3577
|
-
const showVTOCanvases=()=>{
|
|
3578
|
-
|
|
3579
|
-
if(
|
|
3620
|
+
if(g<0||r<0){const A=JSON.stringify({initTimestamp:e,initFileTimestamp:SI,totalInitTime:g,totalDownloadTime:r})
|
|
3621
|
+
kI.logError(new Ue(`NegativeTimestampError: Wrong measure calc in logMeasureSessionInitialization: ${A}`))}else setTimeout((()=>{kI.logEvent("log_measure_session_initialization",r,g)}))}async start(){const A=[]
|
|
3622
|
+
this.mode===Ut?(YI.style.display="none",this.recalcDimensions()):A.push(this.initPipelineSource()),A.push(Ur.reInit({action:"start",size:this.videoSize})),await Promise.all(A),Ur.start(),this.showCanvases()}showCanvases(){if(this.mode===bt)return void(vI.style.display="initial")
|
|
3623
|
+
const showVTOCanvases=()=>{vI.style.display="initial",xI.style.display="initial",Ur.pipeline.removeOnAfterRender(showVTOCanvases)}
|
|
3624
|
+
Ur.pipeline.onAfterRender(showVTOCanvases)}destroy(){Ur.stop()}async pause(){await Ur.pause()}async getInferenceInitParams(A,e){let t={mode:A,type:e,debug:this.inDebugMode}
|
|
3625
|
+
if(Tt.includes(e)){var i
|
|
3580
3626
|
const A=Boolean(null===(i=this.query)||void 0===i?void 0:i.tflite)||await(async()=>await isSimdAvailable())()
|
|
3581
|
-
|
|
3627
|
+
kI.appendLoggingData({inference:A?"tflite":"tfjs"})
|
|
3582
3628
|
const{nnConfig:g,batchSize:r,interpolateSize:I,isRecordVideoMode:o,...a}=this.getInferenceConfig({query:this.query,type:e})
|
|
3583
|
-
t={...t,...a,nn:g,cacheCanvas:!r&&!I,subpixel:!0,batchSize:r,interpolateSize:I,segmentationThreshold:.5,isRecordVideoMode:o,useTflite:A},this.isRecordVideoMode=o}return
|
|
3629
|
+
t={...t,...a,nn:g,cacheCanvas:!r&&!I,subpixel:!0,batchSize:r,interpolateSize:I,segmentationThreshold:.5,isRecordVideoMode:o,useTflite:A},this.isRecordVideoMode=o}return kI.appendLoggingData({mode:A,kind:e===Lt?"footwear":e}),this.viewer3dSize=getAvailableSize(UI),t}initArInferenceDebugger(A){var e
|
|
3584
3630
|
const t=parseInt(null===(e=this.query)||void 0===e?void 0:e.debugTrackerSize)||100
|
|
3585
3631
|
let i=""
|
|
3586
|
-
const rememberTimeToFirstRender=()=>{i=Date.now()-this.initTimestamp+"ms",
|
|
3587
|
-
|
|
3632
|
+
const rememberTimeToFirstRender=()=>{i=Date.now()-this.initTimestamp+"ms",Ur.pipeline.removeOnAfterRender(rememberTimeToFirstRender)}
|
|
3633
|
+
Ur.pipeline.onAfterRender(rememberTimeToFirstRender),this.arInferenceDebugger=new ArInferenceDebugger(Ur.pipeline,this.fpsCounter,(()=>({ttfr:i,tflite:A,lowPowerMode:this.isLowPowerModeEnabled,...this.libInjector.multiversionLibraryOptions||{},...Ur.getDebugData()}))),this.arInferenceDebugger.init(t)}overrideValue(A,e,t,i){const g=t.hasOwnProperty(e)
|
|
3588
3634
|
if(i===Boolean)return g
|
|
3589
3635
|
const r=g?t[e]:A
|
|
3590
3636
|
return i?i(r):r}getInferenceConfig(A){let{query:e,type:t}=A
|
|
3591
3637
|
const i=Boolean(null===e||void 0===e?void 0:e.recordVideo)
|
|
3592
3638
|
let g,{batchSize:r,interpolateSize:I,networkName:o,gpuArgmax:a,disableOpticalFlow:s,useKeypointsPresence:B,filterKeypointsForPnP:n,requiredNumberOfKeypoints:E,meanLeft:C,meanRight:c,reprojectionThreshold:h,appearThreshold:d,disappearThreshold:l,segmentationSmoothMultiplier:u,...w}=inferenceConfigs(t);(this.inDebugMode||i)&&(r=this.overrideValue(r,"batch_size",e,Number),I=this.overrideValue(r,"interpolate",e,Number),o=this.overrideValue(o,"nn",e),a=this.overrideValue(a,"gpu_argmax",e,Boolean),s=this.overrideValue(s,"of_disable",e,Boolean),B=this.overrideValue(B,"use_keypoints_presence",e,Boolean),E=this.overrideValue(E,"requireKeypoints",e,Number),g=this.overrideValue(g,"frame",e))
|
|
3593
|
-
return{...w,isRecordVideoMode:i,batchSize:r,interpolateSize:I,nnConfig:config(t,o),gpuArgmax:a,disableOpticalFlow:s,useKeypointsPresence:B,requiredNumberOfKeypoints:E,filterKeypointsForPnP:n,meanLeft:C,meanRight:c,reprojectionThreshold:h,appearThreshold:d,disappearThreshold:l,renderType:
|
|
3639
|
+
return{...w,isRecordVideoMode:i,batchSize:r,interpolateSize:I,nnConfig:config(t,o),gpuArgmax:a,disableOpticalFlow:s,useKeypointsPresence:B,requiredNumberOfKeypoints:E,filterKeypointsForPnP:n,meanLeft:C,meanRight:c,reprojectionThreshold:h,appearThreshold:d,disappearThreshold:l,renderType:Oi,segmentationSmoothMultiplier:u,frameType:g}}async init(A){let{query:e,inDebugMode:t,modelId:i,license:g,modelsCacheSize:r,parentHostname:I,type:o,initTimestamp:a,metaUrlPrefix:s,mode:B,inViewport:n,enableDoubleClick:E=!1,personHeight:C}=A
|
|
3594
3640
|
this.loadedModels=new Set,this.initTimestamp=a,this.mode=B,this.type=o,this.inDebugMode=Boolean(t),this.query=e,null!==e&&void 0!==e&&e.libsSource&&this.setLibsSource(e.libsSource)
|
|
3595
|
-
if(!await function areWasmFeaturesAvailable(){return __awaiter(this,void 0,void 0,(function*(){return yield(0,
|
|
3641
|
+
if(!await function areWasmFeaturesAvailable(){return __awaiter(this,void 0,void 0,(function*(){return yield(0,ai.signExtensions)()}))}())throw new UnsupportedEnvironmentError("InitializationError: WASM features are not available")
|
|
3596
3642
|
const c=await(async A=>{let{mode:e}=A
|
|
3597
|
-
const t=`${
|
|
3643
|
+
const t=`${Vt}`,{vendor:i,model:g}=tt,{version:r,name:I}=it,{name:o,version:a}=gt
|
|
3598
3644
|
let s
|
|
3599
|
-
return s=i&&g?`${i}/${g}`:i||(g?`?/${g}`:""),{mode:e,ver:t,os:r||"",device:String(I||"").toLowerCase(),device_model_id:s,browser:`${o} ${a}`,session:
|
|
3645
|
+
return s=i&&g?`${i}/${g}`:i||(g?`?/${g}`:""),{mode:e,ver:t,os:r||"",device:String(I||"").toLowerCase(),device_model_id:s,browser:`${o} ${a}`,session:Zt,user:Xt,userAgent:rt}})({mode:B})
|
|
3600
3646
|
await this.initDataProviderAndLogger({license:g,parentHostname:I,metaUrlPrefix:s,wasmEventsParams:c})
|
|
3601
3647
|
let h=await this.getInferenceInitParams(B,o)
|
|
3602
|
-
this.fpsCounter=new FpsCounter({debug:t}),this.fpsLogger=new FpsLogger({logger:
|
|
3648
|
+
this.fpsCounter=new FpsCounter({debug:t}),this.fpsLogger=new FpsLogger({logger:kI,fpsCounter:this.fpsCounter,debug:t}),this.mode===Ut&&n&&(this.inViewportStartTime=performance.now())
|
|
3603
3649
|
const d=null===e||void 0===e?void 0:e.aid
|
|
3604
|
-
if(d&&
|
|
3605
|
-
var l
|
|
3650
|
+
if(d&&kI.appendLoggingData({toloka_assignment_id:d}),this.debugger=new Debugger({enabled:t,dataProvider:this.dataProvider}),l=document.createElement("canvas").getContext("webgl2"),!Boolean(l&&l.getExtension&&yI.every((A=>l.getExtension(A))))){const A=new UnsupportedEnvironmentError("InitializationError: R2 render is not supported")
|
|
3651
|
+
throw kI.logError(A),A}var l
|
|
3606
3652
|
this.libInjector=new LibInjector,this.libInjector.init({dataProvider:this.dataProvider,useLocalLibs:this.useLocalLibs,wasmConfig:null===e||void 0===e?void 0:e.wasmConfig}),this.datapackMetaManager=new DatapackMetaManager(this.dataProvider),this.modelMetaManager=new ModelMetaManager(this.dataProvider,B)
|
|
3607
3653
|
const u=Boolean(null===e||void 0===e?void 0:e.useTestEnvMap)
|
|
3608
|
-
this.envMapResourceLoader=new EnvMapResourcesLoader(this.datapackMetaManager,this.modelMetaManager,u),this.modelsManager=new
|
|
3654
|
+
this.envMapResourceLoader=new EnvMapResourcesLoader(this.datapackMetaManager,this.modelMetaManager,u),this.modelsManager=new lI({modelMetaManager:this.modelMetaManager,datapackMetaManager:this.datapackMetaManager,modelsCacheSize:r,logger:kI,type:o,mode:B})
|
|
3609
3655
|
const w=new R2Loader(this.libInjector,this.useLocalLibs)
|
|
3610
|
-
w.init(
|
|
3611
|
-
try{await
|
|
3612
|
-
return this.handleVideoResize({videoWidth:e,videoHeight:t})},modelId:i,dataProvider:this.dataProvider,modelsCacheSize:r,logger:
|
|
3613
|
-
const r=await
|
|
3614
|
-
let o=
|
|
3615
|
-
try{this.dataProvider=new r.DataProvider(e,{bundle:t,kind:this.type,mode:this.mode,metaVersion:o,metaUrlPrefix:i||""})}catch(A){throw Number.isInteger(A)?A=new Error(r.get_exception_msg(A)):"string"===typeof A&&(A=new Error(A)),new
|
|
3616
|
-
|
|
3617
|
-
const e=
|
|
3618
|
-
if(A){"user"===A.getTracks()[0].getSettings().facingMode!==e&&
|
|
3619
|
-
return t?(
|
|
3620
|
-
|
|
3656
|
+
w.init(vI)
|
|
3657
|
+
try{await Ur.init({...h,video:LI,isVideoSource:!(null===e||void 0===e||!e.src),webglCanvas:vI,resetStream:()=>this.resetStream(),onSizeChange:A=>{let{width:e,height:t}=A
|
|
3658
|
+
return this.handleVideoResize({videoWidth:e,videoHeight:t})},modelId:i,dataProvider:this.dataProvider,modelsCacheSize:r,logger:kI,type:o,viewer3dSize:this.viewer3dSize,mode:B,device:c.device,personHeight:C,libInjector:this.libInjector,modelsManager:this.modelsManager,datapackMetaManager:this.datapackMetaManager,modelMetaManager:this.modelMetaManager,envMapResourceLoader:this.envMapResourceLoader,internalEventsEmitter:this.internalEventsEmitter,enableDoubleClick:E,r2Loader:w,fpsLogger:this.fpsLogger,fpsCounter:this.fpsCounter,query:e}),Ur.frame&&kI.appendLoggingData({frame:Ur.frame.name}),this.inDebugMode&&this.mode===_t&&Ur.pipeline&&this.initArInferenceDebugger(h.useTflite)}catch(A){throw Number.isInteger(A)&&(A=new Error(this.dataProvider.get_exception_msg(A))),new Ue("Failed to init pipeline",{cause:A})}GI.addEventListener("resize",this.handleWindowResize),this.pipelineInitialized=!0,setTimeout((()=>{kI.logEvent("log_init")}))}async initDataProviderAndLogger(A){let{license:e,parentHostname:t,metaUrlPrefix:i,wasmEventsParams:g}=A
|
|
3659
|
+
const r=await Mt(),I=getNonGuaranteedEventsParams(kI)
|
|
3660
|
+
let o=Vt
|
|
3661
|
+
try{this.dataProvider=new r.DataProvider(e,{bundle:t,kind:this.type,mode:this.mode,metaVersion:o,metaUrlPrefix:i||""})}catch(A){throw Number.isInteger(A)?A=new Error(r.get_exception_msg(A)):"string"===typeof A&&(A=new Error(A)),new Ue("Failed to create DataProvider. Check license key.",{cause:A})}const a=this.dataProvider.get_new_logger({...g,bundle:t,kind:this.type,metaVersion:o,metaUrlPrefix:i||""},this.inDebugMode)
|
|
3662
|
+
kI.init({wasmLogger:a,debug:this.inDebugMode}),kI.appendLoggingData({...await I,low_power_mode:this.isLowPowerModeEnabled}),await this.dataProvider.init(a),this.dataProvider.get_exception_msg=r.get_exception_msg,this.dataProvider.doLeakCheck=r.doLeakCheck,this.dataProvider.destroy=function(){this._deleted||(this.delete(),this._deleted=!0),a.isDeleted()||a.delete()}}setVideoElementStream(A){LI.removeAttribute("src"),LI.srcObject=A
|
|
3663
|
+
const e=LI.classList.contains("video-mirrored")
|
|
3664
|
+
if(A){"user"===A.getTracks()[0].getSettings().facingMode!==e&&LI.classList.toggle("video-mirrored")}else e&&LI.classList.remove("video-mirrored")}killStream(){this.setVideoElementStream(null),ui.stopStream()}async initStream(){let A,{cameraId:e,src:t,facingMode:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3665
|
+
return t?(Ai.remoteEmit(k,"fakeCameraId"),!0):(A=e?await ui.getStream({cameraId:e}):i?await ui.switchTo({facingMode:i}):await ui.getStream(),A&&(Ur.setStream(A),Ai.remoteEmit(k,ui.getDeviceIdFromStream(A))),A)}async checkCameraPermissions(){let{src:A,facingMode:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
3666
|
+
Ai.remoteEmit(H)
|
|
3621
3667
|
try{let t
|
|
3622
|
-
t=A?{contentHint:"",id:"fakeId",kind:"videoinput",label:"fakeLabel",muted:!0,readyState:0,settings:{facingMode:e}}:await
|
|
3668
|
+
t=A?{contentHint:"",id:"fakeId",kind:"videoinput",label:"fakeLabel",muted:!0,readyState:0,settings:{facingMode:e}}:await ui.checkPermissions({facingMode:e})
|
|
3623
3669
|
const i=t.settings.facingMode
|
|
3624
|
-
|
|
3625
|
-
A.style.width=`${t}px`,A.style.height=`${i}px`}calcCanvasDimensions(){let{videoWidth:A,videoHeight:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:
|
|
3670
|
+
kI.logEvent("log_camera_access_granted",i??"unknown"),Ai.remoteEmit(x,t)}catch(A){return Ai.remoteEmit(Y,Ue.toObject(A)),{permissionGranted:!1,error:new Ue("Failed to get camera stream",{cause:A})}}return{permissionGranted:!0}}getAvailableSize(){return this.inDebugMode&&ut&&this.mode===_t?(UI.classList.add("arWrapper"),{width:LI.offsetWidth,height:LI.offsetHeight}):(UI.classList.remove("arWrapper"),getAvailableSize(UI))}setCssSize(A,e){let{width:t,height:i}=e
|
|
3671
|
+
A.style.width=`${t}px`,A.style.height=`${i}px`}calcCanvasDimensions(){let{videoWidth:A,videoHeight:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:LI
|
|
3626
3672
|
const{width:t,height:i}=this.getAvailableSize()
|
|
3627
3673
|
let g,r
|
|
3628
|
-
if(this.mode===
|
|
3674
|
+
if(this.mode===Ut)g=t,r=i
|
|
3629
3675
|
else if(A&&e){const I=((A,e)=>{var{width:t,height:i}=A,{width:g,height:r}=e
|
|
3630
3676
|
return Math.max(t/g,i/r)})({width:t,height:i},{width:A,height:e})
|
|
3631
|
-
g=Math.round(A*I),r=Math.round(e*I)}return{width:g,height:r}}async setupVideoAutoplay(){utils_video_useAutoPlayClickVideo()&&await
|
|
3677
|
+
g=Math.round(A*I),r=Math.round(e*I)}return{width:g,height:r}}async setupVideoAutoplay(){utils_video_useAutoPlayClickVideo()&&await Ii({playButton:JI,video:LI})}async setVideoSource(A){let{src:e,stream:t}=A
|
|
3632
3678
|
if(!this.isRecordVideoMode){if(t)this.setVideoElementStream(t)
|
|
3633
3679
|
else{if(!e)throw new Error("No source for video is set.")
|
|
3634
|
-
|
|
3635
|
-
await
|
|
3636
|
-
await
|
|
3637
|
-
await
|
|
3638
|
-
await
|
|
3639
|
-
await
|
|
3640
|
-
await
|
|
3680
|
+
LI.src!==e&&(this.killStream(),LI.loop=!0,LI.crossOrigin="anonymous",LI.disablePictureInPicture=!0,LI.src=e)}await this.setupVideoAutoplay()}}getMode(){return this.mode}async debug(A){if(!this.debugger.handleDebug(A))return Ur.reInit(A)}async setPOI(A){if(this.mode!==Ut)throw new Error("setPOI only available in 3D mode")
|
|
3681
|
+
await Ur.reInit({poi:A})}async resetCameraPosition(){if(this.mode!==Ut)throw new Error("resetCameraPosition only available in 3D mode")
|
|
3682
|
+
await Ur.reInit({resetCameraPosition:!0})}async cameraZoom(A){if(this.mode!==Ut)throw new Error("cameraZoom only available in 3D mode")
|
|
3683
|
+
await Ur.reInit({cameraZoom:A})}async togglePanningMode(A){if(this.mode!==Ut)throw new Error("togglePanningMode only available in 3D mode")
|
|
3684
|
+
await Ur.reInit({togglePanningMode:A})}async showOnboarding(A){if(this.mode!==Ut)throw new Error("showOnboarding only available in 3D mode")
|
|
3685
|
+
await Ur.showOnboarding(A)}async toggleDimensions(A,e){if(this.mode!==Ut)throw new Error("toggleDimensions only available in 3D mode")
|
|
3686
|
+
await Ur.reInit({dimensions:{show:A,dimensionsUnit:e}})}async visibilityChange(A){await Ur.reInit({visibilityChanged:A})}setLibsSource(A){switch(A){case"local":this.useLocalLibs=!0
|
|
3641
3687
|
break
|
|
3642
3688
|
case"datapack":this.useLocalLibs=!1
|
|
3643
3689
|
break
|
|
3644
|
-
default:throw new Error("Invalid libs source: use 'local' or 'datapack'")}}getPublicAssetUrl(A){try{return
|
|
3645
|
-
throw A}}},
|
|
3690
|
+
default:throw new Error("Invalid libs source: use 'local' or 'datapack'")}}getPublicAssetUrl(A){try{return _I.dataProvider.get_datapack_file_url(`assets/${A}`)}catch(A){if(Number.isInteger(A))throw new Error(_I.dataProvider.get_exception_msg(A))
|
|
3691
|
+
throw A}}},Ai.on(B,(async(A,e)=>{let{query:t,inDebugMode:i,license:g,modelsCacheSize:r,type:I,metaUrlPrefix:o,initTimestamp:a,mode:s,inViewport:B,enableDoubleClick:c,personHeight:h}=A,{origin:d,source:l}=e
|
|
3646
3692
|
try{let A
|
|
3647
|
-
|
|
3648
|
-
try{A=new URL(d).hostname}catch(A){throw new
|
|
3649
|
-
const t=performance.now(),i={type:
|
|
3650
|
-
try{
|
|
3651
|
-
const{downloadingTime:A}=await
|
|
3652
|
-
|
|
3693
|
+
YI.style.display="initial",Ai.init({origin:d,eventTarget:l}),Ai.remoteEmit(n)
|
|
3694
|
+
try{A=new URL(d).hostname}catch(A){throw new Ue(`Failed to get parent hostname from origin "${d}".`,{cause:A})}await _I.init({query:t,inDebugMode:i,license:g,modelsCacheSize:r,parentHostname:A,type:I,initTimestamp:a,mode:s,metaUrlPrefix:o,inViewport:B,enableDoubleClick:c,personHeight:h}),Ai.remoteEmit(E)}catch(A){Ai.remoteEmitError(C,A)}})).on(w,(async()=>{try{Ai.remoteEmit(D),await _I.start(),Ai.remoteEmit(f)}catch(A){Ai.remoteEmitError(m,A)}})).on(p,(async()=>{try{Ai.remoteEmit(y),await _I.pause(),Ai.remoteEmit(R)}catch(A){Ai.remoteEmitError(N,A)}})).on(g,(async A=>{let{modelId:e}=A
|
|
3695
|
+
const t=performance.now(),i={type:yt,id:e}
|
|
3696
|
+
try{Ai.remoteEmit(r)
|
|
3697
|
+
const{downloadingTime:A}=await Ur.reInit({preloadedModelId:e})
|
|
3698
|
+
_I.logMeasureColdWarmStart({modelId:e,startTime:t,downloadingTime:A}),_I.loadedModels.add(e),Ai.remoteEmit(a,i)}catch(A){Ai.remoteEmitError(s,i,A)}})).on(O,(async A=>{let{modelId:e}=A
|
|
3653
3699
|
try{const A=performance.now()
|
|
3654
|
-
|
|
3655
|
-
const{modelWasSet:t,downloadingTime:i,modelInfo:g}=await
|
|
3656
|
-
t&&(
|
|
3657
|
-
try{
|
|
3658
|
-
const A=(await
|
|
3700
|
+
Ai.remoteEmit(q,{modelId:e})
|
|
3701
|
+
const{modelWasSet:t,downloadingTime:i,modelInfo:g}=await Ur.reInit({modelId:e})
|
|
3702
|
+
t&&(_I.setModelId(e),_I.logMeasureColdWarmStart({modelId:e,startTime:A,downloadingTime:i})),_I.loadedModels.add(e),Ai.remoteEmit(z,{modelId:e,modelInfo:g,modelWasSet:t})}catch(A){Ai.remoteEmitError(j,{modelId:e},A)}})).on(V,(async A=>{let{duration:e,visible:t}=A
|
|
3703
|
+
try{Ai.remoteEmit(W),t&&(_I.visibilityChange(!0),_I.inViewportStartTime=performance.now()),!t&&_I.modelId&&kI.logEvent("log_3d_closed",_I.modelId,`${e}`),Ai.remoteEmit(Z)}catch(A){Ai.remoteEmitError(X,{},A)}})).on(J,(async()=>{try{Ai.remoteEmit(T),await _I.setupStream({src:LI.src})
|
|
3704
|
+
const A=(await ui.getDevicesListByOs()).map((A=>{let{deviceId:e,label:t}=A
|
|
3659
3705
|
return{label:t,id:e}}))
|
|
3660
|
-
|
|
3706
|
+
Ai.remoteEmit(K,A)}catch(A){Ai.remoteEmitError(P,A)}})).on(S,(async A=>{let{cameraId:e}=A
|
|
3661
3707
|
try{var t
|
|
3662
|
-
|
|
3663
|
-
const A=null===
|
|
3664
|
-
await
|
|
3708
|
+
Ai.remoteEmit(G),await _I.setupStream({src:LI.src})
|
|
3709
|
+
const A=null===Ur||void 0===Ur||null===(t=Ur.pipeline)||void 0===t?void 0:t.running
|
|
3710
|
+
await _I.pause(),await _I.resetStream({cameraId:e}),A&&_I.start(),Ai.remoteEmit(k,e)}catch(A){Ai.remoteEmitError(b,e,A)}})).on(_,(async A=>{let{facingMode:e}=A
|
|
3665
3711
|
try{var t
|
|
3666
|
-
|
|
3667
|
-
const A=null===
|
|
3668
|
-
await
|
|
3669
|
-
const i=await
|
|
3670
|
-
A&&
|
|
3671
|
-
const g=
|
|
3672
|
-
|
|
3673
|
-
try{
|
|
3674
|
-
const A=await getCanvasScreenshot({backgroundCanvas:getCurrentBackground(),webglCanvas:
|
|
3675
|
-
|
|
3676
|
-
try{
|
|
3677
|
-
const A=await
|
|
3678
|
-
|
|
3679
|
-
try{
|
|
3680
|
-
const A=await
|
|
3681
|
-
|
|
3682
|
-
try{
|
|
3683
|
-
const e=await
|
|
3684
|
-
|
|
3685
|
-
try{
|
|
3686
|
-
try{
|
|
3687
|
-
try{
|
|
3688
|
-
try{
|
|
3689
|
-
const A=
|
|
3690
|
-
|
|
3691
|
-
try{
|
|
3692
|
-
const A=
|
|
3693
|
-
|
|
3694
|
-
try{
|
|
3712
|
+
Ai.remoteEmit(U),await _I.setupStream({src:LI.src})
|
|
3713
|
+
const A=null===Ur||void 0===Ur||null===(t=Ur.pipeline)||void 0===t?void 0:t.running
|
|
3714
|
+
await _I.pause()
|
|
3715
|
+
const i=await _I.resetStream({facingMode:e})
|
|
3716
|
+
A&&_I.start()
|
|
3717
|
+
const g=ui.getStreamDetails(i).settings.facingMode
|
|
3718
|
+
kI.logEvent("log_camera_switched",g??"unknown"),Ai.remoteEmit(L,g)}catch(A){Ai.remoteEmitError(v,e,A)}})).on($,(async A=>{let{watermarkUrl:e,watermarkOffset:t}=A
|
|
3719
|
+
try{Ai.remoteEmit(AA),Ct&&dt===$e&&"12"===st&&await getCanvasScreenshot({backgroundCanvas:getCurrentBackground(),webglCanvas:vI,previewSize:_I.getAvailableSize(),watermarkUrl:e,watermarkOffset:t})
|
|
3720
|
+
const A=await getCanvasScreenshot({backgroundCanvas:getCurrentBackground(),webglCanvas:vI,previewSize:_I.getAvailableSize(),watermarkUrl:e,watermarkOffset:t})
|
|
3721
|
+
kI.logEvent("log_photo_taken",_I.modelId),Ai.remoteEmit(eA,A)}catch(A){Ai.remoteEmitError(tA,A)}})).on(cA,(async A=>{let{src:e,facingMode:t}=A
|
|
3722
|
+
try{Ai.remoteEmit(hA)
|
|
3723
|
+
const A=await _I.initVideo({src:e,facingMode:t})
|
|
3724
|
+
Ai.remoteEmit(dA,A)}catch(A){Ai.remoteEmitError(lA,A)}})).on(h,(()=>{try{Ai.remoteEmit(d),_I.destroy(),Ai.remoteEmit(l)}catch(A){Ai.remoteEmitError(u,A)}finally{Ai.destroy()}})).on(wA,(async A=>{let{mode:e,modelType:t,startTime:i}=A
|
|
3725
|
+
try{Ai.remoteEmit(DA),kI.logEvent(e===bt?"log_change_mode_to_3d":"log_change_mode_to_vto",_I.modelId)
|
|
3726
|
+
const A=await _I.setMode(e,t)
|
|
3727
|
+
Ai.remoteEmit(fA,{mode:e,startTime:i,modeWasSet:A})}catch(A){Ai.remoteEmitError(mA,{startTime:i},A)}})).on(se,(async A=>{let{personHeight:e}=A
|
|
3728
|
+
try{Ai.remoteEmit(Be),await _I.setPersonHeight(e),Ai.remoteEmit(Qe)}catch(A){Ai.remoteEmitError(ne,A)}})).on(aA,(async A=>{try{Ai.remoteEmit(sA)
|
|
3729
|
+
const e=await _I.debug(A)
|
|
3730
|
+
Ai.remoteEmit(QA,e)}catch(A){Ai.remoteEmitError(BA,A)}})).on(pA,(async A=>{let{index:e}=A
|
|
3731
|
+
try{Ai.remoteEmit(yA),await _I.setPOI(e),kI.logEvent("log_3d_poi_used",_I.modelId,`${e}`),Ai.remoteEmit(RA)}catch(A){Ai.remoteEmitError(MA,A)}})).on(FA,(async()=>{try{Ai.remoteEmit(NA),await _I.resetCameraPosition(),kI.logEvent("log_reset_clicked"),Ai.remoteEmit(SA)}catch(A){Ai.remoteEmitError(GA,A)}})).on(kA,(async A=>{let{to:e}=A
|
|
3732
|
+
try{Ai.remoteEmit(bA),await _I.cameraZoom(e),Ai.remoteEmit(_A)}catch(A){Ai.remoteEmitError(UA,A)}})).on(LA,(async A=>{let{isPanningMode:e}=A
|
|
3733
|
+
try{Ai.remoteEmit(vA),await _I.togglePanningMode(e),kI.logEvent("log_3d_toggle_panning_mode",_I.modelId),Ai.remoteEmit(HA)}catch(A){Ai.remoteEmitError(xA,A)}})).on(TA,(async()=>{try{Ai.remoteEmit(KA),_I.showOnboarding().catch((A=>{kr.handleError(new Ue("Error during showing onboarding",{cause:A}))})),Ai.remoteEmit(PA)}catch(A){Ai.remoteEmitError(OA,A)}})).on(qA,(async A=>{let{show:e,dimensionsUnit:t}=A
|
|
3734
|
+
try{Ai.remoteEmit(zA),await _I.toggleDimensions(e,t),Ai.remoteEmit(jA)}catch(A){Ai.remoteEmitError(VA,A)}})).on(XA,(async()=>{try{Ai.remoteEmit($A)
|
|
3735
|
+
const A=_I.libInjector.getLibraryUrl("wristmeasurement","wristmeasurement"),e=_I.dataProvider.get_device_detection_client_url(),t=_I.getPublicAssetUrl("wristMeasureOnboarding.mp4")
|
|
3736
|
+
Ai.remoteEmit(Ae,{url:A,deviceDetectionSdkUrl:e,defaultOnboardingUrl:t})}catch(A){Ai.remoteEmitError(ee,A)}})).on(te,(A=>{let{assetKey:e}=A
|
|
3737
|
+
try{Ai.remoteEmit(ie)
|
|
3738
|
+
const A=_I.getPublicAssetUrl(e)
|
|
3739
|
+
Ai.remoteEmit(ge,{url:A})}catch(A){Ai.remoteEmitError(re,A)}})).on(Ie,(async()=>{try{Ai.remoteEmit(oe),await kI.waitForAllLogsSent(),Ai.remoteEmit(ae)}catch(A){console.error("Error while waiting for sending all the logs:",A)}})).on(Ee,(A=>{let{event:e,params:t}=A
|
|
3740
|
+
try{Ai.remoteEmit(Ce),bI.log(e,t),Ai.remoteEmit(ce)}catch(A){Ai.remoteEmitError(he,A)}})).on(de,(async()=>{try{Ai.remoteEmit(le)
|
|
3741
|
+
const A=await Ur.getGltfModels()
|
|
3742
|
+
Ai.remoteEmit(ue,A)}catch(A){Ai.remoteEmitError(we,A)}})).on(De,(A=>{let{id:e,gltf:t}=A
|
|
3743
|
+
try{Ai.remoteEmit(fe),Ur.setGltfModel({id:e,gltf:t}),Ai.remoteEmit(me)}catch(A){Ai.remoteEmitError(pe,A)}})),Ai.init(),Ai.remoteEmit(i)})()})()
|