@needle-tools/engine 6.0.0-alpha.5 → 6.0.0-alpha.7

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.
Files changed (84) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/gltf-progressive-CRdzVlSY.umd.cjs +10 -0
  3. package/dist/gltf-progressive-OBdIERAY.min.js +10 -0
  4. package/dist/{gltf-progressive-B7lOWdLe.js → gltf-progressive-ZuAsp3FE.js} +237 -231
  5. package/dist/{materialx-CTPhpPxI.min.js → materialx-Bd0NThHa.min.js} +1 -1
  6. package/dist/{materialx-BwYvA-4x.umd.cjs → materialx-Clep-Dc8.umd.cjs} +2 -2
  7. package/dist/{materialx-B3qY8vPU.js → materialx-m9EM4lhZ.js} +1 -1
  8. package/dist/{needle-engine.bundle-_kAszB-k.min.js → needle-engine.bundle-B2_-yVCX.min.js} +148 -148
  9. package/dist/{needle-engine.bundle-D3nBMgfk.umd.cjs → needle-engine.bundle-BOs3iHUC.umd.cjs} +147 -147
  10. package/dist/{needle-engine.bundle-4xlWxOTF.js → needle-engine.bundle-hBHg3HuX.js} +7092 -7023
  11. package/dist/needle-engine.d.ts +49 -28
  12. package/dist/needle-engine.js +604 -603
  13. package/dist/needle-engine.min.js +1 -1
  14. package/dist/needle-engine.umd.cjs +1 -1
  15. package/dist/{vendor-BJviq-Oq.umd.cjs → vendor-Bb_SUKxZ.umd.cjs} +92 -92
  16. package/dist/{vendor-CdNldo8c.min.js → vendor-D1vc0sOe.min.js} +100 -100
  17. package/dist/{vendor-BQUQwut5.js → vendor-ipoLrKAE.js} +3466 -3320
  18. package/lib/engine/api.d.ts +2 -1
  19. package/lib/engine/api.js +2 -1
  20. package/lib/engine/api.js.map +1 -1
  21. package/lib/engine/engine_context.d.ts +2 -0
  22. package/lib/engine/engine_context.js +14 -0
  23. package/lib/engine/engine_context.js.map +1 -1
  24. package/lib/engine/engine_init.js +2 -2
  25. package/lib/engine/engine_init.js.map +1 -1
  26. package/lib/engine/engine_license.d.ts +7 -7
  27. package/lib/engine/engine_license.js +73 -73
  28. package/lib/engine/engine_license.js.map +1 -1
  29. package/lib/engine/engine_loaders.gltf.d.ts +3 -1
  30. package/lib/engine/engine_loaders.gltf.js +6 -1
  31. package/lib/engine/engine_loaders.gltf.js.map +1 -1
  32. package/lib/engine/engine_networking_blob.js +3 -3
  33. package/lib/engine/engine_networking_blob.js.map +1 -1
  34. package/lib/engine/engine_physics.d.ts +2 -0
  35. package/lib/engine/engine_physics.js +23 -1
  36. package/lib/engine/engine_physics.js.map +1 -1
  37. package/lib/engine/engine_utils_qrcode.js +2 -2
  38. package/lib/engine/engine_utils_qrcode.js.map +1 -1
  39. package/lib/engine/project-document/engine_document_extensions.d.ts +16 -0
  40. package/lib/engine/project-document/engine_document_extensions.js +29 -0
  41. package/lib/engine/project-document/engine_document_extensions.js.map +1 -0
  42. package/lib/engine/project-document/engine_document_runtime.js +1 -1
  43. package/lib/engine/project-document/engine_document_runtime.js.map +1 -1
  44. package/lib/engine/project-document/engine_project_document.js +39 -3
  45. package/lib/engine/project-document/engine_project_document.js.map +1 -1
  46. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
  47. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
  48. package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
  49. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  50. package/lib/engine/webcomponents/needle-engine.js +2 -2
  51. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  52. package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
  53. package/lib/engine/xr/TempXRContext.js +2 -2
  54. package/lib/engine/xr/TempXRContext.js.map +1 -1
  55. package/lib/engine-components/Renderer.d.ts +1 -1
  56. package/lib/engine-components/Renderer.js +2 -11
  57. package/lib/engine-components/Renderer.js.map +1 -1
  58. package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
  59. package/package.json +4 -4
  60. package/plugins/common/license.js +4 -4
  61. package/plugins/license/cli.js +7 -4
  62. package/plugins/vite/build-pipeline.js +6 -1
  63. package/plugins/vite/license.js +4 -4
  64. package/plugins/vite/logger.client.js +21 -8
  65. package/src/engine/api.ts +2 -1
  66. package/src/engine/engine_context.ts +11 -0
  67. package/src/engine/engine_init.ts +2 -2
  68. package/src/engine/engine_license.ts +70 -70
  69. package/src/engine/engine_loaders.gltf.ts +8 -2
  70. package/src/engine/engine_networking_blob.ts +3 -3
  71. package/src/engine/engine_physics.ts +22 -1
  72. package/src/engine/engine_utils_qrcode.ts +2 -2
  73. package/src/engine/project-document/engine_document_extensions.ts +39 -0
  74. package/src/engine/project-document/engine_document_runtime.ts +1 -1
  75. package/src/engine/project-document/engine_project_document.ts +46 -3
  76. package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
  77. package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
  78. package/src/engine/webcomponents/needle-engine.loading.ts +2 -2
  79. package/src/engine/webcomponents/needle-engine.ts +2 -2
  80. package/src/engine/xr/TempXRContext.ts +2 -2
  81. package/src/engine-components/Renderer.ts +4 -13
  82. package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
  83. package/dist/gltf-progressive-BpT9M5Mt.umd.cjs +0 -10
  84. package/dist/gltf-progressive-D0rzvhNG.min.js +0 -10
@@ -1,4 +1,4 @@
1
- "use strict";const F=require("./three-core.umd.cjs"),uD=require("./three-examples.umd.cjs"),ba=/^(?:[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;function ma(B){return typeof B=="string"&&ba.test(B)}const EI=[];for(let B=0;B<256;++B)EI.push((B+256).toString(16).slice(1));function Pa(B,A=0){return EI[B[A+0]]+EI[B[A+1]]+EI[B[A+2]]+EI[B[A+3]]+"-"+EI[B[A+4]]+EI[B[A+5]]+"-"+EI[B[A+6]]+EI[B[A+7]]+"-"+EI[B[A+8]]+EI[B[A+9]]+"-"+EI[B[A+10]]+EI[B[A+11]]+EI[B[A+12]]+EI[B[A+13]]+EI[B[A+14]]+EI[B[A+15]]}function Ta(B){if(!ma(B))throw TypeError("Invalid UUID");let A;const I=new Uint8Array(16);return I[0]=(A=parseInt(B.slice(0,8),16))>>>24,I[1]=A>>>16&255,I[2]=A>>>8&255,I[3]=A&255,I[4]=(A=parseInt(B.slice(9,13),16))>>>8,I[5]=A&255,I[6]=(A=parseInt(B.slice(14,18),16))>>>8,I[7]=A&255,I[8]=(A=parseInt(B.slice(19,23),16))>>>8,I[9]=A&255,I[10]=(A=parseInt(B.slice(24,36),16))/1099511627776&255,I[11]=A/4294967296&255,I[12]=A>>>24&255,I[13]=A>>>16&255,I[14]=A>>>8&255,I[15]=A&255,I}function Oa(B){B=unescape(encodeURIComponent(B));const A=[];for(let I=0;I<B.length;++I)A.push(B.charCodeAt(I));return A}const Xa="6ba7b810-9dad-11d1-80b4-00c04fd430c8",va="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function Va(B,A,I){function g(Q,C,E,i){var D;if(typeof Q=="string"&&(Q=Oa(Q)),typeof C=="string"&&(C=Ta(C)),((D=C)===null||D===void 0?void 0:D.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+Q.length);if(o.set(C),o.set(Q,C.length),o=I(o),o[6]=o[6]&15|A,o[8]=o[8]&63|128,E){i=i||0;for(let s=0;s<16;++s)E[i+s]=o[s];return E}return Pa(o)}try{g.name=B}catch{}return g.DNS=Xa,g.URL=va,g}function Za(B,A,I,g){switch(B){case 0:return A&I^~A&g;case 1:return A^I^g;case 2:return A&I^A&g^I&g;case 3:return A^I^g}}function ci(B,A){return B<<A|B>>>32-A}function Wa(B){const A=[1518500249,1859775393,2400959708,3395469782],I=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof B=="string"){const E=unescape(encodeURIComponent(B));B=[];for(let i=0;i<E.length;++i)B.push(E.charCodeAt(i))}else Array.isArray(B)||(B=Array.prototype.slice.call(B));B.push(128);const g=B.length/4+2,Q=Math.ceil(g/16),C=new Array(Q);for(let E=0;E<Q;++E){const i=new Uint32Array(16);for(let D=0;D<16;++D)i[D]=B[E*64+D*4]<<24|B[E*64+D*4+1]<<16|B[E*64+D*4+2]<<8|B[E*64+D*4+3];C[E]=i}C[Q-1][14]=(B.length-1)*8/Math.pow(2,32),C[Q-1][14]=Math.floor(C[Q-1][14]),C[Q-1][15]=(B.length-1)*8&4294967295;for(let E=0;E<Q;++E){const i=new Uint32Array(80);for(let a=0;a<16;++a)i[a]=C[E][a];for(let a=16;a<80;++a)i[a]=ci(i[a-3]^i[a-8]^i[a-14]^i[a-16],1);let D=I[0],o=I[1],s=I[2],t=I[3],w=I[4];for(let a=0;a<80;++a){const y=Math.floor(a/20),R=ci(D,5)+Za(y,o,s,t)+w+A[y]+i[a]>>>0;w=t,t=s,s=ci(o,30)>>>0,o=D,D=R}I[0]=I[0]+D>>>0,I[1]=I[1]+o>>>0,I[2]=I[2]+s>>>0,I[3]=I[3]+t>>>0,I[4]=I[4]+w>>>0}return[I[0]>>24&255,I[0]>>16&255,I[0]>>8&255,I[0]&255,I[1]>>24&255,I[1]>>16&255,I[1]>>8&255,I[1]&255,I[2]>>24&255,I[2]>>16&255,I[2]>>8&255,I[2]&255,I[3]>>24&255,I[3]>>16&255,I[3]>>8&255,I[3]&255,I[4]>>24&255,I[4]>>16&255,I[4]>>8&255,I[4]&255]}const ja=Va("v5",80,Wa),za="#needle",_a=[za];function st(B){if(B==null)return null;const A=B.trim(),I=A.toLowerCase();for(const g of $a(_a)){if(!I.endsWith(g))continue;const Q=tt(A.substring(0,A.length-g.length));return Q.length>0?{marker:g,value:Q}:null}return null}function tt(B){return B.replace(/[\s_]+/g," ").trim()}function qD(B){return st(B)?.value??null}function $a(B){return B.length>1?[...B].sort((A,I)=>I.length-A.length):B}function Ae(B){const A=ge(B),I=new DataView(A.buffer,A.byteOffset,A.byteLength);let g=1732584193,Q=4023233417,C=2562383102,E=271733878,i=3285377520;const D=new Uint32Array(80);for(let t=0;t<A.length;t+=64){for(let h=0;h<16;h++)D[h]=I.getUint32(t+h*4);for(let h=16;h<80;h++){const G=D[h-3]^D[h-8]^D[h-14]^D[h-16];D[h]=G<<1|G>>>31}let w=g,a=Q,y=C,R=E,n=i;for(let h=0;h<80;h++){let G,r;h<20?(G=a&y|~a&R,r=1518500249):h<40?(G=a^y^R,r=1859775393):h<60?(G=a&y|a&R|y&R,r=2400959708):(G=a^y^R,r=3395469782);const M=(w<<5|w>>>27)+G+n+r+D[h]|0;n=R,R=y,y=a<<30|a>>>2,a=w,w=M}g=g+w|0,Q=Q+a|0,C=C+y|0,E=E+R|0,i=i+n|0}const o=new Uint8Array(20),s=new DataView(o.buffer);return s.setUint32(0,g>>>0),s.setUint32(4,Q>>>0),s.setUint32(8,C>>>0),s.setUint32(12,E>>>0),s.setUint32(16,i>>>0),o}function Ie(B){let A="";for(let I=0;I<B.length;I++)A+=B[I].toString(16).padStart(2,"0");return A}function ge(B){const A=B.length*8,I=new Uint8Array(((B.length+8>>6)+1)*64);I.set(B),I[B.length]=128;const g=new DataView(I.buffer);return g.setUint32(I.length-8,Math.floor(A/4294967296)),g.setUint32(I.length-4,A>>>0),I}const Qe="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function wt(B,A=Qe){const I=Be(A),g=new TextEncoder().encode(B),Q=new Uint8Array(I.length+g.length);Q.set(I),Q.set(g,I.length);const C=Ae(Q).slice(0,16);return C[6]=C[6]&15|80,C[8]=C[8]&63|128,Ce(C)}function Be(B){const A=B.replace(/-/g,"");if(A.length!==32)throw new Error(`Invalid UUID: ${B}`);const I=new Uint8Array(16);for(let g=0;g<16;g++)I[g]=parseInt(A.substring(g*2,g*2+2),16);return I}function Ce(B){const A=Ie(B);return`${A.substring(0,8)}-${A.substring(8,12)}-${A.substring(12,16)}-${A.substring(16,20)}-${A.substring(20)}`}const bB="needle-id";function Ee(B,A){return wt(`${B}:${A}`,"eff8ba80-635d-11ec-90d6-0242ac120003")}function $i(B){return typeof B!="string"?"":st(B)?.value??tt(B)}function ie(B,A,I,g){return wt(`${B}-${$i(A)}-${I}`)}function De(B,A){const I=$i(B[A]?.name);let g=0;for(let Q=0;Q<A;Q++)$i(B[Q]?.name)===I&&g++;return g}function oe(B){const A=B?.extras?.[bB];return typeof A=="string"?A:null}function se(B){return B.replace(/~/g,"~0").replace(/\//g,"~1")}function AD(B){return B.replace(/~1/g,"/").replace(/~0/g,"~")}function te(B){return B.map(se).join("/")}function we(B){return B.split("/").map(AD)}function ae(B){return B.split("/").map(A=>{const I=/~2(0|[1-9][0-9]*)$/.exec(A);return I?{name:AD(A.slice(0,I.index)),occurrence:Number(I[1])}:{name:AD(A)}})}function nQ(B,A,I){let g=null;if(B.anchor){const C=ee(A,E=>qD(E.name)===B.anchor,2);C.length===1&&(g=C[0])}if(g)return g;let Q=null;if(B.id&&(Q=at(A,C=>C.userData?.[bB]===B.id)),g)return g;if(Q)return Q;if(B.path!==void 0){let C=A;for(const E of ae(B.path)){const i=C.children?.filter(D=>(D.name??"")===E.name)??[];if(C=E.occurrence!==void 0?i[E.occurrence]??null:i.length===1?i[0]:null,!C)break}if(C&&C!==A)return C}return null}function qE(B,A,I){let g=null;if(B.anchor){const C=A.filter(E=>qD(E.name)===B.anchor);C.length===1?g=C[0]:C.length>1}if(g)return g;const Q=B.id?A.find(C=>C.userData?.[bB]===B.id)??null:null;if(g)return g;if(Q)return Q;if(B.name){const C=A.filter(E=>E.name===B.name);if(C.length===1)return C[0];C.length>1}return null}function ee(B,A,I){const g=[],Q=new Set,C=E=>{if(!(g.length>=I||Q.has(E))&&(Q.add(E),!(A(E)&&(g.push(E),g.length>=I))&&E.children))for(let i=0;i<E.children.length;i++){const D=E.children[i];D!=null&&C(D)}};return C(B),g}function at(B,A,I=new Set){if(I.has(B))return null;if(I.add(B),A(B))return B;if(!B.children)return null;for(let g=0;g<B.children.length;g++){const Q=B.children[g];if(Q==null)continue;const C=at(Q,A,I);if(C)return C}return null}const ce=[["nodes","node"],["materials","material"],["textures","texture"],["cameras","camera"]];function et(B,A,I){let g=0;const Q=(C,E,i,D)=>{const o=C.userData;if(!o||typeof o!="object"||typeof o[bB]=="string")return;const s=B[i];if(!Array.isArray(s))return;const t=s[D];if(!t||typeof t!="object")return;const w=oe(t)??ie(E,t.name,De(s,D));o[bB]=w,g++};if(A){for(const[C,E]of A)if(!(!E||typeof C!="object"))for(const[i,D]of ce){const o=E[i];if(typeof o=="number"){Q(C,D,i,o);break}}}if(I)for(let C=0;C<I.length;C++){const E=I[C];E&&Q(E,"scene","scenes",C)}return{attached:g}}const ni=2,ng=4,Kg=4,ct=4,Og=new Int32Array(2),bo=new Float32Array(Og.buffer),mo=new Float64Array(Og.buffer),xC=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;class fg{constructor(A,I){this.low=A|0,this.high=I|0}static create(A,I){return A==0&&I==0?fg.ZERO:new fg(A,I)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(A){return this.low==A.low&&this.high==A.high}}fg.ZERO=new fg(0,0);var ID;(function(B){B[B.UTF8_BYTES=1]="UTF8_BYTES",B[B.UTF16_STRING=2]="UTF16_STRING"})(ID||(ID={}));class mB{constructor(A){this.bytes_=A,this.position_=0}static allocate(A){return new mB(new Uint8Array(A))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(A){this.position_=A}capacity(){return this.bytes_.length}readInt8(A){return this.readUint8(A)<<24>>24}readUint8(A){return this.bytes_[A]}readInt16(A){return this.readUint16(A)<<16>>16}readUint16(A){return this.bytes_[A]|this.bytes_[A+1]<<8}readInt32(A){return this.bytes_[A]|this.bytes_[A+1]<<8|this.bytes_[A+2]<<16|this.bytes_[A+3]<<24}readUint32(A){return this.readInt32(A)>>>0}readInt64(A){return new fg(this.readInt32(A),this.readInt32(A+4))}readUint64(A){return new fg(this.readUint32(A),this.readUint32(A+4))}readFloat32(A){return Og[0]=this.readInt32(A),bo[0]}readFloat64(A){return Og[xC?0:1]=this.readInt32(A),Og[xC?1:0]=this.readInt32(A+4),mo[0]}writeInt8(A,I){this.bytes_[A]=I}writeUint8(A,I){this.bytes_[A]=I}writeInt16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeUint16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeInt32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeUint32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeInt64(A,I){this.writeInt32(A,I.low),this.writeInt32(A+4,I.high)}writeUint64(A,I){this.writeUint32(A,I.low),this.writeUint32(A+4,I.high)}writeFloat32(A,I){bo[0]=I,this.writeInt32(A,Og[0])}writeFloat64(A,I){mo[0]=I,this.writeInt32(A,Og[xC?0:1]),this.writeInt32(A+4,Og[xC?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+ng+Kg)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let A="";for(let I=0;I<Kg;I++)A+=String.fromCharCode(this.readInt8(this.position_+ng+I));return A}__offset(A,I){const g=A-this.readInt32(A);return I<this.readInt16(g)?this.readInt16(g+I):0}__union(A,I){return A.bb_pos=I+this.readInt32(I),A.bb=this,A}__string(A,I){A+=this.readInt32(A);const g=this.readInt32(A);let Q="",C=0;if(A+=ng,I===ID.UTF8_BYTES)return this.bytes_.subarray(A,A+g);for(;C<g;){let E;const i=this.readUint8(A+C++);if(i<192)E=i;else{const D=this.readUint8(A+C++);if(i<224)E=(i&31)<<6|D&63;else{const o=this.readUint8(A+C++);if(i<240)E=(i&15)<<12|(D&63)<<6|o&63;else{const s=this.readUint8(A+C++);E=(i&7)<<18|(D&63)<<12|(o&63)<<6|s&63}}}E<65536?Q+=String.fromCharCode(E):(E-=65536,Q+=String.fromCharCode((E>>10)+55296,(E&1023)+56320))}return Q}__union_with_string(A,I){return typeof A=="string"?this.__string(I):this.__union(A,I)}__indirect(A){return A+this.readInt32(A)}__vector(A){return A+this.readInt32(A)+ng}__vector_len(A){return this.readInt32(A+this.readInt32(A))}__has_identifier(A){if(A.length!=Kg)throw new Error("FlatBuffers: file identifier must be length "+Kg);for(let I=0;I<Kg;I++)if(A.charCodeAt(I)!=this.readInt8(this.position()+ng+I))return!1;return!0}createLong(A,I){return fg.create(A,I)}createScalarList(A,I){const g=[];for(let Q=0;Q<I;++Q)A(Q)!==null&&g.push(A(Q));return g}createObjList(A,I){const g=[];for(let Q=0;Q<I;++Q){const C=A(Q);C!==null&&g.push(C.unpack())}return g}}class bD{constructor(A){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null;let I;A?I=A:I=1024,this.bb=mB.allocate(I),this.space=I}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(A){this.force_defaults=A}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(A,I){A>this.minalign&&(this.minalign=A);const g=~(this.bb.capacity()-this.space+I)+1&A-1;for(;this.space<g+A+I;){const Q=this.bb.capacity();this.bb=bD.growByteBuffer(this.bb),this.space+=this.bb.capacity()-Q}this.pad(g)}pad(A){for(let I=0;I<A;I++)this.bb.writeInt8(--this.space,0)}writeInt8(A){this.bb.writeInt8(this.space-=1,A)}writeInt16(A){this.bb.writeInt16(this.space-=2,A)}writeInt32(A){this.bb.writeInt32(this.space-=4,A)}writeInt64(A){this.bb.writeInt64(this.space-=8,A)}writeFloat32(A){this.bb.writeFloat32(this.space-=4,A)}writeFloat64(A){this.bb.writeFloat64(this.space-=8,A)}addInt8(A){this.prep(1,0),this.writeInt8(A)}addInt16(A){this.prep(2,0),this.writeInt16(A)}addInt32(A){this.prep(4,0),this.writeInt32(A)}addInt64(A){this.prep(8,0),this.writeInt64(A)}addFloat32(A){this.prep(4,0),this.writeFloat32(A)}addFloat64(A){this.prep(8,0),this.writeFloat64(A)}addFieldInt8(A,I,g){(this.force_defaults||I!=g)&&(this.addInt8(I),this.slot(A))}addFieldInt16(A,I,g){(this.force_defaults||I!=g)&&(this.addInt16(I),this.slot(A))}addFieldInt32(A,I,g){(this.force_defaults||I!=g)&&(this.addInt32(I),this.slot(A))}addFieldInt64(A,I,g){(this.force_defaults||!I.equals(g))&&(this.addInt64(I),this.slot(A))}addFieldFloat32(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat32(I),this.slot(A))}addFieldFloat64(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat64(I),this.slot(A))}addFieldOffset(A,I,g){(this.force_defaults||I!=g)&&(this.addOffset(I),this.slot(A))}addFieldStruct(A,I,g){I!=g&&(this.nested(I),this.slot(A))}nested(A){if(A!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")}notNested(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")}slot(A){this.vtable!==null&&(this.vtable[A]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(A){const I=A.capacity();if(I&3221225472)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");const g=I<<1,Q=mB.allocate(g);return Q.setPosition(g-I),Q.bytes().set(A.bytes(),g-I),Q}addOffset(A){this.prep(ng,0),this.writeInt32(this.offset()-A+ng)}startObject(A){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=A;for(let I=0;I<A;I++)this.vtable[I]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);const A=this.offset();let I=this.vtable_in_use-1;for(;I>=0&&this.vtable[I]==0;I--);const g=I+1;for(;I>=0;I--)this.addInt16(this.vtable[I]!=0?A-this.vtable[I]:0);const Q=2;this.addInt16(A-this.object_start);const C=(g+Q)*ni;this.addInt16(C);let E=0;const i=this.space;A:for(I=0;I<this.vtables.length;I++){const D=this.bb.capacity()-this.vtables[I];if(C==this.bb.readInt16(D)){for(let o=ni;o<C;o+=ni)if(this.bb.readInt16(i+o)!=this.bb.readInt16(D+o))continue A;E=this.vtables[I];break}}return E?(this.space=this.bb.capacity()-A,this.bb.writeInt32(this.space,E-A)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-A,this.offset()-A)),this.isNested=!1,A}finish(A,I,g){const Q=g?ct:0;if(I){const C=I;if(this.prep(this.minalign,ng+Kg+Q),C.length!=Kg)throw new Error("FlatBuffers: file identifier must be length "+Kg);for(let E=Kg-1;E>=0;E--)this.writeInt8(C.charCodeAt(E))}this.prep(this.minalign,ng+Q),this.addOffset(A),Q&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(A,I){this.finish(A,I,!0)}requiredField(A,I){const g=this.bb.capacity()-A,Q=g-this.bb.readInt32(g);if(!(this.bb.readInt16(Q+I)!=0))throw new Error("FlatBuffers: field "+I+" must be set")}startVector(A,I,g){this.notNested(),this.vector_num_elems=I,this.prep(ng,A*I),this.prep(g,A*I)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(A){if(!A)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(A))return this.string_maps.get(A);const I=this.createString(A);return this.string_maps.set(A,I),I}createString(A){if(!A)return 0;let I;if(A instanceof Uint8Array)I=A;else{I=[];let g=0;for(;g<A.length;){let Q;const C=A.charCodeAt(g++);if(C<55296||C>=56320)Q=C;else{const E=A.charCodeAt(g++);Q=(C<<10)+E+-56613888}Q<128?I.push(Q):(Q<2048?I.push(Q>>6&31|192):(Q<65536?I.push(Q>>12&15|224):I.push(Q>>18&7|240,Q>>12&63|128),I.push(Q>>6&63|128)),I.push(Q&63|128))}}this.addInt8(0),this.startVector(1,I.length,1),this.bb.setPosition(this.space-=I.length);for(let g=0,Q=this.space,C=this.bb.bytes();g<I.length;g++)C[Q++]=I[g];return this.endVector()}createLong(A,I){return fg.create(A,I)}createObjectOffset(A){return A===null?0:typeof A=="string"?this.createString(A):A.pack(this)}createObjectOffsetList(A){const I=[];for(let g=0;g<A.length;++g){const Q=A[g];if(Q!==null)I.push(this.createObjectOffset(Q));else throw new Error("FlatBuffers: Argument for createObjectOffsetList cannot contain null.")}return I}createStructOffsetList(A,I){return I(this,A.length),this.createObjectOffsetList(A),this.endVector()}}const _A={ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function nt(B){const A=await fetch(B);if(A.ok)return A.json();throw new Error(A.statusText)}async function ne(B){return await nt(`${B}/profilesList.json`)}async function he(B,A,I=null,g=!0){if(!B)throw new Error("No xrInputSource supplied");const Q=await ne(A);let C;if(B.profiles.some(D=>{const o=Q[D];return o&&(C={profileId:D,profilePath:`${A}/${o.path}`,deprecated:!!o.deprecated}),!!C}),!C){if(!I)throw new Error("No matching profile name found");const D=Q[I];if(!D)throw new Error(`No matching profile name found and default profile "${I}" missing.`);C={profileId:I,profilePath:`${A}/${D.path}`,deprecated:!!D.deprecated}}const E=await nt(C.profilePath);let i;if(g){let D;if(B.handedness==="any"?D=E.layouts[Object.keys(E.layouts)[0]]:D=E.layouts[B.handedness],!D)throw new Error(`No matching handedness, ${B.handedness}, in profile ${C.profileId}`);D.assetPath&&(i=C.profilePath.replace("profile.json",D.assetPath))}return{profile:E,assetPath:i}}const ye={xAxis:0,yAxis:0,button:0,state:_A.ComponentState.DEFAULT};function Ge(B=0,A=0){let I=B,g=A;if(Math.sqrt(B*B+A*A)>1){const E=Math.atan2(A,B);I=Math.cos(E),g=Math.sin(E)}return{normalizedXAxis:I*.5+.5,normalizedYAxis:g*.5+.5}}class re{constructor(A){this.componentProperty=A.componentProperty,this.states=A.states,this.valueNodeName=A.valueNodeName,this.valueNodeProperty=A.valueNodeProperty,this.valueNodeProperty===_A.VisualResponseProperty.TRANSFORM&&(this.minNodeName=A.minNodeName,this.maxNodeName=A.maxNodeName),this.value=0,this.updateFromComponent(ye)}updateFromComponent({xAxis:A,yAxis:I,button:g,state:Q}){const{normalizedXAxis:C,normalizedYAxis:E}=Ge(A,I);switch(this.componentProperty){case _A.ComponentProperty.X_AXIS:this.value=this.states.includes(Q)?C:.5;break;case _A.ComponentProperty.Y_AXIS:this.value=this.states.includes(Q)?E:.5;break;case _A.ComponentProperty.BUTTON:this.value=this.states.includes(Q)?g:0;break;case _A.ComponentProperty.STATE:this.valueNodeProperty===_A.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(Q):this.value=this.states.includes(Q)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class Se{constructor(A,I){if(!A||!I||!I.visualResponses||!I.gamepadIndices||Object.keys(I.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=A,this.type=I.type,this.rootNodeName=I.rootNodeName,this.touchPointNodeName=I.touchPointNodeName,this.visualResponses={},Object.keys(I.visualResponses).forEach(g=>{const Q=new re(I.visualResponses[g]);this.visualResponses[g]=Q}),this.gamepadIndices=Object.assign({},I.gamepadIndices),this.values={state:_A.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(A){if(this.values.state=_A.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&A.buttons.length>this.gamepadIndices.button){const I=A.buttons[this.gamepadIndices.button];this.values.button=I.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,I.pressed||this.values.button===1?this.values.state=_A.ComponentState.PRESSED:(I.touched||this.values.button>_A.ButtonTouchThreshold)&&(this.values.state=_A.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&A.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=A.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===_A.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>_A.AxisTouchThreshold&&(this.values.state=_A.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&A.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=A.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===_A.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>_A.AxisTouchThreshold&&(this.values.state=_A.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(I=>{I.updateFromComponent(this.values)})}}class Re{constructor(A,I,g){if(!A)throw new Error("No xrInputSource supplied");if(!I)throw new Error("No profile supplied");this.xrInputSource=A,this.assetUrl=g,this.id=I.profileId,this.layoutDescription=I.layouts[A.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(Q=>{const C=this.layoutDescription.components[Q];this.components[Q]=new Se(Q,C)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const A=[];return Object.values(this.components).forEach(I=>{A.push(I.data)}),A}updateFromGamepad(){Object.values(this.components).forEach(A=>{A.updateFromGamepad(this.xrInputSource.gamepad)})}}const sI=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Po=1234567;const ht=Math.PI/180,yt=180/Math.PI;function Fe(){const B=Math.random()*4294967295|0,A=Math.random()*4294967295|0,I=Math.random()*4294967295|0,g=Math.random()*4294967295|0;return(sI[B&255]+sI[B>>8&255]+sI[B>>16&255]+sI[B>>24&255]+"-"+sI[A&255]+sI[A>>8&255]+"-"+sI[A>>16&15|64]+sI[A>>24&255]+"-"+sI[I&63|128]+sI[I>>8&255]+"-"+sI[I>>16&255]+sI[I>>24&255]+sI[g&255]+sI[g>>8&255]+sI[g>>16&255]+sI[g>>24&255]).toLowerCase()}function cg(B,A,I){return Math.max(A,Math.min(I,B))}function Gt(B,A){return(B%A+A)%A}function ke(B,A,I,g,Q){return g+(B-A)*(Q-g)/(I-A)}function Me(B,A,I){return B!==A?(I-B)/(A-B):0}function rt(B,A,I){return(1-I)*B+I*A}function Ne(B,A,I,g){return rt(B,A,1-Math.exp(-I*g))}function Je(B,A=1){return A-Math.abs(Gt(B,A*2)-A)}function Ue(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*(3-2*B))}function Le(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*B*(B*(B*6-15)+10))}function He(B,A){return B+Math.floor(Math.random()*(A-B+1))}function Ye(B,A){return B+Math.random()*(A-B)}function Ke(B){return B*(.5-Math.random())}function de(B){B!==void 0&&(Po=B);let A=Po+=1831565813;return A=Math.imul(A^A>>>15,A|1),A^=A+Math.imul(A^A>>>7,A|61),((A^A>>>14)>>>0)/4294967296}function le(B){return B*ht}function fe(B){return B*yt}function xe(B){return(B&B-1)===0&&B!==0}function pe(B){return Math.pow(2,Math.ceil(Math.log(B)/Math.LN2))}function ue(B){return Math.pow(2,Math.floor(Math.log(B)/Math.LN2))}function qe(B,A,I,g,Q){const C=Math.cos,E=Math.sin,i=C(I/2),D=E(I/2),o=C((A+g)/2),s=E((A+g)/2),t=C((A-g)/2),w=E((A-g)/2),a=C((g-A)/2),y=E((g-A)/2);switch(Q){case"XYX":B.set(i*s,D*t,D*w,i*o);break;case"YZY":B.set(D*w,i*s,D*t,i*o);break;case"ZXZ":B.set(D*t,D*w,i*s,i*o);break;case"XZX":B.set(i*s,D*y,D*a,i*o);break;case"YXY":B.set(D*a,i*s,D*y,i*o);break;case"ZYZ":B.set(D*y,D*a,i*s,i*o);break;default:console.warn("../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+Q)}}function be(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return B/4294967295;case Uint16Array:return B/65535;case Uint8Array:return B/255;case Int32Array:return Math.max(B/2147483647,-1);case Int16Array:return Math.max(B/32767,-1);case Int8Array:return Math.max(B/127,-1);default:throw new Error("Invalid component type.")}}function me(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return Math.round(B*4294967295);case Uint16Array:return Math.round(B*65535);case Uint8Array:return Math.round(B*255);case Int32Array:return Math.round(B*2147483647);case Int16Array:return Math.round(B*32767);case Int8Array:return Math.round(B*127);default:throw new Error("Invalid component type.")}}const QB={DEG2RAD:ht,RAD2DEG:yt,generateUUID:Fe,clamp:cg,euclideanModulo:Gt,mapLinear:ke,inverseLerp:Me,lerp:rt,damp:Ne,pingpong:Je,smoothstep:Ue,smootherstep:Le,randInt:He,randFloat:Ye,randFloatSpread:Ke,seededRandom:de,degToRad:le,radToDeg:fe,isPowerOfTwo:xe,ceilPowerOfTwo:pe,floorPowerOfTwo:ue,setQuaternionFromProperEuler:qe,normalize:me,denormalize:be};class hA{constructor(A=0,I=0,g=0,Q=1){this.isQuaternion=!0,this._x=A,this._y=I,this._z=g,this._w=Q}static slerpFlat(A,I,g,Q,C,E,i){let D=g[Q+0],o=g[Q+1],s=g[Q+2],t=g[Q+3];const w=C[E+0],a=C[E+1],y=C[E+2],R=C[E+3];if(i===0){A[I+0]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t;return}if(i===1){A[I+0]=w,A[I+1]=a,A[I+2]=y,A[I+3]=R;return}if(t!==R||D!==w||o!==a||s!==y){let n=1-i;const h=D*w+o*a+s*y+t*R,G=h>=0?1:-1,r=1-h*h;if(r>Number.EPSILON){const k=Math.sqrt(r),J=Math.atan2(k,h*G);n=Math.sin(n*J)/k,i=Math.sin(i*J)/k}const M=i*G;if(D=D*n+w*M,o=o*n+a*M,s=s*n+y*M,t=t*n+R*M,n===1-i){const k=1/Math.sqrt(D*D+o*o+s*s+t*t);D*=k,o*=k,s*=k,t*=k}}A[I]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t}static multiplyQuaternionsFlat(A,I,g,Q,C,E){const i=g[Q],D=g[Q+1],o=g[Q+2],s=g[Q+3],t=C[E],w=C[E+1],a=C[E+2],y=C[E+3];return A[I]=i*y+s*t+D*a-o*w,A[I+1]=D*y+s*w+o*t-i*a,A[I+2]=o*y+s*a+i*w-D*t,A[I+3]=s*y-i*t-D*w-o*a,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,I,g,Q){return this._x=A,this._y=I,this._z=g,this._w=Q,this._onChangeCallback(),this}clone(){return new hA(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,I=!0){const g=A._x,Q=A._y,C=A._z,E=A._order,i=Math.cos,D=Math.sin,o=i(g/2),s=i(Q/2),t=i(C/2),w=D(g/2),a=D(Q/2),y=D(C/2);switch(E){case"XYZ":this._x=w*s*t+o*a*y,this._y=o*a*t-w*s*y,this._z=o*s*y+w*a*t,this._w=o*s*t-w*a*y;break;case"YXZ":this._x=w*s*t+o*a*y,this._y=o*a*t-w*s*y,this._z=o*s*y-w*a*t,this._w=o*s*t+w*a*y;break;case"ZXY":this._x=w*s*t-o*a*y,this._y=o*a*t+w*s*y,this._z=o*s*y+w*a*t,this._w=o*s*t-w*a*y;break;case"ZYX":this._x=w*s*t-o*a*y,this._y=o*a*t+w*s*y,this._z=o*s*y-w*a*t,this._w=o*s*t+w*a*y;break;case"YZX":this._x=w*s*t+o*a*y,this._y=o*a*t+w*s*y,this._z=o*s*y-w*a*t,this._w=o*s*t-w*a*y;break;case"XZY":this._x=w*s*t-o*a*y,this._y=o*a*t-w*s*y,this._z=o*s*y+w*a*t,this._w=o*s*t+w*a*y;break;default:console.warn("../math.Quaternion: .setFromEuler() encountered an unknown order: "+E)}return I===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,I){const g=I/2,Q=Math.sin(g);return this._x=A.x*Q,this._y=A.y*Q,this._z=A.z*Q,this._w=Math.cos(g),this._onChangeCallback(),this}setFromRotationMatrix(A){const I=A.elements,g=I[0],Q=I[4],C=I[8],E=I[1],i=I[5],D=I[9],o=I[2],s=I[6],t=I[10],w=g+i+t;if(w>0){const a=.5/Math.sqrt(w+1);this._w=.25/a,this._x=(s-D)*a,this._y=(C-o)*a,this._z=(E-Q)*a}else if(g>i&&g>t){const a=2*Math.sqrt(1+g-i-t);this._w=(s-D)/a,this._x=.25*a,this._y=(Q+E)/a,this._z=(C+o)/a}else if(i>t){const a=2*Math.sqrt(1+i-g-t);this._w=(C-o)/a,this._x=(Q+E)/a,this._y=.25*a,this._z=(D+s)/a}else{const a=2*Math.sqrt(1+t-g-i);this._w=(E-Q)/a,this._x=(C+o)/a,this._y=(D+s)/a,this._z=.25*a}return this._onChangeCallback(),this}setFromUnitVectors(A,I){let g=A.dot(I)+1;return g<Number.EPSILON?(g=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=g):(this._x=0,this._y=-A.z,this._z=A.y,this._w=g)):(this._x=A.y*I.z-A.z*I.y,this._y=A.z*I.x-A.x*I.z,this._z=A.x*I.y-A.y*I.x,this._w=g),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(cg(this.dot(A),-1,1)))}rotateTowards(A,I){const g=this.angleTo(A);if(g===0)return this;const Q=Math.min(1,I/g);return this.slerp(A,Q),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,I){const g=A._x,Q=A._y,C=A._z,E=A._w,i=I._x,D=I._y,o=I._z,s=I._w;return this._x=g*s+E*i+Q*o-C*D,this._y=Q*s+E*D+C*i-g*o,this._z=C*s+E*o+g*D-Q*i,this._w=E*s-g*i-Q*D-C*o,this._onChangeCallback(),this}slerp(A,I){if(I===0)return this;if(I===1)return this.copy(A);const g=this._x,Q=this._y,C=this._z,E=this._w;let i=E*A._w+g*A._x+Q*A._y+C*A._z;if(i<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,i=-i):this.copy(A),i>=1)return this._w=E,this._x=g,this._y=Q,this._z=C,this;const D=1-i*i;if(D<=Number.EPSILON){const a=1-I;return this._w=a*E+I*this._w,this._x=a*g+I*this._x,this._y=a*Q+I*this._y,this._z=a*C+I*this._z,this.normalize(),this}const o=Math.sqrt(D),s=Math.atan2(o,i),t=Math.sin((1-I)*s)/o,w=Math.sin(I*s)/o;return this._w=E*t+this._w*w,this._x=g*t+this._x*w,this._y=Q*t+this._y*w,this._z=C*t+this._z*w,this._onChangeCallback(),this}slerpQuaternions(A,I,g){return this.copy(A).slerp(I,g)}random(){const A=2*Math.PI*Math.random(),I=2*Math.PI*Math.random(),g=Math.random(),Q=Math.sqrt(1-g),C=Math.sqrt(g);return this.set(Q*Math.sin(A),Q*Math.cos(A),C*Math.sin(I),C*Math.cos(I))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,I=0){return this._x=A[I],this._y=A[I+1],this._z=A[I+2],this._w=A[I+3],this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._w,A}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class v{constructor(A=0,I=0,g=0){this.isVector3=!0,v.prototype.isVector3=!0,this.x=A,this.y=I,this.z=g}set(A,I,g){return g===void 0&&(g=this.z),this.x=A,this.y=I,this.z=g,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new v(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,I){return this.x=A.x*I.x,this.y=A.y*I.y,this.z=A.z*I.z,this}applyEuler(A){return this.applyQuaternion(To.setFromEuler(A))}applyAxisAngle(A,I){return this.applyQuaternion(To.setFromAxisAngle(A,I))}applyMatrix3(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[3]*g+C[6]*Q,this.y=C[1]*I+C[4]*g+C[7]*Q,this.z=C[2]*I+C[5]*g+C[8]*Q,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=A.elements,E=1/(C[3]*I+C[7]*g+C[11]*Q+C[15]);return this.x=(C[0]*I+C[4]*g+C[8]*Q+C[12])*E,this.y=(C[1]*I+C[5]*g+C[9]*Q+C[13])*E,this.z=(C[2]*I+C[6]*g+C[10]*Q+C[14])*E,this}applyQuaternion(A){const I=this.x,g=this.y,Q=this.z,C=A.x,E=A.y,i=A.z,D=A.w,o=2*(E*Q-i*g),s=2*(i*I-C*Q),t=2*(C*g-E*I);return this.x=I+D*o+E*t-i*s,this.y=g+D*s+i*o-C*t,this.z=Q+D*t+C*s-E*o,this}transformDirection(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[4]*g+C[8]*Q,this.y=C[1]*I+C[5]*g+C[9]*Q,this.z=C[2]*I+C[6]*g+C[10]*Q,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,I){const g=A.x,Q=A.y,C=A.z,E=I.x,i=I.y,D=I.z;return this.x=Q*D-C*i,this.y=C*E-g*D,this.z=g*i-Q*E,this}projectOnVector(A){const I=A.lengthSq();if(I===0)return this.set(0,0,0);const g=A.dot(this)/I;return this.copy(A).multiplyScalar(g)}projectOnPlane(A){return hi.copy(this).projectOnVector(A),this.sub(hi)}reflect(A){return this.sub(hi.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(cg(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y,Q=this.z-A.z;return I*I+g*g+Q*Q}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSphericalCoords(A,I,g){const Q=Math.sin(I)*A;return this.x=Q*Math.sin(g),this.y=Math.cos(I)*A,this.z=Q*Math.cos(g),this}setFromCylindricalCoords(A,I,g){return this.x=A*Math.sin(I),this.y=g,this.z=A*Math.cos(I),this}setFromMatrixPosition(A){const I=A.elements;return this.x=I[12],this.y=I[13],this.z=I[14],this}setFromMatrixScale(A){const I=this.setFromMatrixColumn(A,0).length(),g=this.setFromMatrixColumn(A,1).length(),Q=this.setFromMatrixColumn(A,2).length();return this.x=I,this.y=g,this.z=Q,this}setFromMatrixColumn(A,I){return this.fromArray(A.elements,I*4)}setFromMatrix3Column(A,I){return this.fromArray(A.elements,I*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,I=Math.random()*2-1,g=Math.sqrt(1-I*I);return this.x=g*Math.cos(A),this.y=I,this.z=g*Math.sin(A),this}abs(){return this.x=Math.abs(this.x),this.y=Math.abs(this.y),this.z=Math.abs(this.z),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const hi=new v,To=new hA,pC=2e3,Oo=2001;class tg{constructor(A,I,g,Q,C,E,i,D,o,s,t,w,a,y,R,n){this.isMatrix4=!0,tg.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,E,i,D,o,s,t,w,a,y,R,n)}extractPosition(A){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(A)}multiplyToArray(A,I,g){return console.error("THREE.Matrix4: .multiplyToArray() has been removed."),this}setRotationFromQuaternion(A){return this.makeRotationFromQuaternion(A)}set(A,I,g,Q,C,E,i,D,o,s,t,w,a,y,R,n){const h=this.elements;return h[0]=A,h[4]=I,h[8]=g,h[12]=Q,h[1]=C,h[5]=E,h[9]=i,h[13]=D,h[2]=o,h[6]=s,h[10]=t,h[14]=w,h[3]=a,h[7]=y,h[11]=R,h[15]=n,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new tg().fromArray(this.elements)}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],I[9]=g[9],I[10]=g[10],I[11]=g[11],I[12]=g[12],I[13]=g[13],I[14]=g[14],I[15]=g[15],this}copyPosition(A){const I=this.elements,g=A.elements;return I[12]=g[12],I[13]=g[13],I[14]=g[14],this}setFromMatrix3(A){const I=A.elements;return this.set(I[0],I[3],I[6],0,I[1],I[4],I[7],0,I[2],I[5],I[8],0,0,0,0,1),this}extractBasis(A,I,g){return A.setFromMatrixColumn(this,0),I.setFromMatrixColumn(this,1),g.setFromMatrixColumn(this,2),this}makeBasis(A,I,g){return this.set(A.x,I.x,g.x,0,A.y,I.y,g.y,0,A.z,I.z,g.z,0,0,0,0,1),this}extractRotation(A){const I=this.elements,g=A.elements,Q=1/UQ.setFromMatrixColumn(A,0).length(),C=1/UQ.setFromMatrixColumn(A,1).length(),E=1/UQ.setFromMatrixColumn(A,2).length();return I[0]=g[0]*Q,I[1]=g[1]*Q,I[2]=g[2]*Q,I[3]=0,I[4]=g[4]*C,I[5]=g[5]*C,I[6]=g[6]*C,I[7]=0,I[8]=g[8]*E,I[9]=g[9]*E,I[10]=g[10]*E,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromEuler(A){const I=this.elements,g=A.x,Q=A.y,C=A.z,E=Math.cos(g),i=Math.sin(g),D=Math.cos(Q),o=Math.sin(Q),s=Math.cos(C),t=Math.sin(C);if(A.order==="XYZ"){const w=E*s,a=E*t,y=i*s,R=i*t;I[0]=D*s,I[4]=-D*t,I[8]=o,I[1]=a+y*o,I[5]=w-R*o,I[9]=-i*D,I[2]=R-w*o,I[6]=y+a*o,I[10]=E*D}else if(A.order==="YXZ"){const w=D*s,a=D*t,y=o*s,R=o*t;I[0]=w+R*i,I[4]=y*i-a,I[8]=E*o,I[1]=E*t,I[5]=E*s,I[9]=-i,I[2]=a*i-y,I[6]=R+w*i,I[10]=E*D}else if(A.order==="ZXY"){const w=D*s,a=D*t,y=o*s,R=o*t;I[0]=w-R*i,I[4]=-E*t,I[8]=y+a*i,I[1]=a+y*i,I[5]=E*s,I[9]=R-w*i,I[2]=-E*o,I[6]=i,I[10]=E*D}else if(A.order==="ZYX"){const w=E*s,a=E*t,y=i*s,R=i*t;I[0]=D*s,I[4]=y*o-a,I[8]=w*o+R,I[1]=D*t,I[5]=R*o+w,I[9]=a*o-y,I[2]=-o,I[6]=i*D,I[10]=E*D}else if(A.order==="YZX"){const w=E*D,a=E*o,y=i*D,R=i*o;I[0]=D*s,I[4]=R-w*t,I[8]=y*t+a,I[1]=t,I[5]=E*s,I[9]=-i*s,I[2]=-o*s,I[6]=a*t+y,I[10]=w-R*t}else if(A.order==="XZY"){const w=E*D,a=E*o,y=i*D,R=i*o;I[0]=D*s,I[4]=-t,I[8]=o*s,I[1]=w*t+R,I[5]=E*s,I[9]=a*t-y,I[2]=y*t-a,I[6]=i*s,I[10]=R*t+w}return I[3]=0,I[7]=0,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromQuaternion(A){return this.compose(Pe,A,Te)}lookAt(A,I,g){const Q=this.elements;return xI.subVectors(A,I),xI.lengthSq()===0&&(xI.z=1),xI.normalize(),bg.crossVectors(g,xI),bg.lengthSq()===0&&(Math.abs(g.z)===1?xI.x+=1e-4:xI.z+=1e-4,xI.normalize(),bg.crossVectors(g,xI)),bg.normalize(),uC.crossVectors(xI,bg),Q[0]=bg.x,Q[4]=uC.x,Q[8]=xI.x,Q[1]=bg.y,Q[5]=uC.y,Q[9]=xI.y,Q[2]=bg.z,Q[6]=uC.z,Q[10]=xI.z,this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,E=g[0],i=g[4],D=g[8],o=g[12],s=g[1],t=g[5],w=g[9],a=g[13],y=g[2],R=g[6],n=g[10],h=g[14],G=g[3],r=g[7],M=g[11],k=g[15],J=Q[0],U=Q[4],Y=Q[8],d=Q[12],H=Q[1],f=Q[5],l=Q[9],p=Q[13],q=Q[2],m=Q[6],T=Q[10],Z=Q[14],O=Q[3],j=Q[7],gA=Q[11],QA=Q[15];return C[0]=E*J+i*H+D*q+o*O,C[4]=E*U+i*f+D*m+o*j,C[8]=E*Y+i*l+D*T+o*gA,C[12]=E*d+i*p+D*Z+o*QA,C[1]=s*J+t*H+w*q+a*O,C[5]=s*U+t*f+w*m+a*j,C[9]=s*Y+t*l+w*T+a*gA,C[13]=s*d+t*p+w*Z+a*QA,C[2]=y*J+R*H+n*q+h*O,C[6]=y*U+R*f+n*m+h*j,C[10]=y*Y+R*l+n*T+h*gA,C[14]=y*d+R*p+n*Z+h*QA,C[3]=G*J+r*H+M*q+k*O,C[7]=G*U+r*f+M*m+k*j,C[11]=G*Y+r*l+M*T+k*gA,C[15]=G*d+r*p+M*Z+k*QA,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[4]*=A,I[8]*=A,I[12]*=A,I[1]*=A,I[5]*=A,I[9]*=A,I[13]*=A,I[2]*=A,I[6]*=A,I[10]*=A,I[14]*=A,I[3]*=A,I[7]*=A,I[11]*=A,I[15]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[4],Q=A[8],C=A[12],E=A[1],i=A[5],D=A[9],o=A[13],s=A[2],t=A[6],w=A[10],a=A[14],y=A[3],R=A[7],n=A[11],h=A[15];return y*(+C*D*t-Q*o*t-C*i*w+g*o*w+Q*i*a-g*D*a)+R*(+I*D*a-I*o*w+C*E*w-Q*E*a+Q*o*s-C*D*s)+n*(+I*o*t-I*i*a-C*E*t+g*E*a+C*i*s-g*o*s)+h*(-Q*i*s-I*D*t+I*i*w+Q*E*t-g*E*w+g*D*s)}transpose(){const A=this.elements;let I;return I=A[1],A[1]=A[4],A[4]=I,I=A[2],A[2]=A[8],A[8]=I,I=A[6],A[6]=A[9],A[9]=I,I=A[3],A[3]=A[12],A[12]=I,I=A[7],A[7]=A[13],A[13]=I,I=A[11],A[11]=A[14],A[14]=I,this}setPosition(A,I,g){const Q=this.elements;return A.isVector3?(Q[12]=A.x,Q[13]=A.y,Q[14]=A.z):(Q[12]=A,Q[13]=I,Q[14]=g),this}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],i=A[5],D=A[6],o=A[7],s=A[8],t=A[9],w=A[10],a=A[11],y=A[12],R=A[13],n=A[14],h=A[15],G=t*n*o-R*w*o+R*D*a-i*n*a-t*D*h+i*w*h,r=y*w*o-s*n*o-y*D*a+E*n*a+s*D*h-E*w*h,M=s*R*o-y*t*o+y*i*a-E*R*a-s*i*h+E*t*h,k=y*t*D-s*R*D-y*i*w+E*R*w+s*i*n-E*t*n,J=I*G+g*r+Q*M+C*k;if(J===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const U=1/J;return A[0]=G*U,A[1]=(R*w*C-t*n*C-R*Q*a+g*n*a+t*Q*h-g*w*h)*U,A[2]=(i*n*C-R*D*C+R*Q*o-g*n*o-i*Q*h+g*D*h)*U,A[3]=(t*D*C-i*w*C-t*Q*o+g*w*o+i*Q*a-g*D*a)*U,A[4]=r*U,A[5]=(s*n*C-y*w*C+y*Q*a-I*n*a-s*Q*h+I*w*h)*U,A[6]=(y*D*C-E*n*C-y*Q*o+I*n*o+E*Q*h-I*D*h)*U,A[7]=(E*w*C-s*D*C+s*Q*o-I*w*o-E*Q*a+I*D*a)*U,A[8]=M*U,A[9]=(y*t*C-s*R*C-y*g*a+I*R*a+s*g*h-I*t*h)*U,A[10]=(E*R*C-y*i*C+y*g*o-I*R*o-E*g*h+I*i*h)*U,A[11]=(s*i*C-E*t*C-s*g*o+I*t*o+E*g*a-I*i*a)*U,A[12]=k*U,A[13]=(s*R*Q-y*t*Q+y*g*w-I*R*w-s*g*n+I*t*n)*U,A[14]=(y*i*Q-E*R*Q-y*g*D+I*R*D+E*g*n-I*i*n)*U,A[15]=(E*t*Q-s*i*Q+s*g*D-I*t*D-E*g*w+I*i*w)*U,this}scale(A){const I=this.elements,g=A.x,Q=A.y,C=A.z;return I[0]*=g,I[4]*=Q,I[8]*=C,I[1]*=g,I[5]*=Q,I[9]*=C,I[2]*=g,I[6]*=Q,I[10]*=C,I[3]*=g,I[7]*=Q,I[11]*=C,this}getMaxScaleOnAxis(){const A=this.elements,I=A[0]*A[0]+A[1]*A[1]+A[2]*A[2],g=A[4]*A[4]+A[5]*A[5]+A[6]*A[6],Q=A[8]*A[8]+A[9]*A[9]+A[10]*A[10];return Math.sqrt(Math.max(I,g,Q))}makeTranslation(A,I,g){return A.isVector3?this.set(1,0,0,A.x,0,1,0,A.y,0,0,1,A.z,0,0,0,1):this.set(1,0,0,A,0,1,0,I,0,0,1,g,0,0,0,1),this}makeRotationX(A){const I=Math.cos(A),g=Math.sin(A);return this.set(1,0,0,0,0,I,-g,0,0,g,I,0,0,0,0,1),this}makeRotationY(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,0,g,0,0,1,0,0,-g,0,I,0,0,0,0,1),this}makeRotationZ(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,0,g,I,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(A,I){const g=Math.cos(I),Q=Math.sin(I),C=1-g,E=A.x,i=A.y,D=A.z,o=C*E,s=C*i;return this.set(o*E+g,o*i-Q*D,o*D+Q*i,0,o*i+Q*D,s*i+g,s*D-Q*E,0,o*D-Q*i,s*D+Q*E,C*D*D+g,0,0,0,0,1),this}makeScale(A,I,g){return this.set(A,0,0,0,0,I,0,0,0,0,g,0,0,0,0,1),this}makeShear(A,I,g,Q,C,E){return this.set(1,g,C,0,A,1,E,0,I,Q,1,0,0,0,0,1),this}compose(A,I,g){const Q=this.elements,C=I._x,E=I._y,i=I._z,D=I._w,o=C+C,s=E+E,t=i+i,w=C*o,a=C*s,y=C*t,R=E*s,n=E*t,h=i*t,G=D*o,r=D*s,M=D*t,k=g.x,J=g.y,U=g.z;return Q[0]=(1-(R+h))*k,Q[1]=(a+M)*k,Q[2]=(y-r)*k,Q[3]=0,Q[4]=(a-M)*J,Q[5]=(1-(w+h))*J,Q[6]=(n+G)*J,Q[7]=0,Q[8]=(y+r)*U,Q[9]=(n-G)*U,Q[10]=(1-(w+R))*U,Q[11]=0,Q[12]=A.x,Q[13]=A.y,Q[14]=A.z,Q[15]=1,this}decompose(A,I,g){const Q=this.elements;let C=UQ.set(Q[0],Q[1],Q[2]).length();const E=UQ.set(Q[4],Q[5],Q[6]).length(),i=UQ.set(Q[8],Q[9],Q[10]).length();this.determinant()<0&&(C=-C),A.x=Q[12],A.y=Q[13],A.z=Q[14],gg.copy(this);const o=1/C,s=1/E,t=1/i;return gg.elements[0]*=o,gg.elements[1]*=o,gg.elements[2]*=o,gg.elements[4]*=s,gg.elements[5]*=s,gg.elements[6]*=s,gg.elements[8]*=t,gg.elements[9]*=t,gg.elements[10]*=t,I.setFromRotationMatrix(gg),g.x=C,g.y=E,g.z=i,this}makePerspective(A,I,g,Q,C,E,i=pC){const D=this.elements,o=2*C/(I-A),s=2*C/(g-Q),t=(I+A)/(I-A),w=(g+Q)/(g-Q);let a,y;if(i===pC)a=-(E+C)/(E-C),y=-2*E*C/(E-C);else if(i===Oo)a=-E/(E-C),y=-E*C/(E-C);else throw new Error("Matrix4.makePerspective(): Invalid coordinate system: "+i);return D[0]=o,D[4]=0,D[8]=t,D[12]=0,D[1]=0,D[5]=s,D[9]=w,D[13]=0,D[2]=0,D[6]=0,D[10]=a,D[14]=y,D[3]=0,D[7]=0,D[11]=-1,D[15]=0,this}makeOrthographic(A,I,g,Q,C,E,i=pC){const D=this.elements,o=1/(I-A),s=1/(g-Q),t=1/(E-C),w=(I+A)*o,a=(g+Q)*s;let y,R;if(i===pC)y=(E+C)*t,R=-2*t;else if(i===Oo)y=C*t,R=-1*t;else throw new Error("../math.Matrix4.makeOrthographic(): Invalid coordinate system: "+i);return D[0]=2*o,D[4]=0,D[8]=0,D[12]=-w,D[1]=0,D[5]=2*s,D[9]=0,D[13]=-a,D[2]=0,D[6]=0,D[10]=R,D[14]=-y,D[3]=0,D[7]=0,D[11]=0,D[15]=1,this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<16;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<16;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A[I+9]=g[9],A[I+10]=g[10],A[I+11]=g[11],A[I+12]=g[12],A[I+13]=g[13],A[I+14]=g[14],A[I+15]=g[15],A}}const UQ=new v,gg=new tg,Pe=new v(0,0,0),Te=new v(1,1,1),bg=new v,uC=new v,xI=new v,Xo=new tg,vo=new hA;class PB{constructor(A=0,I=0,g=0,Q=PB.DEFAULT_ORDER){this.isEuler=!0,this._x=A,this._y=I,this._z=g,this._order=Q}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get order(){return this._order}set order(A){this._order=A,this._onChangeCallback()}set(A,I,g,Q=this._order){return this._x=A,this._y=I,this._z=g,this._order=Q,this._onChangeCallback(),this}clone(){return new PB(this._x,this._y,this._z,this._order)}copy(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this}setFromRotationMatrix(A,I=this._order,g=!0){const Q=A.elements,C=Q[0],E=Q[4],i=Q[8],D=Q[1],o=Q[5],s=Q[9],t=Q[2],w=Q[6],a=Q[10];switch(I){case"XYZ":this._y=Math.asin(cg(i,-1,1)),Math.abs(i)<.9999999?(this._x=Math.atan2(-s,a),this._z=Math.atan2(-E,C)):(this._x=Math.atan2(w,o),this._z=0);break;case"YXZ":this._x=Math.asin(-cg(s,-1,1)),Math.abs(s)<.9999999?(this._y=Math.atan2(i,a),this._z=Math.atan2(D,o)):(this._y=Math.atan2(-t,C),this._z=0);break;case"ZXY":this._x=Math.asin(cg(w,-1,1)),Math.abs(w)<.9999999?(this._y=Math.atan2(-t,a),this._z=Math.atan2(-E,o)):(this._y=0,this._z=Math.atan2(D,C));break;case"ZYX":this._y=Math.asin(-cg(t,-1,1)),Math.abs(t)<.9999999?(this._x=Math.atan2(w,a),this._z=Math.atan2(D,C)):(this._x=0,this._z=Math.atan2(-E,o));break;case"YZX":this._z=Math.asin(cg(D,-1,1)),Math.abs(D)<.9999999?(this._x=Math.atan2(-s,o),this._y=Math.atan2(-t,C)):(this._x=0,this._y=Math.atan2(i,a));break;case"XZY":this._z=Math.asin(-cg(E,-1,1)),Math.abs(E)<.9999999?(this._x=Math.atan2(w,o),this._y=Math.atan2(i,C)):(this._x=Math.atan2(-s,a),this._y=0);break;default:console.warn("../math.Euler: .setFromRotationMatrix() encountered an unknown order: "+I)}return this._order=I,g===!0&&this._onChangeCallback(),this}setFromQuaternion(A,I,g){return Xo.makeRotationFromQuaternion(A),this.setFromRotationMatrix(Xo,I,g)}setFromVector3(A,I=this._order){return this.set(A.x,A.y,A.z,I)}reorder(A){return vo.setFromEuler(this),this.setFromQuaternion(vo,A)}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order}fromArray(A){return this._x=A[0],this._y=A[1],this._z=A[2],A[3]!==void 0&&(this._order=A[3]),this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._order,A}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(A){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}PB.DEFAULT_ORDER="XYZ";class VQ{constructor(A=0,I=0){this.x=A,this.y=I}get width(){return this.x}set width(A){this.x=A}get height(){return this.y}set height(A){this.y=A}set(A,I){return this.x=A,this.y=I,this}setScalar(A){return this.x=A,this.y=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}}clone(){return new VQ(this.x,this.y)}copy(A){return this.x=A.x,this.y=A.y,this}add(A){return this.x+=A.x,this.y+=A.y,this}addScalar(A){return this.x+=A,this.y+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this}subScalar(A){return this.x-=A,this.y-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this}multiply(A){return this.x*=A.x,this.y*=A.y,this}multiplyScalar(A){return this.x*=A,this.y*=A,this}divide(A){return this.x/=A.x,this.y/=A.y,this}divideScalar(A){return this.multiplyScalar(1/A)}applyMatrix3(A){const I=this.x,g=this.y,Q=A.elements;return this.x=Q[0]*I+Q[3]*g+Q[6],this.y=Q[1]*I+Q[4]*g+Q[7],this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(A){return this.x*A.x+this.y*A.y}cross(A){return this.x*A.y-this.y*A.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(cg(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y;return I*I+g*g}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this}equals(A){return A.x===this.x&&A.y===this.y}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A}rotateAround(A,I){const g=Math.cos(I),Q=Math.sin(I),C=this.x-A.x,E=this.y-A.y;return this.x=C*g-E*Q+A.x,this.y=C*Q+E*g+A.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}VQ.isVector2=!0;class YI{constructor(A=0,I=0,g=0,Q=1){YI.prototype.isVector4=!0,this.x=A,this.y=I,this.z=g,this.w=Q}get width(){return this.z}set width(A){this.z=A}get height(){return this.w}set height(A){this.w=A}set(A,I,g,Q){return this.x=A,this.y=I,this.z=g,this.w=Q,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this.w=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setW(A){return this.w=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;case 3:this.w=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+A)}}clone(){return new YI(this.x,this.y,this.z,this.w)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this.w=A.w,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this.w=A.w+I.w,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this.w+=A.w*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this.w=A.w-I.w,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this.w*=A.w,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=this.w,E=A.elements;return this.x=E[0]*I+E[4]*g+E[8]*Q+E[12]*C,this.y=E[1]*I+E[5]*g+E[9]*Q+E[13]*C,this.z=E[2]*I+E[6]*g+E[10]*Q+E[14]*C,this.w=E[3]*I+E[7]*g+E[11]*Q+E[15]*C,this}divideScalar(A){return this.multiplyScalar(1/A)}setAxisAngleFromQuaternion(A){this.w=2*Math.acos(A.w);const I=Math.sqrt(1-A.w*A.w);return I<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=A.x/I,this.y=A.y/I,this.z=A.z/I),this}setAxisAngleFromRotationMatrix(A){let I,g,Q,C;const D=A.elements,o=D[0],s=D[4],t=D[8],w=D[1],a=D[5],y=D[9],R=D[2],n=D[6],h=D[10];if(Math.abs(s-w)<.01&&Math.abs(t-R)<.01&&Math.abs(y-n)<.01){if(Math.abs(s+w)<.1&&Math.abs(t+R)<.1&&Math.abs(y+n)<.1&&Math.abs(o+a+h-3)<.1)return this.set(1,0,0,0),this;I=Math.PI;const r=(o+1)/2,M=(a+1)/2,k=(h+1)/2,J=(s+w)/4,U=(t+R)/4,Y=(y+n)/4;return r>M&&r>k?r<.01?(g=0,Q=.707106781,C=.707106781):(g=Math.sqrt(r),Q=J/g,C=U/g):M>k?M<.01?(g=.707106781,Q=0,C=.707106781):(Q=Math.sqrt(M),g=J/Q,C=Y/Q):k<.01?(g=.707106781,Q=.707106781,C=0):(C=Math.sqrt(k),g=U/C,Q=Y/C),this.set(g,Q,C,I),this}let G=Math.sqrt((n-y)*(n-y)+(t-R)*(t-R)+(w-s)*(w-s));return Math.abs(G)<.001&&(G=1),this.x=(n-y)/G,this.y=(t-R)/G,this.z=(w-s)/G,this.w=Math.acos((o+a+h-1)/2),this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this.w=Math.min(this.w,A.w),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this.w=Math.max(this.w,A.w),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this.w=Math.max(A.w,Math.min(I.w,this.w)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this.w=Math.max(A,Math.min(I,this.w)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z+this.w*A.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this.w+=(A.w-this.w)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this.w=A.w+(I.w-A.w)*g,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this.w=A[I+3],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A[I+3]=this.w,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class yg{constructor(A,I,g,Q,C,E,i,D,o){yg.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,E,i,D,o)}set(A,I,g,Q,C,E,i,D,o){const s=this.elements;return s[0]=A,s[1]=Q,s[2]=i,s[3]=I,s[4]=C,s[5]=D,s[6]=g,s[7]=E,s[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],this}extractBasis(A,I,g){return A.setFromMatrix3Column(this,0),I.setFromMatrix3Column(this,1),g.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const I=A.elements;return this.set(I[0],I[4],I[8],I[1],I[5],I[9],I[2],I[6],I[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,E=g[0],i=g[3],D=g[6],o=g[1],s=g[4],t=g[7],w=g[2],a=g[5],y=g[8],R=Q[0],n=Q[3],h=Q[6],G=Q[1],r=Q[4],M=Q[7],k=Q[2],J=Q[5],U=Q[8];return C[0]=E*R+i*G+D*k,C[3]=E*n+i*r+D*J,C[6]=E*h+i*M+D*U,C[1]=o*R+s*G+t*k,C[4]=o*n+s*r+t*J,C[7]=o*h+s*M+t*U,C[2]=w*R+a*G+y*k,C[5]=w*n+a*r+y*J,C[8]=w*h+a*M+y*U,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[3]*=A,I[6]*=A,I[1]*=A,I[4]*=A,I[7]*=A,I[2]*=A,I[5]*=A,I[8]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],i=A[5],D=A[6],o=A[7],s=A[8];return I*E*s-I*i*o-g*C*s+g*i*D+Q*C*o-Q*E*D}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],i=A[5],D=A[6],o=A[7],s=A[8],t=s*E-i*o,w=i*D-s*C,a=o*C-E*D,y=I*t+g*w+Q*a;if(y===0)return this.set(0,0,0,0,0,0,0,0,0);const R=1/y;return A[0]=t*R,A[1]=(Q*o-s*g)*R,A[2]=(i*g-Q*E)*R,A[3]=w*R,A[4]=(s*I-Q*D)*R,A[5]=(Q*C-i*I)*R,A[6]=a*R,A[7]=(g*D-o*I)*R,A[8]=(E*I-g*C)*R,this}transpose(){let A;const I=this.elements;return A=I[1],I[1]=I[3],I[3]=A,A=I[2],I[2]=I[6],I[6]=A,A=I[5],I[5]=I[7],I[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const I=this.elements;return A[0]=I[0],A[1]=I[3],A[2]=I[6],A[3]=I[1],A[4]=I[4],A[5]=I[7],A[6]=I[2],A[7]=I[5],A[8]=I[8],this}setUvTransform(A,I,g,Q,C,E,i){const D=Math.cos(C),o=Math.sin(C);return this.set(g*D,g*o,-g*(D*E+o*i)+E+A,-Q*o,Q*D,-Q*(-o*E+D*i)+i+I,0,0,1),this}scale(A,I){return this.premultiply(yi.makeScale(A,I)),this}rotate(A){return this.premultiply(yi.makeRotation(-A)),this}translate(A,I){return this.premultiply(yi.makeTranslation(A,I)),this}makeTranslation(A,I){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,I,0,0,1),this}makeRotation(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,g,I,0,0,0,1),this}makeScale(A,I){return this.set(A,0,0,0,I,0,0,0,1),this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<9;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<9;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A}clone(){return new yg().fromArray(this.elements)}}const yi=new yg;var SI;(function(B){B[B.Random=0]="Random",B[B.Loop=1]="Loop",B[B.PingPong=2]="PingPong",B[B.Burst=3]="Burst"})(SI||(SI={}));function FC(B,A,I,g){let Q;switch(SI.Random===B?A=Math.random():SI.Burst===B&&g.isBursting&&(A=g.burstParticleIndex/g.burstParticleCount),I>0?Q=Math.floor(A/I)*I:Q=A,B){case SI.Loop:Q=Q%1;break;case SI.PingPong:Q=Math.abs(Q%2-1);break}return Q}class oQ{constructor(A,I,g,Q){this.p=[A,I,g,Q]}genValue(A){const I=A*A,g=A*A*A,Q=1-A,C=Q*Q,E=C*Q;return this.p[0]*E+this.p[1]*C*A*3+this.p[2]*Q*I*3+this.p[3]*g}derivativeCoefficients(A){const I=[];for(let g=A,Q=g.length-1;Q>0;Q--){const C=[];for(let E=0;E<Q;E++){const i=Q*(g[E+1]-g[E]);C.push(i)}I.push(C),g=C}return I}getSlope(A){const I=this.derivativeCoefficients(this.p)[0],g=1-A,Q=g*g,C=g*A*2,E=A*A;return Q*I[0]+C*I[1]+E*I[2]}controlCurve(A,I){this.p[1]=A/3+this.p[0],this.p[2]=this.p[3]-I/3}hull(A){let I=this.p,g=[],Q,C=0,E=0,i=0;const D=[];for(D[C++]=I[0],D[C++]=I[1],D[C++]=I[2],D[C++]=I[3];I.length>1;){for(g=[],E=0,i=I.length-1;E<i;E++)Q=A*I[E]+(1-A)*I[E+1],D[C++]=Q,g.push(Q);I=g}return D}split(A){const I=this.hull(A);return{left:new oQ(I[0],I[4],I[7],I[9]),right:new oQ(I[9],I[8],I[6],I[3]),span:I}}clone(){return new oQ(this.p[0],this.p[1],this.p[2],this.p[3])}toJSON(){return{p0:this.p[0],p1:this.p[1],p2:this.p[2],p3:this.p[3]}}static fromJSON(A){return new oQ(A.p0,A.p1,A.p2,A.p3)}}const TB=B=>({r:B.x,g:B.y,b:B.z,a:B.w}),OB=B=>new YI(B.r,B.g,B.b,B.a),Oe=(B,A)=>{switch(A){case"Vector3":return new v(B.x,B.y,B.z);case"Vector4":return new YI(B.x,B.y,B.z,B.w);case"Color":return new v(B.r,B.g,B.b);case"Number":return B;default:return B}},Xe=(B,A)=>{switch(A){case"Vector3":return{x:B.x,y:B.y,z:B.z};case"Vector4":return{x:B.x,y:B.y,z:B.z,w:B.w};case"Color":return{r:B.x,g:B.y,b:B.z};case"Number":return B;default:return B}};class FE{constructor(A,I){this.a=A,this.b=I,this.type="value"}startGen(A){}genColor(A,I){const g=Math.random();return I.copy(this.a).lerp(this.b,g)}toJSON(){return{type:"RandomColor",a:TB(this.a),b:TB(this.b)}}static fromJSON(A){return new FE(OB(A.a),OB(A.b))}clone(){return new FE(this.a.clone(),this.b.clone())}}class ZQ{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I){return this.indexCount===-1&&this.startGen(A),I.copy(this.a).lerp(this.b,A[this.indexCount])}toJSON(){return{type:"ColorRange",a:TB(this.a),b:TB(this.b)}}static fromJSON(A){return new ZQ(OB(A.a),OB(A.b))}clone(){return new ZQ(this.a.clone(),this.b.clone())}}class vg{constructor(A,I){this.subType=I,this.type="function",this.keys=A}findKey(A){let I=0,g=0,Q=this.keys.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.getStartX(C)&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.keys[A][1]}getEndX(A){return A+1<this.keys.length?this.keys[A+1][1]:1}genValue(A,I){const g=this.findKey(I);return this.subType==="Number"?g===-1?this.keys[0][0]:g+1>=this.keys.length?this.keys[this.keys.length-1][0]:(this.keys[g+1][0]-this.keys[g][0])*((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))+this.keys[g][0]:g===-1?A.copy(this.keys[0][0]):g+1>=this.keys.length?A.copy(this.keys[this.keys.length-1][0]):A.copy(this.keys[g][0]).lerp(this.keys[g+1][0],(I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toJSON(){return this.keys[0][0].constructor.name,{type:"CLinearFunction",subType:this.subType,keys:this.keys.map(([A,I])=>({value:Xe(A,this.subType),pos:I}))}}static fromJSON(A){return new vg(A.keys.map(I=>[Oe(I.value,A.subType),I.pos]),A.subType)}clone(){return this.subType==="Number"?new vg(this.keys.map(([A,I])=>[A,I]),this.subType):new vg(this.keys.map(([A,I])=>[A.clone(),I]),this.subType)}}const qC=new v;class cQ{constructor(A=[[new v(0,0,0),0],[new v(1,1,1),0]],I=[[1,0],[1,1]]){this.type="function",this.color=new vg(A,"Color"),this.alpha=new vg(I,"Number")}genColor(A,I,g){return this.color.genValue(qC,g),I.set(qC.x,qC.y,qC.z,this.alpha.genValue(1,g))}toJSON(){return{type:"Gradient",color:this.color.toJSON(),alpha:this.alpha.toJSON()}}static fromJSON(A){if(A.functions){const I=A.functions.map(g=>[ZQ.fromJSON(g.function).a,g.start]);return A.functions.length>0&&I.push([ZQ.fromJSON(A.functions[A.functions.length-1].function).b,1]),new cQ(I.map(g=>[new v(g[0].x,g[0].y,g[0].z),g[1]]),I.map(g=>[g[0].w,g[1]]))}else{const I=new cQ;return I.alpha=vg.fromJSON(A.alpha),I.color=vg.fromJSON(A.color),I}}clone(){const A=new cQ;return A.alpha=this.alpha.clone(),A.color=this.color.clone(),A}startGen(A){}}const Gi=new YI;class kE{constructor(A,I){this.indexCount=0,this.type="function",this.gradient1=A,this.gradient2=I}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I,g){return this.gradient1.genColor(A,I,g),this.gradient2.genColor(A,Gi,g),A&&A[this.indexCount]!==void 0?I.lerp(Gi,A[this.indexCount]):I.lerp(Gi,Math.random()),I}toJSON(){return{type:"RandomColorBetweenGradient",gradient1:this.gradient1.toJSON(),gradient2:this.gradient2.toJSON()}}static fromJSON(A){return new kE(cQ.fromJSON(A.gradient1),cQ.fromJSON(A.gradient2))}clone(){return new kE(this.gradient1.clone(),this.gradient2.clone())}}class hQ{constructor(A){this.color=A,this.type="value"}startGen(A){}genColor(A,I){return I.copy(this.color)}toJSON(){return{type:"ConstantColor",color:TB(this.color)}}static fromJSON(A){return new hQ(OB(A.color))}clone(){return new hQ(this.color.clone())}}function mD(B){switch(B.type){case"ConstantColor":return hQ.fromJSON(B);case"ColorRange":return ZQ.fromJSON(B);case"RandomColor":return FE.fromJSON(B);case"Gradient":return cQ.fromJSON(B);case"RandomColorBetweenGradient":return kE.fromJSON(B);default:return new hQ(new YI(1,1,1,1))}}class nA{constructor(A){this.value=A,this.type="value"}startGen(A){}genValue(A){return this.value}toJSON(){return{type:"ConstantValue",value:this.value}}static fromJSON(A){return new nA(A.value)}clone(){return new nA(this.value)}}class yQ{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genValue(A){return this.indexCount===-1&&this.startGen(A),QB.lerp(this.a,this.b,A[this.indexCount])}toJSON(){return{type:"IntervalValue",a:this.a,b:this.b}}static fromJSON(A){return new yQ(A.a,A.b)}clone(){return new yQ(this.a,this.b)}}class ve{constructor(){this.functions=new Array}findFunction(A){let I=0,g=0,Q=this.functions.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.functions[C][1]&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.functions[A][1]}setStartX(A,I){A>0&&(this.functions[A][1]=I)}getEndX(A){return A+1<this.functions.length?this.functions[A+1][1]:1}setEndX(A,I){A+1<this.functions.length&&(this.functions[A+1][1]=I)}insertFunction(A,I){const g=this.findFunction(A);this.functions.splice(g+1,0,[I,A])}removeFunction(A){return this.functions.splice(A,1)[0][0]}getFunction(A){return this.functions[A][0]}setFunction(A,I){this.functions[A][0]=I}get numOfFunctions(){return this.functions.length}}class XB extends ve{constructor(A=[[new oQ(0,1/3,1/3*2,1),0]]){super(),this.type="function",this.functions=A}genValue(A,I=0){const g=this.findFunction(I);return g===-1?0:this.functions[g][0].genValue((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toSVG(A,I){if(I<1)return"";let g=["M",0,this.functions[0][0].p[0]].join(" ");for(let Q=1/I;Q<=1;Q+=1/I)g=[g,"L",Q*A,this.genValue(void 0,Q)].join(" ");return g}toJSON(){return{type:"PiecewiseBezier",functions:this.functions.map(([A,I])=>({function:A.toJSON(),start:I}))}}static fromJSON(A){return new XB(A.functions.map(I=>[oQ.fromJSON(I.function),I.start]))}clone(){return new XB(this.functions.map(([A,I])=>[A.clone(),I]))}startGen(A){}}function sA(B){switch(B.type){case"ConstantValue":return nA.fromJSON(B);case"IntervalValue":return yQ.fromJSON(B);case"PiecewiseBezier":return XB.fromJSON(B);default:return new nA(0)}}class vB{constructor(){this.indexCount=0,this.type="rotation"}startGen(A){this.indexCount=A.length,A.push(new hA);let I,g,Q,C,E,i;do I=Math.random()*2-1,g=Math.random()*2-1,Q=I*I+g*g;while(Q>1);do C=Math.random()*2-1,E=Math.random()*2-1,i=C*C+E*E;while(i>1);const D=Math.sqrt((1-Q)/i);A[this.indexCount].set(I,g,D*C,D*E)}genValue(A,I,g,Q){return this.indexCount===-1&&this.startGen(A),I.copy(A[this.indexCount]),I}toJSON(){return{type:"RandomQuat"}}static fromJSON(A){return new vB}clone(){return new vB}}class VB{constructor(A,I){this.axis=A,this.angle=I,this.type="rotation"}startGen(A){this.angle.startGen(A)}genValue(A,I,g,Q){return I.setFromAxisAngle(this.axis,this.angle.genValue(A,Q)*g)}toJSON(){return{type:"AxisAngle",axis:{x:this.axis.x,y:this.axis.y,z:this.axis.z},angle:this.angle.toJSON()}}static fromJSON(A){return new VB(new v(A.axis.x,A.axis.y,A.axis.z),sA(A.angle))}clone(){return new VB(this.axis.clone(),this.angle.clone())}}class ME{constructor(A,I,g,Q){this.angleX=A,this.angleY=I,this.angleZ=g,this.type="rotation",this.eular=new PB(0,0,0,Q)}startGen(A){this.angleX.startGen(A),this.angleY.startGen(A),this.angleZ.startGen(A)}genValue(A,I,g,Q){return this.eular.set(this.angleX.genValue(A,Q)*g,this.angleY.genValue(A,Q)*g,this.angleZ.genValue(A,Q)*g),I.setFromEuler(this.eular)}toJSON(){return{type:"Euler",angleX:this.angleX.toJSON(),angleY:this.angleY.toJSON(),angleZ:this.angleZ.toJSON(),eulerOrder:this.eular.order}}static fromJSON(A){return new ME(sA(A.angleX),sA(A.angleY),sA(A.angleZ),A.eulerOrder)}clone(){return new ME(this.angleX,this.angleY,this.angleZ,this.eular.order)}}function St(B){switch(B.type){case"AxisAngle":return VB.fromJSON(B);case"Euler":return ME.fromJSON(B);case"RandomQuat":return vB.fromJSON(B);default:return new vB}}class GQ{constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="vec3function"}startGen(A){this.x.startGen(A),this.y.startGen(A),this.z.startGen(A)}genValue(A,I,g){return I.set(this.x.genValue(A,g),this.y.genValue(A,g),this.z.genValue(A,g))}toJSON(){return{type:"Vector3Function",x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new GQ(sA(A.x),sA(A.y),sA(A.z))}clone(){return new GQ(this.x,this.y,this.z)}}function Ve(B){return B.type==="Vector3Function"?GQ.fromJSON(B):new GQ(new nA(0),new nA(0),new nA(0))}function NE(B){switch(B.type){case"ConstantValue":case"IntervalValue":case"PiecewiseBezier":return sA(B);case"AxisAngle":case"RandomQuat":case"Euler":return St(B);case"Vector3Function":return Ve(B);default:return new nA(0)}}class ZB{constructor(A={}){var I,g,Q,C,E,i,D;this.type="cone",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.angle=(C=A.angle)!==null&&C!==void 0?C:Math.PI/6,this.mode=(E=A.mode)!==null&&E!==void 0?E:SI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new nA(1),this.memory=[]}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=FC(this.mode,this.currentValue,this.spread,I),Q=QB.lerp(1-this.thickness,1,Math.random()),C=g*this.arc,E=Math.sqrt(Q),i=Math.sin(C),D=Math.cos(C);A.position.x=E*D,A.position.y=E*i,A.position.z=0;const o=this.angle*E;A.velocity.set(0,0,Math.cos(o)).addScaledVector(A.position,Math.sin(o)).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius)}toJSON(){return{type:"cone",radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new ZB({radius:A.radius,arc:A.arc,thickness:A.thickness,angle:A.angle,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new ZB({radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class WB{constructor(A={}){var I,g,Q,C,E,i;this.type="circle",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:SI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(i=A.speed)!==null&&i!==void 0?i:new nA(1),this.memory=[]}update(A,I){this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I}initialize(A,I){const g=FC(this.mode,this.currentValue,this.spread,I),Q=QB.lerp(1-this.thickness,1,Math.random()),C=g*this.arc;A.position.x=Math.cos(C),A.position.y=Math.sin(C),A.position.z=0,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*Q)}toJSON(){return{type:"circle",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new WB({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new WB({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}function bC(B,A){return Math.floor(Math.random()*(A-B))+B}const bE=new v(0,1,0),mE=new v(0,0,0),Ze=new v(1,1,1),Vo=new v(0,0,1);class jB{constructor(A={}){var I,g,Q,C,E,i,D;this.type="donut",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.donutRadius=(C=A.donutRadius)!==null&&C!==void 0?C:this.radius*.2,this.mode=(E=A.mode)!==null&&E!==void 0?E:SI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new nA(1),this.memory=[],this._m1=new tg}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=FC(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=QB.lerp(1-this.thickness,1,Math.random()),E=g*this.arc,i=Q*Math.PI*2,D=Math.sin(E),o=Math.cos(E);A.position.x=this.radius*o,A.position.y=this.radius*D,A.position.z=0,A.velocity.z=this.donutRadius*C*Math.sin(i),A.velocity.x=this.donutRadius*C*Math.cos(i)*o,A.velocity.y=this.donutRadius*C*Math.cos(i)*D,A.position.add(A.velocity),A.velocity.normalize().multiplyScalar(A.startSpeed),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.velocity,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"donut",radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new jB({radius:A.radius,arc:A.arc,thickness:A.thickness,donutRadius:A.donutRadius,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new jB({radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class zB{constructor(){this.type="point",this._m1=new tg}update(A,I){}initialize(A){const I=Math.random(),g=Math.random(),Q=I*Math.PI*2,C=Math.acos(2*g-1),E=Math.cbrt(Math.random()),i=Math.sin(Q),D=Math.cos(Q),o=Math.sin(C),s=Math.cos(C);A.velocity.x=E*o*D,A.velocity.y=E*o*i,A.velocity.z=E*s,A.velocity.multiplyScalar(A.startSpeed),A.position.setScalar(0),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.position,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"point"}}static fromJSON(A){return new zB}clone(){return new zB}}class WQ{constructor(A={}){var I,g,Q,C,E,i;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:SI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(i=A.speed)!==null&&i!==void 0?i:new nA(1),this.memory=[],this._m1=new tg}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=FC(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=QB.lerp(1-this.thickness,1,Math.random()),E=g*this.arc,i=Math.acos(2*Q-1),D=Math.sin(E),o=Math.cos(E),s=Math.sin(i),t=Math.cos(i);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.position,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"sphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new WQ({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new WQ({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class _B{constructor(A={}){var I,g,Q,C,E,i;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:SI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(i=A.speed)!==null&&i!==void 0?i:new nA(1),this.memory=[],this._m1=new tg}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=FC(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=QB.lerp(1-this.thickness,1,Math.random()),E=g*this.arc,i=Math.acos(Q),D=Math.sin(E),o=Math.cos(E),s=Math.sin(i),t=Math.cos(i);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.position,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"hemisphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new _B({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new _B({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class $B{constructor(A={}){var I,g,Q,C;this.type="grid",this.width=(I=A.width)!==null&&I!==void 0?I:1,this.height=(g=A.height)!==null&&g!==void 0?g:1,this.column=(Q=A.column)!==null&&Q!==void 0?Q:10,this.row=(C=A.row)!==null&&C!==void 0?C:10}initialize(A){const I=Math.floor(Math.random()*this.row),g=Math.floor(Math.random()*this.column);A.position.x=g*this.width/this.column-this.width/2,A.position.y=I*this.height/this.row-this.height/2,A.position.z=0,A.velocity.set(0,0,A.startSpeed)}toJSON(){return{type:"grid",width:this.width,height:this.height,column:this.column,row:this.row}}static fromJSON(A){return new $B(A)}clone(){return new $B({width:this.width,height:this.height,column:this.column,row:this.row})}update(A,I){}}const gD={circle:{type:"circle",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:WB,loadJSON:WB.fromJSON},cone:{type:"cone",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:ZB,loadJSON:ZB.fromJSON},donut:{type:"donut",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["donutRadius",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:jB,loadJSON:jB.fromJSON},point:{type:"point",params:[],constructor:zB,loadJSON:zB.fromJSON},sphere:{type:"sphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:WQ,loadJSON:WQ.fromJSON},hemisphere:{type:"hemisphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:_B,loadJSON:_B.fromJSON},grid:{type:"grid",params:[["width",["number"]],["height",["number"]],["rows",["number"]],["column",["number"]]],constructor:$B,loadJSON:$B.fromJSON}};function We(B,A){return gD[B.type].loadJSON(B,A)}class AC{constructor(A){this.color=A,this.type="ColorOverLife"}initialize(A){this.color.startGen(A.memory)}update(A,I){this.color.genColor(A.memory,A.color,A.age/A.life),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON()}}static fromJSON(A){return new AC(mD(A.color))}clone(){return new AC(this.color.clone())}reset(){}}class IC{constructor(A){this.angularVelocity=A,this.type="RotationOverLife"}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){typeof A.rotation=="number"&&(A.rotation+=I*this.angularVelocity.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new IC(sA(A.angularVelocity))}frameUpdate(A){}clone(){return new IC(this.angularVelocity.clone())}reset(){}}class gC{constructor(A){this.angularVelocity=A,this.type="Rotation3DOverLife",this.tempQuat=new hA,this.tempQuat2=new hA}initialize(A){A.rotation instanceof hA&&(A.angularVelocity=new hA,this.angularVelocity.startGen(A.memory))}update(A,I){A.rotation instanceof hA&&(this.angularVelocity.genValue(A.memory,this.tempQuat,I,A.age/A.life),A.rotation.multiply(this.tempQuat))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new gC(St(A.angularVelocity))}frameUpdate(A){}clone(){return new gC(this.angularVelocity.clone())}reset(){}}class QC{initialize(A,I){this.ps=I,this.x.startGen(A.memory),this.y.startGen(A.memory),this.z.startGen(A.memory)}constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="ForceOverLife",this._temp=new v,this._tempScale=new v,this._tempQ=new hA}update(A,I){this._temp.set(this.x.genValue(A.memory,A.age/A.life),this.y.genValue(A.memory,A.age/A.life),this.z.genValue(A.memory,A.age/A.life)),this.ps.worldSpace?A.velocity.addScaledVector(this._temp,I):(this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ),A.velocity.addScaledVector(this._temp,I))}toJSON(){return{type:this.type,x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new QC(sA(A.x),sA(A.y),sA(A.z))}frameUpdate(A){if(this.ps&&!this.ps.worldSpace){const I=this._temp,g=this._tempQ,Q=this._tempScale;this.ps.emitter.matrixWorld.decompose(I,g,Q),g.invert(),Q.set(1/Q.x,1/Q.y,1/Q.z)}}clone(){return new QC(this.x.clone(),this.y.clone(),this.z.clone())}reset(){}}class BC{initialize(A){this.size.startGen(A.memory)}constructor(A){this.size=A,this.type="SizeOverLife"}update(A){this.size instanceof GQ?this.size.genValue(A.memory,A.size,A.age/A.life).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,size:this.size.toJSON()}}static fromJSON(A){return new BC(NE(A.size))}frameUpdate(A){}clone(){return new BC(this.size.clone())}reset(){}}class CC{initialize(A){this.speed.startGen(A.memory)}constructor(A){this.speed=A,this.type="SpeedOverLife"}update(A){A.speedModifier=this.speed.genValue(A.memory,A.age/A.life)}toJSON(){return{type:this.type,speed:this.speed.toJSON()}}static fromJSON(A){return new CC(sA(A.speed))}frameUpdate(A){}clone(){return new CC(this.speed.clone())}reset(){}}class EC{constructor(A){this.frame=A,this.type="FrameOverLife"}initialize(A){this.frame.startGen(A.memory)}update(A,I){this.frame instanceof XB&&(A.uvTile=this.frame.genValue(A.memory,A.age/A.life))}frameUpdate(A){}toJSON(){return{type:this.type,frame:this.frame.toJSON()}}static fromJSON(A){return new EC(sA(A.frame))}clone(){return new EC(this.frame.clone())}reset(){}}class iC{constructor(A,I=new v(0,1,0)){this.orbitSpeed=A,this.axis=I,this.type="OrbitOverLife",this.temp=new v,this.rotation=new hA}initialize(A){this.orbitSpeed.startGen(A.memory)}update(A,I){this.temp.copy(A.position).projectOnVector(this.axis),this.rotation.setFromAxisAngle(this.axis,this.orbitSpeed.genValue(A.memory,A.age/A.life)*I),A.position.sub(this.temp),A.position.applyQuaternion(this.rotation),A.position.add(this.temp)}frameUpdate(A){}toJSON(){return{type:this.type,orbitSpeed:this.orbitSpeed.toJSON(),axis:[this.axis.x,this.axis.y,this.axis.z]}}static fromJSON(A){return new iC(sA(A.orbitSpeed),A.axis?new v(A.axis[0],A.axis[1],A.axis[2]):void 0)}clone(){return new iC(this.orbitSpeed.clone())}reset(){}}class ri{constructor(A){this.data=A,this.next=null,this.prev=null}hasPrev(){return this.prev!==null}hasNext(){return this.next!==null}}class je{constructor(){this.length=0,this.head=this.tail=null}isEmpty(){return this.head===null}clear(){this.length=0,this.head=this.tail=null}front(){return this.head===null?null:this.head.data}back(){return this.tail===null?null:this.tail.data}dequeue(){if(this.head){const A=this.head.data;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,A}}pop(){if(this.tail){const A=this.tail.data;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,A}}queue(A){const I=new ri(A);this.tail||(this.tail=I),this.head&&(this.head.prev=I,I.next=this.head),this.head=I,this.length++}push(A){const I=new ri(A);this.head||(this.head=I),this.tail&&(this.tail.next=I,I.prev=this.tail),this.tail=I,this.length++}insertBefore(A,I){const g=new ri(I);g.next=A,g.prev=A.prev,g.prev!==null&&(g.prev.next=g),g.next.prev=g,A==this.head&&(this.head=g),this.length++}remove(A){if(this.head===null||this.tail===null)return;let I=this.head;for(A===this.head.data&&(this.head=this.head.next),A===this.tail.data&&(this.tail=this.tail.prev);I.next!==null&&I.data!==A;)I=I.next;I.data===A&&(I.prev!==null&&(I.prev.next=I.next),I.next!==null&&(I.next.prev=I.prev),this.length--)}*values(){let A=this.head;for(;A!==null;)yield A.data,A=A.next}}class ze{constructor(){this.startSpeed=0,this.startColor=new YI,this.startSize=new v(1,1,1),this.position=new v,this.velocity=new v,this.age=0,this.life=1,this.size=new v(1,1,1),this.speedModifier=1,this.rotation=0,this.color=new YI,this.uvTile=0,this.memory=[]}get died(){return this.age>=this.life}reset(){this.memory.length=0}}class _e{constructor(A,I,g){this.position=A,this.size=I,this.color=g}}class JE{constructor(){this.startSpeed=0,this.startColor=new YI,this.startSize=new v(1,1,1),this.position=new v,this.velocity=new v,this.age=0,this.life=1,this.size=new v(1,1,1),this.length=100,this.speedModifier=1,this.color=new YI,this.previous=new je,this.uvTile=0,this.memory=[]}update(){for(this.age<=this.life?this.previous.push(new _e(this.position.clone(),this.size.x,this.color.clone())):this.previous.length>0&&this.previous.dequeue();this.previous.length>this.length;)this.previous.dequeue()}get died(){return this.age>=this.life}reset(){this.memory.length=0,this.previous.clear()}}class DC{initialize(A){this.width.startGen(A.memory)}constructor(A){this.width=A,this.type="WidthOverLength"}update(A){if(A instanceof JE){const I=A.previous.values();for(let g=0;g<A.previous.length;g++){const Q=I.next();Q.value.size=this.width.genValue(A.memory,(A.previous.length-g)/A.length)}}}frameUpdate(A){}toJSON(){return{type:this.type,width:this.width.toJSON()}}static fromJSON(A){return new DC(sA(A.width))}clone(){return new DC(this.width.clone())}reset(){}}class oC{constructor(A,I){this.direction=A,this.magnitude=I,this.type="ApplyForce",this.memory={data:[],dataCount:0},this.magnitudeValue=this.magnitude.genValue(this.memory)}initialize(A){}update(A,I){A.velocity.addScaledVector(this.direction,this.magnitudeValue*I)}frameUpdate(A){this.magnitudeValue=this.magnitude.genValue(this.memory)}toJSON(){return{type:this.type,direction:[this.direction.x,this.direction.y,this.direction.z],magnitude:this.magnitude.toJSON()}}static fromJSON(A){var I;return new oC(new v(A.direction[0],A.direction[1],A.direction[2]),sA((I=A.magnitude)!==null&&I!==void 0?I:A.force))}clone(){return new oC(this.direction.clone(),this.magnitude.clone())}reset(){}}class sC{constructor(A,I){this.center=A,this.magnitude=I,this.type="GravityForce",this.temp=new v}initialize(A){}update(A,I){this.temp.copy(this.center).sub(A.position).normalize(),A.velocity.addScaledVector(this.temp,this.magnitude/A.position.distanceToSquared(this.center)*I)}frameUpdate(A){}toJSON(){return{type:this.type,center:[this.center.x,this.center.y,this.center.z],magnitude:this.magnitude}}static fromJSON(A){return new sC(new v(A.center[0],A.center[1],A.center[2]),A.magnitude)}clone(){return new sC(this.center.clone(),this.magnitude)}reset(){}}class tC{constructor(A){this.angle=A,this.type="ChangeEmitDirection",this._temp=new v,this._q=new hA,this.memory={data:[],dataCount:0}}initialize(A){const I=A.velocity.length();I!=0&&(A.velocity.normalize(),A.velocity.x===0&&A.velocity.y===0?this._temp.set(0,A.velocity.z,0):this._temp.set(-A.velocity.y,A.velocity.x,0),this.angle.startGen(this.memory),this._q.setFromAxisAngle(this._temp.normalize(),this.angle.genValue(this.memory)),this._temp.copy(A.velocity),A.velocity.applyQuaternion(this._q),this._q.setFromAxisAngle(this._temp,Math.random()*Math.PI*2),A.velocity.applyQuaternion(this._q),A.velocity.setLength(I))}update(A,I){}frameUpdate(A){}toJSON(){return{type:this.type,angle:this.angle.toJSON()}}static fromJSON(A){return new tC(sA(A.angle))}clone(){return new tC(this.angle)}reset(){}}var TQ;(function(B){B[B.Death=0]="Death",B[B.Birth=1]="Birth",B[B.Frame=2]="Frame"})(TQ||(TQ={}));class wC{constructor(A,I,g,Q=TQ.Frame,C=1){this.particleSystem=A,this.useVelocityAsBasis=I,this.subParticleSystem=g,this.mode=Q,this.emitProbability=C,this.type="EmitSubParticleSystem",this.q_=new hA,this.v_=new v,this.v2_=new v,this.subEmissions=new Array,this.subParticleSystem&&this.subParticleSystem.system&&(this.subParticleSystem.system.onlyUsedByOther=!0)}initialize(A){}update(A,I){this.mode===TQ.Frame?this.emit(A,I):this.mode===TQ.Birth&&A.age===0?this.emit(A,I):this.mode===TQ.Death&&A.age+I>=A.life&&this.emit(A,I)}emit(A,I){if(!this.subParticleSystem||Math.random()>this.emitProbability)return;const g=new tg;this.setMatrixFromParticle(g,A),this.subEmissions.push({burstParticleCount:0,burstParticleIndex:0,isBursting:!1,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,matrix:g,travelDistance:0,particle:A})}frameUpdate(A){if(this.subParticleSystem)for(let I=0;I<this.subEmissions.length;I++)if(this.subEmissions[I].time>=this.subParticleSystem.system.duration)this.subEmissions[I]=this.subEmissions[this.subEmissions.length-1],this.subEmissions.length=this.subEmissions.length-1,I--;else{const g=this.subEmissions[I];g.particle&&g.particle.age<g.particle.life?this.setMatrixFromParticle(g.matrix,g.particle):g.particle=void 0,this.subParticleSystem.system.emit(A,g,g.matrix)}}toJSON(){return{type:this.type,subParticleSystem:this.subParticleSystem?this.subParticleSystem.uuid:"",useVelocityAsBasis:this.useVelocityAsBasis,mode:this.mode,emitProbability:this.emitProbability}}static fromJSON(A,I){return new wC(I,A.useVelocityAsBasis,A.subParticleSystem,A.mode,A.emitProbability)}clone(){return new wC(this.particleSystem,this.useVelocityAsBasis,this.subParticleSystem,this.mode,this.emitProbability)}reset(){}setMatrixFromParticle(A,I){let g;if(I.rotation===void 0||this.useVelocityAsBasis)if(I.velocity.x===0&&I.velocity.y===0&&(I.velocity.z===1||I.velocity.z===0))A.set(1,0,0,I.position.x,0,1,0,I.position.y,0,0,1,I.position.z,0,0,0,1);else{this.v_.copy(Vo).cross(I.velocity),this.v2_.copy(I.velocity).cross(this.v_);const Q=this.v_.length(),C=this.v2_.length();A.set(this.v_.x/Q,this.v2_.x/C,I.velocity.x,I.position.x,this.v_.y/Q,this.v2_.y/C,I.velocity.y,I.position.y,this.v_.z/Q,this.v2_.z/C,I.velocity.z,I.position.z,0,0,0,1)}else I.rotation instanceof hA?g=I.rotation:(this.q_.setFromAxisAngle(Vo,I.rotation),g=this.q_),A.compose(I.position,g,Ze);this.particleSystem.worldSpace||A.multiplyMatrices(this.particleSystem.emitter.matrixWorld,A)}}const $e=.5*(Math.sqrt(3)-1),oB=(3-Math.sqrt(3))/6,A0=1/3,ag=1/6,I0=(Math.sqrt(5)-1)/4,QI=(5-Math.sqrt(5))/20,zA=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),mA=new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);class Rt{constructor(A=Math.random){const I=typeof A=="function"?A:Q0(A);this.p=g0(I),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(let g=0;g<512;g++)this.perm[g]=this.p[g&255],this.permMod12[g]=this.perm[g]%12}noise2D(A,I){const g=this.permMod12,Q=this.perm;let C=0,E=0,i=0;const D=(A+I)*$e,o=Math.floor(A+D),s=Math.floor(I+D),t=(o+s)*oB,w=o-t,a=s-t,y=A-w,R=I-a;let n,h;y>R?(n=1,h=0):(n=0,h=1);const G=y-n+oB,r=R-h+oB,M=y-1+2*oB,k=R-1+2*oB,J=o&255,U=s&255;let Y=.5-y*y-R*R;if(Y>=0){const f=g[J+Q[U]]*3;Y*=Y,C=Y*Y*(zA[f]*y+zA[f+1]*R)}let d=.5-G*G-r*r;if(d>=0){const f=g[J+n+Q[U+h]]*3;d*=d,E=d*d*(zA[f]*G+zA[f+1]*r)}let H=.5-M*M-k*k;if(H>=0){const f=g[J+1+Q[U+1]]*3;H*=H,i=H*H*(zA[f]*M+zA[f+1]*k)}return 70*(C+E+i)}noise3D(A,I,g){const Q=this.permMod12,C=this.perm;let E,i,D,o;const s=(A+I+g)*A0,t=Math.floor(A+s),w=Math.floor(I+s),a=Math.floor(g+s),y=(t+w+a)*ag,R=t-y,n=w-y,h=a-y,G=A-R,r=I-n,M=g-h;let k,J,U,Y,d,H;G>=r?r>=M?(k=1,J=0,U=0,Y=1,d=1,H=0):G>=M?(k=1,J=0,U=0,Y=1,d=0,H=1):(k=0,J=0,U=1,Y=1,d=0,H=1):r<M?(k=0,J=0,U=1,Y=0,d=1,H=1):G<M?(k=0,J=1,U=0,Y=0,d=1,H=1):(k=0,J=1,U=0,Y=1,d=1,H=0);const f=G-k+ag,l=r-J+ag,p=M-U+ag,q=G-Y+2*ag,m=r-d+2*ag,T=M-H+2*ag,Z=G-1+3*ag,O=r-1+3*ag,j=M-1+3*ag,gA=t&255,QA=w&255,CA=a&255;let EA=.6-G*G-r*r-M*M;if(EA<0)E=0;else{const z=Q[gA+C[QA+C[CA]]]*3;EA*=EA,E=EA*EA*(zA[z]*G+zA[z+1]*r+zA[z+2]*M)}let BA=.6-f*f-l*l-p*p;if(BA<0)i=0;else{const z=Q[gA+k+C[QA+J+C[CA+U]]]*3;BA*=BA,i=BA*BA*(zA[z]*f+zA[z+1]*l+zA[z+2]*p)}let W=.6-q*q-m*m-T*T;if(W<0)D=0;else{const z=Q[gA+Y+C[QA+d+C[CA+H]]]*3;W*=W,D=W*W*(zA[z]*q+zA[z+1]*m+zA[z+2]*T)}let $=.6-Z*Z-O*O-j*j;if($<0)o=0;else{const z=Q[gA+1+C[QA+1+C[CA+1]]]*3;$*=$,o=$*$*(zA[z]*Z+zA[z+1]*O+zA[z+2]*j)}return 32*(E+i+D+o)}noise4D(A,I,g,Q){const C=this.perm;let E,i,D,o,s;const t=(A+I+g+Q)*I0,w=Math.floor(A+t),a=Math.floor(I+t),y=Math.floor(g+t),R=Math.floor(Q+t),n=(w+a+y+R)*QI,h=w-n,G=a-n,r=y-n,M=R-n,k=A-h,J=I-G,U=g-r,Y=Q-M;let d=0,H=0,f=0,l=0;k>J?d++:H++,k>U?d++:f++,k>Y?d++:l++,J>U?H++:f++,J>Y?H++:l++,U>Y?f++:l++;const p=d>=3?1:0,q=H>=3?1:0,m=f>=3?1:0,T=l>=3?1:0,Z=d>=2?1:0,O=H>=2?1:0,j=f>=2?1:0,gA=l>=2?1:0,QA=d>=1?1:0,CA=H>=1?1:0,EA=f>=1?1:0,BA=l>=1?1:0,W=k-p+QI,$=J-q+QI,z=U-m+QI,MA=Y-T+QI,kA=k-Z+2*QI,NA=J-O+2*QI,JA=U-j+2*QI,iA=Y-gA+2*QI,oA=k-QA+3*QI,rA=J-CA+3*QI,qI=U-EA+3*QI,ZA=Y-BA+3*QI,UA=k-1+4*QI,MI=J-1+4*QI,WI=U-1+4*QI,jI=Y-1+4*QI,NI=w&255,zI=a&255,bI=y&255,mI=R&255;let _I=.6-k*k-J*J-U*U-Y*Y;if(_I<0)E=0;else{const wA=C[NI+C[zI+C[bI+C[mI]]]]%32*4;_I*=_I,E=_I*_I*(mA[wA]*k+mA[wA+1]*J+mA[wA+2]*U+mA[wA+3]*Y)}let WA=.6-W*W-$*$-z*z-MA*MA;if(WA<0)i=0;else{const wA=C[NI+p+C[zI+q+C[bI+m+C[mI+T]]]]%32*4;WA*=WA,i=WA*WA*(mA[wA]*W+mA[wA+1]*$+mA[wA+2]*z+mA[wA+3]*MA)}let nI=.6-kA*kA-NA*NA-JA*JA-iA*iA;if(nI<0)D=0;else{const wA=C[NI+Z+C[zI+O+C[bI+j+C[mI+gA]]]]%32*4;nI*=nI,D=nI*nI*(mA[wA]*kA+mA[wA+1]*NA+mA[wA+2]*JA+mA[wA+3]*iA)}let fI=.6-oA*oA-rA*rA-qI*qI-ZA*ZA;if(fI<0)o=0;else{const wA=C[NI+QA+C[zI+CA+C[bI+EA+C[mI+BA]]]]%32*4;fI*=fI,o=fI*fI*(mA[wA]*oA+mA[wA+1]*rA+mA[wA+2]*qI+mA[wA+3]*ZA)}let hI=.6-UA*UA-MI*MI-WI*WI-jI*jI;if(hI<0)s=0;else{const wA=C[NI+1+C[zI+1+C[bI+1+C[mI+1]]]]%32*4;hI*=hI,s=hI*hI*(mA[wA]*UA+mA[wA+1]*MI+mA[wA+2]*WI+mA[wA+3]*jI)}return 27*(E+i+D+o+s)}}function g0(B){const A=new Uint8Array(256);for(let I=0;I<256;I++)A[I]=I;for(let I=0;I<255;I++){const g=I+~~(B()*(256-I)),Q=A[I];A[I]=A[g],A[g]=Q}return A}function Q0(B){let A=0,I=0,g=0,Q=1;const C=B0();return A=C(" "),I=C(" "),g=C(" "),A-=C(B),A<0&&(A+=1),I-=C(B),I<0&&(I+=1),g-=C(B),g<0&&(g+=1),function(){const E=2091639*A+Q*23283064365386963e-26;return A=I,I=g,g=E-(Q=E|0)}}function B0(){let B=4022871197;return function(A){A=A.toString();for(let I=0;I<A.length;I++){B+=A.charCodeAt(I);let g=.02519603282416938*B;B=g>>>0,g-=B,g*=B,B=g>>>0,g-=B,B+=g*4294967296}return(B>>>0)*23283064365386963e-26}}class aC{constructor(A,I,g,Q){this.scale=A,this.octaves=I,this.velocityMultiplier=g,this.timeScale=Q,this.type="TurbulenceField",this.generator=new Rt,this.timeOffset=new v,this.temp=new v,this.temp2=new v,this.timeOffset.x=Math.random()/this.scale.x*this.timeScale.x,this.timeOffset.y=Math.random()/this.scale.y*this.timeScale.y,this.timeOffset.z=Math.random()/this.scale.z*this.timeScale.z}initialize(A){}update(A,I){const g=A.position.x/this.scale.x,Q=A.position.y/this.scale.y,C=A.position.z/this.scale.z;this.temp.set(0,0,0);let E=1;for(let i=0;i<this.octaves;i++)this.temp2.set(this.generator.noise4D(g*E,Q*E,C*E,this.timeOffset.x*E)/E,this.generator.noise4D(g*E,Q*E,C*E,this.timeOffset.y*E)/E,this.generator.noise4D(g*E,Q*E,C*E,this.timeOffset.z*E)/E),this.temp.add(this.temp2),E*=2;this.temp.multiply(this.velocityMultiplier),A.velocity.addScaledVector(this.temp,I)}toJSON(){return{type:this.type,scale:[this.scale.x,this.scale.y,this.scale.z],octaves:this.octaves,velocityMultiplier:[this.velocityMultiplier.x,this.velocityMultiplier.y,this.velocityMultiplier.z],timeScale:[this.timeScale.x,this.timeScale.y,this.timeScale.z]}}frameUpdate(A){this.timeOffset.x+=A*this.timeScale.x,this.timeOffset.y+=A*this.timeScale.y,this.timeOffset.z+=A*this.timeScale.z}static fromJSON(A){return new aC(new v(A.scale[0],A.scale[1],A.scale[2]),A.octaves,new v(A.velocityMultiplier[0],A.velocityMultiplier[1],A.velocityMultiplier[2]),new v(A.timeScale[0],A.timeScale[1],A.timeScale[2]))}clone(){return new aC(this.scale.clone(),this.octaves,this.velocityMultiplier.clone(),this.timeScale.clone())}reset(){}}const eg=[],Si=new v,Ri=new hA;class eC{constructor(A,I,g=new nA(1),Q=new nA(0)){if(this.frequency=A,this.power=I,this.positionAmount=g,this.rotationAmount=Q,this.type="Noise",this.duration=0,eg.length===0)for(let C=0;C<100;C++)eg.push(new Rt)}initialize(A){A.lastPosNoise=new v,typeof A.rotation=="number"?A.lastRotNoise=0:A.lastRotNoise=new hA,A.generatorIndex=[bC(0,100),bC(0,100),bC(0,100),bC(0,100)],this.positionAmount.startGen(A.memory),this.rotationAmount.startGen(A.memory),this.frequency.startGen(A.memory),this.power.startGen(A.memory)}update(A,I){let g=this.frequency.genValue(A.memory,A.age/A.life),Q=this.power.genValue(A.memory,A.age/A.life),C=this.positionAmount.genValue(A.memory,A.age/A.life),E=this.rotationAmount.genValue(A.memory,A.age/A.life);C>0&&A.lastPosNoise!==void 0&&(A.position.sub(A.lastPosNoise),Si.set(eg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*C,eg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*C,eg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*C),A.position.add(Si),A.lastPosNoise.copy(Si)),E>0&&A.lastRotNoise!==void 0&&(typeof A.rotation=="number"?(A.rotation-=A.lastRotNoise,A.rotation+=eg[A.generatorIndex[3]].noise2D(0,A.age*g)*Math.PI*Q*E):(A.lastRotNoise.invert(),A.rotation.multiply(A.lastRotNoise),Ri.set(eg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*E,eg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*E,eg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*E,eg[A.generatorIndex[3]].noise2D(0,A.age*g)*Q*E).normalize(),A.rotation.multiply(Ri),A.lastRotNoise.copy(Ri)))}toJSON(){return{type:this.type,frequency:this.frequency.toJSON(),power:this.power.toJSON(),positionAmount:this.positionAmount.toJSON(),rotationAmount:this.rotationAmount.toJSON()}}frameUpdate(A){this.duration+=A}static fromJSON(A){return new eC(sA(A.frequency),sA(A.power),sA(A.positionAmount),sA(A.rotationAmount))}clone(){return new eC(this.frequency.clone(),this.power.clone(),this.positionAmount.clone(),this.rotationAmount.clone())}reset(){}}class cC{constructor(A,I){this.color=A,this.speedRange=I,this.type="ColorBySpeed"}initialize(A){this.color.startGen(A.memory)}update(A,I){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.color.genColor(A.memory,A.color,g),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new cC(mD(A.color),yQ.fromJSON(A.speedRange))}clone(){return new cC(this.color.clone(),this.speedRange.clone())}reset(){}}class nC{initialize(A){this.size.startGen(A.memory)}constructor(A,I){this.size=A,this.speedRange=I,this.type="SizeBySpeed"}update(A){const I=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.size instanceof GQ?this.size.genValue(A.memory,A.size,I).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,I))}toJSON(){return{type:this.type,size:this.size.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new nC(NE(A.size),yQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new nC(this.size.clone(),this.speedRange.clone())}reset(){}}class hC{constructor(A,I){this.angularVelocity=A,this.speedRange=I,this.type="RotationBySpeed",this.tempQuat=new hA}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){if(typeof A.rotation=="number"){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);A.rotation+=I*this.angularVelocity.genValue(A.memory,g)}}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new hC(sA(A.angularVelocity),yQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new hC(this.angularVelocity.clone(),this.speedRange.clone())}reset(){}}class yC{initialize(A){this.speed.startGen(A.memory)}constructor(A,I){this.speed=A,this.dampen=I,this.type="LimitSpeedOverLife"}update(A,I){let g=A.velocity.length(),Q=this.speed.genValue(A.memory,A.age/A.life);if(g>Q){const C=(g-Q)/g;A.velocity.multiplyScalar(1-C*this.dampen*I*20)}}toJSON(){return{type:this.type,speed:this.speed.toJSON(),dampen:this.dampen}}static fromJSON(A){return new yC(sA(A.speed),A.dampen)}frameUpdate(A){}clone(){return new yC(this.speed.clone(),this.dampen)}reset(){}}const UE={ApplyForce:{type:"ApplyForce",constructor:oC,params:[["direction",["vec3"]],["magnitude",["value"]]],loadJSON:oC.fromJSON},Noise:{type:"Noise",constructor:eC,params:[["frequency",["value"]],["power",["value"]],["positionAmount",["value"]],["rotationAmount",["value"]]],loadJSON:eC.fromJSON},TurbulenceField:{type:"TurbulenceField",constructor:aC,params:[["scale",["vec3"]],["octaves",["number"]],["velocityMultiplier",["vec3"]],["timeScale",["vec3"]]],loadJSON:aC.fromJSON},GravityForce:{type:"GravityForce",constructor:sC,params:[["center",["vec3"]],["magnitude",["number"]]],loadJSON:sC.fromJSON},ColorOverLife:{type:"ColorOverLife",constructor:AC,params:[["color",["colorFunc"]]],loadJSON:AC.fromJSON},RotationOverLife:{type:"RotationOverLife",constructor:IC,params:[["angularVelocity",["value","valueFunc"]]],loadJSON:IC.fromJSON},Rotation3DOverLife:{type:"Rotation3DOverLife",constructor:gC,params:[["angularVelocity",["rotationFunc"]]],loadJSON:gC.fromJSON},SizeOverLife:{type:"SizeOverLife",constructor:BC,params:[["size",["value","valueFunc","vec3Func"]]],loadJSON:BC.fromJSON},ColorBySpeed:{type:"ColorBySpeed",constructor:cC,params:[["color",["colorFunc"]],["speedRange",["range"]]],loadJSON:cC.fromJSON},RotationBySpeed:{type:"RotationBySpeed",constructor:hC,params:[["angularVelocity",["value","valueFunc"]],["speedRange",["range"]]],loadJSON:hC.fromJSON},SizeBySpeed:{type:"SizeBySpeed",constructor:nC,params:[["size",["value","valueFunc","vec3Func"]],["speedRange",["range"]]],loadJSON:nC.fromJSON},SpeedOverLife:{type:"SpeedOverLife",constructor:CC,params:[["speed",["value","valueFunc"]]],loadJSON:CC.fromJSON},FrameOverLife:{type:"FrameOverLife",constructor:EC,params:[["frame",["value","valueFunc"]]],loadJSON:EC.fromJSON},ForceOverLife:{type:"ForceOverLife",constructor:QC,params:[["x",["value","valueFunc"]],["y",["value","valueFunc"]],["z",["value","valueFunc"]]],loadJSON:QC.fromJSON},OrbitOverLife:{type:"OrbitOverLife",constructor:iC,params:[["orbitSpeed",["value","valueFunc"]],["axis",["vec3"]]],loadJSON:iC.fromJSON},WidthOverLength:{type:"WidthOverLength",constructor:DC,params:[["width",["value","valueFunc"]]],loadJSON:DC.fromJSON},ChangeEmitDirection:{type:"ChangeEmitDirection",constructor:tC,params:[["angle",["value"]]],loadJSON:tC.fromJSON},EmitSubParticleSystem:{type:"EmitSubParticleSystem",constructor:wC,params:[["particleSystem",["self"]],["useVelocityAsBasis",["boolean"]],["subParticleSystem",["particleSystem"]],["mode",["number"]],["emitProbability",["number"]]],loadJSON:wC.fromJSON},LimitSpeedOverLife:{type:"LimitSpeedOverLife",constructor:yC,params:[["speed",["value","valueFunc"]],["dampen",["number"]]],loadJSON:yC.fromJSON}};function C0(B,A){return UE[B.type]?UE[B.type].loadJSON(B,A):null}const E0=[];function i0(B){if(!E0.find(I=>I.id===B.id)){for(const I of B.emitterShapes)gD[I.type]||(gD[I.type]=I);for(const I of B.behaviors)UE[I.type]||(UE[I.type]=I)}}class GC{get geometry(){return this._geometry}set geometry(A){if(this._geometry=A,A===void 0||typeof A=="string")return;const I=new F.Triangle;this._triangleIndexToArea.length=0;let g=0;if(!A.getIndex())return;const Q=A.getIndex().array,C=Q.length/3;this._triangleIndexToArea.push(0);for(let E=0;E<C;E++)I.setFromAttributeAndIndices(A.getAttribute("position"),Q[E*3],Q[E*3+1],Q[E*3+2]),g+=I.getArea(),this._triangleIndexToArea.push(g);A.userData.triangleIndexToArea=this._triangleIndexToArea}constructor(A){this.type="mesh_surface",this._triangleIndexToArea=[],this._tempA=new F.Vector3,this._tempB=new F.Vector3,this._tempC=new F.Vector3,A&&(this.geometry=A)}initialize(A){const I=this._geometry;if(!I||I.getIndex()===null){A.position.set(0,0,0),A.velocity.set(0,0,1).multiplyScalar(A.startSpeed);return}const g=this._triangleIndexToArea.length-1;let Q=0,C=g;const E=Math.random()*this._triangleIndexToArea[g];for(;Q+1<C;){const a=Math.floor((Q+C)/2);E<this._triangleIndexToArea[a]?C=a:Q=a}let i=Math.random(),D=Math.random();i+D>1&&(i=1-i,D=1-D);const o=I.getIndex().array[Q*3],s=I.getIndex().array[Q*3+1],t=I.getIndex().array[Q*3+2],w=I.getAttribute("position");this._tempA.fromBufferAttribute(w,o),this._tempB.fromBufferAttribute(w,s),this._tempC.fromBufferAttribute(w,t),this._tempB.sub(this._tempA),this._tempC.sub(this._tempA),this._tempA.addScaledVector(this._tempB,i).addScaledVector(this._tempC,D),A.position.copy(this._tempA),this._tempA.copy(this._tempB).cross(this._tempC).normalize(),A.velocity.copy(this._tempA).normalize().multiplyScalar(A.startSpeed)}toJSON(){return{type:"mesh_surface",mesh:this._geometry?this._geometry.uuid:""}}static fromJSON(A,I){return new GC(I.geometries[A.geometry])}clone(){return new GC(this._geometry)}update(A,I){}}const D0={id:"three.quarks",emitterShapes:[{type:"mesh_surface",params:[["geometry",["geometry"]]],constructor:GC,loadJSON:GC.fromJSON}],behaviors:[]};var o0=`
1
+ "use strict";const F=require("./three-core.umd.cjs"),qD=require("./three-examples.umd.cjs"),Za=/^(?:[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;function Wa(B){return typeof B=="string"&&Za.test(B)}const EI=[];for(let B=0;B<256;++B)EI.push((B+256).toString(16).slice(1));function ja(B,A=0){return EI[B[A+0]]+EI[B[A+1]]+EI[B[A+2]]+EI[B[A+3]]+"-"+EI[B[A+4]]+EI[B[A+5]]+"-"+EI[B[A+6]]+EI[B[A+7]]+"-"+EI[B[A+8]]+EI[B[A+9]]+"-"+EI[B[A+10]]+EI[B[A+11]]+EI[B[A+12]]+EI[B[A+13]]+EI[B[A+14]]+EI[B[A+15]]}function za(B){if(!Wa(B))throw TypeError("Invalid UUID");let A;const I=new Uint8Array(16);return I[0]=(A=parseInt(B.slice(0,8),16))>>>24,I[1]=A>>>16&255,I[2]=A>>>8&255,I[3]=A&255,I[4]=(A=parseInt(B.slice(9,13),16))>>>8,I[5]=A&255,I[6]=(A=parseInt(B.slice(14,18),16))>>>8,I[7]=A&255,I[8]=(A=parseInt(B.slice(19,23),16))>>>8,I[9]=A&255,I[10]=(A=parseInt(B.slice(24,36),16))/1099511627776&255,I[11]=A/4294967296&255,I[12]=A>>>24&255,I[13]=A>>>16&255,I[14]=A>>>8&255,I[15]=A&255,I}function _a(B){B=unescape(encodeURIComponent(B));const A=[];for(let I=0;I<B.length;++I)A.push(B.charCodeAt(I));return A}const $a="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Ae="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function Ie(B,A,I){function g(Q,C,E,i){var D;if(typeof Q=="string"&&(Q=_a(Q)),typeof C=="string"&&(C=za(C)),((D=C)===null||D===void 0?void 0:D.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+Q.length);if(o.set(C),o.set(Q,C.length),o=I(o),o[6]=o[6]&15|A,o[8]=o[8]&63|128,E){i=i||0;for(let s=0;s<16;++s)E[i+s]=o[s];return E}return ja(o)}try{g.name=B}catch{}return g.DNS=$a,g.URL=Ae,g}function ge(B,A,I,g){switch(B){case 0:return A&I^~A&g;case 1:return A^I^g;case 2:return A&I^A&g^I&g;case 3:return A^I^g}}function ci(B,A){return B<<A|B>>>32-A}function Qe(B){const A=[1518500249,1859775393,2400959708,3395469782],I=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof B=="string"){const E=unescape(encodeURIComponent(B));B=[];for(let i=0;i<E.length;++i)B.push(E.charCodeAt(i))}else Array.isArray(B)||(B=Array.prototype.slice.call(B));B.push(128);const g=B.length/4+2,Q=Math.ceil(g/16),C=new Array(Q);for(let E=0;E<Q;++E){const i=new Uint32Array(16);for(let D=0;D<16;++D)i[D]=B[E*64+D*4]<<24|B[E*64+D*4+1]<<16|B[E*64+D*4+2]<<8|B[E*64+D*4+3];C[E]=i}C[Q-1][14]=(B.length-1)*8/Math.pow(2,32),C[Q-1][14]=Math.floor(C[Q-1][14]),C[Q-1][15]=(B.length-1)*8&4294967295;for(let E=0;E<Q;++E){const i=new Uint32Array(80);for(let a=0;a<16;++a)i[a]=C[E][a];for(let a=16;a<80;++a)i[a]=ci(i[a-3]^i[a-8]^i[a-14]^i[a-16],1);let D=I[0],o=I[1],s=I[2],t=I[3],w=I[4];for(let a=0;a<80;++a){const y=Math.floor(a/20),r=ci(D,5)+ge(y,o,s,t)+w+A[y]+i[a]>>>0;w=t,t=s,s=ci(o,30)>>>0,o=D,D=r}I[0]=I[0]+D>>>0,I[1]=I[1]+o>>>0,I[2]=I[2]+s>>>0,I[3]=I[3]+t>>>0,I[4]=I[4]+w>>>0}return[I[0]>>24&255,I[0]>>16&255,I[0]>>8&255,I[0]&255,I[1]>>24&255,I[1]>>16&255,I[1]>>8&255,I[1]&255,I[2]>>24&255,I[2]>>16&255,I[2]>>8&255,I[2]&255,I[3]>>24&255,I[3]>>16&255,I[3]>>8&255,I[3]&255,I[4]>>24&255,I[4]>>16&255,I[4]>>8&255,I[4]&255]}const Be=Ie("v5",80,Qe),Ce="#needle",Ee=[Ce];function et(B){if(B==null)return null;const A=B.trim(),I=A.toLowerCase();for(const g of ie(Ee)){if(!I.endsWith(g))continue;const Q=nt(A.substring(0,A.length-g.length));return Q.length>0?{marker:g,value:Q}:null}return null}function nt(B){return B.replace(/[\s_]+/g," ").trim()}function bD(B){return et(B)?.value??null}function ie(B){return B.length>1?[...B].sort((A,I)=>I.length-A.length):B}function De(B){const A=se(B),I=new DataView(A.buffer,A.byteOffset,A.byteLength);let g=1732584193,Q=4023233417,C=2562383102,E=271733878,i=3285377520;const D=new Uint32Array(80);for(let t=0;t<A.length;t+=64){for(let h=0;h<16;h++)D[h]=I.getUint32(t+h*4);for(let h=16;h<80;h++){const G=D[h-3]^D[h-8]^D[h-14]^D[h-16];D[h]=G<<1|G>>>31}let w=g,a=Q,y=C,r=E,c=i;for(let h=0;h<80;h++){let G,R;h<20?(G=a&y|~a&r,R=1518500249):h<40?(G=a^y^r,R=1859775393):h<60?(G=a&y|a&r|y&r,R=2400959708):(G=a^y^r,R=3395469782);const N=(w<<5|w>>>27)+G+c+R+D[h]|0;c=r,r=y,y=a<<30|a>>>2,a=w,w=N}g=g+w|0,Q=Q+a|0,C=C+y|0,E=E+r|0,i=i+c|0}const o=new Uint8Array(20),s=new DataView(o.buffer);return s.setUint32(0,g>>>0),s.setUint32(4,Q>>>0),s.setUint32(8,C>>>0),s.setUint32(12,E>>>0),s.setUint32(16,i>>>0),o}function oe(B){let A="";for(let I=0;I<B.length;I++)A+=B[I].toString(16).padStart(2,"0");return A}function se(B){const A=B.length*8,I=new Uint8Array(((B.length+8>>6)+1)*64);I.set(B),I[B.length]=128;const g=new DataView(I.buffer);return g.setUint32(I.length-8,Math.floor(A/4294967296)),g.setUint32(I.length-4,A>>>0),I}const te="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function ct(B,A=te){const I=we(A),g=new TextEncoder().encode(B),Q=new Uint8Array(I.length+g.length);Q.set(I),Q.set(g,I.length);const C=De(Q).slice(0,16);return C[6]=C[6]&15|80,C[8]=C[8]&63|128,ae(C)}function we(B){const A=B.replace(/-/g,"");if(A.length!==32)throw new Error(`Invalid UUID: ${B}`);const I=new Uint8Array(16);for(let g=0;g<16;g++)I[g]=parseInt(A.substring(g*2,g*2+2),16);return I}function ae(B){const A=oe(B);return`${A.substring(0,8)}-${A.substring(8,12)}-${A.substring(12,16)}-${A.substring(16,20)}-${A.substring(20)}`}const mB="needle-id";function ee(B,A){return ct(`${B}:${A}`,"eff8ba80-635d-11ec-90d6-0242ac120003")}function AD(B){return typeof B!="string"?"":et(B)?.value??nt(B)}function ne(B,A,I,g){return ct(`${B}-${AD(A)}-${I}`)}function ce(B,A){const I=AD(B[A]?.name);let g=0;for(let Q=0;Q<A;Q++)AD(B[Q]?.name)===I&&g++;return g}function he(B){const A=B?.extras?.[mB];return typeof A=="string"?A:null}function ye(B){return B.replace(/~/g,"~0").replace(/\//g,"~1")}function ID(B){return B.replace(/~1/g,"/").replace(/~0/g,"~")}function ht(B){return B.map(ye).join("/")}function Ge(B){return B.split("/").map(ID)}function re(B){return B.split("/").map(A=>{const I=/~2(0|[1-9][0-9]*)$/.exec(A);return I?{name:ID(A.slice(0,I.index)),occurrence:Number(I[1])}:{name:ID(A)}})}function cQ(B,A,I){let g=null;if(B.anchor){const C=Se(A,E=>bD(E.name)===B.anchor,2);C.length===1&&(g=C[0])}if(g)return g;let Q=null;if(B.id&&(Q=yt(A,C=>C.userData?.[mB]===B.id)),g)return g;if(Q)return Q;if(B.path!==void 0){let C=A;for(const E of re(B.path)){const i=C.children?.filter(D=>(D.name??"")===E.name)??[];if(C=E.occurrence!==void 0?i[E.occurrence]??null:i.length===1?i[0]:null,!C)break}if(C&&C!==A)return C}return null}function qE(B,A,I){let g=null;if(B.anchor){const C=A.filter(E=>bD(E.name)===B.anchor);C.length===1?g=C[0]:C.length>1}if(g)return g;const Q=B.id?A.find(C=>C.userData?.[mB]===B.id)??null:null;if(g)return g;if(Q)return Q;if(B.name){const C=A.filter(E=>E.name===B.name);if(C.length===1)return C[0];C.length>1}return null}function Se(B,A,I){const g=[],Q=new Set,C=E=>{if(!(g.length>=I||Q.has(E))&&(Q.add(E),!(A(E)&&(g.push(E),g.length>=I))&&E.children))for(let i=0;i<E.children.length;i++){const D=E.children[i];D!=null&&C(D)}};return C(B),g}function yt(B,A,I=new Set){if(I.has(B))return null;if(I.add(B),A(B))return B;if(!B.children)return null;for(let g=0;g<B.children.length;g++){const Q=B.children[g];if(Q==null)continue;const C=yt(Q,A,I);if(C)return C}return null}const Re=[["nodes","node"],["materials","material"],["textures","texture"],["cameras","camera"]];function Gt(B,A,I){let g=0;const Q=(C,E,i,D)=>{const o=C.userData;if(!o||typeof o!="object"||typeof o[mB]=="string")return;const s=B[i];if(!Array.isArray(s))return;const t=s[D];if(!t||typeof t!="object")return;const w=he(t)??ne(E,t.name,ce(s,D));o[mB]=w,g++};if(A){for(const[C,E]of A)if(!(!E||typeof C!="object"))for(const[i,D]of Re){const o=E[i];if(typeof o=="number"){Q(C,D,i,o);break}}}if(I)for(let C=0;C<I.length;C++){const E=I[C];E&&Q(E,"scene","scenes",C)}return{attached:g}}const hi=2,cg=4,Kg=4,rt=4,Og=new Int32Array(2),To=new Float32Array(Og.buffer),Oo=new Float64Array(Og.buffer),pC=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;class fg{constructor(A,I){this.low=A|0,this.high=I|0}static create(A,I){return A==0&&I==0?fg.ZERO:new fg(A,I)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(A){return this.low==A.low&&this.high==A.high}}fg.ZERO=new fg(0,0);var gD;(function(B){B[B.UTF8_BYTES=1]="UTF8_BYTES",B[B.UTF16_STRING=2]="UTF16_STRING"})(gD||(gD={}));class PB{constructor(A){this.bytes_=A,this.position_=0}static allocate(A){return new PB(new Uint8Array(A))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(A){this.position_=A}capacity(){return this.bytes_.length}readInt8(A){return this.readUint8(A)<<24>>24}readUint8(A){return this.bytes_[A]}readInt16(A){return this.readUint16(A)<<16>>16}readUint16(A){return this.bytes_[A]|this.bytes_[A+1]<<8}readInt32(A){return this.bytes_[A]|this.bytes_[A+1]<<8|this.bytes_[A+2]<<16|this.bytes_[A+3]<<24}readUint32(A){return this.readInt32(A)>>>0}readInt64(A){return new fg(this.readInt32(A),this.readInt32(A+4))}readUint64(A){return new fg(this.readUint32(A),this.readUint32(A+4))}readFloat32(A){return Og[0]=this.readInt32(A),To[0]}readFloat64(A){return Og[pC?0:1]=this.readInt32(A),Og[pC?1:0]=this.readInt32(A+4),Oo[0]}writeInt8(A,I){this.bytes_[A]=I}writeUint8(A,I){this.bytes_[A]=I}writeInt16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeUint16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeInt32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeUint32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeInt64(A,I){this.writeInt32(A,I.low),this.writeInt32(A+4,I.high)}writeUint64(A,I){this.writeUint32(A,I.low),this.writeUint32(A+4,I.high)}writeFloat32(A,I){To[0]=I,this.writeInt32(A,Og[0])}writeFloat64(A,I){Oo[0]=I,this.writeInt32(A,Og[pC?0:1]),this.writeInt32(A+4,Og[pC?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+cg+Kg)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let A="";for(let I=0;I<Kg;I++)A+=String.fromCharCode(this.readInt8(this.position_+cg+I));return A}__offset(A,I){const g=A-this.readInt32(A);return I<this.readInt16(g)?this.readInt16(g+I):0}__union(A,I){return A.bb_pos=I+this.readInt32(I),A.bb=this,A}__string(A,I){A+=this.readInt32(A);const g=this.readInt32(A);let Q="",C=0;if(A+=cg,I===gD.UTF8_BYTES)return this.bytes_.subarray(A,A+g);for(;C<g;){let E;const i=this.readUint8(A+C++);if(i<192)E=i;else{const D=this.readUint8(A+C++);if(i<224)E=(i&31)<<6|D&63;else{const o=this.readUint8(A+C++);if(i<240)E=(i&15)<<12|(D&63)<<6|o&63;else{const s=this.readUint8(A+C++);E=(i&7)<<18|(D&63)<<12|(o&63)<<6|s&63}}}E<65536?Q+=String.fromCharCode(E):(E-=65536,Q+=String.fromCharCode((E>>10)+55296,(E&1023)+56320))}return Q}__union_with_string(A,I){return typeof A=="string"?this.__string(I):this.__union(A,I)}__indirect(A){return A+this.readInt32(A)}__vector(A){return A+this.readInt32(A)+cg}__vector_len(A){return this.readInt32(A+this.readInt32(A))}__has_identifier(A){if(A.length!=Kg)throw new Error("FlatBuffers: file identifier must be length "+Kg);for(let I=0;I<Kg;I++)if(A.charCodeAt(I)!=this.readInt8(this.position()+cg+I))return!1;return!0}createLong(A,I){return fg.create(A,I)}createScalarList(A,I){const g=[];for(let Q=0;Q<I;++Q)A(Q)!==null&&g.push(A(Q));return g}createObjList(A,I){const g=[];for(let Q=0;Q<I;++Q){const C=A(Q);C!==null&&g.push(C.unpack())}return g}}class mD{constructor(A){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null;let I;A?I=A:I=1024,this.bb=PB.allocate(I),this.space=I}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(A){this.force_defaults=A}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(A,I){A>this.minalign&&(this.minalign=A);const g=~(this.bb.capacity()-this.space+I)+1&A-1;for(;this.space<g+A+I;){const Q=this.bb.capacity();this.bb=mD.growByteBuffer(this.bb),this.space+=this.bb.capacity()-Q}this.pad(g)}pad(A){for(let I=0;I<A;I++)this.bb.writeInt8(--this.space,0)}writeInt8(A){this.bb.writeInt8(this.space-=1,A)}writeInt16(A){this.bb.writeInt16(this.space-=2,A)}writeInt32(A){this.bb.writeInt32(this.space-=4,A)}writeInt64(A){this.bb.writeInt64(this.space-=8,A)}writeFloat32(A){this.bb.writeFloat32(this.space-=4,A)}writeFloat64(A){this.bb.writeFloat64(this.space-=8,A)}addInt8(A){this.prep(1,0),this.writeInt8(A)}addInt16(A){this.prep(2,0),this.writeInt16(A)}addInt32(A){this.prep(4,0),this.writeInt32(A)}addInt64(A){this.prep(8,0),this.writeInt64(A)}addFloat32(A){this.prep(4,0),this.writeFloat32(A)}addFloat64(A){this.prep(8,0),this.writeFloat64(A)}addFieldInt8(A,I,g){(this.force_defaults||I!=g)&&(this.addInt8(I),this.slot(A))}addFieldInt16(A,I,g){(this.force_defaults||I!=g)&&(this.addInt16(I),this.slot(A))}addFieldInt32(A,I,g){(this.force_defaults||I!=g)&&(this.addInt32(I),this.slot(A))}addFieldInt64(A,I,g){(this.force_defaults||!I.equals(g))&&(this.addInt64(I),this.slot(A))}addFieldFloat32(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat32(I),this.slot(A))}addFieldFloat64(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat64(I),this.slot(A))}addFieldOffset(A,I,g){(this.force_defaults||I!=g)&&(this.addOffset(I),this.slot(A))}addFieldStruct(A,I,g){I!=g&&(this.nested(I),this.slot(A))}nested(A){if(A!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")}notNested(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")}slot(A){this.vtable!==null&&(this.vtable[A]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(A){const I=A.capacity();if(I&3221225472)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");const g=I<<1,Q=PB.allocate(g);return Q.setPosition(g-I),Q.bytes().set(A.bytes(),g-I),Q}addOffset(A){this.prep(cg,0),this.writeInt32(this.offset()-A+cg)}startObject(A){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=A;for(let I=0;I<A;I++)this.vtable[I]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);const A=this.offset();let I=this.vtable_in_use-1;for(;I>=0&&this.vtable[I]==0;I--);const g=I+1;for(;I>=0;I--)this.addInt16(this.vtable[I]!=0?A-this.vtable[I]:0);const Q=2;this.addInt16(A-this.object_start);const C=(g+Q)*hi;this.addInt16(C);let E=0;const i=this.space;A:for(I=0;I<this.vtables.length;I++){const D=this.bb.capacity()-this.vtables[I];if(C==this.bb.readInt16(D)){for(let o=hi;o<C;o+=hi)if(this.bb.readInt16(i+o)!=this.bb.readInt16(D+o))continue A;E=this.vtables[I];break}}return E?(this.space=this.bb.capacity()-A,this.bb.writeInt32(this.space,E-A)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-A,this.offset()-A)),this.isNested=!1,A}finish(A,I,g){const Q=g?rt:0;if(I){const C=I;if(this.prep(this.minalign,cg+Kg+Q),C.length!=Kg)throw new Error("FlatBuffers: file identifier must be length "+Kg);for(let E=Kg-1;E>=0;E--)this.writeInt8(C.charCodeAt(E))}this.prep(this.minalign,cg+Q),this.addOffset(A),Q&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(A,I){this.finish(A,I,!0)}requiredField(A,I){const g=this.bb.capacity()-A,Q=g-this.bb.readInt32(g);if(!(this.bb.readInt16(Q+I)!=0))throw new Error("FlatBuffers: field "+I+" must be set")}startVector(A,I,g){this.notNested(),this.vector_num_elems=I,this.prep(cg,A*I),this.prep(g,A*I)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(A){if(!A)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(A))return this.string_maps.get(A);const I=this.createString(A);return this.string_maps.set(A,I),I}createString(A){if(!A)return 0;let I;if(A instanceof Uint8Array)I=A;else{I=[];let g=0;for(;g<A.length;){let Q;const C=A.charCodeAt(g++);if(C<55296||C>=56320)Q=C;else{const E=A.charCodeAt(g++);Q=(C<<10)+E+-56613888}Q<128?I.push(Q):(Q<2048?I.push(Q>>6&31|192):(Q<65536?I.push(Q>>12&15|224):I.push(Q>>18&7|240,Q>>12&63|128),I.push(Q>>6&63|128)),I.push(Q&63|128))}}this.addInt8(0),this.startVector(1,I.length,1),this.bb.setPosition(this.space-=I.length);for(let g=0,Q=this.space,C=this.bb.bytes();g<I.length;g++)C[Q++]=I[g];return this.endVector()}createLong(A,I){return fg.create(A,I)}createObjectOffset(A){return A===null?0:typeof A=="string"?this.createString(A):A.pack(this)}createObjectOffsetList(A){const I=[];for(let g=0;g<A.length;++g){const Q=A[g];if(Q!==null)I.push(this.createObjectOffset(Q));else throw new Error("FlatBuffers: Argument for createObjectOffsetList cannot contain null.")}return I}createStructOffsetList(A,I){return I(this,A.length),this.createObjectOffsetList(A),this.endVector()}}const _A={ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function St(B){const A=await fetch(B);if(A.ok)return A.json();throw new Error(A.statusText)}async function Fe(B){return await St(`${B}/profilesList.json`)}async function ke(B,A,I=null,g=!0){if(!B)throw new Error("No xrInputSource supplied");const Q=await Fe(A);let C;if(B.profiles.some(D=>{const o=Q[D];return o&&(C={profileId:D,profilePath:`${A}/${o.path}`,deprecated:!!o.deprecated}),!!C}),!C){if(!I)throw new Error("No matching profile name found");const D=Q[I];if(!D)throw new Error(`No matching profile name found and default profile "${I}" missing.`);C={profileId:I,profilePath:`${A}/${D.path}`,deprecated:!!D.deprecated}}const E=await St(C.profilePath);let i;if(g){let D;if(B.handedness==="any"?D=E.layouts[Object.keys(E.layouts)[0]]:D=E.layouts[B.handedness],!D)throw new Error(`No matching handedness, ${B.handedness}, in profile ${C.profileId}`);D.assetPath&&(i=C.profilePath.replace("profile.json",D.assetPath))}return{profile:E,assetPath:i}}const Me={xAxis:0,yAxis:0,button:0,state:_A.ComponentState.DEFAULT};function Ne(B=0,A=0){let I=B,g=A;if(Math.sqrt(B*B+A*A)>1){const E=Math.atan2(A,B);I=Math.cos(E),g=Math.sin(E)}return{normalizedXAxis:I*.5+.5,normalizedYAxis:g*.5+.5}}class Je{constructor(A){this.componentProperty=A.componentProperty,this.states=A.states,this.valueNodeName=A.valueNodeName,this.valueNodeProperty=A.valueNodeProperty,this.valueNodeProperty===_A.VisualResponseProperty.TRANSFORM&&(this.minNodeName=A.minNodeName,this.maxNodeName=A.maxNodeName),this.value=0,this.updateFromComponent(Me)}updateFromComponent({xAxis:A,yAxis:I,button:g,state:Q}){const{normalizedXAxis:C,normalizedYAxis:E}=Ne(A,I);switch(this.componentProperty){case _A.ComponentProperty.X_AXIS:this.value=this.states.includes(Q)?C:.5;break;case _A.ComponentProperty.Y_AXIS:this.value=this.states.includes(Q)?E:.5;break;case _A.ComponentProperty.BUTTON:this.value=this.states.includes(Q)?g:0;break;case _A.ComponentProperty.STATE:this.valueNodeProperty===_A.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(Q):this.value=this.states.includes(Q)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class Ue{constructor(A,I){if(!A||!I||!I.visualResponses||!I.gamepadIndices||Object.keys(I.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=A,this.type=I.type,this.rootNodeName=I.rootNodeName,this.touchPointNodeName=I.touchPointNodeName,this.visualResponses={},Object.keys(I.visualResponses).forEach(g=>{const Q=new Je(I.visualResponses[g]);this.visualResponses[g]=Q}),this.gamepadIndices=Object.assign({},I.gamepadIndices),this.values={state:_A.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(A){if(this.values.state=_A.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&A.buttons.length>this.gamepadIndices.button){const I=A.buttons[this.gamepadIndices.button];this.values.button=I.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,I.pressed||this.values.button===1?this.values.state=_A.ComponentState.PRESSED:(I.touched||this.values.button>_A.ButtonTouchThreshold)&&(this.values.state=_A.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&A.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=A.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===_A.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>_A.AxisTouchThreshold&&(this.values.state=_A.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&A.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=A.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===_A.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>_A.AxisTouchThreshold&&(this.values.state=_A.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(I=>{I.updateFromComponent(this.values)})}}class Le{constructor(A,I,g){if(!A)throw new Error("No xrInputSource supplied");if(!I)throw new Error("No profile supplied");this.xrInputSource=A,this.assetUrl=g,this.id=I.profileId,this.layoutDescription=I.layouts[A.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(Q=>{const C=this.layoutDescription.components[Q];this.components[Q]=new Ue(Q,C)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const A=[];return Object.values(this.components).forEach(I=>{A.push(I.data)}),A}updateFromGamepad(){Object.values(this.components).forEach(A=>{A.updateFromGamepad(this.xrInputSource.gamepad)})}}const sI=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Xo=1234567;const Rt=Math.PI/180,Ft=180/Math.PI;function He(){const B=Math.random()*4294967295|0,A=Math.random()*4294967295|0,I=Math.random()*4294967295|0,g=Math.random()*4294967295|0;return(sI[B&255]+sI[B>>8&255]+sI[B>>16&255]+sI[B>>24&255]+"-"+sI[A&255]+sI[A>>8&255]+"-"+sI[A>>16&15|64]+sI[A>>24&255]+"-"+sI[I&63|128]+sI[I>>8&255]+"-"+sI[I>>16&255]+sI[I>>24&255]+sI[g&255]+sI[g>>8&255]+sI[g>>16&255]+sI[g>>24&255]).toLowerCase()}function ng(B,A,I){return Math.max(A,Math.min(I,B))}function kt(B,A){return(B%A+A)%A}function Ye(B,A,I,g,Q){return g+(B-A)*(Q-g)/(I-A)}function Ke(B,A,I){return B!==A?(I-B)/(A-B):0}function Mt(B,A,I){return(1-I)*B+I*A}function de(B,A,I,g){return Mt(B,A,1-Math.exp(-I*g))}function le(B,A=1){return A-Math.abs(kt(B,A*2)-A)}function fe(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*(3-2*B))}function xe(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*B*(B*(B*6-15)+10))}function pe(B,A){return B+Math.floor(Math.random()*(A-B+1))}function ue(B,A){return B+Math.random()*(A-B)}function qe(B){return B*(.5-Math.random())}function be(B){B!==void 0&&(Xo=B);let A=Xo+=1831565813;return A=Math.imul(A^A>>>15,A|1),A^=A+Math.imul(A^A>>>7,A|61),((A^A>>>14)>>>0)/4294967296}function me(B){return B*Rt}function Pe(B){return B*Ft}function Te(B){return(B&B-1)===0&&B!==0}function Oe(B){return Math.pow(2,Math.ceil(Math.log(B)/Math.LN2))}function Xe(B){return Math.pow(2,Math.floor(Math.log(B)/Math.LN2))}function ve(B,A,I,g,Q){const C=Math.cos,E=Math.sin,i=C(I/2),D=E(I/2),o=C((A+g)/2),s=E((A+g)/2),t=C((A-g)/2),w=E((A-g)/2),a=C((g-A)/2),y=E((g-A)/2);switch(Q){case"XYX":B.set(i*s,D*t,D*w,i*o);break;case"YZY":B.set(D*w,i*s,D*t,i*o);break;case"ZXZ":B.set(D*t,D*w,i*s,i*o);break;case"XZX":B.set(i*s,D*y,D*a,i*o);break;case"YXY":B.set(D*a,i*s,D*y,i*o);break;case"ZYZ":B.set(D*y,D*a,i*s,i*o);break;default:console.warn("../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+Q)}}function Ve(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return B/4294967295;case Uint16Array:return B/65535;case Uint8Array:return B/255;case Int32Array:return Math.max(B/2147483647,-1);case Int16Array:return Math.max(B/32767,-1);case Int8Array:return Math.max(B/127,-1);default:throw new Error("Invalid component type.")}}function Ze(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return Math.round(B*4294967295);case Uint16Array:return Math.round(B*65535);case Uint8Array:return Math.round(B*255);case Int32Array:return Math.round(B*2147483647);case Int16Array:return Math.round(B*32767);case Int8Array:return Math.round(B*127);default:throw new Error("Invalid component type.")}}const QB={DEG2RAD:Rt,RAD2DEG:Ft,generateUUID:He,clamp:ng,euclideanModulo:kt,mapLinear:Ye,inverseLerp:Ke,lerp:Mt,damp:de,pingpong:le,smoothstep:fe,smootherstep:xe,randInt:pe,randFloat:ue,randFloatSpread:qe,seededRandom:be,degToRad:me,radToDeg:Pe,isPowerOfTwo:Te,ceilPowerOfTwo:Oe,floorPowerOfTwo:Xe,setQuaternionFromProperEuler:ve,normalize:Ze,denormalize:Ve};class hA{constructor(A=0,I=0,g=0,Q=1){this.isQuaternion=!0,this._x=A,this._y=I,this._z=g,this._w=Q}static slerpFlat(A,I,g,Q,C,E,i){let D=g[Q+0],o=g[Q+1],s=g[Q+2],t=g[Q+3];const w=C[E+0],a=C[E+1],y=C[E+2],r=C[E+3];if(i===0){A[I+0]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t;return}if(i===1){A[I+0]=w,A[I+1]=a,A[I+2]=y,A[I+3]=r;return}if(t!==r||D!==w||o!==a||s!==y){let c=1-i;const h=D*w+o*a+s*y+t*r,G=h>=0?1:-1,R=1-h*h;if(R>Number.EPSILON){const k=Math.sqrt(R),J=Math.atan2(k,h*G);c=Math.sin(c*J)/k,i=Math.sin(i*J)/k}const N=i*G;if(D=D*c+w*N,o=o*c+a*N,s=s*c+y*N,t=t*c+r*N,c===1-i){const k=1/Math.sqrt(D*D+o*o+s*s+t*t);D*=k,o*=k,s*=k,t*=k}}A[I]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t}static multiplyQuaternionsFlat(A,I,g,Q,C,E){const i=g[Q],D=g[Q+1],o=g[Q+2],s=g[Q+3],t=C[E],w=C[E+1],a=C[E+2],y=C[E+3];return A[I]=i*y+s*t+D*a-o*w,A[I+1]=D*y+s*w+o*t-i*a,A[I+2]=o*y+s*a+i*w-D*t,A[I+3]=s*y-i*t-D*w-o*a,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,I,g,Q){return this._x=A,this._y=I,this._z=g,this._w=Q,this._onChangeCallback(),this}clone(){return new hA(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,I=!0){const g=A._x,Q=A._y,C=A._z,E=A._order,i=Math.cos,D=Math.sin,o=i(g/2),s=i(Q/2),t=i(C/2),w=D(g/2),a=D(Q/2),y=D(C/2);switch(E){case"XYZ":this._x=w*s*t+o*a*y,this._y=o*a*t-w*s*y,this._z=o*s*y+w*a*t,this._w=o*s*t-w*a*y;break;case"YXZ":this._x=w*s*t+o*a*y,this._y=o*a*t-w*s*y,this._z=o*s*y-w*a*t,this._w=o*s*t+w*a*y;break;case"ZXY":this._x=w*s*t-o*a*y,this._y=o*a*t+w*s*y,this._z=o*s*y+w*a*t,this._w=o*s*t-w*a*y;break;case"ZYX":this._x=w*s*t-o*a*y,this._y=o*a*t+w*s*y,this._z=o*s*y-w*a*t,this._w=o*s*t+w*a*y;break;case"YZX":this._x=w*s*t+o*a*y,this._y=o*a*t+w*s*y,this._z=o*s*y-w*a*t,this._w=o*s*t-w*a*y;break;case"XZY":this._x=w*s*t-o*a*y,this._y=o*a*t-w*s*y,this._z=o*s*y+w*a*t,this._w=o*s*t+w*a*y;break;default:console.warn("../math.Quaternion: .setFromEuler() encountered an unknown order: "+E)}return I===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,I){const g=I/2,Q=Math.sin(g);return this._x=A.x*Q,this._y=A.y*Q,this._z=A.z*Q,this._w=Math.cos(g),this._onChangeCallback(),this}setFromRotationMatrix(A){const I=A.elements,g=I[0],Q=I[4],C=I[8],E=I[1],i=I[5],D=I[9],o=I[2],s=I[6],t=I[10],w=g+i+t;if(w>0){const a=.5/Math.sqrt(w+1);this._w=.25/a,this._x=(s-D)*a,this._y=(C-o)*a,this._z=(E-Q)*a}else if(g>i&&g>t){const a=2*Math.sqrt(1+g-i-t);this._w=(s-D)/a,this._x=.25*a,this._y=(Q+E)/a,this._z=(C+o)/a}else if(i>t){const a=2*Math.sqrt(1+i-g-t);this._w=(C-o)/a,this._x=(Q+E)/a,this._y=.25*a,this._z=(D+s)/a}else{const a=2*Math.sqrt(1+t-g-i);this._w=(E-Q)/a,this._x=(C+o)/a,this._y=(D+s)/a,this._z=.25*a}return this._onChangeCallback(),this}setFromUnitVectors(A,I){let g=A.dot(I)+1;return g<Number.EPSILON?(g=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=g):(this._x=0,this._y=-A.z,this._z=A.y,this._w=g)):(this._x=A.y*I.z-A.z*I.y,this._y=A.z*I.x-A.x*I.z,this._z=A.x*I.y-A.y*I.x,this._w=g),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(ng(this.dot(A),-1,1)))}rotateTowards(A,I){const g=this.angleTo(A);if(g===0)return this;const Q=Math.min(1,I/g);return this.slerp(A,Q),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,I){const g=A._x,Q=A._y,C=A._z,E=A._w,i=I._x,D=I._y,o=I._z,s=I._w;return this._x=g*s+E*i+Q*o-C*D,this._y=Q*s+E*D+C*i-g*o,this._z=C*s+E*o+g*D-Q*i,this._w=E*s-g*i-Q*D-C*o,this._onChangeCallback(),this}slerp(A,I){if(I===0)return this;if(I===1)return this.copy(A);const g=this._x,Q=this._y,C=this._z,E=this._w;let i=E*A._w+g*A._x+Q*A._y+C*A._z;if(i<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,i=-i):this.copy(A),i>=1)return this._w=E,this._x=g,this._y=Q,this._z=C,this;const D=1-i*i;if(D<=Number.EPSILON){const a=1-I;return this._w=a*E+I*this._w,this._x=a*g+I*this._x,this._y=a*Q+I*this._y,this._z=a*C+I*this._z,this.normalize(),this}const o=Math.sqrt(D),s=Math.atan2(o,i),t=Math.sin((1-I)*s)/o,w=Math.sin(I*s)/o;return this._w=E*t+this._w*w,this._x=g*t+this._x*w,this._y=Q*t+this._y*w,this._z=C*t+this._z*w,this._onChangeCallback(),this}slerpQuaternions(A,I,g){return this.copy(A).slerp(I,g)}random(){const A=2*Math.PI*Math.random(),I=2*Math.PI*Math.random(),g=Math.random(),Q=Math.sqrt(1-g),C=Math.sqrt(g);return this.set(Q*Math.sin(A),Q*Math.cos(A),C*Math.sin(I),C*Math.cos(I))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,I=0){return this._x=A[I],this._y=A[I+1],this._z=A[I+2],this._w=A[I+3],this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._w,A}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class v{constructor(A=0,I=0,g=0){this.isVector3=!0,v.prototype.isVector3=!0,this.x=A,this.y=I,this.z=g}set(A,I,g){return g===void 0&&(g=this.z),this.x=A,this.y=I,this.z=g,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new v(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,I){return this.x=A.x*I.x,this.y=A.y*I.y,this.z=A.z*I.z,this}applyEuler(A){return this.applyQuaternion(vo.setFromEuler(A))}applyAxisAngle(A,I){return this.applyQuaternion(vo.setFromAxisAngle(A,I))}applyMatrix3(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[3]*g+C[6]*Q,this.y=C[1]*I+C[4]*g+C[7]*Q,this.z=C[2]*I+C[5]*g+C[8]*Q,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=A.elements,E=1/(C[3]*I+C[7]*g+C[11]*Q+C[15]);return this.x=(C[0]*I+C[4]*g+C[8]*Q+C[12])*E,this.y=(C[1]*I+C[5]*g+C[9]*Q+C[13])*E,this.z=(C[2]*I+C[6]*g+C[10]*Q+C[14])*E,this}applyQuaternion(A){const I=this.x,g=this.y,Q=this.z,C=A.x,E=A.y,i=A.z,D=A.w,o=2*(E*Q-i*g),s=2*(i*I-C*Q),t=2*(C*g-E*I);return this.x=I+D*o+E*t-i*s,this.y=g+D*s+i*o-C*t,this.z=Q+D*t+C*s-E*o,this}transformDirection(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[4]*g+C[8]*Q,this.y=C[1]*I+C[5]*g+C[9]*Q,this.z=C[2]*I+C[6]*g+C[10]*Q,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,I){const g=A.x,Q=A.y,C=A.z,E=I.x,i=I.y,D=I.z;return this.x=Q*D-C*i,this.y=C*E-g*D,this.z=g*i-Q*E,this}projectOnVector(A){const I=A.lengthSq();if(I===0)return this.set(0,0,0);const g=A.dot(this)/I;return this.copy(A).multiplyScalar(g)}projectOnPlane(A){return yi.copy(this).projectOnVector(A),this.sub(yi)}reflect(A){return this.sub(yi.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(ng(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y,Q=this.z-A.z;return I*I+g*g+Q*Q}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSphericalCoords(A,I,g){const Q=Math.sin(I)*A;return this.x=Q*Math.sin(g),this.y=Math.cos(I)*A,this.z=Q*Math.cos(g),this}setFromCylindricalCoords(A,I,g){return this.x=A*Math.sin(I),this.y=g,this.z=A*Math.cos(I),this}setFromMatrixPosition(A){const I=A.elements;return this.x=I[12],this.y=I[13],this.z=I[14],this}setFromMatrixScale(A){const I=this.setFromMatrixColumn(A,0).length(),g=this.setFromMatrixColumn(A,1).length(),Q=this.setFromMatrixColumn(A,2).length();return this.x=I,this.y=g,this.z=Q,this}setFromMatrixColumn(A,I){return this.fromArray(A.elements,I*4)}setFromMatrix3Column(A,I){return this.fromArray(A.elements,I*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,I=Math.random()*2-1,g=Math.sqrt(1-I*I);return this.x=g*Math.cos(A),this.y=I,this.z=g*Math.sin(A),this}abs(){return this.x=Math.abs(this.x),this.y=Math.abs(this.y),this.z=Math.abs(this.z),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const yi=new v,vo=new hA,uC=2e3,Vo=2001;class tg{constructor(A,I,g,Q,C,E,i,D,o,s,t,w,a,y,r,c){this.isMatrix4=!0,tg.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,E,i,D,o,s,t,w,a,y,r,c)}extractPosition(A){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(A)}multiplyToArray(A,I,g){return console.error("THREE.Matrix4: .multiplyToArray() has been removed."),this}setRotationFromQuaternion(A){return this.makeRotationFromQuaternion(A)}set(A,I,g,Q,C,E,i,D,o,s,t,w,a,y,r,c){const h=this.elements;return h[0]=A,h[4]=I,h[8]=g,h[12]=Q,h[1]=C,h[5]=E,h[9]=i,h[13]=D,h[2]=o,h[6]=s,h[10]=t,h[14]=w,h[3]=a,h[7]=y,h[11]=r,h[15]=c,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new tg().fromArray(this.elements)}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],I[9]=g[9],I[10]=g[10],I[11]=g[11],I[12]=g[12],I[13]=g[13],I[14]=g[14],I[15]=g[15],this}copyPosition(A){const I=this.elements,g=A.elements;return I[12]=g[12],I[13]=g[13],I[14]=g[14],this}setFromMatrix3(A){const I=A.elements;return this.set(I[0],I[3],I[6],0,I[1],I[4],I[7],0,I[2],I[5],I[8],0,0,0,0,1),this}extractBasis(A,I,g){return A.setFromMatrixColumn(this,0),I.setFromMatrixColumn(this,1),g.setFromMatrixColumn(this,2),this}makeBasis(A,I,g){return this.set(A.x,I.x,g.x,0,A.y,I.y,g.y,0,A.z,I.z,g.z,0,0,0,0,1),this}extractRotation(A){const I=this.elements,g=A.elements,Q=1/UQ.setFromMatrixColumn(A,0).length(),C=1/UQ.setFromMatrixColumn(A,1).length(),E=1/UQ.setFromMatrixColumn(A,2).length();return I[0]=g[0]*Q,I[1]=g[1]*Q,I[2]=g[2]*Q,I[3]=0,I[4]=g[4]*C,I[5]=g[5]*C,I[6]=g[6]*C,I[7]=0,I[8]=g[8]*E,I[9]=g[9]*E,I[10]=g[10]*E,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromEuler(A){const I=this.elements,g=A.x,Q=A.y,C=A.z,E=Math.cos(g),i=Math.sin(g),D=Math.cos(Q),o=Math.sin(Q),s=Math.cos(C),t=Math.sin(C);if(A.order==="XYZ"){const w=E*s,a=E*t,y=i*s,r=i*t;I[0]=D*s,I[4]=-D*t,I[8]=o,I[1]=a+y*o,I[5]=w-r*o,I[9]=-i*D,I[2]=r-w*o,I[6]=y+a*o,I[10]=E*D}else if(A.order==="YXZ"){const w=D*s,a=D*t,y=o*s,r=o*t;I[0]=w+r*i,I[4]=y*i-a,I[8]=E*o,I[1]=E*t,I[5]=E*s,I[9]=-i,I[2]=a*i-y,I[6]=r+w*i,I[10]=E*D}else if(A.order==="ZXY"){const w=D*s,a=D*t,y=o*s,r=o*t;I[0]=w-r*i,I[4]=-E*t,I[8]=y+a*i,I[1]=a+y*i,I[5]=E*s,I[9]=r-w*i,I[2]=-E*o,I[6]=i,I[10]=E*D}else if(A.order==="ZYX"){const w=E*s,a=E*t,y=i*s,r=i*t;I[0]=D*s,I[4]=y*o-a,I[8]=w*o+r,I[1]=D*t,I[5]=r*o+w,I[9]=a*o-y,I[2]=-o,I[6]=i*D,I[10]=E*D}else if(A.order==="YZX"){const w=E*D,a=E*o,y=i*D,r=i*o;I[0]=D*s,I[4]=r-w*t,I[8]=y*t+a,I[1]=t,I[5]=E*s,I[9]=-i*s,I[2]=-o*s,I[6]=a*t+y,I[10]=w-r*t}else if(A.order==="XZY"){const w=E*D,a=E*o,y=i*D,r=i*o;I[0]=D*s,I[4]=-t,I[8]=o*s,I[1]=w*t+r,I[5]=E*s,I[9]=a*t-y,I[2]=y*t-a,I[6]=i*s,I[10]=r*t+w}return I[3]=0,I[7]=0,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromQuaternion(A){return this.compose(We,A,je)}lookAt(A,I,g){const Q=this.elements;return xI.subVectors(A,I),xI.lengthSq()===0&&(xI.z=1),xI.normalize(),bg.crossVectors(g,xI),bg.lengthSq()===0&&(Math.abs(g.z)===1?xI.x+=1e-4:xI.z+=1e-4,xI.normalize(),bg.crossVectors(g,xI)),bg.normalize(),qC.crossVectors(xI,bg),Q[0]=bg.x,Q[4]=qC.x,Q[8]=xI.x,Q[1]=bg.y,Q[5]=qC.y,Q[9]=xI.y,Q[2]=bg.z,Q[6]=qC.z,Q[10]=xI.z,this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,E=g[0],i=g[4],D=g[8],o=g[12],s=g[1],t=g[5],w=g[9],a=g[13],y=g[2],r=g[6],c=g[10],h=g[14],G=g[3],R=g[7],N=g[11],k=g[15],J=Q[0],U=Q[4],H=Q[8],d=Q[12],Y=Q[1],f=Q[5],l=Q[9],p=Q[13],q=Q[2],m=Q[6],T=Q[10],Z=Q[14],O=Q[3],j=Q[7],gA=Q[11],QA=Q[15];return C[0]=E*J+i*Y+D*q+o*O,C[4]=E*U+i*f+D*m+o*j,C[8]=E*H+i*l+D*T+o*gA,C[12]=E*d+i*p+D*Z+o*QA,C[1]=s*J+t*Y+w*q+a*O,C[5]=s*U+t*f+w*m+a*j,C[9]=s*H+t*l+w*T+a*gA,C[13]=s*d+t*p+w*Z+a*QA,C[2]=y*J+r*Y+c*q+h*O,C[6]=y*U+r*f+c*m+h*j,C[10]=y*H+r*l+c*T+h*gA,C[14]=y*d+r*p+c*Z+h*QA,C[3]=G*J+R*Y+N*q+k*O,C[7]=G*U+R*f+N*m+k*j,C[11]=G*H+R*l+N*T+k*gA,C[15]=G*d+R*p+N*Z+k*QA,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[4]*=A,I[8]*=A,I[12]*=A,I[1]*=A,I[5]*=A,I[9]*=A,I[13]*=A,I[2]*=A,I[6]*=A,I[10]*=A,I[14]*=A,I[3]*=A,I[7]*=A,I[11]*=A,I[15]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[4],Q=A[8],C=A[12],E=A[1],i=A[5],D=A[9],o=A[13],s=A[2],t=A[6],w=A[10],a=A[14],y=A[3],r=A[7],c=A[11],h=A[15];return y*(+C*D*t-Q*o*t-C*i*w+g*o*w+Q*i*a-g*D*a)+r*(+I*D*a-I*o*w+C*E*w-Q*E*a+Q*o*s-C*D*s)+c*(+I*o*t-I*i*a-C*E*t+g*E*a+C*i*s-g*o*s)+h*(-Q*i*s-I*D*t+I*i*w+Q*E*t-g*E*w+g*D*s)}transpose(){const A=this.elements;let I;return I=A[1],A[1]=A[4],A[4]=I,I=A[2],A[2]=A[8],A[8]=I,I=A[6],A[6]=A[9],A[9]=I,I=A[3],A[3]=A[12],A[12]=I,I=A[7],A[7]=A[13],A[13]=I,I=A[11],A[11]=A[14],A[14]=I,this}setPosition(A,I,g){const Q=this.elements;return A.isVector3?(Q[12]=A.x,Q[13]=A.y,Q[14]=A.z):(Q[12]=A,Q[13]=I,Q[14]=g),this}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],i=A[5],D=A[6],o=A[7],s=A[8],t=A[9],w=A[10],a=A[11],y=A[12],r=A[13],c=A[14],h=A[15],G=t*c*o-r*w*o+r*D*a-i*c*a-t*D*h+i*w*h,R=y*w*o-s*c*o-y*D*a+E*c*a+s*D*h-E*w*h,N=s*r*o-y*t*o+y*i*a-E*r*a-s*i*h+E*t*h,k=y*t*D-s*r*D-y*i*w+E*r*w+s*i*c-E*t*c,J=I*G+g*R+Q*N+C*k;if(J===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const U=1/J;return A[0]=G*U,A[1]=(r*w*C-t*c*C-r*Q*a+g*c*a+t*Q*h-g*w*h)*U,A[2]=(i*c*C-r*D*C+r*Q*o-g*c*o-i*Q*h+g*D*h)*U,A[3]=(t*D*C-i*w*C-t*Q*o+g*w*o+i*Q*a-g*D*a)*U,A[4]=R*U,A[5]=(s*c*C-y*w*C+y*Q*a-I*c*a-s*Q*h+I*w*h)*U,A[6]=(y*D*C-E*c*C-y*Q*o+I*c*o+E*Q*h-I*D*h)*U,A[7]=(E*w*C-s*D*C+s*Q*o-I*w*o-E*Q*a+I*D*a)*U,A[8]=N*U,A[9]=(y*t*C-s*r*C-y*g*a+I*r*a+s*g*h-I*t*h)*U,A[10]=(E*r*C-y*i*C+y*g*o-I*r*o-E*g*h+I*i*h)*U,A[11]=(s*i*C-E*t*C-s*g*o+I*t*o+E*g*a-I*i*a)*U,A[12]=k*U,A[13]=(s*r*Q-y*t*Q+y*g*w-I*r*w-s*g*c+I*t*c)*U,A[14]=(y*i*Q-E*r*Q-y*g*D+I*r*D+E*g*c-I*i*c)*U,A[15]=(E*t*Q-s*i*Q+s*g*D-I*t*D-E*g*w+I*i*w)*U,this}scale(A){const I=this.elements,g=A.x,Q=A.y,C=A.z;return I[0]*=g,I[4]*=Q,I[8]*=C,I[1]*=g,I[5]*=Q,I[9]*=C,I[2]*=g,I[6]*=Q,I[10]*=C,I[3]*=g,I[7]*=Q,I[11]*=C,this}getMaxScaleOnAxis(){const A=this.elements,I=A[0]*A[0]+A[1]*A[1]+A[2]*A[2],g=A[4]*A[4]+A[5]*A[5]+A[6]*A[6],Q=A[8]*A[8]+A[9]*A[9]+A[10]*A[10];return Math.sqrt(Math.max(I,g,Q))}makeTranslation(A,I,g){return A.isVector3?this.set(1,0,0,A.x,0,1,0,A.y,0,0,1,A.z,0,0,0,1):this.set(1,0,0,A,0,1,0,I,0,0,1,g,0,0,0,1),this}makeRotationX(A){const I=Math.cos(A),g=Math.sin(A);return this.set(1,0,0,0,0,I,-g,0,0,g,I,0,0,0,0,1),this}makeRotationY(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,0,g,0,0,1,0,0,-g,0,I,0,0,0,0,1),this}makeRotationZ(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,0,g,I,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(A,I){const g=Math.cos(I),Q=Math.sin(I),C=1-g,E=A.x,i=A.y,D=A.z,o=C*E,s=C*i;return this.set(o*E+g,o*i-Q*D,o*D+Q*i,0,o*i+Q*D,s*i+g,s*D-Q*E,0,o*D-Q*i,s*D+Q*E,C*D*D+g,0,0,0,0,1),this}makeScale(A,I,g){return this.set(A,0,0,0,0,I,0,0,0,0,g,0,0,0,0,1),this}makeShear(A,I,g,Q,C,E){return this.set(1,g,C,0,A,1,E,0,I,Q,1,0,0,0,0,1),this}compose(A,I,g){const Q=this.elements,C=I._x,E=I._y,i=I._z,D=I._w,o=C+C,s=E+E,t=i+i,w=C*o,a=C*s,y=C*t,r=E*s,c=E*t,h=i*t,G=D*o,R=D*s,N=D*t,k=g.x,J=g.y,U=g.z;return Q[0]=(1-(r+h))*k,Q[1]=(a+N)*k,Q[2]=(y-R)*k,Q[3]=0,Q[4]=(a-N)*J,Q[5]=(1-(w+h))*J,Q[6]=(c+G)*J,Q[7]=0,Q[8]=(y+R)*U,Q[9]=(c-G)*U,Q[10]=(1-(w+r))*U,Q[11]=0,Q[12]=A.x,Q[13]=A.y,Q[14]=A.z,Q[15]=1,this}decompose(A,I,g){const Q=this.elements;let C=UQ.set(Q[0],Q[1],Q[2]).length();const E=UQ.set(Q[4],Q[5],Q[6]).length(),i=UQ.set(Q[8],Q[9],Q[10]).length();this.determinant()<0&&(C=-C),A.x=Q[12],A.y=Q[13],A.z=Q[14],gg.copy(this);const o=1/C,s=1/E,t=1/i;return gg.elements[0]*=o,gg.elements[1]*=o,gg.elements[2]*=o,gg.elements[4]*=s,gg.elements[5]*=s,gg.elements[6]*=s,gg.elements[8]*=t,gg.elements[9]*=t,gg.elements[10]*=t,I.setFromRotationMatrix(gg),g.x=C,g.y=E,g.z=i,this}makePerspective(A,I,g,Q,C,E,i=uC){const D=this.elements,o=2*C/(I-A),s=2*C/(g-Q),t=(I+A)/(I-A),w=(g+Q)/(g-Q);let a,y;if(i===uC)a=-(E+C)/(E-C),y=-2*E*C/(E-C);else if(i===Vo)a=-E/(E-C),y=-E*C/(E-C);else throw new Error("Matrix4.makePerspective(): Invalid coordinate system: "+i);return D[0]=o,D[4]=0,D[8]=t,D[12]=0,D[1]=0,D[5]=s,D[9]=w,D[13]=0,D[2]=0,D[6]=0,D[10]=a,D[14]=y,D[3]=0,D[7]=0,D[11]=-1,D[15]=0,this}makeOrthographic(A,I,g,Q,C,E,i=uC){const D=this.elements,o=1/(I-A),s=1/(g-Q),t=1/(E-C),w=(I+A)*o,a=(g+Q)*s;let y,r;if(i===uC)y=(E+C)*t,r=-2*t;else if(i===Vo)y=C*t,r=-1*t;else throw new Error("../math.Matrix4.makeOrthographic(): Invalid coordinate system: "+i);return D[0]=2*o,D[4]=0,D[8]=0,D[12]=-w,D[1]=0,D[5]=2*s,D[9]=0,D[13]=-a,D[2]=0,D[6]=0,D[10]=r,D[14]=-y,D[3]=0,D[7]=0,D[11]=0,D[15]=1,this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<16;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<16;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A[I+9]=g[9],A[I+10]=g[10],A[I+11]=g[11],A[I+12]=g[12],A[I+13]=g[13],A[I+14]=g[14],A[I+15]=g[15],A}}const UQ=new v,gg=new tg,We=new v(0,0,0),je=new v(1,1,1),bg=new v,qC=new v,xI=new v,Zo=new tg,Wo=new hA;class TB{constructor(A=0,I=0,g=0,Q=TB.DEFAULT_ORDER){this.isEuler=!0,this._x=A,this._y=I,this._z=g,this._order=Q}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get order(){return this._order}set order(A){this._order=A,this._onChangeCallback()}set(A,I,g,Q=this._order){return this._x=A,this._y=I,this._z=g,this._order=Q,this._onChangeCallback(),this}clone(){return new TB(this._x,this._y,this._z,this._order)}copy(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this}setFromRotationMatrix(A,I=this._order,g=!0){const Q=A.elements,C=Q[0],E=Q[4],i=Q[8],D=Q[1],o=Q[5],s=Q[9],t=Q[2],w=Q[6],a=Q[10];switch(I){case"XYZ":this._y=Math.asin(ng(i,-1,1)),Math.abs(i)<.9999999?(this._x=Math.atan2(-s,a),this._z=Math.atan2(-E,C)):(this._x=Math.atan2(w,o),this._z=0);break;case"YXZ":this._x=Math.asin(-ng(s,-1,1)),Math.abs(s)<.9999999?(this._y=Math.atan2(i,a),this._z=Math.atan2(D,o)):(this._y=Math.atan2(-t,C),this._z=0);break;case"ZXY":this._x=Math.asin(ng(w,-1,1)),Math.abs(w)<.9999999?(this._y=Math.atan2(-t,a),this._z=Math.atan2(-E,o)):(this._y=0,this._z=Math.atan2(D,C));break;case"ZYX":this._y=Math.asin(-ng(t,-1,1)),Math.abs(t)<.9999999?(this._x=Math.atan2(w,a),this._z=Math.atan2(D,C)):(this._x=0,this._z=Math.atan2(-E,o));break;case"YZX":this._z=Math.asin(ng(D,-1,1)),Math.abs(D)<.9999999?(this._x=Math.atan2(-s,o),this._y=Math.atan2(-t,C)):(this._x=0,this._y=Math.atan2(i,a));break;case"XZY":this._z=Math.asin(-ng(E,-1,1)),Math.abs(E)<.9999999?(this._x=Math.atan2(w,o),this._y=Math.atan2(i,C)):(this._x=Math.atan2(-s,a),this._y=0);break;default:console.warn("../math.Euler: .setFromRotationMatrix() encountered an unknown order: "+I)}return this._order=I,g===!0&&this._onChangeCallback(),this}setFromQuaternion(A,I,g){return Zo.makeRotationFromQuaternion(A),this.setFromRotationMatrix(Zo,I,g)}setFromVector3(A,I=this._order){return this.set(A.x,A.y,A.z,I)}reorder(A){return Wo.setFromEuler(this),this.setFromQuaternion(Wo,A)}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order}fromArray(A){return this._x=A[0],this._y=A[1],this._z=A[2],A[3]!==void 0&&(this._order=A[3]),this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._order,A}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(A){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}TB.DEFAULT_ORDER="XYZ";class VQ{constructor(A=0,I=0){this.x=A,this.y=I}get width(){return this.x}set width(A){this.x=A}get height(){return this.y}set height(A){this.y=A}set(A,I){return this.x=A,this.y=I,this}setScalar(A){return this.x=A,this.y=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}}clone(){return new VQ(this.x,this.y)}copy(A){return this.x=A.x,this.y=A.y,this}add(A){return this.x+=A.x,this.y+=A.y,this}addScalar(A){return this.x+=A,this.y+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this}subScalar(A){return this.x-=A,this.y-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this}multiply(A){return this.x*=A.x,this.y*=A.y,this}multiplyScalar(A){return this.x*=A,this.y*=A,this}divide(A){return this.x/=A.x,this.y/=A.y,this}divideScalar(A){return this.multiplyScalar(1/A)}applyMatrix3(A){const I=this.x,g=this.y,Q=A.elements;return this.x=Q[0]*I+Q[3]*g+Q[6],this.y=Q[1]*I+Q[4]*g+Q[7],this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(A){return this.x*A.x+this.y*A.y}cross(A){return this.x*A.y-this.y*A.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(ng(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y;return I*I+g*g}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this}equals(A){return A.x===this.x&&A.y===this.y}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A}rotateAround(A,I){const g=Math.cos(I),Q=Math.sin(I),C=this.x-A.x,E=this.y-A.y;return this.x=C*g-E*Q+A.x,this.y=C*Q+E*g+A.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}VQ.isVector2=!0;class YI{constructor(A=0,I=0,g=0,Q=1){YI.prototype.isVector4=!0,this.x=A,this.y=I,this.z=g,this.w=Q}get width(){return this.z}set width(A){this.z=A}get height(){return this.w}set height(A){this.w=A}set(A,I,g,Q){return this.x=A,this.y=I,this.z=g,this.w=Q,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this.w=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setW(A){return this.w=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;case 3:this.w=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+A)}}clone(){return new YI(this.x,this.y,this.z,this.w)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this.w=A.w,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this.w=A.w+I.w,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this.w+=A.w*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this.w=A.w-I.w,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this.w*=A.w,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=this.w,E=A.elements;return this.x=E[0]*I+E[4]*g+E[8]*Q+E[12]*C,this.y=E[1]*I+E[5]*g+E[9]*Q+E[13]*C,this.z=E[2]*I+E[6]*g+E[10]*Q+E[14]*C,this.w=E[3]*I+E[7]*g+E[11]*Q+E[15]*C,this}divideScalar(A){return this.multiplyScalar(1/A)}setAxisAngleFromQuaternion(A){this.w=2*Math.acos(A.w);const I=Math.sqrt(1-A.w*A.w);return I<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=A.x/I,this.y=A.y/I,this.z=A.z/I),this}setAxisAngleFromRotationMatrix(A){let I,g,Q,C;const D=A.elements,o=D[0],s=D[4],t=D[8],w=D[1],a=D[5],y=D[9],r=D[2],c=D[6],h=D[10];if(Math.abs(s-w)<.01&&Math.abs(t-r)<.01&&Math.abs(y-c)<.01){if(Math.abs(s+w)<.1&&Math.abs(t+r)<.1&&Math.abs(y+c)<.1&&Math.abs(o+a+h-3)<.1)return this.set(1,0,0,0),this;I=Math.PI;const R=(o+1)/2,N=(a+1)/2,k=(h+1)/2,J=(s+w)/4,U=(t+r)/4,H=(y+c)/4;return R>N&&R>k?R<.01?(g=0,Q=.707106781,C=.707106781):(g=Math.sqrt(R),Q=J/g,C=U/g):N>k?N<.01?(g=.707106781,Q=0,C=.707106781):(Q=Math.sqrt(N),g=J/Q,C=H/Q):k<.01?(g=.707106781,Q=.707106781,C=0):(C=Math.sqrt(k),g=U/C,Q=H/C),this.set(g,Q,C,I),this}let G=Math.sqrt((c-y)*(c-y)+(t-r)*(t-r)+(w-s)*(w-s));return Math.abs(G)<.001&&(G=1),this.x=(c-y)/G,this.y=(t-r)/G,this.z=(w-s)/G,this.w=Math.acos((o+a+h-1)/2),this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this.w=Math.min(this.w,A.w),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this.w=Math.max(this.w,A.w),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this.w=Math.max(A.w,Math.min(I.w,this.w)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this.w=Math.max(A,Math.min(I,this.w)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z+this.w*A.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this.w+=(A.w-this.w)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this.w=A.w+(I.w-A.w)*g,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this.w=A[I+3],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A[I+3]=this.w,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class yg{constructor(A,I,g,Q,C,E,i,D,o){yg.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,E,i,D,o)}set(A,I,g,Q,C,E,i,D,o){const s=this.elements;return s[0]=A,s[1]=Q,s[2]=i,s[3]=I,s[4]=C,s[5]=D,s[6]=g,s[7]=E,s[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],this}extractBasis(A,I,g){return A.setFromMatrix3Column(this,0),I.setFromMatrix3Column(this,1),g.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const I=A.elements;return this.set(I[0],I[4],I[8],I[1],I[5],I[9],I[2],I[6],I[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,E=g[0],i=g[3],D=g[6],o=g[1],s=g[4],t=g[7],w=g[2],a=g[5],y=g[8],r=Q[0],c=Q[3],h=Q[6],G=Q[1],R=Q[4],N=Q[7],k=Q[2],J=Q[5],U=Q[8];return C[0]=E*r+i*G+D*k,C[3]=E*c+i*R+D*J,C[6]=E*h+i*N+D*U,C[1]=o*r+s*G+t*k,C[4]=o*c+s*R+t*J,C[7]=o*h+s*N+t*U,C[2]=w*r+a*G+y*k,C[5]=w*c+a*R+y*J,C[8]=w*h+a*N+y*U,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[3]*=A,I[6]*=A,I[1]*=A,I[4]*=A,I[7]*=A,I[2]*=A,I[5]*=A,I[8]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],i=A[5],D=A[6],o=A[7],s=A[8];return I*E*s-I*i*o-g*C*s+g*i*D+Q*C*o-Q*E*D}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],i=A[5],D=A[6],o=A[7],s=A[8],t=s*E-i*o,w=i*D-s*C,a=o*C-E*D,y=I*t+g*w+Q*a;if(y===0)return this.set(0,0,0,0,0,0,0,0,0);const r=1/y;return A[0]=t*r,A[1]=(Q*o-s*g)*r,A[2]=(i*g-Q*E)*r,A[3]=w*r,A[4]=(s*I-Q*D)*r,A[5]=(Q*C-i*I)*r,A[6]=a*r,A[7]=(g*D-o*I)*r,A[8]=(E*I-g*C)*r,this}transpose(){let A;const I=this.elements;return A=I[1],I[1]=I[3],I[3]=A,A=I[2],I[2]=I[6],I[6]=A,A=I[5],I[5]=I[7],I[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const I=this.elements;return A[0]=I[0],A[1]=I[3],A[2]=I[6],A[3]=I[1],A[4]=I[4],A[5]=I[7],A[6]=I[2],A[7]=I[5],A[8]=I[8],this}setUvTransform(A,I,g,Q,C,E,i){const D=Math.cos(C),o=Math.sin(C);return this.set(g*D,g*o,-g*(D*E+o*i)+E+A,-Q*o,Q*D,-Q*(-o*E+D*i)+i+I,0,0,1),this}scale(A,I){return this.premultiply(Gi.makeScale(A,I)),this}rotate(A){return this.premultiply(Gi.makeRotation(-A)),this}translate(A,I){return this.premultiply(Gi.makeTranslation(A,I)),this}makeTranslation(A,I){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,I,0,0,1),this}makeRotation(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,g,I,0,0,0,1),this}makeScale(A,I){return this.set(A,0,0,0,I,0,0,0,1),this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<9;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<9;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A}clone(){return new yg().fromArray(this.elements)}}const Gi=new yg;var SI;(function(B){B[B.Random=0]="Random",B[B.Loop=1]="Loop",B[B.PingPong=2]="PingPong",B[B.Burst=3]="Burst"})(SI||(SI={}));function kC(B,A,I,g){let Q;switch(SI.Random===B?A=Math.random():SI.Burst===B&&g.isBursting&&(A=g.burstParticleIndex/g.burstParticleCount),I>0?Q=Math.floor(A/I)*I:Q=A,B){case SI.Loop:Q=Q%1;break;case SI.PingPong:Q=Math.abs(Q%2-1);break}return Q}class oQ{constructor(A,I,g,Q){this.p=[A,I,g,Q]}genValue(A){const I=A*A,g=A*A*A,Q=1-A,C=Q*Q,E=C*Q;return this.p[0]*E+this.p[1]*C*A*3+this.p[2]*Q*I*3+this.p[3]*g}derivativeCoefficients(A){const I=[];for(let g=A,Q=g.length-1;Q>0;Q--){const C=[];for(let E=0;E<Q;E++){const i=Q*(g[E+1]-g[E]);C.push(i)}I.push(C),g=C}return I}getSlope(A){const I=this.derivativeCoefficients(this.p)[0],g=1-A,Q=g*g,C=g*A*2,E=A*A;return Q*I[0]+C*I[1]+E*I[2]}controlCurve(A,I){this.p[1]=A/3+this.p[0],this.p[2]=this.p[3]-I/3}hull(A){let I=this.p,g=[],Q,C=0,E=0,i=0;const D=[];for(D[C++]=I[0],D[C++]=I[1],D[C++]=I[2],D[C++]=I[3];I.length>1;){for(g=[],E=0,i=I.length-1;E<i;E++)Q=A*I[E]+(1-A)*I[E+1],D[C++]=Q,g.push(Q);I=g}return D}split(A){const I=this.hull(A);return{left:new oQ(I[0],I[4],I[7],I[9]),right:new oQ(I[9],I[8],I[6],I[3]),span:I}}clone(){return new oQ(this.p[0],this.p[1],this.p[2],this.p[3])}toJSON(){return{p0:this.p[0],p1:this.p[1],p2:this.p[2],p3:this.p[3]}}static fromJSON(A){return new oQ(A.p0,A.p1,A.p2,A.p3)}}const OB=B=>({r:B.x,g:B.y,b:B.z,a:B.w}),XB=B=>new YI(B.r,B.g,B.b,B.a),ze=(B,A)=>{switch(A){case"Vector3":return new v(B.x,B.y,B.z);case"Vector4":return new YI(B.x,B.y,B.z,B.w);case"Color":return new v(B.r,B.g,B.b);case"Number":return B;default:return B}},_e=(B,A)=>{switch(A){case"Vector3":return{x:B.x,y:B.y,z:B.z};case"Vector4":return{x:B.x,y:B.y,z:B.z,w:B.w};case"Color":return{r:B.x,g:B.y,b:B.z};case"Number":return B;default:return B}};class FE{constructor(A,I){this.a=A,this.b=I,this.type="value"}startGen(A){}genColor(A,I){const g=Math.random();return I.copy(this.a).lerp(this.b,g)}toJSON(){return{type:"RandomColor",a:OB(this.a),b:OB(this.b)}}static fromJSON(A){return new FE(XB(A.a),XB(A.b))}clone(){return new FE(this.a.clone(),this.b.clone())}}class ZQ{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I){return this.indexCount===-1&&this.startGen(A),I.copy(this.a).lerp(this.b,A[this.indexCount])}toJSON(){return{type:"ColorRange",a:OB(this.a),b:OB(this.b)}}static fromJSON(A){return new ZQ(XB(A.a),XB(A.b))}clone(){return new ZQ(this.a.clone(),this.b.clone())}}class vg{constructor(A,I){this.subType=I,this.type="function",this.keys=A}findKey(A){let I=0,g=0,Q=this.keys.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.getStartX(C)&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.keys[A][1]}getEndX(A){return A+1<this.keys.length?this.keys[A+1][1]:1}genValue(A,I){const g=this.findKey(I);return this.subType==="Number"?g===-1?this.keys[0][0]:g+1>=this.keys.length?this.keys[this.keys.length-1][0]:(this.keys[g+1][0]-this.keys[g][0])*((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))+this.keys[g][0]:g===-1?A.copy(this.keys[0][0]):g+1>=this.keys.length?A.copy(this.keys[this.keys.length-1][0]):A.copy(this.keys[g][0]).lerp(this.keys[g+1][0],(I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toJSON(){return this.keys[0][0].constructor.name,{type:"CLinearFunction",subType:this.subType,keys:this.keys.map(([A,I])=>({value:_e(A,this.subType),pos:I}))}}static fromJSON(A){return new vg(A.keys.map(I=>[ze(I.value,A.subType),I.pos]),A.subType)}clone(){return this.subType==="Number"?new vg(this.keys.map(([A,I])=>[A,I]),this.subType):new vg(this.keys.map(([A,I])=>[A.clone(),I]),this.subType)}}const bC=new v;class nQ{constructor(A=[[new v(0,0,0),0],[new v(1,1,1),0]],I=[[1,0],[1,1]]){this.type="function",this.color=new vg(A,"Color"),this.alpha=new vg(I,"Number")}genColor(A,I,g){return this.color.genValue(bC,g),I.set(bC.x,bC.y,bC.z,this.alpha.genValue(1,g))}toJSON(){return{type:"Gradient",color:this.color.toJSON(),alpha:this.alpha.toJSON()}}static fromJSON(A){if(A.functions){const I=A.functions.map(g=>[ZQ.fromJSON(g.function).a,g.start]);return A.functions.length>0&&I.push([ZQ.fromJSON(A.functions[A.functions.length-1].function).b,1]),new nQ(I.map(g=>[new v(g[0].x,g[0].y,g[0].z),g[1]]),I.map(g=>[g[0].w,g[1]]))}else{const I=new nQ;return I.alpha=vg.fromJSON(A.alpha),I.color=vg.fromJSON(A.color),I}}clone(){const A=new nQ;return A.alpha=this.alpha.clone(),A.color=this.color.clone(),A}startGen(A){}}const ri=new YI;class kE{constructor(A,I){this.indexCount=0,this.type="function",this.gradient1=A,this.gradient2=I}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I,g){return this.gradient1.genColor(A,I,g),this.gradient2.genColor(A,ri,g),A&&A[this.indexCount]!==void 0?I.lerp(ri,A[this.indexCount]):I.lerp(ri,Math.random()),I}toJSON(){return{type:"RandomColorBetweenGradient",gradient1:this.gradient1.toJSON(),gradient2:this.gradient2.toJSON()}}static fromJSON(A){return new kE(nQ.fromJSON(A.gradient1),nQ.fromJSON(A.gradient2))}clone(){return new kE(this.gradient1.clone(),this.gradient2.clone())}}class hQ{constructor(A){this.color=A,this.type="value"}startGen(A){}genColor(A,I){return I.copy(this.color)}toJSON(){return{type:"ConstantColor",color:OB(this.color)}}static fromJSON(A){return new hQ(XB(A.color))}clone(){return new hQ(this.color.clone())}}function PD(B){switch(B.type){case"ConstantColor":return hQ.fromJSON(B);case"ColorRange":return ZQ.fromJSON(B);case"RandomColor":return FE.fromJSON(B);case"Gradient":return nQ.fromJSON(B);case"RandomColorBetweenGradient":return kE.fromJSON(B);default:return new hQ(new YI(1,1,1,1))}}class cA{constructor(A){this.value=A,this.type="value"}startGen(A){}genValue(A){return this.value}toJSON(){return{type:"ConstantValue",value:this.value}}static fromJSON(A){return new cA(A.value)}clone(){return new cA(this.value)}}class yQ{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genValue(A){return this.indexCount===-1&&this.startGen(A),QB.lerp(this.a,this.b,A[this.indexCount])}toJSON(){return{type:"IntervalValue",a:this.a,b:this.b}}static fromJSON(A){return new yQ(A.a,A.b)}clone(){return new yQ(this.a,this.b)}}class $e{constructor(){this.functions=new Array}findFunction(A){let I=0,g=0,Q=this.functions.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.functions[C][1]&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.functions[A][1]}setStartX(A,I){A>0&&(this.functions[A][1]=I)}getEndX(A){return A+1<this.functions.length?this.functions[A+1][1]:1}setEndX(A,I){A+1<this.functions.length&&(this.functions[A+1][1]=I)}insertFunction(A,I){const g=this.findFunction(A);this.functions.splice(g+1,0,[I,A])}removeFunction(A){return this.functions.splice(A,1)[0][0]}getFunction(A){return this.functions[A][0]}setFunction(A,I){this.functions[A][0]=I}get numOfFunctions(){return this.functions.length}}class vB extends $e{constructor(A=[[new oQ(0,1/3,1/3*2,1),0]]){super(),this.type="function",this.functions=A}genValue(A,I=0){const g=this.findFunction(I);return g===-1?0:this.functions[g][0].genValue((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toSVG(A,I){if(I<1)return"";let g=["M",0,this.functions[0][0].p[0]].join(" ");for(let Q=1/I;Q<=1;Q+=1/I)g=[g,"L",Q*A,this.genValue(void 0,Q)].join(" ");return g}toJSON(){return{type:"PiecewiseBezier",functions:this.functions.map(([A,I])=>({function:A.toJSON(),start:I}))}}static fromJSON(A){return new vB(A.functions.map(I=>[oQ.fromJSON(I.function),I.start]))}clone(){return new vB(this.functions.map(([A,I])=>[A.clone(),I]))}startGen(A){}}function sA(B){switch(B.type){case"ConstantValue":return cA.fromJSON(B);case"IntervalValue":return yQ.fromJSON(B);case"PiecewiseBezier":return vB.fromJSON(B);default:return new cA(0)}}class VB{constructor(){this.indexCount=0,this.type="rotation"}startGen(A){this.indexCount=A.length,A.push(new hA);let I,g,Q,C,E,i;do I=Math.random()*2-1,g=Math.random()*2-1,Q=I*I+g*g;while(Q>1);do C=Math.random()*2-1,E=Math.random()*2-1,i=C*C+E*E;while(i>1);const D=Math.sqrt((1-Q)/i);A[this.indexCount].set(I,g,D*C,D*E)}genValue(A,I,g,Q){return this.indexCount===-1&&this.startGen(A),I.copy(A[this.indexCount]),I}toJSON(){return{type:"RandomQuat"}}static fromJSON(A){return new VB}clone(){return new VB}}class ZB{constructor(A,I){this.axis=A,this.angle=I,this.type="rotation"}startGen(A){this.angle.startGen(A)}genValue(A,I,g,Q){return I.setFromAxisAngle(this.axis,this.angle.genValue(A,Q)*g)}toJSON(){return{type:"AxisAngle",axis:{x:this.axis.x,y:this.axis.y,z:this.axis.z},angle:this.angle.toJSON()}}static fromJSON(A){return new ZB(new v(A.axis.x,A.axis.y,A.axis.z),sA(A.angle))}clone(){return new ZB(this.axis.clone(),this.angle.clone())}}class ME{constructor(A,I,g,Q){this.angleX=A,this.angleY=I,this.angleZ=g,this.type="rotation",this.eular=new TB(0,0,0,Q)}startGen(A){this.angleX.startGen(A),this.angleY.startGen(A),this.angleZ.startGen(A)}genValue(A,I,g,Q){return this.eular.set(this.angleX.genValue(A,Q)*g,this.angleY.genValue(A,Q)*g,this.angleZ.genValue(A,Q)*g),I.setFromEuler(this.eular)}toJSON(){return{type:"Euler",angleX:this.angleX.toJSON(),angleY:this.angleY.toJSON(),angleZ:this.angleZ.toJSON(),eulerOrder:this.eular.order}}static fromJSON(A){return new ME(sA(A.angleX),sA(A.angleY),sA(A.angleZ),A.eulerOrder)}clone(){return new ME(this.angleX,this.angleY,this.angleZ,this.eular.order)}}function Nt(B){switch(B.type){case"AxisAngle":return ZB.fromJSON(B);case"Euler":return ME.fromJSON(B);case"RandomQuat":return VB.fromJSON(B);default:return new VB}}class GQ{constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="vec3function"}startGen(A){this.x.startGen(A),this.y.startGen(A),this.z.startGen(A)}genValue(A,I,g){return I.set(this.x.genValue(A,g),this.y.genValue(A,g),this.z.genValue(A,g))}toJSON(){return{type:"Vector3Function",x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new GQ(sA(A.x),sA(A.y),sA(A.z))}clone(){return new GQ(this.x,this.y,this.z)}}function A0(B){return B.type==="Vector3Function"?GQ.fromJSON(B):new GQ(new cA(0),new cA(0),new cA(0))}function NE(B){switch(B.type){case"ConstantValue":case"IntervalValue":case"PiecewiseBezier":return sA(B);case"AxisAngle":case"RandomQuat":case"Euler":return Nt(B);case"Vector3Function":return A0(B);default:return new cA(0)}}class WB{constructor(A={}){var I,g,Q,C,E,i,D;this.type="cone",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.angle=(C=A.angle)!==null&&C!==void 0?C:Math.PI/6,this.mode=(E=A.mode)!==null&&E!==void 0?E:SI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new cA(1),this.memory=[]}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=kC(this.mode,this.currentValue,this.spread,I),Q=QB.lerp(1-this.thickness,1,Math.random()),C=g*this.arc,E=Math.sqrt(Q),i=Math.sin(C),D=Math.cos(C);A.position.x=E*D,A.position.y=E*i,A.position.z=0;const o=this.angle*E;A.velocity.set(0,0,Math.cos(o)).addScaledVector(A.position,Math.sin(o)).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius)}toJSON(){return{type:"cone",radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new WB({radius:A.radius,arc:A.arc,thickness:A.thickness,angle:A.angle,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new WB({radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class jB{constructor(A={}){var I,g,Q,C,E,i;this.type="circle",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:SI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(i=A.speed)!==null&&i!==void 0?i:new cA(1),this.memory=[]}update(A,I){this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I}initialize(A,I){const g=kC(this.mode,this.currentValue,this.spread,I),Q=QB.lerp(1-this.thickness,1,Math.random()),C=g*this.arc;A.position.x=Math.cos(C),A.position.y=Math.sin(C),A.position.z=0,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*Q)}toJSON(){return{type:"circle",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new jB({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new jB({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}function mC(B,A){return Math.floor(Math.random()*(A-B))+B}const bE=new v(0,1,0),mE=new v(0,0,0),I0=new v(1,1,1),jo=new v(0,0,1);class zB{constructor(A={}){var I,g,Q,C,E,i,D;this.type="donut",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.donutRadius=(C=A.donutRadius)!==null&&C!==void 0?C:this.radius*.2,this.mode=(E=A.mode)!==null&&E!==void 0?E:SI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new cA(1),this.memory=[],this._m1=new tg}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=kC(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=QB.lerp(1-this.thickness,1,Math.random()),E=g*this.arc,i=Q*Math.PI*2,D=Math.sin(E),o=Math.cos(E);A.position.x=this.radius*o,A.position.y=this.radius*D,A.position.z=0,A.velocity.z=this.donutRadius*C*Math.sin(i),A.velocity.x=this.donutRadius*C*Math.cos(i)*o,A.velocity.y=this.donutRadius*C*Math.cos(i)*D,A.position.add(A.velocity),A.velocity.normalize().multiplyScalar(A.startSpeed),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.velocity,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"donut",radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new zB({radius:A.radius,arc:A.arc,thickness:A.thickness,donutRadius:A.donutRadius,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new zB({radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class _B{constructor(){this.type="point",this._m1=new tg}update(A,I){}initialize(A){const I=Math.random(),g=Math.random(),Q=I*Math.PI*2,C=Math.acos(2*g-1),E=Math.cbrt(Math.random()),i=Math.sin(Q),D=Math.cos(Q),o=Math.sin(C),s=Math.cos(C);A.velocity.x=E*o*D,A.velocity.y=E*o*i,A.velocity.z=E*s,A.velocity.multiplyScalar(A.startSpeed),A.position.setScalar(0),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.position,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"point"}}static fromJSON(A){return new _B}clone(){return new _B}}class WQ{constructor(A={}){var I,g,Q,C,E,i;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:SI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(i=A.speed)!==null&&i!==void 0?i:new cA(1),this.memory=[],this._m1=new tg}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=kC(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=QB.lerp(1-this.thickness,1,Math.random()),E=g*this.arc,i=Math.acos(2*Q-1),D=Math.sin(E),o=Math.cos(E),s=Math.sin(i),t=Math.cos(i);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.position,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"sphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new WQ({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new WQ({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class $B{constructor(A={}){var I,g,Q,C,E,i;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:SI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(i=A.speed)!==null&&i!==void 0?i:new cA(1),this.memory=[],this._m1=new tg}update(A,I){SI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=kC(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=QB.lerp(1-this.thickness,1,Math.random()),E=g*this.arc,i=Math.acos(Q),D=Math.sin(E),o=Math.cos(E),s=Math.sin(i),t=Math.cos(i);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof hA&&(this._m1.lookAt(mE,A.position,bE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"hemisphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new $B({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new $B({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class AC{constructor(A={}){var I,g,Q,C;this.type="grid",this.width=(I=A.width)!==null&&I!==void 0?I:1,this.height=(g=A.height)!==null&&g!==void 0?g:1,this.column=(Q=A.column)!==null&&Q!==void 0?Q:10,this.row=(C=A.row)!==null&&C!==void 0?C:10}initialize(A){const I=Math.floor(Math.random()*this.row),g=Math.floor(Math.random()*this.column);A.position.x=g*this.width/this.column-this.width/2,A.position.y=I*this.height/this.row-this.height/2,A.position.z=0,A.velocity.set(0,0,A.startSpeed)}toJSON(){return{type:"grid",width:this.width,height:this.height,column:this.column,row:this.row}}static fromJSON(A){return new AC(A)}clone(){return new AC({width:this.width,height:this.height,column:this.column,row:this.row})}update(A,I){}}const QD={circle:{type:"circle",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:jB,loadJSON:jB.fromJSON},cone:{type:"cone",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:WB,loadJSON:WB.fromJSON},donut:{type:"donut",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["donutRadius",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:zB,loadJSON:zB.fromJSON},point:{type:"point",params:[],constructor:_B,loadJSON:_B.fromJSON},sphere:{type:"sphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:WQ,loadJSON:WQ.fromJSON},hemisphere:{type:"hemisphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:$B,loadJSON:$B.fromJSON},grid:{type:"grid",params:[["width",["number"]],["height",["number"]],["rows",["number"]],["column",["number"]]],constructor:AC,loadJSON:AC.fromJSON}};function g0(B,A){return QD[B.type].loadJSON(B,A)}class IC{constructor(A){this.color=A,this.type="ColorOverLife"}initialize(A){this.color.startGen(A.memory)}update(A,I){this.color.genColor(A.memory,A.color,A.age/A.life),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON()}}static fromJSON(A){return new IC(PD(A.color))}clone(){return new IC(this.color.clone())}reset(){}}class gC{constructor(A){this.angularVelocity=A,this.type="RotationOverLife"}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){typeof A.rotation=="number"&&(A.rotation+=I*this.angularVelocity.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new gC(sA(A.angularVelocity))}frameUpdate(A){}clone(){return new gC(this.angularVelocity.clone())}reset(){}}class QC{constructor(A){this.angularVelocity=A,this.type="Rotation3DOverLife",this.tempQuat=new hA,this.tempQuat2=new hA}initialize(A){A.rotation instanceof hA&&(A.angularVelocity=new hA,this.angularVelocity.startGen(A.memory))}update(A,I){A.rotation instanceof hA&&(this.angularVelocity.genValue(A.memory,this.tempQuat,I,A.age/A.life),A.rotation.multiply(this.tempQuat))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new QC(Nt(A.angularVelocity))}frameUpdate(A){}clone(){return new QC(this.angularVelocity.clone())}reset(){}}class BC{initialize(A,I){this.ps=I,this.x.startGen(A.memory),this.y.startGen(A.memory),this.z.startGen(A.memory)}constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="ForceOverLife",this._temp=new v,this._tempScale=new v,this._tempQ=new hA}update(A,I){this._temp.set(this.x.genValue(A.memory,A.age/A.life),this.y.genValue(A.memory,A.age/A.life),this.z.genValue(A.memory,A.age/A.life)),this.ps.worldSpace?A.velocity.addScaledVector(this._temp,I):(this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ),A.velocity.addScaledVector(this._temp,I))}toJSON(){return{type:this.type,x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new BC(sA(A.x),sA(A.y),sA(A.z))}frameUpdate(A){if(this.ps&&!this.ps.worldSpace){const I=this._temp,g=this._tempQ,Q=this._tempScale;this.ps.emitter.matrixWorld.decompose(I,g,Q),g.invert(),Q.set(1/Q.x,1/Q.y,1/Q.z)}}clone(){return new BC(this.x.clone(),this.y.clone(),this.z.clone())}reset(){}}class CC{initialize(A){this.size.startGen(A.memory)}constructor(A){this.size=A,this.type="SizeOverLife"}update(A){this.size instanceof GQ?this.size.genValue(A.memory,A.size,A.age/A.life).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,size:this.size.toJSON()}}static fromJSON(A){return new CC(NE(A.size))}frameUpdate(A){}clone(){return new CC(this.size.clone())}reset(){}}class EC{initialize(A){this.speed.startGen(A.memory)}constructor(A){this.speed=A,this.type="SpeedOverLife"}update(A){A.speedModifier=this.speed.genValue(A.memory,A.age/A.life)}toJSON(){return{type:this.type,speed:this.speed.toJSON()}}static fromJSON(A){return new EC(sA(A.speed))}frameUpdate(A){}clone(){return new EC(this.speed.clone())}reset(){}}class iC{constructor(A){this.frame=A,this.type="FrameOverLife"}initialize(A){this.frame.startGen(A.memory)}update(A,I){this.frame instanceof vB&&(A.uvTile=this.frame.genValue(A.memory,A.age/A.life))}frameUpdate(A){}toJSON(){return{type:this.type,frame:this.frame.toJSON()}}static fromJSON(A){return new iC(sA(A.frame))}clone(){return new iC(this.frame.clone())}reset(){}}class DC{constructor(A,I=new v(0,1,0)){this.orbitSpeed=A,this.axis=I,this.type="OrbitOverLife",this.temp=new v,this.rotation=new hA}initialize(A){this.orbitSpeed.startGen(A.memory)}update(A,I){this.temp.copy(A.position).projectOnVector(this.axis),this.rotation.setFromAxisAngle(this.axis,this.orbitSpeed.genValue(A.memory,A.age/A.life)*I),A.position.sub(this.temp),A.position.applyQuaternion(this.rotation),A.position.add(this.temp)}frameUpdate(A){}toJSON(){return{type:this.type,orbitSpeed:this.orbitSpeed.toJSON(),axis:[this.axis.x,this.axis.y,this.axis.z]}}static fromJSON(A){return new DC(sA(A.orbitSpeed),A.axis?new v(A.axis[0],A.axis[1],A.axis[2]):void 0)}clone(){return new DC(this.orbitSpeed.clone())}reset(){}}class Si{constructor(A){this.data=A,this.next=null,this.prev=null}hasPrev(){return this.prev!==null}hasNext(){return this.next!==null}}class Q0{constructor(){this.length=0,this.head=this.tail=null}isEmpty(){return this.head===null}clear(){this.length=0,this.head=this.tail=null}front(){return this.head===null?null:this.head.data}back(){return this.tail===null?null:this.tail.data}dequeue(){if(this.head){const A=this.head.data;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,A}}pop(){if(this.tail){const A=this.tail.data;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,A}}queue(A){const I=new Si(A);this.tail||(this.tail=I),this.head&&(this.head.prev=I,I.next=this.head),this.head=I,this.length++}push(A){const I=new Si(A);this.head||(this.head=I),this.tail&&(this.tail.next=I,I.prev=this.tail),this.tail=I,this.length++}insertBefore(A,I){const g=new Si(I);g.next=A,g.prev=A.prev,g.prev!==null&&(g.prev.next=g),g.next.prev=g,A==this.head&&(this.head=g),this.length++}remove(A){if(this.head===null||this.tail===null)return;let I=this.head;for(A===this.head.data&&(this.head=this.head.next),A===this.tail.data&&(this.tail=this.tail.prev);I.next!==null&&I.data!==A;)I=I.next;I.data===A&&(I.prev!==null&&(I.prev.next=I.next),I.next!==null&&(I.next.prev=I.prev),this.length--)}*values(){let A=this.head;for(;A!==null;)yield A.data,A=A.next}}class B0{constructor(){this.startSpeed=0,this.startColor=new YI,this.startSize=new v(1,1,1),this.position=new v,this.velocity=new v,this.age=0,this.life=1,this.size=new v(1,1,1),this.speedModifier=1,this.rotation=0,this.color=new YI,this.uvTile=0,this.memory=[]}get died(){return this.age>=this.life}reset(){this.memory.length=0}}class C0{constructor(A,I,g){this.position=A,this.size=I,this.color=g}}class JE{constructor(){this.startSpeed=0,this.startColor=new YI,this.startSize=new v(1,1,1),this.position=new v,this.velocity=new v,this.age=0,this.life=1,this.size=new v(1,1,1),this.length=100,this.speedModifier=1,this.color=new YI,this.previous=new Q0,this.uvTile=0,this.memory=[]}update(){for(this.age<=this.life?this.previous.push(new C0(this.position.clone(),this.size.x,this.color.clone())):this.previous.length>0&&this.previous.dequeue();this.previous.length>this.length;)this.previous.dequeue()}get died(){return this.age>=this.life}reset(){this.memory.length=0,this.previous.clear()}}class oC{initialize(A){this.width.startGen(A.memory)}constructor(A){this.width=A,this.type="WidthOverLength"}update(A){if(A instanceof JE){const I=A.previous.values();for(let g=0;g<A.previous.length;g++){const Q=I.next();Q.value.size=this.width.genValue(A.memory,(A.previous.length-g)/A.length)}}}frameUpdate(A){}toJSON(){return{type:this.type,width:this.width.toJSON()}}static fromJSON(A){return new oC(sA(A.width))}clone(){return new oC(this.width.clone())}reset(){}}class sC{constructor(A,I){this.direction=A,this.magnitude=I,this.type="ApplyForce",this.memory={data:[],dataCount:0},this.magnitudeValue=this.magnitude.genValue(this.memory)}initialize(A){}update(A,I){A.velocity.addScaledVector(this.direction,this.magnitudeValue*I)}frameUpdate(A){this.magnitudeValue=this.magnitude.genValue(this.memory)}toJSON(){return{type:this.type,direction:[this.direction.x,this.direction.y,this.direction.z],magnitude:this.magnitude.toJSON()}}static fromJSON(A){var I;return new sC(new v(A.direction[0],A.direction[1],A.direction[2]),sA((I=A.magnitude)!==null&&I!==void 0?I:A.force))}clone(){return new sC(this.direction.clone(),this.magnitude.clone())}reset(){}}class tC{constructor(A,I){this.center=A,this.magnitude=I,this.type="GravityForce",this.temp=new v}initialize(A){}update(A,I){this.temp.copy(this.center).sub(A.position).normalize(),A.velocity.addScaledVector(this.temp,this.magnitude/A.position.distanceToSquared(this.center)*I)}frameUpdate(A){}toJSON(){return{type:this.type,center:[this.center.x,this.center.y,this.center.z],magnitude:this.magnitude}}static fromJSON(A){return new tC(new v(A.center[0],A.center[1],A.center[2]),A.magnitude)}clone(){return new tC(this.center.clone(),this.magnitude)}reset(){}}class wC{constructor(A){this.angle=A,this.type="ChangeEmitDirection",this._temp=new v,this._q=new hA,this.memory={data:[],dataCount:0}}initialize(A){const I=A.velocity.length();I!=0&&(A.velocity.normalize(),A.velocity.x===0&&A.velocity.y===0?this._temp.set(0,A.velocity.z,0):this._temp.set(-A.velocity.y,A.velocity.x,0),this.angle.startGen(this.memory),this._q.setFromAxisAngle(this._temp.normalize(),this.angle.genValue(this.memory)),this._temp.copy(A.velocity),A.velocity.applyQuaternion(this._q),this._q.setFromAxisAngle(this._temp,Math.random()*Math.PI*2),A.velocity.applyQuaternion(this._q),A.velocity.setLength(I))}update(A,I){}frameUpdate(A){}toJSON(){return{type:this.type,angle:this.angle.toJSON()}}static fromJSON(A){return new wC(sA(A.angle))}clone(){return new wC(this.angle)}reset(){}}var TQ;(function(B){B[B.Death=0]="Death",B[B.Birth=1]="Birth",B[B.Frame=2]="Frame"})(TQ||(TQ={}));class aC{constructor(A,I,g,Q=TQ.Frame,C=1){this.particleSystem=A,this.useVelocityAsBasis=I,this.subParticleSystem=g,this.mode=Q,this.emitProbability=C,this.type="EmitSubParticleSystem",this.q_=new hA,this.v_=new v,this.v2_=new v,this.subEmissions=new Array,this.subParticleSystem&&this.subParticleSystem.system&&(this.subParticleSystem.system.onlyUsedByOther=!0)}initialize(A){}update(A,I){this.mode===TQ.Frame?this.emit(A,I):this.mode===TQ.Birth&&A.age===0?this.emit(A,I):this.mode===TQ.Death&&A.age+I>=A.life&&this.emit(A,I)}emit(A,I){if(!this.subParticleSystem||Math.random()>this.emitProbability)return;const g=new tg;this.setMatrixFromParticle(g,A),this.subEmissions.push({burstParticleCount:0,burstParticleIndex:0,isBursting:!1,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,matrix:g,travelDistance:0,particle:A})}frameUpdate(A){if(this.subParticleSystem)for(let I=0;I<this.subEmissions.length;I++)if(this.subEmissions[I].time>=this.subParticleSystem.system.duration)this.subEmissions[I]=this.subEmissions[this.subEmissions.length-1],this.subEmissions.length=this.subEmissions.length-1,I--;else{const g=this.subEmissions[I];g.particle&&g.particle.age<g.particle.life?this.setMatrixFromParticle(g.matrix,g.particle):g.particle=void 0,this.subParticleSystem.system.emit(A,g,g.matrix)}}toJSON(){return{type:this.type,subParticleSystem:this.subParticleSystem?this.subParticleSystem.uuid:"",useVelocityAsBasis:this.useVelocityAsBasis,mode:this.mode,emitProbability:this.emitProbability}}static fromJSON(A,I){return new aC(I,A.useVelocityAsBasis,A.subParticleSystem,A.mode,A.emitProbability)}clone(){return new aC(this.particleSystem,this.useVelocityAsBasis,this.subParticleSystem,this.mode,this.emitProbability)}reset(){}setMatrixFromParticle(A,I){let g;if(I.rotation===void 0||this.useVelocityAsBasis)if(I.velocity.x===0&&I.velocity.y===0&&(I.velocity.z===1||I.velocity.z===0))A.set(1,0,0,I.position.x,0,1,0,I.position.y,0,0,1,I.position.z,0,0,0,1);else{this.v_.copy(jo).cross(I.velocity),this.v2_.copy(I.velocity).cross(this.v_);const Q=this.v_.length(),C=this.v2_.length();A.set(this.v_.x/Q,this.v2_.x/C,I.velocity.x,I.position.x,this.v_.y/Q,this.v2_.y/C,I.velocity.y,I.position.y,this.v_.z/Q,this.v2_.z/C,I.velocity.z,I.position.z,0,0,0,1)}else I.rotation instanceof hA?g=I.rotation:(this.q_.setFromAxisAngle(jo,I.rotation),g=this.q_),A.compose(I.position,g,I0);this.particleSystem.worldSpace||A.multiplyMatrices(this.particleSystem.emitter.matrixWorld,A)}}const E0=.5*(Math.sqrt(3)-1),oB=(3-Math.sqrt(3))/6,i0=1/3,ag=1/6,D0=(Math.sqrt(5)-1)/4,QI=(5-Math.sqrt(5))/20,zA=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),mA=new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);class Jt{constructor(A=Math.random){const I=typeof A=="function"?A:s0(A);this.p=o0(I),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(let g=0;g<512;g++)this.perm[g]=this.p[g&255],this.permMod12[g]=this.perm[g]%12}noise2D(A,I){const g=this.permMod12,Q=this.perm;let C=0,E=0,i=0;const D=(A+I)*E0,o=Math.floor(A+D),s=Math.floor(I+D),t=(o+s)*oB,w=o-t,a=s-t,y=A-w,r=I-a;let c,h;y>r?(c=1,h=0):(c=0,h=1);const G=y-c+oB,R=r-h+oB,N=y-1+2*oB,k=r-1+2*oB,J=o&255,U=s&255;let H=.5-y*y-r*r;if(H>=0){const f=g[J+Q[U]]*3;H*=H,C=H*H*(zA[f]*y+zA[f+1]*r)}let d=.5-G*G-R*R;if(d>=0){const f=g[J+c+Q[U+h]]*3;d*=d,E=d*d*(zA[f]*G+zA[f+1]*R)}let Y=.5-N*N-k*k;if(Y>=0){const f=g[J+1+Q[U+1]]*3;Y*=Y,i=Y*Y*(zA[f]*N+zA[f+1]*k)}return 70*(C+E+i)}noise3D(A,I,g){const Q=this.permMod12,C=this.perm;let E,i,D,o;const s=(A+I+g)*i0,t=Math.floor(A+s),w=Math.floor(I+s),a=Math.floor(g+s),y=(t+w+a)*ag,r=t-y,c=w-y,h=a-y,G=A-r,R=I-c,N=g-h;let k,J,U,H,d,Y;G>=R?R>=N?(k=1,J=0,U=0,H=1,d=1,Y=0):G>=N?(k=1,J=0,U=0,H=1,d=0,Y=1):(k=0,J=0,U=1,H=1,d=0,Y=1):R<N?(k=0,J=0,U=1,H=0,d=1,Y=1):G<N?(k=0,J=1,U=0,H=0,d=1,Y=1):(k=0,J=1,U=0,H=1,d=1,Y=0);const f=G-k+ag,l=R-J+ag,p=N-U+ag,q=G-H+2*ag,m=R-d+2*ag,T=N-Y+2*ag,Z=G-1+3*ag,O=R-1+3*ag,j=N-1+3*ag,gA=t&255,QA=w&255,CA=a&255;let EA=.6-G*G-R*R-N*N;if(EA<0)E=0;else{const z=Q[gA+C[QA+C[CA]]]*3;EA*=EA,E=EA*EA*(zA[z]*G+zA[z+1]*R+zA[z+2]*N)}let BA=.6-f*f-l*l-p*p;if(BA<0)i=0;else{const z=Q[gA+k+C[QA+J+C[CA+U]]]*3;BA*=BA,i=BA*BA*(zA[z]*f+zA[z+1]*l+zA[z+2]*p)}let W=.6-q*q-m*m-T*T;if(W<0)D=0;else{const z=Q[gA+H+C[QA+d+C[CA+Y]]]*3;W*=W,D=W*W*(zA[z]*q+zA[z+1]*m+zA[z+2]*T)}let $=.6-Z*Z-O*O-j*j;if($<0)o=0;else{const z=Q[gA+1+C[QA+1+C[CA+1]]]*3;$*=$,o=$*$*(zA[z]*Z+zA[z+1]*O+zA[z+2]*j)}return 32*(E+i+D+o)}noise4D(A,I,g,Q){const C=this.perm;let E,i,D,o,s;const t=(A+I+g+Q)*D0,w=Math.floor(A+t),a=Math.floor(I+t),y=Math.floor(g+t),r=Math.floor(Q+t),c=(w+a+y+r)*QI,h=w-c,G=a-c,R=y-c,N=r-c,k=A-h,J=I-G,U=g-R,H=Q-N;let d=0,Y=0,f=0,l=0;k>J?d++:Y++,k>U?d++:f++,k>H?d++:l++,J>U?Y++:f++,J>H?Y++:l++,U>H?f++:l++;const p=d>=3?1:0,q=Y>=3?1:0,m=f>=3?1:0,T=l>=3?1:0,Z=d>=2?1:0,O=Y>=2?1:0,j=f>=2?1:0,gA=l>=2?1:0,QA=d>=1?1:0,CA=Y>=1?1:0,EA=f>=1?1:0,BA=l>=1?1:0,W=k-p+QI,$=J-q+QI,z=U-m+QI,MA=H-T+QI,kA=k-Z+2*QI,NA=J-O+2*QI,JA=U-j+2*QI,iA=H-gA+2*QI,oA=k-QA+3*QI,rA=J-CA+3*QI,qI=U-EA+3*QI,ZA=H-BA+3*QI,UA=k-1+4*QI,MI=J-1+4*QI,WI=U-1+4*QI,jI=H-1+4*QI,NI=w&255,zI=a&255,bI=y&255,mI=r&255;let _I=.6-k*k-J*J-U*U-H*H;if(_I<0)E=0;else{const wA=C[NI+C[zI+C[bI+C[mI]]]]%32*4;_I*=_I,E=_I*_I*(mA[wA]*k+mA[wA+1]*J+mA[wA+2]*U+mA[wA+3]*H)}let WA=.6-W*W-$*$-z*z-MA*MA;if(WA<0)i=0;else{const wA=C[NI+p+C[zI+q+C[bI+m+C[mI+T]]]]%32*4;WA*=WA,i=WA*WA*(mA[wA]*W+mA[wA+1]*$+mA[wA+2]*z+mA[wA+3]*MA)}let cI=.6-kA*kA-NA*NA-JA*JA-iA*iA;if(cI<0)D=0;else{const wA=C[NI+Z+C[zI+O+C[bI+j+C[mI+gA]]]]%32*4;cI*=cI,D=cI*cI*(mA[wA]*kA+mA[wA+1]*NA+mA[wA+2]*JA+mA[wA+3]*iA)}let fI=.6-oA*oA-rA*rA-qI*qI-ZA*ZA;if(fI<0)o=0;else{const wA=C[NI+QA+C[zI+CA+C[bI+EA+C[mI+BA]]]]%32*4;fI*=fI,o=fI*fI*(mA[wA]*oA+mA[wA+1]*rA+mA[wA+2]*qI+mA[wA+3]*ZA)}let hI=.6-UA*UA-MI*MI-WI*WI-jI*jI;if(hI<0)s=0;else{const wA=C[NI+1+C[zI+1+C[bI+1+C[mI+1]]]]%32*4;hI*=hI,s=hI*hI*(mA[wA]*UA+mA[wA+1]*MI+mA[wA+2]*WI+mA[wA+3]*jI)}return 27*(E+i+D+o+s)}}function o0(B){const A=new Uint8Array(256);for(let I=0;I<256;I++)A[I]=I;for(let I=0;I<255;I++){const g=I+~~(B()*(256-I)),Q=A[I];A[I]=A[g],A[g]=Q}return A}function s0(B){let A=0,I=0,g=0,Q=1;const C=t0();return A=C(" "),I=C(" "),g=C(" "),A-=C(B),A<0&&(A+=1),I-=C(B),I<0&&(I+=1),g-=C(B),g<0&&(g+=1),function(){const E=2091639*A+Q*23283064365386963e-26;return A=I,I=g,g=E-(Q=E|0)}}function t0(){let B=4022871197;return function(A){A=A.toString();for(let I=0;I<A.length;I++){B+=A.charCodeAt(I);let g=.02519603282416938*B;B=g>>>0,g-=B,g*=B,B=g>>>0,g-=B,B+=g*4294967296}return(B>>>0)*23283064365386963e-26}}class eC{constructor(A,I,g,Q){this.scale=A,this.octaves=I,this.velocityMultiplier=g,this.timeScale=Q,this.type="TurbulenceField",this.generator=new Jt,this.timeOffset=new v,this.temp=new v,this.temp2=new v,this.timeOffset.x=Math.random()/this.scale.x*this.timeScale.x,this.timeOffset.y=Math.random()/this.scale.y*this.timeScale.y,this.timeOffset.z=Math.random()/this.scale.z*this.timeScale.z}initialize(A){}update(A,I){const g=A.position.x/this.scale.x,Q=A.position.y/this.scale.y,C=A.position.z/this.scale.z;this.temp.set(0,0,0);let E=1;for(let i=0;i<this.octaves;i++)this.temp2.set(this.generator.noise4D(g*E,Q*E,C*E,this.timeOffset.x*E)/E,this.generator.noise4D(g*E,Q*E,C*E,this.timeOffset.y*E)/E,this.generator.noise4D(g*E,Q*E,C*E,this.timeOffset.z*E)/E),this.temp.add(this.temp2),E*=2;this.temp.multiply(this.velocityMultiplier),A.velocity.addScaledVector(this.temp,I)}toJSON(){return{type:this.type,scale:[this.scale.x,this.scale.y,this.scale.z],octaves:this.octaves,velocityMultiplier:[this.velocityMultiplier.x,this.velocityMultiplier.y,this.velocityMultiplier.z],timeScale:[this.timeScale.x,this.timeScale.y,this.timeScale.z]}}frameUpdate(A){this.timeOffset.x+=A*this.timeScale.x,this.timeOffset.y+=A*this.timeScale.y,this.timeOffset.z+=A*this.timeScale.z}static fromJSON(A){return new eC(new v(A.scale[0],A.scale[1],A.scale[2]),A.octaves,new v(A.velocityMultiplier[0],A.velocityMultiplier[1],A.velocityMultiplier[2]),new v(A.timeScale[0],A.timeScale[1],A.timeScale[2]))}clone(){return new eC(this.scale.clone(),this.octaves,this.velocityMultiplier.clone(),this.timeScale.clone())}reset(){}}const eg=[],Ri=new v,Fi=new hA;class nC{constructor(A,I,g=new cA(1),Q=new cA(0)){if(this.frequency=A,this.power=I,this.positionAmount=g,this.rotationAmount=Q,this.type="Noise",this.duration=0,eg.length===0)for(let C=0;C<100;C++)eg.push(new Jt)}initialize(A){A.lastPosNoise=new v,typeof A.rotation=="number"?A.lastRotNoise=0:A.lastRotNoise=new hA,A.generatorIndex=[mC(0,100),mC(0,100),mC(0,100),mC(0,100)],this.positionAmount.startGen(A.memory),this.rotationAmount.startGen(A.memory),this.frequency.startGen(A.memory),this.power.startGen(A.memory)}update(A,I){let g=this.frequency.genValue(A.memory,A.age/A.life),Q=this.power.genValue(A.memory,A.age/A.life),C=this.positionAmount.genValue(A.memory,A.age/A.life),E=this.rotationAmount.genValue(A.memory,A.age/A.life);C>0&&A.lastPosNoise!==void 0&&(A.position.sub(A.lastPosNoise),Ri.set(eg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*C,eg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*C,eg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*C),A.position.add(Ri),A.lastPosNoise.copy(Ri)),E>0&&A.lastRotNoise!==void 0&&(typeof A.rotation=="number"?(A.rotation-=A.lastRotNoise,A.rotation+=eg[A.generatorIndex[3]].noise2D(0,A.age*g)*Math.PI*Q*E):(A.lastRotNoise.invert(),A.rotation.multiply(A.lastRotNoise),Fi.set(eg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*E,eg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*E,eg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*E,eg[A.generatorIndex[3]].noise2D(0,A.age*g)*Q*E).normalize(),A.rotation.multiply(Fi),A.lastRotNoise.copy(Fi)))}toJSON(){return{type:this.type,frequency:this.frequency.toJSON(),power:this.power.toJSON(),positionAmount:this.positionAmount.toJSON(),rotationAmount:this.rotationAmount.toJSON()}}frameUpdate(A){this.duration+=A}static fromJSON(A){return new nC(sA(A.frequency),sA(A.power),sA(A.positionAmount),sA(A.rotationAmount))}clone(){return new nC(this.frequency.clone(),this.power.clone(),this.positionAmount.clone(),this.rotationAmount.clone())}reset(){}}class cC{constructor(A,I){this.color=A,this.speedRange=I,this.type="ColorBySpeed"}initialize(A){this.color.startGen(A.memory)}update(A,I){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.color.genColor(A.memory,A.color,g),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new cC(PD(A.color),yQ.fromJSON(A.speedRange))}clone(){return new cC(this.color.clone(),this.speedRange.clone())}reset(){}}class hC{initialize(A){this.size.startGen(A.memory)}constructor(A,I){this.size=A,this.speedRange=I,this.type="SizeBySpeed"}update(A){const I=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.size instanceof GQ?this.size.genValue(A.memory,A.size,I).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,I))}toJSON(){return{type:this.type,size:this.size.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new hC(NE(A.size),yQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new hC(this.size.clone(),this.speedRange.clone())}reset(){}}class yC{constructor(A,I){this.angularVelocity=A,this.speedRange=I,this.type="RotationBySpeed",this.tempQuat=new hA}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){if(typeof A.rotation=="number"){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);A.rotation+=I*this.angularVelocity.genValue(A.memory,g)}}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new yC(sA(A.angularVelocity),yQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new yC(this.angularVelocity.clone(),this.speedRange.clone())}reset(){}}class GC{initialize(A){this.speed.startGen(A.memory)}constructor(A,I){this.speed=A,this.dampen=I,this.type="LimitSpeedOverLife"}update(A,I){let g=A.velocity.length(),Q=this.speed.genValue(A.memory,A.age/A.life);if(g>Q){const C=(g-Q)/g;A.velocity.multiplyScalar(1-C*this.dampen*I*20)}}toJSON(){return{type:this.type,speed:this.speed.toJSON(),dampen:this.dampen}}static fromJSON(A){return new GC(sA(A.speed),A.dampen)}frameUpdate(A){}clone(){return new GC(this.speed.clone(),this.dampen)}reset(){}}const UE={ApplyForce:{type:"ApplyForce",constructor:sC,params:[["direction",["vec3"]],["magnitude",["value"]]],loadJSON:sC.fromJSON},Noise:{type:"Noise",constructor:nC,params:[["frequency",["value"]],["power",["value"]],["positionAmount",["value"]],["rotationAmount",["value"]]],loadJSON:nC.fromJSON},TurbulenceField:{type:"TurbulenceField",constructor:eC,params:[["scale",["vec3"]],["octaves",["number"]],["velocityMultiplier",["vec3"]],["timeScale",["vec3"]]],loadJSON:eC.fromJSON},GravityForce:{type:"GravityForce",constructor:tC,params:[["center",["vec3"]],["magnitude",["number"]]],loadJSON:tC.fromJSON},ColorOverLife:{type:"ColorOverLife",constructor:IC,params:[["color",["colorFunc"]]],loadJSON:IC.fromJSON},RotationOverLife:{type:"RotationOverLife",constructor:gC,params:[["angularVelocity",["value","valueFunc"]]],loadJSON:gC.fromJSON},Rotation3DOverLife:{type:"Rotation3DOverLife",constructor:QC,params:[["angularVelocity",["rotationFunc"]]],loadJSON:QC.fromJSON},SizeOverLife:{type:"SizeOverLife",constructor:CC,params:[["size",["value","valueFunc","vec3Func"]]],loadJSON:CC.fromJSON},ColorBySpeed:{type:"ColorBySpeed",constructor:cC,params:[["color",["colorFunc"]],["speedRange",["range"]]],loadJSON:cC.fromJSON},RotationBySpeed:{type:"RotationBySpeed",constructor:yC,params:[["angularVelocity",["value","valueFunc"]],["speedRange",["range"]]],loadJSON:yC.fromJSON},SizeBySpeed:{type:"SizeBySpeed",constructor:hC,params:[["size",["value","valueFunc","vec3Func"]],["speedRange",["range"]]],loadJSON:hC.fromJSON},SpeedOverLife:{type:"SpeedOverLife",constructor:EC,params:[["speed",["value","valueFunc"]]],loadJSON:EC.fromJSON},FrameOverLife:{type:"FrameOverLife",constructor:iC,params:[["frame",["value","valueFunc"]]],loadJSON:iC.fromJSON},ForceOverLife:{type:"ForceOverLife",constructor:BC,params:[["x",["value","valueFunc"]],["y",["value","valueFunc"]],["z",["value","valueFunc"]]],loadJSON:BC.fromJSON},OrbitOverLife:{type:"OrbitOverLife",constructor:DC,params:[["orbitSpeed",["value","valueFunc"]],["axis",["vec3"]]],loadJSON:DC.fromJSON},WidthOverLength:{type:"WidthOverLength",constructor:oC,params:[["width",["value","valueFunc"]]],loadJSON:oC.fromJSON},ChangeEmitDirection:{type:"ChangeEmitDirection",constructor:wC,params:[["angle",["value"]]],loadJSON:wC.fromJSON},EmitSubParticleSystem:{type:"EmitSubParticleSystem",constructor:aC,params:[["particleSystem",["self"]],["useVelocityAsBasis",["boolean"]],["subParticleSystem",["particleSystem"]],["mode",["number"]],["emitProbability",["number"]]],loadJSON:aC.fromJSON},LimitSpeedOverLife:{type:"LimitSpeedOverLife",constructor:GC,params:[["speed",["value","valueFunc"]],["dampen",["number"]]],loadJSON:GC.fromJSON}};function w0(B,A){return UE[B.type]?UE[B.type].loadJSON(B,A):null}const a0=[];function e0(B){if(!a0.find(I=>I.id===B.id)){for(const I of B.emitterShapes)QD[I.type]||(QD[I.type]=I);for(const I of B.behaviors)UE[I.type]||(UE[I.type]=I)}}class rC{get geometry(){return this._geometry}set geometry(A){if(this._geometry=A,A===void 0||typeof A=="string")return;const I=new F.Triangle;this._triangleIndexToArea.length=0;let g=0;if(!A.getIndex())return;const Q=A.getIndex().array,C=Q.length/3;this._triangleIndexToArea.push(0);for(let E=0;E<C;E++)I.setFromAttributeAndIndices(A.getAttribute("position"),Q[E*3],Q[E*3+1],Q[E*3+2]),g+=I.getArea(),this._triangleIndexToArea.push(g);A.userData.triangleIndexToArea=this._triangleIndexToArea}constructor(A){this.type="mesh_surface",this._triangleIndexToArea=[],this._tempA=new F.Vector3,this._tempB=new F.Vector3,this._tempC=new F.Vector3,A&&(this.geometry=A)}initialize(A){const I=this._geometry;if(!I||I.getIndex()===null){A.position.set(0,0,0),A.velocity.set(0,0,1).multiplyScalar(A.startSpeed);return}const g=this._triangleIndexToArea.length-1;let Q=0,C=g;const E=Math.random()*this._triangleIndexToArea[g];for(;Q+1<C;){const a=Math.floor((Q+C)/2);E<this._triangleIndexToArea[a]?C=a:Q=a}let i=Math.random(),D=Math.random();i+D>1&&(i=1-i,D=1-D);const o=I.getIndex().array[Q*3],s=I.getIndex().array[Q*3+1],t=I.getIndex().array[Q*3+2],w=I.getAttribute("position");this._tempA.fromBufferAttribute(w,o),this._tempB.fromBufferAttribute(w,s),this._tempC.fromBufferAttribute(w,t),this._tempB.sub(this._tempA),this._tempC.sub(this._tempA),this._tempA.addScaledVector(this._tempB,i).addScaledVector(this._tempC,D),A.position.copy(this._tempA),this._tempA.copy(this._tempB).cross(this._tempC).normalize(),A.velocity.copy(this._tempA).normalize().multiplyScalar(A.startSpeed)}toJSON(){return{type:"mesh_surface",mesh:this._geometry?this._geometry.uuid:""}}static fromJSON(A,I){return new rC(I.geometries[A.geometry])}clone(){return new rC(this._geometry)}update(A,I){}}const n0={id:"three.quarks",emitterShapes:[{type:"mesh_surface",params:[["geometry",["geometry"]]],constructor:rC,loadJSON:rC.fromJSON}],behaviors:[]};var c0=`
2
2
  #ifdef SOFT_PARTICLES
3
3
 
4
4
  /* #ifdef LOGDEPTH
@@ -20,7 +20,7 @@
20
20
 
21
21
  //gl_FragColor = vec4(softParticlesFade , 0, 0, 1);
22
22
  #endif
23
- `,s0=`
23
+ `,h0=`
24
24
  #ifdef SOFT_PARTICLES
25
25
 
26
26
  uniform sampler2D depthTexture;
@@ -42,17 +42,17 @@
42
42
  }
43
43
 
44
44
  #endif
45
- `,t0=`
45
+ `,y0=`
46
46
  #ifdef SOFT_PARTICLES
47
47
  varying vec4 projPosition;
48
48
  varying float linearDepth;
49
49
  #endif
50
- `,w0=`
50
+ `,G0=`
51
51
  #ifdef SOFT_PARTICLES
52
52
  projPosition = gl_Position;
53
53
  linearDepth = -mvPosition.z;
54
54
  #endif
55
- `,a0=`
55
+ `,r0=`
56
56
  #ifdef USE_MAP
57
57
  vec4 texelColor = texture2D( map, vUv);
58
58
  #ifdef TILE_BLEND
@@ -60,7 +60,7 @@
60
60
  #endif
61
61
  diffuseColor *= texelColor;
62
62
  #endif
63
- `,e0=`
63
+ `,S0=`
64
64
  #if defined( USE_UV ) || defined( USE_ANISOTROPY )
65
65
 
66
66
  varying vec2 vUv;
@@ -211,7 +211,7 @@
211
211
  varying vec2 vThicknessMapUv;
212
212
 
213
213
  #endif
214
- `,c0=`
214
+ `,R0=`
215
215
  #ifdef UV_TILE
216
216
  attribute float uvTile;
217
217
  uniform vec2 tileCount;
@@ -381,7 +381,7 @@
381
381
  varying vec2 vThicknessMapUv;
382
382
 
383
383
  #endif
384
- `,n0=`
384
+ `,F0=`
385
385
  #ifdef UV_TILE
386
386
  mat3 tileTransform = makeTileTransform(floor(uvTile));
387
387
  #ifdef TILE_BLEND
@@ -519,7 +519,7 @@ vThicknessMapUv = ( tileTransform * thicknessMapTransform * vec3( THICKNESSMAP_U
519
519
 
520
520
  #endif
521
521
 
522
- `;const mg=F.ShaderChunk;function h0(){mg.tile_pars_vertex=c0,mg.tile_vertex=n0,mg.tile_pars_fragment=e0,mg.tile_fragment=a0,mg.soft_pars_vertex=t0,mg.soft_vertex=w0,mg.soft_pars_fragment=s0,mg.soft_fragment=o0}class y0 extends F.Object3D{constructor(A){super(),this.type="ParticleEmitter",this.system=A}clone(){const A=this.system.clone();return A.emitter.copy(this,!0),A.emitter}dispose(){}extractFromCache(A){const I=[];for(const g in A){const Q=A[g];delete Q.metadata,I.push(Q)}return I}toJSON(A,I={}){const g=this.children;this.children=this.children.filter(C=>C.type!=="ParticleSystemPreview");const Q=super.toJSON(A);return this.children=g,this.system!==null&&(Q.object.ps=this.system.toJSON(A,I)),Q}}exports.RenderMode=void 0;(function(B){B[B.BillBoard=0]="BillBoard",B[B.StretchedBillBoard=1]="StretchedBillBoard",B[B.Mesh=2]="Mesh",B[B.Trail=3]="Trail",B[B.HorizontalBillBoard=4]="HorizontalBillBoard",B[B.VerticalBillBoard=5]="VerticalBillBoard"})(exports.RenderMode||(exports.RenderMode={}));class Ft extends F.Mesh{constructor(A){super(),this.type="VFXBatch",this.maxParticles=1e3,this.systems=new Set;const I=new F.Layers;I.mask=A.layers.mask;const g=A.material.clone();g.defines={},Object.assign(g.defines,A.material.defines),this.settings={instancingGeometry:A.instancingGeometry,renderMode:A.renderMode,renderOrder:A.renderOrder,material:g,uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softNearFade:A.softNearFade,softFarFade:A.softFarFade,layers:I},this.frustumCulled=!1,this.renderOrder=this.settings.renderOrder}addSystem(A){this.systems.add(A)}removeSystem(A){this.systems.delete(A)}applyDepthTexture(A){const I=this.material.uniforms.depthTexture;I&&I.value!==A&&(I.value=A,this.material.needsUpdate=!0)}getVisibleSystems(){return Array.from(this.systems).filter(A=>A.emitter.visible)}}const G0=new v(0,0,1),Fi=new hA,r0=new v,S0=new v;new v;const Zo=60,mC=new F.PlaneGeometry(1,1,1,1);class LE{set time(A){this.emissionState.time=A}get time(){return this.emissionState.time}get layers(){return this.rendererSettings.layers}get texture(){return this.rendererSettings.material.map}set texture(A){this.rendererSettings.material.map=A,this.neededToUpdateRender=!0}get material(){return this.rendererSettings.material}set material(A){this.rendererSettings.material=A,this.neededToUpdateRender=!0}get uTileCount(){return this.rendererSettings.uTileCount}set uTileCount(A){this.rendererSettings.uTileCount=A,this.neededToUpdateRender=!0}get vTileCount(){return this.rendererSettings.vTileCount}set vTileCount(A){this.rendererSettings.vTileCount=A,this.neededToUpdateRender=!0}get blendTiles(){return this.rendererSettings.blendTiles}set blendTiles(A){this.rendererSettings.blendTiles=A,this.neededToUpdateRender=!0}get softParticles(){return this.rendererSettings.softParticles}set softParticles(A){this.rendererSettings.softParticles=A,this.neededToUpdateRender=!0}get softNearFade(){return this.rendererSettings.softNearFade}set softNearFade(A){this.rendererSettings.softNearFade=A,this.neededToUpdateRender=!0}get softFarFade(){return this.rendererSettings.softFarFade}set softFarFade(A){this.rendererSettings.softFarFade=A,this.neededToUpdateRender=!0}get instancingGeometry(){return this.rendererSettings.instancingGeometry}set instancingGeometry(A){this.restart(),this.particles.length=0,this.rendererSettings.instancingGeometry=A,this.neededToUpdateRender=!0}get renderMode(){return this.rendererSettings.renderMode}set renderMode(A){if(this.rendererSettings.renderMode!==A){let I=!1;switch(this.rendererSettings.renderMode===exports.RenderMode.Trail&&(I=!0),this.rendererSettings.renderMode===exports.RenderMode.Mesh&&(this.startRotation=new nA(0)),A){case exports.RenderMode.Trail:this.rendererEmitterSettings={startLength:new nA(30),followLocalOrigin:!1},I=!0;break;case exports.RenderMode.Mesh:this.rendererEmitterSettings={geometry:mC},this.startRotation=new VB(new v(0,1,0),new nA(0));break;case exports.RenderMode.StretchedBillBoard:this.rendererEmitterSettings={speedFactor:0,lengthFactor:2},this.rendererSettings.instancingGeometry=mC;break;case exports.RenderMode.BillBoard:case exports.RenderMode.VerticalBillBoard:case exports.RenderMode.HorizontalBillBoard:this.rendererEmitterSettings={},this.rendererSettings.instancingGeometry=mC;break}this.rendererSettings.renderMode=A,I&&(this.restart(),this.particles.length=0),this.neededToUpdateRender=!0}}get renderOrder(){return this.rendererSettings.renderOrder}set renderOrder(A){this.rendererSettings.renderOrder=A,this.neededToUpdateRender=!0}get blending(){return this.rendererSettings.material.blending}set blending(A){this.rendererSettings.material.blending=A,this.neededToUpdateRender=!0}constructor(A){if(this.temp=new v,this.travelDistance=0,this.normalMatrix=new yg,this.memory=[],this.listeners={},this.firstTimeUpdate=!0,this.autoDestroy=A.autoDestroy===void 0?!1:A.autoDestroy,this.duration=A.duration??1,this.looping=A.looping===void 0?!0:A.looping,this.prewarm=A.prewarm===void 0?!1:A.prewarm,this.startLife=A.startLife??new nA(5),this.startSpeed=A.startSpeed??new nA(0),this.startRotation=A.startRotation??new nA(0),this.startSize=A.startSize??new nA(1),this.startColor=A.startColor??new hQ(new YI(1,1,1,1)),this.emissionOverTime=A.emissionOverTime??new nA(10),this.emissionOverDistance=A.emissionOverDistance??new nA(0),this.emissionBursts=A.emissionBursts??[],this.onlyUsedByOther=A.onlyUsedByOther??!1,this.emitterShape=A.shape??new WQ,this.behaviors=A.behaviors??new Array,this.worldSpace=A.worldSpace??!1,this.rendererEmitterSettings=A.rendererEmitterSettings??{},A.renderMode===exports.RenderMode.StretchedBillBoard){const I=this.rendererEmitterSettings;A.speedFactor!==void 0&&(I.speedFactor=A.speedFactor),I.speedFactor=I.speedFactor??0,I.lengthFactor=I.lengthFactor??0}this.rendererSettings={instancingGeometry:A.instancingGeometry??mC,renderMode:A.renderMode??exports.RenderMode.BillBoard,renderOrder:A.renderOrder??0,material:A.material,uTileCount:A.uTileCount??1,vTileCount:A.vTileCount??1,blendTiles:A.blendTiles??!1,softParticles:A.softParticles??!1,softNearFade:A.softNearFade??0,softFarFade:A.softFarFade??0,layers:A.layers??new F.Layers},this.neededToUpdateRender=!0,this.particles=new Array,this.startTileIndex=A.startTileIndex||new nA(0),this.emitter=new y0(this),this.paused=!1,this.particleNum=0,this.emissionState={isBursting:!1,burstParticleIndex:0,burstParticleCount:0,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,travelDistance:0},this.emissionBursts.forEach(I=>I.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1}pause(){this.paused=!0}play(){this.paused=!1}stop(){this.restart(),this.pause()}spawn(A,I,g){Fi.setFromRotationMatrix(g);const Q=r0,C=Fi,E=S0;g.decompose(Q,C,E);for(let i=0;i<A;i++){for(I.burstParticleIndex=i,this.particleNum++;this.particles.length<this.particleNum;)this.rendererSettings.renderMode===exports.RenderMode.Trail?this.particles.push(new JE):this.particles.push(new ze);const D=this.particles[this.particleNum-1];if(D.reset(),D.speedModifier=1,this.startColor.startGen(D.memory),this.startColor.genColor(D.memory,D.startColor,this.emissionState.time),D.color.copy(D.startColor),this.startSpeed.startGen(D.memory),D.startSpeed=this.startSpeed.genValue(D.memory,I.time/this.duration),this.startLife.startGen(D.memory),D.life=this.startLife.genValue(D.memory,I.time/this.duration),D.age=0,this.startSize.startGen(D.memory),this.startSize.type==="vec3function")this.startSize.genValue(D.memory,D.startSize,I.time/this.duration);else{const o=this.startSize.genValue(D.memory,I.time/this.duration);D.startSize.set(o,o,o)}if(this.startTileIndex.startGen(D.memory),D.uvTile=this.startTileIndex.genValue(D.memory),D.size.copy(D.startSize),this.rendererSettings.renderMode===exports.RenderMode.Mesh||this.rendererSettings.renderMode===exports.RenderMode.BillBoard||this.rendererSettings.renderMode===exports.RenderMode.VerticalBillBoard||this.rendererSettings.renderMode===exports.RenderMode.HorizontalBillBoard||this.rendererSettings.renderMode===exports.RenderMode.StretchedBillBoard){const o=D;this.startRotation.startGen(D.memory),this.rendererSettings.renderMode===exports.RenderMode.Mesh?(o.rotation instanceof hA||(o.rotation=new hA),this.startRotation.type==="rotation"?this.startRotation.genValue(D.memory,o.rotation,1,I.time/this.duration):o.rotation.setFromAxisAngle(G0,this.startRotation.genValue(o.memory,I.time/this.duration))):this.startRotation.type==="rotation"?o.rotation=0:o.rotation=this.startRotation.genValue(o.memory,I.time/this.duration)}else if(this.rendererSettings.renderMode===exports.RenderMode.Trail){const o=D;this.rendererEmitterSettings.startLength.startGen(o.memory),o.length=this.rendererEmitterSettings.startLength.genValue(o.memory,I.time/this.duration)}if(this.emitterShape.initialize(D,I),this.rendererSettings.renderMode===exports.RenderMode.Trail&&this.rendererEmitterSettings.followLocalOrigin){const o=D;o.localPosition=new v().copy(o.position)}this.worldSpace?(D.position.applyMatrix4(g),D.startSize.multiply(E).abs(),D.size.copy(D.startSize),D.velocity.multiply(E).applyMatrix3(this.normalMatrix),D.rotation&&D.rotation instanceof hA&&D.rotation.multiplyQuaternions(Fi,D.rotation)):this.onlyUsedByOther&&(D.parentMatrix=g);for(let o=0;o<this.behaviors.length;o++)this.behaviors[o].initialize(D,this)}}endEmit(){this.emitEnded=!0,this.autoDestroy&&(this.markForDestroy=!0),this.fire({type:"emitEnd",particleSystem:this})}dispose(){this._renderer&&this._renderer.deleteSystem(this),this.emitter.dispose(),this.emitter.parent&&this.emitter.parent.remove(this.emitter),this.fire({type:"destroy",particleSystem:this})}restart(){this.memory.length=0,this.paused=!1,this.particleNum=0,this.emissionState.isBursting=!1,this.emissionState.burstIndex=0,this.emissionState.burstWaveIndex=0,this.emissionState.time=0,this.emissionState.waitEmiting=0,this.behaviors.forEach(A=>{A.reset()}),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1,this.emissionBursts.forEach(A=>A.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory)}update(A){if(this.paused)return;let I=this.emitter;for(;I.parent;)I=I.parent;if(I.type!=="Scene"){this.dispose();return}if(this.firstTimeUpdate&&(this.firstTimeUpdate=!1,this.emitter.updateWorldMatrix(!0,!1)),this.emitEnded&&this.particleNum===0){this.markForDestroy&&this.emitter.parent&&this.dispose();return}if(this.looping&&this.prewarm&&!this.prewarmed){this.prewarmed=!0;for(let g=0;g<this.duration*Zo;g++)this.update(1/Zo)}A>.1&&(A=.1),this.neededToUpdateRender&&(this._renderer&&this._renderer.updateSystem(this),this.neededToUpdateRender=!1),this.onlyUsedByOther||this.emit(A,this.emissionState,this.emitter.matrixWorld),this.emitterShape.update(this,A);for(let g=0;g<this.behaviors.length;g++){this.behaviors[g].frameUpdate(A);for(let Q=0;Q<this.particleNum;Q++)this.particles[Q].died||this.behaviors[g].update(this.particles[Q],A)}for(let g=0;g<this.particleNum;g++)this.rendererEmitterSettings.followLocalOrigin&&this.particles[g].localPosition?(this.particles[g].position.copy(this.particles[g].localPosition),this.particles[g].parentMatrix?this.particles[g].position.applyMatrix4(this.particles[g].parentMatrix):this.particles[g].position.applyMatrix4(this.emitter.matrixWorld)):this.particles[g].position.addScaledVector(this.particles[g].velocity,A*this.particles[g].speedModifier),this.particles[g].age+=A;if(this.rendererSettings.renderMode===exports.RenderMode.Trail)for(let g=0;g<this.particleNum;g++)this.particles[g].update();for(let g=0;g<this.particleNum;g++){const Q=this.particles[g];Q.died&&(!(Q instanceof JE)||Q.previous.length===0)&&(this.particles[g]=this.particles[this.particleNum-1],this.particles[this.particleNum-1]=Q,this.particleNum--,g--,this.fire({type:"particleDied",particleSystem:this,particle:Q}))}}emit(A,I,g){I.time>this.duration&&(this.looping?(I.time-=this.duration,I.burstIndex=0,this.behaviors.forEach(C=>{C.reset()})):!this.emitEnded&&!this.onlyUsedByOther&&this.endEmit()),this.normalMatrix.getNormalMatrix(g);const Q=Math.ceil(I.waitEmiting);for(this.spawn(Q,I,g),I.waitEmiting-=Q;I.burstIndex<this.emissionBursts.length&&this.emissionBursts[I.burstIndex].time<=I.time;){if(Math.random()<this.emissionBursts[I.burstIndex].probability){const C=this.emissionBursts[I.burstIndex].count.genValue(this.memory,this.time);I.isBursting=!0,I.burstParticleCount=C,this.spawn(C,I,g),I.isBursting=!1}I.burstIndex++}if(!this.emitEnded&&(I.waitEmiting+=A*this.emissionOverTime.genValue(this.memory,I.time/this.duration),I.previousWorldPos!=null)){this.temp.set(g.elements[12],g.elements[13],g.elements[14]),I.travelDistance+=I.previousWorldPos.distanceTo(this.temp);const C=this.emissionOverDistance.genValue(this.memory,I.time/this.duration);if(I.travelDistance*C>0){const E=Math.floor(I.travelDistance*C);I.travelDistance-=E/C,I.waitEmiting+=E}}I.previousWorldPos===void 0&&(I.previousWorldPos=new v),I.previousWorldPos.set(g.elements[12],g.elements[13],g.elements[14]),I.time+=A}toJSON(A,I={}){if((A===void 0||typeof A=="string")&&(A={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}}),A.materials[this.rendererSettings.material.uuid]=this.rendererSettings.material.toJSON(A),I.useUrlForImage&&this.texture?.source!==void 0){const E=this.texture.source;A.images[E.uuid]={uuid:E.uuid,url:this.texture.image.url}}let Q;this.renderMode===exports.RenderMode.Trail?Q={startLength:this.rendererEmitterSettings.startLength.toJSON(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===exports.RenderMode.Mesh?Q={}:this.renderMode===exports.RenderMode.StretchedBillBoard?Q={speedFactor:this.rendererEmitterSettings.speedFactor,lengthFactor:this.rendererEmitterSettings.lengthFactor}:Q={};const C=this.rendererSettings.instancingGeometry;return A.geometries&&!A.geometries[C.uuid]&&(A.geometries[C.uuid]=C.toJSON()),{version:"3.0",autoDestroy:this.autoDestroy,looping:this.looping,prewarm:this.prewarm,duration:this.duration,shape:this.emitterShape.toJSON(),startLife:this.startLife.toJSON(),startSpeed:this.startSpeed.toJSON(),startRotation:this.startRotation.toJSON(),startSize:this.startSize.toJSON(),startColor:this.startColor.toJSON(),emissionOverTime:this.emissionOverTime.toJSON(),emissionOverDistance:this.emissionOverDistance.toJSON(),emissionBursts:this.emissionBursts.map(E=>({time:E.time,count:E.count.toJSON(),probability:E.probability,interval:E.interval,cycle:E.cycle})),onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry.uuid,renderOrder:this.renderOrder,renderMode:this.renderMode,rendererEmitterSettings:Q,material:this.rendererSettings.material.uuid,layers:this.layers.mask,startTileIndex:this.startTileIndex.toJSON(),uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.rendererSettings.softParticles,softFarFade:this.rendererSettings.softFarFade,softNearFade:this.rendererSettings.softNearFade,behaviors:this.behaviors.map(E=>E.toJSON()),worldSpace:this.worldSpace}}static fromJSON(A,I,g){const Q=We(A.shape,I);let C;if(A.renderMode===exports.RenderMode.Trail){const D=A.rendererEmitterSettings;C={startLength:D.startLength!=null?sA(D.startLength):new nA(30),followLocalOrigin:D.followLocalOrigin}}else A.renderMode===exports.RenderMode.Mesh?C={}:A.renderMode===exports.RenderMode.StretchedBillBoard?(C=A.rendererEmitterSettings,A.speedFactor!=null&&(C.speedFactor=A.speedFactor)):C={};const E=new F.Layers;A.layers&&(E.mask=A.layers);const i=new LE({autoDestroy:A.autoDestroy,looping:A.looping,prewarm:A.prewarm,duration:A.duration,shape:Q,startLife:sA(A.startLife),startSpeed:sA(A.startSpeed),startRotation:NE(A.startRotation),startSize:NE(A.startSize),startColor:mD(A.startColor),emissionOverTime:sA(A.emissionOverTime),emissionOverDistance:sA(A.emissionOverDistance),emissionBursts:A.emissionBursts?.map(D=>({time:D.time,count:typeof D.count=="number"?new nA(D.count):sA(D.count),probability:D.probability??1,interval:D.interval??.1,cycle:D.cycle??1})),onlyUsedByOther:A.onlyUsedByOther,instancingGeometry:I.geometries[A.instancingGeometry],renderMode:A.renderMode,rendererEmitterSettings:C,renderOrder:A.renderOrder,layers:E,material:A.material?I.materials[A.material]:A.texture?new F.MeshBasicMaterial({map:I.textures[A.texture],transparent:A.transparent??!0,blending:A.blending,side:F.DoubleSide}):new F.MeshBasicMaterial({color:16777215,transparent:!0,blending:F.AdditiveBlending,side:F.DoubleSide}),startTileIndex:typeof A.startTileIndex=="number"?new nA(A.startTileIndex):sA(A.startTileIndex),uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softFarFade:A.softFarFade,softNearFade:A.softNearFade,behaviors:[],worldSpace:A.worldSpace});return i.behaviors=A.behaviors.map(D=>{const o=C0(D,i);return o&&o.type==="EmitSubParticleSystem"&&(g[D.subParticleSystem]=o),o}).filter(D=>D!==null),i}addBehavior(A){this.behaviors.push(A)}getRendererSettings(){return this.rendererSettings}addEventListener(A,I){this.listeners[A]||(this.listeners[A]=[]),this.listeners[A].push(I)}removeAllEventListeners(A){this.listeners[A]&&(this.listeners[A]=[])}removeEventListener(A,I){if(this.listeners[A]){const g=this.listeners[A].indexOf(I);g!==-1&&this.listeners[A].splice(g,1)}}fire(A){this.listeners[A.type]&&this.listeners[A.type].forEach(I=>I(A))}clone(){const A=[];for(const C of this.emissionBursts){const E={};Object.assign(E,C),A.push(E)}const I=[];for(const C of this.behaviors)I.push(C.clone());let g;this.renderMode===exports.RenderMode.Trail?g={startLength:this.rendererEmitterSettings.startLength.clone(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===exports.RenderMode.StretchedBillBoard?g={lengthFactor:this.rendererEmitterSettings.lengthFactor,speedFactor:this.rendererEmitterSettings.speedFactor}:g={};const Q=new F.Layers;return Q.mask=this.layers.mask,new LE({autoDestroy:this.autoDestroy,looping:this.looping,duration:this.duration,shape:this.emitterShape.clone(),startLife:this.startLife.clone(),startSpeed:this.startSpeed.clone(),startRotation:this.startRotation.clone(),startSize:this.startSize.clone(),startColor:this.startColor.clone(),emissionOverTime:this.emissionOverTime.clone(),emissionOverDistance:this.emissionOverDistance.clone(),emissionBursts:A,onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry,renderMode:this.renderMode,renderOrder:this.renderOrder,rendererEmitterSettings:g,material:this.rendererSettings.material,startTileIndex:this.startTileIndex,uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.softParticles,softFarFade:this.softFarFade,softNearFade:this.softNearFade,behaviors:I,worldSpace:this.worldSpace,layers:Q})}}var ki=`
522
+ `;const mg=F.ShaderChunk;function k0(){mg.tile_pars_vertex=R0,mg.tile_vertex=F0,mg.tile_pars_fragment=S0,mg.tile_fragment=r0,mg.soft_pars_vertex=y0,mg.soft_vertex=G0,mg.soft_pars_fragment=h0,mg.soft_fragment=c0}class M0 extends F.Object3D{constructor(A){super(),this.type="ParticleEmitter",this.system=A}clone(){const A=this.system.clone();return A.emitter.copy(this,!0),A.emitter}dispose(){}extractFromCache(A){const I=[];for(const g in A){const Q=A[g];delete Q.metadata,I.push(Q)}return I}toJSON(A,I={}){const g=this.children;this.children=this.children.filter(C=>C.type!=="ParticleSystemPreview");const Q=super.toJSON(A);return this.children=g,this.system!==null&&(Q.object.ps=this.system.toJSON(A,I)),Q}}exports.RenderMode=void 0;(function(B){B[B.BillBoard=0]="BillBoard",B[B.StretchedBillBoard=1]="StretchedBillBoard",B[B.Mesh=2]="Mesh",B[B.Trail=3]="Trail",B[B.HorizontalBillBoard=4]="HorizontalBillBoard",B[B.VerticalBillBoard=5]="VerticalBillBoard"})(exports.RenderMode||(exports.RenderMode={}));class Ut extends F.Mesh{constructor(A){super(),this.type="VFXBatch",this.maxParticles=1e3,this.systems=new Set;const I=new F.Layers;I.mask=A.layers.mask;const g=A.material.clone();g.defines={},Object.assign(g.defines,A.material.defines),this.settings={instancingGeometry:A.instancingGeometry,renderMode:A.renderMode,renderOrder:A.renderOrder,material:g,uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softNearFade:A.softNearFade,softFarFade:A.softFarFade,layers:I},this.frustumCulled=!1,this.renderOrder=this.settings.renderOrder}addSystem(A){this.systems.add(A)}removeSystem(A){this.systems.delete(A)}applyDepthTexture(A){const I=this.material.uniforms.depthTexture;I&&I.value!==A&&(I.value=A,this.material.needsUpdate=!0)}getVisibleSystems(){return Array.from(this.systems).filter(A=>A.emitter.visible)}}const N0=new v(0,0,1),ki=new hA,J0=new v,U0=new v;new v;const zo=60,PC=new F.PlaneGeometry(1,1,1,1);class LE{set time(A){this.emissionState.time=A}get time(){return this.emissionState.time}get layers(){return this.rendererSettings.layers}get texture(){return this.rendererSettings.material.map}set texture(A){this.rendererSettings.material.map=A,this.neededToUpdateRender=!0}get material(){return this.rendererSettings.material}set material(A){this.rendererSettings.material=A,this.neededToUpdateRender=!0}get uTileCount(){return this.rendererSettings.uTileCount}set uTileCount(A){this.rendererSettings.uTileCount=A,this.neededToUpdateRender=!0}get vTileCount(){return this.rendererSettings.vTileCount}set vTileCount(A){this.rendererSettings.vTileCount=A,this.neededToUpdateRender=!0}get blendTiles(){return this.rendererSettings.blendTiles}set blendTiles(A){this.rendererSettings.blendTiles=A,this.neededToUpdateRender=!0}get softParticles(){return this.rendererSettings.softParticles}set softParticles(A){this.rendererSettings.softParticles=A,this.neededToUpdateRender=!0}get softNearFade(){return this.rendererSettings.softNearFade}set softNearFade(A){this.rendererSettings.softNearFade=A,this.neededToUpdateRender=!0}get softFarFade(){return this.rendererSettings.softFarFade}set softFarFade(A){this.rendererSettings.softFarFade=A,this.neededToUpdateRender=!0}get instancingGeometry(){return this.rendererSettings.instancingGeometry}set instancingGeometry(A){this.restart(),this.particles.length=0,this.rendererSettings.instancingGeometry=A,this.neededToUpdateRender=!0}get renderMode(){return this.rendererSettings.renderMode}set renderMode(A){if(this.rendererSettings.renderMode!==A){let I=!1;switch(this.rendererSettings.renderMode===exports.RenderMode.Trail&&(I=!0),this.rendererSettings.renderMode===exports.RenderMode.Mesh&&(this.startRotation=new cA(0)),A){case exports.RenderMode.Trail:this.rendererEmitterSettings={startLength:new cA(30),followLocalOrigin:!1},I=!0;break;case exports.RenderMode.Mesh:this.rendererEmitterSettings={geometry:PC},this.startRotation=new ZB(new v(0,1,0),new cA(0));break;case exports.RenderMode.StretchedBillBoard:this.rendererEmitterSettings={speedFactor:0,lengthFactor:2},this.rendererSettings.instancingGeometry=PC;break;case exports.RenderMode.BillBoard:case exports.RenderMode.VerticalBillBoard:case exports.RenderMode.HorizontalBillBoard:this.rendererEmitterSettings={},this.rendererSettings.instancingGeometry=PC;break}this.rendererSettings.renderMode=A,I&&(this.restart(),this.particles.length=0),this.neededToUpdateRender=!0}}get renderOrder(){return this.rendererSettings.renderOrder}set renderOrder(A){this.rendererSettings.renderOrder=A,this.neededToUpdateRender=!0}get blending(){return this.rendererSettings.material.blending}set blending(A){this.rendererSettings.material.blending=A,this.neededToUpdateRender=!0}constructor(A){if(this.temp=new v,this.travelDistance=0,this.normalMatrix=new yg,this.memory=[],this.listeners={},this.firstTimeUpdate=!0,this.autoDestroy=A.autoDestroy===void 0?!1:A.autoDestroy,this.duration=A.duration??1,this.looping=A.looping===void 0?!0:A.looping,this.prewarm=A.prewarm===void 0?!1:A.prewarm,this.startLife=A.startLife??new cA(5),this.startSpeed=A.startSpeed??new cA(0),this.startRotation=A.startRotation??new cA(0),this.startSize=A.startSize??new cA(1),this.startColor=A.startColor??new hQ(new YI(1,1,1,1)),this.emissionOverTime=A.emissionOverTime??new cA(10),this.emissionOverDistance=A.emissionOverDistance??new cA(0),this.emissionBursts=A.emissionBursts??[],this.onlyUsedByOther=A.onlyUsedByOther??!1,this.emitterShape=A.shape??new WQ,this.behaviors=A.behaviors??new Array,this.worldSpace=A.worldSpace??!1,this.rendererEmitterSettings=A.rendererEmitterSettings??{},A.renderMode===exports.RenderMode.StretchedBillBoard){const I=this.rendererEmitterSettings;A.speedFactor!==void 0&&(I.speedFactor=A.speedFactor),I.speedFactor=I.speedFactor??0,I.lengthFactor=I.lengthFactor??0}this.rendererSettings={instancingGeometry:A.instancingGeometry??PC,renderMode:A.renderMode??exports.RenderMode.BillBoard,renderOrder:A.renderOrder??0,material:A.material,uTileCount:A.uTileCount??1,vTileCount:A.vTileCount??1,blendTiles:A.blendTiles??!1,softParticles:A.softParticles??!1,softNearFade:A.softNearFade??0,softFarFade:A.softFarFade??0,layers:A.layers??new F.Layers},this.neededToUpdateRender=!0,this.particles=new Array,this.startTileIndex=A.startTileIndex||new cA(0),this.emitter=new M0(this),this.paused=!1,this.particleNum=0,this.emissionState={isBursting:!1,burstParticleIndex:0,burstParticleCount:0,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,travelDistance:0},this.emissionBursts.forEach(I=>I.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1}pause(){this.paused=!0}play(){this.paused=!1}stop(){this.restart(),this.pause()}spawn(A,I,g){ki.setFromRotationMatrix(g);const Q=J0,C=ki,E=U0;g.decompose(Q,C,E);for(let i=0;i<A;i++){for(I.burstParticleIndex=i,this.particleNum++;this.particles.length<this.particleNum;)this.rendererSettings.renderMode===exports.RenderMode.Trail?this.particles.push(new JE):this.particles.push(new B0);const D=this.particles[this.particleNum-1];if(D.reset(),D.speedModifier=1,this.startColor.startGen(D.memory),this.startColor.genColor(D.memory,D.startColor,this.emissionState.time),D.color.copy(D.startColor),this.startSpeed.startGen(D.memory),D.startSpeed=this.startSpeed.genValue(D.memory,I.time/this.duration),this.startLife.startGen(D.memory),D.life=this.startLife.genValue(D.memory,I.time/this.duration),D.age=0,this.startSize.startGen(D.memory),this.startSize.type==="vec3function")this.startSize.genValue(D.memory,D.startSize,I.time/this.duration);else{const o=this.startSize.genValue(D.memory,I.time/this.duration);D.startSize.set(o,o,o)}if(this.startTileIndex.startGen(D.memory),D.uvTile=this.startTileIndex.genValue(D.memory),D.size.copy(D.startSize),this.rendererSettings.renderMode===exports.RenderMode.Mesh||this.rendererSettings.renderMode===exports.RenderMode.BillBoard||this.rendererSettings.renderMode===exports.RenderMode.VerticalBillBoard||this.rendererSettings.renderMode===exports.RenderMode.HorizontalBillBoard||this.rendererSettings.renderMode===exports.RenderMode.StretchedBillBoard){const o=D;this.startRotation.startGen(D.memory),this.rendererSettings.renderMode===exports.RenderMode.Mesh?(o.rotation instanceof hA||(o.rotation=new hA),this.startRotation.type==="rotation"?this.startRotation.genValue(D.memory,o.rotation,1,I.time/this.duration):o.rotation.setFromAxisAngle(N0,this.startRotation.genValue(o.memory,I.time/this.duration))):this.startRotation.type==="rotation"?o.rotation=0:o.rotation=this.startRotation.genValue(o.memory,I.time/this.duration)}else if(this.rendererSettings.renderMode===exports.RenderMode.Trail){const o=D;this.rendererEmitterSettings.startLength.startGen(o.memory),o.length=this.rendererEmitterSettings.startLength.genValue(o.memory,I.time/this.duration)}if(this.emitterShape.initialize(D,I),this.rendererSettings.renderMode===exports.RenderMode.Trail&&this.rendererEmitterSettings.followLocalOrigin){const o=D;o.localPosition=new v().copy(o.position)}this.worldSpace?(D.position.applyMatrix4(g),D.startSize.multiply(E).abs(),D.size.copy(D.startSize),D.velocity.multiply(E).applyMatrix3(this.normalMatrix),D.rotation&&D.rotation instanceof hA&&D.rotation.multiplyQuaternions(ki,D.rotation)):this.onlyUsedByOther&&(D.parentMatrix=g);for(let o=0;o<this.behaviors.length;o++)this.behaviors[o].initialize(D,this)}}endEmit(){this.emitEnded=!0,this.autoDestroy&&(this.markForDestroy=!0),this.fire({type:"emitEnd",particleSystem:this})}dispose(){this._renderer&&this._renderer.deleteSystem(this),this.emitter.dispose(),this.emitter.parent&&this.emitter.parent.remove(this.emitter),this.fire({type:"destroy",particleSystem:this})}restart(){this.memory.length=0,this.paused=!1,this.particleNum=0,this.emissionState.isBursting=!1,this.emissionState.burstIndex=0,this.emissionState.burstWaveIndex=0,this.emissionState.time=0,this.emissionState.waitEmiting=0,this.behaviors.forEach(A=>{A.reset()}),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1,this.emissionBursts.forEach(A=>A.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory)}update(A){if(this.paused)return;let I=this.emitter;for(;I.parent;)I=I.parent;if(I.type!=="Scene"){this.dispose();return}if(this.firstTimeUpdate&&(this.firstTimeUpdate=!1,this.emitter.updateWorldMatrix(!0,!1)),this.emitEnded&&this.particleNum===0){this.markForDestroy&&this.emitter.parent&&this.dispose();return}if(this.looping&&this.prewarm&&!this.prewarmed){this.prewarmed=!0;for(let g=0;g<this.duration*zo;g++)this.update(1/zo)}A>.1&&(A=.1),this.neededToUpdateRender&&(this._renderer&&this._renderer.updateSystem(this),this.neededToUpdateRender=!1),this.onlyUsedByOther||this.emit(A,this.emissionState,this.emitter.matrixWorld),this.emitterShape.update(this,A);for(let g=0;g<this.behaviors.length;g++){this.behaviors[g].frameUpdate(A);for(let Q=0;Q<this.particleNum;Q++)this.particles[Q].died||this.behaviors[g].update(this.particles[Q],A)}for(let g=0;g<this.particleNum;g++)this.rendererEmitterSettings.followLocalOrigin&&this.particles[g].localPosition?(this.particles[g].position.copy(this.particles[g].localPosition),this.particles[g].parentMatrix?this.particles[g].position.applyMatrix4(this.particles[g].parentMatrix):this.particles[g].position.applyMatrix4(this.emitter.matrixWorld)):this.particles[g].position.addScaledVector(this.particles[g].velocity,A*this.particles[g].speedModifier),this.particles[g].age+=A;if(this.rendererSettings.renderMode===exports.RenderMode.Trail)for(let g=0;g<this.particleNum;g++)this.particles[g].update();for(let g=0;g<this.particleNum;g++){const Q=this.particles[g];Q.died&&(!(Q instanceof JE)||Q.previous.length===0)&&(this.particles[g]=this.particles[this.particleNum-1],this.particles[this.particleNum-1]=Q,this.particleNum--,g--,this.fire({type:"particleDied",particleSystem:this,particle:Q}))}}emit(A,I,g){I.time>this.duration&&(this.looping?(I.time-=this.duration,I.burstIndex=0,this.behaviors.forEach(C=>{C.reset()})):!this.emitEnded&&!this.onlyUsedByOther&&this.endEmit()),this.normalMatrix.getNormalMatrix(g);const Q=Math.ceil(I.waitEmiting);for(this.spawn(Q,I,g),I.waitEmiting-=Q;I.burstIndex<this.emissionBursts.length&&this.emissionBursts[I.burstIndex].time<=I.time;){if(Math.random()<this.emissionBursts[I.burstIndex].probability){const C=this.emissionBursts[I.burstIndex].count.genValue(this.memory,this.time);I.isBursting=!0,I.burstParticleCount=C,this.spawn(C,I,g),I.isBursting=!1}I.burstIndex++}if(!this.emitEnded&&(I.waitEmiting+=A*this.emissionOverTime.genValue(this.memory,I.time/this.duration),I.previousWorldPos!=null)){this.temp.set(g.elements[12],g.elements[13],g.elements[14]),I.travelDistance+=I.previousWorldPos.distanceTo(this.temp);const C=this.emissionOverDistance.genValue(this.memory,I.time/this.duration);if(I.travelDistance*C>0){const E=Math.floor(I.travelDistance*C);I.travelDistance-=E/C,I.waitEmiting+=E}}I.previousWorldPos===void 0&&(I.previousWorldPos=new v),I.previousWorldPos.set(g.elements[12],g.elements[13],g.elements[14]),I.time+=A}toJSON(A,I={}){if((A===void 0||typeof A=="string")&&(A={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}}),A.materials[this.rendererSettings.material.uuid]=this.rendererSettings.material.toJSON(A),I.useUrlForImage&&this.texture?.source!==void 0){const E=this.texture.source;A.images[E.uuid]={uuid:E.uuid,url:this.texture.image.url}}let Q;this.renderMode===exports.RenderMode.Trail?Q={startLength:this.rendererEmitterSettings.startLength.toJSON(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===exports.RenderMode.Mesh?Q={}:this.renderMode===exports.RenderMode.StretchedBillBoard?Q={speedFactor:this.rendererEmitterSettings.speedFactor,lengthFactor:this.rendererEmitterSettings.lengthFactor}:Q={};const C=this.rendererSettings.instancingGeometry;return A.geometries&&!A.geometries[C.uuid]&&(A.geometries[C.uuid]=C.toJSON()),{version:"3.0",autoDestroy:this.autoDestroy,looping:this.looping,prewarm:this.prewarm,duration:this.duration,shape:this.emitterShape.toJSON(),startLife:this.startLife.toJSON(),startSpeed:this.startSpeed.toJSON(),startRotation:this.startRotation.toJSON(),startSize:this.startSize.toJSON(),startColor:this.startColor.toJSON(),emissionOverTime:this.emissionOverTime.toJSON(),emissionOverDistance:this.emissionOverDistance.toJSON(),emissionBursts:this.emissionBursts.map(E=>({time:E.time,count:E.count.toJSON(),probability:E.probability,interval:E.interval,cycle:E.cycle})),onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry.uuid,renderOrder:this.renderOrder,renderMode:this.renderMode,rendererEmitterSettings:Q,material:this.rendererSettings.material.uuid,layers:this.layers.mask,startTileIndex:this.startTileIndex.toJSON(),uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.rendererSettings.softParticles,softFarFade:this.rendererSettings.softFarFade,softNearFade:this.rendererSettings.softNearFade,behaviors:this.behaviors.map(E=>E.toJSON()),worldSpace:this.worldSpace}}static fromJSON(A,I,g){const Q=g0(A.shape,I);let C;if(A.renderMode===exports.RenderMode.Trail){const D=A.rendererEmitterSettings;C={startLength:D.startLength!=null?sA(D.startLength):new cA(30),followLocalOrigin:D.followLocalOrigin}}else A.renderMode===exports.RenderMode.Mesh?C={}:A.renderMode===exports.RenderMode.StretchedBillBoard?(C=A.rendererEmitterSettings,A.speedFactor!=null&&(C.speedFactor=A.speedFactor)):C={};const E=new F.Layers;A.layers&&(E.mask=A.layers);const i=new LE({autoDestroy:A.autoDestroy,looping:A.looping,prewarm:A.prewarm,duration:A.duration,shape:Q,startLife:sA(A.startLife),startSpeed:sA(A.startSpeed),startRotation:NE(A.startRotation),startSize:NE(A.startSize),startColor:PD(A.startColor),emissionOverTime:sA(A.emissionOverTime),emissionOverDistance:sA(A.emissionOverDistance),emissionBursts:A.emissionBursts?.map(D=>({time:D.time,count:typeof D.count=="number"?new cA(D.count):sA(D.count),probability:D.probability??1,interval:D.interval??.1,cycle:D.cycle??1})),onlyUsedByOther:A.onlyUsedByOther,instancingGeometry:I.geometries[A.instancingGeometry],renderMode:A.renderMode,rendererEmitterSettings:C,renderOrder:A.renderOrder,layers:E,material:A.material?I.materials[A.material]:A.texture?new F.MeshBasicMaterial({map:I.textures[A.texture],transparent:A.transparent??!0,blending:A.blending,side:F.DoubleSide}):new F.MeshBasicMaterial({color:16777215,transparent:!0,blending:F.AdditiveBlending,side:F.DoubleSide}),startTileIndex:typeof A.startTileIndex=="number"?new cA(A.startTileIndex):sA(A.startTileIndex),uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softFarFade:A.softFarFade,softNearFade:A.softNearFade,behaviors:[],worldSpace:A.worldSpace});return i.behaviors=A.behaviors.map(D=>{const o=w0(D,i);return o&&o.type==="EmitSubParticleSystem"&&(g[D.subParticleSystem]=o),o}).filter(D=>D!==null),i}addBehavior(A){this.behaviors.push(A)}getRendererSettings(){return this.rendererSettings}addEventListener(A,I){this.listeners[A]||(this.listeners[A]=[]),this.listeners[A].push(I)}removeAllEventListeners(A){this.listeners[A]&&(this.listeners[A]=[])}removeEventListener(A,I){if(this.listeners[A]){const g=this.listeners[A].indexOf(I);g!==-1&&this.listeners[A].splice(g,1)}}fire(A){this.listeners[A.type]&&this.listeners[A.type].forEach(I=>I(A))}clone(){const A=[];for(const C of this.emissionBursts){const E={};Object.assign(E,C),A.push(E)}const I=[];for(const C of this.behaviors)I.push(C.clone());let g;this.renderMode===exports.RenderMode.Trail?g={startLength:this.rendererEmitterSettings.startLength.clone(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===exports.RenderMode.StretchedBillBoard?g={lengthFactor:this.rendererEmitterSettings.lengthFactor,speedFactor:this.rendererEmitterSettings.speedFactor}:g={};const Q=new F.Layers;return Q.mask=this.layers.mask,new LE({autoDestroy:this.autoDestroy,looping:this.looping,duration:this.duration,shape:this.emitterShape.clone(),startLife:this.startLife.clone(),startSpeed:this.startSpeed.clone(),startRotation:this.startRotation.clone(),startSize:this.startSize.clone(),startColor:this.startColor.clone(),emissionOverTime:this.emissionOverTime.clone(),emissionOverDistance:this.emissionOverDistance.clone(),emissionBursts:A,onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry,renderMode:this.renderMode,renderOrder:this.renderOrder,rendererEmitterSettings:g,material:this.rendererSettings.material,startTileIndex:this.startTileIndex,uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.softParticles,softFarFade:this.softFarFade,softNearFade:this.softNearFade,behaviors:I,worldSpace:this.worldSpace,layers:Q})}}var Mi=`
523
523
 
524
524
  #include <common>
525
525
  #include <color_pars_fragment>
@@ -554,7 +554,7 @@ void main() {
554
554
  #include <soft_fragment>
555
555
  #include <tonemapping_fragment>
556
556
  }
557
- `,PD=`
557
+ `,TD=`
558
558
  #define STANDARD
559
559
 
560
560
  #ifdef PHYSICAL
@@ -719,7 +719,7 @@ outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoat
719
719
  #include <fog_fragment>
720
720
  #include <premultiplied_alpha_fragment>
721
721
  #include <dithering_fragment>
722
- }`,R0=`
722
+ }`,L0=`
723
723
  #include <common>
724
724
  #include <color_pars_vertex>
725
725
  #include <logdepthbuf_pars_vertex>
@@ -765,7 +765,7 @@ void main() {
765
765
  #include <tile_vertex>
766
766
  #include <soft_vertex>
767
767
  }
768
- `,F0=`
768
+ `,H0=`
769
769
  #include <common>
770
770
  #include <color_pars_vertex>
771
771
  #include <logdepthbuf_pars_vertex>
@@ -802,7 +802,7 @@ void main() {
802
802
  #include <tile_vertex>
803
803
  #include <soft_vertex>
804
804
  }
805
- `,TD=`
805
+ `,OD=`
806
806
  #define STANDARD
807
807
  varying vec3 vViewPosition;
808
808
  #ifdef USE_TRANSMISSION
@@ -887,7 +887,7 @@ void main() {
887
887
  vWorldPosition = worldPosition.xyz;
888
888
  #endif
889
889
  }
890
- `,k0=`
890
+ `,Y0=`
891
891
  #include <common>
892
892
  #include <color_pars_vertex>
893
893
  #include <logdepthbuf_pars_vertex>
@@ -928,7 +928,7 @@ void main() {
928
928
  #include <tile_vertex>
929
929
  #include <soft_vertex>
930
930
  }
931
- `;function QD(B){return B===0?"uv":`uv${B}`}class M0 extends F.MeshStandardMaterial{constructor(A){super(A)}onBeforeCompile(A,I){super.onBeforeCompile(A,I),A.vertexShader=TD,A.fragmentShader=PD}}class N0 extends F.MeshPhysicalMaterial{constructor(A){super(A)}onBeforeCompile(A,I){super.onBeforeCompile(A,I),A.vertexShader=TD,A.fragmentShader=PD}}class J0 extends Ft{constructor(A){super(A),this.vector_=new v,this.vector2_=new v,this.vector3_=new v,this.quaternion_=new hA,this.quaternion2_=new hA,this.quaternion3_=new hA,this.rotationMat_=new yg,this.rotationMat2_=new yg,this.maxParticles=1e3,this.setupBuffers(),this.rebuildMaterial()}buildExpandableBuffers(){this.offsetBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*3),3),this.offsetBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("offset",this.offsetBuffer),this.colorBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*4),4),this.colorBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("color",this.colorBuffer),this.settings.renderMode===exports.RenderMode.Mesh?(this.rotationBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*4),4),this.rotationBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("rotation",this.rotationBuffer)):(this.settings.renderMode===exports.RenderMode.BillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.StretchedBillBoard)&&(this.rotationBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles),1),this.rotationBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("rotation",this.rotationBuffer)),this.sizeBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*3),3),this.sizeBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("size",this.sizeBuffer),this.uvTileBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles),1),this.uvTileBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("uvTile",this.uvTileBuffer),this.settings.renderMode===exports.RenderMode.StretchedBillBoard&&(this.velocityBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*4),4),this.velocityBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("velocity",this.velocityBuffer))}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new F.InstancedBufferGeometry,this.geometry.setIndex(this.settings.instancingGeometry.getIndex()),this.settings.instancingGeometry.hasAttribute("normal")&&this.geometry.setAttribute("normal",this.settings.instancingGeometry.getAttribute("normal")),this.geometry.setAttribute("position",this.settings.instancingGeometry.getAttribute("position")),this.settings.instancingGeometry.hasAttribute("uv")&&this.geometry.setAttribute("uv",this.settings.instancingGeometry.getAttribute("uv")),this.buildExpandableBuffers()}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={},I={};this.settings.material.type!=="MeshStandardMaterial"&&this.settings.material.type!=="MeshPhysicalMaterial"&&(A.map=new F.Uniform(this.settings.material.map)),this.settings.material.alphaTest&&(I.USE_ALPHATEST="",A.alphaTest=new F.Uniform(this.settings.material.alphaTest)),I.USE_UV="";const g=this.settings.uTileCount,Q=this.settings.vTileCount;(g>1||Q>1)&&(I.UV_TILE="",A.tileCount=new F.Uniform(new VQ(g,Q))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.material.normalMap&&(I.USE_NORMALMAP="",I.NORMALMAP_UV=QD(this.settings.material.normalMap.channel),A.normalMapTransform=new F.Uniform(new yg().copy(this.settings.material.normalMap.matrix))),this.settings.material.map&&(I.USE_MAP="",this.settings.blendTiles&&(I.TILE_BLEND=""),I.MAP_UV=QD(this.settings.material.map.channel),A.mapTransform=new F.Uniform(new yg().copy(this.settings.material.map.matrix))),I.USE_COLOR_ALPHA="";let C;if(this.settings.softParticles){I.SOFT_PARTICLES="";const i=this.settings.softNearFade,D=1/(this.settings.softFarFade-this.settings.softNearFade);A.softParams=new F.Uniform(new VQ(i,D)),A.depthTexture=new F.Uniform(null);const o=A.projParams=new F.Uniform(new YI);C=(s,t,w)=>{o.value.set(w.near,w.far,0,0)}}let E=!1;if(this.settings.renderMode===exports.RenderMode.BillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.Mesh){let i,D;this.settings.renderMode===exports.RenderMode.Mesh?this.settings.material.type==="MeshStandardMaterial"||this.settings.material.type==="MeshPhysicalMaterial"?(I.USE_COLOR="",i=TD,D=PD,E=!0):(i=F0,D=ki):(i=R0,D=ki),this.settings.renderMode===exports.RenderMode.VerticalBillBoard?I.VERTICAL="":this.settings.renderMode===exports.RenderMode.HorizontalBillBoard&&(I.HORIZONTAL="");let o=!1;this.settings.renderMode===exports.RenderMode.Mesh&&(this.settings.material.type==="MeshStandardMaterial"?(this.material=new M0({}),this.material.copy(this.settings.material),this.material.uniforms=A,this.material.defines=I,o=!0):this.settings.material.type==="MeshPhysicalMaterial"&&(this.material=new N0({}),this.material.copy(this.settings.material),this.material.uniforms=A,this.material.defines=I,o=!0)),o||(this.material=new F.ShaderMaterial({uniforms:A,defines:I,vertexShader:i,fragmentShader:D,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest,lights:E}))}else if(this.settings.renderMode===exports.RenderMode.StretchedBillBoard)A.speedFactor=new F.Uniform(1),this.material=new F.ShaderMaterial({uniforms:A,defines:I,vertexShader:k0,fragmentShader:ki,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest});else throw new Error("render mode unavailable");this.material&&C&&(this.material.onBeforeRender=C)}update(){let A=0,I=0;const g=this.getVisibleSystems();for(const Q of g)I+=Q.particleNum;I>this.maxParticles&&this.expandBuffers(I);for(const Q of g){Q.emitter.updateMatrixWorld&&(Q.emitter.updateWorldMatrix(!0,!1),Q.emitter.updateMatrixWorld(!0));const C=Q.particles,E=Q.particleNum,i=this.quaternion2_,D=this.vector2_,o=this.vector3_;Q.emitter.matrixWorld.decompose(D,i,o),this.rotationMat_.setFromMatrix4(Q.emitter.matrixWorld);for(let s=0;s<E;s++,A++){const t=C[s];if(this.settings.renderMode===exports.RenderMode.Mesh){let a;if(Q.worldSpace)a=t.rotation;else{let y;t.parentMatrix?y=this.quaternion3_.setFromRotationMatrix(t.parentMatrix):y=i,a=this.quaternion_,a.copy(y).multiply(t.rotation)}this.rotationBuffer.setXYZW(A,a.x,a.y,a.z,a.w)}else(this.settings.renderMode===exports.RenderMode.StretchedBillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.BillBoard)&&this.rotationBuffer.setX(A,t.rotation);let w;if(Q.worldSpace?w=t.position:(w=this.vector_,t.parentMatrix?w.copy(t.position).applyMatrix4(t.parentMatrix):w.copy(t.position).applyMatrix4(Q.emitter.matrixWorld)),this.offsetBuffer.setXYZ(A,w.x,w.y,w.z),this.colorBuffer.setXYZW(A,t.color.x,t.color.y,t.color.z,t.color.w),Q.worldSpace?this.sizeBuffer.setXYZ(A,t.size.x,t.size.y,t.size.z):t.parentMatrix?this.sizeBuffer.setXYZ(A,t.size.x,t.size.y,t.size.z):this.sizeBuffer.setXYZ(A,t.size.x*Math.abs(o.x),t.size.y*Math.abs(o.y),t.size.z*Math.abs(o.z)),this.uvTileBuffer.setX(A,t.uvTile),this.settings.renderMode===exports.RenderMode.StretchedBillBoard&&this.velocityBuffer){let a=Q.rendererEmitterSettings.speedFactor;a===0&&(a=.001);const y=Q.rendererEmitterSettings.lengthFactor;let R;Q.worldSpace?R=t.velocity:(R=this.vector_,t.parentMatrix?(this.rotationMat2_.setFromMatrix4(t.parentMatrix),R.copy(t.velocity).applyMatrix3(this.rotationMat2_)):R.copy(t.velocity).applyMatrix3(this.rotationMat_)),this.velocityBuffer.setXYZW(A,R.x*a,R.y*a,R.z*a,y)}}}this.geometry.instanceCount=A,A>0&&(this.offsetBuffer.clearUpdateRanges(),this.offsetBuffer.addUpdateRange(0,A*3),this.offsetBuffer.needsUpdate=!0,this.sizeBuffer.clearUpdateRanges(),this.sizeBuffer.addUpdateRange(0,A*3),this.sizeBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.uvTileBuffer.clearUpdateRanges(),this.uvTileBuffer.addUpdateRange(0,A),this.uvTileBuffer.needsUpdate=!0,this.settings.renderMode===exports.RenderMode.StretchedBillBoard&&this.velocityBuffer&&(this.velocityBuffer.clearUpdateRanges(),this.velocityBuffer.addUpdateRange(0,A*4),this.velocityBuffer.needsUpdate=!0),this.settings.renderMode===exports.RenderMode.Mesh?(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,A*4),this.rotationBuffer.needsUpdate=!0):(this.settings.renderMode===exports.RenderMode.StretchedBillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.BillBoard)&&(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,A),this.rotationBuffer.needsUpdate=!0))}dispose(){this.geometry.dispose()}}var U0=`
931
+ `;function BD(B){return B===0?"uv":`uv${B}`}class K0 extends F.MeshStandardMaterial{constructor(A){super(A)}onBeforeCompile(A,I){super.onBeforeCompile(A,I),A.vertexShader=OD,A.fragmentShader=TD}}class d0 extends F.MeshPhysicalMaterial{constructor(A){super(A)}onBeforeCompile(A,I){super.onBeforeCompile(A,I),A.vertexShader=OD,A.fragmentShader=TD}}class l0 extends Ut{constructor(A){super(A),this.vector_=new v,this.vector2_=new v,this.vector3_=new v,this.quaternion_=new hA,this.quaternion2_=new hA,this.quaternion3_=new hA,this.rotationMat_=new yg,this.rotationMat2_=new yg,this.maxParticles=1e3,this.setupBuffers(),this.rebuildMaterial()}buildExpandableBuffers(){this.offsetBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*3),3),this.offsetBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("offset",this.offsetBuffer),this.colorBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*4),4),this.colorBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("color",this.colorBuffer),this.settings.renderMode===exports.RenderMode.Mesh?(this.rotationBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*4),4),this.rotationBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("rotation",this.rotationBuffer)):(this.settings.renderMode===exports.RenderMode.BillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.StretchedBillBoard)&&(this.rotationBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles),1),this.rotationBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("rotation",this.rotationBuffer)),this.sizeBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*3),3),this.sizeBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("size",this.sizeBuffer),this.uvTileBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles),1),this.uvTileBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("uvTile",this.uvTileBuffer),this.settings.renderMode===exports.RenderMode.StretchedBillBoard&&(this.velocityBuffer=new F.InstancedBufferAttribute(new Float32Array(this.maxParticles*4),4),this.velocityBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("velocity",this.velocityBuffer))}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new F.InstancedBufferGeometry,this.geometry.setIndex(this.settings.instancingGeometry.getIndex()),this.settings.instancingGeometry.hasAttribute("normal")&&this.geometry.setAttribute("normal",this.settings.instancingGeometry.getAttribute("normal")),this.geometry.setAttribute("position",this.settings.instancingGeometry.getAttribute("position")),this.settings.instancingGeometry.hasAttribute("uv")&&this.geometry.setAttribute("uv",this.settings.instancingGeometry.getAttribute("uv")),this.buildExpandableBuffers()}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={},I={};this.settings.material.type!=="MeshStandardMaterial"&&this.settings.material.type!=="MeshPhysicalMaterial"&&(A.map=new F.Uniform(this.settings.material.map)),this.settings.material.alphaTest&&(I.USE_ALPHATEST="",A.alphaTest=new F.Uniform(this.settings.material.alphaTest)),I.USE_UV="";const g=this.settings.uTileCount,Q=this.settings.vTileCount;(g>1||Q>1)&&(I.UV_TILE="",A.tileCount=new F.Uniform(new VQ(g,Q))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.material.normalMap&&(I.USE_NORMALMAP="",I.NORMALMAP_UV=BD(this.settings.material.normalMap.channel),A.normalMapTransform=new F.Uniform(new yg().copy(this.settings.material.normalMap.matrix))),this.settings.material.map&&(I.USE_MAP="",this.settings.blendTiles&&(I.TILE_BLEND=""),I.MAP_UV=BD(this.settings.material.map.channel),A.mapTransform=new F.Uniform(new yg().copy(this.settings.material.map.matrix))),I.USE_COLOR_ALPHA="";let C;if(this.settings.softParticles){I.SOFT_PARTICLES="";const i=this.settings.softNearFade,D=1/(this.settings.softFarFade-this.settings.softNearFade);A.softParams=new F.Uniform(new VQ(i,D)),A.depthTexture=new F.Uniform(null);const o=A.projParams=new F.Uniform(new YI);C=(s,t,w)=>{o.value.set(w.near,w.far,0,0)}}let E=!1;if(this.settings.renderMode===exports.RenderMode.BillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.Mesh){let i,D;this.settings.renderMode===exports.RenderMode.Mesh?this.settings.material.type==="MeshStandardMaterial"||this.settings.material.type==="MeshPhysicalMaterial"?(I.USE_COLOR="",i=OD,D=TD,E=!0):(i=H0,D=Mi):(i=L0,D=Mi),this.settings.renderMode===exports.RenderMode.VerticalBillBoard?I.VERTICAL="":this.settings.renderMode===exports.RenderMode.HorizontalBillBoard&&(I.HORIZONTAL="");let o=!1;this.settings.renderMode===exports.RenderMode.Mesh&&(this.settings.material.type==="MeshStandardMaterial"?(this.material=new K0({}),this.material.copy(this.settings.material),this.material.uniforms=A,this.material.defines=I,o=!0):this.settings.material.type==="MeshPhysicalMaterial"&&(this.material=new d0({}),this.material.copy(this.settings.material),this.material.uniforms=A,this.material.defines=I,o=!0)),o||(this.material=new F.ShaderMaterial({uniforms:A,defines:I,vertexShader:i,fragmentShader:D,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest,lights:E}))}else if(this.settings.renderMode===exports.RenderMode.StretchedBillBoard)A.speedFactor=new F.Uniform(1),this.material=new F.ShaderMaterial({uniforms:A,defines:I,vertexShader:Y0,fragmentShader:Mi,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest});else throw new Error("render mode unavailable");this.material&&C&&(this.material.onBeforeRender=C)}update(){let A=0,I=0;const g=this.getVisibleSystems();for(const Q of g)I+=Q.particleNum;I>this.maxParticles&&this.expandBuffers(I);for(const Q of g){Q.emitter.updateMatrixWorld&&(Q.emitter.updateWorldMatrix(!0,!1),Q.emitter.updateMatrixWorld(!0));const C=Q.particles,E=Q.particleNum,i=this.quaternion2_,D=this.vector2_,o=this.vector3_;Q.emitter.matrixWorld.decompose(D,i,o),this.rotationMat_.setFromMatrix4(Q.emitter.matrixWorld);for(let s=0;s<E;s++,A++){const t=C[s];if(this.settings.renderMode===exports.RenderMode.Mesh){let a;if(Q.worldSpace)a=t.rotation;else{let y;t.parentMatrix?y=this.quaternion3_.setFromRotationMatrix(t.parentMatrix):y=i,a=this.quaternion_,a.copy(y).multiply(t.rotation)}this.rotationBuffer.setXYZW(A,a.x,a.y,a.z,a.w)}else(this.settings.renderMode===exports.RenderMode.StretchedBillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.BillBoard)&&this.rotationBuffer.setX(A,t.rotation);let w;if(Q.worldSpace?w=t.position:(w=this.vector_,t.parentMatrix?w.copy(t.position).applyMatrix4(t.parentMatrix):w.copy(t.position).applyMatrix4(Q.emitter.matrixWorld)),this.offsetBuffer.setXYZ(A,w.x,w.y,w.z),this.colorBuffer.setXYZW(A,t.color.x,t.color.y,t.color.z,t.color.w),Q.worldSpace?this.sizeBuffer.setXYZ(A,t.size.x,t.size.y,t.size.z):t.parentMatrix?this.sizeBuffer.setXYZ(A,t.size.x,t.size.y,t.size.z):this.sizeBuffer.setXYZ(A,t.size.x*Math.abs(o.x),t.size.y*Math.abs(o.y),t.size.z*Math.abs(o.z)),this.uvTileBuffer.setX(A,t.uvTile),this.settings.renderMode===exports.RenderMode.StretchedBillBoard&&this.velocityBuffer){let a=Q.rendererEmitterSettings.speedFactor;a===0&&(a=.001);const y=Q.rendererEmitterSettings.lengthFactor;let r;Q.worldSpace?r=t.velocity:(r=this.vector_,t.parentMatrix?(this.rotationMat2_.setFromMatrix4(t.parentMatrix),r.copy(t.velocity).applyMatrix3(this.rotationMat2_)):r.copy(t.velocity).applyMatrix3(this.rotationMat_)),this.velocityBuffer.setXYZW(A,r.x*a,r.y*a,r.z*a,y)}}}this.geometry.instanceCount=A,A>0&&(this.offsetBuffer.clearUpdateRanges(),this.offsetBuffer.addUpdateRange(0,A*3),this.offsetBuffer.needsUpdate=!0,this.sizeBuffer.clearUpdateRanges(),this.sizeBuffer.addUpdateRange(0,A*3),this.sizeBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.uvTileBuffer.clearUpdateRanges(),this.uvTileBuffer.addUpdateRange(0,A),this.uvTileBuffer.needsUpdate=!0,this.settings.renderMode===exports.RenderMode.StretchedBillBoard&&this.velocityBuffer&&(this.velocityBuffer.clearUpdateRanges(),this.velocityBuffer.addUpdateRange(0,A*4),this.velocityBuffer.needsUpdate=!0),this.settings.renderMode===exports.RenderMode.Mesh?(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,A*4),this.rotationBuffer.needsUpdate=!0):(this.settings.renderMode===exports.RenderMode.StretchedBillBoard||this.settings.renderMode===exports.RenderMode.HorizontalBillBoard||this.settings.renderMode===exports.RenderMode.VerticalBillBoard||this.settings.renderMode===exports.RenderMode.BillBoard)&&(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,A),this.rotationBuffer.needsUpdate=!0))}dispose(){this.geometry.dispose()}}var f0=`
932
932
 
933
933
  #include <common>
934
934
  #include <tile_pars_fragment>
@@ -961,7 +961,7 @@ void main() {
961
961
 
962
962
  #include <fog_fragment>
963
963
  #include <tonemapping_fragment>
964
- }`,L0=`
964
+ }`,x0=`
965
965
  #include <common>
966
966
  #include <tile_pars_vertex>
967
967
  #include <color_pars_vertex>
@@ -1036,7 +1036,7 @@ void main() {
1036
1036
  vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
1037
1037
 
1038
1038
  #include <fog_vertex>
1039
- }`;class H0 extends Ft{constructor(A){super(A),this.vector_=new v,this.vector2_=new v,this.vector3_=new v,this.quaternion_=new hA,this.maxParticles=1e4,this.setupBuffers(),this.rebuildMaterial()}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new F.BufferGeometry,this.indexBuffer=new F.BufferAttribute(new Uint32Array(this.maxParticles*6),1),this.indexBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setIndex(this.indexBuffer),this.positionBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*6),3),this.positionBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("position",this.positionBuffer),this.previousBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*6),3),this.previousBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("previous",this.previousBuffer),this.nextBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*6),3),this.nextBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("next",this.nextBuffer),this.widthBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*2),1),this.widthBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("width",this.widthBuffer),this.sideBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*2),1),this.sideBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("side",this.sideBuffer),this.uvBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*4),2),this.uvBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("uv",this.uvBuffer),this.colorBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*8),4),this.colorBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("color",this.colorBuffer)}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={lineWidth:{value:1},map:{value:null},useMap:{value:0},alphaMap:{value:null},useAlphaMap:{value:0},resolution:{value:new VQ(1,1)},sizeAttenuation:{value:1},visibility:{value:1},alphaTest:{value:0}},I={};if(I.USE_UV="",I.USE_COLOR_ALPHA="",this.settings.material.map&&(I.USE_MAP="",I.MAP_UV=QD(this.settings.material.map.channel),A.map=new F.Uniform(this.settings.material.map),A.mapTransform=new F.Uniform(new yg().copy(this.settings.material.map.matrix))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.renderMode===exports.RenderMode.Trail)this.material=new F.ShaderMaterial({uniforms:A,defines:I,vertexShader:L0,fragmentShader:U0,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,side:this.settings.material.side,blending:this.settings.material.blending||F.AdditiveBlending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha});else throw new Error("render mode unavailable")}update(){let A=0,I=0,g=0;const Q=this.getVisibleSystems();for(const C of Q)for(let E=0;E<C.particleNum;E++)g+=C.particles[E].previous.length*2;g>this.maxParticles&&this.expandBuffers(g);for(const C of Q){C.emitter.updateMatrixWorld&&(C.emitter.updateWorldMatrix(!0,!1),C.emitter.updateMatrixWorld(!0));const E=this.quaternion_,i=this.vector2_,D=this.vector3_;C.emitter.matrixWorld.decompose(i,E,D);const o=C.particles,s=C.particleNum,t=this.settings.uTileCount,w=this.settings.vTileCount,a=1/t,y=1/w;for(let R=0;R<s;R++){const n=o[R],h=n.uvTile%w,G=Math.floor(n.uvTile/w+.001),r=n.previous.values();let M=r.next(),k=M.value,J=k;M.done||(M=r.next());let U;M.value!==void 0?U=M.value:U=J;for(let Y=0;Y<n.previous.length;Y++,A+=2){if(this.positionBuffer.setXYZ(A,J.position.x,J.position.y,J.position.z),this.positionBuffer.setXYZ(A+1,J.position.x,J.position.y,J.position.z),C.worldSpace?(this.positionBuffer.setXYZ(A,J.position.x,J.position.y,J.position.z),this.positionBuffer.setXYZ(A+1,J.position.x,J.position.y,J.position.z)):(n.parentMatrix?this.vector_.copy(J.position).applyMatrix4(n.parentMatrix):this.vector_.copy(J.position).applyMatrix4(C.emitter.matrixWorld),this.positionBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.positionBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.previousBuffer.setXYZ(A,k.position.x,k.position.y,k.position.z),this.previousBuffer.setXYZ(A+1,k.position.x,k.position.y,k.position.z)):(n.parentMatrix?this.vector_.copy(k.position).applyMatrix4(n.parentMatrix):this.vector_.copy(k.position).applyMatrix4(C.emitter.matrixWorld),this.previousBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.previousBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.nextBuffer.setXYZ(A,U.position.x,U.position.y,U.position.z),this.nextBuffer.setXYZ(A+1,U.position.x,U.position.y,U.position.z)):(n.parentMatrix?this.vector_.copy(U.position).applyMatrix4(n.parentMatrix):this.vector_.copy(U.position).applyMatrix4(C.emitter.matrixWorld),this.nextBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.nextBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),this.sideBuffer.setX(A,1),this.sideBuffer.setX(A+1,-1),C.worldSpace)this.widthBuffer.setX(A,J.size),this.widthBuffer.setX(A+1,J.size);else if(n.parentMatrix)this.widthBuffer.setX(A,J.size),this.widthBuffer.setX(A+1,J.size);else{const d=(Math.abs(D.x)+Math.abs(D.y)+Math.abs(D.z))/3;this.widthBuffer.setX(A,J.size*d),this.widthBuffer.setX(A+1,J.size*d)}this.uvBuffer.setXY(A,(Y/n.previous.length+h)*a,(w-G-1)*y),this.uvBuffer.setXY(A+1,(Y/n.previous.length+h)*a,(w-G)*y),this.colorBuffer.setXYZW(A,J.color.x,J.color.y,J.color.z,J.color.w),this.colorBuffer.setXYZW(A+1,J.color.x,J.color.y,J.color.z,J.color.w),Y+1<n.previous.length&&(this.indexBuffer.setX(I*3,A),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+2),I++,this.indexBuffer.setX(I*3,A+2),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+3),I++),k=J,J=U,M.done||(M=r.next(),M.value!==void 0&&(U=M.value))}}}this.positionBuffer.clearUpdateRanges(),this.positionBuffer.addUpdateRange(0,A*3),this.positionBuffer.needsUpdate=!0,this.previousBuffer.clearUpdateRanges(),this.previousBuffer.addUpdateRange(0,A*3),this.previousBuffer.needsUpdate=!0,this.nextBuffer.clearUpdateRanges(),this.nextBuffer.addUpdateRange(0,A*3),this.nextBuffer.needsUpdate=!0,this.sideBuffer.clearUpdateRanges(),this.sideBuffer.addUpdateRange(0,A),this.sideBuffer.needsUpdate=!0,this.widthBuffer.clearUpdateRanges(),this.widthBuffer.addUpdateRange(0,A),this.widthBuffer.needsUpdate=!0,this.uvBuffer.clearUpdateRanges(),this.uvBuffer.addUpdateRange(0,A*2),this.uvBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.indexBuffer.clearUpdateRanges(),this.indexBuffer.addUpdateRange(0,I*3),this.indexBuffer.needsUpdate=!0,this.geometry.setDrawRange(0,I*3)}dispose(){this.geometry.dispose()}}class OD extends F.Object3D{constructor(){super(),this.batches=[],this.systemToBatchIndex=new Map,this.type="BatchedRenderer",this.depthTexture=null}static equals(A,I){return A.material.side===I.material.side&&A.material.blending===I.material.blending&&A.material.blendSrc===I.material.blendSrc&&A.material.blendDst===I.material.blendDst&&A.material.blendEquation===I.material.blendEquation&&A.material.premultipliedAlpha===I.material.premultipliedAlpha&&A.material.transparent===I.material.transparent&&A.material.depthTest===I.material.depthTest&&A.material.type===I.material.type&&A.material.alphaTest===I.material.alphaTest&&A.material.map===I.material.map&&A.renderMode===I.renderMode&&A.blendTiles===I.blendTiles&&A.softParticles===I.softParticles&&A.softFarFade===I.softFarFade&&A.softNearFade===I.softNearFade&&A.uTileCount===I.uTileCount&&A.vTileCount===I.vTileCount&&A.instancingGeometry===I.instancingGeometry&&A.renderOrder===I.renderOrder&&A.layers.mask===I.layers.mask}addSystem(A){A._renderer=this;const I=A.getRendererSettings();for(let Q=0;Q<this.batches.length;Q++)if(OD.equals(this.batches[Q].settings,I)){this.batches[Q].addSystem(A),this.systemToBatchIndex.set(A,Q);return}let g;switch(I.renderMode){case exports.RenderMode.Trail:g=new H0(I);break;case exports.RenderMode.Mesh:case exports.RenderMode.BillBoard:case exports.RenderMode.VerticalBillBoard:case exports.RenderMode.HorizontalBillBoard:case exports.RenderMode.StretchedBillBoard:g=new J0(I);break}this.depthTexture&&g.applyDepthTexture(this.depthTexture),g.addSystem(A),this.batches.push(g),this.systemToBatchIndex.set(A,this.batches.length-1),this.add(g)}deleteSystem(A){const I=this.systemToBatchIndex.get(A);I!=null&&(this.batches[I].removeSystem(A),this.systemToBatchIndex.delete(A))}setDepthTexture(A){this.depthTexture=A;for(const I of this.batches)I.applyDepthTexture(A)}updateSystem(A){this.deleteSystem(A),this.addSystem(A)}update(A){this.systemToBatchIndex.forEach((I,g)=>{g.update(A)});for(let I=0;I<this.batches.length;I++)this.batches[I].update()}}const Y0=OD;h0();i0(D0);console.log("%c Particle system powered by three.quarks. https://quarks.art/","font-size: 14px; font-weight: bold;");const kt=Math.sqrt(5),K0=(kt-1)/4,BI=(5-kt)/20,PC=B=>Math.floor(B)|0,TC=new Float64Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);function d0(B=Math.random){const A=l0(B),I=new Float64Array(A).map(E=>TC[E%32*4]),g=new Float64Array(A).map(E=>TC[E%32*4+1]),Q=new Float64Array(A).map(E=>TC[E%32*4+2]),C=new Float64Array(A).map(E=>TC[E%32*4+3]);return function(i,D,o,s){let t,w,a,y,R;const n=(i+D+o+s)*K0,h=PC(i+n),G=PC(D+n),r=PC(o+n),M=PC(s+n),k=(h+G+r+M)*BI,J=h-k,U=G-k,Y=r-k,d=M-k,H=i-J,f=D-U,l=o-Y,p=s-d;let q=0,m=0,T=0,Z=0;H>f?q++:m++,H>l?q++:T++,H>p?q++:Z++,f>l?m++:T++,f>p?m++:Z++,l>p?T++:Z++;const O=q>=3?1:0,j=m>=3?1:0,gA=T>=3?1:0,QA=Z>=3?1:0,CA=q>=2?1:0,EA=m>=2?1:0,BA=T>=2?1:0,W=Z>=2?1:0,$=q>=1?1:0,z=m>=1?1:0,MA=T>=1?1:0,kA=Z>=1?1:0,NA=H-O+BI,JA=f-j+BI,iA=l-gA+BI,oA=p-QA+BI,rA=H-CA+2*BI,qI=f-EA+2*BI,ZA=l-BA+2*BI,UA=p-W+2*BI,MI=H-$+3*BI,WI=f-z+3*BI,jI=l-MA+3*BI,NI=p-kA+3*BI,zI=H-1+4*BI,bI=f-1+4*BI,mI=l-1+4*BI,_I=p-1+4*BI,WA=h&255,nI=G&255,fI=r&255,hI=M&255;let wA=.6-H*H-f*f-l*l-p*p;if(wA<0)t=0;else{const RA=WA+A[nI+A[fI+A[hI]]];wA*=wA,t=wA*wA*(I[RA]*H+g[RA]*f+Q[RA]*l+C[RA]*p)}let $I=.6-NA*NA-JA*JA-iA*iA-oA*oA;if($I<0)w=0;else{const RA=WA+O+A[nI+j+A[fI+gA+A[hI+QA]]];$I*=$I,w=$I*$I*(I[RA]*NA+g[RA]*JA+Q[RA]*iA+C[RA]*oA)}let Sg=.6-rA*rA-qI*qI-ZA*ZA-UA*UA;if(Sg<0)a=0;else{const RA=WA+CA+A[nI+EA+A[fI+BA+A[hI+W]]];Sg*=Sg,a=Sg*Sg*(I[RA]*rA+g[RA]*qI+Q[RA]*ZA+C[RA]*UA)}let Ag=.6-MI*MI-WI*WI-jI*jI-NI*NI;if(Ag<0)y=0;else{const RA=WA+$+A[nI+z+A[fI+MA+A[hI+kA]]];Ag*=Ag,y=Ag*Ag*(I[RA]*MI+g[RA]*WI+Q[RA]*jI+C[RA]*NI)}let Rg=.6-zI*zI-bI*bI-mI*mI-_I*_I;if(Rg<0)R=0;else{const RA=WA+1+A[nI+1+A[fI+1+A[hI+1]]];Rg*=Rg,R=Rg*Rg*(I[RA]*zI+g[RA]*bI+Q[RA]*mI+C[RA]*_I)}return 27*(t+w+a+y+R)}}function l0(B){const I=new Uint8Array(512);for(let g=0;g<512/2;g++)I[g]=g;for(let g=0;g<512/2-1;g++){const Q=g+~~(B()*(256-g)),C=I[g];I[g]=I[Q],I[Q]=C}for(let g=256;g<512;g++)I[g]=I[g-256];return I}const XD="needle:project",Wo="remote://";function rB(B,A,I){if(!B.startsWith(Wo))return B;const g=B.substring(Wo.length),Q=g.indexOf("/");if(Q<=0)return null;const C=g.substring(0,Q),E=g.substring(Q),i=I?.[C]??A?.[C];return i===void 0?null:(i.endsWith("/")?i.substring(0,i.length-1):i)+E}function Mt(B){return!!B&&typeof B=="object"&&typeof B[XD]=="string"}function f0(B,A=console.warn){for(const I of B)A(`[needle:project] ${I.arc}: ${I.message}`)}class x0{constructor(A){this.scene=A,this.scopes=new Map,this.targets=new WeakMap,this.ready=Promise.resolve()}registerReference(A,I,g=[],Q){const C=new Map,E={root:new WeakRef(I),nodes:C,elements:[]},i=(D,o)=>{const s=new WeakRef(D),t={get name(){return s.deref()?.name},get userData(){return s.deref()?.userData},children:D.children?.filter(R=>!Q?.has(R)).map(R=>i(R,[...o,R.name??""]))};C.set(t,s);const w=D.userData?.["needle-id"],a=qD(D.name),y=D===I?void 0:{type:"node",path:te(o),...typeof w=="string"?{id:w}:{},...a?{anchor:a}:{}};return(D===I||y)&&this.targets.set(D,{ref:A,...y?{address:y}:{}}),t};I.isObject3D?E.graph=i(I,[]):this.targets.set(I,{ref:A});for(const D of g){const o=D,s=o.isMaterial?"material":o.isTexture?"texture":o.isAnimationClip?"animation":null;if(!s)continue;E.elements.push(new WeakRef(D));const t=o.userData?.["needle-id"];typeof t=="string"&&this.targets.set(D,{ref:A,address:{type:s,id:t,name:o.name}})}this.scopes.set(A,E)}resolve(A){const I=this.scopes.get(A.ref);let g=A.ref==="$scene"?this.scene:I?.root.deref()??null;if(A.address){const Q=A.address;if(Q.type&&Q.type!=="node"){const C=I?.elements.flatMap(E=>{const i=E.deref(),D=Q.type==="material"?i?.isMaterial:Q.type==="texture"?i?.isTexture:Q.type==="animation"?i?.isAnimationClip:!1;return i&&D?[i]:[]})??[];g=qE(Q,C)}else if(I?.graph){const C=nQ(Q,I.graph);g=C?I.nodes.get(C)?.deref()??null:null,g&&!this.inScene(g)&&(g=null)}else g=A.ref==="$scene"?nQ(Q,this.scene):null}if(!g||g.isObject3D&&!this.inScene(g))return null;if(A.pathPrefix){const Q=we(A.pathPrefix.replace(/\/$/,""));for(const C of Q){if(C==="components")g=g.userData?.components??null;else if(Array.isArray(g)&&C.startsWith("guid:")){const E=C.slice(5);g=g.find(i=>(i.needle_editor_guid||i.guid)===E)??null}else return null;if(!g)return null}}return g}targetFor(A){if(A===this.scene)return{ref:"$scene"};const I=A,g=I.needle_editor_guid||I.guid;if(I.gameObject&&g){const C=this.targetFor(I.gameObject);return C?{...C,pathPrefix:`components/guid:${g}/`}:null}const Q=this.targets.get(A);return Q&&this.resolve(Q)===A?structuredClone(Q):null}inScene(A){for(let I=A;I;I=I.parent)if(I===this.scene)return!0;return!1}}const Nt=new WeakMap;let BD=0;function p0(){BD++;let B=!1;return{dispose(){B||(B=!0,BD--)}}}function u0(B){return BD?new x0(B):void 0}function q0(B){return Nt.get(B)}function b0(B,A){Nt.set(B,A)}function m0(B,A,I,g){const Q=w=>I?.resolveAssetUrl?{resolveUrl:a=>I.resolveAssetUrl(w,a)}:void 0,C=new Map,E=()=>{if(!I?.onProgress)return;let w=0,a=0;for(const y of C.values())w+=y.loaded,a+=y.total;I.onProgress(w,a)},i=new Map,D=w=>{let a=i.get(w);if(!a){const y=A.assets?.[w]?.src;if(typeof y!="string")a=Promise.resolve(null);else if(I?.resolveAsset)a=I.resolveAsset(w,y).catch(R=>(g("reference",`asset "${w}" failed to resolve: ${R}`),null));else if(rB(y,A.remotes,I?.remotes)===null)g("reference",`asset "${w}" src "${y}" names a remote that is not in the document's remotes table — the asset is skipped`),a=Promise.resolve(null);else{const R=rB(y,A.remotes,I?.remotes),n=I?.baseUrl?new URL(R,I.baseUrl).href:R;a=fetch(n).then(h=>{if(!h.ok)throw new Error(`${h.status} ${h.statusText}`);const G=h.headers.get("Content-Type")??"";if(G.includes("text/html"))throw new Error(`the server answered with an HTML page (Content-Type: ${G}) — the file probably does not exist there. Documents record srcs AS SAVED: a dev-server url (e.g. localhost) does not exist on a deployment.`);if(!h.body||!I?.onProgress)return h.arrayBuffer();const r={loaded:0,total:Number(h.headers.get("Content-Length"))||0};return C.set(w,r),E(),$0(h.body,M=>{r.loaded=M,r.total<M&&(r.total=M),E()})}).catch(h=>(g("reference",`asset "${w}" failed to load from ${n}: ${h}`),null))}i.set(w,a)}return a},o=new Map,s=(w,a="over")=>{let y=o.get(w);return y||(y=(async()=>{if(!A.assets?.[w])return g(a,`asset "${w}" has no entry in the document's assets map`),null;const R=await D(w);if(R===null)return null;const n=A.assets[w].src??w,h=rB(n,A.remotes,I?.remotes)??n,G=await B.parse(R,h,Q(w))??null;return G||g(a,`asset "${w}" data loaded but PARSING failed (see console for the parser error)`),G&&(G.parser?.json&&et(G.parser.json,G.parser.associations,G.scenes),G.scene&&B.parkTemplate(G.scene)),G})(),o.set(w,y)),y},t=new Map;for(const w of A.references??[]){if(!w||typeof w.id!="string"||typeof w.asset!="string"||!w.address)continue;if(t.has(w.id)){g("reference",`duplicate reference id "${w.id}" — entry skipped`);continue}const a=w.address;t.set(w.id,(async()=>{if(a.type==="material"){const y=await s(w.asset);if(!y)return null;const R=await Yt(y,a);return R||g("reference",`entity "${w.id}": material did not resolve in asset "${w.asset}" (${JSON.stringify(a)})`),R}if(a.type==="hdr"){const y=A.assets?.[w.asset]?.src;if(typeof y!="string")return g("reference",`entity "${w.id}": unknown asset "${w.asset}"`),null;let R,n;if(I?.resolveAsset){const k=await I.resolveAsset(w.asset,y).catch(J=>(g("reference",`entity "${w.id}": asset "${w.asset}" failed to resolve: ${J}`),null));if(k===null)return null;if(typeof k=="string")R=k;else{const J=URL.createObjectURL(new Blob([k]));R=J,n=()=>URL.revokeObjectURL(J)}}else{const k=rB(y,A.remotes,I?.remotes);if(k===null)return g("reference",`entity "${w.id}": src "${y}" names a remote that is not in the document's remotes table — the entity is skipped`),null;R=I?.baseUrl?new URL(k,I.baseUrl).href:k}const h=y.split(/[?#]/)[0],G=h.substring(h.lastIndexOf("/")+1)||void 0,r=/pmrem/i.test(y)?"pmrem":void 0,M=await B.loadEnvironment(R,{format:r,name:G}).finally(()=>n?.());return M||g("reference",`entity "${w.id}": environment texture failed to load from ${y}`),M}return g("reference",`entity "${w.id}": element type "${a.type??"?"}" is not instantiable yet`),null})())}return{loadParsedAsset:s,entities:t}}async function P0(B,A,I){if(!Mt(A))throw new TypeError(`evaluateProjectDocument: not a project document (missing "${XD}")`);const g=I?.parent??B.scene,Q=u0(B.scene),C=new Map,E=new Map,i=[],D=(y,R)=>{i.push({arc:y,message:R})},{loadParsedAsset:o,entities:s}=m0(B,A,I,D),t=[],w=new Set;for(const y of A.references??[]){if(!y||typeof y.id!="string"||typeof y.asset!="string"){D("reference",`invalid reference entry: ${JSON.stringify(y)}`);continue}if(y.address)continue;if(w.has(y.id)){D("reference",`duplicate reference id "${y.id}" — entry skipped`);continue}if(I?.referenceBindings){const n=I.referenceBindings.get(y.id);if(!n){D("reference",`reference "${y.id}": no existing model binding supplied`);continue}if(!A.assets?.[y.asset]){D("reference",`reference "${y.id}": unknown asset "${y.asset}"`);continue}w.add(y.id),C.set(y.id,n),E.set(y.id,{scene:n});continue}const R=await o(y.asset,"reference");if(R){if(!R.scene){D("reference",`reference "${y.id}": asset "${y.asset}" did not produce a scene`);continue}w.add(y.id),t.push({ref:y,model:R})}}const a=new Promise(y=>{B.schedule(()=>{const R=[];for(const{ref:r,model:M}of t){const k=M.scene,J=B.instantiate(k,r.id);if(!J){D("reference",`reference "${r.id}": instantiating asset "${r.asset}" failed`);continue}C.set(r.id,J),E.set(r.id,{...M,scene:J});const U=M.parser?.associations;if(U){const Y=(d,H)=>{const f=U.get(d);f!==void 0&&U.set(H,f);const l=Math.min(d.children.length,H.children.length);for(let p=0;p<l;p++)Y(d.children[p],H.children[p])};Y(k,J)}R.push(J)}for(const r of R)g.add(r),B.activateInstance(r);for(const r of A.references??[]){const M=r?.id?C.get(r.id):void 0;if(M&&r.parent){const k=C.get(r.parent.ref);if(!k)D("reference",`reference "${r.id}": parent ref "${r.parent.ref}" not placed — staying at the composition root`);else{const J=r.parent.address?nQ(r.parent.address,k):k;J?J.add(M):D("reference",`reference "${r.id}": parent address did not resolve in "${r.parent.ref}" — staying at the composition root`)}}}const n=new Set;for(const{model:r}of t)r.scene&&!n.has(r.scene)&&(n.add(r.scene),B.disposeTemplate(r.scene));Z0(B,A,g,C,D,I?.baseUrl);const h=new Map;for(const r of A.overs??[])for(const M of[r?.target,r?.value])if(M?.address&&(M.ref==="$scene"||M.ref!==void 0&&I?.referenceBindings?.has(M.ref))){const k=r?.target?.path==="parent"?g:B.scene;h.set(M,jQ(M,g,C,k))}const G=j0(B,A,g,C,s,D,h);if(Q){const r=new Set(C.values());for(const[M,k]of C){const J=E.get(M);Q.registerReference(M,k,[...J?.parser?.associations?.keys()??[],...J?.animations??[]],r)}}T0(A,g,C,D,h),G.finally(()=>y())})});return Q&&(Q.ready=a.then(async()=>{for(const[y,R]of s){const n=await R;n&&Q.registerReference(y,n)}}),b0(B.inspectionOwner??B,Q)),{root:g,references:C,models:E,issues:i,completed:a}}function T0(B,A,I,g,Q){const C=(B.overs??[]).filter(i=>i?.target?.path==="parent"),E=i=>{const D=i.value?.index;return typeof D=="number"?D:Number.MAX_SAFE_INTEGER};C.sort((i,D)=>E(i)-E(D));for(const i of C){const D=Q.has(i.target)?Q.get(i.target):jQ(i.target,A,I);if(!D){g("over",`parent over target did not resolve: ${JSON.stringify(i.target)}`);continue}const o=i.value;if(!o||typeof o!="object"){g("over",`parent over value must be a node reference: ${JSON.stringify(i.value)}`);continue}let s=null;if(o.ref===void 0||o.ref==="$scene")s=Q.has(o)?Q.get(o)??null:o.address?nQ(o.address,A):A;else{const t=I.get(o.ref);t&&(s=o.address?nQ(o.address,t):t)}if(!s){g("over",`parent over did not resolve its new parent — staying in place: ${JSON.stringify(i.value)}`);continue}if(s===D||O0(D,s)){g("over",`parent over would create a cycle — ignored: ${JSON.stringify(i.target)}`);continue}s.add(D)}}function O0(B,A){for(let I=A.parent;I;I=I.parent)if(I===B)return!0;return!1}function jQ(B,A,I,g){const Q=B?.ref==="$scene"?g??A:B?.ref!==void 0?I.get(B.ref):A;return Q?B?.address?nQ(B.address,Q):Q:null}const X0=/^([A-Za-z_][A-Za-z0-9_-]*):([\s\S]*)$/;function vD(B){return B.split("/").filter(A=>A.length>0).map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function v0(B,A,I,g,Q){if(A?.isObject3D===!0&&I==="components")return B.getComponents?.(A)??[];if(!Array.isArray(A))return A?.[I];if(/^\d+$/.test(I))return A[Number(I)];const C=X0.exec(I);if(!C){Q(`"${I}" is neither an index nor a <field>:<value> qualifier`);return}const[,E,i]=C,D=A.filter(o=>!o||typeof o!="object"?!1:E==="type"?B.matchesComponentType?.(o,i)??o.constructor?.name===i:E==="guid"?B.matchesComponentGuid?.(o,i)??o.guid===i:o[E]===i);if(D.length===1)return D[0];if(D.length>1){Q(`"${I}" matched ${D.length} elements — the document must name one unambiguously`);return}if(E==="guid"&&g&&B.deriveComponentGuid){const o=B.deriveComponentGuid(g,i);return A.find(s=>s?.guid===o)}}function Jt(B,A,I,g,Q){const C=[A];let E=A;for(let i=0;i<I.length-1;i++){const D=v0(B,E,I[i],g,o=>Q(`at "${I[i]}": ${o}`));if(!D||typeof D!="object")return Q(`does not resolve at "${I[i]}"`),null;E=D,C.push(D)}return{container:E,chain:C}}function CD(B){const A=[];return B.traverse(I=>{const g=I.material;for(const Q of Array.isArray(g)?g:g?[g]:[])Q&&typeof Q=="object"&&!A.includes(Q)&&A.push(Q)}),A}function V0(B,A,I){const g=CD(B);for(const C of I??[])for(const E of CD(C))g.includes(E)||g.push(E);const Q=qE(A,g);return Q?{material:Q}:null}function Z0(B,A,I,g,Q,C){const E=A.defs??[];if(!E.length)return;const i=W0(B,I,C);for(const D of E)Ut(D,I,g,Q,i)}function W0(B,A,I){return B.createDefContext?.(A,I)??{scene:B.scene,createNode:()=>B.createNode()}}function Ut(B,A,I,g,Q){{let C=jQ(B?.target,A,I,Q.scene);if(!C){g("def",`def target did not resolve: ${JSON.stringify(B?.target)}`);return}if(B.create){const E=typeof B.create.name=="string"?C.children?.find(D=>D?.name===B.create.name):void 0,i=E??Q.createNode();E||(typeof B.create.name=="string"&&(i.name=B.create.name),C.add(i)),Array.isArray(B.create.position)&&B.create.position.length>=3&&i.position.fromArray(B.create.position),Array.isArray(B.create.quaternion)&&B.create.quaternion.length>=4&&i.quaternion.fromArray(B.create.quaternion),Array.isArray(B.create.scale)&&B.create.scale.length>=3&&i.scale.fromArray(B.create.scale),C=i}for(const E of B.components??[]){if(!E||typeof E.name!="string"){g("def",`invalid component entry: ${JSON.stringify(E)}`);continue}const i=ED(E,A,I,g);Q.applyComponent?Q.applyComponent(C,i,g):g("def",`unsupported component type "${E.name}"`)}}}function ED(B,A,I,g){if(!B||typeof B!="object")return B;if(Array.isArray(B)){let E=null;for(let i=0;i<B.length;i++){const D=ED(B[i],A,I,g);D!==B[i]&&(E||(E=[...B]),E[i]=D)}return E??B}const Q=B;if(typeof Q.ref=="string"&&I.has(Q.ref)){const E=jQ(B,A,I);if(!E){g("def",`node reference did not resolve: ${JSON.stringify(B)}`);return}return E}let C=null;for(const[E,i]of Object.entries(B)){const D=ED(i,A,I,g);D!==i&&(C||(C={...B}),C[E]=D)}return C??B}async function j0(B,A,I,g,Q,C,E){const i=Lt(Q);i.sceneTargets=E;for(const D of A.overs??[])Ht(B,D,I,g,i,C);await i.settled()}function Lt(B){const A=[],I=new Map;return{entities:B,deactivatedRoots:new Map,chainOnEntity(Q,C){const E=B.get(Q),i=I.get(Q)??Promise.resolve(),D=Promise.all([E,i]).then(([o])=>C(o));I.set(Q,D),A.push(D)},settled:()=>Promise.all(A).then(()=>{})}}function Ht(B,A,I,g,Q,C){const{entities:E,deactivatedRoots:i,chainOnEntity:D}=Q;{const o=A?.target;if(!o||typeof o.path!="string"||o.path.length===0){C("over",`over without a target path: ${JSON.stringify(A)}`);return}if(o.path==="parent")return;if(o.ref!==void 0&&E.has(o.ref)){const a=o.ref,y=o.path,R=A.value,n=o;D(a,h=>{h&&OC(B,h,y,R,C,n)});return}let s=null,t=null;if(o.ref==="$scene")s=Q.sceneTargets?.has(o)?Q.sceneTargets.get(o)??null:o.address?nQ(o.address,B.scene):B.scene;else if(o.ref==="$renderer"){if(o.address){C("over",`"$renderer" targets take no address: ${JSON.stringify(o)}`);return}s=B.renderer}else if(o.address?.type==="material"){const a=o.ref!==void 0?g.get(o.ref):I;s=a?V0(a,o.address,i.get(o.ref))?.material??null:null}else t=Q.sceneTargets?.has(o)?Q.sceneTargets.get(o)??null:jQ(o,I,g),s=t;if(!s){C("over",`over target did not resolve: ${JSON.stringify(o)}`);return}const w=vD(o.path);if(w[w.length-1]==="active"){if(A.value!==!1)return;const a=w.length===1?s:Jt(B,s,w,o.ref,y=>C("over",`path "${o.path}" ${y}: ${JSON.stringify(o)}`))?.container;if(a){if(a.isObject3D){const y=i.get(o.ref)??[];y.push(a),i.set(o.ref,y)}Ac(B,a,t,C)}return}if(jo(A.value)&&(A.value.ref==="$scene"||g.has(A.value.ref))){const a=Q.sceneTargets?.has(A.value)?Q.sceneTargets.get(A.value):jQ(A.value,I,g,B.scene);if(!a){C("over",`node-reference value did not resolve: ${JSON.stringify(A.value)} for ${JSON.stringify(o)}`);return}OC(B,s,o.path,a,C,o);return}if(jo(A.value)){const a=A.value.ref;if(!E.get(a)){C("over",`value references unknown entity "${a}": ${JSON.stringify(o)}`);return}const R=s,n=o.path,h=o;D(a,G=>{if(!G){C("over",`entity "${a}" was not instantiated — assignment skipped: ${JSON.stringify(h)}`);return}OC(B,R,n,G,C,h)});return}if(z0(A.value)){C("over",`reference-valued over not supported (skipped, not raw-assigned): ${JSON.stringify(o)}`);return}OC(B,s,o.path,A.value,C,o)}}function jo(B){return!!B&&typeof B=="object"&&typeof B.ref=="string"}function z0(B){if(!B||typeof B!="object")return!1;const A=B;return typeof A.asset=="string"||A.node!==void 0||typeof A.guid=="string"}function _0(B,A){const I=B.scene;if(!I)return null;const g=CD(I);return qE(A,g)??(g.length===1?g[0]:null)}async function Yt(B,A){const I=_0(B,A);if(I)return I;const g=B.parser,Q=g?.json?.materials?.length??0;if(!Q||!g?.getDependency)return null;const C=[];for(let E=0;E<Q;E++){const i=await g.getDependency("material",E).catch(()=>null);i&&typeof i=="object"&&C.push(i)}return qE(A,C)??(C.length===1?C[0]:null)}async function $0(B,A){const I=B.getReader(),g=[];let Q=0;for(;;){const{done:i,value:D}=await I.read();if(i)break;D&&(g.push(D),Q+=D.byteLength,A(Q))}const C=new Uint8Array(Q);let E=0;for(const i of g)C.set(i,E),E+=i.byteLength;return C.buffer}function Ac(B,A,I,g){A.isObject3D?A.removeFromParent():B.removeComponent?B.removeComponent(A,I):g("over","component deactivation is not supported by this host")}function OC(B,A,I,g,Q,C){const E=vD(I),i=Jt(B,A,E,C.ref,a=>Q("over",`path "${I}" ${a}: ${JSON.stringify(C)}`));if(!i)return;const{container:D,chain:o}=i,s=D,t=E[E.length-1],w=s[t];Array.isArray(g)&&w&&typeof w=="object"&&typeof w.fromArray=="function"?w.fromArray(g):Array.isArray(g)&&g.length===3&&t==="background"&&s.isScene===!0?s[t]=B.createColor(g):s[t]=g;for(const a of o){const y=a;(y.isMaterial===!0||y.isTexture===!0)&&(y.needsUpdate=!0)}}class Ic{constructor(A,I){if(this._retries=0,!Number.isInteger(A)||A<0)throw new Error("Base must be a positive integer or zero");if(I!==void 0&&(!Number.isInteger(I)||I<0))throw new Error("ExpMax must be a undefined, a positive integer or zero");this.base=A,this.expMax=I,this.i=0}get retries(){return this._retries}get current(){return this.base*Math.pow(2,this.i)}next(){return this._retries++,this.i=this.expMax===void 0?this.i+1:Math.min(this.i+1,this.expMax),this.current}reset(){this._retries=0,this.i=0}}var SA;(function(B){B.open="open",B.close="close",B.error="error",B.message="message",B.retry="retry",B.reconnect="reconnect"})(SA||(SA={}));class Kt{constructor(A,I,g){var Q,C,E,i,D,o,s,t,w,a,y,R,n,h,G;this._closedByUser=!1,this.handleOpenEvent=r=>this.handleEvent(SA.open,r),this.handleErrorEvent=r=>this.handleEvent(SA.error,r),this.handleCloseEvent=r=>this.handleEvent(SA.close,r),this.handleMessageEvent=r=>this.handleEvent(SA.message,r),this._url=A,this._protocols=I,this._options={buffer:g?.buffer,retry:{maxRetries:(Q=g?.retry)===null||Q===void 0?void 0:Q.maxRetries,instantReconnect:(C=g?.retry)===null||C===void 0?void 0:C.instantReconnect,backoff:(E=g?.retry)===null||E===void 0?void 0:E.backoff},listeners:{open:[...(D=(i=g?.listeners)===null||i===void 0?void 0:i.open)!==null&&D!==void 0?D:[]],close:[...(s=(o=g?.listeners)===null||o===void 0?void 0:o.close)!==null&&s!==void 0?s:[]],error:[...(w=(t=g?.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[]],message:[...(y=(a=g?.listeners)===null||a===void 0?void 0:a.message)!==null&&y!==void 0?y:[]],retry:[...(n=(R=g?.listeners)===null||R===void 0?void 0:R.retry)!==null&&n!==void 0?n:[]],reconnect:[...(G=(h=g?.listeners)===null||h===void 0?void 0:h.reconnect)!==null&&G!==void 0?G:[]]}},this._underlyingWebsocket=this.tryConnect()}get url(){return this._url}get protocols(){return this._protocols}get buffer(){return this._options.buffer}get maxRetries(){return this._options.retry.maxRetries}get instantReconnect(){return this._options.retry.instantReconnect}get backoff(){return this._options.retry.backoff}get closedByUser(){return this._closedByUser}get lastConnection(){return this._lastConnection}get underlyingWebsocket(){return this._underlyingWebsocket}get readyState(){return this._underlyingWebsocket.readyState}get bufferedAmount(){return this._underlyingWebsocket.bufferedAmount}get extensions(){return this._underlyingWebsocket.extensions}get binaryType(){return this._underlyingWebsocket.binaryType}set binaryType(A){this._underlyingWebsocket.binaryType=A}send(A){this.closedByUser||(this._underlyingWebsocket.readyState===this._underlyingWebsocket.OPEN?this._underlyingWebsocket.send(A):this.buffer!==void 0&&this.buffer.add(A))}close(A,I){this.cancelScheduledConnectionRetry(),this._closedByUser=!0,this._underlyingWebsocket.close(A,I)}addEventListener(A,I,g){this._options.listeners[A].push({listener:I,options:g})}removeEventListener(A,I,g){const Q=C=>C.listener!==I||C.options!==g;this._options.listeners[A]=this._options.listeners[A].filter(Q)}tryConnect(){return this._underlyingWebsocket=new WebSocket(this.url,this.protocols),this._underlyingWebsocket.addEventListener(SA.open,this.handleOpenEvent),this._underlyingWebsocket.addEventListener(SA.close,this.handleCloseEvent),this._underlyingWebsocket.addEventListener(SA.error,this.handleErrorEvent),this._underlyingWebsocket.addEventListener(SA.message,this.handleMessageEvent),this._underlyingWebsocket}clearWebsocket(){this._underlyingWebsocket.removeEventListener(SA.open,this.handleOpenEvent),this._underlyingWebsocket.removeEventListener(SA.close,this.handleCloseEvent),this._underlyingWebsocket.removeEventListener(SA.error,this.handleErrorEvent),this._underlyingWebsocket.removeEventListener(SA.message,this.handleMessageEvent),this._underlyingWebsocket.close()}dispatchEvent(A,I){const g=this._options.listeners[A],Q=[];g.forEach(({listener:C,options:E})=>{C(this,I),(E===void 0||E.once===void 0||!E.once)&&Q.push({listener:C,options:E})}),this._options.listeners[A]=Q}handleEvent(A,I){switch(A){case SA.close:this.dispatchEvent(A,I),this.scheduleConnectionRetryIfNeeded();break;case SA.open:if(this.backoff!==void 0&&this._lastConnection!==void 0){const g={retries:this.backoff.retries,lastConnection:new Date(this._lastConnection)},Q=new CustomEvent(SA.reconnect,{detail:g});this.dispatchEvent(SA.reconnect,Q),this.backoff.reset()}this._lastConnection=new Date,this.dispatchEvent(A,I),this.sendBufferedData();break;case SA.retry:this.dispatchEvent(A,I),this.clearWebsocket(),this.tryConnect();break;default:this.dispatchEvent(A,I);break}}sendBufferedData(){if(this.buffer!==void 0)for(let A=this.buffer.read();A!==void 0;A=this.buffer.read())this.send(A)}scheduleConnectionRetryIfNeeded(){if(this.closedByUser||this.backoff===void 0)return;const A=g=>{const Q=new CustomEvent(SA.retry,{detail:g});this.handleEvent(SA.retry,Q)},I={backoff:this._options.retry.instantReconnect===!0?0:this.backoff.next(),retries:this._options.retry.instantReconnect===!0?0:this.backoff.retries,lastConnection:this._lastConnection};(this._options.retry.maxRetries===void 0||I.retries<=this._options.retry.maxRetries)&&(this.retryTimeout=globalThis.setTimeout(()=>A(I),I.backoff))}cancelScheduledConnectionRetry(){globalThis.clearTimeout(this.retryTimeout)}}class gc{constructor(A){this._url=A}get url(){return this._url}withProtocols(A){return this._protocols=A,this}get protocols(){return this._protocols}withMaxRetries(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{maxRetries:A})}),this}get maxRetries(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.maxRetries}withInstantReconnect(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{instantReconnect:A})}),this}get instantReconnect(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.instantReconnect}withBackoff(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{backoff:A})}),this}get backoff(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.backoff}withBuffer(A){return this._options=Object.assign(Object.assign({},this._options),{buffer:A}),this}get buffer(){var A;return(A=this._options)===null||A===void 0?void 0:A.buffer}onOpen(A,I){return this.addListener(SA.open,A,I),this}onClose(A,I){return this.addListener(SA.close,A,I),this}onError(A,I){return this.addListener(SA.error,A,I),this}onMessage(A,I){return this.addListener(SA.message,A,I),this}onRetry(A,I){return this.addListener(SA.retry,A,I),this}onReconnect(A,I){return this.addListener(SA.reconnect,A,I),this}build(){return new Kt(this._url,this._protocols,this._options)}addListener(A,I,g){var Q,C,E,i,D,o,s,t,w,a,y,R,n,h,G,r,M,k,J,U,Y;return this._options=Object.assign(Object.assign({},this._options),{listeners:{open:(E=(C=(Q=this._options)===null||Q===void 0?void 0:Q.listeners)===null||C===void 0?void 0:C.open)!==null&&E!==void 0?E:[],close:(o=(D=(i=this._options)===null||i===void 0?void 0:i.listeners)===null||D===void 0?void 0:D.close)!==null&&o!==void 0?o:[],error:(w=(t=(s=this._options)===null||s===void 0?void 0:s.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[],message:(R=(y=(a=this._options)===null||a===void 0?void 0:a.listeners)===null||y===void 0?void 0:y.message)!==null&&R!==void 0?R:[],retry:(G=(h=(n=this._options)===null||n===void 0?void 0:n.listeners)===null||h===void 0?void 0:h.retry)!==null&&G!==void 0?G:[],reconnect:(k=(M=(r=this._options)===null||r===void 0?void 0:r.listeners)===null||M===void 0?void 0:M.reconnect)!==null&&k!==void 0?k:[],[A]:[...(Y=(U=(J=this._options)===null||J===void 0?void 0:J.listeners)===null||U===void 0?void 0:U[A])!==null&&Y!==void 0?Y:[],{listener:I,options:g}]}}),this}}const Qc=Object.freeze(Object.defineProperty({__proto__:null,ExponentialBackoff:Ic,Websocket:Kt,WebsocketBuilder:gc,get WebsocketEvent(){return SA}},Symbol.toStringTag,{value:"Module"}));function VD(B){return B&&B.__esModule&&Object.prototype.hasOwnProperty.call(B,"default")?B.default:B}var Mi={exports:{}},zo;function _o(){return zo||(zo=1,(function(B){var A={};A.useBlobBuilder=(function(){try{return new Blob([]),!1}catch{return!0}})(),A.useArrayBufferView=!A.useBlobBuilder&&(function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}})(),B.exports.binaryFeatures=A;var I=B.exports.BlobBuilder;typeof window<"u"&&(I=B.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder);function g(){this._pieces=[],this._parts=[]}g.prototype.append=function(Q){typeof Q=="number"?this._pieces.push(Q):(this.flush(),this._parts.push(Q))},g.prototype.flush=function(){if(this._pieces.length>0){var Q=new Uint8Array(this._pieces);A.useArrayBufferView||(Q=Q.buffer),this._parts.push(Q),this._pieces=[]}},g.prototype.getBuffer=function(){if(this.flush(),A.useBlobBuilder){for(var Q=new I,C=0,E=this._parts.length;C<E;C++)Q.append(this._parts[C]);return Q.getBlob()}else return new Blob(this._parts)},B.exports.BufferBuilder=g})(Mi)),Mi.exports}var Ni,$o;function Bc(){if($o)return Ni;$o=1;var B=_o().BufferBuilder,A=_o().binaryFeatures,I={unpack:function(i){var D=new g(i);return D.unpack()},pack:function(i){var D=new Q;D.pack(i);var o=D.getBuffer();return o}};Ni=I;function g(i){this.index=0,this.dataBuffer=i,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}g.prototype.unpack=function(){var i=this.unpack_uint8();if(i<128)return i;if((i^224)<32)return(i^224)-32;var D;if((D=i^160)<=15)return this.unpack_raw(D);if((D=i^176)<=15)return this.unpack_string(D);if((D=i^144)<=15)return this.unpack_array(D);if((D=i^128)<=15)return this.unpack_map(D);switch(i){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:return;case 213:return;case 214:return;case 215:return;case 216:return D=this.unpack_uint16(),this.unpack_string(D);case 217:return D=this.unpack_uint32(),this.unpack_string(D);case 218:return D=this.unpack_uint16(),this.unpack_raw(D);case 219:return D=this.unpack_uint32(),this.unpack_raw(D);case 220:return D=this.unpack_uint16(),this.unpack_array(D);case 221:return D=this.unpack_uint32(),this.unpack_array(D);case 222:return D=this.unpack_uint16(),this.unpack_map(D);case 223:return D=this.unpack_uint32(),this.unpack_map(D)}},g.prototype.unpack_uint8=function(){var i=this.dataView[this.index]&255;return this.index++,i},g.prototype.unpack_uint16=function(){var i=this.read(2),D=(i[0]&255)*256+(i[1]&255);return this.index+=2,D},g.prototype.unpack_uint32=function(){var i=this.read(4),D=((i[0]*256+i[1])*256+i[2])*256+i[3];return this.index+=4,D},g.prototype.unpack_uint64=function(){var i=this.read(8),D=((((((i[0]*256+i[1])*256+i[2])*256+i[3])*256+i[4])*256+i[5])*256+i[6])*256+i[7];return this.index+=8,D},g.prototype.unpack_int8=function(){var i=this.unpack_uint8();return i<128?i:i-256},g.prototype.unpack_int16=function(){var i=this.unpack_uint16();return i<32768?i:i-65536},g.prototype.unpack_int32=function(){var i=this.unpack_uint32();return i<Math.pow(2,31)?i:i-Math.pow(2,32)},g.prototype.unpack_int64=function(){var i=this.unpack_uint64();return i<Math.pow(2,63)?i:i-Math.pow(2,64)},g.prototype.unpack_raw=function(i){if(this.length<this.index+i)throw new Error("BinaryPackFailure: index is out of range "+this.index+" "+i+" "+this.length);var D=this.dataBuffer.slice(this.index,this.index+i);return this.index+=i,D},g.prototype.unpack_string=function(i){for(var D=this.read(i),o=0,s="",t,w;o<i;)t=D[o],t<128?(s+=String.fromCharCode(t),o++):(t^192)<32?(w=(t^192)<<6|D[o+1]&63,s+=String.fromCharCode(w),o+=2):(w=(t&15)<<12|(D[o+1]&63)<<6|D[o+2]&63,s+=String.fromCharCode(w),o+=3);return this.index+=i,s},g.prototype.unpack_array=function(i){for(var D=new Array(i),o=0;o<i;o++)D[o]=this.unpack();return D},g.prototype.unpack_map=function(i){for(var D={},o=0;o<i;o++){var s=this.unpack(),t=this.unpack();D[s]=t}return D},g.prototype.unpack_float=function(){var i=this.unpack_uint32(),D=i>>31,o=(i>>23&255)-127,s=i&8388607|8388608;return(D===0?1:-1)*s*Math.pow(2,o-23)},g.prototype.unpack_double=function(){var i=this.unpack_uint32(),D=this.unpack_uint32(),o=i>>31,s=(i>>20&2047)-1023,t=i&1048575|1048576,w=t*Math.pow(2,s-20)+D*Math.pow(2,s-52);return(o===0?1:-1)*w},g.prototype.read=function(i){var D=this.index;if(D+i<=this.length)return this.dataView.subarray(D,D+i);throw new Error("BinaryPackFailure: read index out of range")};function Q(){this.bufferBuilder=new B}Q.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},Q.prototype.pack=function(i){var D=typeof i;if(D==="string")this.pack_string(i);else if(D==="number")Math.floor(i)===i?this.pack_integer(i):this.pack_double(i);else if(D==="boolean")i===!0?this.bufferBuilder.append(195):i===!1&&this.bufferBuilder.append(194);else if(D==="undefined")this.bufferBuilder.append(192);else if(D==="object")if(i===null)this.bufferBuilder.append(192);else{var o=i.constructor;if(o==Array)this.pack_array(i);else if(o==Blob||o==File||i instanceof Blob||i instanceof File)this.pack_bin(i);else if(o==ArrayBuffer)A.useArrayBufferView?this.pack_bin(new Uint8Array(i)):this.pack_bin(i);else if("BYTES_PER_ELEMENT"in i)A.useArrayBufferView?this.pack_bin(new Uint8Array(i.buffer)):this.pack_bin(i.buffer);else if(o==Object||o.toString().startsWith("class"))this.pack_object(i);else if(o==Date)this.pack_string(i.toString());else if(typeof i.toBinaryPack=="function")this.bufferBuilder.append(i.toBinaryPack());else throw new Error('Type "'+o.toString()+'" not yet supported')}else throw new Error('Type "'+D+'" not yet supported');this.bufferBuilder.flush()},Q.prototype.pack_bin=function(i){var D=i.length||i.byteLength||i.size;if(D<=15)this.pack_uint8(160+D);else if(D<=65535)this.bufferBuilder.append(218),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(219),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(i)},Q.prototype.pack_string=function(i){var D=E(i);if(D<=15)this.pack_uint8(176+D);else if(D<=65535)this.bufferBuilder.append(216),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(217),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(i)},Q.prototype.pack_array=function(i){var D=i.length;if(D<=15)this.pack_uint8(144+D);else if(D<=65535)this.bufferBuilder.append(220),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(221),this.pack_uint32(D);else throw new Error("Invalid length");for(var o=0;o<D;o++)this.pack(i[o])},Q.prototype.pack_integer=function(i){if(i>=-32&&i<=127)this.bufferBuilder.append(i&255);else if(i>=0&&i<=255)this.bufferBuilder.append(204),this.pack_uint8(i);else if(i>=-128&&i<=127)this.bufferBuilder.append(208),this.pack_int8(i);else if(i>=0&&i<=65535)this.bufferBuilder.append(205),this.pack_uint16(i);else if(i>=-32768&&i<=32767)this.bufferBuilder.append(209),this.pack_int16(i);else if(i>=0&&i<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(i);else if(i>=-2147483648&&i<=2147483647)this.bufferBuilder.append(210),this.pack_int32(i);else if(i>=-9223372036854776e3&&i<=9223372036854776e3)this.bufferBuilder.append(211),this.pack_int64(i);else if(i>=0&&i<=18446744073709552e3)this.bufferBuilder.append(207),this.pack_uint64(i);else throw new Error("Invalid integer")},Q.prototype.pack_double=function(i){var D=0;i<0&&(D=1,i=-i);var o=Math.floor(Math.log(i)/Math.LN2),s=i/Math.pow(2,o)-1,t=Math.floor(s*Math.pow(2,52)),w=Math.pow(2,32),a=D<<31|o+1023<<20|t/w&1048575,y=t%w;this.bufferBuilder.append(203),this.pack_int32(a),this.pack_int32(y)},Q.prototype.pack_object=function(i){var D=Object.keys(i),o=D.length;if(o<=15)this.pack_uint8(128+o);else if(o<=65535)this.bufferBuilder.append(222),this.pack_uint16(o);else if(o<=4294967295)this.bufferBuilder.append(223),this.pack_uint32(o);else throw new Error("Invalid length");for(var s in i)i.hasOwnProperty(s)&&(this.pack(s),this.pack(i[s]))},Q.prototype.pack_uint8=function(i){this.bufferBuilder.append(i)},Q.prototype.pack_uint16=function(i){this.bufferBuilder.append(i>>8),this.bufferBuilder.append(i&255)},Q.prototype.pack_uint32=function(i){var D=i&4294967295;this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255)},Q.prototype.pack_uint64=function(i){var D=i/Math.pow(2,32),o=i%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)},Q.prototype.pack_int8=function(i){this.bufferBuilder.append(i&255)},Q.prototype.pack_int16=function(i){this.bufferBuilder.append((i&65280)>>8),this.bufferBuilder.append(i&255)},Q.prototype.pack_int32=function(i){this.bufferBuilder.append(i>>>24&255),this.bufferBuilder.append((i&16711680)>>>16),this.bufferBuilder.append((i&65280)>>>8),this.bufferBuilder.append(i&255)},Q.prototype.pack_int64=function(i){var D=Math.floor(i/Math.pow(2,32)),o=i%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)};function C(i){var D=i.charCodeAt(0);return D<=2047?"00":D<=65535?"000":D<=2097151?"0000":D<=67108863?"00000":"000000"}function E(i){return i.length>600?new Blob([i]).size:i.replace(/[^\u0000-\u007F]/g,C).length}return Ni}var Cc=Bc();const As=VD(Cc);let dt=!0,lt=!0;function SB(B,A,I){const g=B.match(A);return g&&g.length>=I&&parseInt(g[I],10)}function BB(B,A,I){if(!B.RTCPeerConnection)return;const g=B.RTCPeerConnection.prototype,Q=g.addEventListener;g.addEventListener=function(E,i){if(E!==A)return Q.apply(this,arguments);const D=o=>{const s=I(o);s&&(i.handleEvent?i.handleEvent(s):i(s))};return this._eventMap=this._eventMap||{},this._eventMap[A]||(this._eventMap[A]=new Map),this._eventMap[A].set(i,D),Q.apply(this,[E,D])};const C=g.removeEventListener;g.removeEventListener=function(E,i){if(E!==A||!this._eventMap||!this._eventMap[A])return C.apply(this,arguments);if(!this._eventMap[A].has(i))return C.apply(this,arguments);const D=this._eventMap[A].get(i);return this._eventMap[A].delete(i),this._eventMap[A].size===0&&delete this._eventMap[A],Object.keys(this._eventMap).length===0&&delete this._eventMap,C.apply(this,[E,D])},Object.defineProperty(g,"on"+A,{get(){return this["_on"+A]},set(E){this["_on"+A]&&(this.removeEventListener(A,this["_on"+A]),delete this["_on"+A]),E&&this.addEventListener(A,this["_on"+A]=E)},enumerable:!0,configurable:!0})}function Ec(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(dt=B,B?"adapter.js logging disabled":"adapter.js logging enabled")}function ic(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(lt=!B,"adapter.js deprecation warnings "+(B?"disabled":"enabled"))}function ZD(){if(typeof window=="object"){if(dt)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function PE(B,A){lt&&console.warn(B+" is deprecated, please use "+A+" instead.")}function Dc(B){const A={browser:null,version:null};if(typeof B>"u"||!B.navigator)return A.browser="Not a browser.",A;const{navigator:I}=B;if(I.mozGetUserMedia)A.browser="firefox",A.version=SB(I.userAgent,/Firefox\/(\d+)\./,1);else if(I.webkitGetUserMedia||B.isSecureContext===!1&&B.webkitRTCPeerConnection&&!B.RTCIceGatherer)A.browser="chrome",A.version=SB(I.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(I.mediaDevices&&I.userAgent.match(/Edge\/(\d+).(\d+)$/))A.browser="edge",A.version=SB(I.userAgent,/Edge\/(\d+).(\d+)$/,2);else if(B.RTCPeerConnection&&I.userAgent.match(/AppleWebKit\/(\d+)\./))A.browser="safari",A.version=SB(I.userAgent,/AppleWebKit\/(\d+)\./,1),A.supportsUnifiedPlan=B.RTCRtpTransceiver&&"currentDirection"in B.RTCRtpTransceiver.prototype;else return A.browser="Not a supported browser.",A;return A}function Is(B){return Object.prototype.toString.call(B)==="[object Object]"}function ft(B){return Is(B)?Object.keys(B).reduce(function(A,I){const g=Is(B[I]),Q=g?ft(B[I]):B[I],C=g&&!Object.keys(Q).length;return Q===void 0||C?A:Object.assign(A,{[I]:Q})},{}):B}function iD(B,A,I){!A||I.has(A.id)||(I.set(A.id,A),Object.keys(A).forEach(g=>{g.endsWith("Id")?iD(B,B.get(A[g]),I):g.endsWith("Ids")&&A[g].forEach(Q=>{iD(B,B.get(Q),I)})}))}function gs(B,A,I){const g=I?"outbound-rtp":"inbound-rtp",Q=new Map;if(A===null)return Q;const C=[];return B.forEach(E=>{E.type==="track"&&E.trackIdentifier===A.id&&C.push(E)}),C.forEach(E=>{B.forEach(i=>{i.type===g&&i.trackId===E.id&&iD(B,i,Q)})}),Q}const Qs=ZD;function xt(B,A){const I=B&&B.navigator;if(!I.mediaDevices)return;const g=function(i){if(typeof i!="object"||i.mandatory||i.optional)return i;const D={};return Object.keys(i).forEach(o=>{if(o==="require"||o==="advanced"||o==="mediaSource")return;const s=typeof i[o]=="object"?i[o]:{ideal:i[o]};s.exact!==void 0&&typeof s.exact=="number"&&(s.min=s.max=s.exact);const t=function(w,a){return w?w+a.charAt(0).toUpperCase()+a.slice(1):a==="deviceId"?"sourceId":a};if(s.ideal!==void 0){D.optional=D.optional||[];let w={};typeof s.ideal=="number"?(w[t("min",o)]=s.ideal,D.optional.push(w),w={},w[t("max",o)]=s.ideal,D.optional.push(w)):(w[t("",o)]=s.ideal,D.optional.push(w))}s.exact!==void 0&&typeof s.exact!="number"?(D.mandatory=D.mandatory||{},D.mandatory[t("",o)]=s.exact):["min","max"].forEach(w=>{s[w]!==void 0&&(D.mandatory=D.mandatory||{},D.mandatory[t(w,o)]=s[w])})}),i.advanced&&(D.optional=(D.optional||[]).concat(i.advanced)),D},Q=function(i,D){if(A.version>=61)return D(i);if(i=JSON.parse(JSON.stringify(i)),i&&typeof i.audio=="object"){const o=function(s,t,w){t in s&&!(w in s)&&(s[w]=s[t],delete s[t])};i=JSON.parse(JSON.stringify(i)),o(i.audio,"autoGainControl","googAutoGainControl"),o(i.audio,"noiseSuppression","googNoiseSuppression"),i.audio=g(i.audio)}if(i&&typeof i.video=="object"){let o=i.video.facingMode;o=o&&(typeof o=="object"?o:{ideal:o});const s=A.version<66;if(o&&(o.exact==="user"||o.exact==="environment"||o.ideal==="user"||o.ideal==="environment")&&!(I.mediaDevices.getSupportedConstraints&&I.mediaDevices.getSupportedConstraints().facingMode&&!s)){delete i.video.facingMode;let t;if(o.exact==="environment"||o.ideal==="environment"?t=["back","rear"]:(o.exact==="user"||o.ideal==="user")&&(t=["front"]),t)return I.mediaDevices.enumerateDevices().then(w=>{w=w.filter(y=>y.kind==="videoinput");let a=w.find(y=>t.some(R=>y.label.toLowerCase().includes(R)));return!a&&w.length&&t.includes("back")&&(a=w[w.length-1]),a&&(i.video.deviceId=o.exact?{exact:a.deviceId}:{ideal:a.deviceId}),i.video=g(i.video),Qs("chrome: "+JSON.stringify(i)),D(i)})}i.video=g(i.video)}return Qs("chrome: "+JSON.stringify(i)),D(i)},C=function(i){return A.version>=64?i:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[i.name]||i.name,message:i.message,constraint:i.constraint||i.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},E=function(i,D,o){Q(i,s=>{I.webkitGetUserMedia(s,D,t=>{o&&o(C(t))})})};if(I.getUserMedia=E.bind(I),I.mediaDevices.getUserMedia){const i=I.mediaDevices.getUserMedia.bind(I.mediaDevices);Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(D){return Q(D,o=>i(o).then(s=>{if(o.audio&&!s.getAudioTracks().length||o.video&&!s.getVideoTracks().length)throw s.getTracks().forEach(t=>{t.stop()}),new DOMException("","NotFoundError");return s},s=>Promise.reject(C(s))))})}}function oc(B,A){if(!(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices)&&B.navigator.mediaDevices){if(typeof A!="function"){console.error("shimGetDisplayMedia: getSourceId argument is not a function");return}B.navigator.mediaDevices.getDisplayMedia=function(g){return A(g).then(Q=>{const C=g.video&&g.video.width,E=g.video&&g.video.height,i=g.video&&g.video.frameRate;return g.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:Q,maxFrameRate:i||3}},C&&(g.video.mandatory.maxWidth=C),E&&(g.video.mandatory.maxHeight=E),B.navigator.mediaDevices.getUserMedia(g)})}}}function pt(B){B.MediaStream=B.MediaStream||B.webkitMediaStream}function ut(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("ontrack"in B.RTCPeerConnection.prototype)){Object.defineProperty(B.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(I){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=I)},enumerable:!0,configurable:!0});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=g=>{g.stream.addEventListener("addtrack",Q=>{let C;B.RTCPeerConnection.prototype.getReceivers?C=this.getReceivers().find(i=>i.track&&i.track.id===Q.track.id):C={track:Q.track};const E=new Event("track");E.track=Q.track,E.receiver=C,E.transceiver={receiver:C},E.streams=[g.stream],this.dispatchEvent(E)}),g.stream.getTracks().forEach(Q=>{let C;B.RTCPeerConnection.prototype.getReceivers?C=this.getReceivers().find(i=>i.track&&i.track.id===Q.id):C={track:Q};const E=new Event("track");E.track=Q,E.receiver=C,E.transceiver={receiver:C},E.streams=[g.stream],this.dispatchEvent(E)})},this.addEventListener("addstream",this._ontrackpoly)),A.apply(this,arguments)}}else BB(B,"track",A=>(A.transceiver||Object.defineProperty(A,"transceiver",{value:{receiver:A.receiver}}),A))}function qt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("getSenders"in B.RTCPeerConnection.prototype)&&"createDTMFSender"in B.RTCPeerConnection.prototype){const A=function(Q,C){return{track:C,get dtmf(){return this._dtmf===void 0&&(C.kind==="audio"?this._dtmf=Q.createDTMFSender(C):this._dtmf=null),this._dtmf},_pc:Q}};if(!B.RTCPeerConnection.prototype.getSenders){B.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(i,D){let o=Q.apply(this,arguments);return o||(o=A(this,i),this._senders.push(o)),o};const C=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(i){C.apply(this,arguments);const D=this._senders.indexOf(i);D!==-1&&this._senders.splice(D,1)}}const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(C){this._senders=this._senders||[],I.apply(this,[C]),C.getTracks().forEach(E=>{this._senders.push(A(this,E))})};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(C){this._senders=this._senders||[],g.apply(this,[C]),C.getTracks().forEach(E=>{const i=this._senders.find(D=>D.track===E);i&&this._senders.splice(this._senders.indexOf(i),1)})}}else if(typeof B=="object"&&B.RTCPeerConnection&&"getSenders"in B.RTCPeerConnection.prototype&&"createDTMFSender"in B.RTCPeerConnection.prototype&&B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)){const A=B.RTCPeerConnection.prototype.getSenders;B.RTCPeerConnection.prototype.getSenders=function(){const g=A.apply(this,[]);return g.forEach(Q=>Q._pc=this),g},Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function bt(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[g,Q,C]=arguments;if(arguments.length>0&&typeof g=="function")return A.apply(this,arguments);if(A.length===0&&(arguments.length===0||typeof g!="function"))return A.apply(this,[]);const E=function(D){const o={};return D.result().forEach(t=>{const w={id:t.id,timestamp:t.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[t.type]||t.type};t.names().forEach(a=>{w[a]=t.stat(a)}),o[w.id]=w}),o},i=function(D){return new Map(Object.keys(D).map(o=>[o,D[o]]))};if(arguments.length>=2){const D=function(o){Q(i(E(o)))};return A.apply(this,[D,g])}return new Promise((D,o)=>{A.apply(this,[function(s){D(i(E(s)))},o])}).then(Q,C)}}function mt(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender&&B.RTCRtpReceiver))return;if(!("getStats"in B.RTCRtpSender.prototype)){const I=B.RTCPeerConnection.prototype.getSenders;I&&(B.RTCPeerConnection.prototype.getSenders=function(){const C=I.apply(this,[]);return C.forEach(E=>E._pc=this),C});const g=B.RTCPeerConnection.prototype.addTrack;g&&(B.RTCPeerConnection.prototype.addTrack=function(){const C=g.apply(this,arguments);return C._pc=this,C}),B.RTCRtpSender.prototype.getStats=function(){const C=this;return this._pc.getStats().then(E=>gs(E,C.track,!0))}}if(!("getStats"in B.RTCRtpReceiver.prototype)){const I=B.RTCPeerConnection.prototype.getReceivers;I&&(B.RTCPeerConnection.prototype.getReceivers=function(){const Q=I.apply(this,[]);return Q.forEach(C=>C._pc=this),Q}),BB(B,"track",g=>(g.receiver._pc=g.srcElement,g)),B.RTCRtpReceiver.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(C=>gs(C,Q.track,!1))}}if(!("getStats"in B.RTCRtpSender.prototype&&"getStats"in B.RTCRtpReceiver.prototype))return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof B.MediaStreamTrack){const g=arguments[0];let Q,C,E;return this.getSenders().forEach(i=>{i.track===g&&(Q?E=!0:Q=i)}),this.getReceivers().forEach(i=>(i.track===g&&(C?E=!0:C=i),i.track===g)),E||Q&&C?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):Q?Q.getStats():C?C.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return A.apply(this,arguments)}}function Pt(B){B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(E=>this._shimmedLocalStreams[E][0])};const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(E,i){if(!i)return A.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const D=A.apply(this,arguments);return this._shimmedLocalStreams[i.id]?this._shimmedLocalStreams[i.id].indexOf(D)===-1&&this._shimmedLocalStreams[i.id].push(D):this._shimmedLocalStreams[i.id]=[i,D],D};const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(E){this._shimmedLocalStreams=this._shimmedLocalStreams||{},E.getTracks().forEach(o=>{if(this.getSenders().find(t=>t.track===o))throw new DOMException("Track already exists.","InvalidAccessError")});const i=this.getSenders();I.apply(this,arguments);const D=this.getSenders().filter(o=>i.indexOf(o)===-1);this._shimmedLocalStreams[E.id]=[E].concat(D)};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(E){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[E.id],g.apply(this,arguments)};const Q=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(E){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},E&&Object.keys(this._shimmedLocalStreams).forEach(i=>{const D=this._shimmedLocalStreams[i].indexOf(E);D!==-1&&this._shimmedLocalStreams[i].splice(D,1),this._shimmedLocalStreams[i].length===1&&delete this._shimmedLocalStreams[i]}),Q.apply(this,arguments)}}function Tt(B,A){if(!B.RTCPeerConnection)return;if(B.RTCPeerConnection.prototype.addTrack&&A.version>=65)return Pt(B);const I=B.RTCPeerConnection.prototype.getLocalStreams;B.RTCPeerConnection.prototype.getLocalStreams=function(){const s=I.apply(this);return this._reverseStreams=this._reverseStreams||{},s.map(t=>this._reverseStreams[t.id])};const g=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(s){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},s.getTracks().forEach(t=>{if(this.getSenders().find(a=>a.track===t))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[s.id]){const t=new B.MediaStream(s.getTracks());this._streams[s.id]=t,this._reverseStreams[t.id]=s,s=t}g.apply(this,[s])};const Q=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(s){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[s.id]||s]),delete this._reverseStreams[this._streams[s.id]?this._streams[s.id].id:s.id],delete this._streams[s.id]},B.RTCPeerConnection.prototype.addTrack=function(s,t){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const w=[].slice.call(arguments,1);if(w.length!==1||!w[0].getTracks().find(R=>R===s))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(R=>R.track===s))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const y=this._streams[t.id];if(y)y.addTrack(s),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const R=new B.MediaStream([s]);this._streams[t.id]=R,this._reverseStreams[R.id]=t,this.addStream(R)}return this.getSenders().find(R=>R.track===s)};function C(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],y=o._streams[a.id];t=t.replace(new RegExp(y.id,"g"),a.id)}),new RTCSessionDescription({type:s.type,sdp:t})}function E(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],y=o._streams[a.id];t=t.replace(new RegExp(a.id,"g"),y.id)}),new RTCSessionDescription({type:s.type,sdp:t})}["createOffer","createAnswer"].forEach(function(o){const s=B.RTCPeerConnection.prototype[o],t={[o](){const w=arguments;return arguments.length&&typeof arguments[0]=="function"?s.apply(this,[y=>{const R=C(this,y);w[0].apply(null,[R])},y=>{w[1]&&w[1].apply(null,y)},arguments[2]]):s.apply(this,arguments).then(y=>C(this,y))}};B.RTCPeerConnection.prototype[o]=t[o]});const i=B.RTCPeerConnection.prototype.setLocalDescription;B.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?i.apply(this,arguments):(arguments[0]=E(this,arguments[0]),i.apply(this,arguments))};const D=Object.getOwnPropertyDescriptor(B.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(B.RTCPeerConnection.prototype,"localDescription",{get(){const o=D.get.apply(this);return o.type===""?o:C(this,o)}}),B.RTCPeerConnection.prototype.removeTrack=function(s){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!s._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(s._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let w;Object.keys(this._streams).forEach(a=>{this._streams[a].getTracks().find(R=>s.track===R)&&(w=this._streams[a])}),w&&(w.getTracks().length===1?this.removeStream(this._reverseStreams[w.id]):w.removeTrack(s.track),this.dispatchEvent(new Event("negotiationneeded")))}}function DD(B,A){!B.RTCPeerConnection&&B.webkitRTCPeerConnection&&(B.RTCPeerConnection=B.webkitRTCPeerConnection),B.RTCPeerConnection&&A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(I){const g=B.RTCPeerConnection.prototype[I],Q={[I](){return arguments[0]=new(I==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),g.apply(this,arguments)}};B.RTCPeerConnection.prototype[I]=Q[I]})}function Ot(B,A){BB(B,"negotiationneeded",I=>{const g=I.target;if(!((A.version<72||g.getConfiguration&&g.getConfiguration().sdpSemantics==="plan-b")&&g.signalingState!=="stable"))return I})}const Bs=Object.freeze(Object.defineProperty({__proto__:null,fixNegotiationNeeded:Ot,shimAddTrackRemoveTrack:Tt,shimAddTrackRemoveTrackWithNative:Pt,shimGetDisplayMedia:oc,shimGetSendersWithDtmf:qt,shimGetStats:bt,shimGetUserMedia:xt,shimMediaStream:pt,shimOnTrack:ut,shimPeerConnection:DD,shimSenderReceiverGetStats:mt},Symbol.toStringTag,{value:"Module"}));function sc(B,A){let I=!1;return B=JSON.parse(JSON.stringify(B)),B.filter(g=>{if(g&&(g.urls||g.url)){let Q=g.urls||g.url;g.url&&!g.urls&&PE("RTCIceServer.url","RTCIceServer.urls");const C=typeof Q=="string";return C&&(Q=[Q]),Q=Q.filter(E=>{if(E.indexOf("stun:")===0)return!1;const i=E.startsWith("turn")&&!E.startsWith("turn:[")&&E.includes("transport=udp");return i&&!I?(I=!0,!0):i&&!I}),delete g.url,g.urls=C?Q[0]:Q,!!Q.length}})}var Ji={exports:{}},Cs;function Xt(){return Cs||(Cs=1,(function(B){var A={};A.generateIdentifier=function(){return Math.random().toString(36).substr(2,10)},A.localCName=A.generateIdentifier(),A.splitLines=function(I){return I.trim().split(`
1039
+ }`;class p0 extends Ut{constructor(A){super(A),this.vector_=new v,this.vector2_=new v,this.vector3_=new v,this.quaternion_=new hA,this.maxParticles=1e4,this.setupBuffers(),this.rebuildMaterial()}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new F.BufferGeometry,this.indexBuffer=new F.BufferAttribute(new Uint32Array(this.maxParticles*6),1),this.indexBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setIndex(this.indexBuffer),this.positionBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*6),3),this.positionBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("position",this.positionBuffer),this.previousBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*6),3),this.previousBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("previous",this.previousBuffer),this.nextBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*6),3),this.nextBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("next",this.nextBuffer),this.widthBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*2),1),this.widthBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("width",this.widthBuffer),this.sideBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*2),1),this.sideBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("side",this.sideBuffer),this.uvBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*4),2),this.uvBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("uv",this.uvBuffer),this.colorBuffer=new F.BufferAttribute(new Float32Array(this.maxParticles*8),4),this.colorBuffer.setUsage(F.DynamicDrawUsage),this.geometry.setAttribute("color",this.colorBuffer)}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={lineWidth:{value:1},map:{value:null},useMap:{value:0},alphaMap:{value:null},useAlphaMap:{value:0},resolution:{value:new VQ(1,1)},sizeAttenuation:{value:1},visibility:{value:1},alphaTest:{value:0}},I={};if(I.USE_UV="",I.USE_COLOR_ALPHA="",this.settings.material.map&&(I.USE_MAP="",I.MAP_UV=BD(this.settings.material.map.channel),A.map=new F.Uniform(this.settings.material.map),A.mapTransform=new F.Uniform(new yg().copy(this.settings.material.map.matrix))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.renderMode===exports.RenderMode.Trail)this.material=new F.ShaderMaterial({uniforms:A,defines:I,vertexShader:x0,fragmentShader:f0,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,side:this.settings.material.side,blending:this.settings.material.blending||F.AdditiveBlending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha});else throw new Error("render mode unavailable")}update(){let A=0,I=0,g=0;const Q=this.getVisibleSystems();for(const C of Q)for(let E=0;E<C.particleNum;E++)g+=C.particles[E].previous.length*2;g>this.maxParticles&&this.expandBuffers(g);for(const C of Q){C.emitter.updateMatrixWorld&&(C.emitter.updateWorldMatrix(!0,!1),C.emitter.updateMatrixWorld(!0));const E=this.quaternion_,i=this.vector2_,D=this.vector3_;C.emitter.matrixWorld.decompose(i,E,D);const o=C.particles,s=C.particleNum,t=this.settings.uTileCount,w=this.settings.vTileCount,a=1/t,y=1/w;for(let r=0;r<s;r++){const c=o[r],h=c.uvTile%w,G=Math.floor(c.uvTile/w+.001),R=c.previous.values();let N=R.next(),k=N.value,J=k;N.done||(N=R.next());let U;N.value!==void 0?U=N.value:U=J;for(let H=0;H<c.previous.length;H++,A+=2){if(this.positionBuffer.setXYZ(A,J.position.x,J.position.y,J.position.z),this.positionBuffer.setXYZ(A+1,J.position.x,J.position.y,J.position.z),C.worldSpace?(this.positionBuffer.setXYZ(A,J.position.x,J.position.y,J.position.z),this.positionBuffer.setXYZ(A+1,J.position.x,J.position.y,J.position.z)):(c.parentMatrix?this.vector_.copy(J.position).applyMatrix4(c.parentMatrix):this.vector_.copy(J.position).applyMatrix4(C.emitter.matrixWorld),this.positionBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.positionBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.previousBuffer.setXYZ(A,k.position.x,k.position.y,k.position.z),this.previousBuffer.setXYZ(A+1,k.position.x,k.position.y,k.position.z)):(c.parentMatrix?this.vector_.copy(k.position).applyMatrix4(c.parentMatrix):this.vector_.copy(k.position).applyMatrix4(C.emitter.matrixWorld),this.previousBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.previousBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.nextBuffer.setXYZ(A,U.position.x,U.position.y,U.position.z),this.nextBuffer.setXYZ(A+1,U.position.x,U.position.y,U.position.z)):(c.parentMatrix?this.vector_.copy(U.position).applyMatrix4(c.parentMatrix):this.vector_.copy(U.position).applyMatrix4(C.emitter.matrixWorld),this.nextBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.nextBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),this.sideBuffer.setX(A,1),this.sideBuffer.setX(A+1,-1),C.worldSpace)this.widthBuffer.setX(A,J.size),this.widthBuffer.setX(A+1,J.size);else if(c.parentMatrix)this.widthBuffer.setX(A,J.size),this.widthBuffer.setX(A+1,J.size);else{const d=(Math.abs(D.x)+Math.abs(D.y)+Math.abs(D.z))/3;this.widthBuffer.setX(A,J.size*d),this.widthBuffer.setX(A+1,J.size*d)}this.uvBuffer.setXY(A,(H/c.previous.length+h)*a,(w-G-1)*y),this.uvBuffer.setXY(A+1,(H/c.previous.length+h)*a,(w-G)*y),this.colorBuffer.setXYZW(A,J.color.x,J.color.y,J.color.z,J.color.w),this.colorBuffer.setXYZW(A+1,J.color.x,J.color.y,J.color.z,J.color.w),H+1<c.previous.length&&(this.indexBuffer.setX(I*3,A),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+2),I++,this.indexBuffer.setX(I*3,A+2),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+3),I++),k=J,J=U,N.done||(N=R.next(),N.value!==void 0&&(U=N.value))}}}this.positionBuffer.clearUpdateRanges(),this.positionBuffer.addUpdateRange(0,A*3),this.positionBuffer.needsUpdate=!0,this.previousBuffer.clearUpdateRanges(),this.previousBuffer.addUpdateRange(0,A*3),this.previousBuffer.needsUpdate=!0,this.nextBuffer.clearUpdateRanges(),this.nextBuffer.addUpdateRange(0,A*3),this.nextBuffer.needsUpdate=!0,this.sideBuffer.clearUpdateRanges(),this.sideBuffer.addUpdateRange(0,A),this.sideBuffer.needsUpdate=!0,this.widthBuffer.clearUpdateRanges(),this.widthBuffer.addUpdateRange(0,A),this.widthBuffer.needsUpdate=!0,this.uvBuffer.clearUpdateRanges(),this.uvBuffer.addUpdateRange(0,A*2),this.uvBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.indexBuffer.clearUpdateRanges(),this.indexBuffer.addUpdateRange(0,I*3),this.indexBuffer.needsUpdate=!0,this.geometry.setDrawRange(0,I*3)}dispose(){this.geometry.dispose()}}class XD extends F.Object3D{constructor(){super(),this.batches=[],this.systemToBatchIndex=new Map,this.type="BatchedRenderer",this.depthTexture=null}static equals(A,I){return A.material.side===I.material.side&&A.material.blending===I.material.blending&&A.material.blendSrc===I.material.blendSrc&&A.material.blendDst===I.material.blendDst&&A.material.blendEquation===I.material.blendEquation&&A.material.premultipliedAlpha===I.material.premultipliedAlpha&&A.material.transparent===I.material.transparent&&A.material.depthTest===I.material.depthTest&&A.material.type===I.material.type&&A.material.alphaTest===I.material.alphaTest&&A.material.map===I.material.map&&A.renderMode===I.renderMode&&A.blendTiles===I.blendTiles&&A.softParticles===I.softParticles&&A.softFarFade===I.softFarFade&&A.softNearFade===I.softNearFade&&A.uTileCount===I.uTileCount&&A.vTileCount===I.vTileCount&&A.instancingGeometry===I.instancingGeometry&&A.renderOrder===I.renderOrder&&A.layers.mask===I.layers.mask}addSystem(A){A._renderer=this;const I=A.getRendererSettings();for(let Q=0;Q<this.batches.length;Q++)if(XD.equals(this.batches[Q].settings,I)){this.batches[Q].addSystem(A),this.systemToBatchIndex.set(A,Q);return}let g;switch(I.renderMode){case exports.RenderMode.Trail:g=new p0(I);break;case exports.RenderMode.Mesh:case exports.RenderMode.BillBoard:case exports.RenderMode.VerticalBillBoard:case exports.RenderMode.HorizontalBillBoard:case exports.RenderMode.StretchedBillBoard:g=new l0(I);break}this.depthTexture&&g.applyDepthTexture(this.depthTexture),g.addSystem(A),this.batches.push(g),this.systemToBatchIndex.set(A,this.batches.length-1),this.add(g)}deleteSystem(A){const I=this.systemToBatchIndex.get(A);I!=null&&(this.batches[I].removeSystem(A),this.systemToBatchIndex.delete(A))}setDepthTexture(A){this.depthTexture=A;for(const I of this.batches)I.applyDepthTexture(A)}updateSystem(A){this.deleteSystem(A),this.addSystem(A)}update(A){this.systemToBatchIndex.forEach((I,g)=>{g.update(A)});for(let I=0;I<this.batches.length;I++)this.batches[I].update()}}const u0=XD;k0();e0(n0);console.log("%c Particle system powered by three.quarks. https://quarks.art/","font-size: 14px; font-weight: bold;");const Lt=Math.sqrt(5),q0=(Lt-1)/4,BI=(5-Lt)/20,TC=B=>Math.floor(B)|0,OC=new Float64Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);function b0(B=Math.random){const A=m0(B),I=new Float64Array(A).map(E=>OC[E%32*4]),g=new Float64Array(A).map(E=>OC[E%32*4+1]),Q=new Float64Array(A).map(E=>OC[E%32*4+2]),C=new Float64Array(A).map(E=>OC[E%32*4+3]);return function(i,D,o,s){let t,w,a,y,r;const c=(i+D+o+s)*q0,h=TC(i+c),G=TC(D+c),R=TC(o+c),N=TC(s+c),k=(h+G+R+N)*BI,J=h-k,U=G-k,H=R-k,d=N-k,Y=i-J,f=D-U,l=o-H,p=s-d;let q=0,m=0,T=0,Z=0;Y>f?q++:m++,Y>l?q++:T++,Y>p?q++:Z++,f>l?m++:T++,f>p?m++:Z++,l>p?T++:Z++;const O=q>=3?1:0,j=m>=3?1:0,gA=T>=3?1:0,QA=Z>=3?1:0,CA=q>=2?1:0,EA=m>=2?1:0,BA=T>=2?1:0,W=Z>=2?1:0,$=q>=1?1:0,z=m>=1?1:0,MA=T>=1?1:0,kA=Z>=1?1:0,NA=Y-O+BI,JA=f-j+BI,iA=l-gA+BI,oA=p-QA+BI,rA=Y-CA+2*BI,qI=f-EA+2*BI,ZA=l-BA+2*BI,UA=p-W+2*BI,MI=Y-$+3*BI,WI=f-z+3*BI,jI=l-MA+3*BI,NI=p-kA+3*BI,zI=Y-1+4*BI,bI=f-1+4*BI,mI=l-1+4*BI,_I=p-1+4*BI,WA=h&255,cI=G&255,fI=R&255,hI=N&255;let wA=.6-Y*Y-f*f-l*l-p*p;if(wA<0)t=0;else{const RA=WA+A[cI+A[fI+A[hI]]];wA*=wA,t=wA*wA*(I[RA]*Y+g[RA]*f+Q[RA]*l+C[RA]*p)}let $I=.6-NA*NA-JA*JA-iA*iA-oA*oA;if($I<0)w=0;else{const RA=WA+O+A[cI+j+A[fI+gA+A[hI+QA]]];$I*=$I,w=$I*$I*(I[RA]*NA+g[RA]*JA+Q[RA]*iA+C[RA]*oA)}let Sg=.6-rA*rA-qI*qI-ZA*ZA-UA*UA;if(Sg<0)a=0;else{const RA=WA+CA+A[cI+EA+A[fI+BA+A[hI+W]]];Sg*=Sg,a=Sg*Sg*(I[RA]*rA+g[RA]*qI+Q[RA]*ZA+C[RA]*UA)}let Ag=.6-MI*MI-WI*WI-jI*jI-NI*NI;if(Ag<0)y=0;else{const RA=WA+$+A[cI+z+A[fI+MA+A[hI+kA]]];Ag*=Ag,y=Ag*Ag*(I[RA]*MI+g[RA]*WI+Q[RA]*jI+C[RA]*NI)}let Rg=.6-zI*zI-bI*bI-mI*mI-_I*_I;if(Rg<0)r=0;else{const RA=WA+1+A[cI+1+A[fI+1+A[hI+1]]];Rg*=Rg,r=Rg*Rg*(I[RA]*zI+g[RA]*bI+Q[RA]*mI+C[RA]*_I)}return 27*(t+w+a+y+r)}}function m0(B){const I=new Uint8Array(512);for(let g=0;g<512/2;g++)I[g]=g;for(let g=0;g<512/2-1;g++){const Q=g+~~(B()*(256-g)),C=I[g];I[g]=I[Q],I[Q]=C}for(let g=256;g<512;g++)I[g]=I[g-256];return I}const vD="needle:project",_o="remote://";function SB(B,A,I){if(!B.startsWith(_o))return B;const g=B.substring(_o.length),Q=g.indexOf("/");if(Q<=0)return null;const C=g.substring(0,Q),E=g.substring(Q),i=I?.[C]??A?.[C];return i===void 0?null:(i.endsWith("/")?i.substring(0,i.length-1):i)+E}function Ht(B){return!!B&&typeof B=="object"&&typeof B[vD]=="string"}function P0(B,A=console.warn){for(const I of B)A(`[needle:project] ${I.arc}: ${I.message}`)}function Yt(B){return!!B&&typeof B=="object"&&"$extension"in B}function Kt(B){if(!B||typeof B!="object")return!1;const A=B;if(typeof A.ref!="string"||Object.keys(A).some(g=>g!=="ref"&&g!=="address"))return!1;const I=A.address;return I===void 0||!!I&&typeof I=="object"&&!Array.isArray(I)&&Object.entries(I).every(([g,Q])=>["id","anchor","type","name","path"].includes(g)&&typeof Q=="string")}function dt(B,A,I={}){if(/^\d+$/.test(A))return B[Number(A)];const g=/^([A-Za-z_][A-Za-z0-9_-]*):([\s\S]*)$/.exec(A);if(!g){I.report?.(`"${A}" is neither an index nor a <field>:<value> qualifier`);return}const[,Q,C]=g,E=B.filter(D=>D!==null&&typeof D=="object");let i=E.filter(D=>Q==="type"?I.matchesComponentType?.(D,C)??D.constructor?.name===C:Q==="guid"?I.matchesComponentGuid?.(D,C)??(D.guid===C||D.needle_editor_guid===C):D[Q]===C);if(!i.length&&Q==="guid"&&I.referenceId&&I.deriveComponentGuid){const D=I.deriveComponentGuid(I.referenceId,C);i=E.filter(o=>o.guid===D)}if(i.length>1){I.report?.(`"${A}" matched ${i.length} elements ? the document must name one unambiguously`);return}return i[0]}function CD(B,A,I){if(!B||typeof B!="object")return B;if(Array.isArray(B)){let Q=null;for(let C=0;C<B.length;C++){const E=CD(B[C],A,I);E!==B[C]&&(Q||(Q=[...B]),Q[C]=E)}return Q??B}if(typeof B.ref=="string"){const Q=A(B);if(Q===null){I("def",`node reference did not resolve: ${JSON.stringify(B)}`);return}if(Q!==void 0)return Q}let g=null;for(const[Q,C]of Object.entries(B)){const E=CD(C,A,I);E!==C&&(g||(g={...B}),g[Q]=E)}return g??B}class T0{constructor(A){this.scene=A,this.scopes=new Map,this.targets=new WeakMap,this.ready=Promise.resolve()}registerReference(A,I,g=[],Q){const C=new Map,E={root:new WeakRef(I),nodes:C,elements:[]},i=(D,o)=>{const s=new WeakRef(D),t={get name(){return s.deref()?.name},get userData(){return s.deref()?.userData},children:D.children?.filter(r=>!Q?.has(r)).map(r=>i(r,[...o,r.name??""]))};C.set(t,s);const w=D.userData?.["needle-id"],a=bD(D.name),y=D===I?void 0:{type:"node",path:ht(o),...typeof w=="string"?{id:w}:{},...a?{anchor:a}:{}};return(D===I||y)&&this.targets.set(D,{ref:A,...y?{address:y}:{}}),t};I.isObject3D?E.graph=i(I,[]):this.targets.set(I,{ref:A});for(const D of g){const o=D,s=o.isMaterial?"material":o.isTexture?"texture":o.isAnimationClip?"animation":null;if(!s)continue;E.elements.push(new WeakRef(D));const t=o.userData?.["needle-id"];typeof t=="string"&&this.targets.set(D,{ref:A,address:{type:s,id:t,name:o.name}})}this.scopes.set(A,E)}resolve(A){const I=this.scopes.get(A.ref);let g=A.ref==="$scene"?this.scene:I?.root.deref()??null;if(A.address){const Q=A.address;if(Q.type&&Q.type!=="node"){const C=I?.elements.flatMap(E=>{const i=E.deref(),D=Q.type==="material"?i?.isMaterial:Q.type==="texture"?i?.isTexture:Q.type==="animation"?i?.isAnimationClip:!1;return i&&D?[i]:[]})??[];g=qE(Q,C)}else if(I?.graph){const C=cQ(Q,I.graph);g=C?I.nodes.get(C)?.deref()??null:null,g&&!this.inScene(g)&&(g=null)}else g=A.ref==="$scene"?cQ(Q,this.scene):null}if(!g||g.isObject3D&&!this.inScene(g))return null;if(A.pathPrefix){const Q=Ge(A.pathPrefix.replace(/\/$/,""));for(const C of Q){if(C==="components")g=g.userData?.components??null;else if(Array.isArray(g)&&C.startsWith("guid:")){const E=C.slice(5);g=dt(g,`guid:${E}`)??null}else return null;if(!g)return null}}return g}targetFor(A){if(A===this.scene)return{ref:"$scene"};const I=A,g=I.needle_editor_guid||I.guid;if(I.gameObject&&g){const C=this.targetFor(I.gameObject);return C?{...C,pathPrefix:`components/guid:${g}/`}:null}const Q=this.targets.get(A);return Q&&this.resolve(Q)===A?structuredClone(Q):null}inScene(A){for(let I=A;I;I=I.parent)if(I===this.scene)return!0;return!1}}const lt=new WeakMap;let ED=0;function O0(){ED++;let B=!1;return{dispose(){B||(B=!0,ED--)}}}function X0(B){return ED?new T0(B):void 0}function v0(B){return lt.get(B)}function V0(B,A){lt.set(B,A)}function Z0(B,A){const I=A(B.target);return B.create?typeof B.create.id=="string"?A({ref:B.target.ref,address:{type:"node",id:B.create.id}})??I?.children.find(Q=>Q.userData?.["needle-id"]===B.create.id)??null:I?ft(I,B.create)??null:null:I}function ft(B,A){return(typeof A.id=="string"?B.children?.find(I=>I.userData?.["needle-id"]===A.id):void 0)??(typeof A.name=="string"?B.children?.find(I=>I.name===A.name):void 0)}function W0(B,A,I,g){const Q=w=>I?.resolveAssetUrl?{resolveUrl:a=>I.resolveAssetUrl(w,a)}:void 0,C=new Map,E=()=>{if(!I?.onProgress)return;let w=0,a=0;for(const y of C.values())w+=y.loaded,a+=y.total;I.onProgress(w,a)},i=new Map,D=w=>{let a=i.get(w);if(!a){const y=A.assets?.[w]?.src;if(typeof y!="string")a=Promise.resolve(null);else if(I?.resolveAsset)a=I.resolveAsset(w,y).catch(r=>(g("reference",`asset "${w}" failed to resolve: ${r}`),null));else if(SB(y,A.remotes,I?.remotes)===null)g("reference",`asset "${w}" src "${y}" names a remote that is not in the document's remotes table — the asset is skipped`),a=Promise.resolve(null);else{const r=SB(y,A.remotes,I?.remotes),c=I?.baseUrl?new URL(r,I.baseUrl).href:r;a=fetch(c).then(h=>{if(!h.ok)throw new Error(`${h.status} ${h.statusText}`);const G=h.headers.get("Content-Type")??"";if(G.includes("text/html"))throw new Error(`the server answered with an HTML page (Content-Type: ${G}) — the file probably does not exist there. Documents record srcs AS SAVED: a dev-server url (e.g. localhost) does not exist on a deployment.`);if(!h.body||!I?.onProgress)return h.arrayBuffer();const R={loaded:0,total:Number(h.headers.get("Content-Length"))||0};return C.set(w,R),E(),Cn(h.body,N=>{R.loaded=N,R.total<N&&(R.total=N),E()})}).catch(h=>(g("reference",`asset "${w}" failed to load from ${c}: ${h}`),null))}i.set(w,a)}return a},o=new Map,s=(w,a="over")=>{let y=o.get(w);return y||(y=(async()=>{if(!A.assets?.[w])return g(a,`asset "${w}" has no entry in the document's assets map`),null;const r=await D(w);if(r===null)return null;const c=A.assets[w].src??w,h=SB(c,A.remotes,I?.remotes)??c,G=await B.parse(r,h,Q(w))??null;return G||g(a,`asset "${w}" data loaded but PARSING failed (see console for the parser error)`),G&&(G.parser?.json&&Gt(G.parser.json,G.parser.associations,G.scenes),G.scene&&B.parkTemplate(G.scene)),G})(),o.set(w,y)),y},t=new Map;for(const w of A.references??[]){if(!w||typeof w.id!="string"||typeof w.asset!="string"||!w.address)continue;if(t.has(w.id)){g("reference",`duplicate reference id "${w.id}" — entry skipped`);continue}const a=w.address;t.set(w.id,(async()=>{if(a.type==="material"){const y=await s(w.asset);if(!y)return null;const r=await qt(y,a);return r||g("reference",`entity "${w.id}": material did not resolve in asset "${w.asset}" (${JSON.stringify(a)})`),r}if(a.type==="hdr"){const y=A.assets?.[w.asset]?.src;if(typeof y!="string")return g("reference",`entity "${w.id}": unknown asset "${w.asset}"`),null;let r,c;if(I?.resolveAsset){const k=await I.resolveAsset(w.asset,y).catch(J=>(g("reference",`entity "${w.id}": asset "${w.asset}" failed to resolve: ${J}`),null));if(k===null)return null;if(typeof k=="string")r=k;else{const J=URL.createObjectURL(new Blob([k]));r=J,c=()=>URL.revokeObjectURL(J)}}else{const k=SB(y,A.remotes,I?.remotes);if(k===null)return g("reference",`entity "${w.id}": src "${y}" names a remote that is not in the document's remotes table — the entity is skipped`),null;r=I?.baseUrl?new URL(k,I.baseUrl).href:k}const h=y.split(/[?#]/)[0],G=h.substring(h.lastIndexOf("/")+1)||void 0,R=/pmrem/i.test(y)?"pmrem":void 0,N=await B.loadEnvironment(r,{format:R,name:G}).finally(()=>c?.());return N||g("reference",`entity "${w.id}": environment texture failed to load from ${y}`),N}return g("reference",`entity "${w.id}": element type "${a.type??"?"}" is not instantiable yet`),null})())}return{loadParsedAsset:s,entities:t}}async function j0(B,A,I){if(I?.componentRecovery)return z0(B,A,I);if(!Ht(A))throw new TypeError(`evaluateProjectDocument: not a project document (missing "${vD}")`);const g=I?.parent??B.scene,Q=X0(B.scene),C=new Map(I?.referenceBindings),E=new Map,i=[],D=(y,r)=>{i.push({arc:y,message:r})},{loadParsedAsset:o,entities:s}=W0(B,A,I,D),t=[],w=new Set;for(const y of A.references??[]){if(!y||typeof y.id!="string"||typeof y.asset!="string"){D("reference",`invalid reference entry: ${JSON.stringify(y)}`);continue}if(y.address)continue;if(w.has(y.id)){D("reference",`duplicate reference id "${y.id}" — entry skipped`);continue}if(I?.referenceBindings){const c=I.referenceBindings.get(y.id);if(!c){D("reference",`reference "${y.id}": no existing model binding supplied`);continue}if(!A.assets?.[y.asset]){D("reference",`reference "${y.id}": unknown asset "${y.asset}"`);continue}w.add(y.id),C.set(y.id,c),E.set(y.id,{scene:c});continue}const r=await o(y.asset,"reference");if(r){if(!r.scene){D("reference",`reference "${y.id}": asset "${y.asset}" did not produce a scene`);continue}w.add(y.id),t.push({ref:y,model:r})}}const a=new Promise(y=>{B.schedule(()=>{const r=[];for(const{ref:k,model:J}of t){const U=J.scene,H=B.clone(U,k.id);if(!H){D("reference",`reference "${k.id}": instantiating asset "${k.asset}" failed`);continue}C.set(k.id,H),E.set(k.id,{...J,scene:H});const d=J.parser?.associations;if(d){const Y=(f,l)=>{const p=d.get(f);p!==void 0&&d.set(l,p);const q=Math.min(f.children.length,l.children.length);for(let m=0;m<q;m++)Y(f.children[m],l.children[m])};Y(U,H)}r.push(H)}for(const k of r)g.add(k),B.activateInstance(k);for(const k of A.references??[]){const J=k?.id?C.get(k.id):void 0;if(J&&k.parent){const U=C.get(k.parent.ref);if(!U)D("reference",`reference "${k.id}": parent ref "${k.parent.ref}" not placed — staying at the composition root`);else{const H=k.parent.address?cQ(k.parent.address,U):U;H?H.add(J):D("reference",`reference "${k.id}": parent address did not resolve in "${k.parent.ref}" — staying at the composition root`)}}}const c=new Set;for(const{model:k}of t)k.scene&&!c.has(k.scene)&&(c.add(k.scene),B.disposeTemplate(k.scene));const h=ut(B,g,I?.baseUrl),G=I?.extensions?{...h,extensions:I.extensions(h)}:h;In(A,g,C,D,G);const R=new Map;for(const k of A.overs??[])for(const J of[k?.target,k?.value])if(J?.address&&(J.ref==="$scene"||J.ref!==void 0&&I?.referenceBindings?.has(J.ref))){const U=k?.target?.path==="parent"?g:B.scene;R.set(J,jQ(J,g,C,U))}const N=gn(B,A,g,C,s,D,R,G.extensions);if(Q){const k=new Set(C.values());for(const[J,U]of C){const H=E.get(J);Q.registerReference(J,U,[...H?.parser?.associations?.keys()??[],...H?.animations??[]],k)}}_0(A,g,C,D,R),N.finally(()=>y())})});return Q&&(Q.ready=a.then(async()=>{for(const[y,r]of s){const c=await r;c&&Q.registerReference(y,c)}}),V0(B.inspectionOwner??B,Q)),{root:g,references:C,models:E,issues:i,completed:a}}function z0(B,A,I){const{signal:g,resolveTarget:Q}=I.componentRecovery,C=[],E=new Map,i=new Promise((D,o)=>{const s=()=>o(g.reason);if(g.aborted){s();return}g.addEventListener("abort",s,{once:!0}),B.schedule(()=>{if(g.removeEventListener("abort",s),!g.aborted)try{const t=Q({ref:"$scene"});if(!t)throw new Error("Component recovery scene is unavailable.");const w=ut(B,t,I.baseUrl),a={...w,extensions:I.extensions?.(w)??w.extensions},y=(h,G)=>{C.push({arc:h,message:G})};for(const h of A.defs??[])g.throwIfAborted(),VD(h,t,E,y,a,A.extensions,{componentsOnly:!0,resolveTarget:Q});const r=ZD(new Map);r.extensions=a.extensions,r.resolveValueReference=Q;const c=new Map;r.sceneTargets=c;for(const h of A.overs??[]){g.throwIfAborted();const G=Yt(h.value),R=/(?:^|\/)(?:parent|active)$/.test(h.target.path??"");if(!h.target.path?.startsWith("components/")&&(!G||R)){y("over","Component recovery cannot apply structural or scene overrides.");continue}if(c.set(h.target,Q(h.target)),Kt(h.value)){c.set(h.value,Q(h.value));const N=Q({ref:h.value.ref});N&&E.set(h.value.ref,N)}WD(B,h,t,E,r,y)}D()}catch(t){o(t)}})});return{root:B.scene,references:E,models:new Map,issues:C,completed:i}}function _0(B,A,I,g,Q){const C=(B.overs??[]).filter(i=>i?.target?.path==="parent"),E=i=>{const D=i.value?.index;return typeof D=="number"?D:Number.MAX_SAFE_INTEGER};C.sort((i,D)=>E(i)-E(D));for(const i of C){const D=Q.has(i.target)?Q.get(i.target):jQ(i.target,A,I);if(!D){g("over",`parent over target did not resolve: ${JSON.stringify(i.target)}`);continue}const o=i.value;if(!o||typeof o!="object"){g("over",`parent over value must be a node reference: ${JSON.stringify(i.value)}`);continue}let s=null;if(o.ref===void 0||o.ref==="$scene")s=Q.has(o)?Q.get(o)??null:o.address?cQ(o.address,A):A;else{const t=I.get(o.ref);t&&(s=o.address?cQ(o.address,t):t)}if(!s){g("over",`parent over did not resolve its new parent — staying in place: ${JSON.stringify(i.value)}`);continue}if(s===D||$0(D,s)){g("over",`parent over would create a cycle — ignored: ${JSON.stringify(i.target)}`);continue}s.add(D)}}function $0(B,A){for(let I=A.parent;I;I=I.parent)if(I===B)return!0;return!1}function jQ(B,A,I,g){const Q=B?.ref==="$scene"?g??A:B?.ref!==void 0?I.get(B.ref):A;return Q?B?.address?cQ(B.address,Q):Q:null}function PE(B){return B.split("/").filter(A=>A.length>0).map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function xt(B,A,I,g,Q){return A?.isObject3D===!0&&I==="components"?B.getComponents?.(A)??[]:Array.isArray(A)?dt(A,I,{matchesComponentType:B.matchesComponentType?.bind(B),matchesComponentGuid:B.matchesComponentGuid?.bind(B),deriveComponentGuid:B.deriveComponentGuid?.bind(B),referenceId:g,report:Q}):A?.[I]}function pt(B,A,I,g,Q){const C=[A];let E=A;for(let i=0;i<I.length-1;i++){const D=xt(B,E,I[i],g,o=>Q(`at "${I[i]}": ${o}`));if(!D||typeof D!="object")return Q(`does not resolve at "${I[i]}"`),null;E=D,C.push(D)}return{container:E,chain:C}}function iD(B){const A=[];return B.traverse(I=>{const g=I.material;for(const Q of Array.isArray(g)?g:g?[g]:[])Q&&typeof Q=="object"&&!A.includes(Q)&&A.push(Q)}),A}function An(B,A,I){const g=iD(B);for(const C of I??[])for(const E of iD(C))g.includes(E)||g.push(E);const Q=qE(A,g);return Q?{material:Q}:null}function In(B,A,I,g,Q){const C=B.defs??[];if(C.length)for(const E of C)VD(E,A,I,g,Q,B.extensions)}function ut(B,A,I){return B.createDefContext?.(A,I)??{scene:B.scene,createNode:()=>B.createNode()}}function VD(B,A,I,g,Q,C,E){{const i=E?.resolveTarget??(t=>jQ(t,A,I,Q.scene));let D=E?.componentsOnly?Z0(B,i):i(B?.target);if(!D){g("def",`def target did not resolve: ${JSON.stringify(E?.componentsOnly&&B.create?B.create:B?.target)}`);return}if(B.create&&!E?.componentsOnly){if(B.create.copy){g("def","copy definitions require a host duplication command");return}const t=ft(D,B.create),w=t??Q.createNode();t||(typeof B.create.name=="string"&&(w.name=B.create.name),D.add(w)),typeof B.create.id=="string"&&(w.userData["needle-id"]=B.create.id),Array.isArray(B.create.position)&&B.create.position.length>=3&&w.position.fromArray(B.create.position),Array.isArray(B.create.quaternion)&&B.create.quaternion.length>=4&&w.quaternion.fromArray(B.create.quaternion),Array.isArray(B.create.scale)&&B.create.scale.length>=3&&w.scale.fromArray(B.create.scale),D=w}let o,s;if("provider"in B){g("def","The experimental def.provider field is retired; convert it to an extension declaration before loading components.");return}if(B.extension!==void 0){if(s=C?.[B.extension],!s||!Number.isInteger(s.version)||s.version<1){g("def",`document extension "${B.extension}" has no valid declaration`);return}if(o=Q.extensions?.get(B.extension),!o?.components){g("def",`document extension "${B.extension}" is unavailable for components`);return}if(o.version!==s.version&&!o.migrations?.[s.version]){g("def",`document extension "${B.extension}" cannot read data version ${s.version}`);return}}for(const t of B.components??[]){if(!t||typeof t.name!="string"){g("def",`invalid component entry: ${JSON.stringify(t)}`);continue}let w=t;if(o&&s)try{const r=structuredClone(t),c=o.version===s.version?r:o.migrations[s.version](r);if(!c||typeof c!="object"||Array.isArray(c))throw new Error("migration must return component data");w={...c,name:t.name,...t.guid!==void 0?{guid:t.guid}:{}}}catch(r){g("def",`document extension "${B.extension}" migration failed: ${String(r)}`);continue}let a=!1;const y=CD(w,r=>(o?Kt(r):r.ref==="$scene"||I.has(r.ref))?i(r):void 0,(r,c)=>{a=!0,g(r,c)});o?a||o.components.apply(D,y,g):Q.applyComponent?Q.applyComponent(D,y,g):g("def",`unsupported component type "${t.name}"`)}}}async function gn(B,A,I,g,Q,C,E,i){const D=ZD(Q);D.sceneTargets=E,D.extensions=i;for(const o of A.overs??[])WD(B,o,I,g,D,C);await D.settled()}function ZD(B){const A=[],I=new Map;return{entities:B,deactivatedRoots:new Map,chainOnEntity(Q,C){const E=B.get(Q),i=I.get(Q)??Promise.resolve(),D=Promise.all([E,i]).then(([o])=>C(o));I.set(Q,D),A.push(D)},settled:()=>Promise.all(A).then(()=>{})}}function WD(B,A,I,g,Q,C){if(Yt(A.value)){const E=A.value,i=Q.extensions?.get(E.$extension),D=i?.valueCodecs?.[E.type];if(!D||i.version!==E.version){C("over",`Extension value ${E.$extension}/${E.type} version ${E.version} is unavailable; value preserved.`);return}try{const o=D.decode(E.data,{resolveReference(s){const t=Q.resolveValueReference?Q.resolveValueReference(s):jQ(s,I,g,B.scene);if(!t||!s.pathPrefix)return t;const w=PE(s.pathPrefix.replace(/\/$/,""));let a=t;for(const y of w)a=xt(B,a,y,s.ref,r=>{throw new Error(r)});return a&&typeof a=="object"?a:null}});$o(B,{...A,value:o},I,g,Q,C,!0)}catch(o){C("over",`Extension value ${E.$extension}/${E.type} failed: ${o instanceof Error?o.message:String(o)}`)}return}$o(B,A,I,g,Q,C)}function $o(B,A,I,g,Q,C,E=!1){const{entities:i,deactivatedRoots:D,chainOnEntity:o}=Q;{const s=A?.target;if(!s||typeof s.path!="string"||s.path.length===0){C("over",`over without a target path: ${JSON.stringify(A)}`);return}if(s.path==="parent")return;if(s.ref!==void 0&&i.has(s.ref)){const y=s.ref,r=s.path,c=A.value,h=s;o(y,G=>{G&&sB(B,G,r,c,C,h)});return}let t=null,w=null;if(s.ref==="$scene")t=Q.sceneTargets?.has(s)?Q.sceneTargets.get(s)??null:s.address?cQ(s.address,B.scene):B.scene;else if(s.ref==="$renderer"){if(s.address){C("over",`"$renderer" targets take no address: ${JSON.stringify(s)}`);return}t=B.renderer}else if(s.address?.type==="material"){const y=s.ref!==void 0?g.get(s.ref):I;t=y?An(y,s.address,D.get(s.ref))?.material??null:null}else w=Q.sceneTargets?.has(s)?Q.sceneTargets.get(s)??null:jQ(s,I,g),t=w;if(!t){C("over",`over target did not resolve: ${JSON.stringify(s)}`);return}const a=PE(s.path);if(a[a.length-1]==="active"){if(A.value!==!1)return;const y=a.length===1?t:pt(B,t,a,s.ref,r=>C("over",`path "${s.path}" ${r}: ${JSON.stringify(s)}`))?.container;if(y){if(y.isObject3D){const r=D.get(s.ref)??[];r.push(y),D.set(s.ref,r)}En(B,y,w,C)}return}if(E){sB(B,t,s.path,A.value,C,s);return}if(As(A.value)&&(A.value.ref==="$scene"||g.has(A.value.ref))){const y=Q.sceneTargets?.has(A.value)?Q.sceneTargets.get(A.value):jQ(A.value,I,g,B.scene);if(!y){C("over",`node-reference value did not resolve: ${JSON.stringify(A.value)} for ${JSON.stringify(s)}`);return}sB(B,t,s.path,y,C,s);return}if(As(A.value)){const y=A.value.ref;if(!i.get(y)){C("over",`value references unknown entity "${y}": ${JSON.stringify(s)}`);return}const c=t,h=s.path,G=s;o(y,R=>{if(!R){C("over",`entity "${y}" was not instantiated — assignment skipped: ${JSON.stringify(G)}`);return}sB(B,c,h,R,C,G)});return}if(Qn(A.value)){C("over",`reference-valued over not supported (skipped, not raw-assigned): ${JSON.stringify(s)}`);return}sB(B,t,s.path,A.value,C,s)}}function As(B){return!!B&&typeof B=="object"&&typeof B.ref=="string"}function Qn(B){if(!B||typeof B!="object")return!1;const A=B;return typeof A.asset=="string"||A.node!==void 0||typeof A.guid=="string"}function Bn(B,A){const I=B.scene;if(!I)return null;const g=iD(I);return qE(A,g)??(g.length===1?g[0]:null)}async function qt(B,A){const I=Bn(B,A);if(I)return I;const g=B.parser,Q=g?.json?.materials?.length??0;if(!Q||!g?.getDependency)return null;const C=[];for(let E=0;E<Q;E++){const i=await g.getDependency("material",E).catch(()=>null);i&&typeof i=="object"&&C.push(i)}return qE(A,C)??(C.length===1?C[0]:null)}async function Cn(B,A){const I=B.getReader(),g=[];let Q=0;for(;;){const{done:i,value:D}=await I.read();if(i)break;D&&(g.push(D),Q+=D.byteLength,A(Q))}const C=new Uint8Array(Q);let E=0;for(const i of g)C.set(i,E),E+=i.byteLength;return C.buffer}function En(B,A,I,g){A.isObject3D?A.removeFromParent():B.removeComponent?B.removeComponent(A,I):g("over","component deactivation is not supported by this host")}function sB(B,A,I,g,Q,C){const E=PE(I),i=pt(B,A,E,C.ref,a=>Q("over",`path "${I}" ${a}: ${JSON.stringify(C)}`));if(!i)return;const{container:D,chain:o}=i,s=D,t=E[E.length-1],w=s[t];Array.isArray(g)&&w&&typeof w=="object"&&typeof w.fromArray=="function"?w.fromArray(g):Array.isArray(g)&&g.length===3&&t==="background"&&s.isScene===!0?s[t]=B.createColor(g):s[t]=g;for(const a of o){const y=a;(y.isMaterial===!0||y.isTexture===!0)&&(y.needsUpdate=!0)}}class Dn{constructor(A,I){if(this._retries=0,!Number.isInteger(A)||A<0)throw new Error("Base must be a positive integer or zero");if(I!==void 0&&(!Number.isInteger(I)||I<0))throw new Error("ExpMax must be a undefined, a positive integer or zero");this.base=A,this.expMax=I,this.i=0}get retries(){return this._retries}get current(){return this.base*Math.pow(2,this.i)}next(){return this._retries++,this.i=this.expMax===void 0?this.i+1:Math.min(this.i+1,this.expMax),this.current}reset(){this._retries=0,this.i=0}}var SA;(function(B){B.open="open",B.close="close",B.error="error",B.message="message",B.retry="retry",B.reconnect="reconnect"})(SA||(SA={}));class bt{constructor(A,I,g){var Q,C,E,i,D,o,s,t,w,a,y,r,c,h,G;this._closedByUser=!1,this.handleOpenEvent=R=>this.handleEvent(SA.open,R),this.handleErrorEvent=R=>this.handleEvent(SA.error,R),this.handleCloseEvent=R=>this.handleEvent(SA.close,R),this.handleMessageEvent=R=>this.handleEvent(SA.message,R),this._url=A,this._protocols=I,this._options={buffer:g?.buffer,retry:{maxRetries:(Q=g?.retry)===null||Q===void 0?void 0:Q.maxRetries,instantReconnect:(C=g?.retry)===null||C===void 0?void 0:C.instantReconnect,backoff:(E=g?.retry)===null||E===void 0?void 0:E.backoff},listeners:{open:[...(D=(i=g?.listeners)===null||i===void 0?void 0:i.open)!==null&&D!==void 0?D:[]],close:[...(s=(o=g?.listeners)===null||o===void 0?void 0:o.close)!==null&&s!==void 0?s:[]],error:[...(w=(t=g?.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[]],message:[...(y=(a=g?.listeners)===null||a===void 0?void 0:a.message)!==null&&y!==void 0?y:[]],retry:[...(c=(r=g?.listeners)===null||r===void 0?void 0:r.retry)!==null&&c!==void 0?c:[]],reconnect:[...(G=(h=g?.listeners)===null||h===void 0?void 0:h.reconnect)!==null&&G!==void 0?G:[]]}},this._underlyingWebsocket=this.tryConnect()}get url(){return this._url}get protocols(){return this._protocols}get buffer(){return this._options.buffer}get maxRetries(){return this._options.retry.maxRetries}get instantReconnect(){return this._options.retry.instantReconnect}get backoff(){return this._options.retry.backoff}get closedByUser(){return this._closedByUser}get lastConnection(){return this._lastConnection}get underlyingWebsocket(){return this._underlyingWebsocket}get readyState(){return this._underlyingWebsocket.readyState}get bufferedAmount(){return this._underlyingWebsocket.bufferedAmount}get extensions(){return this._underlyingWebsocket.extensions}get binaryType(){return this._underlyingWebsocket.binaryType}set binaryType(A){this._underlyingWebsocket.binaryType=A}send(A){this.closedByUser||(this._underlyingWebsocket.readyState===this._underlyingWebsocket.OPEN?this._underlyingWebsocket.send(A):this.buffer!==void 0&&this.buffer.add(A))}close(A,I){this.cancelScheduledConnectionRetry(),this._closedByUser=!0,this._underlyingWebsocket.close(A,I)}addEventListener(A,I,g){this._options.listeners[A].push({listener:I,options:g})}removeEventListener(A,I,g){const Q=C=>C.listener!==I||C.options!==g;this._options.listeners[A]=this._options.listeners[A].filter(Q)}tryConnect(){return this._underlyingWebsocket=new WebSocket(this.url,this.protocols),this._underlyingWebsocket.addEventListener(SA.open,this.handleOpenEvent),this._underlyingWebsocket.addEventListener(SA.close,this.handleCloseEvent),this._underlyingWebsocket.addEventListener(SA.error,this.handleErrorEvent),this._underlyingWebsocket.addEventListener(SA.message,this.handleMessageEvent),this._underlyingWebsocket}clearWebsocket(){this._underlyingWebsocket.removeEventListener(SA.open,this.handleOpenEvent),this._underlyingWebsocket.removeEventListener(SA.close,this.handleCloseEvent),this._underlyingWebsocket.removeEventListener(SA.error,this.handleErrorEvent),this._underlyingWebsocket.removeEventListener(SA.message,this.handleMessageEvent),this._underlyingWebsocket.close()}dispatchEvent(A,I){const g=this._options.listeners[A],Q=[];g.forEach(({listener:C,options:E})=>{C(this,I),(E===void 0||E.once===void 0||!E.once)&&Q.push({listener:C,options:E})}),this._options.listeners[A]=Q}handleEvent(A,I){switch(A){case SA.close:this.dispatchEvent(A,I),this.scheduleConnectionRetryIfNeeded();break;case SA.open:if(this.backoff!==void 0&&this._lastConnection!==void 0){const g={retries:this.backoff.retries,lastConnection:new Date(this._lastConnection)},Q=new CustomEvent(SA.reconnect,{detail:g});this.dispatchEvent(SA.reconnect,Q),this.backoff.reset()}this._lastConnection=new Date,this.dispatchEvent(A,I),this.sendBufferedData();break;case SA.retry:this.dispatchEvent(A,I),this.clearWebsocket(),this.tryConnect();break;default:this.dispatchEvent(A,I);break}}sendBufferedData(){if(this.buffer!==void 0)for(let A=this.buffer.read();A!==void 0;A=this.buffer.read())this.send(A)}scheduleConnectionRetryIfNeeded(){if(this.closedByUser||this.backoff===void 0)return;const A=g=>{const Q=new CustomEvent(SA.retry,{detail:g});this.handleEvent(SA.retry,Q)},I={backoff:this._options.retry.instantReconnect===!0?0:this.backoff.next(),retries:this._options.retry.instantReconnect===!0?0:this.backoff.retries,lastConnection:this._lastConnection};(this._options.retry.maxRetries===void 0||I.retries<=this._options.retry.maxRetries)&&(this.retryTimeout=globalThis.setTimeout(()=>A(I),I.backoff))}cancelScheduledConnectionRetry(){globalThis.clearTimeout(this.retryTimeout)}}class on{constructor(A){this._url=A}get url(){return this._url}withProtocols(A){return this._protocols=A,this}get protocols(){return this._protocols}withMaxRetries(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{maxRetries:A})}),this}get maxRetries(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.maxRetries}withInstantReconnect(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{instantReconnect:A})}),this}get instantReconnect(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.instantReconnect}withBackoff(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{backoff:A})}),this}get backoff(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.backoff}withBuffer(A){return this._options=Object.assign(Object.assign({},this._options),{buffer:A}),this}get buffer(){var A;return(A=this._options)===null||A===void 0?void 0:A.buffer}onOpen(A,I){return this.addListener(SA.open,A,I),this}onClose(A,I){return this.addListener(SA.close,A,I),this}onError(A,I){return this.addListener(SA.error,A,I),this}onMessage(A,I){return this.addListener(SA.message,A,I),this}onRetry(A,I){return this.addListener(SA.retry,A,I),this}onReconnect(A,I){return this.addListener(SA.reconnect,A,I),this}build(){return new bt(this._url,this._protocols,this._options)}addListener(A,I,g){var Q,C,E,i,D,o,s,t,w,a,y,r,c,h,G,R,N,k,J,U,H;return this._options=Object.assign(Object.assign({},this._options),{listeners:{open:(E=(C=(Q=this._options)===null||Q===void 0?void 0:Q.listeners)===null||C===void 0?void 0:C.open)!==null&&E!==void 0?E:[],close:(o=(D=(i=this._options)===null||i===void 0?void 0:i.listeners)===null||D===void 0?void 0:D.close)!==null&&o!==void 0?o:[],error:(w=(t=(s=this._options)===null||s===void 0?void 0:s.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[],message:(r=(y=(a=this._options)===null||a===void 0?void 0:a.listeners)===null||y===void 0?void 0:y.message)!==null&&r!==void 0?r:[],retry:(G=(h=(c=this._options)===null||c===void 0?void 0:c.listeners)===null||h===void 0?void 0:h.retry)!==null&&G!==void 0?G:[],reconnect:(k=(N=(R=this._options)===null||R===void 0?void 0:R.listeners)===null||N===void 0?void 0:N.reconnect)!==null&&k!==void 0?k:[],[A]:[...(H=(U=(J=this._options)===null||J===void 0?void 0:J.listeners)===null||U===void 0?void 0:U[A])!==null&&H!==void 0?H:[],{listener:I,options:g}]}}),this}}const sn=Object.freeze(Object.defineProperty({__proto__:null,ExponentialBackoff:Dn,Websocket:bt,WebsocketBuilder:on,get WebsocketEvent(){return SA}},Symbol.toStringTag,{value:"Module"}));function jD(B){return B&&B.__esModule&&Object.prototype.hasOwnProperty.call(B,"default")?B.default:B}var Ni={exports:{}},Is;function gs(){return Is||(Is=1,(function(B){var A={};A.useBlobBuilder=(function(){try{return new Blob([]),!1}catch{return!0}})(),A.useArrayBufferView=!A.useBlobBuilder&&(function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}})(),B.exports.binaryFeatures=A;var I=B.exports.BlobBuilder;typeof window<"u"&&(I=B.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder);function g(){this._pieces=[],this._parts=[]}g.prototype.append=function(Q){typeof Q=="number"?this._pieces.push(Q):(this.flush(),this._parts.push(Q))},g.prototype.flush=function(){if(this._pieces.length>0){var Q=new Uint8Array(this._pieces);A.useArrayBufferView||(Q=Q.buffer),this._parts.push(Q),this._pieces=[]}},g.prototype.getBuffer=function(){if(this.flush(),A.useBlobBuilder){for(var Q=new I,C=0,E=this._parts.length;C<E;C++)Q.append(this._parts[C]);return Q.getBlob()}else return new Blob(this._parts)},B.exports.BufferBuilder=g})(Ni)),Ni.exports}var Ji,Qs;function tn(){if(Qs)return Ji;Qs=1;var B=gs().BufferBuilder,A=gs().binaryFeatures,I={unpack:function(i){var D=new g(i);return D.unpack()},pack:function(i){var D=new Q;D.pack(i);var o=D.getBuffer();return o}};Ji=I;function g(i){this.index=0,this.dataBuffer=i,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}g.prototype.unpack=function(){var i=this.unpack_uint8();if(i<128)return i;if((i^224)<32)return(i^224)-32;var D;if((D=i^160)<=15)return this.unpack_raw(D);if((D=i^176)<=15)return this.unpack_string(D);if((D=i^144)<=15)return this.unpack_array(D);if((D=i^128)<=15)return this.unpack_map(D);switch(i){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:return;case 213:return;case 214:return;case 215:return;case 216:return D=this.unpack_uint16(),this.unpack_string(D);case 217:return D=this.unpack_uint32(),this.unpack_string(D);case 218:return D=this.unpack_uint16(),this.unpack_raw(D);case 219:return D=this.unpack_uint32(),this.unpack_raw(D);case 220:return D=this.unpack_uint16(),this.unpack_array(D);case 221:return D=this.unpack_uint32(),this.unpack_array(D);case 222:return D=this.unpack_uint16(),this.unpack_map(D);case 223:return D=this.unpack_uint32(),this.unpack_map(D)}},g.prototype.unpack_uint8=function(){var i=this.dataView[this.index]&255;return this.index++,i},g.prototype.unpack_uint16=function(){var i=this.read(2),D=(i[0]&255)*256+(i[1]&255);return this.index+=2,D},g.prototype.unpack_uint32=function(){var i=this.read(4),D=((i[0]*256+i[1])*256+i[2])*256+i[3];return this.index+=4,D},g.prototype.unpack_uint64=function(){var i=this.read(8),D=((((((i[0]*256+i[1])*256+i[2])*256+i[3])*256+i[4])*256+i[5])*256+i[6])*256+i[7];return this.index+=8,D},g.prototype.unpack_int8=function(){var i=this.unpack_uint8();return i<128?i:i-256},g.prototype.unpack_int16=function(){var i=this.unpack_uint16();return i<32768?i:i-65536},g.prototype.unpack_int32=function(){var i=this.unpack_uint32();return i<Math.pow(2,31)?i:i-Math.pow(2,32)},g.prototype.unpack_int64=function(){var i=this.unpack_uint64();return i<Math.pow(2,63)?i:i-Math.pow(2,64)},g.prototype.unpack_raw=function(i){if(this.length<this.index+i)throw new Error("BinaryPackFailure: index is out of range "+this.index+" "+i+" "+this.length);var D=this.dataBuffer.slice(this.index,this.index+i);return this.index+=i,D},g.prototype.unpack_string=function(i){for(var D=this.read(i),o=0,s="",t,w;o<i;)t=D[o],t<128?(s+=String.fromCharCode(t),o++):(t^192)<32?(w=(t^192)<<6|D[o+1]&63,s+=String.fromCharCode(w),o+=2):(w=(t&15)<<12|(D[o+1]&63)<<6|D[o+2]&63,s+=String.fromCharCode(w),o+=3);return this.index+=i,s},g.prototype.unpack_array=function(i){for(var D=new Array(i),o=0;o<i;o++)D[o]=this.unpack();return D},g.prototype.unpack_map=function(i){for(var D={},o=0;o<i;o++){var s=this.unpack(),t=this.unpack();D[s]=t}return D},g.prototype.unpack_float=function(){var i=this.unpack_uint32(),D=i>>31,o=(i>>23&255)-127,s=i&8388607|8388608;return(D===0?1:-1)*s*Math.pow(2,o-23)},g.prototype.unpack_double=function(){var i=this.unpack_uint32(),D=this.unpack_uint32(),o=i>>31,s=(i>>20&2047)-1023,t=i&1048575|1048576,w=t*Math.pow(2,s-20)+D*Math.pow(2,s-52);return(o===0?1:-1)*w},g.prototype.read=function(i){var D=this.index;if(D+i<=this.length)return this.dataView.subarray(D,D+i);throw new Error("BinaryPackFailure: read index out of range")};function Q(){this.bufferBuilder=new B}Q.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},Q.prototype.pack=function(i){var D=typeof i;if(D==="string")this.pack_string(i);else if(D==="number")Math.floor(i)===i?this.pack_integer(i):this.pack_double(i);else if(D==="boolean")i===!0?this.bufferBuilder.append(195):i===!1&&this.bufferBuilder.append(194);else if(D==="undefined")this.bufferBuilder.append(192);else if(D==="object")if(i===null)this.bufferBuilder.append(192);else{var o=i.constructor;if(o==Array)this.pack_array(i);else if(o==Blob||o==File||i instanceof Blob||i instanceof File)this.pack_bin(i);else if(o==ArrayBuffer)A.useArrayBufferView?this.pack_bin(new Uint8Array(i)):this.pack_bin(i);else if("BYTES_PER_ELEMENT"in i)A.useArrayBufferView?this.pack_bin(new Uint8Array(i.buffer)):this.pack_bin(i.buffer);else if(o==Object||o.toString().startsWith("class"))this.pack_object(i);else if(o==Date)this.pack_string(i.toString());else if(typeof i.toBinaryPack=="function")this.bufferBuilder.append(i.toBinaryPack());else throw new Error('Type "'+o.toString()+'" not yet supported')}else throw new Error('Type "'+D+'" not yet supported');this.bufferBuilder.flush()},Q.prototype.pack_bin=function(i){var D=i.length||i.byteLength||i.size;if(D<=15)this.pack_uint8(160+D);else if(D<=65535)this.bufferBuilder.append(218),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(219),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(i)},Q.prototype.pack_string=function(i){var D=E(i);if(D<=15)this.pack_uint8(176+D);else if(D<=65535)this.bufferBuilder.append(216),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(217),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(i)},Q.prototype.pack_array=function(i){var D=i.length;if(D<=15)this.pack_uint8(144+D);else if(D<=65535)this.bufferBuilder.append(220),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(221),this.pack_uint32(D);else throw new Error("Invalid length");for(var o=0;o<D;o++)this.pack(i[o])},Q.prototype.pack_integer=function(i){if(i>=-32&&i<=127)this.bufferBuilder.append(i&255);else if(i>=0&&i<=255)this.bufferBuilder.append(204),this.pack_uint8(i);else if(i>=-128&&i<=127)this.bufferBuilder.append(208),this.pack_int8(i);else if(i>=0&&i<=65535)this.bufferBuilder.append(205),this.pack_uint16(i);else if(i>=-32768&&i<=32767)this.bufferBuilder.append(209),this.pack_int16(i);else if(i>=0&&i<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(i);else if(i>=-2147483648&&i<=2147483647)this.bufferBuilder.append(210),this.pack_int32(i);else if(i>=-9223372036854776e3&&i<=9223372036854776e3)this.bufferBuilder.append(211),this.pack_int64(i);else if(i>=0&&i<=18446744073709552e3)this.bufferBuilder.append(207),this.pack_uint64(i);else throw new Error("Invalid integer")},Q.prototype.pack_double=function(i){var D=0;i<0&&(D=1,i=-i);var o=Math.floor(Math.log(i)/Math.LN2),s=i/Math.pow(2,o)-1,t=Math.floor(s*Math.pow(2,52)),w=Math.pow(2,32),a=D<<31|o+1023<<20|t/w&1048575,y=t%w;this.bufferBuilder.append(203),this.pack_int32(a),this.pack_int32(y)},Q.prototype.pack_object=function(i){var D=Object.keys(i),o=D.length;if(o<=15)this.pack_uint8(128+o);else if(o<=65535)this.bufferBuilder.append(222),this.pack_uint16(o);else if(o<=4294967295)this.bufferBuilder.append(223),this.pack_uint32(o);else throw new Error("Invalid length");for(var s in i)i.hasOwnProperty(s)&&(this.pack(s),this.pack(i[s]))},Q.prototype.pack_uint8=function(i){this.bufferBuilder.append(i)},Q.prototype.pack_uint16=function(i){this.bufferBuilder.append(i>>8),this.bufferBuilder.append(i&255)},Q.prototype.pack_uint32=function(i){var D=i&4294967295;this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255)},Q.prototype.pack_uint64=function(i){var D=i/Math.pow(2,32),o=i%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)},Q.prototype.pack_int8=function(i){this.bufferBuilder.append(i&255)},Q.prototype.pack_int16=function(i){this.bufferBuilder.append((i&65280)>>8),this.bufferBuilder.append(i&255)},Q.prototype.pack_int32=function(i){this.bufferBuilder.append(i>>>24&255),this.bufferBuilder.append((i&16711680)>>>16),this.bufferBuilder.append((i&65280)>>>8),this.bufferBuilder.append(i&255)},Q.prototype.pack_int64=function(i){var D=Math.floor(i/Math.pow(2,32)),o=i%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)};function C(i){var D=i.charCodeAt(0);return D<=2047?"00":D<=65535?"000":D<=2097151?"0000":D<=67108863?"00000":"000000"}function E(i){return i.length>600?new Blob([i]).size:i.replace(/[^\u0000-\u007F]/g,C).length}return Ji}var wn=tn();const Bs=jD(wn);let mt=!0,Pt=!0;function RB(B,A,I){const g=B.match(A);return g&&g.length>=I&&parseInt(g[I],10)}function BB(B,A,I){if(!B.RTCPeerConnection)return;const g=B.RTCPeerConnection.prototype,Q=g.addEventListener;g.addEventListener=function(E,i){if(E!==A)return Q.apply(this,arguments);const D=o=>{const s=I(o);s&&(i.handleEvent?i.handleEvent(s):i(s))};return this._eventMap=this._eventMap||{},this._eventMap[A]||(this._eventMap[A]=new Map),this._eventMap[A].set(i,D),Q.apply(this,[E,D])};const C=g.removeEventListener;g.removeEventListener=function(E,i){if(E!==A||!this._eventMap||!this._eventMap[A])return C.apply(this,arguments);if(!this._eventMap[A].has(i))return C.apply(this,arguments);const D=this._eventMap[A].get(i);return this._eventMap[A].delete(i),this._eventMap[A].size===0&&delete this._eventMap[A],Object.keys(this._eventMap).length===0&&delete this._eventMap,C.apply(this,[E,D])},Object.defineProperty(g,"on"+A,{get(){return this["_on"+A]},set(E){this["_on"+A]&&(this.removeEventListener(A,this["_on"+A]),delete this["_on"+A]),E&&this.addEventListener(A,this["_on"+A]=E)},enumerable:!0,configurable:!0})}function an(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(mt=B,B?"adapter.js logging disabled":"adapter.js logging enabled")}function en(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(Pt=!B,"adapter.js deprecation warnings "+(B?"disabled":"enabled"))}function zD(){if(typeof window=="object"){if(mt)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function TE(B,A){Pt&&console.warn(B+" is deprecated, please use "+A+" instead.")}function nn(B){const A={browser:null,version:null};if(typeof B>"u"||!B.navigator)return A.browser="Not a browser.",A;const{navigator:I}=B;if(I.mozGetUserMedia)A.browser="firefox",A.version=RB(I.userAgent,/Firefox\/(\d+)\./,1);else if(I.webkitGetUserMedia||B.isSecureContext===!1&&B.webkitRTCPeerConnection&&!B.RTCIceGatherer)A.browser="chrome",A.version=RB(I.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(I.mediaDevices&&I.userAgent.match(/Edge\/(\d+).(\d+)$/))A.browser="edge",A.version=RB(I.userAgent,/Edge\/(\d+).(\d+)$/,2);else if(B.RTCPeerConnection&&I.userAgent.match(/AppleWebKit\/(\d+)\./))A.browser="safari",A.version=RB(I.userAgent,/AppleWebKit\/(\d+)\./,1),A.supportsUnifiedPlan=B.RTCRtpTransceiver&&"currentDirection"in B.RTCRtpTransceiver.prototype;else return A.browser="Not a supported browser.",A;return A}function Cs(B){return Object.prototype.toString.call(B)==="[object Object]"}function Tt(B){return Cs(B)?Object.keys(B).reduce(function(A,I){const g=Cs(B[I]),Q=g?Tt(B[I]):B[I],C=g&&!Object.keys(Q).length;return Q===void 0||C?A:Object.assign(A,{[I]:Q})},{}):B}function DD(B,A,I){!A||I.has(A.id)||(I.set(A.id,A),Object.keys(A).forEach(g=>{g.endsWith("Id")?DD(B,B.get(A[g]),I):g.endsWith("Ids")&&A[g].forEach(Q=>{DD(B,B.get(Q),I)})}))}function Es(B,A,I){const g=I?"outbound-rtp":"inbound-rtp",Q=new Map;if(A===null)return Q;const C=[];return B.forEach(E=>{E.type==="track"&&E.trackIdentifier===A.id&&C.push(E)}),C.forEach(E=>{B.forEach(i=>{i.type===g&&i.trackId===E.id&&DD(B,i,Q)})}),Q}const is=zD;function Ot(B,A){const I=B&&B.navigator;if(!I.mediaDevices)return;const g=function(i){if(typeof i!="object"||i.mandatory||i.optional)return i;const D={};return Object.keys(i).forEach(o=>{if(o==="require"||o==="advanced"||o==="mediaSource")return;const s=typeof i[o]=="object"?i[o]:{ideal:i[o]};s.exact!==void 0&&typeof s.exact=="number"&&(s.min=s.max=s.exact);const t=function(w,a){return w?w+a.charAt(0).toUpperCase()+a.slice(1):a==="deviceId"?"sourceId":a};if(s.ideal!==void 0){D.optional=D.optional||[];let w={};typeof s.ideal=="number"?(w[t("min",o)]=s.ideal,D.optional.push(w),w={},w[t("max",o)]=s.ideal,D.optional.push(w)):(w[t("",o)]=s.ideal,D.optional.push(w))}s.exact!==void 0&&typeof s.exact!="number"?(D.mandatory=D.mandatory||{},D.mandatory[t("",o)]=s.exact):["min","max"].forEach(w=>{s[w]!==void 0&&(D.mandatory=D.mandatory||{},D.mandatory[t(w,o)]=s[w])})}),i.advanced&&(D.optional=(D.optional||[]).concat(i.advanced)),D},Q=function(i,D){if(A.version>=61)return D(i);if(i=JSON.parse(JSON.stringify(i)),i&&typeof i.audio=="object"){const o=function(s,t,w){t in s&&!(w in s)&&(s[w]=s[t],delete s[t])};i=JSON.parse(JSON.stringify(i)),o(i.audio,"autoGainControl","googAutoGainControl"),o(i.audio,"noiseSuppression","googNoiseSuppression"),i.audio=g(i.audio)}if(i&&typeof i.video=="object"){let o=i.video.facingMode;o=o&&(typeof o=="object"?o:{ideal:o});const s=A.version<66;if(o&&(o.exact==="user"||o.exact==="environment"||o.ideal==="user"||o.ideal==="environment")&&!(I.mediaDevices.getSupportedConstraints&&I.mediaDevices.getSupportedConstraints().facingMode&&!s)){delete i.video.facingMode;let t;if(o.exact==="environment"||o.ideal==="environment"?t=["back","rear"]:(o.exact==="user"||o.ideal==="user")&&(t=["front"]),t)return I.mediaDevices.enumerateDevices().then(w=>{w=w.filter(y=>y.kind==="videoinput");let a=w.find(y=>t.some(r=>y.label.toLowerCase().includes(r)));return!a&&w.length&&t.includes("back")&&(a=w[w.length-1]),a&&(i.video.deviceId=o.exact?{exact:a.deviceId}:{ideal:a.deviceId}),i.video=g(i.video),is("chrome: "+JSON.stringify(i)),D(i)})}i.video=g(i.video)}return is("chrome: "+JSON.stringify(i)),D(i)},C=function(i){return A.version>=64?i:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[i.name]||i.name,message:i.message,constraint:i.constraint||i.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},E=function(i,D,o){Q(i,s=>{I.webkitGetUserMedia(s,D,t=>{o&&o(C(t))})})};if(I.getUserMedia=E.bind(I),I.mediaDevices.getUserMedia){const i=I.mediaDevices.getUserMedia.bind(I.mediaDevices);Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(D){return Q(D,o=>i(o).then(s=>{if(o.audio&&!s.getAudioTracks().length||o.video&&!s.getVideoTracks().length)throw s.getTracks().forEach(t=>{t.stop()}),new DOMException("","NotFoundError");return s},s=>Promise.reject(C(s))))})}}function cn(B,A){if(!(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices)&&B.navigator.mediaDevices){if(typeof A!="function"){console.error("shimGetDisplayMedia: getSourceId argument is not a function");return}B.navigator.mediaDevices.getDisplayMedia=function(g){return A(g).then(Q=>{const C=g.video&&g.video.width,E=g.video&&g.video.height,i=g.video&&g.video.frameRate;return g.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:Q,maxFrameRate:i||3}},C&&(g.video.mandatory.maxWidth=C),E&&(g.video.mandatory.maxHeight=E),B.navigator.mediaDevices.getUserMedia(g)})}}}function Xt(B){B.MediaStream=B.MediaStream||B.webkitMediaStream}function vt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("ontrack"in B.RTCPeerConnection.prototype)){Object.defineProperty(B.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(I){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=I)},enumerable:!0,configurable:!0});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=g=>{g.stream.addEventListener("addtrack",Q=>{let C;B.RTCPeerConnection.prototype.getReceivers?C=this.getReceivers().find(i=>i.track&&i.track.id===Q.track.id):C={track:Q.track};const E=new Event("track");E.track=Q.track,E.receiver=C,E.transceiver={receiver:C},E.streams=[g.stream],this.dispatchEvent(E)}),g.stream.getTracks().forEach(Q=>{let C;B.RTCPeerConnection.prototype.getReceivers?C=this.getReceivers().find(i=>i.track&&i.track.id===Q.id):C={track:Q};const E=new Event("track");E.track=Q,E.receiver=C,E.transceiver={receiver:C},E.streams=[g.stream],this.dispatchEvent(E)})},this.addEventListener("addstream",this._ontrackpoly)),A.apply(this,arguments)}}else BB(B,"track",A=>(A.transceiver||Object.defineProperty(A,"transceiver",{value:{receiver:A.receiver}}),A))}function Vt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("getSenders"in B.RTCPeerConnection.prototype)&&"createDTMFSender"in B.RTCPeerConnection.prototype){const A=function(Q,C){return{track:C,get dtmf(){return this._dtmf===void 0&&(C.kind==="audio"?this._dtmf=Q.createDTMFSender(C):this._dtmf=null),this._dtmf},_pc:Q}};if(!B.RTCPeerConnection.prototype.getSenders){B.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(i,D){let o=Q.apply(this,arguments);return o||(o=A(this,i),this._senders.push(o)),o};const C=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(i){C.apply(this,arguments);const D=this._senders.indexOf(i);D!==-1&&this._senders.splice(D,1)}}const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(C){this._senders=this._senders||[],I.apply(this,[C]),C.getTracks().forEach(E=>{this._senders.push(A(this,E))})};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(C){this._senders=this._senders||[],g.apply(this,[C]),C.getTracks().forEach(E=>{const i=this._senders.find(D=>D.track===E);i&&this._senders.splice(this._senders.indexOf(i),1)})}}else if(typeof B=="object"&&B.RTCPeerConnection&&"getSenders"in B.RTCPeerConnection.prototype&&"createDTMFSender"in B.RTCPeerConnection.prototype&&B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)){const A=B.RTCPeerConnection.prototype.getSenders;B.RTCPeerConnection.prototype.getSenders=function(){const g=A.apply(this,[]);return g.forEach(Q=>Q._pc=this),g},Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function Zt(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[g,Q,C]=arguments;if(arguments.length>0&&typeof g=="function")return A.apply(this,arguments);if(A.length===0&&(arguments.length===0||typeof g!="function"))return A.apply(this,[]);const E=function(D){const o={};return D.result().forEach(t=>{const w={id:t.id,timestamp:t.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[t.type]||t.type};t.names().forEach(a=>{w[a]=t.stat(a)}),o[w.id]=w}),o},i=function(D){return new Map(Object.keys(D).map(o=>[o,D[o]]))};if(arguments.length>=2){const D=function(o){Q(i(E(o)))};return A.apply(this,[D,g])}return new Promise((D,o)=>{A.apply(this,[function(s){D(i(E(s)))},o])}).then(Q,C)}}function Wt(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender&&B.RTCRtpReceiver))return;if(!("getStats"in B.RTCRtpSender.prototype)){const I=B.RTCPeerConnection.prototype.getSenders;I&&(B.RTCPeerConnection.prototype.getSenders=function(){const C=I.apply(this,[]);return C.forEach(E=>E._pc=this),C});const g=B.RTCPeerConnection.prototype.addTrack;g&&(B.RTCPeerConnection.prototype.addTrack=function(){const C=g.apply(this,arguments);return C._pc=this,C}),B.RTCRtpSender.prototype.getStats=function(){const C=this;return this._pc.getStats().then(E=>Es(E,C.track,!0))}}if(!("getStats"in B.RTCRtpReceiver.prototype)){const I=B.RTCPeerConnection.prototype.getReceivers;I&&(B.RTCPeerConnection.prototype.getReceivers=function(){const Q=I.apply(this,[]);return Q.forEach(C=>C._pc=this),Q}),BB(B,"track",g=>(g.receiver._pc=g.srcElement,g)),B.RTCRtpReceiver.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(C=>Es(C,Q.track,!1))}}if(!("getStats"in B.RTCRtpSender.prototype&&"getStats"in B.RTCRtpReceiver.prototype))return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof B.MediaStreamTrack){const g=arguments[0];let Q,C,E;return this.getSenders().forEach(i=>{i.track===g&&(Q?E=!0:Q=i)}),this.getReceivers().forEach(i=>(i.track===g&&(C?E=!0:C=i),i.track===g)),E||Q&&C?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):Q?Q.getStats():C?C.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return A.apply(this,arguments)}}function jt(B){B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(E=>this._shimmedLocalStreams[E][0])};const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(E,i){if(!i)return A.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const D=A.apply(this,arguments);return this._shimmedLocalStreams[i.id]?this._shimmedLocalStreams[i.id].indexOf(D)===-1&&this._shimmedLocalStreams[i.id].push(D):this._shimmedLocalStreams[i.id]=[i,D],D};const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(E){this._shimmedLocalStreams=this._shimmedLocalStreams||{},E.getTracks().forEach(o=>{if(this.getSenders().find(t=>t.track===o))throw new DOMException("Track already exists.","InvalidAccessError")});const i=this.getSenders();I.apply(this,arguments);const D=this.getSenders().filter(o=>i.indexOf(o)===-1);this._shimmedLocalStreams[E.id]=[E].concat(D)};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(E){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[E.id],g.apply(this,arguments)};const Q=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(E){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},E&&Object.keys(this._shimmedLocalStreams).forEach(i=>{const D=this._shimmedLocalStreams[i].indexOf(E);D!==-1&&this._shimmedLocalStreams[i].splice(D,1),this._shimmedLocalStreams[i].length===1&&delete this._shimmedLocalStreams[i]}),Q.apply(this,arguments)}}function zt(B,A){if(!B.RTCPeerConnection)return;if(B.RTCPeerConnection.prototype.addTrack&&A.version>=65)return jt(B);const I=B.RTCPeerConnection.prototype.getLocalStreams;B.RTCPeerConnection.prototype.getLocalStreams=function(){const s=I.apply(this);return this._reverseStreams=this._reverseStreams||{},s.map(t=>this._reverseStreams[t.id])};const g=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(s){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},s.getTracks().forEach(t=>{if(this.getSenders().find(a=>a.track===t))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[s.id]){const t=new B.MediaStream(s.getTracks());this._streams[s.id]=t,this._reverseStreams[t.id]=s,s=t}g.apply(this,[s])};const Q=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(s){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[s.id]||s]),delete this._reverseStreams[this._streams[s.id]?this._streams[s.id].id:s.id],delete this._streams[s.id]},B.RTCPeerConnection.prototype.addTrack=function(s,t){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const w=[].slice.call(arguments,1);if(w.length!==1||!w[0].getTracks().find(r=>r===s))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(r=>r.track===s))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const y=this._streams[t.id];if(y)y.addTrack(s),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const r=new B.MediaStream([s]);this._streams[t.id]=r,this._reverseStreams[r.id]=t,this.addStream(r)}return this.getSenders().find(r=>r.track===s)};function C(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],y=o._streams[a.id];t=t.replace(new RegExp(y.id,"g"),a.id)}),new RTCSessionDescription({type:s.type,sdp:t})}function E(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],y=o._streams[a.id];t=t.replace(new RegExp(a.id,"g"),y.id)}),new RTCSessionDescription({type:s.type,sdp:t})}["createOffer","createAnswer"].forEach(function(o){const s=B.RTCPeerConnection.prototype[o],t={[o](){const w=arguments;return arguments.length&&typeof arguments[0]=="function"?s.apply(this,[y=>{const r=C(this,y);w[0].apply(null,[r])},y=>{w[1]&&w[1].apply(null,y)},arguments[2]]):s.apply(this,arguments).then(y=>C(this,y))}};B.RTCPeerConnection.prototype[o]=t[o]});const i=B.RTCPeerConnection.prototype.setLocalDescription;B.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?i.apply(this,arguments):(arguments[0]=E(this,arguments[0]),i.apply(this,arguments))};const D=Object.getOwnPropertyDescriptor(B.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(B.RTCPeerConnection.prototype,"localDescription",{get(){const o=D.get.apply(this);return o.type===""?o:C(this,o)}}),B.RTCPeerConnection.prototype.removeTrack=function(s){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!s._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(s._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let w;Object.keys(this._streams).forEach(a=>{this._streams[a].getTracks().find(r=>s.track===r)&&(w=this._streams[a])}),w&&(w.getTracks().length===1?this.removeStream(this._reverseStreams[w.id]):w.removeTrack(s.track),this.dispatchEvent(new Event("negotiationneeded")))}}function oD(B,A){!B.RTCPeerConnection&&B.webkitRTCPeerConnection&&(B.RTCPeerConnection=B.webkitRTCPeerConnection),B.RTCPeerConnection&&A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(I){const g=B.RTCPeerConnection.prototype[I],Q={[I](){return arguments[0]=new(I==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),g.apply(this,arguments)}};B.RTCPeerConnection.prototype[I]=Q[I]})}function _t(B,A){BB(B,"negotiationneeded",I=>{const g=I.target;if(!((A.version<72||g.getConfiguration&&g.getConfiguration().sdpSemantics==="plan-b")&&g.signalingState!=="stable"))return I})}const Ds=Object.freeze(Object.defineProperty({__proto__:null,fixNegotiationNeeded:_t,shimAddTrackRemoveTrack:zt,shimAddTrackRemoveTrackWithNative:jt,shimGetDisplayMedia:cn,shimGetSendersWithDtmf:Vt,shimGetStats:Zt,shimGetUserMedia:Ot,shimMediaStream:Xt,shimOnTrack:vt,shimPeerConnection:oD,shimSenderReceiverGetStats:Wt},Symbol.toStringTag,{value:"Module"}));function hn(B,A){let I=!1;return B=JSON.parse(JSON.stringify(B)),B.filter(g=>{if(g&&(g.urls||g.url)){let Q=g.urls||g.url;g.url&&!g.urls&&TE("RTCIceServer.url","RTCIceServer.urls");const C=typeof Q=="string";return C&&(Q=[Q]),Q=Q.filter(E=>{if(E.indexOf("stun:")===0)return!1;const i=E.startsWith("turn")&&!E.startsWith("turn:[")&&E.includes("transport=udp");return i&&!I?(I=!0,!0):i&&!I}),delete g.url,g.urls=C?Q[0]:Q,!!Q.length}})}var Ui={exports:{}},os;function $t(){return os||(os=1,(function(B){var A={};A.generateIdentifier=function(){return Math.random().toString(36).substr(2,10)},A.localCName=A.generateIdentifier(),A.splitLines=function(I){return I.trim().split(`
1040
1040
  `).map(function(g){return g.trim()})},A.splitSections=function(I){var g=I.split(`
1041
1041
  m=`);return g.map(function(Q,C){return(C>0?"m="+Q:Q).trim()+`\r
1042
1042
  `})},A.getDescription=function(I){var g=A.splitSections(I);return g&&g[0]},A.getMediaSections=function(I){var g=A.splitSections(I);return g.shift(),g},A.matchPrefix=function(I,g){return A.splitLines(I).filter(function(Q){return Q.indexOf(g)===0})},A.parseCandidate=function(I){var g;I.indexOf("a=candidate:")===0?g=I.substring(12).split(" "):g=I.substring(10).split(" ");for(var Q={foundation:g[0],component:parseInt(g[1],10),protocol:g[2].toLowerCase(),priority:parseInt(g[3],10),ip:g[4],address:g[4],port:parseInt(g[5],10),type:g[7]},C=8;C<g.length;C+=2)switch(g[C]){case"raddr":Q.relatedAddress=g[C+1];break;case"rport":Q.relatedPort=parseInt(g[C+1],10);break;case"tcptype":Q.tcpType=g[C+1];break;case"ufrag":Q.ufrag=g[C+1],Q.usernameFragment=g[C+1];break;default:Q[g[C]]=g[C+1];break}return Q},A.writeCandidate=function(I){var g=[];g.push(I.foundation),g.push(I.component),g.push(I.protocol.toUpperCase()),g.push(I.priority),g.push(I.address||I.ip),g.push(I.port);var Q=I.type;return g.push("typ"),g.push(Q),Q!=="host"&&I.relatedAddress&&I.relatedPort&&(g.push("raddr"),g.push(I.relatedAddress),g.push("rport"),g.push(I.relatedPort)),I.tcpType&&I.protocol.toLowerCase()==="tcp"&&(g.push("tcptype"),g.push(I.tcpType)),(I.usernameFragment||I.ufrag)&&(g.push("ufrag"),g.push(I.usernameFragment||I.ufrag)),"candidate:"+g.join(" ")},A.parseIceOptions=function(I){return I.substr(14).split(" ")},A.parseRtpMap=function(I){var g=I.substr(9).split(" "),Q={payloadType:parseInt(g.shift(),10)};return g=g[0].split("/"),Q.name=g[0],Q.clockRate=parseInt(g[1],10),Q.channels=g.length===3?parseInt(g[2],10):1,Q.numChannels=Q.channels,Q},A.writeRtpMap=function(I){var g=I.payloadType;I.preferredPayloadType!==void 0&&(g=I.preferredPayloadType);var Q=I.channels||I.numChannels||1;return"a=rtpmap:"+g+" "+I.name+"/"+I.clockRate+(Q!==1?"/"+Q:"")+`\r
@@ -1074,46 +1074,46 @@ t=0 0\r
1074
1074
  `;E+="a="+i,E+="a=ssrc:"+I.sendEncodingParameters[0].ssrc+" "+i,I.sendEncodingParameters[0].rtx&&(E+="a=ssrc:"+I.sendEncodingParameters[0].rtx.ssrc+" "+i,E+="a=ssrc-group:FID "+I.sendEncodingParameters[0].ssrc+" "+I.sendEncodingParameters[0].rtx.ssrc+`\r
1075
1075
  `)}return E+="a=ssrc:"+I.sendEncodingParameters[0].ssrc+" cname:"+A.localCName+`\r
1076
1076
  `,I.rtpSender&&I.sendEncodingParameters[0].rtx&&(E+="a=ssrc:"+I.sendEncodingParameters[0].rtx.ssrc+" cname:"+A.localCName+`\r
1077
- `),E},A.getDirection=function(I,g){for(var Q=A.splitLines(I),C=0;C<Q.length;C++)switch(Q[C]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return Q[C].substr(2)}return g?A.getDirection(g):"sendrecv"},A.getKind=function(I){var g=A.splitLines(I),Q=g[0].split(" ");return Q[0].substr(2)},A.isRejected=function(I){return I.split(" ",2)[1]==="0"},A.parseMLine=function(I){var g=A.splitLines(I),Q=g[0].substr(2).split(" ");return{kind:Q[0],port:parseInt(Q[1],10),protocol:Q[2],fmt:Q.slice(3).join(" ")}},A.parseOLine=function(I){var g=A.matchPrefix(I,"o=")[0],Q=g.substr(2).split(" ");return{username:Q[0],sessionId:Q[1],sessionVersion:parseInt(Q[2],10),netType:Q[3],addressType:Q[4],address:Q[5]}},A.isValidSDP=function(I){if(typeof I!="string"||I.length===0)return!1;for(var g=A.splitLines(I),Q=0;Q<g.length;Q++)if(g[Q].length<2||g[Q].charAt(1)!=="=")return!1;return!0},B.exports=A})(Ji)),Ji.exports}var Ui,Es;function tc(){if(Es)return Ui;Es=1;var B=Xt();function A(D){return{inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[D.type]||D.type}function I(D,o,s,t,w){var a=B.writeRtpDescription(D.kind,o);if(a+=B.writeIceParameters(D.iceGatherer.getLocalParameters()),a+=B.writeDtlsParameters(D.dtlsTransport.getLocalParameters(),s==="offer"?"actpass":w||"active"),a+="a=mid:"+D.mid+`\r
1077
+ `),E},A.getDirection=function(I,g){for(var Q=A.splitLines(I),C=0;C<Q.length;C++)switch(Q[C]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return Q[C].substr(2)}return g?A.getDirection(g):"sendrecv"},A.getKind=function(I){var g=A.splitLines(I),Q=g[0].split(" ");return Q[0].substr(2)},A.isRejected=function(I){return I.split(" ",2)[1]==="0"},A.parseMLine=function(I){var g=A.splitLines(I),Q=g[0].substr(2).split(" ");return{kind:Q[0],port:parseInt(Q[1],10),protocol:Q[2],fmt:Q.slice(3).join(" ")}},A.parseOLine=function(I){var g=A.matchPrefix(I,"o=")[0],Q=g.substr(2).split(" ");return{username:Q[0],sessionId:Q[1],sessionVersion:parseInt(Q[2],10),netType:Q[3],addressType:Q[4],address:Q[5]}},A.isValidSDP=function(I){if(typeof I!="string"||I.length===0)return!1;for(var g=A.splitLines(I),Q=0;Q<g.length;Q++)if(g[Q].length<2||g[Q].charAt(1)!=="=")return!1;return!0},B.exports=A})(Ui)),Ui.exports}var Li,ss;function yn(){if(ss)return Li;ss=1;var B=$t();function A(D){return{inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[D.type]||D.type}function I(D,o,s,t,w){var a=B.writeRtpDescription(D.kind,o);if(a+=B.writeIceParameters(D.iceGatherer.getLocalParameters()),a+=B.writeDtlsParameters(D.dtlsTransport.getLocalParameters(),s==="offer"?"actpass":w||"active"),a+="a=mid:"+D.mid+`\r
1078
1078
  `,D.rtpSender&&D.rtpReceiver?a+=`a=sendrecv\r
1079
1079
  `:D.rtpSender?a+=`a=sendonly\r
1080
1080
  `:D.rtpReceiver?a+=`a=recvonly\r
1081
1081
  `:a+=`a=inactive\r
1082
- `,D.rtpSender){var y=D.rtpSender._initialTrackId||D.rtpSender.track.id;D.rtpSender._initialTrackId=y;var R="msid:"+(t?t.id:"-")+" "+y+`\r
1083
- `;a+="a="+R,a+="a=ssrc:"+D.sendEncodingParameters[0].ssrc+" "+R,D.sendEncodingParameters[0].rtx&&(a+="a=ssrc:"+D.sendEncodingParameters[0].rtx.ssrc+" "+R,a+="a=ssrc-group:FID "+D.sendEncodingParameters[0].ssrc+" "+D.sendEncodingParameters[0].rtx.ssrc+`\r
1082
+ `,D.rtpSender){var y=D.rtpSender._initialTrackId||D.rtpSender.track.id;D.rtpSender._initialTrackId=y;var r="msid:"+(t?t.id:"-")+" "+y+`\r
1083
+ `;a+="a="+r,a+="a=ssrc:"+D.sendEncodingParameters[0].ssrc+" "+r,D.sendEncodingParameters[0].rtx&&(a+="a=ssrc:"+D.sendEncodingParameters[0].rtx.ssrc+" "+r,a+="a=ssrc-group:FID "+D.sendEncodingParameters[0].ssrc+" "+D.sendEncodingParameters[0].rtx.ssrc+`\r
1084
1084
  `)}return a+="a=ssrc:"+D.sendEncodingParameters[0].ssrc+" cname:"+B.localCName+`\r
1085
1085
  `,D.rtpSender&&D.sendEncodingParameters[0].rtx&&(a+="a=ssrc:"+D.sendEncodingParameters[0].rtx.ssrc+" cname:"+B.localCName+`\r
1086
- `),a}function g(D,o){var s=!1;return D=JSON.parse(JSON.stringify(D)),D.filter(function(t){if(t&&(t.urls||t.url)){var w=t.urls||t.url;t.url&&!t.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var a=typeof w=="string";return a&&(w=[w]),w=w.filter(function(y){var R=y.indexOf("turn:")===0&&y.indexOf("transport=udp")!==-1&&y.indexOf("turn:[")===-1&&!s;return R?(s=!0,!0):y.indexOf("stun:")===0&&o>=14393&&y.indexOf("?transport=udp")===-1}),delete t.url,t.urls=a?w[0]:w,!!w.length}})}function Q(D,o){var s={codecs:[],headerExtensions:[],fecMechanisms:[]},t=function(a,y){a=parseInt(a,10);for(var R=0;R<y.length;R++)if(y[R].payloadType===a||y[R].preferredPayloadType===a)return y[R]},w=function(a,y,R,n){var h=t(a.parameters.apt,R),G=t(y.parameters.apt,n);return h&&G&&h.name.toLowerCase()===G.name.toLowerCase()};return D.codecs.forEach(function(a){for(var y=0;y<o.codecs.length;y++){var R=o.codecs[y];if(a.name.toLowerCase()===R.name.toLowerCase()&&a.clockRate===R.clockRate){if(a.name.toLowerCase()==="rtx"&&a.parameters&&R.parameters.apt&&!w(a,R,D.codecs,o.codecs))continue;R=JSON.parse(JSON.stringify(R)),R.numChannels=Math.min(a.numChannels,R.numChannels),s.codecs.push(R),R.rtcpFeedback=R.rtcpFeedback.filter(function(n){for(var h=0;h<a.rtcpFeedback.length;h++)if(a.rtcpFeedback[h].type===n.type&&a.rtcpFeedback[h].parameter===n.parameter)return!0;return!1});break}}}),D.headerExtensions.forEach(function(a){for(var y=0;y<o.headerExtensions.length;y++){var R=o.headerExtensions[y];if(a.uri===R.uri){s.headerExtensions.push(R);break}}}),s}function C(D,o,s){return{offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[o][D].indexOf(s)!==-1}function E(D,o){var s=D.getRemoteCandidates().find(function(t){return o.foundation===t.foundation&&o.ip===t.ip&&o.port===t.port&&o.priority===t.priority&&o.protocol===t.protocol&&o.type===t.type});return s||D.addRemoteCandidate(o),!s}function i(D,o){var s=new Error(o);return s.name=D,s.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[D],s}return Ui=function(D,o){function s(n,h){h.addTrack(n),h.dispatchEvent(new D.MediaStreamTrackEvent("addtrack",{track:n}))}function t(n,h){h.removeTrack(n),h.dispatchEvent(new D.MediaStreamTrackEvent("removetrack",{track:n}))}function w(n,h,G,r){var M=new Event("track");M.track=h,M.receiver=G,M.transceiver={receiver:G},M.streams=r,D.setTimeout(function(){n._dispatchEvent("track",M)})}var a=function(n){var h=this,G=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach(function(M){h[M]=G[M].bind(G)}),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",n=JSON.parse(JSON.stringify(n||{})),this.usingBundle=n.bundlePolicy==="max-bundle",n.rtcpMuxPolicy==="negotiate")throw i("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(n.rtcpMuxPolicy||(n.rtcpMuxPolicy="require"),n.iceTransportPolicy){case"all":case"relay":break;default:n.iceTransportPolicy="all";break}switch(n.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:n.bundlePolicy="balanced";break}if(n.iceServers=g(n.iceServers||[],o),this._iceGatherers=[],n.iceCandidatePoolSize)for(var r=n.iceCandidatePoolSize;r>0;r--)this._iceGatherers.push(new D.RTCIceGatherer({iceServers:n.iceServers,gatherPolicy:n.iceTransportPolicy}));else n.iceCandidatePoolSize=0;this._config=n,this.transceivers=[],this._sdpSessionId=B.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(a.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(a.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),a.prototype.onicecandidate=null,a.prototype.onaddstream=null,a.prototype.ontrack=null,a.prototype.onremovestream=null,a.prototype.onsignalingstatechange=null,a.prototype.oniceconnectionstatechange=null,a.prototype.onconnectionstatechange=null,a.prototype.onicegatheringstatechange=null,a.prototype.onnegotiationneeded=null,a.prototype.ondatachannel=null,a.prototype._dispatchEvent=function(n,h){this._isClosed||(this.dispatchEvent(h),typeof this["on"+n]=="function"&&this["on"+n](h))},a.prototype._emitGatheringStateChange=function(){var n=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",n)},a.prototype.getConfiguration=function(){return this._config},a.prototype.getLocalStreams=function(){return this.localStreams},a.prototype.getRemoteStreams=function(){return this.remoteStreams},a.prototype._createTransceiver=function(n,h){var G=this.transceivers.length>0,r={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:n,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&G)r.iceTransport=this.transceivers[0].iceTransport,r.dtlsTransport=this.transceivers[0].dtlsTransport;else{var M=this._createIceAndDtlsTransports();r.iceTransport=M.iceTransport,r.dtlsTransport=M.dtlsTransport}return h||this.transceivers.push(r),r},a.prototype.addTrack=function(n,h){if(this._isClosed)throw i("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var G=this.transceivers.find(function(k){return k.track===n});if(G)throw i("InvalidAccessError","Track already exists.");for(var r,M=0;M<this.transceivers.length;M++)!this.transceivers[M].track&&this.transceivers[M].kind===n.kind&&(r=this.transceivers[M]);return r||(r=this._createTransceiver(n.kind)),this._maybeFireNegotiationNeeded(),this.localStreams.indexOf(h)===-1&&this.localStreams.push(h),r.track=n,r.stream=h,r.rtpSender=new D.RTCRtpSender(n,r.dtlsTransport),r.rtpSender},a.prototype.addStream=function(n){var h=this;if(o>=15025)n.getTracks().forEach(function(r){h.addTrack(r,n)});else{var G=n.clone();n.getTracks().forEach(function(r,M){var k=G.getTracks()[M];r.addEventListener("enabled",function(J){k.enabled=J.enabled})}),G.getTracks().forEach(function(r){h.addTrack(r,G)})}},a.prototype.removeTrack=function(n){if(this._isClosed)throw i("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(n instanceof D.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var h=this.transceivers.find(function(M){return M.rtpSender===n});if(!h)throw i("InvalidAccessError","Sender was not created by this connection.");var G=h.stream;h.rtpSender.stop(),h.rtpSender=null,h.track=null,h.stream=null;var r=this.transceivers.map(function(M){return M.stream});r.indexOf(G)===-1&&this.localStreams.indexOf(G)>-1&&this.localStreams.splice(this.localStreams.indexOf(G),1),this._maybeFireNegotiationNeeded()},a.prototype.removeStream=function(n){var h=this;n.getTracks().forEach(function(G){var r=h.getSenders().find(function(M){return M.track===G});r&&h.removeTrack(r)})},a.prototype.getSenders=function(){return this.transceivers.filter(function(n){return!!n.rtpSender}).map(function(n){return n.rtpSender})},a.prototype.getReceivers=function(){return this.transceivers.filter(function(n){return!!n.rtpReceiver}).map(function(n){return n.rtpReceiver})},a.prototype._createIceGatherer=function(n,h){var G=this;if(h&&n>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var r=new D.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(r,"state",{value:"new",writable:!0}),this.transceivers[n].bufferedCandidateEvents=[],this.transceivers[n].bufferCandidates=function(M){var k=!M.candidate||Object.keys(M.candidate).length===0;r.state=k?"completed":"gathering",G.transceivers[n].bufferedCandidateEvents!==null&&G.transceivers[n].bufferedCandidateEvents.push(M)},r.addEventListener("localcandidate",this.transceivers[n].bufferCandidates),r},a.prototype._gather=function(n,h){var G=this,r=this.transceivers[h].iceGatherer;if(!r.onlocalcandidate){var M=this.transceivers[h].bufferedCandidateEvents;this.transceivers[h].bufferedCandidateEvents=null,r.removeEventListener("localcandidate",this.transceivers[h].bufferCandidates),r.onlocalcandidate=function(k){if(!(G.usingBundle&&h>0)){var J=new Event("icecandidate");J.candidate={sdpMid:n,sdpMLineIndex:h};var U=k.candidate,Y=!U||Object.keys(U).length===0;if(Y)(r.state==="new"||r.state==="gathering")&&(r.state="completed");else{r.state==="new"&&(r.state="gathering"),U.component=1,U.ufrag=r.getLocalParameters().usernameFragment;var d=B.writeCandidate(U);J.candidate=Object.assign(J.candidate,B.parseCandidate(d)),J.candidate.candidate=d,J.candidate.toJSON=function(){return{candidate:J.candidate.candidate,sdpMid:J.candidate.sdpMid,sdpMLineIndex:J.candidate.sdpMLineIndex,usernameFragment:J.candidate.usernameFragment}}}var H=B.getMediaSections(G._localDescription.sdp);Y?H[J.candidate.sdpMLineIndex]+=`a=end-of-candidates\r
1087
- `:H[J.candidate.sdpMLineIndex]+="a="+J.candidate.candidate+`\r
1088
- `,G._localDescription.sdp=B.getDescription(G._localDescription.sdp)+H.join("");var f=G.transceivers.every(function(l){return l.iceGatherer&&l.iceGatherer.state==="completed"});G.iceGatheringState!=="gathering"&&(G.iceGatheringState="gathering",G._emitGatheringStateChange()),Y||G._dispatchEvent("icecandidate",J),f&&(G._dispatchEvent("icecandidate",new Event("icecandidate")),G.iceGatheringState="complete",G._emitGatheringStateChange())}},D.setTimeout(function(){M.forEach(function(k){r.onlocalcandidate(k)})},0)}},a.prototype._createIceAndDtlsTransports=function(){var n=this,h=new D.RTCIceTransport(null);h.onicestatechange=function(){n._updateIceConnectionState(),n._updateConnectionState()};var G=new D.RTCDtlsTransport(h);return G.ondtlsstatechange=function(){n._updateConnectionState()},G.onerror=function(){Object.defineProperty(G,"state",{value:"failed",writable:!0}),n._updateConnectionState()},{iceTransport:h,dtlsTransport:G}},a.prototype._disposeIceAndDtlsTransports=function(n){var h=this.transceivers[n].iceGatherer;h&&(delete h.onlocalcandidate,delete this.transceivers[n].iceGatherer);var G=this.transceivers[n].iceTransport;G&&(delete G.onicestatechange,delete this.transceivers[n].iceTransport);var r=this.transceivers[n].dtlsTransport;r&&(delete r.ondtlsstatechange,delete r.onerror,delete this.transceivers[n].dtlsTransport)},a.prototype._transceive=function(n,h,G){var r=Q(n.localCapabilities,n.remoteCapabilities);h&&n.rtpSender&&(r.encodings=n.sendEncodingParameters,r.rtcp={cname:B.localCName,compound:n.rtcpParameters.compound},n.recvEncodingParameters.length&&(r.rtcp.ssrc=n.recvEncodingParameters[0].ssrc),n.rtpSender.send(r)),G&&n.rtpReceiver&&r.codecs.length>0&&(n.kind==="video"&&n.recvEncodingParameters&&o<15019&&n.recvEncodingParameters.forEach(function(M){delete M.rtx}),n.recvEncodingParameters.length?r.encodings=n.recvEncodingParameters:r.encodings=[{}],r.rtcp={compound:n.rtcpParameters.compound},n.rtcpParameters.cname&&(r.rtcp.cname=n.rtcpParameters.cname),n.sendEncodingParameters.length&&(r.rtcp.ssrc=n.sendEncodingParameters[0].ssrc),n.rtpReceiver.receive(r))},a.prototype.setLocalDescription=function(n){var h=this;if(["offer","answer"].indexOf(n.type)===-1)return Promise.reject(i("TypeError",'Unsupported type "'+n.type+'"'));if(!C("setLocalDescription",n.type,h.signalingState)||h._isClosed)return Promise.reject(i("InvalidStateError","Can not set local "+n.type+" in state "+h.signalingState));var G,r;if(n.type==="offer")G=B.splitSections(n.sdp),r=G.shift(),G.forEach(function(k,J){var U=B.parseRtpParameters(k);h.transceivers[J].localCapabilities=U}),h.transceivers.forEach(function(k,J){h._gather(k.mid,J)});else if(n.type==="answer"){G=B.splitSections(h._remoteDescription.sdp),r=G.shift();var M=B.matchPrefix(r,"a=ice-lite").length>0;G.forEach(function(k,J){var U=h.transceivers[J],Y=U.iceGatherer,d=U.iceTransport,H=U.dtlsTransport,f=U.localCapabilities,l=U.remoteCapabilities,p=B.isRejected(k)&&B.matchPrefix(k,"a=bundle-only").length===0;if(!p&&!U.rejected){var q=B.getIceParameters(k,r),m=B.getDtlsParameters(k,r);M&&(m.role="server"),(!h.usingBundle||J===0)&&(h._gather(U.mid,J),d.state==="new"&&d.start(Y,q,M?"controlling":"controlled"),H.state==="new"&&H.start(m));var T=Q(f,l);h._transceive(U,T.codecs.length>0,!1)}})}return h._localDescription={type:n.type,sdp:n.sdp},n.type==="offer"?h._updateSignalingState("have-local-offer"):h._updateSignalingState("stable"),Promise.resolve()},a.prototype.setRemoteDescription=function(n){var h=this;if(["offer","answer"].indexOf(n.type)===-1)return Promise.reject(i("TypeError",'Unsupported type "'+n.type+'"'));if(!C("setRemoteDescription",n.type,h.signalingState)||h._isClosed)return Promise.reject(i("InvalidStateError","Can not set remote "+n.type+" in state "+h.signalingState));var G={};h.remoteStreams.forEach(function(d){G[d.id]=d});var r=[],M=B.splitSections(n.sdp),k=M.shift(),J=B.matchPrefix(k,"a=ice-lite").length>0,U=B.matchPrefix(k,"a=group:BUNDLE ").length>0;h.usingBundle=U;var Y=B.matchPrefix(k,"a=ice-options:")[0];return Y?h.canTrickleIceCandidates=Y.substr(14).split(" ").indexOf("trickle")>=0:h.canTrickleIceCandidates=!1,M.forEach(function(d,H){var f=B.splitLines(d),l=B.getKind(d),p=B.isRejected(d)&&B.matchPrefix(d,"a=bundle-only").length===0,q=f[0].substr(2).split(" ")[2],m=B.getDirection(d,k),T=B.parseMsid(d),Z=B.getMid(d)||B.generateIdentifier();if(p||l==="application"&&(q==="DTLS/SCTP"||q==="UDP/DTLS/SCTP")){h.transceivers[H]={mid:Z,kind:l,protocol:q,rejected:!0};return}!p&&h.transceivers[H]&&h.transceivers[H].rejected&&(h.transceivers[H]=h._createTransceiver(l,!0));var O,j,gA,QA,CA,EA,BA,W,$,z=B.parseRtpParameters(d),MA,kA;p||(MA=B.getIceParameters(d,k),kA=B.getDtlsParameters(d,k),kA.role="client"),BA=B.parseRtpEncodingParameters(d);var NA=B.parseRtcpParameters(d),JA=B.matchPrefix(d,"a=end-of-candidates",k).length>0,iA=B.matchPrefix(d,"a=candidate:").map(function(UA){return B.parseCandidate(UA)}).filter(function(UA){return UA.component===1});if((n.type==="offer"||n.type==="answer")&&!p&&U&&H>0&&h.transceivers[H]&&(h._disposeIceAndDtlsTransports(H),h.transceivers[H].iceGatherer=h.transceivers[0].iceGatherer,h.transceivers[H].iceTransport=h.transceivers[0].iceTransport,h.transceivers[H].dtlsTransport=h.transceivers[0].dtlsTransport,h.transceivers[H].rtpSender&&h.transceivers[H].rtpSender.setTransport(h.transceivers[0].dtlsTransport),h.transceivers[H].rtpReceiver&&h.transceivers[H].rtpReceiver.setTransport(h.transceivers[0].dtlsTransport)),n.type==="offer"&&!p){O=h.transceivers[H]||h._createTransceiver(l),O.mid=Z,O.iceGatherer||(O.iceGatherer=h._createIceGatherer(H,U)),iA.length&&O.iceTransport.state==="new"&&(JA&&(!U||H===0)?O.iceTransport.setRemoteCandidates(iA):iA.forEach(function(UA){E(O.iceTransport,UA)})),W=D.RTCRtpReceiver.getCapabilities(l),o<15019&&(W.codecs=W.codecs.filter(function(UA){return UA.name!=="rtx"})),EA=O.sendEncodingParameters||[{ssrc:(2*H+2)*1001}];var oA=!1;if(m==="sendrecv"||m==="sendonly"){if(oA=!O.rtpReceiver,CA=O.rtpReceiver||new D.RTCRtpReceiver(O.dtlsTransport,l),oA){var rA;$=CA.track,T&&T.stream==="-"||(T?(G[T.stream]||(G[T.stream]=new D.MediaStream,Object.defineProperty(G[T.stream],"id",{get:function(){return T.stream}})),Object.defineProperty($,"id",{get:function(){return T.track}}),rA=G[T.stream]):(G.default||(G.default=new D.MediaStream),rA=G.default)),rA&&(s($,rA),O.associatedRemoteMediaStreams.push(rA)),r.push([$,CA,rA])}}else O.rtpReceiver&&O.rtpReceiver.track&&(O.associatedRemoteMediaStreams.forEach(function(UA){var MI=UA.getTracks().find(function(WI){return WI.id===O.rtpReceiver.track.id});MI&&t(MI,UA)}),O.associatedRemoteMediaStreams=[]);O.localCapabilities=W,O.remoteCapabilities=z,O.rtpReceiver=CA,O.rtcpParameters=NA,O.sendEncodingParameters=EA,O.recvEncodingParameters=BA,h._transceive(h.transceivers[H],!1,oA)}else if(n.type==="answer"&&!p){O=h.transceivers[H],j=O.iceGatherer,gA=O.iceTransport,QA=O.dtlsTransport,CA=O.rtpReceiver,EA=O.sendEncodingParameters,W=O.localCapabilities,h.transceivers[H].recvEncodingParameters=BA,h.transceivers[H].remoteCapabilities=z,h.transceivers[H].rtcpParameters=NA,iA.length&&gA.state==="new"&&((J||JA)&&(!U||H===0)?gA.setRemoteCandidates(iA):iA.forEach(function(UA){E(O.iceTransport,UA)})),(!U||H===0)&&(gA.state==="new"&&gA.start(j,MA,"controlling"),QA.state==="new"&&QA.start(kA));var qI=Q(O.localCapabilities,O.remoteCapabilities),ZA=qI.codecs.filter(function(UA){return UA.name.toLowerCase()==="rtx"}).length;!ZA&&O.sendEncodingParameters[0].rtx&&delete O.sendEncodingParameters[0].rtx,h._transceive(O,m==="sendrecv"||m==="recvonly",m==="sendrecv"||m==="sendonly"),CA&&(m==="sendrecv"||m==="sendonly")?($=CA.track,T?(G[T.stream]||(G[T.stream]=new D.MediaStream),s($,G[T.stream]),r.push([$,CA,G[T.stream]])):(G.default||(G.default=new D.MediaStream),s($,G.default),r.push([$,CA,G.default]))):delete O.rtpReceiver}}),h._dtlsRole===void 0&&(h._dtlsRole=n.type==="offer"?"active":"passive"),h._remoteDescription={type:n.type,sdp:n.sdp},n.type==="offer"?h._updateSignalingState("have-remote-offer"):h._updateSignalingState("stable"),Object.keys(G).forEach(function(d){var H=G[d];if(H.getTracks().length){if(h.remoteStreams.indexOf(H)===-1){h.remoteStreams.push(H);var f=new Event("addstream");f.stream=H,D.setTimeout(function(){h._dispatchEvent("addstream",f)})}r.forEach(function(l){var p=l[0],q=l[1];H.id===l[2].id&&w(h,p,q,[H])})}}),r.forEach(function(d){d[2]||w(h,d[0],d[1],[])}),D.setTimeout(function(){h&&h.transceivers&&h.transceivers.forEach(function(d){d.iceTransport&&d.iceTransport.state==="new"&&d.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),d.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},a.prototype.close=function(){this.transceivers.forEach(function(n){n.iceTransport&&n.iceTransport.stop(),n.dtlsTransport&&n.dtlsTransport.stop(),n.rtpSender&&n.rtpSender.stop(),n.rtpReceiver&&n.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState("closed")},a.prototype._updateSignalingState=function(n){this.signalingState=n;var h=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",h)},a.prototype._maybeFireNegotiationNeeded=function(){var n=this;this.signalingState!=="stable"||this.needNegotiation===!0||(this.needNegotiation=!0,D.setTimeout(function(){if(n.needNegotiation){n.needNegotiation=!1;var h=new Event("negotiationneeded");n._dispatchEvent("negotiationneeded",h)}},0))},a.prototype._updateIceConnectionState=function(){var n,h={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(r){r.iceTransport&&!r.rejected&&h[r.iceTransport.state]++}),n="new",h.failed>0?n="failed":h.checking>0?n="checking":h.disconnected>0?n="disconnected":h.new>0?n="new":h.connected>0?n="connected":h.completed>0&&(n="completed"),n!==this.iceConnectionState){this.iceConnectionState=n;var G=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",G)}},a.prototype._updateConnectionState=function(){var n,h={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(r){r.iceTransport&&r.dtlsTransport&&!r.rejected&&(h[r.iceTransport.state]++,h[r.dtlsTransport.state]++)}),h.connected+=h.completed,n="new",h.failed>0?n="failed":h.connecting>0?n="connecting":h.disconnected>0?n="disconnected":h.new>0?n="new":h.connected>0&&(n="connected"),n!==this.connectionState){this.connectionState=n;var G=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",G)}},a.prototype.createOffer=function(){var n=this;if(n._isClosed)return Promise.reject(i("InvalidStateError","Can not call createOffer after close"));var h=n.transceivers.filter(function(J){return J.kind==="audio"}).length,G=n.transceivers.filter(function(J){return J.kind==="video"}).length,r=arguments[0];if(r){if(r.mandatory||r.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");r.offerToReceiveAudio!==void 0&&(r.offerToReceiveAudio===!0?h=1:r.offerToReceiveAudio===!1?h=0:h=r.offerToReceiveAudio),r.offerToReceiveVideo!==void 0&&(r.offerToReceiveVideo===!0?G=1:r.offerToReceiveVideo===!1?G=0:G=r.offerToReceiveVideo)}for(n.transceivers.forEach(function(J){J.kind==="audio"?(h--,h<0&&(J.wantReceive=!1)):J.kind==="video"&&(G--,G<0&&(J.wantReceive=!1))});h>0||G>0;)h>0&&(n._createTransceiver("audio"),h--),G>0&&(n._createTransceiver("video"),G--);var M=B.writeSessionBoilerplate(n._sdpSessionId,n._sdpSessionVersion++);n.transceivers.forEach(function(J,U){var Y=J.track,d=J.kind,H=J.mid||B.generateIdentifier();J.mid=H,J.iceGatherer||(J.iceGatherer=n._createIceGatherer(U,n.usingBundle));var f=D.RTCRtpSender.getCapabilities(d);o<15019&&(f.codecs=f.codecs.filter(function(p){return p.name!=="rtx"})),f.codecs.forEach(function(p){p.name==="H264"&&p.parameters["level-asymmetry-allowed"]===void 0&&(p.parameters["level-asymmetry-allowed"]="1"),J.remoteCapabilities&&J.remoteCapabilities.codecs&&J.remoteCapabilities.codecs.forEach(function(q){p.name.toLowerCase()===q.name.toLowerCase()&&p.clockRate===q.clockRate&&(p.preferredPayloadType=q.payloadType)})}),f.headerExtensions.forEach(function(p){var q=J.remoteCapabilities&&J.remoteCapabilities.headerExtensions||[];q.forEach(function(m){p.uri===m.uri&&(p.id=m.id)})});var l=J.sendEncodingParameters||[{ssrc:(2*U+1)*1001}];Y&&o>=15019&&d==="video"&&!l[0].rtx&&(l[0].rtx={ssrc:l[0].ssrc+1}),J.wantReceive&&(J.rtpReceiver=new D.RTCRtpReceiver(J.dtlsTransport,d)),J.localCapabilities=f,J.sendEncodingParameters=l}),n._config.bundlePolicy!=="max-compat"&&(M+="a=group:BUNDLE "+n.transceivers.map(function(J){return J.mid}).join(" ")+`\r
1089
- `),M+=`a=ice-options:trickle\r
1090
- `,n.transceivers.forEach(function(J,U){M+=I(J,J.localCapabilities,"offer",J.stream,n._dtlsRole),M+=`a=rtcp-rsize\r
1091
- `,J.iceGatherer&&n.iceGatheringState!=="new"&&(U===0||!n.usingBundle)&&(J.iceGatherer.getLocalCandidates().forEach(function(Y){Y.component=1,M+="a="+B.writeCandidate(Y)+`\r
1092
- `}),J.iceGatherer.state==="completed"&&(M+=`a=end-of-candidates\r
1093
- `))});var k=new D.RTCSessionDescription({type:"offer",sdp:M});return Promise.resolve(k)},a.prototype.createAnswer=function(){var n=this;if(n._isClosed)return Promise.reject(i("InvalidStateError","Can not call createAnswer after close"));if(!(n.signalingState==="have-remote-offer"||n.signalingState==="have-local-pranswer"))return Promise.reject(i("InvalidStateError","Can not call createAnswer in signalingState "+n.signalingState));var h=B.writeSessionBoilerplate(n._sdpSessionId,n._sdpSessionVersion++);n.usingBundle&&(h+="a=group:BUNDLE "+n.transceivers.map(function(M){return M.mid}).join(" ")+`\r
1086
+ `),a}function g(D,o){var s=!1;return D=JSON.parse(JSON.stringify(D)),D.filter(function(t){if(t&&(t.urls||t.url)){var w=t.urls||t.url;t.url&&!t.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var a=typeof w=="string";return a&&(w=[w]),w=w.filter(function(y){var r=y.indexOf("turn:")===0&&y.indexOf("transport=udp")!==-1&&y.indexOf("turn:[")===-1&&!s;return r?(s=!0,!0):y.indexOf("stun:")===0&&o>=14393&&y.indexOf("?transport=udp")===-1}),delete t.url,t.urls=a?w[0]:w,!!w.length}})}function Q(D,o){var s={codecs:[],headerExtensions:[],fecMechanisms:[]},t=function(a,y){a=parseInt(a,10);for(var r=0;r<y.length;r++)if(y[r].payloadType===a||y[r].preferredPayloadType===a)return y[r]},w=function(a,y,r,c){var h=t(a.parameters.apt,r),G=t(y.parameters.apt,c);return h&&G&&h.name.toLowerCase()===G.name.toLowerCase()};return D.codecs.forEach(function(a){for(var y=0;y<o.codecs.length;y++){var r=o.codecs[y];if(a.name.toLowerCase()===r.name.toLowerCase()&&a.clockRate===r.clockRate){if(a.name.toLowerCase()==="rtx"&&a.parameters&&r.parameters.apt&&!w(a,r,D.codecs,o.codecs))continue;r=JSON.parse(JSON.stringify(r)),r.numChannels=Math.min(a.numChannels,r.numChannels),s.codecs.push(r),r.rtcpFeedback=r.rtcpFeedback.filter(function(c){for(var h=0;h<a.rtcpFeedback.length;h++)if(a.rtcpFeedback[h].type===c.type&&a.rtcpFeedback[h].parameter===c.parameter)return!0;return!1});break}}}),D.headerExtensions.forEach(function(a){for(var y=0;y<o.headerExtensions.length;y++){var r=o.headerExtensions[y];if(a.uri===r.uri){s.headerExtensions.push(r);break}}}),s}function C(D,o,s){return{offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[o][D].indexOf(s)!==-1}function E(D,o){var s=D.getRemoteCandidates().find(function(t){return o.foundation===t.foundation&&o.ip===t.ip&&o.port===t.port&&o.priority===t.priority&&o.protocol===t.protocol&&o.type===t.type});return s||D.addRemoteCandidate(o),!s}function i(D,o){var s=new Error(o);return s.name=D,s.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[D],s}return Li=function(D,o){function s(c,h){h.addTrack(c),h.dispatchEvent(new D.MediaStreamTrackEvent("addtrack",{track:c}))}function t(c,h){h.removeTrack(c),h.dispatchEvent(new D.MediaStreamTrackEvent("removetrack",{track:c}))}function w(c,h,G,R){var N=new Event("track");N.track=h,N.receiver=G,N.transceiver={receiver:G},N.streams=R,D.setTimeout(function(){c._dispatchEvent("track",N)})}var a=function(c){var h=this,G=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach(function(N){h[N]=G[N].bind(G)}),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",c=JSON.parse(JSON.stringify(c||{})),this.usingBundle=c.bundlePolicy==="max-bundle",c.rtcpMuxPolicy==="negotiate")throw i("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(c.rtcpMuxPolicy||(c.rtcpMuxPolicy="require"),c.iceTransportPolicy){case"all":case"relay":break;default:c.iceTransportPolicy="all";break}switch(c.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:c.bundlePolicy="balanced";break}if(c.iceServers=g(c.iceServers||[],o),this._iceGatherers=[],c.iceCandidatePoolSize)for(var R=c.iceCandidatePoolSize;R>0;R--)this._iceGatherers.push(new D.RTCIceGatherer({iceServers:c.iceServers,gatherPolicy:c.iceTransportPolicy}));else c.iceCandidatePoolSize=0;this._config=c,this.transceivers=[],this._sdpSessionId=B.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(a.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(a.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),a.prototype.onicecandidate=null,a.prototype.onaddstream=null,a.prototype.ontrack=null,a.prototype.onremovestream=null,a.prototype.onsignalingstatechange=null,a.prototype.oniceconnectionstatechange=null,a.prototype.onconnectionstatechange=null,a.prototype.onicegatheringstatechange=null,a.prototype.onnegotiationneeded=null,a.prototype.ondatachannel=null,a.prototype._dispatchEvent=function(c,h){this._isClosed||(this.dispatchEvent(h),typeof this["on"+c]=="function"&&this["on"+c](h))},a.prototype._emitGatheringStateChange=function(){var c=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",c)},a.prototype.getConfiguration=function(){return this._config},a.prototype.getLocalStreams=function(){return this.localStreams},a.prototype.getRemoteStreams=function(){return this.remoteStreams},a.prototype._createTransceiver=function(c,h){var G=this.transceivers.length>0,R={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:c,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&G)R.iceTransport=this.transceivers[0].iceTransport,R.dtlsTransport=this.transceivers[0].dtlsTransport;else{var N=this._createIceAndDtlsTransports();R.iceTransport=N.iceTransport,R.dtlsTransport=N.dtlsTransport}return h||this.transceivers.push(R),R},a.prototype.addTrack=function(c,h){if(this._isClosed)throw i("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var G=this.transceivers.find(function(k){return k.track===c});if(G)throw i("InvalidAccessError","Track already exists.");for(var R,N=0;N<this.transceivers.length;N++)!this.transceivers[N].track&&this.transceivers[N].kind===c.kind&&(R=this.transceivers[N]);return R||(R=this._createTransceiver(c.kind)),this._maybeFireNegotiationNeeded(),this.localStreams.indexOf(h)===-1&&this.localStreams.push(h),R.track=c,R.stream=h,R.rtpSender=new D.RTCRtpSender(c,R.dtlsTransport),R.rtpSender},a.prototype.addStream=function(c){var h=this;if(o>=15025)c.getTracks().forEach(function(R){h.addTrack(R,c)});else{var G=c.clone();c.getTracks().forEach(function(R,N){var k=G.getTracks()[N];R.addEventListener("enabled",function(J){k.enabled=J.enabled})}),G.getTracks().forEach(function(R){h.addTrack(R,G)})}},a.prototype.removeTrack=function(c){if(this._isClosed)throw i("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(c instanceof D.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var h=this.transceivers.find(function(N){return N.rtpSender===c});if(!h)throw i("InvalidAccessError","Sender was not created by this connection.");var G=h.stream;h.rtpSender.stop(),h.rtpSender=null,h.track=null,h.stream=null;var R=this.transceivers.map(function(N){return N.stream});R.indexOf(G)===-1&&this.localStreams.indexOf(G)>-1&&this.localStreams.splice(this.localStreams.indexOf(G),1),this._maybeFireNegotiationNeeded()},a.prototype.removeStream=function(c){var h=this;c.getTracks().forEach(function(G){var R=h.getSenders().find(function(N){return N.track===G});R&&h.removeTrack(R)})},a.prototype.getSenders=function(){return this.transceivers.filter(function(c){return!!c.rtpSender}).map(function(c){return c.rtpSender})},a.prototype.getReceivers=function(){return this.transceivers.filter(function(c){return!!c.rtpReceiver}).map(function(c){return c.rtpReceiver})},a.prototype._createIceGatherer=function(c,h){var G=this;if(h&&c>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var R=new D.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(R,"state",{value:"new",writable:!0}),this.transceivers[c].bufferedCandidateEvents=[],this.transceivers[c].bufferCandidates=function(N){var k=!N.candidate||Object.keys(N.candidate).length===0;R.state=k?"completed":"gathering",G.transceivers[c].bufferedCandidateEvents!==null&&G.transceivers[c].bufferedCandidateEvents.push(N)},R.addEventListener("localcandidate",this.transceivers[c].bufferCandidates),R},a.prototype._gather=function(c,h){var G=this,R=this.transceivers[h].iceGatherer;if(!R.onlocalcandidate){var N=this.transceivers[h].bufferedCandidateEvents;this.transceivers[h].bufferedCandidateEvents=null,R.removeEventListener("localcandidate",this.transceivers[h].bufferCandidates),R.onlocalcandidate=function(k){if(!(G.usingBundle&&h>0)){var J=new Event("icecandidate");J.candidate={sdpMid:c,sdpMLineIndex:h};var U=k.candidate,H=!U||Object.keys(U).length===0;if(H)(R.state==="new"||R.state==="gathering")&&(R.state="completed");else{R.state==="new"&&(R.state="gathering"),U.component=1,U.ufrag=R.getLocalParameters().usernameFragment;var d=B.writeCandidate(U);J.candidate=Object.assign(J.candidate,B.parseCandidate(d)),J.candidate.candidate=d,J.candidate.toJSON=function(){return{candidate:J.candidate.candidate,sdpMid:J.candidate.sdpMid,sdpMLineIndex:J.candidate.sdpMLineIndex,usernameFragment:J.candidate.usernameFragment}}}var Y=B.getMediaSections(G._localDescription.sdp);H?Y[J.candidate.sdpMLineIndex]+=`a=end-of-candidates\r
1087
+ `:Y[J.candidate.sdpMLineIndex]+="a="+J.candidate.candidate+`\r
1088
+ `,G._localDescription.sdp=B.getDescription(G._localDescription.sdp)+Y.join("");var f=G.transceivers.every(function(l){return l.iceGatherer&&l.iceGatherer.state==="completed"});G.iceGatheringState!=="gathering"&&(G.iceGatheringState="gathering",G._emitGatheringStateChange()),H||G._dispatchEvent("icecandidate",J),f&&(G._dispatchEvent("icecandidate",new Event("icecandidate")),G.iceGatheringState="complete",G._emitGatheringStateChange())}},D.setTimeout(function(){N.forEach(function(k){R.onlocalcandidate(k)})},0)}},a.prototype._createIceAndDtlsTransports=function(){var c=this,h=new D.RTCIceTransport(null);h.onicestatechange=function(){c._updateIceConnectionState(),c._updateConnectionState()};var G=new D.RTCDtlsTransport(h);return G.ondtlsstatechange=function(){c._updateConnectionState()},G.onerror=function(){Object.defineProperty(G,"state",{value:"failed",writable:!0}),c._updateConnectionState()},{iceTransport:h,dtlsTransport:G}},a.prototype._disposeIceAndDtlsTransports=function(c){var h=this.transceivers[c].iceGatherer;h&&(delete h.onlocalcandidate,delete this.transceivers[c].iceGatherer);var G=this.transceivers[c].iceTransport;G&&(delete G.onicestatechange,delete this.transceivers[c].iceTransport);var R=this.transceivers[c].dtlsTransport;R&&(delete R.ondtlsstatechange,delete R.onerror,delete this.transceivers[c].dtlsTransport)},a.prototype._transceive=function(c,h,G){var R=Q(c.localCapabilities,c.remoteCapabilities);h&&c.rtpSender&&(R.encodings=c.sendEncodingParameters,R.rtcp={cname:B.localCName,compound:c.rtcpParameters.compound},c.recvEncodingParameters.length&&(R.rtcp.ssrc=c.recvEncodingParameters[0].ssrc),c.rtpSender.send(R)),G&&c.rtpReceiver&&R.codecs.length>0&&(c.kind==="video"&&c.recvEncodingParameters&&o<15019&&c.recvEncodingParameters.forEach(function(N){delete N.rtx}),c.recvEncodingParameters.length?R.encodings=c.recvEncodingParameters:R.encodings=[{}],R.rtcp={compound:c.rtcpParameters.compound},c.rtcpParameters.cname&&(R.rtcp.cname=c.rtcpParameters.cname),c.sendEncodingParameters.length&&(R.rtcp.ssrc=c.sendEncodingParameters[0].ssrc),c.rtpReceiver.receive(R))},a.prototype.setLocalDescription=function(c){var h=this;if(["offer","answer"].indexOf(c.type)===-1)return Promise.reject(i("TypeError",'Unsupported type "'+c.type+'"'));if(!C("setLocalDescription",c.type,h.signalingState)||h._isClosed)return Promise.reject(i("InvalidStateError","Can not set local "+c.type+" in state "+h.signalingState));var G,R;if(c.type==="offer")G=B.splitSections(c.sdp),R=G.shift(),G.forEach(function(k,J){var U=B.parseRtpParameters(k);h.transceivers[J].localCapabilities=U}),h.transceivers.forEach(function(k,J){h._gather(k.mid,J)});else if(c.type==="answer"){G=B.splitSections(h._remoteDescription.sdp),R=G.shift();var N=B.matchPrefix(R,"a=ice-lite").length>0;G.forEach(function(k,J){var U=h.transceivers[J],H=U.iceGatherer,d=U.iceTransport,Y=U.dtlsTransport,f=U.localCapabilities,l=U.remoteCapabilities,p=B.isRejected(k)&&B.matchPrefix(k,"a=bundle-only").length===0;if(!p&&!U.rejected){var q=B.getIceParameters(k,R),m=B.getDtlsParameters(k,R);N&&(m.role="server"),(!h.usingBundle||J===0)&&(h._gather(U.mid,J),d.state==="new"&&d.start(H,q,N?"controlling":"controlled"),Y.state==="new"&&Y.start(m));var T=Q(f,l);h._transceive(U,T.codecs.length>0,!1)}})}return h._localDescription={type:c.type,sdp:c.sdp},c.type==="offer"?h._updateSignalingState("have-local-offer"):h._updateSignalingState("stable"),Promise.resolve()},a.prototype.setRemoteDescription=function(c){var h=this;if(["offer","answer"].indexOf(c.type)===-1)return Promise.reject(i("TypeError",'Unsupported type "'+c.type+'"'));if(!C("setRemoteDescription",c.type,h.signalingState)||h._isClosed)return Promise.reject(i("InvalidStateError","Can not set remote "+c.type+" in state "+h.signalingState));var G={};h.remoteStreams.forEach(function(d){G[d.id]=d});var R=[],N=B.splitSections(c.sdp),k=N.shift(),J=B.matchPrefix(k,"a=ice-lite").length>0,U=B.matchPrefix(k,"a=group:BUNDLE ").length>0;h.usingBundle=U;var H=B.matchPrefix(k,"a=ice-options:")[0];return H?h.canTrickleIceCandidates=H.substr(14).split(" ").indexOf("trickle")>=0:h.canTrickleIceCandidates=!1,N.forEach(function(d,Y){var f=B.splitLines(d),l=B.getKind(d),p=B.isRejected(d)&&B.matchPrefix(d,"a=bundle-only").length===0,q=f[0].substr(2).split(" ")[2],m=B.getDirection(d,k),T=B.parseMsid(d),Z=B.getMid(d)||B.generateIdentifier();if(p||l==="application"&&(q==="DTLS/SCTP"||q==="UDP/DTLS/SCTP")){h.transceivers[Y]={mid:Z,kind:l,protocol:q,rejected:!0};return}!p&&h.transceivers[Y]&&h.transceivers[Y].rejected&&(h.transceivers[Y]=h._createTransceiver(l,!0));var O,j,gA,QA,CA,EA,BA,W,$,z=B.parseRtpParameters(d),MA,kA;p||(MA=B.getIceParameters(d,k),kA=B.getDtlsParameters(d,k),kA.role="client"),BA=B.parseRtpEncodingParameters(d);var NA=B.parseRtcpParameters(d),JA=B.matchPrefix(d,"a=end-of-candidates",k).length>0,iA=B.matchPrefix(d,"a=candidate:").map(function(UA){return B.parseCandidate(UA)}).filter(function(UA){return UA.component===1});if((c.type==="offer"||c.type==="answer")&&!p&&U&&Y>0&&h.transceivers[Y]&&(h._disposeIceAndDtlsTransports(Y),h.transceivers[Y].iceGatherer=h.transceivers[0].iceGatherer,h.transceivers[Y].iceTransport=h.transceivers[0].iceTransport,h.transceivers[Y].dtlsTransport=h.transceivers[0].dtlsTransport,h.transceivers[Y].rtpSender&&h.transceivers[Y].rtpSender.setTransport(h.transceivers[0].dtlsTransport),h.transceivers[Y].rtpReceiver&&h.transceivers[Y].rtpReceiver.setTransport(h.transceivers[0].dtlsTransport)),c.type==="offer"&&!p){O=h.transceivers[Y]||h._createTransceiver(l),O.mid=Z,O.iceGatherer||(O.iceGatherer=h._createIceGatherer(Y,U)),iA.length&&O.iceTransport.state==="new"&&(JA&&(!U||Y===0)?O.iceTransport.setRemoteCandidates(iA):iA.forEach(function(UA){E(O.iceTransport,UA)})),W=D.RTCRtpReceiver.getCapabilities(l),o<15019&&(W.codecs=W.codecs.filter(function(UA){return UA.name!=="rtx"})),EA=O.sendEncodingParameters||[{ssrc:(2*Y+2)*1001}];var oA=!1;if(m==="sendrecv"||m==="sendonly"){if(oA=!O.rtpReceiver,CA=O.rtpReceiver||new D.RTCRtpReceiver(O.dtlsTransport,l),oA){var rA;$=CA.track,T&&T.stream==="-"||(T?(G[T.stream]||(G[T.stream]=new D.MediaStream,Object.defineProperty(G[T.stream],"id",{get:function(){return T.stream}})),Object.defineProperty($,"id",{get:function(){return T.track}}),rA=G[T.stream]):(G.default||(G.default=new D.MediaStream),rA=G.default)),rA&&(s($,rA),O.associatedRemoteMediaStreams.push(rA)),R.push([$,CA,rA])}}else O.rtpReceiver&&O.rtpReceiver.track&&(O.associatedRemoteMediaStreams.forEach(function(UA){var MI=UA.getTracks().find(function(WI){return WI.id===O.rtpReceiver.track.id});MI&&t(MI,UA)}),O.associatedRemoteMediaStreams=[]);O.localCapabilities=W,O.remoteCapabilities=z,O.rtpReceiver=CA,O.rtcpParameters=NA,O.sendEncodingParameters=EA,O.recvEncodingParameters=BA,h._transceive(h.transceivers[Y],!1,oA)}else if(c.type==="answer"&&!p){O=h.transceivers[Y],j=O.iceGatherer,gA=O.iceTransport,QA=O.dtlsTransport,CA=O.rtpReceiver,EA=O.sendEncodingParameters,W=O.localCapabilities,h.transceivers[Y].recvEncodingParameters=BA,h.transceivers[Y].remoteCapabilities=z,h.transceivers[Y].rtcpParameters=NA,iA.length&&gA.state==="new"&&((J||JA)&&(!U||Y===0)?gA.setRemoteCandidates(iA):iA.forEach(function(UA){E(O.iceTransport,UA)})),(!U||Y===0)&&(gA.state==="new"&&gA.start(j,MA,"controlling"),QA.state==="new"&&QA.start(kA));var qI=Q(O.localCapabilities,O.remoteCapabilities),ZA=qI.codecs.filter(function(UA){return UA.name.toLowerCase()==="rtx"}).length;!ZA&&O.sendEncodingParameters[0].rtx&&delete O.sendEncodingParameters[0].rtx,h._transceive(O,m==="sendrecv"||m==="recvonly",m==="sendrecv"||m==="sendonly"),CA&&(m==="sendrecv"||m==="sendonly")?($=CA.track,T?(G[T.stream]||(G[T.stream]=new D.MediaStream),s($,G[T.stream]),R.push([$,CA,G[T.stream]])):(G.default||(G.default=new D.MediaStream),s($,G.default),R.push([$,CA,G.default]))):delete O.rtpReceiver}}),h._dtlsRole===void 0&&(h._dtlsRole=c.type==="offer"?"active":"passive"),h._remoteDescription={type:c.type,sdp:c.sdp},c.type==="offer"?h._updateSignalingState("have-remote-offer"):h._updateSignalingState("stable"),Object.keys(G).forEach(function(d){var Y=G[d];if(Y.getTracks().length){if(h.remoteStreams.indexOf(Y)===-1){h.remoteStreams.push(Y);var f=new Event("addstream");f.stream=Y,D.setTimeout(function(){h._dispatchEvent("addstream",f)})}R.forEach(function(l){var p=l[0],q=l[1];Y.id===l[2].id&&w(h,p,q,[Y])})}}),R.forEach(function(d){d[2]||w(h,d[0],d[1],[])}),D.setTimeout(function(){h&&h.transceivers&&h.transceivers.forEach(function(d){d.iceTransport&&d.iceTransport.state==="new"&&d.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),d.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},a.prototype.close=function(){this.transceivers.forEach(function(c){c.iceTransport&&c.iceTransport.stop(),c.dtlsTransport&&c.dtlsTransport.stop(),c.rtpSender&&c.rtpSender.stop(),c.rtpReceiver&&c.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState("closed")},a.prototype._updateSignalingState=function(c){this.signalingState=c;var h=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",h)},a.prototype._maybeFireNegotiationNeeded=function(){var c=this;this.signalingState!=="stable"||this.needNegotiation===!0||(this.needNegotiation=!0,D.setTimeout(function(){if(c.needNegotiation){c.needNegotiation=!1;var h=new Event("negotiationneeded");c._dispatchEvent("negotiationneeded",h)}},0))},a.prototype._updateIceConnectionState=function(){var c,h={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(R){R.iceTransport&&!R.rejected&&h[R.iceTransport.state]++}),c="new",h.failed>0?c="failed":h.checking>0?c="checking":h.disconnected>0?c="disconnected":h.new>0?c="new":h.connected>0?c="connected":h.completed>0&&(c="completed"),c!==this.iceConnectionState){this.iceConnectionState=c;var G=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",G)}},a.prototype._updateConnectionState=function(){var c,h={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(R){R.iceTransport&&R.dtlsTransport&&!R.rejected&&(h[R.iceTransport.state]++,h[R.dtlsTransport.state]++)}),h.connected+=h.completed,c="new",h.failed>0?c="failed":h.connecting>0?c="connecting":h.disconnected>0?c="disconnected":h.new>0?c="new":h.connected>0&&(c="connected"),c!==this.connectionState){this.connectionState=c;var G=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",G)}},a.prototype.createOffer=function(){var c=this;if(c._isClosed)return Promise.reject(i("InvalidStateError","Can not call createOffer after close"));var h=c.transceivers.filter(function(J){return J.kind==="audio"}).length,G=c.transceivers.filter(function(J){return J.kind==="video"}).length,R=arguments[0];if(R){if(R.mandatory||R.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");R.offerToReceiveAudio!==void 0&&(R.offerToReceiveAudio===!0?h=1:R.offerToReceiveAudio===!1?h=0:h=R.offerToReceiveAudio),R.offerToReceiveVideo!==void 0&&(R.offerToReceiveVideo===!0?G=1:R.offerToReceiveVideo===!1?G=0:G=R.offerToReceiveVideo)}for(c.transceivers.forEach(function(J){J.kind==="audio"?(h--,h<0&&(J.wantReceive=!1)):J.kind==="video"&&(G--,G<0&&(J.wantReceive=!1))});h>0||G>0;)h>0&&(c._createTransceiver("audio"),h--),G>0&&(c._createTransceiver("video"),G--);var N=B.writeSessionBoilerplate(c._sdpSessionId,c._sdpSessionVersion++);c.transceivers.forEach(function(J,U){var H=J.track,d=J.kind,Y=J.mid||B.generateIdentifier();J.mid=Y,J.iceGatherer||(J.iceGatherer=c._createIceGatherer(U,c.usingBundle));var f=D.RTCRtpSender.getCapabilities(d);o<15019&&(f.codecs=f.codecs.filter(function(p){return p.name!=="rtx"})),f.codecs.forEach(function(p){p.name==="H264"&&p.parameters["level-asymmetry-allowed"]===void 0&&(p.parameters["level-asymmetry-allowed"]="1"),J.remoteCapabilities&&J.remoteCapabilities.codecs&&J.remoteCapabilities.codecs.forEach(function(q){p.name.toLowerCase()===q.name.toLowerCase()&&p.clockRate===q.clockRate&&(p.preferredPayloadType=q.payloadType)})}),f.headerExtensions.forEach(function(p){var q=J.remoteCapabilities&&J.remoteCapabilities.headerExtensions||[];q.forEach(function(m){p.uri===m.uri&&(p.id=m.id)})});var l=J.sendEncodingParameters||[{ssrc:(2*U+1)*1001}];H&&o>=15019&&d==="video"&&!l[0].rtx&&(l[0].rtx={ssrc:l[0].ssrc+1}),J.wantReceive&&(J.rtpReceiver=new D.RTCRtpReceiver(J.dtlsTransport,d)),J.localCapabilities=f,J.sendEncodingParameters=l}),c._config.bundlePolicy!=="max-compat"&&(N+="a=group:BUNDLE "+c.transceivers.map(function(J){return J.mid}).join(" ")+`\r
1089
+ `),N+=`a=ice-options:trickle\r
1090
+ `,c.transceivers.forEach(function(J,U){N+=I(J,J.localCapabilities,"offer",J.stream,c._dtlsRole),N+=`a=rtcp-rsize\r
1091
+ `,J.iceGatherer&&c.iceGatheringState!=="new"&&(U===0||!c.usingBundle)&&(J.iceGatherer.getLocalCandidates().forEach(function(H){H.component=1,N+="a="+B.writeCandidate(H)+`\r
1092
+ `}),J.iceGatherer.state==="completed"&&(N+=`a=end-of-candidates\r
1093
+ `))});var k=new D.RTCSessionDescription({type:"offer",sdp:N});return Promise.resolve(k)},a.prototype.createAnswer=function(){var c=this;if(c._isClosed)return Promise.reject(i("InvalidStateError","Can not call createAnswer after close"));if(!(c.signalingState==="have-remote-offer"||c.signalingState==="have-local-pranswer"))return Promise.reject(i("InvalidStateError","Can not call createAnswer in signalingState "+c.signalingState));var h=B.writeSessionBoilerplate(c._sdpSessionId,c._sdpSessionVersion++);c.usingBundle&&(h+="a=group:BUNDLE "+c.transceivers.map(function(N){return N.mid}).join(" ")+`\r
1094
1094
  `),h+=`a=ice-options:trickle\r
1095
- `;var G=B.getMediaSections(n._remoteDescription.sdp).length;n.transceivers.forEach(function(M,k){if(!(k+1>G)){if(M.rejected){M.kind==="application"?M.protocol==="DTLS/SCTP"?h+=`m=application 0 DTLS/SCTP 5000\r
1096
- `:h+="m=application 0 "+M.protocol+` webrtc-datachannel\r
1097
- `:M.kind==="audio"?h+=`m=audio 0 UDP/TLS/RTP/SAVPF 0\r
1095
+ `;var G=B.getMediaSections(c._remoteDescription.sdp).length;c.transceivers.forEach(function(N,k){if(!(k+1>G)){if(N.rejected){N.kind==="application"?N.protocol==="DTLS/SCTP"?h+=`m=application 0 DTLS/SCTP 5000\r
1096
+ `:h+="m=application 0 "+N.protocol+` webrtc-datachannel\r
1097
+ `:N.kind==="audio"?h+=`m=audio 0 UDP/TLS/RTP/SAVPF 0\r
1098
1098
  a=rtpmap:0 PCMU/8000\r
1099
- `:M.kind==="video"&&(h+=`m=video 0 UDP/TLS/RTP/SAVPF 120\r
1099
+ `:N.kind==="video"&&(h+=`m=video 0 UDP/TLS/RTP/SAVPF 120\r
1100
1100
  a=rtpmap:120 VP8/90000\r
1101
1101
  `),h+=`c=IN IP4 0.0.0.0\r
1102
1102
  a=inactive\r
1103
- a=mid:`+M.mid+`\r
1104
- `;return}if(M.stream){var J;M.kind==="audio"?J=M.stream.getAudioTracks()[0]:M.kind==="video"&&(J=M.stream.getVideoTracks()[0]),J&&o>=15019&&M.kind==="video"&&!M.sendEncodingParameters[0].rtx&&(M.sendEncodingParameters[0].rtx={ssrc:M.sendEncodingParameters[0].ssrc+1})}var U=Q(M.localCapabilities,M.remoteCapabilities),Y=U.codecs.filter(function(d){return d.name.toLowerCase()==="rtx"}).length;!Y&&M.sendEncodingParameters[0].rtx&&delete M.sendEncodingParameters[0].rtx,h+=I(M,U,"answer",M.stream,n._dtlsRole),M.rtcpParameters&&M.rtcpParameters.reducedSize&&(h+=`a=rtcp-rsize\r
1105
- `)}});var r=new D.RTCSessionDescription({type:"answer",sdp:h});return Promise.resolve(r)},a.prototype.addIceCandidate=function(n){var h=this,G;return n&&!(n.sdpMLineIndex!==void 0||n.sdpMid)?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise(function(r,M){if(h._remoteDescription)if(!n||n.candidate==="")for(var k=0;k<h.transceivers.length&&!(!h.transceivers[k].rejected&&(h.transceivers[k].iceTransport.addRemoteCandidate({}),G=B.getMediaSections(h._remoteDescription.sdp),G[k]+=`a=end-of-candidates\r
1106
- `,h._remoteDescription.sdp=B.getDescription(h._remoteDescription.sdp)+G.join(""),h.usingBundle));k++);else{var J=n.sdpMLineIndex;if(n.sdpMid){for(var U=0;U<h.transceivers.length;U++)if(h.transceivers[U].mid===n.sdpMid){J=U;break}}var Y=h.transceivers[J];if(Y){if(Y.rejected)return r();var d=Object.keys(n.candidate).length>0?B.parseCandidate(n.candidate):{};if(d.protocol==="tcp"&&(d.port===0||d.port===9)||d.component&&d.component!==1)return r();if((J===0||J>0&&Y.iceTransport!==h.transceivers[0].iceTransport)&&!E(Y.iceTransport,d))return M(i("OperationError","Can not add ICE candidate"));var H=n.candidate.trim();H.indexOf("a=")===0&&(H=H.substr(2)),G=B.getMediaSections(h._remoteDescription.sdp),G[J]+="a="+(d.type?H:"end-of-candidates")+`\r
1107
- `,h._remoteDescription.sdp=B.getDescription(h._remoteDescription.sdp)+G.join("")}else return M(i("OperationError","Can not add ICE candidate"))}else return M(i("InvalidStateError","Can not add ICE candidate without a remote description"));r()})},a.prototype.getStats=function(n){if(n&&n instanceof D.MediaStreamTrack){var h=null;if(this.transceivers.forEach(function(r){r.rtpSender&&r.rtpSender.track===n?h=r.rtpSender:r.rtpReceiver&&r.rtpReceiver.track===n&&(h=r.rtpReceiver)}),!h)throw i("InvalidAccessError","Invalid selector.");return h.getStats()}var G=[];return this.transceivers.forEach(function(r){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach(function(M){r[M]&&G.push(r[M].getStats())})}),Promise.all(G).then(function(r){var M=new Map;return r.forEach(function(k){k.forEach(function(J){M.set(J.id,J)})}),M})};var y=["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"];y.forEach(function(n){var h=D[n];if(h&&h.prototype&&h.prototype.getStats){var G=h.prototype.getStats;h.prototype.getStats=function(){return G.apply(this).then(function(r){var M=new Map;return Object.keys(r).forEach(function(k){r[k].type=A(r[k]),M.set(k,r[k])}),M})}}});var R=["createOffer","createAnswer"];return R.forEach(function(n){var h=a.prototype[n];a.prototype[n]=function(){var G=arguments;return typeof G[0]=="function"||typeof G[1]=="function"?h.apply(this,[arguments[2]]).then(function(r){typeof G[0]=="function"&&G[0].apply(null,[r])},function(r){typeof G[1]=="function"&&G[1].apply(null,[r])}):h.apply(this,arguments)}}),R=["setLocalDescription","setRemoteDescription","addIceCandidate"],R.forEach(function(n){var h=a.prototype[n];a.prototype[n]=function(){var G=arguments;return typeof G[1]=="function"||typeof G[2]=="function"?h.apply(this,arguments).then(function(){typeof G[1]=="function"&&G[1].apply(null)},function(r){typeof G[2]=="function"&&G[2].apply(null,[r])}):h.apply(this,arguments)}}),["getStats"].forEach(function(n){var h=a.prototype[n];a.prototype[n]=function(){var G=arguments;return typeof G[1]=="function"?h.apply(this,arguments).then(function(){typeof G[1]=="function"&&G[1].apply(null)}):h.apply(this,arguments)}}),a},Ui}var wc=tc();const ac=VD(wc);function vt(B){const A=B&&B.navigator,I=function(Q){return{name:{PermissionDeniedError:"NotAllowedError"}[Q.name]||Q.name,message:Q.message,constraint:Q.constraint,toString(){return this.name}}},g=A.mediaDevices.getUserMedia.bind(A.mediaDevices);Object.getOwnPropertyDescriptor(A.mediaDevices,"getUserMedia")?.writable&&(A.mediaDevices.getUserMedia=function(Q){return g(Q).catch(C=>Promise.reject(I(C)))})}function Vt(B){"getDisplayMedia"in B.navigator&&B.navigator.mediaDevices&&(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||(B.navigator.mediaDevices.getDisplayMedia=B.navigator.getDisplayMedia.bind(B.navigator)))}function oD(B,A){if(B.RTCIceGatherer&&(B.RTCIceCandidate||(B.RTCIceCandidate=function(Q){return Q}),B.RTCSessionDescription||(B.RTCSessionDescription=function(Q){return Q}),A.version<15025)){const g=Object.getOwnPropertyDescriptor(B.MediaStreamTrack.prototype,"enabled");Object.defineProperty(B.MediaStreamTrack.prototype,"enabled",{set(Q){g.set.call(this,Q);const C=new Event("enabled");C.enabled=Q,this.dispatchEvent(C)}})}B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)&&Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=new B.RTCDtmfSender(this):this.track.kind==="video"&&(this._dtmf=null)),this._dtmf}}),B.RTCDtmfSender&&!B.RTCDTMFSender&&(B.RTCDTMFSender=B.RTCDtmfSender);const I=ac(B,A.version);B.RTCPeerConnection=function(Q){return Q&&Q.iceServers&&(Q.iceServers=sc(Q.iceServers,A.version),ZD("ICE servers after filtering:",Q.iceServers)),new I(Q)},B.RTCPeerConnection.prototype=I.prototype}function Zt(B){B.RTCRtpSender&&!("replaceTrack"in B.RTCRtpSender.prototype)&&(B.RTCRtpSender.prototype.replaceTrack=B.RTCRtpSender.prototype.setTrack)}const is=Object.freeze(Object.defineProperty({__proto__:null,shimGetDisplayMedia:Vt,shimGetUserMedia:vt,shimPeerConnection:oD,shimReplaceTrack:Zt},Symbol.toStringTag,{value:"Module"}));function Wt(B,A){const I=B&&B.navigator,g=B&&B.MediaStreamTrack;if(I.getUserMedia=function(Q,C,E){PE("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),I.mediaDevices.getUserMedia(Q).then(C,E)},!(A.version>55&&"autoGainControl"in I.mediaDevices.getSupportedConstraints())){const Q=function(E,i,D){i in E&&!(D in E)&&(E[D]=E[i],delete E[i])},C=I.mediaDevices.getUserMedia.bind(I.mediaDevices);if(Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(E){return typeof E=="object"&&typeof E.audio=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E.audio,"autoGainControl","mozAutoGainControl"),Q(E.audio,"noiseSuppression","mozNoiseSuppression")),C(E)}),g&&g.prototype.getSettings){const E=g.prototype.getSettings;g.prototype.getSettings=function(){const i=E.apply(this,arguments);return Q(i,"mozAutoGainControl","autoGainControl"),Q(i,"mozNoiseSuppression","noiseSuppression"),i}}if(g&&g.prototype.applyConstraints){const E=g.prototype.applyConstraints;g.prototype.applyConstraints=function(i){return this.kind==="audio"&&typeof i=="object"&&(i=JSON.parse(JSON.stringify(i)),Q(i,"autoGainControl","mozAutoGainControl"),Q(i,"noiseSuppression","mozNoiseSuppression")),E.apply(this,[i])}}}}function ec(B,A){B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||B.navigator.mediaDevices&&(B.navigator.mediaDevices.getDisplayMedia=function(g){if(!(g&&g.video)){const Q=new DOMException("getDisplayMedia without video constraints is undefined");return Q.name="NotFoundError",Q.code=8,Promise.reject(Q)}return g.video===!0?g.video={mediaSource:A}:g.video.mediaSource=A,B.navigator.mediaDevices.getUserMedia(g)})}function jt(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function sD(B,A){if(typeof B!="object"||!(B.RTCPeerConnection||B.mozRTCPeerConnection))return;!B.RTCPeerConnection&&B.mozRTCPeerConnection&&(B.RTCPeerConnection=B.mozRTCPeerConnection),A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const C=B.RTCPeerConnection.prototype[Q],E={[Q](){return arguments[0]=new(Q==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};B.RTCPeerConnection.prototype[Q]=E[Q]});const I={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},g=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[C,E,i]=arguments;return g.apply(this,[C||null]).then(D=>{if(A.version<53&&!E)try{D.forEach(o=>{o.type=I[o.type]||o.type})}catch(o){if(o.name!=="TypeError")throw o;D.forEach((s,t)=>{D.set(t,Object.assign({},s,{type:I[s.type]||s.type}))})}return D}).then(E,i)}}function zt(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpSender.prototype)return;const A=B.RTCPeerConnection.prototype.getSenders;A&&(B.RTCPeerConnection.prototype.getSenders=function(){const Q=A.apply(this,[]);return Q.forEach(C=>C._pc=this),Q});const I=B.RTCPeerConnection.prototype.addTrack;I&&(B.RTCPeerConnection.prototype.addTrack=function(){const Q=I.apply(this,arguments);return Q._pc=this,Q}),B.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function _t(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpReceiver.prototype)return;const A=B.RTCPeerConnection.prototype.getReceivers;A&&(B.RTCPeerConnection.prototype.getReceivers=function(){const g=A.apply(this,[]);return g.forEach(Q=>Q._pc=this),g}),BB(B,"track",I=>(I.receiver._pc=I.srcElement,I)),B.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function $t(B){!B.RTCPeerConnection||"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(I){PE("removeStream","removeTrack"),this.getSenders().forEach(g=>{g.track&&I.getTracks().includes(g.track)&&this.removeTrack(g)})})}function Aw(B){B.DataChannel&&!B.RTCDataChannel&&(B.RTCDataChannel=B.DataChannel)}function Iw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.addTransceiver;A&&(B.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const g=arguments[1],Q=g&&"sendEncodings"in g;Q&&g.sendEncodings.forEach(E=>{if("rid"in E&&!/^[a-z0-9]{0,16}$/i.test(E.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in E&&!(parseFloat(E.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in E&&!(parseFloat(E.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const C=A.apply(this,arguments);if(Q){const{sender:E}=C,i=E.getParameters();(!("encodings"in i)||i.encodings.length===1&&Object.keys(i.encodings[0]).length===0)&&(i.encodings=g.sendEncodings,E.sendEncodings=g.sendEncodings,this.setParametersPromises.push(E.setParameters(i).then(()=>{delete E.sendEncodings}).catch(()=>{delete E.sendEncodings})))}return C})}function gw(B){if(!(typeof B=="object"&&B.RTCRtpSender))return;const A=B.RTCRtpSender.prototype.getParameters;A&&(B.RTCRtpSender.prototype.getParameters=function(){const g=A.apply(this,arguments);return"encodings"in g||(g.encodings=[].concat(this.sendEncodings||[{}])),g})}function Qw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}function Bw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createAnswer;B.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}const Ds=Object.freeze(Object.defineProperty({__proto__:null,shimAddTransceiver:Iw,shimCreateAnswer:Bw,shimCreateOffer:Qw,shimGetDisplayMedia:ec,shimGetParameters:gw,shimGetUserMedia:Wt,shimOnTrack:jt,shimPeerConnection:sD,shimRTCDataChannel:Aw,shimReceiverGetStats:_t,shimRemoveStream:$t,shimSenderGetStats:zt},Symbol.toStringTag,{value:"Module"}));function Cw(B){if(!(typeof B!="object"||!B.RTCPeerConnection)){if("getLocalStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in B.RTCPeerConnection.prototype)){const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addStream=function(g){this._localStreams||(this._localStreams=[]),this._localStreams.includes(g)||this._localStreams.push(g),g.getAudioTracks().forEach(Q=>A.call(this,Q,g)),g.getVideoTracks().forEach(Q=>A.call(this,Q,g))},B.RTCPeerConnection.prototype.addTrack=function(g,...Q){return Q&&Q.forEach(C=>{this._localStreams?this._localStreams.includes(C)||this._localStreams.push(C):this._localStreams=[C]}),A.apply(this,arguments)}}"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(I){this._localStreams||(this._localStreams=[]);const g=this._localStreams.indexOf(I);if(g===-1)return;this._localStreams.splice(g,1);const Q=I.getTracks();this.getSenders().forEach(C=>{Q.includes(C.track)&&this.removeTrack(C)})})}}function Ew(B){if(!(typeof B!="object"||!B.RTCPeerConnection)&&("getRemoteStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in B.RTCPeerConnection.prototype))){Object.defineProperty(B.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(I){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=I),this.addEventListener("track",this._onaddstreampoly=g=>{g.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const C=new Event("addstream");C.stream=Q,this.dispatchEvent(C)})})}});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){const g=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(Q){Q.streams.forEach(C=>{if(g._remoteStreams||(g._remoteStreams=[]),g._remoteStreams.indexOf(C)>=0)return;g._remoteStreams.push(C);const E=new Event("addstream");E.stream=C,g.dispatchEvent(E)})}),A.apply(g,arguments)}}}function iw(B){if(typeof B!="object"||!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype,I=A.createOffer,g=A.createAnswer,Q=A.setLocalDescription,C=A.setRemoteDescription,E=A.addIceCandidate;A.createOffer=function(o,s){const t=arguments.length>=2?arguments[2]:arguments[0],w=I.apply(this,[t]);return s?(w.then(o,s),Promise.resolve()):w},A.createAnswer=function(o,s){const t=arguments.length>=2?arguments[2]:arguments[0],w=g.apply(this,[t]);return s?(w.then(o,s),Promise.resolve()):w};let i=function(D,o,s){const t=Q.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t};A.setLocalDescription=i,i=function(D,o,s){const t=C.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.setRemoteDescription=i,i=function(D,o,s){const t=E.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.addIceCandidate=i}function Dw(B){const A=B&&B.navigator;if(A.mediaDevices&&A.mediaDevices.getUserMedia){const I=A.mediaDevices,g=I.getUserMedia.bind(I);A.mediaDevices.getUserMedia=Q=>g(ow(Q))}!A.getUserMedia&&A.mediaDevices&&A.mediaDevices.getUserMedia&&(A.getUserMedia=(function(g,Q,C){A.mediaDevices.getUserMedia(g).then(Q,C)}).bind(A))}function ow(B){return B&&B.video!==void 0?Object.assign({},B,{video:ft(B.video)}):B}function sw(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection;B.RTCPeerConnection=function(g,Q){if(g&&g.iceServers){const C=[];for(let E=0;E<g.iceServers.length;E++){let i=g.iceServers[E];!i.hasOwnProperty("urls")&&i.hasOwnProperty("url")?(PE("RTCIceServer.url","RTCIceServer.urls"),i=JSON.parse(JSON.stringify(i)),i.urls=i.url,delete i.url,C.push(i)):C.push(g.iceServers[E])}g.iceServers=C}return new A(g,Q)},B.RTCPeerConnection.prototype=A.prototype,"generateCertificate"in A&&Object.defineProperty(B.RTCPeerConnection,"generateCertificate",{get(){return A.generateCertificate}})}function tw(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function ww(B){const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(g){if(g){typeof g.offerToReceiveAudio<"u"&&(g.offerToReceiveAudio=!!g.offerToReceiveAudio);const Q=this.getTransceivers().find(E=>E.receiver.track.kind==="audio");g.offerToReceiveAudio===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):g.offerToReceiveAudio===!0&&!Q&&this.addTransceiver("audio"),typeof g.offerToReceiveVideo<"u"&&(g.offerToReceiveVideo=!!g.offerToReceiveVideo);const C=this.getTransceivers().find(E=>E.receiver.track.kind==="video");g.offerToReceiveVideo===!1&&C?C.direction==="sendrecv"?C.setDirection?C.setDirection("sendonly"):C.direction="sendonly":C.direction==="recvonly"&&(C.setDirection?C.setDirection("inactive"):C.direction="inactive"):g.offerToReceiveVideo===!0&&!C&&this.addTransceiver("video")}return A.apply(this,arguments)}}function aw(B){typeof B!="object"||B.AudioContext||(B.AudioContext=B.webkitAudioContext)}const os=Object.freeze(Object.defineProperty({__proto__:null,shimAudioContext:aw,shimCallbacksAPI:iw,shimConstraints:ow,shimCreateOfferLegacy:ww,shimGetUserMedia:Dw,shimLocalStreamsAPI:Cw,shimRTCIceServerUrls:sw,shimRemoteStreamsAPI:Ew,shimTrackEventTransceiver:tw},Symbol.toStringTag,{value:"Module"}));var cc=Xt();const eE=VD(cc);function cE(B){if(!B.RTCIceCandidate||B.RTCIceCandidate&&"foundation"in B.RTCIceCandidate.prototype)return;const A=B.RTCIceCandidate;B.RTCIceCandidate=function(g){if(typeof g=="object"&&g.candidate&&g.candidate.indexOf("a=")===0&&(g=JSON.parse(JSON.stringify(g)),g.candidate=g.candidate.substr(2)),g.candidate&&g.candidate.length){const Q=new A(g),C=eE.parseCandidate(g.candidate),E=Object.assign(Q,C);return E.toJSON=function(){return{candidate:E.candidate,sdpMid:E.sdpMid,sdpMLineIndex:E.sdpMLineIndex,usernameFragment:E.usernameFragment}},E}return new A(g)},B.RTCIceCandidate.prototype=A.prototype,BB(B,"icecandidate",I=>(I.candidate&&Object.defineProperty(I,"candidate",{value:new B.RTCIceCandidate(I.candidate),writable:"false"}),I))}function RB(B,A){if(!B.RTCPeerConnection)return;"sctp"in B.RTCPeerConnection.prototype||Object.defineProperty(B.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});const I=function(i){if(!i||!i.sdp)return!1;const D=eE.splitSections(i.sdp);return D.shift(),D.some(o=>{const s=eE.parseMLine(o);return s&&s.kind==="application"&&s.protocol.indexOf("SCTP")!==-1})},g=function(i){const D=i.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(D===null||D.length<2)return-1;const o=parseInt(D[1],10);return o!==o?-1:o},Q=function(i){let D=65536;return A.browser==="firefox"&&(A.version<57?i===-1?D=16384:D=2147483637:A.version<60?D=A.version===57?65535:65536:D=2147483637),D},C=function(i,D){let o=65536;A.browser==="firefox"&&A.version===57&&(o=65535);const s=eE.matchPrefix(i.sdp,"a=max-message-size:");return s.length>0?o=parseInt(s[0].substr(19),10):A.browser==="firefox"&&D!==-1&&(o=2147483637),o},E=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,A.browser==="chrome"&&A.version>=76){const{sdpSemantics:D}=this.getConfiguration();D==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(I(arguments[0])){const D=g(arguments[0]),o=Q(D),s=C(arguments[0],D);let t;o===0&&s===0?t=Number.POSITIVE_INFINITY:o===0||s===0?t=Math.max(o,s):t=Math.min(o,s);const w={};Object.defineProperty(w,"maxMessageSize",{get(){return t}}),this._sctp=w}return E.apply(this,arguments)}}function FB(B){if(!(B.RTCPeerConnection&&"createDataChannel"in B.RTCPeerConnection.prototype))return;function A(g,Q){const C=g.send;g.send=function(){const i=arguments[0],D=i.length||i.size||i.byteLength;if(g.readyState==="open"&&Q.sctp&&D>Q.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+Q.sctp.maxMessageSize+" bytes)");return C.apply(g,arguments)}}const I=B.RTCPeerConnection.prototype.createDataChannel;B.RTCPeerConnection.prototype.createDataChannel=function(){const Q=I.apply(this,arguments);return A(Q,this),Q},BB(B,"datachannel",g=>(A(g.channel,g.target),g))}function tD(B){if(!B.RTCPeerConnection||"connectionState"in B.RTCPeerConnection.prototype)return;const A=B.RTCPeerConnection.prototype;Object.defineProperty(A,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(A,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(I){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),I&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=I)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(I=>{const g=A[I];A[I]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const C=Q.target;if(C._lastConnectionState!==C.connectionState){C._lastConnectionState=C.connectionState;const E=new Event("connectionstatechange",Q);C.dispatchEvent(E)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),g.apply(this,arguments)}})}function wD(B,A){if(!B.RTCPeerConnection||A.browser==="chrome"&&A.version>=71||A.browser==="safari"&&A.version>=605)return;const I=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(Q){if(Q&&Q.sdp&&Q.sdp.indexOf(`
1103
+ a=mid:`+N.mid+`\r
1104
+ `;return}if(N.stream){var J;N.kind==="audio"?J=N.stream.getAudioTracks()[0]:N.kind==="video"&&(J=N.stream.getVideoTracks()[0]),J&&o>=15019&&N.kind==="video"&&!N.sendEncodingParameters[0].rtx&&(N.sendEncodingParameters[0].rtx={ssrc:N.sendEncodingParameters[0].ssrc+1})}var U=Q(N.localCapabilities,N.remoteCapabilities),H=U.codecs.filter(function(d){return d.name.toLowerCase()==="rtx"}).length;!H&&N.sendEncodingParameters[0].rtx&&delete N.sendEncodingParameters[0].rtx,h+=I(N,U,"answer",N.stream,c._dtlsRole),N.rtcpParameters&&N.rtcpParameters.reducedSize&&(h+=`a=rtcp-rsize\r
1105
+ `)}});var R=new D.RTCSessionDescription({type:"answer",sdp:h});return Promise.resolve(R)},a.prototype.addIceCandidate=function(c){var h=this,G;return c&&!(c.sdpMLineIndex!==void 0||c.sdpMid)?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise(function(R,N){if(h._remoteDescription)if(!c||c.candidate==="")for(var k=0;k<h.transceivers.length&&!(!h.transceivers[k].rejected&&(h.transceivers[k].iceTransport.addRemoteCandidate({}),G=B.getMediaSections(h._remoteDescription.sdp),G[k]+=`a=end-of-candidates\r
1106
+ `,h._remoteDescription.sdp=B.getDescription(h._remoteDescription.sdp)+G.join(""),h.usingBundle));k++);else{var J=c.sdpMLineIndex;if(c.sdpMid){for(var U=0;U<h.transceivers.length;U++)if(h.transceivers[U].mid===c.sdpMid){J=U;break}}var H=h.transceivers[J];if(H){if(H.rejected)return R();var d=Object.keys(c.candidate).length>0?B.parseCandidate(c.candidate):{};if(d.protocol==="tcp"&&(d.port===0||d.port===9)||d.component&&d.component!==1)return R();if((J===0||J>0&&H.iceTransport!==h.transceivers[0].iceTransport)&&!E(H.iceTransport,d))return N(i("OperationError","Can not add ICE candidate"));var Y=c.candidate.trim();Y.indexOf("a=")===0&&(Y=Y.substr(2)),G=B.getMediaSections(h._remoteDescription.sdp),G[J]+="a="+(d.type?Y:"end-of-candidates")+`\r
1107
+ `,h._remoteDescription.sdp=B.getDescription(h._remoteDescription.sdp)+G.join("")}else return N(i("OperationError","Can not add ICE candidate"))}else return N(i("InvalidStateError","Can not add ICE candidate without a remote description"));R()})},a.prototype.getStats=function(c){if(c&&c instanceof D.MediaStreamTrack){var h=null;if(this.transceivers.forEach(function(R){R.rtpSender&&R.rtpSender.track===c?h=R.rtpSender:R.rtpReceiver&&R.rtpReceiver.track===c&&(h=R.rtpReceiver)}),!h)throw i("InvalidAccessError","Invalid selector.");return h.getStats()}var G=[];return this.transceivers.forEach(function(R){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach(function(N){R[N]&&G.push(R[N].getStats())})}),Promise.all(G).then(function(R){var N=new Map;return R.forEach(function(k){k.forEach(function(J){N.set(J.id,J)})}),N})};var y=["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"];y.forEach(function(c){var h=D[c];if(h&&h.prototype&&h.prototype.getStats){var G=h.prototype.getStats;h.prototype.getStats=function(){return G.apply(this).then(function(R){var N=new Map;return Object.keys(R).forEach(function(k){R[k].type=A(R[k]),N.set(k,R[k])}),N})}}});var r=["createOffer","createAnswer"];return r.forEach(function(c){var h=a.prototype[c];a.prototype[c]=function(){var G=arguments;return typeof G[0]=="function"||typeof G[1]=="function"?h.apply(this,[arguments[2]]).then(function(R){typeof G[0]=="function"&&G[0].apply(null,[R])},function(R){typeof G[1]=="function"&&G[1].apply(null,[R])}):h.apply(this,arguments)}}),r=["setLocalDescription","setRemoteDescription","addIceCandidate"],r.forEach(function(c){var h=a.prototype[c];a.prototype[c]=function(){var G=arguments;return typeof G[1]=="function"||typeof G[2]=="function"?h.apply(this,arguments).then(function(){typeof G[1]=="function"&&G[1].apply(null)},function(R){typeof G[2]=="function"&&G[2].apply(null,[R])}):h.apply(this,arguments)}}),["getStats"].forEach(function(c){var h=a.prototype[c];a.prototype[c]=function(){var G=arguments;return typeof G[1]=="function"?h.apply(this,arguments).then(function(){typeof G[1]=="function"&&G[1].apply(null)}):h.apply(this,arguments)}}),a},Li}var Gn=yn();const rn=jD(Gn);function Aw(B){const A=B&&B.navigator,I=function(Q){return{name:{PermissionDeniedError:"NotAllowedError"}[Q.name]||Q.name,message:Q.message,constraint:Q.constraint,toString(){return this.name}}},g=A.mediaDevices.getUserMedia.bind(A.mediaDevices);Object.getOwnPropertyDescriptor(A.mediaDevices,"getUserMedia")?.writable&&(A.mediaDevices.getUserMedia=function(Q){return g(Q).catch(C=>Promise.reject(I(C)))})}function Iw(B){"getDisplayMedia"in B.navigator&&B.navigator.mediaDevices&&(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||(B.navigator.mediaDevices.getDisplayMedia=B.navigator.getDisplayMedia.bind(B.navigator)))}function sD(B,A){if(B.RTCIceGatherer&&(B.RTCIceCandidate||(B.RTCIceCandidate=function(Q){return Q}),B.RTCSessionDescription||(B.RTCSessionDescription=function(Q){return Q}),A.version<15025)){const g=Object.getOwnPropertyDescriptor(B.MediaStreamTrack.prototype,"enabled");Object.defineProperty(B.MediaStreamTrack.prototype,"enabled",{set(Q){g.set.call(this,Q);const C=new Event("enabled");C.enabled=Q,this.dispatchEvent(C)}})}B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)&&Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=new B.RTCDtmfSender(this):this.track.kind==="video"&&(this._dtmf=null)),this._dtmf}}),B.RTCDtmfSender&&!B.RTCDTMFSender&&(B.RTCDTMFSender=B.RTCDtmfSender);const I=rn(B,A.version);B.RTCPeerConnection=function(Q){return Q&&Q.iceServers&&(Q.iceServers=hn(Q.iceServers,A.version),zD("ICE servers after filtering:",Q.iceServers)),new I(Q)},B.RTCPeerConnection.prototype=I.prototype}function gw(B){B.RTCRtpSender&&!("replaceTrack"in B.RTCRtpSender.prototype)&&(B.RTCRtpSender.prototype.replaceTrack=B.RTCRtpSender.prototype.setTrack)}const ts=Object.freeze(Object.defineProperty({__proto__:null,shimGetDisplayMedia:Iw,shimGetUserMedia:Aw,shimPeerConnection:sD,shimReplaceTrack:gw},Symbol.toStringTag,{value:"Module"}));function Qw(B,A){const I=B&&B.navigator,g=B&&B.MediaStreamTrack;if(I.getUserMedia=function(Q,C,E){TE("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),I.mediaDevices.getUserMedia(Q).then(C,E)},!(A.version>55&&"autoGainControl"in I.mediaDevices.getSupportedConstraints())){const Q=function(E,i,D){i in E&&!(D in E)&&(E[D]=E[i],delete E[i])},C=I.mediaDevices.getUserMedia.bind(I.mediaDevices);if(Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(E){return typeof E=="object"&&typeof E.audio=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E.audio,"autoGainControl","mozAutoGainControl"),Q(E.audio,"noiseSuppression","mozNoiseSuppression")),C(E)}),g&&g.prototype.getSettings){const E=g.prototype.getSettings;g.prototype.getSettings=function(){const i=E.apply(this,arguments);return Q(i,"mozAutoGainControl","autoGainControl"),Q(i,"mozNoiseSuppression","noiseSuppression"),i}}if(g&&g.prototype.applyConstraints){const E=g.prototype.applyConstraints;g.prototype.applyConstraints=function(i){return this.kind==="audio"&&typeof i=="object"&&(i=JSON.parse(JSON.stringify(i)),Q(i,"autoGainControl","mozAutoGainControl"),Q(i,"noiseSuppression","mozNoiseSuppression")),E.apply(this,[i])}}}}function Sn(B,A){B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||B.navigator.mediaDevices&&(B.navigator.mediaDevices.getDisplayMedia=function(g){if(!(g&&g.video)){const Q=new DOMException("getDisplayMedia without video constraints is undefined");return Q.name="NotFoundError",Q.code=8,Promise.reject(Q)}return g.video===!0?g.video={mediaSource:A}:g.video.mediaSource=A,B.navigator.mediaDevices.getUserMedia(g)})}function Bw(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function tD(B,A){if(typeof B!="object"||!(B.RTCPeerConnection||B.mozRTCPeerConnection))return;!B.RTCPeerConnection&&B.mozRTCPeerConnection&&(B.RTCPeerConnection=B.mozRTCPeerConnection),A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const C=B.RTCPeerConnection.prototype[Q],E={[Q](){return arguments[0]=new(Q==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};B.RTCPeerConnection.prototype[Q]=E[Q]});const I={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},g=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[C,E,i]=arguments;return g.apply(this,[C||null]).then(D=>{if(A.version<53&&!E)try{D.forEach(o=>{o.type=I[o.type]||o.type})}catch(o){if(o.name!=="TypeError")throw o;D.forEach((s,t)=>{D.set(t,Object.assign({},s,{type:I[s.type]||s.type}))})}return D}).then(E,i)}}function Cw(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpSender.prototype)return;const A=B.RTCPeerConnection.prototype.getSenders;A&&(B.RTCPeerConnection.prototype.getSenders=function(){const Q=A.apply(this,[]);return Q.forEach(C=>C._pc=this),Q});const I=B.RTCPeerConnection.prototype.addTrack;I&&(B.RTCPeerConnection.prototype.addTrack=function(){const Q=I.apply(this,arguments);return Q._pc=this,Q}),B.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Ew(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpReceiver.prototype)return;const A=B.RTCPeerConnection.prototype.getReceivers;A&&(B.RTCPeerConnection.prototype.getReceivers=function(){const g=A.apply(this,[]);return g.forEach(Q=>Q._pc=this),g}),BB(B,"track",I=>(I.receiver._pc=I.srcElement,I)),B.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function iw(B){!B.RTCPeerConnection||"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(I){TE("removeStream","removeTrack"),this.getSenders().forEach(g=>{g.track&&I.getTracks().includes(g.track)&&this.removeTrack(g)})})}function Dw(B){B.DataChannel&&!B.RTCDataChannel&&(B.RTCDataChannel=B.DataChannel)}function ow(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.addTransceiver;A&&(B.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const g=arguments[1],Q=g&&"sendEncodings"in g;Q&&g.sendEncodings.forEach(E=>{if("rid"in E&&!/^[a-z0-9]{0,16}$/i.test(E.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in E&&!(parseFloat(E.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in E&&!(parseFloat(E.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const C=A.apply(this,arguments);if(Q){const{sender:E}=C,i=E.getParameters();(!("encodings"in i)||i.encodings.length===1&&Object.keys(i.encodings[0]).length===0)&&(i.encodings=g.sendEncodings,E.sendEncodings=g.sendEncodings,this.setParametersPromises.push(E.setParameters(i).then(()=>{delete E.sendEncodings}).catch(()=>{delete E.sendEncodings})))}return C})}function sw(B){if(!(typeof B=="object"&&B.RTCRtpSender))return;const A=B.RTCRtpSender.prototype.getParameters;A&&(B.RTCRtpSender.prototype.getParameters=function(){const g=A.apply(this,arguments);return"encodings"in g||(g.encodings=[].concat(this.sendEncodings||[{}])),g})}function tw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}function ww(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createAnswer;B.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}const ws=Object.freeze(Object.defineProperty({__proto__:null,shimAddTransceiver:ow,shimCreateAnswer:ww,shimCreateOffer:tw,shimGetDisplayMedia:Sn,shimGetParameters:sw,shimGetUserMedia:Qw,shimOnTrack:Bw,shimPeerConnection:tD,shimRTCDataChannel:Dw,shimReceiverGetStats:Ew,shimRemoveStream:iw,shimSenderGetStats:Cw},Symbol.toStringTag,{value:"Module"}));function aw(B){if(!(typeof B!="object"||!B.RTCPeerConnection)){if("getLocalStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in B.RTCPeerConnection.prototype)){const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addStream=function(g){this._localStreams||(this._localStreams=[]),this._localStreams.includes(g)||this._localStreams.push(g),g.getAudioTracks().forEach(Q=>A.call(this,Q,g)),g.getVideoTracks().forEach(Q=>A.call(this,Q,g))},B.RTCPeerConnection.prototype.addTrack=function(g,...Q){return Q&&Q.forEach(C=>{this._localStreams?this._localStreams.includes(C)||this._localStreams.push(C):this._localStreams=[C]}),A.apply(this,arguments)}}"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(I){this._localStreams||(this._localStreams=[]);const g=this._localStreams.indexOf(I);if(g===-1)return;this._localStreams.splice(g,1);const Q=I.getTracks();this.getSenders().forEach(C=>{Q.includes(C.track)&&this.removeTrack(C)})})}}function ew(B){if(!(typeof B!="object"||!B.RTCPeerConnection)&&("getRemoteStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in B.RTCPeerConnection.prototype))){Object.defineProperty(B.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(I){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=I),this.addEventListener("track",this._onaddstreampoly=g=>{g.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const C=new Event("addstream");C.stream=Q,this.dispatchEvent(C)})})}});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){const g=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(Q){Q.streams.forEach(C=>{if(g._remoteStreams||(g._remoteStreams=[]),g._remoteStreams.indexOf(C)>=0)return;g._remoteStreams.push(C);const E=new Event("addstream");E.stream=C,g.dispatchEvent(E)})}),A.apply(g,arguments)}}}function nw(B){if(typeof B!="object"||!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype,I=A.createOffer,g=A.createAnswer,Q=A.setLocalDescription,C=A.setRemoteDescription,E=A.addIceCandidate;A.createOffer=function(o,s){const t=arguments.length>=2?arguments[2]:arguments[0],w=I.apply(this,[t]);return s?(w.then(o,s),Promise.resolve()):w},A.createAnswer=function(o,s){const t=arguments.length>=2?arguments[2]:arguments[0],w=g.apply(this,[t]);return s?(w.then(o,s),Promise.resolve()):w};let i=function(D,o,s){const t=Q.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t};A.setLocalDescription=i,i=function(D,o,s){const t=C.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.setRemoteDescription=i,i=function(D,o,s){const t=E.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.addIceCandidate=i}function cw(B){const A=B&&B.navigator;if(A.mediaDevices&&A.mediaDevices.getUserMedia){const I=A.mediaDevices,g=I.getUserMedia.bind(I);A.mediaDevices.getUserMedia=Q=>g(hw(Q))}!A.getUserMedia&&A.mediaDevices&&A.mediaDevices.getUserMedia&&(A.getUserMedia=(function(g,Q,C){A.mediaDevices.getUserMedia(g).then(Q,C)}).bind(A))}function hw(B){return B&&B.video!==void 0?Object.assign({},B,{video:Tt(B.video)}):B}function yw(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection;B.RTCPeerConnection=function(g,Q){if(g&&g.iceServers){const C=[];for(let E=0;E<g.iceServers.length;E++){let i=g.iceServers[E];!i.hasOwnProperty("urls")&&i.hasOwnProperty("url")?(TE("RTCIceServer.url","RTCIceServer.urls"),i=JSON.parse(JSON.stringify(i)),i.urls=i.url,delete i.url,C.push(i)):C.push(g.iceServers[E])}g.iceServers=C}return new A(g,Q)},B.RTCPeerConnection.prototype=A.prototype,"generateCertificate"in A&&Object.defineProperty(B.RTCPeerConnection,"generateCertificate",{get(){return A.generateCertificate}})}function Gw(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function rw(B){const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(g){if(g){typeof g.offerToReceiveAudio<"u"&&(g.offerToReceiveAudio=!!g.offerToReceiveAudio);const Q=this.getTransceivers().find(E=>E.receiver.track.kind==="audio");g.offerToReceiveAudio===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):g.offerToReceiveAudio===!0&&!Q&&this.addTransceiver("audio"),typeof g.offerToReceiveVideo<"u"&&(g.offerToReceiveVideo=!!g.offerToReceiveVideo);const C=this.getTransceivers().find(E=>E.receiver.track.kind==="video");g.offerToReceiveVideo===!1&&C?C.direction==="sendrecv"?C.setDirection?C.setDirection("sendonly"):C.direction="sendonly":C.direction==="recvonly"&&(C.setDirection?C.setDirection("inactive"):C.direction="inactive"):g.offerToReceiveVideo===!0&&!C&&this.addTransceiver("video")}return A.apply(this,arguments)}}function Sw(B){typeof B!="object"||B.AudioContext||(B.AudioContext=B.webkitAudioContext)}const as=Object.freeze(Object.defineProperty({__proto__:null,shimAudioContext:Sw,shimCallbacksAPI:nw,shimConstraints:hw,shimCreateOfferLegacy:rw,shimGetUserMedia:cw,shimLocalStreamsAPI:aw,shimRTCIceServerUrls:yw,shimRemoteStreamsAPI:ew,shimTrackEventTransceiver:Gw},Symbol.toStringTag,{value:"Module"}));var Rn=$t();const eE=jD(Rn);function nE(B){if(!B.RTCIceCandidate||B.RTCIceCandidate&&"foundation"in B.RTCIceCandidate.prototype)return;const A=B.RTCIceCandidate;B.RTCIceCandidate=function(g){if(typeof g=="object"&&g.candidate&&g.candidate.indexOf("a=")===0&&(g=JSON.parse(JSON.stringify(g)),g.candidate=g.candidate.substr(2)),g.candidate&&g.candidate.length){const Q=new A(g),C=eE.parseCandidate(g.candidate),E=Object.assign(Q,C);return E.toJSON=function(){return{candidate:E.candidate,sdpMid:E.sdpMid,sdpMLineIndex:E.sdpMLineIndex,usernameFragment:E.usernameFragment}},E}return new A(g)},B.RTCIceCandidate.prototype=A.prototype,BB(B,"icecandidate",I=>(I.candidate&&Object.defineProperty(I,"candidate",{value:new B.RTCIceCandidate(I.candidate),writable:"false"}),I))}function FB(B,A){if(!B.RTCPeerConnection)return;"sctp"in B.RTCPeerConnection.prototype||Object.defineProperty(B.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});const I=function(i){if(!i||!i.sdp)return!1;const D=eE.splitSections(i.sdp);return D.shift(),D.some(o=>{const s=eE.parseMLine(o);return s&&s.kind==="application"&&s.protocol.indexOf("SCTP")!==-1})},g=function(i){const D=i.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(D===null||D.length<2)return-1;const o=parseInt(D[1],10);return o!==o?-1:o},Q=function(i){let D=65536;return A.browser==="firefox"&&(A.version<57?i===-1?D=16384:D=2147483637:A.version<60?D=A.version===57?65535:65536:D=2147483637),D},C=function(i,D){let o=65536;A.browser==="firefox"&&A.version===57&&(o=65535);const s=eE.matchPrefix(i.sdp,"a=max-message-size:");return s.length>0?o=parseInt(s[0].substr(19),10):A.browser==="firefox"&&D!==-1&&(o=2147483637),o},E=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,A.browser==="chrome"&&A.version>=76){const{sdpSemantics:D}=this.getConfiguration();D==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(I(arguments[0])){const D=g(arguments[0]),o=Q(D),s=C(arguments[0],D);let t;o===0&&s===0?t=Number.POSITIVE_INFINITY:o===0||s===0?t=Math.max(o,s):t=Math.min(o,s);const w={};Object.defineProperty(w,"maxMessageSize",{get(){return t}}),this._sctp=w}return E.apply(this,arguments)}}function kB(B){if(!(B.RTCPeerConnection&&"createDataChannel"in B.RTCPeerConnection.prototype))return;function A(g,Q){const C=g.send;g.send=function(){const i=arguments[0],D=i.length||i.size||i.byteLength;if(g.readyState==="open"&&Q.sctp&&D>Q.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+Q.sctp.maxMessageSize+" bytes)");return C.apply(g,arguments)}}const I=B.RTCPeerConnection.prototype.createDataChannel;B.RTCPeerConnection.prototype.createDataChannel=function(){const Q=I.apply(this,arguments);return A(Q,this),Q},BB(B,"datachannel",g=>(A(g.channel,g.target),g))}function wD(B){if(!B.RTCPeerConnection||"connectionState"in B.RTCPeerConnection.prototype)return;const A=B.RTCPeerConnection.prototype;Object.defineProperty(A,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(A,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(I){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),I&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=I)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(I=>{const g=A[I];A[I]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const C=Q.target;if(C._lastConnectionState!==C.connectionState){C._lastConnectionState=C.connectionState;const E=new Event("connectionstatechange",Q);C.dispatchEvent(E)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),g.apply(this,arguments)}})}function aD(B,A){if(!B.RTCPeerConnection||A.browser==="chrome"&&A.version>=71||A.browser==="safari"&&A.version>=605)return;const I=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(Q){if(Q&&Q.sdp&&Q.sdp.indexOf(`
1108
1108
  a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
1109
1109
  `).filter(E=>E.trim()!=="a=extmap-allow-mixed").join(`
1110
- `);B.RTCSessionDescription&&Q instanceof B.RTCSessionDescription?arguments[0]=new B.RTCSessionDescription({type:Q.type,sdp:C}):Q.sdp=C}return I.apply(this,arguments)}}function nE(B,A){if(!(B.RTCPeerConnection&&B.RTCPeerConnection.prototype))return;const I=B.RTCPeerConnection.prototype.addIceCandidate;!I||I.length===0||(B.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(A.browser==="chrome"&&A.version<78||A.browser==="firefox"&&A.version<68||A.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():I.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}const nc=Object.freeze(Object.defineProperty({__proto__:null,removeExtmapAllowMixed:wD,shimAddIceCandidateNullOrEmpty:nE,shimConnectionState:tD,shimMaxMessageSize:RB,shimRTCIceCandidate:cE,shimSendThrowTypeError:FB},Symbol.toStringTag,{value:"Module"}));function hc({window:B}={},A={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const I=ZD,g=Dc(B),Q={browserDetails:g,commonShim:nc,extractVersion:SB,disableLog:Ec,disableWarnings:ic};switch(g.browser){case"chrome":if(!Bs||!DD||!A.shimChrome)return I("Chrome shim is not included in this adapter release."),Q;if(g.version===null)return I("Chrome shim can not determine version, not shimming."),Q;I("adapter.js shimming chrome."),Q.browserShim=Bs,nE(B,g),xt(B,g),pt(B),DD(B,g),ut(B),Tt(B,g),qt(B),bt(B),mt(B),Ot(B,g),cE(B),tD(B),RB(B,g),FB(B),wD(B,g);break;case"firefox":if(!Ds||!sD||!A.shimFirefox)return I("Firefox shim is not included in this adapter release."),Q;I("adapter.js shimming firefox."),Q.browserShim=Ds,nE(B,g),Wt(B,g),sD(B,g),jt(B),$t(B),zt(B),_t(B),Aw(B),Iw(B),gw(B),Qw(B),Bw(B),cE(B),tD(B),RB(B,g),FB(B);break;case"edge":if(!is||!oD||!A.shimEdge)return I("MS edge shim is not included in this adapter release."),Q;I("adapter.js shimming edge."),Q.browserShim=is,vt(B),Vt(B),oD(B,g),Zt(B),RB(B,g),FB(B);break;case"safari":if(!os||!A.shimSafari)return I("Safari shim is not included in this adapter release."),Q;I("adapter.js shimming safari."),Q.browserShim=os,nE(B,g),sw(B),ww(B),iw(B),Cw(B),Ew(B),tw(B),Dw(B),aw(B),cE(B),RB(B,g),FB(B),wD(B,g);break;default:I("Unsupported browser!");break}return Q}const ss=hc({window:typeof window>"u"?void 0:window});function rg(B,A,I,g){Object.defineProperty(B,A,{get:I,set:g,enumerable:!0,configurable:!0})}var Li=ss.default||ss,sB=new((function(){function B(){this.isIOS=["iPad","iPhone","iPod"].includes(navigator.platform),this.supportedBrowsers=["firefox","chrome","safari"],this.minFirefoxVersion=59,this.minChromeVersion=72,this.minSafariVersion=605}return B.prototype.isWebRTCSupported=function(){return typeof RTCPeerConnection<"u"},B.prototype.isBrowserSupported=function(){var A=this.getBrowser(),I=this.getVersion(),g=this.supportedBrowsers.includes(A);return g?A==="chrome"?I>=this.minChromeVersion:A==="firefox"?I>=this.minFirefoxVersion:A==="safari"?!this.isIOS&&I>=this.minSafariVersion:!1:!1},B.prototype.getBrowser=function(){return Li.browserDetails.browser},B.prototype.getVersion=function(){return Li.browserDetails.version||0},B.prototype.isUnifiedPlanSupported=function(){var A=this.getBrowser(),I=Li.browserDetails.version||0;if(A==="chrome"&&I<this.minChromeVersion)return!1;if(A==="firefox"&&I>=this.minFirefoxVersion)return!0;if(!window.RTCRtpTransceiver||!("currentDirection"in RTCRtpTransceiver.prototype))return!1;var g,Q=!1;try{g=new RTCPeerConnection,g.addTransceiver("audio"),Q=!0}catch{}finally{g&&g.close()}return Q},B.prototype.toString=function(){return`Supports:
1110
+ `);B.RTCSessionDescription&&Q instanceof B.RTCSessionDescription?arguments[0]=new B.RTCSessionDescription({type:Q.type,sdp:C}):Q.sdp=C}return I.apply(this,arguments)}}function cE(B,A){if(!(B.RTCPeerConnection&&B.RTCPeerConnection.prototype))return;const I=B.RTCPeerConnection.prototype.addIceCandidate;!I||I.length===0||(B.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(A.browser==="chrome"&&A.version<78||A.browser==="firefox"&&A.version<68||A.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():I.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}const Fn=Object.freeze(Object.defineProperty({__proto__:null,removeExtmapAllowMixed:aD,shimAddIceCandidateNullOrEmpty:cE,shimConnectionState:wD,shimMaxMessageSize:FB,shimRTCIceCandidate:nE,shimSendThrowTypeError:kB},Symbol.toStringTag,{value:"Module"}));function kn({window:B}={},A={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const I=zD,g=nn(B),Q={browserDetails:g,commonShim:Fn,extractVersion:RB,disableLog:an,disableWarnings:en};switch(g.browser){case"chrome":if(!Ds||!oD||!A.shimChrome)return I("Chrome shim is not included in this adapter release."),Q;if(g.version===null)return I("Chrome shim can not determine version, not shimming."),Q;I("adapter.js shimming chrome."),Q.browserShim=Ds,cE(B,g),Ot(B,g),Xt(B),oD(B,g),vt(B),zt(B,g),Vt(B),Zt(B),Wt(B),_t(B,g),nE(B),wD(B),FB(B,g),kB(B),aD(B,g);break;case"firefox":if(!ws||!tD||!A.shimFirefox)return I("Firefox shim is not included in this adapter release."),Q;I("adapter.js shimming firefox."),Q.browserShim=ws,cE(B,g),Qw(B,g),tD(B,g),Bw(B),iw(B),Cw(B),Ew(B),Dw(B),ow(B),sw(B),tw(B),ww(B),nE(B),wD(B),FB(B,g),kB(B);break;case"edge":if(!ts||!sD||!A.shimEdge)return I("MS edge shim is not included in this adapter release."),Q;I("adapter.js shimming edge."),Q.browserShim=ts,Aw(B),Iw(B),sD(B,g),gw(B),FB(B,g),kB(B);break;case"safari":if(!as||!A.shimSafari)return I("Safari shim is not included in this adapter release."),Q;I("adapter.js shimming safari."),Q.browserShim=as,cE(B,g),yw(B),rw(B),nw(B),aw(B),ew(B),Gw(B),cw(B),Sw(B),nE(B),FB(B,g),kB(B),aD(B,g);break;default:I("Unsupported browser!");break}return Q}const es=kn({window:typeof window>"u"?void 0:window});function rg(B,A,I,g){Object.defineProperty(B,A,{get:I,set:g,enumerable:!0,configurable:!0})}var Hi=es.default||es,tB=new((function(){function B(){this.isIOS=["iPad","iPhone","iPod"].includes(navigator.platform),this.supportedBrowsers=["firefox","chrome","safari"],this.minFirefoxVersion=59,this.minChromeVersion=72,this.minSafariVersion=605}return B.prototype.isWebRTCSupported=function(){return typeof RTCPeerConnection<"u"},B.prototype.isBrowserSupported=function(){var A=this.getBrowser(),I=this.getVersion(),g=this.supportedBrowsers.includes(A);return g?A==="chrome"?I>=this.minChromeVersion:A==="firefox"?I>=this.minFirefoxVersion:A==="safari"?!this.isIOS&&I>=this.minSafariVersion:!1:!1},B.prototype.getBrowser=function(){return Hi.browserDetails.browser},B.prototype.getVersion=function(){return Hi.browserDetails.version||0},B.prototype.isUnifiedPlanSupported=function(){var A=this.getBrowser(),I=Hi.browserDetails.version||0;if(A==="chrome"&&I<this.minChromeVersion)return!1;if(A==="firefox"&&I>=this.minFirefoxVersion)return!0;if(!window.RTCRtpTransceiver||!("currentDirection"in RTCRtpTransceiver.prototype))return!1;var g,Q=!1;try{g=new RTCPeerConnection,g.addTransceiver("audio"),Q=!0}catch{}finally{g&&g.close()}return Q},B.prototype.toString=function(){return`Supports:
1111
1111
  browser:`.concat(this.getBrowser(),`
1112
1112
  version:`).concat(this.getVersion(),`
1113
1113
  isIOS:`).concat(this.isIOS,`
1114
1114
  isWebRTCSupported:`).concat(this.isWebRTCSupported(),`
1115
1115
  isBrowserSupported:`).concat(this.isBrowserSupported(),`
1116
- isUnifiedPlanSupported:`).concat(this.isUnifiedPlanSupported())},B})()),ts={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:["turn:eu-0.turn.peerjs.com:3478","turn:us-0.turn.peerjs.com:3478"],username:"peerjs",credential:"peerjsp"}],sdpSemantics:"unified-plan"},yc=(function(){function B(){this.CLOUD_HOST="0.peerjs.com",this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=ts,this.browser=sB.getBrowser(),this.browserVersion=sB.getVersion(),this.supports=(function(){var A={browser:sB.isBrowserSupported(),webRTC:sB.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!A.webRTC)return A;var I;try{I=new RTCPeerConnection(ts),A.audioVideo=!0;var g=void 0;try{g=I.createDataChannel("_PEERJSTEST",{ordered:!0}),A.data=!0,A.reliable=!!g.ordered;try{g.binaryType="blob",A.binaryBlob=!sB.isIOS}catch{}}catch{}finally{g&&g.close()}}catch{}finally{I&&I.close()}return A})(),this.pack=As.pack,this.unpack=As.unpack,this._dataCount=1}return B.prototype.noop=function(){},B.prototype.validateId=function(A){return!A||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(A)},B.prototype.chunk=function(A){for(var I=[],g=A.size,Q=Math.ceil(g/eA.chunkedMTU),C=0,E=0;E<g;){var i=Math.min(g,E+eA.chunkedMTU),D=A.slice(E,i),o={__peerData:this._dataCount,n:C,data:D,total:Q};I.push(o),E=i,C++}return this._dataCount++,I},B.prototype.blobToArrayBuffer=function(A,I){var g=new FileReader;return g.onload=function(Q){Q.target&&I(Q.target.result)},g.readAsArrayBuffer(A),g},B.prototype.binaryStringToArrayBuffer=function(A){for(var I=new Uint8Array(A.length),g=0;g<A.length;g++)I[g]=A.charCodeAt(g)&255;return I.buffer},B.prototype.randomToken=function(){return Math.random().toString(36).slice(2)},B.prototype.isSecure=function(){return location.protocol==="https:"},B})(),eA=new yc,ew={};rg(ew,"Peer",()=>cD,B=>cD=B);var kC={},Gc=Object.prototype.hasOwnProperty,FI="~";function rC(){}Object.create&&(rC.prototype=Object.create(null),new rC().__proto__||(FI=!1));function rc(B,A,I){this.fn=B,this.context=A,this.once=I||!1}function cw(B,A,I,g,Q){if(typeof I!="function")throw new TypeError("The listener must be a function");var C=new rc(I,g||B,Q),E=FI?FI+A:A;return B._events[E]?B._events[E].fn?B._events[E]=[B._events[E],C]:B._events[E].push(C):(B._events[E]=C,B._eventsCount++),B}function hE(B,A){--B._eventsCount===0?B._events=new rC:delete B._events[A]}function eI(){this._events=new rC,this._eventsCount=0}eI.prototype.eventNames=function(){var A=[],I,g;if(this._eventsCount===0)return A;for(g in I=this._events)Gc.call(I,g)&&A.push(FI?g.slice(1):g);return Object.getOwnPropertySymbols?A.concat(Object.getOwnPropertySymbols(I)):A};eI.prototype.listeners=function(A){var I=FI?FI+A:A,g=this._events[I];if(!g)return[];if(g.fn)return[g.fn];for(var Q=0,C=g.length,E=new Array(C);Q<C;Q++)E[Q]=g[Q].fn;return E};eI.prototype.listenerCount=function(A){var I=FI?FI+A:A,g=this._events[I];return g?g.fn?1:g.length:0};eI.prototype.emit=function(A,I,g,Q,C,E){var i=FI?FI+A:A;if(!this._events[i])return!1;var D=this._events[i],o=arguments.length,s,t;if(D.fn){switch(D.once&&this.removeListener(A,D.fn,void 0,!0),o){case 1:return D.fn.call(D.context),!0;case 2:return D.fn.call(D.context,I),!0;case 3:return D.fn.call(D.context,I,g),!0;case 4:return D.fn.call(D.context,I,g,Q),!0;case 5:return D.fn.call(D.context,I,g,Q,C),!0;case 6:return D.fn.call(D.context,I,g,Q,C,E),!0}for(t=1,s=new Array(o-1);t<o;t++)s[t-1]=arguments[t];D.fn.apply(D.context,s)}else{var w=D.length,a;for(t=0;t<w;t++)switch(D[t].once&&this.removeListener(A,D[t].fn,void 0,!0),o){case 1:D[t].fn.call(D[t].context);break;case 2:D[t].fn.call(D[t].context,I);break;case 3:D[t].fn.call(D[t].context,I,g);break;case 4:D[t].fn.call(D[t].context,I,g,Q);break;default:if(!s)for(a=1,s=new Array(o-1);a<o;a++)s[a-1]=arguments[a];D[t].fn.apply(D[t].context,s)}}return!0};eI.prototype.on=function(A,I,g){return cw(this,A,I,g,!1)};eI.prototype.once=function(A,I,g){return cw(this,A,I,g,!0)};eI.prototype.removeListener=function(A,I,g,Q){var C=FI?FI+A:A;if(!this._events[C])return this;if(!I)return hE(this,C),this;var E=this._events[C];if(E.fn)E.fn===I&&(!Q||E.once)&&(!g||E.context===g)&&hE(this,C);else{for(var i=0,D=[],o=E.length;i<o;i++)(E[i].fn!==I||Q&&!E[i].once||g&&E[i].context!==g)&&D.push(E[i]);D.length?this._events[C]=D.length===1?D[0]:D:hE(this,C)}return this};eI.prototype.removeAllListeners=function(A){var I;return A?(I=FI?FI+A:A,this._events[I]&&hE(this,I)):(this._events=new rC,this._eventsCount=0),this};eI.prototype.off=eI.prototype.removeListener;eI.prototype.addListener=eI.prototype.on;eI.prefixed=FI;eI.EventEmitter=eI;kC=eI;var X={};rg(X,"LogLevel",()=>LI,B=>LI=B);rg(X,"default",()=>ws,B=>ws=B);var _g=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],E;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(E)throw E.error}}return C},$g=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Sc="PeerJS: ",LI;(function(B){B[B.Disabled=0]="Disabled",B[B.Errors=1]="Errors",B[B.Warnings=2]="Warnings",B[B.All=3]="All"})(LI||(LI={}));var Rc=(function(){function B(){this._logLevel=LI.Disabled}return Object.defineProperty(B.prototype,"logLevel",{get:function(){return this._logLevel},set:function(A){this._logLevel=A},enumerable:!1,configurable:!0}),B.prototype.log=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=LI.All&&this._print.apply(this,$g([LI.All],_g(A),!1))},B.prototype.warn=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=LI.Warnings&&this._print.apply(this,$g([LI.Warnings],_g(A),!1))},B.prototype.error=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=LI.Errors&&this._print.apply(this,$g([LI.Errors],_g(A),!1))},B.prototype.setLogFunction=function(A){this._print=A},B.prototype._print=function(A){for(var I=[],g=1;g<arguments.length;g++)I[g-1]=arguments[g];var Q=$g([Sc],_g(I),!1);for(var C in Q)Q[C]instanceof Error&&(Q[C]="("+Q[C].name+") "+Q[C].message);A>=LI.All?console.log.apply(console,$g([],_g(Q),!1)):A>=LI.Warnings?console.warn.apply(console,$g(["WARNING"],_g(Q),!1)):A>=LI.Errors&&console.error.apply(console,$g(["ERROR"],_g(Q),!1))},B})(),ws=new Rc,nw={};rg(nw,"Socket",()=>as,B=>as=B);var og;(function(B){B.Data="data",B.Media="media"})(og||(og={}));var qA;(function(B){B.BrowserIncompatible="browser-incompatible",B.Disconnected="disconnected",B.InvalidID="invalid-id",B.InvalidKey="invalid-key",B.Network="network",B.PeerUnavailable="peer-unavailable",B.SslUnavailable="ssl-unavailable",B.ServerError="server-error",B.SocketError="socket-error",B.SocketClosed="socket-closed",B.UnavailableID="unavailable-id",B.WebRTC="webrtc"})(qA||(qA={}));var Hg;(function(B){B.Binary="binary",B.BinaryUTF8="binary-utf8",B.JSON="json"})(Hg||(Hg={}));var dg;(function(B){B.Message="message",B.Disconnected="disconnected",B.Error="error",B.Close="close"})(dg||(dg={}));var iI;(function(B){B.Heartbeat="HEARTBEAT",B.Candidate="CANDIDATE",B.Offer="OFFER",B.Answer="ANSWER",B.Open="OPEN",B.Error="ERROR",B.IdTaken="ID-TAKEN",B.InvalidKey="INVALID-KEY",B.Leave="LEAVE",B.Expire="EXPIRE"})(iI||(iI={}));var WD={};WD=JSON.parse('{"name":"peerjs","version":"1.4.7","keywords":["peerjs","webrtc","p2p","rtc"],"description":"PeerJS client","homepage":"https://peerjs.com","bugs":{"url":"https://github.com/peers/peerjs/issues"},"repository":{"type":"git","url":"https://github.com/peers/peerjs"},"license":"MIT","contributors":["Michelle Bu <michelle@michellebu.com>","afrokick <devbyru@gmail.com>","ericz <really.ez@gmail.com>","Jairo <kidandcat@gmail.com>","Jonas Gloning <34194370+jonasgloning@users.noreply.github.com>","Jairo Caro-Accino Viciana <jairo@galax.be>","Carlos Caballero <carlos.caballero.gonzalez@gmail.com>","hc <hheennrryy@gmail.com>","Muhammad Asif <capripio@gmail.com>","PrashoonB <prashoonbhattacharjee@gmail.com>","Harsh Bardhan Mishra <47351025+HarshCasper@users.noreply.github.com>","akotynski <aleksanderkotbury@gmail.com>","lmb <i@lmb.io>","Jairooo <jairocaro@msn.com>","Moritz Stückler <moritz.stueckler@gmail.com>","Simon <crydotsnakegithub@gmail.com>","Denis Lukov <denismassters@gmail.com>","Philipp Hancke <fippo@andyet.net>","Hans Oksendahl <hansoksendahl@gmail.com>","Jess <jessachandler@gmail.com>","khankuan <khankuan@gmail.com>","DUODVK <kurmanov.work@gmail.com>","XiZhao <kwang1imsa@gmail.com>","Matthias Lohr <matthias@lohr.me>","=frank tree <=frnktrb@googlemail.com>","Andre Eckardt <aeckardt@outlook.com>","Chris Cowan <agentme49@gmail.com>","Alex Chuev <alex@chuev.com>","alxnull <alxnull@e.mail.de>","Yemel Jardi <angel.jardi@gmail.com>","Ben Parnell <benjaminparnell.94@gmail.com>","Benny Lichtner <bennlich@gmail.com>","fresheneesz <bitetrudpublic@gmail.com>","bob.barstead@exaptive.com <bob.barstead@exaptive.com>","chandika <chandika@gmail.com>","emersion <contact@emersion.fr>","Christopher Van <cvan@users.noreply.github.com>","eddieherm <edhermoso@gmail.com>","Eduardo Pinho <enet4mikeenet@gmail.com>","Evandro Zanatta <ezanatta@tray.net.br>","Gardner Bickford <gardner@users.noreply.github.com>","Gian Luca <gianluca.cecchi@cynny.com>","PatrickJS <github@gdi2290.com>","jonnyf <github@jonathanfoss.co.uk>","Hizkia Felix <hizkifw@gmail.com>","Hristo Oskov <hristo.oskov@gmail.com>","Isaac Madwed <i.madwed@gmail.com>","Ilya Konanykhin <ilya.konanykhin@gmail.com>","jasonbarry <jasbarry@me.com>","Jonathan Burke <jonathan.burke.1311@googlemail.com>","Josh Hamit <josh.hamit@gmail.com>","Jordan Austin <jrax86@gmail.com>","Joel Wetzell <jwetzell@yahoo.com>","xizhao <kevin.wang@cloudera.com>","Alberto Torres <kungfoobar@gmail.com>","Jonathan Mayol <mayoljonathan@gmail.com>","Jefferson Felix <me@jsfelix.dev>","Rolf Erik Lekang <me@rolflekang.com>","Kevin Mai-Husan Chia <mhchia@users.noreply.github.com>","Pepijn de Vos <pepijndevos@gmail.com>","JooYoung <qkdlql@naver.com>","Tobias Speicher <rootcommander@gmail.com>","Steve Blaurock <sblaurock@gmail.com>","Kyrylo Shegeda <shegeda@ualberta.ca>","Diwank Singh Tomer <singh@diwank.name>","Sören Balko <Soeren.Balko@gmail.com>","Arpit Solanki <solankiarpit1997@gmail.com>","Yuki Ito <yuki@gnnk.net>","Artur Zayats <zag2art@gmail.com>"],"funding":{"type":"opencollective","url":"https://opencollective.com/peer"},"collective":{"type":"opencollective","url":"https://opencollective.com/peer"},"files":["dist/*"],"sideEffects":["lib/global.ts","lib/supports.ts"],"main":"dist/bundler.cjs","module":"dist/bundler.mjs","browser-minified":"dist/peerjs.min.js","browser-unminified":"dist/peerjs.js","types":"dist/types.d.ts","engines":{"node":">= 10"},"targets":{"types":{"source":"lib/exports.ts"},"main":{"source":"lib/exports.ts","sourceMap":{"inlineSources":true}},"module":{"source":"lib/exports.ts","includeNodeModules":["eventemitter3"],"sourceMap":{"inlineSources":true}},"browser-minified":{"context":"browser","outputFormat":"global","optimize":true,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"},"browser-unminified":{"context":"browser","outputFormat":"global","optimize":false,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"}},"scripts":{"contributors":"git-authors-cli --print=false && prettier --write package.json && git add package.json package-lock.json && git commit -m \\"chore(contributors): update and sort contributors list\\"","check":"tsc --noEmit","watch":"parcel watch","build":"rm -rf dist && parcel build","prepublishOnly":"npm run build","test":"mocha -r ts-node/register -r jsdom-global/register test/**/*.ts","format":"prettier --write .","semantic-release":"semantic-release"},"devDependencies":{"@parcel/config-default":"^2.5.0","@parcel/packager-ts":"^2.5.0","@parcel/transformer-typescript-tsc":"^2.5.0","@parcel/transformer-typescript-types":"^2.5.0","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@types/chai":"^4.3.0","@types/mocha":"^9.1.0","@types/node":"^17.0.18","chai":"^4.3.6","git-authors-cli":"^1.0.40","jsdom":"^19.0.0","jsdom-global":"^3.0.2","mocha":"^9.2.0","mock-socket":"8.0.5","parcel":"^2.5.0","parcel-transformer-tsc-sourcemaps":"^1.0.2","prettier":"^2.6.2","semantic-release":"^19.0.2","standard":"^16.0.4","ts-node":"^10.5.0","typescript":"^4.5.5"},"dependencies":{"@swc/helpers":"^0.3.13","eventemitter3":"^4.0.7","peerjs-js-binarypack":"1.0.1","webrtc-adapter":"^7.7.1"}}');var Fc=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),kc=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],E;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(E)throw E.error}}return C},Mc=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Nc=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},as=(function(B){Fc(A,B);function A(I,g,Q,C,E,i){i===void 0&&(i=5e3);var D=B.call(this)||this;D.pingInterval=i,D._disconnected=!0,D._messagesQueue=[];var o=I?"wss://":"ws://";return D._baseUrl=o+g+":"+Q+C+"peerjs?key="+E,D}return A.prototype.start=function(I,g){var Q=this;this._id=I;var C="".concat(this._baseUrl,"&id=").concat(I,"&token=").concat(g);this._socket||!this._disconnected||(this._socket=new WebSocket(C+"&version="+WD.version),this._disconnected=!1,this._socket.onmessage=function(E){var i;try{i=JSON.parse(E.data),X.default.log("Server message received:",i)}catch{X.default.log("Invalid server message",E.data);return}Q.emit(dg.Message,i)},this._socket.onclose=function(E){Q._disconnected||(X.default.log("Socket closed.",E),Q._cleanup(),Q._disconnected=!0,Q.emit(dg.Disconnected))},this._socket.onopen=function(){Q._disconnected||(Q._sendQueuedMessages(),X.default.log("Socket open"),Q._scheduleHeartbeat())})},A.prototype._scheduleHeartbeat=function(){var I=this;this._wsPingTimer=setTimeout(function(){I._sendHeartbeat()},this.pingInterval)},A.prototype._sendHeartbeat=function(){if(!this._wsOpen()){X.default.log("Cannot send heartbeat, because socket closed");return}var I=JSON.stringify({type:iI.Heartbeat});this._socket.send(I),this._scheduleHeartbeat()},A.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},A.prototype._sendQueuedMessages=function(){var I,g,Q=Mc([],kc(this._messagesQueue),!1);this._messagesQueue=[];try{for(var C=Nc(Q),E=C.next();!E.done;E=C.next()){var i=E.value;this.send(i)}}catch(D){I={error:D}}finally{try{E&&!E.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}},A.prototype.send=function(I){if(!this._disconnected){if(!this._id){this._messagesQueue.push(I);return}if(!I.type){this.emit(dg.Error,"Invalid message");return}if(this._wsOpen()){var g=JSON.stringify(I);this._socket.send(g)}}},A.prototype.close=function(){this._disconnected||(this._cleanup(),this._disconnected=!0)},A.prototype._cleanup=function(){this._socket&&(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),this._socket=void 0),clearTimeout(this._wsPingTimer)},A})(kC.EventEmitter),aD={};rg(aD,"MediaConnection",()=>ns,B=>ns=B);var jD={};rg(jD,"Negotiator",()=>es,B=>es=B);var HE=function(){return HE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},HE.apply(this,arguments)},XC=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(E){E(C)})}return new(I||(I=Promise))(function(C,E){function i(s){try{o(g.next(s))}catch(t){E(t)}}function D(s){try{o(g.throw(s))}catch(t){E(t)}}function o(s){s.done?C(s.value):Q(s.value).then(i,D)}o((g=g.apply(B,A||[])).next())})},vC=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,E;return E={next:i(0),throw:i(1),return:i(2)},typeof Symbol=="function"&&(E[Symbol.iterator]=function(){return this}),E;function i(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},es=(function(){function B(A){this.connection=A}return B.prototype.startConnection=function(A){var I=this._startPeerConnection();if(this.connection.peerConnection=I,this.connection.type===og.Media&&A._stream&&this._addTracksToConnection(A._stream,I),A.originator){if(this.connection.type===og.Data){var g=this.connection,Q={ordered:!!A.reliable},C=I.createDataChannel(g.label,Q);g.initialize(C)}this._makeOffer()}else this.handleSDP("OFFER",A.sdp)},B.prototype._startPeerConnection=function(){X.default.log("Creating RTCPeerConnection.");var A=new RTCPeerConnection(this.connection.provider.options.config);return this._setupListeners(A),A},B.prototype._setupListeners=function(A){var I=this,g=this.connection.peer,Q=this.connection.connectionId,C=this.connection.type,E=this.connection.provider;X.default.log("Listening for ICE candidates."),A.onicecandidate=function(i){!i.candidate||!i.candidate.candidate||(X.default.log("Received ICE candidates for ".concat(g,":"),i.candidate),E.socket.send({type:iI.Candidate,payload:{candidate:i.candidate,type:C,connectionId:Q},dst:g}))},A.oniceconnectionstatechange=function(){switch(A.iceConnectionState){case"failed":X.default.log("iceConnectionState is failed, closing connections to "+g),I.connection.emit("error",new Error("Negotiation of connection to "+g+" failed.")),I.connection.close();break;case"closed":X.default.log("iceConnectionState is closed, closing connections to "+g),I.connection.emit("error",new Error("Connection to "+g+" closed.")),I.connection.close();break;case"disconnected":X.default.log("iceConnectionState changed to disconnected on the connection with "+g);break;case"completed":A.onicecandidate=eA.noop;break}I.connection.emit("iceStateChanged",A.iceConnectionState)},X.default.log("Listening for data channel"),A.ondatachannel=function(i){X.default.log("Received data channel");var D=i.channel,o=E.getConnection(g,Q);o.initialize(D)},X.default.log("Listening for remote stream"),A.ontrack=function(i){X.default.log("Received remote stream");var D=i.streams[0],o=E.getConnection(g,Q);if(o.type===og.Media){var s=o;I._addStreamToMediaConnection(D,s)}}},B.prototype.cleanup=function(){X.default.log("Cleaning up PeerConnection to "+this.connection.peer);var A=this.connection.peerConnection;if(A){this.connection.peerConnection=null,A.onicecandidate=A.oniceconnectionstatechange=A.ondatachannel=A.ontrack=function(){};var I=A.signalingState!=="closed",g=!1;if(this.connection.type===og.Data){var Q=this.connection,C=Q.dataChannel;C&&(g=!!C.readyState&&C.readyState!=="closed")}(I||g)&&A.close()}},B.prototype._makeOffer=function(){return XC(this,void 0,Promise,function(){var A,I,g,Q,C,E,i;return vC(this,function(D){switch(D.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,D.label=1;case 1:return D.trys.push([1,7,,8]),[4,A.createOffer(this.connection.options.constraints)];case 2:g=D.sent(),X.default.log("Created offer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),D.label=3;case 3:return D.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return D.sent(),X.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),Q={sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,metadata:this.connection.metadata,browser:eA.browser},this.connection.type===og.Data&&(C=this.connection,Q=HE(HE({},Q),{label:C.label,reliable:C.reliable,serialization:C.serialization})),I.socket.send({type:iI.Offer,payload:Q,dst:this.connection.peer}),[3,6];case 5:return E=D.sent(),E!="OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer"&&(I.emitError(qA.WebRTC,E),X.default.log("Failed to setLocalDescription, ",E)),[3,6];case 6:return[3,8];case 7:return i=D.sent(),I.emitError(qA.WebRTC,i),X.default.log("Failed to createOffer, ",i),[3,8];case 8:return[2]}})})},B.prototype._makeAnswer=function(){return XC(this,void 0,Promise,function(){var A,I,g,Q,C;return vC(this,function(E){switch(E.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,E.label=1;case 1:return E.trys.push([1,7,,8]),[4,A.createAnswer()];case 2:g=E.sent(),X.default.log("Created answer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),E.label=3;case 3:return E.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return E.sent(),X.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),I.socket.send({type:iI.Answer,payload:{sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,browser:eA.browser},dst:this.connection.peer}),[3,6];case 5:return Q=E.sent(),I.emitError(qA.WebRTC,Q),X.default.log("Failed to setLocalDescription, ",Q),[3,6];case 6:return[3,8];case 7:return C=E.sent(),I.emitError(qA.WebRTC,C),X.default.log("Failed to create answer, ",C),[3,8];case 8:return[2]}})})},B.prototype.handleSDP=function(A,I){return XC(this,void 0,Promise,function(){var g,Q,C,E;return vC(this,function(i){switch(i.label){case 0:I=new RTCSessionDescription(I),g=this.connection.peerConnection,Q=this.connection.provider,X.default.log("Setting remote description",I),C=this,i.label=1;case 1:return i.trys.push([1,5,,6]),[4,g.setRemoteDescription(I)];case 2:return i.sent(),X.default.log("Set remoteDescription:".concat(A," for:").concat(this.connection.peer)),A!=="OFFER"?[3,4]:[4,C._makeAnswer()];case 3:i.sent(),i.label=4;case 4:return[3,6];case 5:return E=i.sent(),Q.emitError(qA.WebRTC,E),X.default.log("Failed to setRemoteDescription, ",E),[3,6];case 6:return[2]}})})},B.prototype.handleCandidate=function(A){return XC(this,void 0,Promise,function(){var I,g,Q,C,E,i;return vC(this,function(D){switch(D.label){case 0:X.default.log("handleCandidate:",A),I=A.candidate,g=A.sdpMLineIndex,Q=A.sdpMid,C=this.connection.peerConnection,E=this.connection.provider,D.label=1;case 1:return D.trys.push([1,3,,4]),[4,C.addIceCandidate(new RTCIceCandidate({sdpMid:Q,sdpMLineIndex:g,candidate:I}))];case 2:return D.sent(),X.default.log("Added ICE candidate for:".concat(this.connection.peer)),[3,4];case 3:return i=D.sent(),E.emitError(qA.WebRTC,i),X.default.log("Failed to handleCandidate, ",i),[3,4];case 4:return[2]}})})},B.prototype._addTracksToConnection=function(A,I){if(X.default.log("add tracks from stream ".concat(A.id," to peer connection")),!I.addTrack)return X.default.error("Your browser does't support RTCPeerConnection#addTrack. Ignored.");A.getTracks().forEach(function(g){I.addTrack(g,A)})},B.prototype._addStreamToMediaConnection=function(A,I){X.default.log("add stream ".concat(A.id," to media connection ").concat(I.connectionId)),I.addStream(A)},B})(),zD={};rg(zD,"BaseConnection",()=>cs,B=>cs=B);var Jc=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),cs=(function(B){Jc(A,B);function A(I,g,Q){var C=B.call(this)||this;return C.peer=I,C.provider=g,C.options=Q,C._open=!1,C.metadata=Q.metadata,C}return Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),A})(kC.EventEmitter),Uc=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),YE=function(){return YE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},YE.apply(this,arguments)},Lc=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},ns=(function(B){Uc(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C._localStream=C.options._stream,C.connectionId=C.options.connectionId||A.ID_PREFIX+eA.randomToken(),C._negotiator=new jD.Negotiator(C),C._localStream&&C._negotiator.startConnection({_stream:C._localStream,originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return og.Media},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"localStream",{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"remoteStream",{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),A.prototype.addStream=function(I){X.default.log("Receiving stream",I),this._remoteStream=I,B.prototype.emit.call(this,"stream",I)},A.prototype.handleMessage=function(I){var g=I.type,Q=I.payload;switch(I.type){case iI.Answer:this._negotiator.handleSDP(g,Q.sdp),this._open=!0;break;case iI.Candidate:this._negotiator.handleCandidate(Q.candidate);break;default:X.default.warn("Unrecognized message type:".concat(g," from peer:").concat(this.peer));break}},A.prototype.answer=function(I,g){var Q,C;if(g===void 0&&(g={}),this._localStream){X.default.warn("Local stream already exists on this MediaConnection. Are you answering a call twice?");return}this._localStream=I,g&&g.sdpTransform&&(this.options.sdpTransform=g.sdpTransform),this._negotiator.startConnection(YE(YE({},this.options._payload),{_stream:I}));var E=this.provider._getMessages(this.connectionId);try{for(var i=Lc(E),D=i.next();!D.done;D=i.next()){var o=D.value;this.handleMessage(o)}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=i.return)&&C.call(i)}finally{if(Q)throw Q.error}}this._open=!0},A.prototype.close=function(){this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this._localStream=null,this._remoteStream=null,this.provider&&(this.provider._removeConnection(this),this.provider=null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.ID_PREFIX="mc_",A})(zD.BaseConnection),eD={};rg(eD,"DataConnection",()=>ys,B=>ys=B);var hw={};rg(hw,"EncodingQueue",()=>hs,B=>hs=B);var Hc=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),hs=(function(B){Hc(A,B);function A(){var I=B.call(this)||this;return I.fileReader=new FileReader,I._queue=[],I._processing=!1,I.fileReader.onload=function(g){I._processing=!1,g.target&&I.emit("done",g.target.result),I.doNextTask()},I.fileReader.onerror=function(g){X.default.error("EncodingQueue error:",g),I._processing=!1,I.destroy(),I.emit("error",g)},I}return Object.defineProperty(A.prototype,"queue",{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"size",{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"processing",{get:function(){return this._processing},enumerable:!1,configurable:!0}),A.prototype.enque=function(I){this.queue.push(I),!this.processing&&this.doNextTask()},A.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},A.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},A})(kC.EventEmitter),Yc=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),Kc=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},ys=(function(B){Yc(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C.stringify=JSON.stringify,C.parse=JSON.parse,C._buffer=[],C._bufferSize=0,C._buffering=!1,C._chunkedData={},C._encodingQueue=new hw.EncodingQueue,C.connectionId=C.options.connectionId||A.ID_PREFIX+eA.randomToken(),C.label=C.options.label||C.connectionId,C.serialization=C.options.serialization||Hg.Binary,C.reliable=!!C.options.reliable,C._encodingQueue.on("done",function(E){C._bufferedSend(E)}),C._encodingQueue.on("error",function(){X.default.error("DC#".concat(C.connectionId,": Error occured in encoding from blob to arraybuffer, close DC")),C.close()}),C._negotiator=new jD.Negotiator(C),C._negotiator.startConnection(C.options._payload||{originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return og.Data},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"dataChannel",{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"bufferSize",{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),A.prototype.initialize=function(I){this._dc=I,this._configureDataChannel()},A.prototype._configureDataChannel=function(){var I=this;(!eA.supports.binaryBlob||eA.supports.reliable)&&(this.dataChannel.binaryType="arraybuffer"),this.dataChannel.onopen=function(){X.default.log("DC#".concat(I.connectionId," dc connection success")),I._open=!0,I.emit("open")},this.dataChannel.onmessage=function(g){X.default.log("DC#".concat(I.connectionId," dc onmessage:"),g.data),I._handleDataMessage(g)},this.dataChannel.onclose=function(){X.default.log("DC#".concat(I.connectionId," dc closed for:"),I.peer),I.close()}},A.prototype._handleDataMessage=function(I){var g=this,Q=I.data,C=Q.constructor,E=this.serialization===Hg.Binary||this.serialization===Hg.BinaryUTF8,i=Q;if(E){if(C===Blob){eA.blobToArrayBuffer(Q,function(o){var s=eA.unpack(o);g.emit("data",s)});return}else if(C===ArrayBuffer)i=eA.unpack(Q);else if(C===String){var D=eA.binaryStringToArrayBuffer(Q);i=eA.unpack(D)}}else this.serialization===Hg.JSON&&(i=this.parse(Q));if(i.__peerData){this._handleChunk(i);return}B.prototype.emit.call(this,"data",i)},A.prototype._handleChunk=function(I){var g=I.__peerData,Q=this._chunkedData[g]||{data:[],count:0,total:I.total};if(Q.data[I.n]=I.data,Q.count++,this._chunkedData[g]=Q,Q.total===Q.count){delete this._chunkedData[g];var C=new Blob(Q.data);this._handleDataMessage({data:C})}},A.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this.provider&&(this.provider._removeConnection(this),this.provider=null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),this._encodingQueue=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.prototype.send=function(I,g){if(!this.open){B.prototype.emit.call(this,"error",new Error("Connection is not open. You should listen for the `open` event before sending messages."));return}if(this.serialization===Hg.JSON)this._bufferedSend(this.stringify(I));else if(this.serialization===Hg.Binary||this.serialization===Hg.BinaryUTF8){var Q=eA.pack(I);if(!g&&Q.size>eA.chunkedMTU){this._sendChunks(Q);return}eA.supports.binaryBlob?this._bufferedSend(Q):this._encodingQueue.enque(Q)}else this._bufferedSend(I)},A.prototype._bufferedSend=function(I){(this._buffering||!this._trySend(I))&&(this._buffer.push(I),this._bufferSize=this._buffer.length)},A.prototype._trySend=function(I){var g=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>A.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){g._buffering=!1,g._tryBuffer()},50),!1;try{this.dataChannel.send(I)}catch(Q){return X.default.error("DC#:".concat(this.connectionId," Error when sending:"),Q),this._buffering=!0,this.close(),!1}return!0},A.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var I=this._buffer[0];this._trySend(I)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},A.prototype._sendChunks=function(I){var g,Q,C=eA.chunk(I);X.default.log("DC#".concat(this.connectionId," Try to send ").concat(C.length," chunks..."));try{for(var E=Kc(C),i=E.next();!i.done;i=E.next()){var D=i.value;this.send(D,!0)}}catch(o){g={error:o}}finally{try{i&&!i.done&&(Q=E.return)&&Q.call(E)}finally{if(g)throw g.error}}},A.prototype.handleMessage=function(I){var g=I.payload;switch(I.type){case iI.Answer:this._negotiator.handleSDP(I.type,g.sdp);break;case iI.Candidate:this._negotiator.handleCandidate(g.candidate);break;default:X.default.warn("Unrecognized message type:",I.type,"from peer:",this.peer);break}},A.ID_PREFIX="dc_",A.MAX_BUFFERED_AMOUNT=8388608,A})(zD.BaseConnection),yw={};rg(yw,"API",()=>Ss,B=>Ss=B);var Gs=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(E){E(C)})}return new(I||(I=Promise))(function(C,E){function i(s){try{o(g.next(s))}catch(t){E(t)}}function D(s){try{o(g.throw(s))}catch(t){E(t)}}function o(s){s.done?C(s.value):Q(s.value).then(i,D)}o((g=g.apply(B,A||[])).next())})},rs=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,E;return E={next:i(0),throw:i(1),return:i(2)},typeof Symbol=="function"&&(E[Symbol.iterator]=function(){return this}),E;function i(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Ss=(function(){function B(A){this._options=A}return B.prototype._buildRequest=function(A){var I=this._options.secure?"https":"http",g=this._options,Q=g.host,C=g.port,E=g.path,i=g.key,D=new URL("".concat(I,"://").concat(Q,":").concat(C).concat(E).concat(i,"/").concat(A));return D.searchParams.set("ts","".concat(Date.now()).concat(Math.random())),D.searchParams.set("version",WD.version),fetch(D.href,{referrerPolicy:this._options.referrerPolicy})},B.prototype.retrieveId=function(){return Gs(this,void 0,Promise,function(){var A,I,g;return rs(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("id")];case 1:if(A=Q.sent(),A.status!==200)throw new Error("Error. Status:".concat(A.status));return[2,A.text()];case 2:throw I=Q.sent(),X.default.error("Error retrieving ID",I),g="",this._options.path==="/"&&this._options.host!==eA.CLOUD_HOST&&(g=" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),new Error("Could not get an ID from the server."+g);case 3:return[2]}})})},B.prototype.listAllPeers=function(){return Gs(this,void 0,Promise,function(){var A,I,g;return rs(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("peers")];case 1:if(A=Q.sent(),A.status!==200)throw A.status===401?(I="",this._options.host===eA.CLOUD_HOST?I="It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key.":I="You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature.",new Error("It doesn't look like you have permission to list peers IDs. "+I)):new Error("Error. Status:".concat(A.status));return[2,A.json()];case 2:throw g=Q.sent(),X.default.error("Error retrieving list peers",g),new Error("Could not get list peers from the server."+g);case 3:return[2]}})})},B})(),dc=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),KB=function(){return KB=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},KB.apply(this,arguments)},tB=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},lc=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],E;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(E)throw E.error}}return C},cD=(function(B){dc(A,B);function A(I,g){var Q=B.call(this)||this;Q._id=null,Q._lastServerId=null,Q._destroyed=!1,Q._disconnected=!1,Q._open=!1,Q._connections=new Map,Q._lostMessages=new Map;var C;return I&&I.constructor==Object?g=I:I&&(C=I.toString()),g=KB({debug:0,host:eA.CLOUD_HOST,port:eA.CLOUD_PORT,path:"/",key:A.DEFAULT_KEY,token:eA.randomToken(),config:eA.defaultConfig,referrerPolicy:"strict-origin-when-cross-origin"},g),Q._options=g,Q._options.host==="/"&&(Q._options.host=window.location.hostname),Q._options.path&&(Q._options.path[0]!=="/"&&(Q._options.path="/"+Q._options.path),Q._options.path[Q._options.path.length-1]!=="/"&&(Q._options.path+="/")),Q._options.secure===void 0&&Q._options.host!==eA.CLOUD_HOST?Q._options.secure=eA.isSecure():Q._options.host==eA.CLOUD_HOST&&(Q._options.secure=!0),Q._options.logFunction&&X.default.setLogFunction(Q._options.logFunction),X.default.logLevel=Q._options.debug||0,Q._api=new yw.API(g),Q._socket=Q._createServerConnection(),!eA.supports.audioVideo&&!eA.supports.data?(Q._delayedAbort(qA.BrowserIncompatible,"The current browser does not support WebRTC"),Q):C&&!eA.validateId(C)?(Q._delayedAbort(qA.InvalidID,'ID "'.concat(C,'" is invalid')),Q):(C?Q._initialize(C):Q._api.retrieveId().then(function(E){return Q._initialize(E)}).catch(function(E){return Q._abort(qA.ServerError,E)}),Q)}return Object.defineProperty(A.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"socket",{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"connections",{get:function(){var I,g,Q=Object.create(null);try{for(var C=tB(this._connections),E=C.next();!E.done;E=C.next()){var i=lc(E.value,2),D=i[0],o=i[1];Q[D]=o}}catch(s){I={error:s}}finally{try{E&&!E.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}return Q},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"disconnected",{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),A.prototype._createServerConnection=function(){var I=this,g=new nw.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return g.on(dg.Message,function(Q){I._handleMessage(Q)}),g.on(dg.Error,function(Q){I._abort(qA.SocketError,Q)}),g.on(dg.Disconnected,function(){I.disconnected||(I.emitError(qA.Network,"Lost connection to server."),I.disconnect())}),g.on(dg.Close,function(){I.disconnected||I._abort(qA.SocketClosed,"Underlying socket is already closed.")}),g},A.prototype._initialize=function(I){this._id=I,this.socket.start(I,this._options.token)},A.prototype._handleMessage=function(I){var g,Q,C=I.type,E=I.payload,i=I.src;switch(C){case iI.Open:this._lastServerId=this.id,this._open=!0,this.emit("open",this.id);break;case iI.Error:this._abort(qA.ServerError,E.msg);break;case iI.IdTaken:this._abort(qA.UnavailableID,'ID "'.concat(this.id,'" is taken'));break;case iI.InvalidKey:this._abort(qA.InvalidKey,'API KEY "'.concat(this._options.key,'" is invalid'));break;case iI.Leave:X.default.log("Received leave message from ".concat(i)),this._cleanupPeer(i),this._connections.delete(i);break;case iI.Expire:this.emitError(qA.PeerUnavailable,"Could not connect to peer ".concat(i));break;case iI.Offer:var y=E.connectionId,R=this.getConnection(i,y);if(R&&(R.close(),X.default.warn("Offer received for existing Connection ID:".concat(y))),E.type===og.Media){var D=new aD.MediaConnection(i,this,{connectionId:y,_payload:E,metadata:E.metadata});R=D,this._addConnection(i,R),this.emit("call",D)}else if(E.type===og.Data){var o=new eD.DataConnection(i,this,{connectionId:y,_payload:E,metadata:E.metadata,label:E.label,serialization:E.serialization,reliable:E.reliable});R=o,this._addConnection(i,R),this.emit("connection",o)}else{X.default.warn("Received malformed connection type:".concat(E.type));return}var s=this._getMessages(y);try{for(var t=tB(s),w=t.next();!w.done;w=t.next()){var a=w.value;R.handleMessage(a)}}catch(n){g={error:n}}finally{try{w&&!w.done&&(Q=t.return)&&Q.call(t)}finally{if(g)throw g.error}}break;default:if(!E){X.default.warn("You received a malformed message from ".concat(i," of type ").concat(C));return}var y=E.connectionId,R=this.getConnection(i,y);R&&R.peerConnection?R.handleMessage(I):y?this._storeMessage(y,I):X.default.warn("You received an unrecognized message:",I);break}},A.prototype._storeMessage=function(I,g){this._lostMessages.has(I)||this._lostMessages.set(I,[]),this._lostMessages.get(I).push(g)},A.prototype._getMessages=function(I){var g=this._lostMessages.get(I);return g?(this._lostMessages.delete(I),g):[]},A.prototype.connect=function(I,g){if(g===void 0&&(g={}),this.disconnected){X.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."),this.emitError(qA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}var Q=new eD.DataConnection(I,this,g);return this._addConnection(I,Q),Q},A.prototype.call=function(I,g,Q){if(Q===void 0&&(Q={}),this.disconnected){X.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."),this.emitError(qA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}if(!g){X.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.");return}var C=new aD.MediaConnection(I,this,KB(KB({},Q),{_stream:g}));return this._addConnection(I,C),C},A.prototype._addConnection=function(I,g){X.default.log("add connection ".concat(g.type,":").concat(g.connectionId," to peerId:").concat(I)),this._connections.has(I)||this._connections.set(I,[]),this._connections.get(I).push(g)},A.prototype._removeConnection=function(I){var g=this._connections.get(I.peer);if(g){var Q=g.indexOf(I);Q!==-1&&g.splice(Q,1)}this._lostMessages.delete(I.connectionId)},A.prototype.getConnection=function(I,g){var Q,C,E=this._connections.get(I);if(!E)return null;try{for(var i=tB(E),D=i.next();!D.done;D=i.next()){var o=D.value;if(o.connectionId===g)return o}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=i.return)&&C.call(i)}finally{if(Q)throw Q.error}}return null},A.prototype._delayedAbort=function(I,g){var Q=this;setTimeout(function(){Q._abort(I,g)},0)},A.prototype._abort=function(I,g){X.default.error("Aborting!"),this.emitError(I,g),this._lastServerId?this.disconnect():this.destroy()},A.prototype.emitError=function(I,g){X.default.error("Error:",g);var Q;typeof g=="string"?Q=new Error(g):Q=g,Q.type=I,this.emit("error",Q)},A.prototype.destroy=function(){this.destroyed||(X.default.log("Destroy peer with ID:".concat(this.id)),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit("close"))},A.prototype._cleanup=function(){var I,g;try{for(var Q=tB(this._connections.keys()),C=Q.next();!C.done;C=Q.next()){var E=C.value;this._cleanupPeer(E),this._connections.delete(E)}}catch(i){I={error:i}}finally{try{C&&!C.done&&(g=Q.return)&&g.call(Q)}finally{if(I)throw I.error}}this.socket.removeAllListeners()},A.prototype._cleanupPeer=function(I){var g,Q,C=this._connections.get(I);if(C)try{for(var E=tB(C),i=E.next();!i.done;i=E.next()){var D=i.value;D.close()}}catch(o){g={error:o}}finally{try{i&&!i.done&&(Q=E.return)&&Q.call(E)}finally{if(g)throw g.error}}},A.prototype.disconnect=function(){if(!this.disconnected){var I=this.id;X.default.log("Disconnect peer with ID:".concat(I)),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=I,this._id=null,this.emit("disconnected",I)}},A.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)X.default.log("Attempting reconnection to server with ID ".concat(this._lastServerId)),this._disconnected=!1,this._initialize(this._lastServerId);else{if(this.destroyed)throw new Error("This peer cannot reconnect to the server. It has already been destroyed.");if(!this.disconnected&&!this.open)X.default.error("In a hurry? We're still trying to make the initial connection!");else throw new Error("Peer ".concat(this.id," cannot reconnect because it is not disconnected from the server!"))}},A.prototype.listAllPeers=function(I){var g=this;I===void 0&&(I=function(Q){}),this._api.listAllPeers().then(function(Q){return I(Q)}).catch(function(Q){return g._abort(qA.ServerError,Q)})},A.DEFAULT_KEY="peerjs",A})(kC.EventEmitter),fc=ew.Peer;const xc=Object.freeze(Object.defineProperty({__proto__:null,get Peer(){return cD},default:fc,util:eA},Symbol.toStringTag,{value:"Module"}));class nD extends F.InstancedBufferGeometry{constructor(A,I){super(),this.ordering=A,this.setAttribute("position",new F.BufferAttribute(pc,3)),this.setIndex(new F.BufferAttribute(uc,1)),this._maxInstanceCount=A.length,this.instanceCount=I,this.attribute=new F.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(F.DynamicDrawUsage),this.setAttribute("splatIndex",this.attribute)}update(A,I){this.ordering=A,this.attribute.array=A,this.instanceCount=I,this.attribute.addUpdateRange(0,I),this.attribute.needsUpdate=!0}}const pc=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),uc=new Uint16Array([0,1,2,0,2,3]),Gw=`(function() {
1116
+ isUnifiedPlanSupported:`).concat(this.isUnifiedPlanSupported())},B})()),ns={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:["turn:eu-0.turn.peerjs.com:3478","turn:us-0.turn.peerjs.com:3478"],username:"peerjs",credential:"peerjsp"}],sdpSemantics:"unified-plan"},Mn=(function(){function B(){this.CLOUD_HOST="0.peerjs.com",this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=ns,this.browser=tB.getBrowser(),this.browserVersion=tB.getVersion(),this.supports=(function(){var A={browser:tB.isBrowserSupported(),webRTC:tB.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!A.webRTC)return A;var I;try{I=new RTCPeerConnection(ns),A.audioVideo=!0;var g=void 0;try{g=I.createDataChannel("_PEERJSTEST",{ordered:!0}),A.data=!0,A.reliable=!!g.ordered;try{g.binaryType="blob",A.binaryBlob=!tB.isIOS}catch{}}catch{}finally{g&&g.close()}}catch{}finally{I&&I.close()}return A})(),this.pack=Bs.pack,this.unpack=Bs.unpack,this._dataCount=1}return B.prototype.noop=function(){},B.prototype.validateId=function(A){return!A||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(A)},B.prototype.chunk=function(A){for(var I=[],g=A.size,Q=Math.ceil(g/eA.chunkedMTU),C=0,E=0;E<g;){var i=Math.min(g,E+eA.chunkedMTU),D=A.slice(E,i),o={__peerData:this._dataCount,n:C,data:D,total:Q};I.push(o),E=i,C++}return this._dataCount++,I},B.prototype.blobToArrayBuffer=function(A,I){var g=new FileReader;return g.onload=function(Q){Q.target&&I(Q.target.result)},g.readAsArrayBuffer(A),g},B.prototype.binaryStringToArrayBuffer=function(A){for(var I=new Uint8Array(A.length),g=0;g<A.length;g++)I[g]=A.charCodeAt(g)&255;return I.buffer},B.prototype.randomToken=function(){return Math.random().toString(36).slice(2)},B.prototype.isSecure=function(){return location.protocol==="https:"},B})(),eA=new Mn,Rw={};rg(Rw,"Peer",()=>cD,B=>cD=B);var MC={},Nn=Object.prototype.hasOwnProperty,FI="~";function SC(){}Object.create&&(SC.prototype=Object.create(null),new SC().__proto__||(FI=!1));function Jn(B,A,I){this.fn=B,this.context=A,this.once=I||!1}function Fw(B,A,I,g,Q){if(typeof I!="function")throw new TypeError("The listener must be a function");var C=new Jn(I,g||B,Q),E=FI?FI+A:A;return B._events[E]?B._events[E].fn?B._events[E]=[B._events[E],C]:B._events[E].push(C):(B._events[E]=C,B._eventsCount++),B}function hE(B,A){--B._eventsCount===0?B._events=new SC:delete B._events[A]}function eI(){this._events=new SC,this._eventsCount=0}eI.prototype.eventNames=function(){var A=[],I,g;if(this._eventsCount===0)return A;for(g in I=this._events)Nn.call(I,g)&&A.push(FI?g.slice(1):g);return Object.getOwnPropertySymbols?A.concat(Object.getOwnPropertySymbols(I)):A};eI.prototype.listeners=function(A){var I=FI?FI+A:A,g=this._events[I];if(!g)return[];if(g.fn)return[g.fn];for(var Q=0,C=g.length,E=new Array(C);Q<C;Q++)E[Q]=g[Q].fn;return E};eI.prototype.listenerCount=function(A){var I=FI?FI+A:A,g=this._events[I];return g?g.fn?1:g.length:0};eI.prototype.emit=function(A,I,g,Q,C,E){var i=FI?FI+A:A;if(!this._events[i])return!1;var D=this._events[i],o=arguments.length,s,t;if(D.fn){switch(D.once&&this.removeListener(A,D.fn,void 0,!0),o){case 1:return D.fn.call(D.context),!0;case 2:return D.fn.call(D.context,I),!0;case 3:return D.fn.call(D.context,I,g),!0;case 4:return D.fn.call(D.context,I,g,Q),!0;case 5:return D.fn.call(D.context,I,g,Q,C),!0;case 6:return D.fn.call(D.context,I,g,Q,C,E),!0}for(t=1,s=new Array(o-1);t<o;t++)s[t-1]=arguments[t];D.fn.apply(D.context,s)}else{var w=D.length,a;for(t=0;t<w;t++)switch(D[t].once&&this.removeListener(A,D[t].fn,void 0,!0),o){case 1:D[t].fn.call(D[t].context);break;case 2:D[t].fn.call(D[t].context,I);break;case 3:D[t].fn.call(D[t].context,I,g);break;case 4:D[t].fn.call(D[t].context,I,g,Q);break;default:if(!s)for(a=1,s=new Array(o-1);a<o;a++)s[a-1]=arguments[a];D[t].fn.apply(D[t].context,s)}}return!0};eI.prototype.on=function(A,I,g){return Fw(this,A,I,g,!1)};eI.prototype.once=function(A,I,g){return Fw(this,A,I,g,!0)};eI.prototype.removeListener=function(A,I,g,Q){var C=FI?FI+A:A;if(!this._events[C])return this;if(!I)return hE(this,C),this;var E=this._events[C];if(E.fn)E.fn===I&&(!Q||E.once)&&(!g||E.context===g)&&hE(this,C);else{for(var i=0,D=[],o=E.length;i<o;i++)(E[i].fn!==I||Q&&!E[i].once||g&&E[i].context!==g)&&D.push(E[i]);D.length?this._events[C]=D.length===1?D[0]:D:hE(this,C)}return this};eI.prototype.removeAllListeners=function(A){var I;return A?(I=FI?FI+A:A,this._events[I]&&hE(this,I)):(this._events=new SC,this._eventsCount=0),this};eI.prototype.off=eI.prototype.removeListener;eI.prototype.addListener=eI.prototype.on;eI.prefixed=FI;eI.EventEmitter=eI;MC=eI;var X={};rg(X,"LogLevel",()=>LI,B=>LI=B);rg(X,"default",()=>cs,B=>cs=B);var _g=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],E;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(E)throw E.error}}return C},$g=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Un="PeerJS: ",LI;(function(B){B[B.Disabled=0]="Disabled",B[B.Errors=1]="Errors",B[B.Warnings=2]="Warnings",B[B.All=3]="All"})(LI||(LI={}));var Ln=(function(){function B(){this._logLevel=LI.Disabled}return Object.defineProperty(B.prototype,"logLevel",{get:function(){return this._logLevel},set:function(A){this._logLevel=A},enumerable:!1,configurable:!0}),B.prototype.log=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=LI.All&&this._print.apply(this,$g([LI.All],_g(A),!1))},B.prototype.warn=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=LI.Warnings&&this._print.apply(this,$g([LI.Warnings],_g(A),!1))},B.prototype.error=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=LI.Errors&&this._print.apply(this,$g([LI.Errors],_g(A),!1))},B.prototype.setLogFunction=function(A){this._print=A},B.prototype._print=function(A){for(var I=[],g=1;g<arguments.length;g++)I[g-1]=arguments[g];var Q=$g([Un],_g(I),!1);for(var C in Q)Q[C]instanceof Error&&(Q[C]="("+Q[C].name+") "+Q[C].message);A>=LI.All?console.log.apply(console,$g([],_g(Q),!1)):A>=LI.Warnings?console.warn.apply(console,$g(["WARNING"],_g(Q),!1)):A>=LI.Errors&&console.error.apply(console,$g(["ERROR"],_g(Q),!1))},B})(),cs=new Ln,kw={};rg(kw,"Socket",()=>hs,B=>hs=B);var og;(function(B){B.Data="data",B.Media="media"})(og||(og={}));var qA;(function(B){B.BrowserIncompatible="browser-incompatible",B.Disconnected="disconnected",B.InvalidID="invalid-id",B.InvalidKey="invalid-key",B.Network="network",B.PeerUnavailable="peer-unavailable",B.SslUnavailable="ssl-unavailable",B.ServerError="server-error",B.SocketError="socket-error",B.SocketClosed="socket-closed",B.UnavailableID="unavailable-id",B.WebRTC="webrtc"})(qA||(qA={}));var Hg;(function(B){B.Binary="binary",B.BinaryUTF8="binary-utf8",B.JSON="json"})(Hg||(Hg={}));var dg;(function(B){B.Message="message",B.Disconnected="disconnected",B.Error="error",B.Close="close"})(dg||(dg={}));var iI;(function(B){B.Heartbeat="HEARTBEAT",B.Candidate="CANDIDATE",B.Offer="OFFER",B.Answer="ANSWER",B.Open="OPEN",B.Error="ERROR",B.IdTaken="ID-TAKEN",B.InvalidKey="INVALID-KEY",B.Leave="LEAVE",B.Expire="EXPIRE"})(iI||(iI={}));var _D={};_D=JSON.parse('{"name":"peerjs","version":"1.4.7","keywords":["peerjs","webrtc","p2p","rtc"],"description":"PeerJS client","homepage":"https://peerjs.com","bugs":{"url":"https://github.com/peers/peerjs/issues"},"repository":{"type":"git","url":"https://github.com/peers/peerjs"},"license":"MIT","contributors":["Michelle Bu <michelle@michellebu.com>","afrokick <devbyru@gmail.com>","ericz <really.ez@gmail.com>","Jairo <kidandcat@gmail.com>","Jonas Gloning <34194370+jonasgloning@users.noreply.github.com>","Jairo Caro-Accino Viciana <jairo@galax.be>","Carlos Caballero <carlos.caballero.gonzalez@gmail.com>","hc <hheennrryy@gmail.com>","Muhammad Asif <capripio@gmail.com>","PrashoonB <prashoonbhattacharjee@gmail.com>","Harsh Bardhan Mishra <47351025+HarshCasper@users.noreply.github.com>","akotynski <aleksanderkotbury@gmail.com>","lmb <i@lmb.io>","Jairooo <jairocaro@msn.com>","Moritz Stückler <moritz.stueckler@gmail.com>","Simon <crydotsnakegithub@gmail.com>","Denis Lukov <denismassters@gmail.com>","Philipp Hancke <fippo@andyet.net>","Hans Oksendahl <hansoksendahl@gmail.com>","Jess <jessachandler@gmail.com>","khankuan <khankuan@gmail.com>","DUODVK <kurmanov.work@gmail.com>","XiZhao <kwang1imsa@gmail.com>","Matthias Lohr <matthias@lohr.me>","=frank tree <=frnktrb@googlemail.com>","Andre Eckardt <aeckardt@outlook.com>","Chris Cowan <agentme49@gmail.com>","Alex Chuev <alex@chuev.com>","alxnull <alxnull@e.mail.de>","Yemel Jardi <angel.jardi@gmail.com>","Ben Parnell <benjaminparnell.94@gmail.com>","Benny Lichtner <bennlich@gmail.com>","fresheneesz <bitetrudpublic@gmail.com>","bob.barstead@exaptive.com <bob.barstead@exaptive.com>","chandika <chandika@gmail.com>","emersion <contact@emersion.fr>","Christopher Van <cvan@users.noreply.github.com>","eddieherm <edhermoso@gmail.com>","Eduardo Pinho <enet4mikeenet@gmail.com>","Evandro Zanatta <ezanatta@tray.net.br>","Gardner Bickford <gardner@users.noreply.github.com>","Gian Luca <gianluca.cecchi@cynny.com>","PatrickJS <github@gdi2290.com>","jonnyf <github@jonathanfoss.co.uk>","Hizkia Felix <hizkifw@gmail.com>","Hristo Oskov <hristo.oskov@gmail.com>","Isaac Madwed <i.madwed@gmail.com>","Ilya Konanykhin <ilya.konanykhin@gmail.com>","jasonbarry <jasbarry@me.com>","Jonathan Burke <jonathan.burke.1311@googlemail.com>","Josh Hamit <josh.hamit@gmail.com>","Jordan Austin <jrax86@gmail.com>","Joel Wetzell <jwetzell@yahoo.com>","xizhao <kevin.wang@cloudera.com>","Alberto Torres <kungfoobar@gmail.com>","Jonathan Mayol <mayoljonathan@gmail.com>","Jefferson Felix <me@jsfelix.dev>","Rolf Erik Lekang <me@rolflekang.com>","Kevin Mai-Husan Chia <mhchia@users.noreply.github.com>","Pepijn de Vos <pepijndevos@gmail.com>","JooYoung <qkdlql@naver.com>","Tobias Speicher <rootcommander@gmail.com>","Steve Blaurock <sblaurock@gmail.com>","Kyrylo Shegeda <shegeda@ualberta.ca>","Diwank Singh Tomer <singh@diwank.name>","Sören Balko <Soeren.Balko@gmail.com>","Arpit Solanki <solankiarpit1997@gmail.com>","Yuki Ito <yuki@gnnk.net>","Artur Zayats <zag2art@gmail.com>"],"funding":{"type":"opencollective","url":"https://opencollective.com/peer"},"collective":{"type":"opencollective","url":"https://opencollective.com/peer"},"files":["dist/*"],"sideEffects":["lib/global.ts","lib/supports.ts"],"main":"dist/bundler.cjs","module":"dist/bundler.mjs","browser-minified":"dist/peerjs.min.js","browser-unminified":"dist/peerjs.js","types":"dist/types.d.ts","engines":{"node":">= 10"},"targets":{"types":{"source":"lib/exports.ts"},"main":{"source":"lib/exports.ts","sourceMap":{"inlineSources":true}},"module":{"source":"lib/exports.ts","includeNodeModules":["eventemitter3"],"sourceMap":{"inlineSources":true}},"browser-minified":{"context":"browser","outputFormat":"global","optimize":true,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"},"browser-unminified":{"context":"browser","outputFormat":"global","optimize":false,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"}},"scripts":{"contributors":"git-authors-cli --print=false && prettier --write package.json && git add package.json package-lock.json && git commit -m \\"chore(contributors): update and sort contributors list\\"","check":"tsc --noEmit","watch":"parcel watch","build":"rm -rf dist && parcel build","prepublishOnly":"npm run build","test":"mocha -r ts-node/register -r jsdom-global/register test/**/*.ts","format":"prettier --write .","semantic-release":"semantic-release"},"devDependencies":{"@parcel/config-default":"^2.5.0","@parcel/packager-ts":"^2.5.0","@parcel/transformer-typescript-tsc":"^2.5.0","@parcel/transformer-typescript-types":"^2.5.0","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@types/chai":"^4.3.0","@types/mocha":"^9.1.0","@types/node":"^17.0.18","chai":"^4.3.6","git-authors-cli":"^1.0.40","jsdom":"^19.0.0","jsdom-global":"^3.0.2","mocha":"^9.2.0","mock-socket":"8.0.5","parcel":"^2.5.0","parcel-transformer-tsc-sourcemaps":"^1.0.2","prettier":"^2.6.2","semantic-release":"^19.0.2","standard":"^16.0.4","ts-node":"^10.5.0","typescript":"^4.5.5"},"dependencies":{"@swc/helpers":"^0.3.13","eventemitter3":"^4.0.7","peerjs-js-binarypack":"1.0.1","webrtc-adapter":"^7.7.1"}}');var Hn=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),Yn=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],E;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(E)throw E.error}}return C},Kn=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},dn=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},hs=(function(B){Hn(A,B);function A(I,g,Q,C,E,i){i===void 0&&(i=5e3);var D=B.call(this)||this;D.pingInterval=i,D._disconnected=!0,D._messagesQueue=[];var o=I?"wss://":"ws://";return D._baseUrl=o+g+":"+Q+C+"peerjs?key="+E,D}return A.prototype.start=function(I,g){var Q=this;this._id=I;var C="".concat(this._baseUrl,"&id=").concat(I,"&token=").concat(g);this._socket||!this._disconnected||(this._socket=new WebSocket(C+"&version="+_D.version),this._disconnected=!1,this._socket.onmessage=function(E){var i;try{i=JSON.parse(E.data),X.default.log("Server message received:",i)}catch{X.default.log("Invalid server message",E.data);return}Q.emit(dg.Message,i)},this._socket.onclose=function(E){Q._disconnected||(X.default.log("Socket closed.",E),Q._cleanup(),Q._disconnected=!0,Q.emit(dg.Disconnected))},this._socket.onopen=function(){Q._disconnected||(Q._sendQueuedMessages(),X.default.log("Socket open"),Q._scheduleHeartbeat())})},A.prototype._scheduleHeartbeat=function(){var I=this;this._wsPingTimer=setTimeout(function(){I._sendHeartbeat()},this.pingInterval)},A.prototype._sendHeartbeat=function(){if(!this._wsOpen()){X.default.log("Cannot send heartbeat, because socket closed");return}var I=JSON.stringify({type:iI.Heartbeat});this._socket.send(I),this._scheduleHeartbeat()},A.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},A.prototype._sendQueuedMessages=function(){var I,g,Q=Kn([],Yn(this._messagesQueue),!1);this._messagesQueue=[];try{for(var C=dn(Q),E=C.next();!E.done;E=C.next()){var i=E.value;this.send(i)}}catch(D){I={error:D}}finally{try{E&&!E.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}},A.prototype.send=function(I){if(!this._disconnected){if(!this._id){this._messagesQueue.push(I);return}if(!I.type){this.emit(dg.Error,"Invalid message");return}if(this._wsOpen()){var g=JSON.stringify(I);this._socket.send(g)}}},A.prototype.close=function(){this._disconnected||(this._cleanup(),this._disconnected=!0)},A.prototype._cleanup=function(){this._socket&&(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),this._socket=void 0),clearTimeout(this._wsPingTimer)},A})(MC.EventEmitter),eD={};rg(eD,"MediaConnection",()=>rs,B=>rs=B);var $D={};rg($D,"Negotiator",()=>ys,B=>ys=B);var HE=function(){return HE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},HE.apply(this,arguments)},XC=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(E){E(C)})}return new(I||(I=Promise))(function(C,E){function i(s){try{o(g.next(s))}catch(t){E(t)}}function D(s){try{o(g.throw(s))}catch(t){E(t)}}function o(s){s.done?C(s.value):Q(s.value).then(i,D)}o((g=g.apply(B,A||[])).next())})},vC=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,E;return E={next:i(0),throw:i(1),return:i(2)},typeof Symbol=="function"&&(E[Symbol.iterator]=function(){return this}),E;function i(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},ys=(function(){function B(A){this.connection=A}return B.prototype.startConnection=function(A){var I=this._startPeerConnection();if(this.connection.peerConnection=I,this.connection.type===og.Media&&A._stream&&this._addTracksToConnection(A._stream,I),A.originator){if(this.connection.type===og.Data){var g=this.connection,Q={ordered:!!A.reliable},C=I.createDataChannel(g.label,Q);g.initialize(C)}this._makeOffer()}else this.handleSDP("OFFER",A.sdp)},B.prototype._startPeerConnection=function(){X.default.log("Creating RTCPeerConnection.");var A=new RTCPeerConnection(this.connection.provider.options.config);return this._setupListeners(A),A},B.prototype._setupListeners=function(A){var I=this,g=this.connection.peer,Q=this.connection.connectionId,C=this.connection.type,E=this.connection.provider;X.default.log("Listening for ICE candidates."),A.onicecandidate=function(i){!i.candidate||!i.candidate.candidate||(X.default.log("Received ICE candidates for ".concat(g,":"),i.candidate),E.socket.send({type:iI.Candidate,payload:{candidate:i.candidate,type:C,connectionId:Q},dst:g}))},A.oniceconnectionstatechange=function(){switch(A.iceConnectionState){case"failed":X.default.log("iceConnectionState is failed, closing connections to "+g),I.connection.emit("error",new Error("Negotiation of connection to "+g+" failed.")),I.connection.close();break;case"closed":X.default.log("iceConnectionState is closed, closing connections to "+g),I.connection.emit("error",new Error("Connection to "+g+" closed.")),I.connection.close();break;case"disconnected":X.default.log("iceConnectionState changed to disconnected on the connection with "+g);break;case"completed":A.onicecandidate=eA.noop;break}I.connection.emit("iceStateChanged",A.iceConnectionState)},X.default.log("Listening for data channel"),A.ondatachannel=function(i){X.default.log("Received data channel");var D=i.channel,o=E.getConnection(g,Q);o.initialize(D)},X.default.log("Listening for remote stream"),A.ontrack=function(i){X.default.log("Received remote stream");var D=i.streams[0],o=E.getConnection(g,Q);if(o.type===og.Media){var s=o;I._addStreamToMediaConnection(D,s)}}},B.prototype.cleanup=function(){X.default.log("Cleaning up PeerConnection to "+this.connection.peer);var A=this.connection.peerConnection;if(A){this.connection.peerConnection=null,A.onicecandidate=A.oniceconnectionstatechange=A.ondatachannel=A.ontrack=function(){};var I=A.signalingState!=="closed",g=!1;if(this.connection.type===og.Data){var Q=this.connection,C=Q.dataChannel;C&&(g=!!C.readyState&&C.readyState!=="closed")}(I||g)&&A.close()}},B.prototype._makeOffer=function(){return XC(this,void 0,Promise,function(){var A,I,g,Q,C,E,i;return vC(this,function(D){switch(D.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,D.label=1;case 1:return D.trys.push([1,7,,8]),[4,A.createOffer(this.connection.options.constraints)];case 2:g=D.sent(),X.default.log("Created offer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),D.label=3;case 3:return D.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return D.sent(),X.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),Q={sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,metadata:this.connection.metadata,browser:eA.browser},this.connection.type===og.Data&&(C=this.connection,Q=HE(HE({},Q),{label:C.label,reliable:C.reliable,serialization:C.serialization})),I.socket.send({type:iI.Offer,payload:Q,dst:this.connection.peer}),[3,6];case 5:return E=D.sent(),E!="OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer"&&(I.emitError(qA.WebRTC,E),X.default.log("Failed to setLocalDescription, ",E)),[3,6];case 6:return[3,8];case 7:return i=D.sent(),I.emitError(qA.WebRTC,i),X.default.log("Failed to createOffer, ",i),[3,8];case 8:return[2]}})})},B.prototype._makeAnswer=function(){return XC(this,void 0,Promise,function(){var A,I,g,Q,C;return vC(this,function(E){switch(E.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,E.label=1;case 1:return E.trys.push([1,7,,8]),[4,A.createAnswer()];case 2:g=E.sent(),X.default.log("Created answer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),E.label=3;case 3:return E.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return E.sent(),X.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),I.socket.send({type:iI.Answer,payload:{sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,browser:eA.browser},dst:this.connection.peer}),[3,6];case 5:return Q=E.sent(),I.emitError(qA.WebRTC,Q),X.default.log("Failed to setLocalDescription, ",Q),[3,6];case 6:return[3,8];case 7:return C=E.sent(),I.emitError(qA.WebRTC,C),X.default.log("Failed to create answer, ",C),[3,8];case 8:return[2]}})})},B.prototype.handleSDP=function(A,I){return XC(this,void 0,Promise,function(){var g,Q,C,E;return vC(this,function(i){switch(i.label){case 0:I=new RTCSessionDescription(I),g=this.connection.peerConnection,Q=this.connection.provider,X.default.log("Setting remote description",I),C=this,i.label=1;case 1:return i.trys.push([1,5,,6]),[4,g.setRemoteDescription(I)];case 2:return i.sent(),X.default.log("Set remoteDescription:".concat(A," for:").concat(this.connection.peer)),A!=="OFFER"?[3,4]:[4,C._makeAnswer()];case 3:i.sent(),i.label=4;case 4:return[3,6];case 5:return E=i.sent(),Q.emitError(qA.WebRTC,E),X.default.log("Failed to setRemoteDescription, ",E),[3,6];case 6:return[2]}})})},B.prototype.handleCandidate=function(A){return XC(this,void 0,Promise,function(){var I,g,Q,C,E,i;return vC(this,function(D){switch(D.label){case 0:X.default.log("handleCandidate:",A),I=A.candidate,g=A.sdpMLineIndex,Q=A.sdpMid,C=this.connection.peerConnection,E=this.connection.provider,D.label=1;case 1:return D.trys.push([1,3,,4]),[4,C.addIceCandidate(new RTCIceCandidate({sdpMid:Q,sdpMLineIndex:g,candidate:I}))];case 2:return D.sent(),X.default.log("Added ICE candidate for:".concat(this.connection.peer)),[3,4];case 3:return i=D.sent(),E.emitError(qA.WebRTC,i),X.default.log("Failed to handleCandidate, ",i),[3,4];case 4:return[2]}})})},B.prototype._addTracksToConnection=function(A,I){if(X.default.log("add tracks from stream ".concat(A.id," to peer connection")),!I.addTrack)return X.default.error("Your browser does't support RTCPeerConnection#addTrack. Ignored.");A.getTracks().forEach(function(g){I.addTrack(g,A)})},B.prototype._addStreamToMediaConnection=function(A,I){X.default.log("add stream ".concat(A.id," to media connection ").concat(I.connectionId)),I.addStream(A)},B})(),Ao={};rg(Ao,"BaseConnection",()=>Gs,B=>Gs=B);var ln=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),Gs=(function(B){ln(A,B);function A(I,g,Q){var C=B.call(this)||this;return C.peer=I,C.provider=g,C.options=Q,C._open=!1,C.metadata=Q.metadata,C}return Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),A})(MC.EventEmitter),fn=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),YE=function(){return YE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},YE.apply(this,arguments)},xn=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},rs=(function(B){fn(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C._localStream=C.options._stream,C.connectionId=C.options.connectionId||A.ID_PREFIX+eA.randomToken(),C._negotiator=new $D.Negotiator(C),C._localStream&&C._negotiator.startConnection({_stream:C._localStream,originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return og.Media},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"localStream",{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"remoteStream",{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),A.prototype.addStream=function(I){X.default.log("Receiving stream",I),this._remoteStream=I,B.prototype.emit.call(this,"stream",I)},A.prototype.handleMessage=function(I){var g=I.type,Q=I.payload;switch(I.type){case iI.Answer:this._negotiator.handleSDP(g,Q.sdp),this._open=!0;break;case iI.Candidate:this._negotiator.handleCandidate(Q.candidate);break;default:X.default.warn("Unrecognized message type:".concat(g," from peer:").concat(this.peer));break}},A.prototype.answer=function(I,g){var Q,C;if(g===void 0&&(g={}),this._localStream){X.default.warn("Local stream already exists on this MediaConnection. Are you answering a call twice?");return}this._localStream=I,g&&g.sdpTransform&&(this.options.sdpTransform=g.sdpTransform),this._negotiator.startConnection(YE(YE({},this.options._payload),{_stream:I}));var E=this.provider._getMessages(this.connectionId);try{for(var i=xn(E),D=i.next();!D.done;D=i.next()){var o=D.value;this.handleMessage(o)}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=i.return)&&C.call(i)}finally{if(Q)throw Q.error}}this._open=!0},A.prototype.close=function(){this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this._localStream=null,this._remoteStream=null,this.provider&&(this.provider._removeConnection(this),this.provider=null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.ID_PREFIX="mc_",A})(Ao.BaseConnection),nD={};rg(nD,"DataConnection",()=>Rs,B=>Rs=B);var Mw={};rg(Mw,"EncodingQueue",()=>Ss,B=>Ss=B);var pn=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),Ss=(function(B){pn(A,B);function A(){var I=B.call(this)||this;return I.fileReader=new FileReader,I._queue=[],I._processing=!1,I.fileReader.onload=function(g){I._processing=!1,g.target&&I.emit("done",g.target.result),I.doNextTask()},I.fileReader.onerror=function(g){X.default.error("EncodingQueue error:",g),I._processing=!1,I.destroy(),I.emit("error",g)},I}return Object.defineProperty(A.prototype,"queue",{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"size",{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"processing",{get:function(){return this._processing},enumerable:!1,configurable:!0}),A.prototype.enque=function(I){this.queue.push(I),!this.processing&&this.doNextTask()},A.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},A.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},A})(MC.EventEmitter),un=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),qn=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},Rs=(function(B){un(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C.stringify=JSON.stringify,C.parse=JSON.parse,C._buffer=[],C._bufferSize=0,C._buffering=!1,C._chunkedData={},C._encodingQueue=new Mw.EncodingQueue,C.connectionId=C.options.connectionId||A.ID_PREFIX+eA.randomToken(),C.label=C.options.label||C.connectionId,C.serialization=C.options.serialization||Hg.Binary,C.reliable=!!C.options.reliable,C._encodingQueue.on("done",function(E){C._bufferedSend(E)}),C._encodingQueue.on("error",function(){X.default.error("DC#".concat(C.connectionId,": Error occured in encoding from blob to arraybuffer, close DC")),C.close()}),C._negotiator=new $D.Negotiator(C),C._negotiator.startConnection(C.options._payload||{originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return og.Data},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"dataChannel",{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"bufferSize",{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),A.prototype.initialize=function(I){this._dc=I,this._configureDataChannel()},A.prototype._configureDataChannel=function(){var I=this;(!eA.supports.binaryBlob||eA.supports.reliable)&&(this.dataChannel.binaryType="arraybuffer"),this.dataChannel.onopen=function(){X.default.log("DC#".concat(I.connectionId," dc connection success")),I._open=!0,I.emit("open")},this.dataChannel.onmessage=function(g){X.default.log("DC#".concat(I.connectionId," dc onmessage:"),g.data),I._handleDataMessage(g)},this.dataChannel.onclose=function(){X.default.log("DC#".concat(I.connectionId," dc closed for:"),I.peer),I.close()}},A.prototype._handleDataMessage=function(I){var g=this,Q=I.data,C=Q.constructor,E=this.serialization===Hg.Binary||this.serialization===Hg.BinaryUTF8,i=Q;if(E){if(C===Blob){eA.blobToArrayBuffer(Q,function(o){var s=eA.unpack(o);g.emit("data",s)});return}else if(C===ArrayBuffer)i=eA.unpack(Q);else if(C===String){var D=eA.binaryStringToArrayBuffer(Q);i=eA.unpack(D)}}else this.serialization===Hg.JSON&&(i=this.parse(Q));if(i.__peerData){this._handleChunk(i);return}B.prototype.emit.call(this,"data",i)},A.prototype._handleChunk=function(I){var g=I.__peerData,Q=this._chunkedData[g]||{data:[],count:0,total:I.total};if(Q.data[I.n]=I.data,Q.count++,this._chunkedData[g]=Q,Q.total===Q.count){delete this._chunkedData[g];var C=new Blob(Q.data);this._handleDataMessage({data:C})}},A.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this.provider&&(this.provider._removeConnection(this),this.provider=null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),this._encodingQueue=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.prototype.send=function(I,g){if(!this.open){B.prototype.emit.call(this,"error",new Error("Connection is not open. You should listen for the `open` event before sending messages."));return}if(this.serialization===Hg.JSON)this._bufferedSend(this.stringify(I));else if(this.serialization===Hg.Binary||this.serialization===Hg.BinaryUTF8){var Q=eA.pack(I);if(!g&&Q.size>eA.chunkedMTU){this._sendChunks(Q);return}eA.supports.binaryBlob?this._bufferedSend(Q):this._encodingQueue.enque(Q)}else this._bufferedSend(I)},A.prototype._bufferedSend=function(I){(this._buffering||!this._trySend(I))&&(this._buffer.push(I),this._bufferSize=this._buffer.length)},A.prototype._trySend=function(I){var g=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>A.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){g._buffering=!1,g._tryBuffer()},50),!1;try{this.dataChannel.send(I)}catch(Q){return X.default.error("DC#:".concat(this.connectionId," Error when sending:"),Q),this._buffering=!0,this.close(),!1}return!0},A.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var I=this._buffer[0];this._trySend(I)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},A.prototype._sendChunks=function(I){var g,Q,C=eA.chunk(I);X.default.log("DC#".concat(this.connectionId," Try to send ").concat(C.length," chunks..."));try{for(var E=qn(C),i=E.next();!i.done;i=E.next()){var D=i.value;this.send(D,!0)}}catch(o){g={error:o}}finally{try{i&&!i.done&&(Q=E.return)&&Q.call(E)}finally{if(g)throw g.error}}},A.prototype.handleMessage=function(I){var g=I.payload;switch(I.type){case iI.Answer:this._negotiator.handleSDP(I.type,g.sdp);break;case iI.Candidate:this._negotiator.handleCandidate(g.candidate);break;default:X.default.warn("Unrecognized message type:",I.type,"from peer:",this.peer);break}},A.ID_PREFIX="dc_",A.MAX_BUFFERED_AMOUNT=8388608,A})(Ao.BaseConnection),Nw={};rg(Nw,"API",()=>Ms,B=>Ms=B);var Fs=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(E){E(C)})}return new(I||(I=Promise))(function(C,E){function i(s){try{o(g.next(s))}catch(t){E(t)}}function D(s){try{o(g.throw(s))}catch(t){E(t)}}function o(s){s.done?C(s.value):Q(s.value).then(i,D)}o((g=g.apply(B,A||[])).next())})},ks=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,E;return E={next:i(0),throw:i(1),return:i(2)},typeof Symbol=="function"&&(E[Symbol.iterator]=function(){return this}),E;function i(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Ms=(function(){function B(A){this._options=A}return B.prototype._buildRequest=function(A){var I=this._options.secure?"https":"http",g=this._options,Q=g.host,C=g.port,E=g.path,i=g.key,D=new URL("".concat(I,"://").concat(Q,":").concat(C).concat(E).concat(i,"/").concat(A));return D.searchParams.set("ts","".concat(Date.now()).concat(Math.random())),D.searchParams.set("version",_D.version),fetch(D.href,{referrerPolicy:this._options.referrerPolicy})},B.prototype.retrieveId=function(){return Fs(this,void 0,Promise,function(){var A,I,g;return ks(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("id")];case 1:if(A=Q.sent(),A.status!==200)throw new Error("Error. Status:".concat(A.status));return[2,A.text()];case 2:throw I=Q.sent(),X.default.error("Error retrieving ID",I),g="",this._options.path==="/"&&this._options.host!==eA.CLOUD_HOST&&(g=" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),new Error("Could not get an ID from the server."+g);case 3:return[2]}})})},B.prototype.listAllPeers=function(){return Fs(this,void 0,Promise,function(){var A,I,g;return ks(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("peers")];case 1:if(A=Q.sent(),A.status!==200)throw A.status===401?(I="",this._options.host===eA.CLOUD_HOST?I="It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key.":I="You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature.",new Error("It doesn't look like you have permission to list peers IDs. "+I)):new Error("Error. Status:".concat(A.status));return[2,A.json()];case 2:throw g=Q.sent(),X.default.error("Error retrieving list peers",g),new Error("Could not get list peers from the server."+g);case 3:return[2]}})})},B})(),bn=(function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}})(),dB=function(){return dB=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},dB.apply(this,arguments)},wB=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},mn=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],E;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(E)throw E.error}}return C},cD=(function(B){bn(A,B);function A(I,g){var Q=B.call(this)||this;Q._id=null,Q._lastServerId=null,Q._destroyed=!1,Q._disconnected=!1,Q._open=!1,Q._connections=new Map,Q._lostMessages=new Map;var C;return I&&I.constructor==Object?g=I:I&&(C=I.toString()),g=dB({debug:0,host:eA.CLOUD_HOST,port:eA.CLOUD_PORT,path:"/",key:A.DEFAULT_KEY,token:eA.randomToken(),config:eA.defaultConfig,referrerPolicy:"strict-origin-when-cross-origin"},g),Q._options=g,Q._options.host==="/"&&(Q._options.host=window.location.hostname),Q._options.path&&(Q._options.path[0]!=="/"&&(Q._options.path="/"+Q._options.path),Q._options.path[Q._options.path.length-1]!=="/"&&(Q._options.path+="/")),Q._options.secure===void 0&&Q._options.host!==eA.CLOUD_HOST?Q._options.secure=eA.isSecure():Q._options.host==eA.CLOUD_HOST&&(Q._options.secure=!0),Q._options.logFunction&&X.default.setLogFunction(Q._options.logFunction),X.default.logLevel=Q._options.debug||0,Q._api=new Nw.API(g),Q._socket=Q._createServerConnection(),!eA.supports.audioVideo&&!eA.supports.data?(Q._delayedAbort(qA.BrowserIncompatible,"The current browser does not support WebRTC"),Q):C&&!eA.validateId(C)?(Q._delayedAbort(qA.InvalidID,'ID "'.concat(C,'" is invalid')),Q):(C?Q._initialize(C):Q._api.retrieveId().then(function(E){return Q._initialize(E)}).catch(function(E){return Q._abort(qA.ServerError,E)}),Q)}return Object.defineProperty(A.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"socket",{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"connections",{get:function(){var I,g,Q=Object.create(null);try{for(var C=wB(this._connections),E=C.next();!E.done;E=C.next()){var i=mn(E.value,2),D=i[0],o=i[1];Q[D]=o}}catch(s){I={error:s}}finally{try{E&&!E.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}return Q},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"disconnected",{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),A.prototype._createServerConnection=function(){var I=this,g=new kw.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return g.on(dg.Message,function(Q){I._handleMessage(Q)}),g.on(dg.Error,function(Q){I._abort(qA.SocketError,Q)}),g.on(dg.Disconnected,function(){I.disconnected||(I.emitError(qA.Network,"Lost connection to server."),I.disconnect())}),g.on(dg.Close,function(){I.disconnected||I._abort(qA.SocketClosed,"Underlying socket is already closed.")}),g},A.prototype._initialize=function(I){this._id=I,this.socket.start(I,this._options.token)},A.prototype._handleMessage=function(I){var g,Q,C=I.type,E=I.payload,i=I.src;switch(C){case iI.Open:this._lastServerId=this.id,this._open=!0,this.emit("open",this.id);break;case iI.Error:this._abort(qA.ServerError,E.msg);break;case iI.IdTaken:this._abort(qA.UnavailableID,'ID "'.concat(this.id,'" is taken'));break;case iI.InvalidKey:this._abort(qA.InvalidKey,'API KEY "'.concat(this._options.key,'" is invalid'));break;case iI.Leave:X.default.log("Received leave message from ".concat(i)),this._cleanupPeer(i),this._connections.delete(i);break;case iI.Expire:this.emitError(qA.PeerUnavailable,"Could not connect to peer ".concat(i));break;case iI.Offer:var y=E.connectionId,r=this.getConnection(i,y);if(r&&(r.close(),X.default.warn("Offer received for existing Connection ID:".concat(y))),E.type===og.Media){var D=new eD.MediaConnection(i,this,{connectionId:y,_payload:E,metadata:E.metadata});r=D,this._addConnection(i,r),this.emit("call",D)}else if(E.type===og.Data){var o=new nD.DataConnection(i,this,{connectionId:y,_payload:E,metadata:E.metadata,label:E.label,serialization:E.serialization,reliable:E.reliable});r=o,this._addConnection(i,r),this.emit("connection",o)}else{X.default.warn("Received malformed connection type:".concat(E.type));return}var s=this._getMessages(y);try{for(var t=wB(s),w=t.next();!w.done;w=t.next()){var a=w.value;r.handleMessage(a)}}catch(c){g={error:c}}finally{try{w&&!w.done&&(Q=t.return)&&Q.call(t)}finally{if(g)throw g.error}}break;default:if(!E){X.default.warn("You received a malformed message from ".concat(i," of type ").concat(C));return}var y=E.connectionId,r=this.getConnection(i,y);r&&r.peerConnection?r.handleMessage(I):y?this._storeMessage(y,I):X.default.warn("You received an unrecognized message:",I);break}},A.prototype._storeMessage=function(I,g){this._lostMessages.has(I)||this._lostMessages.set(I,[]),this._lostMessages.get(I).push(g)},A.prototype._getMessages=function(I){var g=this._lostMessages.get(I);return g?(this._lostMessages.delete(I),g):[]},A.prototype.connect=function(I,g){if(g===void 0&&(g={}),this.disconnected){X.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."),this.emitError(qA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}var Q=new nD.DataConnection(I,this,g);return this._addConnection(I,Q),Q},A.prototype.call=function(I,g,Q){if(Q===void 0&&(Q={}),this.disconnected){X.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."),this.emitError(qA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}if(!g){X.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.");return}var C=new eD.MediaConnection(I,this,dB(dB({},Q),{_stream:g}));return this._addConnection(I,C),C},A.prototype._addConnection=function(I,g){X.default.log("add connection ".concat(g.type,":").concat(g.connectionId," to peerId:").concat(I)),this._connections.has(I)||this._connections.set(I,[]),this._connections.get(I).push(g)},A.prototype._removeConnection=function(I){var g=this._connections.get(I.peer);if(g){var Q=g.indexOf(I);Q!==-1&&g.splice(Q,1)}this._lostMessages.delete(I.connectionId)},A.prototype.getConnection=function(I,g){var Q,C,E=this._connections.get(I);if(!E)return null;try{for(var i=wB(E),D=i.next();!D.done;D=i.next()){var o=D.value;if(o.connectionId===g)return o}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=i.return)&&C.call(i)}finally{if(Q)throw Q.error}}return null},A.prototype._delayedAbort=function(I,g){var Q=this;setTimeout(function(){Q._abort(I,g)},0)},A.prototype._abort=function(I,g){X.default.error("Aborting!"),this.emitError(I,g),this._lastServerId?this.disconnect():this.destroy()},A.prototype.emitError=function(I,g){X.default.error("Error:",g);var Q;typeof g=="string"?Q=new Error(g):Q=g,Q.type=I,this.emit("error",Q)},A.prototype.destroy=function(){this.destroyed||(X.default.log("Destroy peer with ID:".concat(this.id)),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit("close"))},A.prototype._cleanup=function(){var I,g;try{for(var Q=wB(this._connections.keys()),C=Q.next();!C.done;C=Q.next()){var E=C.value;this._cleanupPeer(E),this._connections.delete(E)}}catch(i){I={error:i}}finally{try{C&&!C.done&&(g=Q.return)&&g.call(Q)}finally{if(I)throw I.error}}this.socket.removeAllListeners()},A.prototype._cleanupPeer=function(I){var g,Q,C=this._connections.get(I);if(C)try{for(var E=wB(C),i=E.next();!i.done;i=E.next()){var D=i.value;D.close()}}catch(o){g={error:o}}finally{try{i&&!i.done&&(Q=E.return)&&Q.call(E)}finally{if(g)throw g.error}}},A.prototype.disconnect=function(){if(!this.disconnected){var I=this.id;X.default.log("Disconnect peer with ID:".concat(I)),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=I,this._id=null,this.emit("disconnected",I)}},A.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)X.default.log("Attempting reconnection to server with ID ".concat(this._lastServerId)),this._disconnected=!1,this._initialize(this._lastServerId);else{if(this.destroyed)throw new Error("This peer cannot reconnect to the server. It has already been destroyed.");if(!this.disconnected&&!this.open)X.default.error("In a hurry? We're still trying to make the initial connection!");else throw new Error("Peer ".concat(this.id," cannot reconnect because it is not disconnected from the server!"))}},A.prototype.listAllPeers=function(I){var g=this;I===void 0&&(I=function(Q){}),this._api.listAllPeers().then(function(Q){return I(Q)}).catch(function(Q){return g._abort(qA.ServerError,Q)})},A.DEFAULT_KEY="peerjs",A})(MC.EventEmitter),Pn=Rw.Peer;const Tn=Object.freeze(Object.defineProperty({__proto__:null,get Peer(){return cD},default:Pn,util:eA},Symbol.toStringTag,{value:"Module"}));class hD extends F.InstancedBufferGeometry{constructor(A,I){super(),this.ordering=A,this.setAttribute("position",new F.BufferAttribute(On,3)),this.setIndex(new F.BufferAttribute(Xn,1)),this._maxInstanceCount=A.length,this.instanceCount=I,this.attribute=new F.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(F.DynamicDrawUsage),this.setAttribute("splatIndex",this.attribute)}update(A,I){this.ordering=A,this.attribute.array=A,this.instanceCount=I,this.attribute.addUpdateRange(0,I),this.attribute.needsUpdate=!0}}const On=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),Xn=new Uint16Array([0,1,2,0,2,3]),Jw=`(function() {
1117
1117
  "use strict";
1118
1118
  class CsplatArray {
1119
1119
  static __wrap(ptr) {
@@ -9282,9 +9282,9 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
9282
9282
  initialize().catch(console.error);
9283
9283
  })();
9284
9284
  //# sourceMappingURL=oldWorker-BSuga-BW.js.map
9285
- `,Rs=typeof self<"u"&&self.Blob&&new Blob([Gw],{type:"text/javascript;charset=utf-8"});function qc(B){let A;try{if(A=Rs&&(self.URL||self.webkitURL).createObjectURL(Rs),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Gw),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}var $A=Uint8Array,dB=Uint16Array,bc=Int32Array,rw=new $A([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]),Sw=new $A([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]),mc=new $A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Rw=function(B,A){for(var I=new dB(31),g=0;g<31;++g)I[g]=A+=1<<B[g-1];for(var Q=new bc(I[30]),g=1;g<30;++g)for(var C=I[g];C<I[g+1];++C)Q[C]=C-I[g]<<5|g;return{b:I,r:Q}},Fw=Rw(rw,2),kw=Fw.b,Pc=Fw.r;kw[28]=258,Pc[258]=28;var Tc=Rw(Sw,0),Oc=Tc.b,Mw=new dB(32768);for(var YA=0;YA<32768;++YA){var Pg=(YA&43690)>>1|(YA&21845)<<1;Pg=(Pg&52428)>>2|(Pg&13107)<<2,Pg=(Pg&61680)>>4|(Pg&3855)<<4,Mw[YA]=((Pg&65280)>>8|(Pg&255)<<8)>>1}var lB=function(B,A,I){for(var g=B.length,Q=0,C=new dB(A);Q<g;++Q)B[Q]&&++C[B[Q]-1];var E=new dB(A);for(Q=1;Q<A;++Q)E[Q]=E[Q-1]+C[Q-1]<<1;var i;{i=new dB(1<<A);var D=15-A;for(Q=0;Q<g;++Q)if(B[Q])for(var o=Q<<4|B[Q],s=A-B[Q],t=E[B[Q]-1]++<<s,w=t|(1<<s)-1;t<=w;++t)i[Mw[t]>>D]=o}return i},MC=new $A(288);for(var YA=0;YA<144;++YA)MC[YA]=8;for(var YA=144;YA<256;++YA)MC[YA]=9;for(var YA=256;YA<280;++YA)MC[YA]=7;for(var YA=280;YA<288;++YA)MC[YA]=8;var Nw=new $A(32);for(var YA=0;YA<32;++YA)Nw[YA]=5;var Xc=lB(MC,9),vc=lB(Nw,5),Hi=function(B){for(var A=B[0],I=1;I<B.length;++I)B[I]>A&&(A=B[I]);return A},Qg=function(B,A,I){var g=A/8|0;return(B[g]|B[g+1]<<8)>>(A&7)&I},Yi=function(B,A){var I=A/8|0;return(B[I]|B[I+1]<<8|B[I+2]<<16)>>(A&7)},Jw=function(B){return(B+7)/8|0},vQ=function(B,A,I){return(A==null||A<0)&&(A=0),(I==null||I>B.length)&&(I=B.length),new $A(B.subarray(A,I))},Vc=["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"],GI=function(B,A,I){var g=new Error(A||Vc[B]);if(g.code=B,Error.captureStackTrace&&Error.captureStackTrace(g,GI),!I)throw g;return g},Uw=function(B,A,I,g){var Q=B.length,C=g?g.length:0;if(!Q||A.f&&!A.l)return I||new $A(0);var E=!I,i=E||A.i!=2,D=A.i;E&&(I=new $A(Q*3));var o=function(JA){var iA=I.length;if(JA>iA){var oA=new $A(Math.max(iA*2,JA));oA.set(I),I=oA}},s=A.f||0,t=A.p||0,w=A.b||0,a=A.l,y=A.d,R=A.m,n=A.n,h=Q*8;do{if(!a){s=Qg(B,t,1);var G=Qg(B,t+1,3);if(t+=3,G)if(G==1)a=Xc,y=vc,R=9,n=5;else if(G==2){var J=Qg(B,t,31)+257,U=Qg(B,t+10,15)+4,Y=J+Qg(B,t+5,31)+1;t+=14;for(var d=new $A(Y),H=new $A(19),f=0;f<U;++f)H[mc[f]]=Qg(B,t+f*3,7);t+=U*3;for(var l=Hi(H),p=(1<<l)-1,q=lB(H,l),f=0;f<Y;){var m=q[Qg(B,t,p)];t+=m&15;var r=m>>4;if(r<16)d[f++]=r;else{var T=0,Z=0;for(r==16?(Z=3+Qg(B,t,3),t+=2,T=d[f-1]):r==17?(Z=3+Qg(B,t,7),t+=3):r==18&&(Z=11+Qg(B,t,127),t+=7);Z--;)d[f++]=T}}var O=d.subarray(0,J),j=d.subarray(J);R=Hi(O),n=Hi(j),a=lB(O,R),y=lB(j,n)}else GI(1);else{var r=Jw(t)+4,M=B[r-4]|B[r-3]<<8,k=r+M;if(k>Q){D&&GI(0);break}i&&o(w+M),I.set(B.subarray(r,k),w),A.b=w+=M,A.p=t=k*8,A.f=s;continue}if(t>h){D&&GI(0);break}}i&&o(w+131072);for(var gA=(1<<R)-1,QA=(1<<n)-1,CA=t;;CA=t){var T=a[Yi(B,t)&gA],EA=T>>4;if(t+=T&15,t>h){D&&GI(0);break}if(T||GI(2),EA<256)I[w++]=EA;else if(EA==256){CA=t,a=null;break}else{var BA=EA-254;if(EA>264){var f=EA-257,W=rw[f];BA=Qg(B,t,(1<<W)-1)+kw[f],t+=W}var $=y[Yi(B,t)&QA],z=$>>4;$||GI(3),t+=$&15;var j=Oc[z];if(z>3){var W=Sw[z];j+=Yi(B,t)&(1<<W)-1,t+=W}if(t>h){D&&GI(0);break}i&&o(w+131072);var MA=w+BA;if(w<j){var kA=C-j,NA=Math.min(j,MA);for(kA+w<0&&GI(3);w<NA;++w)I[w]=g[kA+w]}for(;w<MA;++w)I[w]=I[w-j]}}A.l=a,A.p=CA,A.b=w,A.f=s,a&&(s=1,A.m=R,A.d=y,A.n=n)}while(!s);return w!=I.length&&E?vQ(I,0,w):I.subarray(0,w)},Zc=new $A(0),hg=function(B,A){return B[A]|B[A+1]<<8},Dg=function(B,A){return(B[A]|B[A+1]<<8|B[A+2]<<16|B[A+3]<<24)>>>0},Ki=function(B,A){return Dg(B,A)+Dg(B,A+4)*4294967296},Wc=function(B){(B[0]!=31||B[1]!=139||B[2]!=8)&&GI(6,"invalid gzip data");var A=B[3],I=10;A&4&&(I+=(B[10]|B[11]<<8)+2);for(var g=(A>>3&1)+(A>>4&1);g>0;g-=!B[I++]);return I+(A&2)},di=(function(){function B(A,I){typeof A=="function"&&(I=A,A={}),this.ondata=I;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new $A(32768),this.p=new $A(0),g&&this.o.set(g)}return B.prototype.e=function(A){if(this.ondata||GI(5),this.d&&GI(4),!this.p.length)this.p=A;else if(A.length){var I=new $A(this.p.length+A.length);I.set(this.p),I.set(A,this.p.length),this.p=I}},B.prototype.c=function(A){this.s.i=+(this.d=A||!1);var I=this.s.b,g=Uw(this.p,this.s,this.o);this.ondata(vQ(g,I,this.s.b),this.d),this.o=vQ(g,this.s.b-32768),this.s.b=this.o.length,this.p=vQ(this.p,this.s.p/8|0),this.s.p&=7},B.prototype.push=function(A,I){this.e(A),this.c(I)},B})();function jc(B,A){return Uw(B,{i:2},A&&A.out,A&&A.dictionary)}var zc=(function(){function B(A,I){this.v=1,this.r=0,di.call(this,A,I)}return B.prototype.push=function(A,I){if(di.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),Q=g.length>3?Wc(g):4;if(Q>g.length){if(!I)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(Q),this.v=0}di.prototype.c.call(this,I),this.s.f&&!this.s.l&&!I&&(this.v=Jw(this.s.p)+9,this.s={i:0},this.o=new $A(0),this.push(new $A(0),I))},B})(),hD=typeof TextDecoder<"u"&&new TextDecoder,_c=0;try{hD.decode(Zc,{stream:!0}),_c=1}catch{}var $c=function(B){for(var A="",I=0;;){var g=B[I++],Q=(g>127)+(g>223)+(g>239);if(I+Q>B.length)return{s:A,r:vQ(B,I-1)};Q?Q==3?(g=((g&15)<<18|(B[I++]&63)<<12|(B[I++]&63)<<6|B[I++]&63)-65536,A+=String.fromCharCode(55296|g>>10,56320|g&1023)):Q&1?A+=String.fromCharCode((g&31)<<6|B[I++]&63):A+=String.fromCharCode((g&15)<<12|(B[I++]&63)<<6|B[I++]&63):A+=String.fromCharCode(g)}};function An(B,A){if(A){for(var I="",g=0;g<B.length;g+=16384)I+=String.fromCharCode.apply(null,B.subarray(g,g+16384));return I}else{if(hD)return hD.decode(B);var Q=$c(B),C=Q.s,I=Q.r;return I.length&&GI(8),C}}var In=function(B,A){return A+30+hg(B,A+26)+hg(B,A+28)},gn=function(B,A,I){var g=hg(B,A+28),Q=An(B.subarray(A+46,A+46+g),!(hg(B,A+8)&2048)),C=A+46+g,E=Dg(B,A+20),i=I&&E==4294967295?Qn(B,C):[E,Dg(B,A+24),Dg(B,A+42)],D=i[0],o=i[1],s=i[2];return[hg(B,A+10),D,o,Q,C+hg(B,A+30)+hg(B,A+32),s]},Qn=function(B,A){for(;hg(B,A)!=1;A+=4+hg(B,A+2));return[Ki(B,A+12),Ki(B,A+4),Ki(B,A+20)]};function Bn(B,A){for(var I={},g=B.length-22;Dg(B,g)!=101010256;--g)(!g||B.length-g>65558)&&GI(13);var Q=hg(B,g+8);if(!Q)return{};var C=Dg(B,g+16),E=C==4294967295||Q==65535;if(E){var i=Dg(B,g-12);E=Dg(B,i)==101075792,E&&(Q=Dg(B,i+32),C=Dg(B,i+48))}for(var D=A&&A.filter,o=0;o<Q;++o){var s=gn(B,C,E),t=s[0],w=s[1],a=s[2],y=s[3],R=s[4],n=s[5],h=In(B,n);C=R,(!D||D({name:y,size:w,originalSize:a,compression:t}))&&(t?t==8?I[y]=jc(B.subarray(h,h+w),{out:new $A(a)}):GI(14,"unknown compression type "+t):I[y]=vQ(B,h,h+w))}return I}const KI=-12,dI=9,Cn=-30,li=Math.exp(Cn),En=11,Dn=11,_=1<<En,sg=1<<Dn,on=1;var HI=(B=>(B.PLY="ply",B.SPZ="spz",B.SPLAT="splat",B.KSPLAT="ksplat",B.PCSOGS="pcsogs",B.PCSOGSZIP="pcsogszip",B.RAD="rad",B))(HI||{});const TE={rgbMin:0,rgbMax:1,lnScaleMin:KI,lnScaleMax:dI,sh1Max:1,sh2Max:1,sh3Max:1,lodOpacity:!1};function sn(B){return B==="bool"||B==="bvec2"||B==="bvec3"||B==="bvec4"}function sQ(B){return B==="int"||B==="ivec2"||B==="ivec3"||B==="ivec4"}function tQ(B){return B==="uint"||B==="uvec2"||B==="uvec3"||B==="uvec4"}function tn(B){return B==="float"||B==="vec2"||B==="vec3"||B==="vec4"}function wn(B){return B==="mat2"||B==="mat2x2"||B==="mat2x3"||B==="mat2x4"||B==="mat3"||B==="mat3x2"||B==="mat3x3"||B==="mat3x4"||B==="mat4"||B==="mat4x2"||B==="mat4x3"||B==="mat4x4"}function SC(B){return tn(B)||wn(B)}function LQ(B){return B==="mat2"||B==="mat2x2"}function HQ(B){return B==="mat3"||B==="mat3x3"}function YQ(B){return B==="mat4"||B==="mat4x4"}function an(B){switch(B){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${B}`)}}function en(B){switch(B){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${B}`)}}function OA(B){return Math.trunc(B).toString()}function XA(B){return`${Math.max(0,Math.trunc(B)).toString()}u`}function aA(B){return B===Number.POSITIVE_INFINITY?"INFINITY":B===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(B)?B.toFixed(1):B.toString()}function wQ(B){return B instanceof aQ?B.type:B.dynoOut().type}class aQ{constructor(A){this.__isDynoValue=!0,this.type=A}}class gI extends aQ{constructor(A,I){super(A.outTypes[I]),this.dyno=A,this.key=I}}class yE extends aQ{constructor(A,I){super(A),this.literal=I}getLiteral(){return this.literal}}class cn extends yE{constructor(A,I){super(A,""),this.value=I}getLiteral(){const{type:A,value:I}=this;switch(A){case"bool":return I?"true":"false";case"uint":return XA(I);case"int":return OA(I);case"float":return aA(I);case"bvec2":{const g=I;return`bvec2(${g[0]}, ${g[1]})`}case"uvec2":{if(I instanceof F.Vector2)return`uvec2(${XA(I.x)}, ${XA(I.y)})`;const g=I;return`uvec2(${XA(g[0])}, ${XA(g[1])})`}case"ivec2":{if(I instanceof F.Vector2)return`ivec2(${OA(I.x)}, ${OA(I.y)})`;const g=I;return`ivec2(${OA(g[0])}, ${OA(g[1])})`}case"vec2":{if(I instanceof F.Vector2)return`vec2(${aA(I.x)}, ${aA(I.y)})`;const g=I;return`vec2(${aA(g[0])}, ${aA(g[1])})`}case"bvec3":{const g=I;return`bvec3(${g[0]}, ${g[1]}, ${g[2]})`}case"uvec3":{if(I instanceof F.Vector3)return`uvec3(${XA(I.x)}, ${XA(I.y)}, ${XA(I.z)})`;const g=I;return`uvec3(${XA(g[0])}, ${XA(g[1])}, ${XA(g[2])})`}case"ivec3":{if(I instanceof F.Vector3)return`ivec3(${OA(I.x)}, ${OA(I.y)}, ${OA(I.z)})`;const g=I;return`ivec3(${OA(g[0])}, ${OA(g[1])}, ${OA(g[2])})`}case"vec3":{if(I instanceof F.Vector3)return`vec3(${aA(I.x)}, ${aA(I.y)}, ${aA(I.z)})`;const g=I;return`vec3(${aA(g[0])}, ${aA(g[1])}, ${aA(g[2])})`}case"bvec4":{const g=I;return`bvec4(${g[0]}, ${g[1]}, ${g[2]}, ${g[3]})`}case"uvec4":{if(I instanceof F.Vector4)return`uvec4(${XA(I.x)}, ${XA(I.y)}, ${XA(I.z)}, ${XA(I.w)})`;const g=I;return`uvec4(${XA(g[0])}, ${XA(g[1])}, ${XA(g[2])}, ${XA(g[3])})`}case"ivec4":{if(I instanceof F.Vector4)return`ivec4(${OA(I.x)}, ${OA(I.y)}, ${OA(I.z)}, ${OA(I.w)})`;const g=I;return`ivec4(${OA(g[0])}, ${OA(g[1])}, ${OA(g[2])}, ${OA(g[3])})`}case"vec4":{if(I instanceof F.Vector4)return`vec4(${aA(I.x)}, ${aA(I.y)}, ${aA(I.z)}, ${aA(I.w)})`;if(I instanceof F.Quaternion)return`vec4(${aA(I.x)}, ${aA(I.y)}, ${aA(I.z)}, ${aA(I.w)})`;const g=I;return`vec4(${aA(g[0])}, ${aA(g[1])}, ${aA(g[2])}, ${aA(g[3])})`}case"mat2":case"mat2x2":{const g=I,Q=g instanceof F.Matrix2?g.elements:I,C=new Array(4).fill(0).map((E,i)=>aA(Q[i]));return`${A}(${C.join(", ")})`}case"mat2x3":{const g=I,Q=new Array(6).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat2x4":{const g=I,Q=new Array(8).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat3":case"mat3x3":{const g=I,Q=g instanceof F.Matrix3?g.elements:I,C=new Array(9).fill(0).map((E,i)=>aA(Q[i]));return`${A}(${C.join(", ")})`}case"mat3x2":{const g=I,Q=new Array(6).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat3x4":{const g=I,Q=new Array(12).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat4":case"mat4x4":{const g=I,Q=g instanceof F.Matrix4?g.elements:I,C=new Array(16).fill(0).map((E,i)=>aA(Q[i]));return`${A}(${C.join(", ")})`}case"mat4x2":{const g=I,Q=new Array(8).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat4x3":{const g=I,Q=new Array(12).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function OQ(B,A){return new cn(B,A)}function VC(B){const A=String(B);if(sn(B))return`${A}(false)`;if(SC(B))return`${A}(0.0)`;if(sQ(B))return`${A}(0)`;if(tQ(B))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}const Fs=" ";class nn{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=Fs,this.indent=A??Fs}nextSequence(){return this.sequence++}}class tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,statements:E,generate:i}){this.inTypes=A??{},this.outTypes=I??{},this.inputs=g??{},this.update=Q,this.globals=C,this.statements=E,this.generate=i??(({inputs:D,outputs:o,compile:s})=>{var t,w;return{globals:(t=this.globals)==null?void 0:t.call(this,{inputs:D,outputs:o,compile:s}),statements:(w=this.statements)==null?void 0:w.call(this,{inputs:D,outputs:o,compile:s})}})}get outputs(){const A={};for(const I in this.outTypes)A[I]=new gI(this,I);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:I,compile:g}){const Q=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(I).join(", ")})`],C=[];for(const o in I){const s=I[o];s&&!g.declares.has(s)&&(g.declares.add(s),C.push(o))}const{globals:E,statements:i,uniforms:D}=this.generate({inputs:A,outputs:I,compile:g});for(const o of E??[])g.globals.add(o);for(const o in D)g.uniforms[o]=D[o];this.update&&g.updaters.push(this.update);for(const o of C){const s=I[o];s&&(g.uniforms[s]||Q.push(`${Lw(s,this.outTypes[o])};`))}return i?.length&&(Q.push("{"),Q.push(...i.map(o=>g.indent+o)),Q.push("}")),Q}}class hn extends tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,construct:E}){super({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,generate:i=>this.generateBlock(i)}),this.construct=E}generateBlock({inputs:A,outputs:I,compile:g}){var Q,C;const E={},i={};for(const n in A)A[n]!=null&&(E[n]=new yE(this.inTypes[n],A[n]));for(const n in I)I[n]!=null&&(i[n]=new aQ(this.outTypes[n]));const D={roots:[]},o=this.construct(E,i,D);for(const n of((Q=this.globals)==null?void 0:Q.call(this,{inputs:A,outputs:I,compile:g}))??[])g.globals.add(n);const s=[],t=new Map;function w(n,h,G){let r=t.get(n);if(!r){r={sequence:g.nextSequence(),outNames:new Map,newOuts:new Set},t.set(n,r);for(const M in n.inputs){let k=n.inputs[M];for(;k;){if(k instanceof aQ){k instanceof gI&&w(k.dyno,k.key);break}if(typeof k.dynoOut!="function")throw new Error(`dynoOut is not a function for ${k.constructor.name}`);k=k.dynoOut()}}s.push(n)}h&&(G||r.newOuts.add(h),r.outNames.set(h,G??`${h}_${r.sequence}`))}for(const n of D.roots)w(n);for(const n in i){let h=o?.[n]??i[n];for(;h;){if(h instanceof aQ){h instanceof gI&&w(h.dyno,h.key,I[n]);break}h=h.dynoOut()}i[n]=h}const a=[];for(const n of s){const h={},G={};for(const k in n.inputs){let J=n.inputs[k];for(;J;){if(J instanceof aQ){if(J instanceof yE)h[k]=J.getLiteral();else if(J instanceof gI){const U=(C=t.get(J.dyno))==null?void 0:C.outNames.get(J.key);if(!U)throw new Error(`Source not found for ${J.dyno.constructor.name}.${J.key}`);h[k]=U}break}J=J.dynoOut()}}const r=t.get(n)??{outNames:new Map};for(const[k,J]of r.outNames.entries())G[k]=J;const M=n.compile({inputs:h,outputs:G,compile:g});a.push(M)}const y=[];for(const n in I)i[n]instanceof yE&&y.push(`${I[n]} = ${i[n].getLiteral()};`);return y.length>0&&a.push(y),{statements:a.flatMap((n,h)=>h===0?n:["",...n])}}}function DI(B,A,I,{update:g,globals:Q}={}){return new hn({inTypes:B,outTypes:A,construct:I,update:g,globals:Q})}function _D({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:E}){return new tA({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:E})}function Lw(B,A,I){const g=typeof A=="string"?A:A.type;if(!g)throw new Error(`Invalid DynoType: ${String(A)}`);return`${g} ${B}${I!=null?`[${I}]`:""}`}function GA(B){var A;let I=!1;const g=B.split(`
9285
+ `,Ns=typeof self<"u"&&self.Blob&&new Blob([Jw],{type:"text/javascript;charset=utf-8"});function vn(B){let A;try{if(A=Ns&&(self.URL||self.webkitURL).createObjectURL(Ns),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Jw),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}var $A=Uint8Array,lB=Uint16Array,Vn=Int32Array,Uw=new $A([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]),Lw=new $A([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]),Zn=new $A([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hw=function(B,A){for(var I=new lB(31),g=0;g<31;++g)I[g]=A+=1<<B[g-1];for(var Q=new Vn(I[30]),g=1;g<30;++g)for(var C=I[g];C<I[g+1];++C)Q[C]=C-I[g]<<5|g;return{b:I,r:Q}},Yw=Hw(Uw,2),Kw=Yw.b,Wn=Yw.r;Kw[28]=258,Wn[258]=28;var jn=Hw(Lw,0),zn=jn.b,dw=new lB(32768);for(var YA=0;YA<32768;++YA){var Pg=(YA&43690)>>1|(YA&21845)<<1;Pg=(Pg&52428)>>2|(Pg&13107)<<2,Pg=(Pg&61680)>>4|(Pg&3855)<<4,dw[YA]=((Pg&65280)>>8|(Pg&255)<<8)>>1}var fB=function(B,A,I){for(var g=B.length,Q=0,C=new lB(A);Q<g;++Q)B[Q]&&++C[B[Q]-1];var E=new lB(A);for(Q=1;Q<A;++Q)E[Q]=E[Q-1]+C[Q-1]<<1;var i;{i=new lB(1<<A);var D=15-A;for(Q=0;Q<g;++Q)if(B[Q])for(var o=Q<<4|B[Q],s=A-B[Q],t=E[B[Q]-1]++<<s,w=t|(1<<s)-1;t<=w;++t)i[dw[t]>>D]=o}return i},NC=new $A(288);for(var YA=0;YA<144;++YA)NC[YA]=8;for(var YA=144;YA<256;++YA)NC[YA]=9;for(var YA=256;YA<280;++YA)NC[YA]=7;for(var YA=280;YA<288;++YA)NC[YA]=8;var lw=new $A(32);for(var YA=0;YA<32;++YA)lw[YA]=5;var _n=fB(NC,9),$n=fB(lw,5),Yi=function(B){for(var A=B[0],I=1;I<B.length;++I)B[I]>A&&(A=B[I]);return A},Qg=function(B,A,I){var g=A/8|0;return(B[g]|B[g+1]<<8)>>(A&7)&I},Ki=function(B,A){var I=A/8|0;return(B[I]|B[I+1]<<8|B[I+2]<<16)>>(A&7)},fw=function(B){return(B+7)/8|0},vQ=function(B,A,I){return(A==null||A<0)&&(A=0),(I==null||I>B.length)&&(I=B.length),new $A(B.subarray(A,I))},Ac=["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"],GI=function(B,A,I){var g=new Error(A||Ac[B]);if(g.code=B,Error.captureStackTrace&&Error.captureStackTrace(g,GI),!I)throw g;return g},xw=function(B,A,I,g){var Q=B.length,C=g?g.length:0;if(!Q||A.f&&!A.l)return I||new $A(0);var E=!I,i=E||A.i!=2,D=A.i;E&&(I=new $A(Q*3));var o=function(JA){var iA=I.length;if(JA>iA){var oA=new $A(Math.max(iA*2,JA));oA.set(I),I=oA}},s=A.f||0,t=A.p||0,w=A.b||0,a=A.l,y=A.d,r=A.m,c=A.n,h=Q*8;do{if(!a){s=Qg(B,t,1);var G=Qg(B,t+1,3);if(t+=3,G)if(G==1)a=_n,y=$n,r=9,c=5;else if(G==2){var J=Qg(B,t,31)+257,U=Qg(B,t+10,15)+4,H=J+Qg(B,t+5,31)+1;t+=14;for(var d=new $A(H),Y=new $A(19),f=0;f<U;++f)Y[Zn[f]]=Qg(B,t+f*3,7);t+=U*3;for(var l=Yi(Y),p=(1<<l)-1,q=fB(Y,l),f=0;f<H;){var m=q[Qg(B,t,p)];t+=m&15;var R=m>>4;if(R<16)d[f++]=R;else{var T=0,Z=0;for(R==16?(Z=3+Qg(B,t,3),t+=2,T=d[f-1]):R==17?(Z=3+Qg(B,t,7),t+=3):R==18&&(Z=11+Qg(B,t,127),t+=7);Z--;)d[f++]=T}}var O=d.subarray(0,J),j=d.subarray(J);r=Yi(O),c=Yi(j),a=fB(O,r),y=fB(j,c)}else GI(1);else{var R=fw(t)+4,N=B[R-4]|B[R-3]<<8,k=R+N;if(k>Q){D&&GI(0);break}i&&o(w+N),I.set(B.subarray(R,k),w),A.b=w+=N,A.p=t=k*8,A.f=s;continue}if(t>h){D&&GI(0);break}}i&&o(w+131072);for(var gA=(1<<r)-1,QA=(1<<c)-1,CA=t;;CA=t){var T=a[Ki(B,t)&gA],EA=T>>4;if(t+=T&15,t>h){D&&GI(0);break}if(T||GI(2),EA<256)I[w++]=EA;else if(EA==256){CA=t,a=null;break}else{var BA=EA-254;if(EA>264){var f=EA-257,W=Uw[f];BA=Qg(B,t,(1<<W)-1)+Kw[f],t+=W}var $=y[Ki(B,t)&QA],z=$>>4;$||GI(3),t+=$&15;var j=zn[z];if(z>3){var W=Lw[z];j+=Ki(B,t)&(1<<W)-1,t+=W}if(t>h){D&&GI(0);break}i&&o(w+131072);var MA=w+BA;if(w<j){var kA=C-j,NA=Math.min(j,MA);for(kA+w<0&&GI(3);w<NA;++w)I[w]=g[kA+w]}for(;w<MA;++w)I[w]=I[w-j]}}A.l=a,A.p=CA,A.b=w,A.f=s,a&&(s=1,A.m=r,A.d=y,A.n=c)}while(!s);return w!=I.length&&E?vQ(I,0,w):I.subarray(0,w)},Ic=new $A(0),hg=function(B,A){return B[A]|B[A+1]<<8},Dg=function(B,A){return(B[A]|B[A+1]<<8|B[A+2]<<16|B[A+3]<<24)>>>0},di=function(B,A){return Dg(B,A)+Dg(B,A+4)*4294967296},gc=function(B){(B[0]!=31||B[1]!=139||B[2]!=8)&&GI(6,"invalid gzip data");var A=B[3],I=10;A&4&&(I+=(B[10]|B[11]<<8)+2);for(var g=(A>>3&1)+(A>>4&1);g>0;g-=!B[I++]);return I+(A&2)},li=(function(){function B(A,I){typeof A=="function"&&(I=A,A={}),this.ondata=I;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new $A(32768),this.p=new $A(0),g&&this.o.set(g)}return B.prototype.e=function(A){if(this.ondata||GI(5),this.d&&GI(4),!this.p.length)this.p=A;else if(A.length){var I=new $A(this.p.length+A.length);I.set(this.p),I.set(A,this.p.length),this.p=I}},B.prototype.c=function(A){this.s.i=+(this.d=A||!1);var I=this.s.b,g=xw(this.p,this.s,this.o);this.ondata(vQ(g,I,this.s.b),this.d),this.o=vQ(g,this.s.b-32768),this.s.b=this.o.length,this.p=vQ(this.p,this.s.p/8|0),this.s.p&=7},B.prototype.push=function(A,I){this.e(A),this.c(I)},B})();function Qc(B,A){return xw(B,{i:2},A&&A.out,A&&A.dictionary)}var Bc=(function(){function B(A,I){this.v=1,this.r=0,li.call(this,A,I)}return B.prototype.push=function(A,I){if(li.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),Q=g.length>3?gc(g):4;if(Q>g.length){if(!I)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(Q),this.v=0}li.prototype.c.call(this,I),this.s.f&&!this.s.l&&!I&&(this.v=fw(this.s.p)+9,this.s={i:0},this.o=new $A(0),this.push(new $A(0),I))},B})(),yD=typeof TextDecoder<"u"&&new TextDecoder,Cc=0;try{yD.decode(Ic,{stream:!0}),Cc=1}catch{}var Ec=function(B){for(var A="",I=0;;){var g=B[I++],Q=(g>127)+(g>223)+(g>239);if(I+Q>B.length)return{s:A,r:vQ(B,I-1)};Q?Q==3?(g=((g&15)<<18|(B[I++]&63)<<12|(B[I++]&63)<<6|B[I++]&63)-65536,A+=String.fromCharCode(55296|g>>10,56320|g&1023)):Q&1?A+=String.fromCharCode((g&31)<<6|B[I++]&63):A+=String.fromCharCode((g&15)<<12|(B[I++]&63)<<6|B[I++]&63):A+=String.fromCharCode(g)}};function ic(B,A){if(A){for(var I="",g=0;g<B.length;g+=16384)I+=String.fromCharCode.apply(null,B.subarray(g,g+16384));return I}else{if(yD)return yD.decode(B);var Q=Ec(B),C=Q.s,I=Q.r;return I.length&&GI(8),C}}var Dc=function(B,A){return A+30+hg(B,A+26)+hg(B,A+28)},oc=function(B,A,I){var g=hg(B,A+28),Q=ic(B.subarray(A+46,A+46+g),!(hg(B,A+8)&2048)),C=A+46+g,E=Dg(B,A+20),i=I&&E==4294967295?sc(B,C):[E,Dg(B,A+24),Dg(B,A+42)],D=i[0],o=i[1],s=i[2];return[hg(B,A+10),D,o,Q,C+hg(B,A+30)+hg(B,A+32),s]},sc=function(B,A){for(;hg(B,A)!=1;A+=4+hg(B,A+2));return[di(B,A+12),di(B,A+4),di(B,A+20)]};function tc(B,A){for(var I={},g=B.length-22;Dg(B,g)!=101010256;--g)(!g||B.length-g>65558)&&GI(13);var Q=hg(B,g+8);if(!Q)return{};var C=Dg(B,g+16),E=C==4294967295||Q==65535;if(E){var i=Dg(B,g-12);E=Dg(B,i)==101075792,E&&(Q=Dg(B,i+32),C=Dg(B,i+48))}for(var D=A&&A.filter,o=0;o<Q;++o){var s=oc(B,C,E),t=s[0],w=s[1],a=s[2],y=s[3],r=s[4],c=s[5],h=Dc(B,c);C=r,(!D||D({name:y,size:w,originalSize:a,compression:t}))&&(t?t==8?I[y]=Qc(B.subarray(h,h+w),{out:new $A(a)}):GI(14,"unknown compression type "+t):I[y]=vQ(B,h,h+w))}return I}const KI=-12,dI=9,wc=-30,fi=Math.exp(wc),ac=11,ec=11,_=1<<ac,sg=1<<ec,nc=1;var HI=(B=>(B.PLY="ply",B.SPZ="spz",B.SPLAT="splat",B.KSPLAT="ksplat",B.PCSOGS="pcsogs",B.PCSOGSZIP="pcsogszip",B.RAD="rad",B))(HI||{});const OE={rgbMin:0,rgbMax:1,lnScaleMin:KI,lnScaleMax:dI,sh1Max:1,sh2Max:1,sh3Max:1,lodOpacity:!1};function cc(B){return B==="bool"||B==="bvec2"||B==="bvec3"||B==="bvec4"}function sQ(B){return B==="int"||B==="ivec2"||B==="ivec3"||B==="ivec4"}function tQ(B){return B==="uint"||B==="uvec2"||B==="uvec3"||B==="uvec4"}function hc(B){return B==="float"||B==="vec2"||B==="vec3"||B==="vec4"}function yc(B){return B==="mat2"||B==="mat2x2"||B==="mat2x3"||B==="mat2x4"||B==="mat3"||B==="mat3x2"||B==="mat3x3"||B==="mat3x4"||B==="mat4"||B==="mat4x2"||B==="mat4x3"||B==="mat4x4"}function RC(B){return hc(B)||yc(B)}function LQ(B){return B==="mat2"||B==="mat2x2"}function HQ(B){return B==="mat3"||B==="mat3x3"}function YQ(B){return B==="mat4"||B==="mat4x4"}function Gc(B){switch(B){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${B}`)}}function rc(B){switch(B){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${B}`)}}function OA(B){return Math.trunc(B).toString()}function XA(B){return`${Math.max(0,Math.trunc(B)).toString()}u`}function aA(B){return B===Number.POSITIVE_INFINITY?"INFINITY":B===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(B)?B.toFixed(1):B.toString()}function wQ(B){return B instanceof aQ?B.type:B.dynoOut().type}class aQ{constructor(A){this.__isDynoValue=!0,this.type=A}}class gI extends aQ{constructor(A,I){super(A.outTypes[I]),this.dyno=A,this.key=I}}class yE extends aQ{constructor(A,I){super(A),this.literal=I}getLiteral(){return this.literal}}class Sc extends yE{constructor(A,I){super(A,""),this.value=I}getLiteral(){const{type:A,value:I}=this;switch(A){case"bool":return I?"true":"false";case"uint":return XA(I);case"int":return OA(I);case"float":return aA(I);case"bvec2":{const g=I;return`bvec2(${g[0]}, ${g[1]})`}case"uvec2":{if(I instanceof F.Vector2)return`uvec2(${XA(I.x)}, ${XA(I.y)})`;const g=I;return`uvec2(${XA(g[0])}, ${XA(g[1])})`}case"ivec2":{if(I instanceof F.Vector2)return`ivec2(${OA(I.x)}, ${OA(I.y)})`;const g=I;return`ivec2(${OA(g[0])}, ${OA(g[1])})`}case"vec2":{if(I instanceof F.Vector2)return`vec2(${aA(I.x)}, ${aA(I.y)})`;const g=I;return`vec2(${aA(g[0])}, ${aA(g[1])})`}case"bvec3":{const g=I;return`bvec3(${g[0]}, ${g[1]}, ${g[2]})`}case"uvec3":{if(I instanceof F.Vector3)return`uvec3(${XA(I.x)}, ${XA(I.y)}, ${XA(I.z)})`;const g=I;return`uvec3(${XA(g[0])}, ${XA(g[1])}, ${XA(g[2])})`}case"ivec3":{if(I instanceof F.Vector3)return`ivec3(${OA(I.x)}, ${OA(I.y)}, ${OA(I.z)})`;const g=I;return`ivec3(${OA(g[0])}, ${OA(g[1])}, ${OA(g[2])})`}case"vec3":{if(I instanceof F.Vector3)return`vec3(${aA(I.x)}, ${aA(I.y)}, ${aA(I.z)})`;const g=I;return`vec3(${aA(g[0])}, ${aA(g[1])}, ${aA(g[2])})`}case"bvec4":{const g=I;return`bvec4(${g[0]}, ${g[1]}, ${g[2]}, ${g[3]})`}case"uvec4":{if(I instanceof F.Vector4)return`uvec4(${XA(I.x)}, ${XA(I.y)}, ${XA(I.z)}, ${XA(I.w)})`;const g=I;return`uvec4(${XA(g[0])}, ${XA(g[1])}, ${XA(g[2])}, ${XA(g[3])})`}case"ivec4":{if(I instanceof F.Vector4)return`ivec4(${OA(I.x)}, ${OA(I.y)}, ${OA(I.z)}, ${OA(I.w)})`;const g=I;return`ivec4(${OA(g[0])}, ${OA(g[1])}, ${OA(g[2])}, ${OA(g[3])})`}case"vec4":{if(I instanceof F.Vector4)return`vec4(${aA(I.x)}, ${aA(I.y)}, ${aA(I.z)}, ${aA(I.w)})`;if(I instanceof F.Quaternion)return`vec4(${aA(I.x)}, ${aA(I.y)}, ${aA(I.z)}, ${aA(I.w)})`;const g=I;return`vec4(${aA(g[0])}, ${aA(g[1])}, ${aA(g[2])}, ${aA(g[3])})`}case"mat2":case"mat2x2":{const g=I,Q=g instanceof F.Matrix2?g.elements:I,C=new Array(4).fill(0).map((E,i)=>aA(Q[i]));return`${A}(${C.join(", ")})`}case"mat2x3":{const g=I,Q=new Array(6).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat2x4":{const g=I,Q=new Array(8).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat3":case"mat3x3":{const g=I,Q=g instanceof F.Matrix3?g.elements:I,C=new Array(9).fill(0).map((E,i)=>aA(Q[i]));return`${A}(${C.join(", ")})`}case"mat3x2":{const g=I,Q=new Array(6).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat3x4":{const g=I,Q=new Array(12).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat4":case"mat4x4":{const g=I,Q=g instanceof F.Matrix4?g.elements:I,C=new Array(16).fill(0).map((E,i)=>aA(Q[i]));return`${A}(${C.join(", ")})`}case"mat4x2":{const g=I,Q=new Array(8).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}case"mat4x3":{const g=I,Q=new Array(12).fill(0).map((C,E)=>aA(g[E]));return`${A}(${Q.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function OQ(B,A){return new Sc(B,A)}function VC(B){const A=String(B);if(cc(B))return`${A}(false)`;if(RC(B))return`${A}(0.0)`;if(sQ(B))return`${A}(0)`;if(tQ(B))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}const Js=" ";class Rc{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=Js,this.indent=A??Js}nextSequence(){return this.sequence++}}class tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,statements:E,generate:i}){this.inTypes=A??{},this.outTypes=I??{},this.inputs=g??{},this.update=Q,this.globals=C,this.statements=E,this.generate=i??(({inputs:D,outputs:o,compile:s})=>{var t,w;return{globals:(t=this.globals)==null?void 0:t.call(this,{inputs:D,outputs:o,compile:s}),statements:(w=this.statements)==null?void 0:w.call(this,{inputs:D,outputs:o,compile:s})}})}get outputs(){const A={};for(const I in this.outTypes)A[I]=new gI(this,I);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:I,compile:g}){const Q=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(I).join(", ")})`],C=[];for(const o in I){const s=I[o];s&&!g.declares.has(s)&&(g.declares.add(s),C.push(o))}const{globals:E,statements:i,uniforms:D}=this.generate({inputs:A,outputs:I,compile:g});for(const o of E??[])g.globals.add(o);for(const o in D)g.uniforms[o]=D[o];this.update&&g.updaters.push(this.update);for(const o of C){const s=I[o];s&&(g.uniforms[s]||Q.push(`${pw(s,this.outTypes[o])};`))}return i?.length&&(Q.push("{"),Q.push(...i.map(o=>g.indent+o)),Q.push("}")),Q}}class Fc extends tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,construct:E}){super({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,generate:i=>this.generateBlock(i)}),this.construct=E}generateBlock({inputs:A,outputs:I,compile:g}){var Q,C;const E={},i={};for(const c in A)A[c]!=null&&(E[c]=new yE(this.inTypes[c],A[c]));for(const c in I)I[c]!=null&&(i[c]=new aQ(this.outTypes[c]));const D={roots:[]},o=this.construct(E,i,D);for(const c of((Q=this.globals)==null?void 0:Q.call(this,{inputs:A,outputs:I,compile:g}))??[])g.globals.add(c);const s=[],t=new Map;function w(c,h,G){let R=t.get(c);if(!R){R={sequence:g.nextSequence(),outNames:new Map,newOuts:new Set},t.set(c,R);for(const N in c.inputs){let k=c.inputs[N];for(;k;){if(k instanceof aQ){k instanceof gI&&w(k.dyno,k.key);break}if(typeof k.dynoOut!="function")throw new Error(`dynoOut is not a function for ${k.constructor.name}`);k=k.dynoOut()}}s.push(c)}h&&(G||R.newOuts.add(h),R.outNames.set(h,G??`${h}_${R.sequence}`))}for(const c of D.roots)w(c);for(const c in i){let h=o?.[c]??i[c];for(;h;){if(h instanceof aQ){h instanceof gI&&w(h.dyno,h.key,I[c]);break}h=h.dynoOut()}i[c]=h}const a=[];for(const c of s){const h={},G={};for(const k in c.inputs){let J=c.inputs[k];for(;J;){if(J instanceof aQ){if(J instanceof yE)h[k]=J.getLiteral();else if(J instanceof gI){const U=(C=t.get(J.dyno))==null?void 0:C.outNames.get(J.key);if(!U)throw new Error(`Source not found for ${J.dyno.constructor.name}.${J.key}`);h[k]=U}break}J=J.dynoOut()}}const R=t.get(c)??{outNames:new Map};for(const[k,J]of R.outNames.entries())G[k]=J;const N=c.compile({inputs:h,outputs:G,compile:g});a.push(N)}const y=[];for(const c in I)i[c]instanceof yE&&y.push(`${I[c]} = ${i[c].getLiteral()};`);return y.length>0&&a.push(y),{statements:a.flatMap((c,h)=>h===0?c:["",...c])}}}function DI(B,A,I,{update:g,globals:Q}={}){return new Fc({inTypes:B,outTypes:A,construct:I,update:g,globals:Q})}function Io({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:E}){return new tA({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:E})}function pw(B,A,I){const g=typeof A=="string"?A:A.type;if(!g)throw new Error(`Invalid DynoType: ${String(A)}`);return`${g} ${B}${I!=null?`[${I}]`:""}`}function GA(B){var A;let I=!1;const g=B.split(`
9286
9286
  `).map(E=>{const i=E.trimEnd();return I?i:i.length>0?(I=!0,i):null}).filter(E=>E!=null);for(;g.length>0&&g[g.length-1].length===0;)g.pop();if(g.length===0)return[];const Q=(A=g[0].match(/^\s*/))==null?void 0:A[0];if(!Q)return g;const C=new RegExp(`^${Q}`);return g.map(E=>E.replace(C,""))}function lA(B){return GA(B).join(`
9287
- `)}class OE extends tA{constructor({a:A,outKey:I,outTypeFunc:g}){const Q={a:wQ(A)},C=g(wQ(A)),E={[I]:C};super({inTypes:Q,outTypes:E,inputs:{a:A}}),this.outKey=I}dynoOut(){return new gI(this,this.outKey)}}class $D extends tA{constructor({a:A,b:I,outKey:g,outTypeFunc:Q}){const C={a:wQ(A),b:wQ(I)},E=Q(wQ(A),wQ(I)),i={[g]:E};super({inTypes:C,outTypes:i,inputs:{a:A,b:I}}),this.outKey=g}dynoOut(){return new gI(this,this.outKey)}}const yn=Number.parseInt(F.REVISION),Gn=yn>=179,NC=new Float32Array(1),XE=new Uint32Array(NC.buffer),Ao="Float16Array"in globalThis,KE=Ao?new globalThis.Float16Array(1):null,Hw=new Uint16Array(KE?.buffer);function fi(B){return NC[0]=B,XE[0]}function xi(B){return XE[0]=B,NC[0]}const Eg=Ao?rn:Sn,ig=Ao?Rn:Fn;function rn(B){return KE[0]=B,Hw[0]}function Sn(B){NC[0]=B;const A=XE[0],I=A>>31&1,g=A>>23&255,Q=A&8388607,C=I<<15;if(g===255)return Q!==0?C|32767:C|31744;const E=g-127+15;if(E>=31)return C|31744;if(E<=0){if(E<-10)return C;const D=(Q|8388608)>>1-E+13;return C|D}const i=Q>>13;return C|E<<10|i}function Rn(B){return Hw[0]=B,KE[0]}function Fn(B){const A=B>>15&1,I=B>>10&31,g=B&1023;let Q;if(I===0)if(g===0)Q=A<<31;else{let C=g,E=-14;for(;(C&1024)===0;)C<<=1,E--;C&=1023;const i=E+127,D=C<<13;Q=A<<31|i<<23|D}else if(I===31)g===0?Q=A<<31|2139095040:Q=A<<31|2143289344;else{const C=I-15+127,E=g<<13;Q=A<<31|C<<23|E}return XE[0]=Q,NC[0]}function kB(B){return Math.max(0,Math.min(255,Math.round(B*255)))}function Yw(B){const A=[],I=new Set;function g(Q){Q&&typeof Q=="object"&&!I.has(Q)&&(I.add(Q),Q instanceof ArrayBuffer?A.push(Q):ArrayBuffer.isView(Q)?A.push(Q.buffer):Array.isArray(Q)?Q.forEach(g):Object.values(Q).forEach(g))}return g(B),A}class kn{constructor({allocate:A,dispose:I,valid:g}){this.items=[],this.allocate=A,this.dispose=I,this.valid=g}alloc(A){for(;;){const I=this.items.pop();if(!I)break;if(this.valid(I,A))return I;this.dispose&&this.dispose(I)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function ks(B,A,I,g,Q,C,E,i,D,o,s,t,w,a,y,R){const n=A*4,[h,G]=B;h[n]=fi(I),h[n+1]=fi(g),h[n+2]=fi(Q),h[n+3]=Eg(w),G[n]=Eg(a)|Eg(y)<<16,G[n+1]=Eg(R)|Eg(Math.log(C))<<16,G[n+2]=Eg(Math.log(E))|Eg(Math.log(i))<<16,G[n+3]=pn(D,o,s,t)}function yD(B,A){const I=Kw,g=A*4,[Q,C]=B;return I.center.x=xi(Q[g]),I.center.y=xi(Q[g+1]),I.center.z=xi(Q[g+2]),I.opacity=ig(Q[g+3]&65535),I.color.r=ig(C[g]&65535),I.color.g=ig(C[g]>>>16),I.color.b=ig(C[g+1]&65535),I.scales.x=Math.exp(ig(C[g+1]>>>16)),I.scales.y=Math.exp(ig(C[g+2]&65535)),I.scales.z=Math.exp(ig(C[g+2]>>>16)),un(C[g+3],I.quaternion),I}function GD(B,A,I,g,Q,C,E,i,D,o,s,t,w,a,y,R,n){const h=n?.rgbMin??0,r=(n?.rgbMax??1)-h,M=kB((a-h)/r),k=kB((y-h)/r),J=kB((R-h)/r),U=kB(n?.lodOpacity?.5*w:w),Y=fn(Mn.set(D,o,s,t)),d=Y&255,H=Y>>>8&255,f=Y>>>16&255,l=n?.lnScaleMin??KI,q=254/((n?.lnScaleMax??dI)-l),m=C<li?0:Math.min(255,Math.max(1,Math.round((Math.log(C)-l)*q)+1)),T=E<li?0:Math.min(255,Math.max(1,Math.round((Math.log(E)-l)*q)+1)),Z=i<li?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-l)*q)+1)),O=Eg(I),j=Eg(g),gA=Eg(Q),QA=A*4;B[QA]=M|k<<8|J<<16|U<<24,B[QA+1]=O|j<<16,B[QA+2]=gA|d<<16|H<<24,B[QA+3]=m|T<<8|Z<<16|f<<24}const Mn=new F.Quaternion,Nn=new F.Vector3,Jn=new F.Vector3,Un=new F.Quaternion,Ln=new F.Color,Kw={center:Nn,scales:Jn,quaternion:Un,color:Ln,opacity:0};function dE(B,A,I){const g=Kw,Q=A*4,C=B[Q],E=B[Q+1],i=B[Q+2],D=B[Q+3],o=I?.rgbMin??0,t=(I?.rgbMax??1)-o;g.color.set(o+(C&255)/255*t,o+(C>>>8&255)/255*t,o+(C>>>16&255)/255*t),g.opacity=(C>>>24&255)/255,I?.lodOpacity&&(g.opacity=2*g.opacity),g.center.set(ig(E&65535),ig(E>>>16&65535),ig(i&65535));const w=I?.lnScaleMin??KI,y=((I?.lnScaleMax??dI)-w)/254,R=D&255;g.scales.x=R===0?0:Math.exp(w+(R-1)*y);const n=D>>>8&255;g.scales.y=n===0?0:Math.exp(w+(n-1)*y);const h=D>>>16&255;g.scales.z=h===0?0:Math.exp(w+(h-1)*y);const G=i>>>16&65535|D>>>8&16711680;return xn(G,g.quaternion),g}function FA(B){const A=_,I=Math.max(on,Math.min(sg,Math.ceil(B/A))),g=Math.ceil(B/(A*I)),Q=A*I*g;return{width:A,height:I,depth:g,maxSplats:Q}}function lE(){return navigator.platform.toLowerCase().startsWith("win")?!1:navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function dw(){return/Android/.test(navigator.userAgent)||/Tizen/.test(navigator.userAgent)}function lw(){return!!navigator.xr&&/Oculus/.test(navigator.userAgent)}function fE(){return/iPhone|iPad/.test(navigator.userAgent)}function fw(){return!!navigator.xr&&fE()&&/Safari/.test(navigator.userAgent)&&lE()}function xw(B){const A=new F.Clock(B.autoStart);return A.startTime=B.startTime,A.oldTime=B.oldTime,A.elapsedTime=B.elapsedTime,A.running=B.running,A}const Hn=lA(`
9287
+ `)}class XE extends tA{constructor({a:A,outKey:I,outTypeFunc:g}){const Q={a:wQ(A)},C=g(wQ(A)),E={[I]:C};super({inTypes:Q,outTypes:E,inputs:{a:A}}),this.outKey=I}dynoOut(){return new gI(this,this.outKey)}}class go extends tA{constructor({a:A,b:I,outKey:g,outTypeFunc:Q}){const C={a:wQ(A),b:wQ(I)},E=Q(wQ(A),wQ(I)),i={[g]:E};super({inTypes:C,outTypes:i,inputs:{a:A,b:I}}),this.outKey=g}dynoOut(){return new gI(this,this.outKey)}}const kc=Number.parseInt(F.REVISION),Mc=kc>=179,JC=new Float32Array(1),vE=new Uint32Array(JC.buffer),Qo="Float16Array"in globalThis,KE=Qo?new globalThis.Float16Array(1):null,uw=new Uint16Array(KE?.buffer);function xi(B){return JC[0]=B,vE[0]}function pi(B){return vE[0]=B,JC[0]}const Eg=Qo?Nc:Jc,ig=Qo?Uc:Lc;function Nc(B){return KE[0]=B,uw[0]}function Jc(B){JC[0]=B;const A=vE[0],I=A>>31&1,g=A>>23&255,Q=A&8388607,C=I<<15;if(g===255)return Q!==0?C|32767:C|31744;const E=g-127+15;if(E>=31)return C|31744;if(E<=0){if(E<-10)return C;const D=(Q|8388608)>>1-E+13;return C|D}const i=Q>>13;return C|E<<10|i}function Uc(B){return uw[0]=B,KE[0]}function Lc(B){const A=B>>15&1,I=B>>10&31,g=B&1023;let Q;if(I===0)if(g===0)Q=A<<31;else{let C=g,E=-14;for(;(C&1024)===0;)C<<=1,E--;C&=1023;const i=E+127,D=C<<13;Q=A<<31|i<<23|D}else if(I===31)g===0?Q=A<<31|2139095040:Q=A<<31|2143289344;else{const C=I-15+127,E=g<<13;Q=A<<31|C<<23|E}return vE[0]=Q,JC[0]}function MB(B){return Math.max(0,Math.min(255,Math.round(B*255)))}function qw(B){const A=[],I=new Set;function g(Q){Q&&typeof Q=="object"&&!I.has(Q)&&(I.add(Q),Q instanceof ArrayBuffer?A.push(Q):ArrayBuffer.isView(Q)?A.push(Q.buffer):Array.isArray(Q)?Q.forEach(g):Object.values(Q).forEach(g))}return g(B),A}class Hc{constructor({allocate:A,dispose:I,valid:g}){this.items=[],this.allocate=A,this.dispose=I,this.valid=g}alloc(A){for(;;){const I=this.items.pop();if(!I)break;if(this.valid(I,A))return I;this.dispose&&this.dispose(I)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function Us(B,A,I,g,Q,C,E,i,D,o,s,t,w,a,y,r){const c=A*4,[h,G]=B;h[c]=xi(I),h[c+1]=xi(g),h[c+2]=xi(Q),h[c+3]=Eg(w),G[c]=Eg(a)|Eg(y)<<16,G[c+1]=Eg(r)|Eg(Math.log(C))<<16,G[c+2]=Eg(Math.log(E))|Eg(Math.log(i))<<16,G[c+3]=Tc(D,o,s,t)}function GD(B,A){const I=bw,g=A*4,[Q,C]=B;return I.center.x=pi(Q[g]),I.center.y=pi(Q[g+1]),I.center.z=pi(Q[g+2]),I.opacity=ig(Q[g+3]&65535),I.color.r=ig(C[g]&65535),I.color.g=ig(C[g]>>>16),I.color.b=ig(C[g+1]&65535),I.scales.x=Math.exp(ig(C[g+1]>>>16)),I.scales.y=Math.exp(ig(C[g+2]&65535)),I.scales.z=Math.exp(ig(C[g+2]>>>16)),Oc(C[g+3],I.quaternion),I}function rD(B,A,I,g,Q,C,E,i,D,o,s,t,w,a,y,r,c){const h=c?.rgbMin??0,R=(c?.rgbMax??1)-h,N=MB((a-h)/R),k=MB((y-h)/R),J=MB((r-h)/R),U=MB(c?.lodOpacity?.5*w:w),H=mc(Yc.set(D,o,s,t)),d=H&255,Y=H>>>8&255,f=H>>>16&255,l=c?.lnScaleMin??KI,q=254/((c?.lnScaleMax??dI)-l),m=C<fi?0:Math.min(255,Math.max(1,Math.round((Math.log(C)-l)*q)+1)),T=E<fi?0:Math.min(255,Math.max(1,Math.round((Math.log(E)-l)*q)+1)),Z=i<fi?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-l)*q)+1)),O=Eg(I),j=Eg(g),gA=Eg(Q),QA=A*4;B[QA]=N|k<<8|J<<16|U<<24,B[QA+1]=O|j<<16,B[QA+2]=gA|d<<16|Y<<24,B[QA+3]=m|T<<8|Z<<16|f<<24}const Yc=new F.Quaternion,Kc=new F.Vector3,dc=new F.Vector3,lc=new F.Quaternion,fc=new F.Color,bw={center:Kc,scales:dc,quaternion:lc,color:fc,opacity:0};function dE(B,A,I){const g=bw,Q=A*4,C=B[Q],E=B[Q+1],i=B[Q+2],D=B[Q+3],o=I?.rgbMin??0,t=(I?.rgbMax??1)-o;g.color.set(o+(C&255)/255*t,o+(C>>>8&255)/255*t,o+(C>>>16&255)/255*t),g.opacity=(C>>>24&255)/255,I?.lodOpacity&&(g.opacity=2*g.opacity),g.center.set(ig(E&65535),ig(E>>>16&65535),ig(i&65535));const w=I?.lnScaleMin??KI,y=((I?.lnScaleMax??dI)-w)/254,r=D&255;g.scales.x=r===0?0:Math.exp(w+(r-1)*y);const c=D>>>8&255;g.scales.y=c===0?0:Math.exp(w+(c-1)*y);const h=D>>>16&255;g.scales.z=h===0?0:Math.exp(w+(h-1)*y);const G=i>>>16&65535|D>>>8&16711680;return Pc(G,g.quaternion),g}function FA(B){const A=_,I=Math.max(nc,Math.min(sg,Math.ceil(B/A))),g=Math.ceil(B/(A*I)),Q=A*I*g;return{width:A,height:I,depth:g,maxSplats:Q}}function lE(){return navigator.platform.toLowerCase().startsWith("win")?!1:navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function mw(){return/Android/.test(navigator.userAgent)||/Tizen/.test(navigator.userAgent)}function Pw(){return!!navigator.xr&&/Oculus/.test(navigator.userAgent)}function fE(){return/iPhone|iPad/.test(navigator.userAgent)}function Tw(){return!!navigator.xr&&fE()&&/Safari/.test(navigator.userAgent)&&lE()}function Ow(B){const A=new F.Clock(B.autoStart);return A.startTime=B.startTime,A.oldTime=B.oldTime,A.elapsedTime=B.elapsedTime,A.running=B.running,A}const xc=lA(`
9288
9288
  precision highp float;
9289
9289
 
9290
9290
  in vec3 position;
@@ -9292,7 +9292,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
9292
9292
  void main() {
9293
9293
  gl_Position = vec4(position.xy, 0.0, 1.0);
9294
9294
  }
9295
- `);function Yn(B){const A=new F.Vector3;for(const I of B)A.add(I);return A.divideScalar(B.length)}function Kn(B){if(B.length===0)return new F.Quaternion;const A=B[0].clone();for(let I=1;I<B.length;I++)B[I].dot(B[0])<0?(A.x-=B[I].x,A.y-=B[I].y,A.z-=B[I].z,A.w-=B[I].w):(A.x+=B[I].x,A.y+=B[I].y,A.z+=B[I].z,A.w+=B[I].w);return A.normalize()}function dn(B,A){const[I,g]=[new F.Vector3,new F.Quaternion],[Q,C]=[new F.Vector3,new F.Quaternion];B.decompose(I,g,new F.Vector3),A.decompose(Q,C,new F.Vector3);const E=I.distanceTo(Q),i=Math.abs(g.dot(C));return{distance:E,coorient:i}}function rD({matrix1:B,matrix2:A,maxDistance:I,minCoorient:g}){const{distance:Q,coorient:C}=dn(B,A);return Q<=I&&(g==null||C>=g)}const ln=new F.Quaternion,SD=new F.Vector3;function fn(B){const A=ln.copy(B).normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const I=2*Math.acos(A.w),g=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),Q=g<1e-6?SD.set(1,0,0):SD.set(A.x,A.y,A.z).divideScalar(g),C=Math.abs(Q.x)+Math.abs(Q.y)+Math.abs(Q.z);let E=Q.x/C,i=Q.y/C;if(Q.z<0){const a=E;E=(1-Math.abs(i))*(E>=0?1:-1),i=(1-Math.abs(a))*(i>=0?1:-1)}const D=E*.5+.5,o=i*.5+.5,s=Math.round(D*255),t=Math.round(o*255);return Math.round(I*(255/Math.PI))<<16|t<<8|s}function xn(B,A){const I=B&255,g=B>>>8&255,Q=B>>>16&255,C=I/255,E=g/255;let i=(C-.5)*2,D=(E-.5)*2;const o=1-(Math.abs(i)+Math.abs(D)),s=Math.max(-o,0);i+=i>=0?-s:s,D+=D>=0?-s:s;const t=SD.set(i,D,o).normalize(),a=Q/255*Math.PI*.5,y=Math.sin(a),R=Math.cos(a);return A.set(t.x*y,t.y*y,t.z*y,R),A}function pn(B,A,I,g){const Q=Math.sqrt(B*B+A*A+I*I+g*g),C=(g<0?-B:B)/Q,E=(g<0?-A:A)/Q,i=(g<0?-I:I)/Q,D=(g<0?-g:g)/Q,o=2*Math.acos(D),s=Math.sqrt(C*C+E*E+i*i),t=s<1e-6?1:C/s,w=s<1e-6?0:E/s,a=s<1e-6?0:i/s,y=Math.abs(t)+Math.abs(w)+Math.abs(a);let R=t/y,n=w/y;if(a<0){const J=R;R=(1-Math.abs(n))*(R>=0?1:-1),n=(1-Math.abs(J))*(n>=0?1:-1)}const h=R*.5+.5,G=n*.5+.5,r=Math.round(h*1023),M=Math.round(G*1023);return Math.round(o*(4095/Math.PI))<<20|M<<10|r}function un(B,A){const I=B&1023,g=B>>>10&1023,Q=B>>>20&4095,C=I/1023,E=g/1023;let i=(C-.5)*2,D=(E-.5)*2;const o=1-(Math.abs(i)+Math.abs(D)),s=Math.max(-o,0);i+=i>=0?-s:s,D+=D>=0?-s:s;const t=Math.sqrt(i*i+D*D+o*o),w=t<1e-6?0:i/t,a=t<1e-6?0:D/t,y=t<1e-6?0:o/t,n=Q/4095*Math.PI*.5,h=Math.sin(n),G=Math.cos(n);return A.set(w*h,a*h,y*h,G),A}function qn(B,A){const I=[];let g=0,Q=null;const C=new zc((D,o)=>{if(I.push(D),g+=D.length,o||g>=A){const s=new Uint8Array(g);let t=0;for(const w of I)s.set(w,t),t+=w.length;Q=s.slice(0,A)}}),E=1024;let i=0;for(;Q==null&&i<B.length;){const D=B.slice(i,i+E);C.push(D,!1),i+=E}if(Q==null&&(C.push(new Uint8Array,!0),Q==null))throw new Error("Failed to decompress partial gzip");return Q}class bn{constructor(){this.messages={},this.messageIdNext=0,this.worker=new qc,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),I=new Promise((g,Q)=>{this.messages[A]={resolve:g,reject:Q}});return{id:A,promise:I}}onMessage(A){const{id:I,result:g,error:Q}=A.data,C=this.messages[I];C&&(delete this.messages[I],Q?C.reject(Q):C.resolve(g))}async call(A,I){const{id:g,promise:Q}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:I,id:g},{transfer:Yw(I)}),Q}}let pw=4,xE=0;const uw=[],qw=[];async function mn(){const B=uw.shift();if(B)return B;if(xE<pw){const A=new bn;return xE+=1,A}return new Promise(A=>{qw.push(A)})}function Pn(B){if(xE>pw){xE-=1;return}const A=qw.shift();if(A){A(B);return}uw.push(B)}async function Tn(B){const A=await mn();try{return await B(A)}finally{Pn(A)}}const bw=`(function() {
9295
+ `);function pc(B){const A=new F.Vector3;for(const I of B)A.add(I);return A.divideScalar(B.length)}function uc(B){if(B.length===0)return new F.Quaternion;const A=B[0].clone();for(let I=1;I<B.length;I++)B[I].dot(B[0])<0?(A.x-=B[I].x,A.y-=B[I].y,A.z-=B[I].z,A.w-=B[I].w):(A.x+=B[I].x,A.y+=B[I].y,A.z+=B[I].z,A.w+=B[I].w);return A.normalize()}function qc(B,A){const[I,g]=[new F.Vector3,new F.Quaternion],[Q,C]=[new F.Vector3,new F.Quaternion];B.decompose(I,g,new F.Vector3),A.decompose(Q,C,new F.Vector3);const E=I.distanceTo(Q),i=Math.abs(g.dot(C));return{distance:E,coorient:i}}function SD({matrix1:B,matrix2:A,maxDistance:I,minCoorient:g}){const{distance:Q,coorient:C}=qc(B,A);return Q<=I&&(g==null||C>=g)}const bc=new F.Quaternion,RD=new F.Vector3;function mc(B){const A=bc.copy(B).normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const I=2*Math.acos(A.w),g=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),Q=g<1e-6?RD.set(1,0,0):RD.set(A.x,A.y,A.z).divideScalar(g),C=Math.abs(Q.x)+Math.abs(Q.y)+Math.abs(Q.z);let E=Q.x/C,i=Q.y/C;if(Q.z<0){const a=E;E=(1-Math.abs(i))*(E>=0?1:-1),i=(1-Math.abs(a))*(i>=0?1:-1)}const D=E*.5+.5,o=i*.5+.5,s=Math.round(D*255),t=Math.round(o*255);return Math.round(I*(255/Math.PI))<<16|t<<8|s}function Pc(B,A){const I=B&255,g=B>>>8&255,Q=B>>>16&255,C=I/255,E=g/255;let i=(C-.5)*2,D=(E-.5)*2;const o=1-(Math.abs(i)+Math.abs(D)),s=Math.max(-o,0);i+=i>=0?-s:s,D+=D>=0?-s:s;const t=RD.set(i,D,o).normalize(),a=Q/255*Math.PI*.5,y=Math.sin(a),r=Math.cos(a);return A.set(t.x*y,t.y*y,t.z*y,r),A}function Tc(B,A,I,g){const Q=Math.sqrt(B*B+A*A+I*I+g*g),C=(g<0?-B:B)/Q,E=(g<0?-A:A)/Q,i=(g<0?-I:I)/Q,D=(g<0?-g:g)/Q,o=2*Math.acos(D),s=Math.sqrt(C*C+E*E+i*i),t=s<1e-6?1:C/s,w=s<1e-6?0:E/s,a=s<1e-6?0:i/s,y=Math.abs(t)+Math.abs(w)+Math.abs(a);let r=t/y,c=w/y;if(a<0){const J=r;r=(1-Math.abs(c))*(r>=0?1:-1),c=(1-Math.abs(J))*(c>=0?1:-1)}const h=r*.5+.5,G=c*.5+.5,R=Math.round(h*1023),N=Math.round(G*1023);return Math.round(o*(4095/Math.PI))<<20|N<<10|R}function Oc(B,A){const I=B&1023,g=B>>>10&1023,Q=B>>>20&4095,C=I/1023,E=g/1023;let i=(C-.5)*2,D=(E-.5)*2;const o=1-(Math.abs(i)+Math.abs(D)),s=Math.max(-o,0);i+=i>=0?-s:s,D+=D>=0?-s:s;const t=Math.sqrt(i*i+D*D+o*o),w=t<1e-6?0:i/t,a=t<1e-6?0:D/t,y=t<1e-6?0:o/t,c=Q/4095*Math.PI*.5,h=Math.sin(c),G=Math.cos(c);return A.set(w*h,a*h,y*h,G),A}function Xc(B,A){const I=[];let g=0,Q=null;const C=new Bc((D,o)=>{if(I.push(D),g+=D.length,o||g>=A){const s=new Uint8Array(g);let t=0;for(const w of I)s.set(w,t),t+=w.length;Q=s.slice(0,A)}}),E=1024;let i=0;for(;Q==null&&i<B.length;){const D=B.slice(i,i+E);C.push(D,!1),i+=E}if(Q==null&&(C.push(new Uint8Array,!0),Q==null))throw new Error("Failed to decompress partial gzip");return Q}class vc{constructor(){this.messages={},this.messageIdNext=0,this.worker=new vn,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),I=new Promise((g,Q)=>{this.messages[A]={resolve:g,reject:Q}});return{id:A,promise:I}}onMessage(A){const{id:I,result:g,error:Q}=A.data,C=this.messages[I];C&&(delete this.messages[I],Q?C.reject(Q):C.resolve(g))}async call(A,I){const{id:g,promise:Q}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:I,id:g},{transfer:qw(I)}),Q}}let Xw=4,xE=0;const vw=[],Vw=[];async function Vc(){const B=vw.shift();if(B)return B;if(xE<Xw){const A=new vc;return xE+=1,A}return new Promise(A=>{Vw.push(A)})}function Zc(B){if(xE>Xw){xE-=1;return}const A=Vw.shift();if(A){A(B);return}vw.push(B)}async function Wc(B){const A=await Vc();try{return await B(A)}finally{Zc(A)}}const Zw=`(function() {
9296
9296
  "use strict";
9297
9297
  class ChunkDecoder {
9298
9298
  static __wrap(ptr) {
@@ -10843,7 +10843,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10843
10843
  initialize().catch(console.error);
10844
10844
  })();
10845
10845
  //# sourceMappingURL=worker-CiGpey09.js.map
10846
- `,Ms=typeof self<"u"&&self.Blob&&new Blob([bw],{type:"text/javascript;charset=utf-8"});function On(B){let A;try{if(A=Ms&&(self.URL||self.webkitURL).createObjectURL(Ms),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(bw),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}const mw=class Pw{constructor(){this.queue=null,this.messages={},this.worker=new On,this.worker.onmessage=A=>this.onMessage(A)}onMessage(A){var I;const{id:g,result:Q,error:C,status:E}=A.data,i=this.messages[g];i&&(C!==void 0?(delete this.messages[g],i.reject(C)):E!==void 0?(I=i.onStatus)==null||I.call(i,E):(delete this.messages[g],i.resolve(Q)))}tryExclusive(A){return this.queue==null?this.exclusive(A):null}async exclusive(A){const I=this.queue;I!=null?await new Promise(g=>{I.push(()=>g(void 0))}):this.queue=[];try{return await A(this)}finally{this.queue!=null&&(this.queue.length===0?this.queue=null:this.queue.shift()())}}async call(A,I,g={}){const Q=++Pw.currentId,C=new Promise((E,i)=>{this.messages[Q]={resolve:E,reject:i,onStatus:g.onStatus}});return this.worker.postMessage({id:Q,name:A,args:I},{transfer:Yw(I)}),await C}dispose(){this.worker.terminate();const A=Object.values(this.messages);this.messages={};for(const I of A)I.reject(new Error("Worker terminate"))}};mw.currentId=0;let RD=mw;class Xn{constructor(A=4){this.numWorkers=0,this.freelist=[],this.queue=[],this.maxWorkers=A}async withWorker(A){const I=await this.allocWorker();try{return await A(I)}finally{this.freeWorker(I)}}async allocWorker(){const A=this.freelist.pop();if(A)return A;if(this.numWorkers<this.maxWorkers){const I=new RD;return this.numWorkers+=1,I}return new Promise(I=>{this.queue.push(I)})}freeWorker(A){if(this.numWorkers>this.maxWorkers){this.numWorkers-=1;return}const I=this.queue.shift();if(I){I(A);return}this.freelist.push(A)}}const vE=new Xn,yA={type:"Gsplat"},VI={type:"CovSplat"},VE={type:"PackedSplats"},Tw={type:"ExtSplats"},fB=(B,A)=>new Zn({packedSplats:B,index:A}),vn=(B,A,I,g)=>new Wn({packedSplats:B,index:A,base:I,count:g}),Vn=(B,A)=>new zn({extSplats:B,index:A}),FD=B=>new _n({gsplat:B}),XI=B=>new $n({gsplat:B}),zQ=({gsplat:B,flags:A,index:I,center:g,scales:Q,quaternion:C,rgba:E,rgb:i,opacity:D,x:o,y:s,z:t,r:w,g:a,b:y})=>new Ah({gsplat:B,flags:A,index:I,center:g,scales:Q,quaternion:C,rgba:E,rgb:i,opacity:D,x:o,y:s,z:t,r:w,g:a,b:y}),Ow=(B,{scale:A,rotate:I,translate:g,recolor:Q})=>new Ih({gsplat:B,scale:A,rotate:I,translate:g,recolor:Q}),Xw=B=>new Bh({index:B}),Ns=B=>new Ch({index:B}),lI=lA(`
10846
+ `,Ls=typeof self<"u"&&self.Blob&&new Blob([Zw],{type:"text/javascript;charset=utf-8"});function jc(B){let A;try{if(A=Ls&&(self.URL||self.webkitURL).createObjectURL(Ls),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Zw),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}const Ww=class jw{constructor(){this.queue=null,this.messages={},this.worker=new jc,this.worker.onmessage=A=>this.onMessage(A)}onMessage(A){var I;const{id:g,result:Q,error:C,status:E}=A.data,i=this.messages[g];i&&(C!==void 0?(delete this.messages[g],i.reject(C)):E!==void 0?(I=i.onStatus)==null||I.call(i,E):(delete this.messages[g],i.resolve(Q)))}tryExclusive(A){return this.queue==null?this.exclusive(A):null}async exclusive(A){const I=this.queue;I!=null?await new Promise(g=>{I.push(()=>g(void 0))}):this.queue=[];try{return await A(this)}finally{this.queue!=null&&(this.queue.length===0?this.queue=null:this.queue.shift()())}}async call(A,I,g={}){const Q=++jw.currentId,C=new Promise((E,i)=>{this.messages[Q]={resolve:E,reject:i,onStatus:g.onStatus}});return this.worker.postMessage({id:Q,name:A,args:I},{transfer:qw(I)}),await C}dispose(){this.worker.terminate();const A=Object.values(this.messages);this.messages={};for(const I of A)I.reject(new Error("Worker terminate"))}};Ww.currentId=0;let FD=Ww;class zc{constructor(A=4){this.numWorkers=0,this.freelist=[],this.queue=[],this.maxWorkers=A}async withWorker(A){const I=await this.allocWorker();try{return await A(I)}finally{this.freeWorker(I)}}async allocWorker(){const A=this.freelist.pop();if(A)return A;if(this.numWorkers<this.maxWorkers){const I=new FD;return this.numWorkers+=1,I}return new Promise(I=>{this.queue.push(I)})}freeWorker(A){if(this.numWorkers>this.maxWorkers){this.numWorkers-=1;return}const I=this.queue.shift();if(I){I(A);return}this.freelist.push(A)}}const VE=new zc,yA={type:"Gsplat"},VI={type:"CovSplat"},ZE={type:"PackedSplats"},zw={type:"ExtSplats"},xB=(B,A)=>new Ah({packedSplats:B,index:A}),_c=(B,A,I,g)=>new Ih({packedSplats:B,index:A,base:I,count:g}),$c=(B,A)=>new Qh({extSplats:B,index:A}),kD=B=>new Bh({gsplat:B}),XI=B=>new Ch({gsplat:B}),zQ=({gsplat:B,flags:A,index:I,center:g,scales:Q,quaternion:C,rgba:E,rgb:i,opacity:D,x:o,y:s,z:t,r:w,g:a,b:y})=>new Eh({gsplat:B,flags:A,index:I,center:g,scales:Q,quaternion:C,rgba:E,rgb:i,opacity:D,x:o,y:s,z:t,r:w,g:a,b:y}),_w=(B,{scale:A,rotate:I,translate:g,recolor:Q})=>new ih({gsplat:B,scale:A,rotate:I,translate:g,recolor:Q}),$w=B=>new sh({index:B}),Hs=B=>new th({index:B}),lI=lA(`
10847
10847
  struct Gsplat {
10848
10848
  vec3 center;
10849
10849
  uint flags;
@@ -10870,14 +10870,14 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10870
10870
  bool isCovSplatActive(uint flags) {
10871
10871
  return (flags & GSPLAT_FLAG_ACTIVE) != 0u;
10872
10872
  }
10873
- `),Io=lA(`
10873
+ `),Bo=lA(`
10874
10874
  struct PackedSplats {
10875
10875
  usampler2DArray textureArray;
10876
10876
  int numSplats;
10877
10877
  vec4 rgbMinMaxLnScaleMinMax;
10878
10878
  bool lodOpacity;
10879
10879
  };
10880
- `),vw=lA(`
10880
+ `),Aa=lA(`
10881
10881
  bool readPackedArray(usampler2DArray texture, int numSplats, vec4 rgbMinMaxLnScaleMinMax, int index, out Gsplat gsplat) {
10882
10882
  if ((index >= 0) && (index < numSplats)) {
10883
10883
  uvec4 packedData = texelFetch(texture, splatTexCoord(index), 0);
@@ -10887,7 +10887,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10887
10887
  return false;
10888
10888
  }
10889
10889
  }
10890
- `);class Zn extends tA{constructor({packedSplats:A,index:I}){super({inTypes:{packedSplats:VE,index:"int"},outTypes:{gsplat:yA},inputs:{packedSplats:A,index:I},globals:()=>[lI,Io,vw],statements:({inputs:g,outputs:Q})=>{const{gsplat:C}=Q;if(!C)return[];const{packedSplats:E,index:i}=g;let D;return E&&i?D=GA(`
10890
+ `);class Ah extends tA{constructor({packedSplats:A,index:I}){super({inTypes:{packedSplats:ZE,index:"int"},outTypes:{gsplat:yA},inputs:{packedSplats:A,index:I},globals:()=>[lI,Bo,Aa],statements:({inputs:g,outputs:Q})=>{const{gsplat:C}=Q;if(!C)return[];const{packedSplats:E,index:i}=g;let D;return E&&i?D=GA(`
10891
10891
  ${C}.flags = 0u;
10892
10892
  if (readPackedArray(${E}.textureArray, ${E}.numSplats, ${E}.rgbMinMaxLnScaleMinMax, ${i}, ${C})) {
10893
10893
  if (${E}.lodOpacity) {
@@ -10896,7 +10896,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10896
10896
  bool zeroSize = all(equal(${C}.scales, vec3(0.0, 0.0, 0.0)));
10897
10897
  ${C}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
10898
10898
  }
10899
- `):D=[`${C}.flags = 0u;`],D.push(`${C}.index = ${i??"0"};`),D}})}dynoOut(){return new gI(this,"gsplat")}}class Wn extends tA{constructor({packedSplats:A,index:I,base:g,count:Q}){super({inTypes:{packedSplats:VE,index:"int",base:"int",count:"int"},outTypes:{gsplat:yA},inputs:{packedSplats:A,index:I,base:g,count:Q},globals:()=>[lI,Io,vw],statements:({inputs:C,outputs:E})=>{const{gsplat:i}=E;if(!i)return[];const{packedSplats:D,index:o,base:s,count:t}=C;let w;return D&&o&&s&&t?w=GA(`
10899
+ `):D=[`${C}.flags = 0u;`],D.push(`${C}.index = ${i??"0"};`),D}})}dynoOut(){return new gI(this,"gsplat")}}class Ih extends tA{constructor({packedSplats:A,index:I,base:g,count:Q}){super({inTypes:{packedSplats:ZE,index:"int",base:"int",count:"int"},outTypes:{gsplat:yA},inputs:{packedSplats:A,index:I,base:g,count:Q},globals:()=>[lI,Bo,Aa],statements:({inputs:C,outputs:E})=>{const{gsplat:i}=E;if(!i)return[];const{packedSplats:D,index:o,base:s,count:t}=C;let w;return D&&o&&s&&t?w=GA(`
10900
10900
  ${i}.flags = 0u;
10901
10901
  if (readPackedArray(${D}.textureArray, ${D}.numSplats, ${D}.rgbMinMaxLnScaleMinMax, ${o}, ${i})) {
10902
10902
  if (${D}.lodOpacity) {
@@ -10905,13 +10905,13 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10905
10905
  bool zeroSize = all(equal(${i}.scales, vec3(0.0, 0.0, 0.0)));
10906
10906
  ${i}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
10907
10907
  }
10908
- `):w=[`${i}.flags = 0u;`],w.push(`${i}.index = ${o??"0"};`),w}})}dynoOut(){return new gI(this,"gsplat")}}const Vw=lA(`
10908
+ `):w=[`${i}.flags = 0u;`],w.push(`${i}.index = ${o??"0"};`),w}})}dynoOut(){return new gI(this,"gsplat")}}const Ia=lA(`
10909
10909
  struct ExtSplats {
10910
10910
  usampler2DArray textureArray1;
10911
10911
  usampler2DArray textureArray2;
10912
10912
  int numSplats;
10913
10913
  };
10914
- `),jn=lA(`
10914
+ `),gh=lA(`
10915
10915
  void readExtArrays(usampler2DArray texture1, usampler2DArray texture2, int numSplats, int index, out Gsplat gsplat) {
10916
10916
  gsplat.flags = 0u;
10917
10917
  if ((index >= 0) && (index < numSplats)) {
@@ -10923,7 +10923,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10923
10923
  gsplat.index = index;
10924
10924
  }
10925
10925
  }
10926
- `);class zn extends tA{constructor({extSplats:A,index:I}){super({inTypes:{extSplats:Tw,index:"int"},outTypes:{gsplat:yA},inputs:{extSplats:A,index:I},globals:()=>[lI,Vw,jn],statements:({inputs:g,outputs:Q})=>{const{gsplat:C}=Q;if(!C)return[`${C}.flags = 0u;`];const{extSplats:E,index:i}=g;return E&&i?GA(`
10926
+ `);class Qh extends tA{constructor({extSplats:A,index:I}){super({inTypes:{extSplats:zw,index:"int"},outTypes:{gsplat:yA},inputs:{extSplats:A,index:I},globals:()=>[lI,Ia,gh],statements:({inputs:g,outputs:Q})=>{const{gsplat:C}=Q;if(!C)return[`${C}.flags = 0u;`];const{extSplats:E,index:i}=g;return E&&i?GA(`
10927
10927
  readExtArrays(${E}.textureArray1, ${E}.textureArray2, ${E}.numSplats, ${i}, ${C});
10928
10928
  `):[`${C}.flags = 0u;`]}})}dynoOut(){return new gI(this,"gsplat")}}lA(`
10929
10929
  void readCovArrays(usampler2DArray texture1, usampler2DArray texture2, int numSplats, int index, out CovSplat covsplat) {
@@ -10937,7 +10937,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10937
10937
  gsplat.index = index;
10938
10938
  }
10939
10939
  }
10940
- `);class _n extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:yA},outTypes:{covsplat:VI},inputs:{gsplat:A},globals:()=>[lI,CB],statements:({inputs:I,outputs:g})=>{const{gsplat:Q}=I,{covsplat:C}=g;return Q?GA(`
10940
+ `);class Bh extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:yA},outTypes:{covsplat:VI},inputs:{gsplat:A},globals:()=>[lI,CB],statements:({inputs:I,outputs:g})=>{const{gsplat:Q}=I,{covsplat:C}=g;return Q?GA(`
10941
10941
  ${C}.flags = 0u;
10942
10942
  if (isGsplatActive(${Q}.flags)) {
10943
10943
  ${C}.flags = ${Q}.flags;
@@ -10949,7 +10949,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10949
10949
  ${C}.xxyyzz = vec3(m[0][0], m[1][1], m[2][2]);
10950
10950
  ${C}.xyxzyz = vec3(m[0][1], m[0][2], m[1][2]);
10951
10951
  }
10952
- `):[`${C}.flags = 0u;`]}})}dynoOut(){return new gI(this,"covsplat")}}class $n extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:yA},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[lI],statements:({inputs:I,outputs:g})=>{const{gsplat:Q}=I,{flags:C,active:E,index:i,center:D,scales:o,quaternion:s,rgba:t,rgb:w,opacity:a,x:y,y:R,z:n,r:h,g:G,b:r}=g;return[C?`${C} = ${Q?`${Q}.flags`:"0u"};`:null,E?`${E} = isGsplatActive(${Q?`${Q}.flags`:"0u"});`:null,i?`${i} = ${Q?`${Q}.index`:"0"};`:null,D?`${D} = ${Q?`${Q}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${Q?`${Q}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,s?`${s} = ${Q?`${Q}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,t?`${t} = ${Q?`${Q}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,w?`${w} = ${Q?`${Q}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,a?`${a} = ${Q?`${Q}.rgba.a`:"0.0"};`:null,y?`${y} = ${Q?`${Q}.center.x`:"0.0"};`:null,R?`${R} = ${Q?`${Q}.center.y`:"0.0"};`:null,n?`${n} = ${Q?`${Q}.center.z`:"0.0"};`:null,h?`${h} = ${Q?`${Q}.rgba.r`:"0.0"};`:null,G?`${G} = ${Q?`${Q}.rgba.g`:"0.0"};`:null,r?`${r} = ${Q?`${Q}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Ah extends tA{constructor({gsplat:A,flags:I,index:g,center:Q,scales:C,quaternion:E,rgba:i,rgb:D,opacity:o,x:s,y:t,z:w,r:a,g:y,b:R}){super({inTypes:{gsplat:yA,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:yA},inputs:{gsplat:A,flags:I,index:g,center:Q,scales:C,quaternion:E,rgba:i,rgb:D,opacity:o,x:s,y:t,z:w,r:a,g:y,b:R},globals:()=>[lI],statements:({inputs:n,outputs:h})=>{const{gsplat:G}=h;if(!G)return[];const{gsplat:r,flags:M,index:k,center:J,scales:U,quaternion:Y,rgba:d,rgb:H,opacity:f,x:l,y:p,z:q,r:m,g:T,b:Z}=n;return[`${G}.flags = ${M??(r?`${r}.flags`:"0u")};`,`${G}.index = ${k??(r?`${r}.index`:"0")};`,`${G}.center = ${J??(r?`${r}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${G}.scales = ${U??(r?`${r}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${G}.quaternion = ${Y??(r?`${r}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${G}.rgba = ${d??(r?`${r}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,H?`${G}.rgba.rgb = ${H};`:null,f?`${G}.rgba.a = ${f};`:null,l?`${G}.center.x = ${l};`:null,p?`${G}.center.y = ${p};`:null,q?`${G}.center.z = ${q};`:null,m?`${G}.rgba.r = ${m};`:null,T?`${G}.rgba.g = ${T};`:null,Z?`${G}.rgba.b = ${Z};`:null].filter(Boolean)}})}dynoOut(){return new gI(this,"gsplat")}}lA(`
10952
+ `):[`${C}.flags = 0u;`]}})}dynoOut(){return new gI(this,"covsplat")}}class Ch extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:yA},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[lI],statements:({inputs:I,outputs:g})=>{const{gsplat:Q}=I,{flags:C,active:E,index:i,center:D,scales:o,quaternion:s,rgba:t,rgb:w,opacity:a,x:y,y:r,z:c,r:h,g:G,b:R}=g;return[C?`${C} = ${Q?`${Q}.flags`:"0u"};`:null,E?`${E} = isGsplatActive(${Q?`${Q}.flags`:"0u"});`:null,i?`${i} = ${Q?`${Q}.index`:"0"};`:null,D?`${D} = ${Q?`${Q}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${Q?`${Q}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,s?`${s} = ${Q?`${Q}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,t?`${t} = ${Q?`${Q}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,w?`${w} = ${Q?`${Q}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,a?`${a} = ${Q?`${Q}.rgba.a`:"0.0"};`:null,y?`${y} = ${Q?`${Q}.center.x`:"0.0"};`:null,r?`${r} = ${Q?`${Q}.center.y`:"0.0"};`:null,c?`${c} = ${Q?`${Q}.center.z`:"0.0"};`:null,h?`${h} = ${Q?`${Q}.rgba.r`:"0.0"};`:null,G?`${G} = ${Q?`${Q}.rgba.g`:"0.0"};`:null,R?`${R} = ${Q?`${Q}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Eh extends tA{constructor({gsplat:A,flags:I,index:g,center:Q,scales:C,quaternion:E,rgba:i,rgb:D,opacity:o,x:s,y:t,z:w,r:a,g:y,b:r}){super({inTypes:{gsplat:yA,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:yA},inputs:{gsplat:A,flags:I,index:g,center:Q,scales:C,quaternion:E,rgba:i,rgb:D,opacity:o,x:s,y:t,z:w,r:a,g:y,b:r},globals:()=>[lI],statements:({inputs:c,outputs:h})=>{const{gsplat:G}=h;if(!G)return[];const{gsplat:R,flags:N,index:k,center:J,scales:U,quaternion:H,rgba:d,rgb:Y,opacity:f,x:l,y:p,z:q,r:m,g:T,b:Z}=c;return[`${G}.flags = ${N??(R?`${R}.flags`:"0u")};`,`${G}.index = ${k??(R?`${R}.index`:"0")};`,`${G}.center = ${J??(R?`${R}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${G}.scales = ${U??(R?`${R}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${G}.quaternion = ${H??(R?`${R}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${G}.rgba = ${d??(R?`${R}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,Y?`${G}.rgba.rgb = ${Y};`:null,f?`${G}.rgba.a = ${f};`:null,l?`${G}.center.x = ${l};`:null,p?`${G}.center.y = ${p};`:null,q?`${G}.center.z = ${q};`:null,m?`${G}.rgba.r = ${m};`:null,T?`${G}.rgba.g = ${T};`:null,Z?`${G}.rgba.b = ${Z};`:null].filter(Boolean)}})}dynoOut(){return new gI(this,"gsplat")}}lA(`
10953
10953
  vec3 gsplatNormal(vec3 scales, vec4 quaternion) {
10954
10954
  float minScale = min(scales.x, min(scales.y, scales.z));
10955
10955
  vec3 normal;
@@ -10962,33 +10962,33 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
10962
10962
  }
10963
10963
  return quatVec(quaternion, normal);
10964
10964
  }
10965
- `);class Ih extends tA{constructor({gsplat:A,scale:I,rotate:g,translate:Q,recolor:C}){super({inTypes:{gsplat:yA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:yA},inputs:{gsplat:A,scale:I,rotate:g,translate:Q,recolor:C},globals:()=>[lI],statements:({inputs:E,outputs:i,compile:D})=>{const{gsplat:o}=i;if(!o||!E.gsplat)return[];const{scale:s,rotate:t,translate:w,recolor:a}=E,y=D.indent;return[`${o} = ${E.gsplat};`,`if (isGsplatActive(${o}.flags)) {`,s?`${y}${o}.center *= ${s};`:null,t?`${y}${o}.center = quatVec(${t}, ${o}.center);`:null,w?`${y}${o}.center += ${w};`:null,s?`${y}${o}.scales *= ${s};`:null,t?`${y}${o}.quaternion = quatQuat(${t}, ${o}.quaternion);`:null,a?`${y}${o}.rgba *= ${a};`:null,"}"].filter(Boolean)}})}dynoOut(){return new gI(this,"gsplat")}}const kD=B=>new gh({covsplat:B}),Zw=({covsplat:B,flags:A,index:I,center:g,rgba:Q,rgb:C,opacity:E,x:i,y:D,z:o,r:s,g:t,b:w})=>new Qh({covsplat:B,flags:A,index:I,center:g,rgba:Q,rgb:C,opacity:E,x:i,y:D,z:o,r:s,g:t,b:w});class gh extends tA{constructor({covsplat:A}){super({inTypes:{covsplat:VI},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{covsplat:A},globals:()=>[CB],statements:({inputs:I,outputs:g})=>{const{covsplat:Q}=I,{flags:C,active:E,index:i,center:D,rgba:o,rgb:s,opacity:t,x:w,y:a,z:y,r:R,g:n,b:h}=g;return[C?`${C} = ${Q?`${Q}.flags`:"0u"};`:null,E?`${E} = isCovSplatActive(${Q?`${Q}.flags`:"0u"});`:null,i?`${i} = ${Q?`${Q}.index`:"0"};`:null,D?`${D} = ${Q?`${Q}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${Q?`${Q}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,s?`${s} = ${Q?`${Q}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,t?`${t} = ${Q?`${Q}.rgba.a`:"0.0"};`:null,w?`${w} = ${Q?`${Q}.center.x`:"0.0"};`:null,a?`${a} = ${Q?`${Q}.center.y`:"0.0"};`:null,y?`${y} = ${Q?`${Q}.center.z`:"0.0"};`:null,R?`${R} = ${Q?`${Q}.rgba.r`:"0.0"};`:null,n?`${n} = ${Q?`${Q}.rgba.g`:"0.0"};`:null,h?`${h} = ${Q?`${Q}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Qh extends tA{constructor({covsplat:A,flags:I,index:g,center:Q,rgba:C,rgb:E,opacity:i,x:D,y:o,z:s,r:t,g:w,b:a}){super({inTypes:{covsplat:VI,flags:"uint",index:"int",center:"vec3",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{covsplat:VI},inputs:{covsplat:A,flags:I,index:g,center:Q,rgba:C,rgb:E,opacity:i,x:D,y:o,z:s,r:t,g:w,b:a},globals:()=>[CB],statements:({inputs:y,outputs:R})=>{const{covsplat:n}=R;if(!n)return[];const{covsplat:h,flags:G,index:r,center:M,rgba:k,rgb:J,opacity:U,x:Y,y:d,z:H,r:f,g:l,b:p}=y;return[`${n}.flags = ${G??(h?`${h}.flags`:"0u")};`,`${n}.index = ${r??(h?`${h}.index`:"0")};`,`${n}.center = ${M??(h?`${h}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${n}.rgba = ${k??(h?`${h}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,J?`${n}.rgba.rgb = ${J};`:null,U?`${n}.rgba.a = ${U};`:null,Y?`${n}.center.x = ${Y};`:null,d?`${n}.center.y = ${d};`:null,H?`${n}.center.z = ${H};`:null,f?`${n}.rgba.r = ${f};`:null,l?`${n}.rgba.g = ${l};`:null,p?`${n}.rgba.b = ${p};`:null,`${n}.xxyyzz = ${h?`${h}.xxyyzz`:"vec3(0.0, 0.0, 0.0)"};`,`${n}.xyxzyz = ${h?`${h}.xyxzyz`:"vec3(0.0, 0.0, 0.0)"};`].filter(Boolean)}})}dynoOut(){return new gI(this,"covsplat")}}class Bh extends tA{constructor({index:A}){super({inTypes:{index:"int"},outTypes:{coord:"ivec3"},inputs:{index:A},statements:({inputs:I,outputs:g})=>{const{index:Q}=I,{coord:C}=g;return!Q||!C?[]:[`${C} = splatTexCoord(${Q});`]}})}dynoOut(){return new gI(this,"coord")}}class Ch extends tA{constructor({index:A}){super({inTypes:{index:"int"},outTypes:{coord:"ivec3"},inputs:{index:A},statements:({inputs:I,outputs:g})=>{const{index:Q}=I,{coord:C}=g;return!Q||!C?[]:[`${C} = pagedSplatTexCoord(${Q});`]}})}dynoOut(){return new gI(this,"coord")}}const Ww=(B,A)=>new sh({gsplat:B,rgbMinMaxLnScaleMinMax:A}),Eh=(B,A)=>new th({covsplat:B,rgbMinMaxLnScaleMinMax:A}),ih=B=>new wh({gsplat:B}),Js=B=>new ah({covsplat:B}),Dh=(B,A,I,g,Q)=>new eh({gsplat:B,viewCenter:A,viewDir:I,sortRadial:g,cullCos:Q}),oh=(B,A,I,g,Q)=>new ch({covsplat:B,viewCenter:A,viewDir:I,sortRadial:g,cullCos:Q});class sh extends tA{constructor({gsplat:A,rgbMinMaxLnScaleMinMax:I}){super({inTypes:{gsplat:yA,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{gsplat:A,rgbMinMaxLnScaleMinMax:I},globals:()=>[lI],statements:({inputs:g,outputs:Q})=>{const{gsplat:C,rgbMinMaxLnScaleMinMax:E}=g;return C&&E?GA(`
10965
+ `);class ih extends tA{constructor({gsplat:A,scale:I,rotate:g,translate:Q,recolor:C}){super({inTypes:{gsplat:yA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:yA},inputs:{gsplat:A,scale:I,rotate:g,translate:Q,recolor:C},globals:()=>[lI],statements:({inputs:E,outputs:i,compile:D})=>{const{gsplat:o}=i;if(!o||!E.gsplat)return[];const{scale:s,rotate:t,translate:w,recolor:a}=E,y=D.indent;return[`${o} = ${E.gsplat};`,`if (isGsplatActive(${o}.flags)) {`,s?`${y}${o}.center *= ${s};`:null,t?`${y}${o}.center = quatVec(${t}, ${o}.center);`:null,w?`${y}${o}.center += ${w};`:null,s?`${y}${o}.scales *= ${s};`:null,t?`${y}${o}.quaternion = quatQuat(${t}, ${o}.quaternion);`:null,a?`${y}${o}.rgba *= ${a};`:null,"}"].filter(Boolean)}})}dynoOut(){return new gI(this,"gsplat")}}const MD=B=>new Dh({covsplat:B}),ga=({covsplat:B,flags:A,index:I,center:g,rgba:Q,rgb:C,opacity:E,x:i,y:D,z:o,r:s,g:t,b:w})=>new oh({covsplat:B,flags:A,index:I,center:g,rgba:Q,rgb:C,opacity:E,x:i,y:D,z:o,r:s,g:t,b:w});class Dh extends tA{constructor({covsplat:A}){super({inTypes:{covsplat:VI},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{covsplat:A},globals:()=>[CB],statements:({inputs:I,outputs:g})=>{const{covsplat:Q}=I,{flags:C,active:E,index:i,center:D,rgba:o,rgb:s,opacity:t,x:w,y:a,z:y,r,g:c,b:h}=g;return[C?`${C} = ${Q?`${Q}.flags`:"0u"};`:null,E?`${E} = isCovSplatActive(${Q?`${Q}.flags`:"0u"});`:null,i?`${i} = ${Q?`${Q}.index`:"0"};`:null,D?`${D} = ${Q?`${Q}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${Q?`${Q}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,s?`${s} = ${Q?`${Q}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,t?`${t} = ${Q?`${Q}.rgba.a`:"0.0"};`:null,w?`${w} = ${Q?`${Q}.center.x`:"0.0"};`:null,a?`${a} = ${Q?`${Q}.center.y`:"0.0"};`:null,y?`${y} = ${Q?`${Q}.center.z`:"0.0"};`:null,r?`${r} = ${Q?`${Q}.rgba.r`:"0.0"};`:null,c?`${c} = ${Q?`${Q}.rgba.g`:"0.0"};`:null,h?`${h} = ${Q?`${Q}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class oh extends tA{constructor({covsplat:A,flags:I,index:g,center:Q,rgba:C,rgb:E,opacity:i,x:D,y:o,z:s,r:t,g:w,b:a}){super({inTypes:{covsplat:VI,flags:"uint",index:"int",center:"vec3",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{covsplat:VI},inputs:{covsplat:A,flags:I,index:g,center:Q,rgba:C,rgb:E,opacity:i,x:D,y:o,z:s,r:t,g:w,b:a},globals:()=>[CB],statements:({inputs:y,outputs:r})=>{const{covsplat:c}=r;if(!c)return[];const{covsplat:h,flags:G,index:R,center:N,rgba:k,rgb:J,opacity:U,x:H,y:d,z:Y,r:f,g:l,b:p}=y;return[`${c}.flags = ${G??(h?`${h}.flags`:"0u")};`,`${c}.index = ${R??(h?`${h}.index`:"0")};`,`${c}.center = ${N??(h?`${h}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${c}.rgba = ${k??(h?`${h}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,J?`${c}.rgba.rgb = ${J};`:null,U?`${c}.rgba.a = ${U};`:null,H?`${c}.center.x = ${H};`:null,d?`${c}.center.y = ${d};`:null,Y?`${c}.center.z = ${Y};`:null,f?`${c}.rgba.r = ${f};`:null,l?`${c}.rgba.g = ${l};`:null,p?`${c}.rgba.b = ${p};`:null,`${c}.xxyyzz = ${h?`${h}.xxyyzz`:"vec3(0.0, 0.0, 0.0)"};`,`${c}.xyxzyz = ${h?`${h}.xyxzyz`:"vec3(0.0, 0.0, 0.0)"};`].filter(Boolean)}})}dynoOut(){return new gI(this,"covsplat")}}class sh extends tA{constructor({index:A}){super({inTypes:{index:"int"},outTypes:{coord:"ivec3"},inputs:{index:A},statements:({inputs:I,outputs:g})=>{const{index:Q}=I,{coord:C}=g;return!Q||!C?[]:[`${C} = splatTexCoord(${Q});`]}})}dynoOut(){return new gI(this,"coord")}}class th extends tA{constructor({index:A}){super({inTypes:{index:"int"},outTypes:{coord:"ivec3"},inputs:{index:A},statements:({inputs:I,outputs:g})=>{const{index:Q}=I,{coord:C}=g;return!Q||!C?[]:[`${C} = pagedSplatTexCoord(${Q});`]}})}dynoOut(){return new gI(this,"coord")}}const Qa=(B,A)=>new ch({gsplat:B,rgbMinMaxLnScaleMinMax:A}),wh=(B,A)=>new hh({covsplat:B,rgbMinMaxLnScaleMinMax:A}),ah=B=>new yh({gsplat:B}),Ys=B=>new Gh({covsplat:B}),eh=(B,A,I,g,Q)=>new rh({gsplat:B,viewCenter:A,viewDir:I,sortRadial:g,cullCos:Q}),nh=(B,A,I,g,Q)=>new Sh({covsplat:B,viewCenter:A,viewDir:I,sortRadial:g,cullCos:Q});class ch extends tA{constructor({gsplat:A,rgbMinMaxLnScaleMinMax:I}){super({inTypes:{gsplat:yA,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{gsplat:A,rgbMinMaxLnScaleMinMax:I},globals:()=>[lI],statements:({inputs:g,outputs:Q})=>{const{gsplat:C,rgbMinMaxLnScaleMinMax:E}=g;return C&&E?GA(`
10966
10966
  if (isGsplatActive(${C}.flags)) {
10967
10967
  target = packSplatEncoding(${C}.center, ${C}.scales, ${C}.quaternion, ${C}.rgba, ${E});
10968
10968
  } else {
10969
10969
  target = uvec4(0u, 0u, 0u, 0u);
10970
10970
  }
10971
- `):["target = uvec4(0u, 0u, 0u, 0u);"]}})}}class th extends tA{constructor({covsplat:A,rgbMinMaxLnScaleMinMax:I}){super({inTypes:{covsplat:VI,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{covsplat:A,rgbMinMaxLnScaleMinMax:I},globals:()=>[CB],statements:({inputs:g})=>{const{covsplat:Q,rgbMinMaxLnScaleMinMax:C}=g;return Q&&C?GA(`
10971
+ `):["target = uvec4(0u, 0u, 0u, 0u);"]}})}}class hh extends tA{constructor({covsplat:A,rgbMinMaxLnScaleMinMax:I}){super({inTypes:{covsplat:VI,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{covsplat:A,rgbMinMaxLnScaleMinMax:I},globals:()=>[CB],statements:({inputs:g})=>{const{covsplat:Q,rgbMinMaxLnScaleMinMax:C}=g;return Q&&C?GA(`
10972
10972
  if (isCovSplatActive(${Q}.flags)) {
10973
10973
  target = packSplatCovEncoding(${Q}.center, ${Q}.rgba, ${Q}.xxyyzz, ${Q}.xyxzyz, ${C});
10974
10974
  } else {
10975
10975
  target = uvec4(0u);
10976
10976
  }
10977
- `):["target = uvec4(0u);"]}})}}class wh extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:yA},inputs:{gsplat:A},globals:()=>[lI],statements:({inputs:I})=>{const{gsplat:g}=I;return g?GA(`
10977
+ `):["target = uvec4(0u);"]}})}}class yh extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:yA},inputs:{gsplat:A},globals:()=>[lI],statements:({inputs:I})=>{const{gsplat:g}=I;return g?GA(`
10978
10978
  if (isGsplatActive(${g}.flags)) {
10979
10979
  packSplatExt(target, target2, ${g}.center, ${g}.scales, ${g}.quaternion, ${g}.rgba);
10980
10980
  } else {
10981
10981
  target = uvec4(0u);
10982
10982
  target2 = uvec4(0u);
10983
10983
  }
10984
- `):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class ah extends tA{constructor({covsplat:A}){super({inTypes:{covsplat:VI},inputs:{covsplat:A},globals:()=>[CB],statements:({inputs:I})=>{const{covsplat:g}=I;return g?GA(`
10984
+ `):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class Gh extends tA{constructor({covsplat:A}){super({inTypes:{covsplat:VI},inputs:{covsplat:A},globals:()=>[CB],statements:({inputs:I})=>{const{covsplat:g}=I;return g?GA(`
10985
10985
  if (isCovSplatActive(${g}.flags)) {
10986
10986
  packSplatExtCov(target, target2, ${g}.center, ${g}.rgba, ${g}.xxyyzz, ${g}.xyxzyz);
10987
10987
  } else {
10988
10988
  target = uvec4(0u);
10989
10989
  target2 = uvec4(0u);
10990
10990
  }
10991
- `):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class eh extends tA{constructor({gsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C}){super({inTypes:{gsplat:yA,viewCenter:"vec3",viewDir:"vec3",sortRadial:"bool",cullCos:"float"},inputs:{gsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C},globals:()=>[lI],statements:({inputs:E})=>{const{gsplat:i,viewCenter:D,viewDir:o,sortRadial:s,cullCos:t}=E;return i&&D&&o&&s&&t?GA(`
10991
+ `):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class rh extends tA{constructor({gsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C}){super({inTypes:{gsplat:yA,viewCenter:"vec3",viewDir:"vec3",sortRadial:"bool",cullCos:"float"},inputs:{gsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C},globals:()=>[lI],statements:({inputs:E})=>{const{gsplat:i,viewCenter:D,viewDir:o,sortRadial:s,cullCos:t}=E;return i&&D&&o&&s&&t?GA(`
10992
10992
  float metric = 1.0 / 0.0;
10993
10993
  if (isGsplatActive(${i}.flags)) {
10994
10994
  vec3 center = ${i}.center - ${D};
@@ -11008,7 +11008,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
11008
11008
  }
11009
11009
  }
11010
11010
  target3 = floatToVec4(metric);
11011
- `):[]}})}}class ch extends tA{constructor({covsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C}){super({inTypes:{covsplat:VI,viewCenter:"vec3",viewDir:"vec3",sortRadial:"bool",cullCos:"float"},inputs:{covsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C},globals:()=>[CB],statements:({inputs:E})=>{const{covsplat:i,viewCenter:D,viewDir:o,sortRadial:s,cullCos:t}=E;return i&&D&&o&&s&&t?GA(`
11011
+ `):[]}})}}class Sh extends tA{constructor({covsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C}){super({inTypes:{covsplat:VI,viewCenter:"vec3",viewDir:"vec3",sortRadial:"bool",cullCos:"float"},inputs:{covsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C},globals:()=>[CB],statements:({inputs:E})=>{const{covsplat:i,viewCenter:D,viewDir:o,sortRadial:s,cullCos:t}=E;return i&&D&&o&&s&&t?GA(`
11012
11012
  float metric = 1.0 / 0.0;
11013
11013
  if (isCovSplatActive(${i}.flags)) {
11014
11014
  vec3 center = ${i}.center - ${D};
@@ -11023,10 +11023,10 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
11023
11023
  }
11024
11024
  }
11025
11025
  target3 = floatToVec4(metric);
11026
- `):[]}})}}class nh extends tA{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:I,outputs:g})=>[`target = ${I.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new gI(this,"rgba8")}}class kI extends tA{constructor({key:A,type:I,count:g,value:Q,update:C,globals:E}){A=A??"value",super({outTypes:{[A]:I},update:()=>{if(C){const i=C(this.value);i!==void 0&&(this.value=i)}this.uniform.value=this.value},generate:({inputs:i,outputs:D})=>{const o=E?.({inputs:i,outputs:D})??[],s={},t=D[A];return t&&(o.push(`uniform ${Lw(t,I,g)};`),s[t]=this.uniform),{globals:o,uniforms:s}}}),this.type=I,this.count=g,this.value=Q,this.uniform={value:Q},this.outKey=A}dynoOut(){return new gI(this,this.outKey)}}class RC extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"bool",value:I,update:g})}}class xg extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"int",value:I,update:g})}}class _Q extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"float",value:I,update:g})}}class pg extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"vec3",value:I,update:g})}}class JC extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"vec4",value:I,update:g})}}class hh extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3",value:I,update:g})}}class jw extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2D",value:I,update:g})}}class rI extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2DArray",value:I,update:g})}}class go{constructor({graph:A,inputs:I,outputs:g,template:Q,consoleLog:C}){this.graph=A,this.template=Q,this.inputs=I??{},this.outputs=g??{};const E=new nn({indent:this.template.indent});for(const D in this.outputs)this.outputs[D]&&E.declares.add(this.outputs[D]);const i=A.compile({inputs:this.inputs,outputs:this.outputs,compile:E});this.shader=Q.generate({globals:E.globals,statements:i}),this.uniforms=E.uniforms,this.updaters=E.updaters,C&&(console.log("*** COMPILED SHADER",this.shader),console.log("*** UNIFORMS",this.uniforms))}prepareMaterial(){return yh(this)}update(){for(const A of this.updaters)A()}}class ZE{constructor(A){const I=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),g=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!I||!g)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,I.index),this.between=A.substring(I.index+I[0].length,g.index),this.after=A.substring(g.index+g[0].length),this.indent=g[1]}generate({globals:A,statements:I}){return this.before+Array.from(A).join(`
11026
+ `):[]}})}}class Rh extends tA{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:I,outputs:g})=>[`target = ${I.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new gI(this,"rgba8")}}class kI extends tA{constructor({key:A,type:I,count:g,value:Q,update:C,globals:E}){A=A??"value",super({outTypes:{[A]:I},update:()=>{if(C){const i=C(this.value);i!==void 0&&(this.value=i)}this.uniform.value=this.value},generate:({inputs:i,outputs:D})=>{const o=E?.({inputs:i,outputs:D})??[],s={},t=D[A];return t&&(o.push(`uniform ${pw(t,I,g)};`),s[t]=this.uniform),{globals:o,uniforms:s}}}),this.type=I,this.count=g,this.value=Q,this.uniform={value:Q},this.outKey=A}dynoOut(){return new gI(this,this.outKey)}}class FC extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"bool",value:I,update:g})}}class xg extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"int",value:I,update:g})}}class _Q extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"float",value:I,update:g})}}class pg extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"vec3",value:I,update:g})}}class UC extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"vec4",value:I,update:g})}}class Fh extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3",value:I,update:g})}}class Ba extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2D",value:I,update:g})}}class rI extends kI{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2DArray",value:I,update:g})}}class Co{constructor({graph:A,inputs:I,outputs:g,template:Q,consoleLog:C}){this.graph=A,this.template=Q,this.inputs=I??{},this.outputs=g??{};const E=new Rc({indent:this.template.indent});for(const D in this.outputs)this.outputs[D]&&E.declares.add(this.outputs[D]);const i=A.compile({inputs:this.inputs,outputs:this.outputs,compile:E});this.shader=Q.generate({globals:E.globals,statements:i}),this.uniforms=E.uniforms,this.updaters=E.updaters,C&&(console.log("*** COMPILED SHADER",this.shader),console.log("*** UNIFORMS",this.uniforms))}prepareMaterial(){return kh(this)}update(){for(const A of this.updaters)A()}}class WE{constructor(A){const I=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),g=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!I||!g)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,I.index),this.between=A.substring(I.index+I[0].length,g.index),this.after=A.substring(g.index+g[0].length),this.indent=g[1]}generate({globals:A,statements:I}){return this.before+Array.from(A).join(`
11027
11027
 
11028
11028
  `)+this.between+I.map(g=>this.indent+g).join(`
11029
- `)+this.after}}const Us=new WeakMap;function yh(B){let A=Us.get(B);return A||(A=new F.RawShaderMaterial({glslVersion:F.GLSL3,vertexShader:Hn,fragmentShader:B.shader,uniforms:B.uniforms}),Us.set(B,A),A)}function zw(B,A,I="add"){const g=()=>{throw new Error(`Invalid ${I} types: ${B}, ${A}`)};if(B===A)return B;if(B==="int"){if(sQ(A))return A;g()}if(A==="int"){if(sQ(B))return B;g()}if(B==="uint"){if(tQ(A))return A;g()}if(A==="uint"){if(tQ(B))return B;g()}if(B==="float"){if(SC(A))return A;g()}if(A==="float"){if(SC(B))return B;g()}throw new Error(`Invalid ${I} types: ${B}, ${A}`)}function Gh(B,A){return zw(B,A,"sub")}function rh(B,A){const I=()=>{throw new Error(`Invalid mul types: ${B}, ${A}`)},g=Q=>Q;if(B==="int"){if(sQ(A))return g(A);I()}if(A==="int"){if(sQ(B))return g(B);I()}if(B==="uint"){if(tQ(A))return g(A);I()}if(A==="uint"){if(tQ(B))return g(B);I()}if(B==="float"){if(SC(A))return g(A);I()}if(A==="float"){if(SC(B))return g(B);I()}if(sQ(B)||tQ(B)||sQ(A)||tQ(A)){if(B===A)return g(B);I()}if(B==="vec2"){if(A==="vec2"||LQ(A))return g("vec2");if(A==="mat3x2")return g("vec3");if(A==="mat4x2")return g("vec4");I()}if(B==="vec3"){if(A==="mat2x3")return g("vec2");if(A==="vec3"||HQ(A))return g("vec3");if(A==="mat4x3")return g("vec4");I()}if(B==="vec4"){if(A==="mat2x4")return g("vec2");if(A==="mat3x4")return g("vec3");if(A==="vec4"||YQ(A))return g("vec4");I()}if(A==="vec2"){if(LQ(B))return g("vec2");if(B==="mat2x3")return g("vec3");if(B==="mat2x4")return g("vec4");I()}if(A==="vec3"){if(B==="mat3x2")return g("vec2");if(HQ(B))return g("vec3");if(B==="mat3x4")return g("vec4");I()}if(A==="vec4"){if(B==="mat4x2")return g("vec2");if(B==="mat4x3")return g("vec3");if(YQ(B))return g("vec4");I()}if(LQ(B)){if(LQ(A))return g("mat2");if(A==="mat3x2")return g("mat3x2");if(A==="mat4x2")return g("mat4x2");I()}if(B==="mat2x3"){if(LQ(A))return g("mat2x3");if(A==="mat3x2")return g("mat3");if(A==="mat4x2")return g("mat4x3");I()}if(B==="mat2x4"){if(LQ(A))return g("mat2x4");if(A==="mat3x2")return g("mat3x4");if(A==="mat4x2")return g("mat4");I()}if(B==="mat3x2"){if(A==="mat2x3")return g("mat2");if(HQ(A))return g("mat3x2");if(A==="mat4x3")return g("mat4x2");I()}if(HQ(B)){if(A==="mat2x3")return g("mat2x3");if(HQ(A))return g("mat3");if(A==="mat4x3")return g("mat4x3");I()}if(B==="mat3x4"){if(A==="mat2x3")return g("mat2x4");if(HQ(A))return g("mat3x4");if(A==="mat4x3")return g("mat4");I()}if(B==="mat4x2"){if(A==="mat2x4")return g("mat2");if(A==="mat3x4")return g("mat3x2");if(YQ(A))return g("mat4x2");I()}if(B==="mat4x3"){if(A==="mat2x4")return g("mat2x3");if(A==="mat3x4")return g("mat3");if(YQ(A))return g("mat4x3");I()}if(YQ(B)){if(A==="mat2x4")return g("mat2x4");if(A==="mat3x4")return g("mat3x4");if(YQ(A))return g("mat4");I()}throw new Error(`Invalid mul types: ${B}, ${A}`)}const rQ=(B,A)=>new Sh({a:B,b:A}),$Q=(B,A)=>new Rh({a:B,b:A}),SQ=(B,A)=>new Fh({a:B,b:A});class Sh extends $D{constructor({a:A,b:I}){super({a:A,b:I,outKey:"sum",outTypeFunc:zw}),this.statements=({inputs:g,outputs:Q})=>[`${Q.sum} = ${g.a} + ${g.b};`]}}class Rh extends $D{constructor({a:A,b:I}){super({a:A,b:I,outKey:"difference",outTypeFunc:Gh}),this.statements=({inputs:g,outputs:Q})=>[`${Q.difference} = ${g.a} - ${g.b};`]}}class Fh extends $D{constructor({a:A,b:I}){super({a:A,b:I,outKey:"product",outTypeFunc:rh}),this.statements=({inputs:g,outputs:Q})=>[`${Q.product} = ${g.a} * ${g.b};`]}}const kh=B=>new Nh({value:B}),Mh=B=>new Jh({value:B}),Ls=B=>new Uh({value:B});class Nh extends OE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = floatBitsToUint(${I.a});`]}}class Jh extends OE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packHalf2x16(${I.a});`]}}class Uh extends OE{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:I,outputs:g})=>[`uvec4 uRgba = uvec4(${I.a} & 0xffu, (${I.a} >> 8u) & 0xffu, (${I.a} >> 16u) & 0xffu, (${I.a} >> 24u) & 0xffu);`,`${g.rgba8} = vec4(uRgba) / 255.0;`]}}const pE=B=>new Hh({a:B}),Lh=({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:E,g:i,b:D,a:o})=>new Yh({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:E,g:i,b:D,a:o});class Hh extends OE{constructor({a:A}){super({a:A,outTypeFunc:I=>I,outKey:"normalize"}),this.statements=({inputs:I,outputs:g})=>[`${g.normalize} = normalize(${I.a});`]}}class Yh extends tA{constructor({vector:A,vectorType:I,x:g,y:Q,z:C,w:E,r:i,g:D,b:o,a:s}){if(!A&&!I)throw new Error("Either vector or vectorType must be provided");const t=I??wQ(A),w=an(t),a=en(t),y={vector:t,x:w,y:w,r:w,g:w},R={vector:A,x:g,y:Q,r:i,g:D};a>=3&&(Object.assign(y,{z:w,b:w}),Object.assign(R,{z:C,b:o})),a>=4&&(Object.assign(y,{w,a:w}),Object.assign(R,{w:E,a:s})),super({inTypes:y,outTypes:{vector:t},inputs:R}),this.statements=({inputs:n,outputs:h})=>{const{vector:G}=h,{vector:r,x:M,y:k,z:J,w:U,r:Y,g:d,b:H,a:f}=n,l=[`${G}.x = ${M??Y??(r?`${r}.x`:VC(w))};`,`${G}.y = ${k??d??(r?`${r}.y`:VC(w))};`];return a>=3&&l.push(`${G}.z = ${J??H??(r?`${r}.z`:VC(w))};`),a>=4&&l.push(`${G}.w = ${U??f??(r?`${r}.w`:VC(w))};`),l}}dynoOut(){return new gI(this,"vector")}}const Kh=(B,{scale:A,scales:I,rotate:g,translate:Q})=>new lh({position:B,scale:A,scales:I,rotate:g,translate:Q}).outputs.position,dh=(B,{scale:A,scales:I,rotate:g})=>new fh({dir:B,scale:A,scales:I,rotate:g}).outputs.dir;class lh extends tA{constructor({position:A,scale:I,scales:g,rotate:Q,translate:C}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:I,scales:g,rotate:Q,translate:C},statements:({inputs:E,outputs:i})=>{const{position:D}=i;if(!D)return[];const{scale:o,scales:s,rotate:t,translate:w}=E;return[`${D} = ${E.position??"vec3(0.0, 0.0, 0.0)"};`,o?`${D} *= ${o};`:null,s?`${D} *= ${s};`:null,t?`${D} = quatVec(${t}, ${D});`:null,w?`${D} += ${w};`:null].filter(Boolean)}})}}class fh extends tA{constructor({dir:A,scale:I,scales:g,rotate:Q}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:I,scales:g,rotate:Q},statements:({inputs:C,outputs:E})=>{const{dir:i}=E;if(!i)return[];const{scale:D,scales:o,rotate:s}=C;return[`${i} = ${C.dir??"vec3(0.0, 0.0, 0.0)"};`,D?`${i} *= ${D};`:null,o?`${i} *= ${o};`:null,s?`${i} = quatVec(${s}, ${i});`:null].filter(Boolean)}})}}const WE=class pI{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.extra={},this.maxSh=3,this.isInitialized=!1,this.extArrays=[new Uint32Array(0),new Uint32Array(0)],this.textures=[pI.emptyTexture,pI.emptyTexture],this.extra={},this.dyno=new xh({extSplats:this}),this.dynoNumSh=new xg({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.lodSplats=A.lodSplats,A.extArrays?(this.extArrays=A.extArrays,this.maxSplats=Math.floor(Math.min(this.extArrays[0].length/4,this.extArrays[1].length/4)),this.numSplats=A.numSplats??this.maxSplats,this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY),this.updateTextures()):(this.maxSplats=A.maxSplats??0,this.numSplats=0,this.extArrays=[new Uint32Array(0),new Uint32Array(0)])}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new io;if((g||I||E)&&await w.loadInternalAsync({extSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.textures[0]!==pI.emptyTexture&&(this.textures[0].dispose(),this.textures[0].source.data=null,this.textures[0]=pI.emptyTexture),this.textures[1]!==pI.emptyTexture&&(this.textures[1].dispose(),this.textures[1].source.data=null,this.textures[1]=pI.emptyTexture),this.extArrays=[new Uint32Array(0),new Uint32Array(0)];for(const A in this.extra){const I=this.extra[A];if(I instanceof kI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?!this.extra.sh3a||!this.extra.sh3b?2:3:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=Vn(this.dyno,A);if(this.hasRgbDir()&&I){const Q=XI(g).outputs.center,C=pE($Q(Q,I)),{sh1Texture:E,sh2Texture:i,sh3TextureA:D,sh3TextureB:o}=this.ensureShTextures();let{rgb:s}=_w({coord:Xw(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:E,sh2Texture:i,sh3TextureA:D,sh3TextureB:o});s=rQ(s,XI(g).outputs.rgb),g=zQ({gsplat:g,rgb:s})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let C=this.extra.sh1;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh1=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");A=new rI({value:s,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let C=this.extra.sh2;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh2=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");I=new rI({value:s,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3a||!this.extra.sh3b)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3TextureA;if(!g){let C=this.extra.sh3a;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3a=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");g=new rI({value:s,key:"sh3"}),this.extra.sh3TextureA=g}let Q=this.extra.sh3TextureB;if(!Q){let C=this.extra.sh3b;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3b=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");Q=new rI({value:s,key:"sh3b"}),this.extra.sh3TextureB=Q}return{sh1Texture:A,sh2Texture:I,sh3TextureA:g,sh3TextureB:Q}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.extArrays[0]?this.extArrays[0].length/4:0;if(!this.extArrays[0]||I>g){this.maxSplats=FA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4),C=new Uint32Array(this.maxSplats*4);this.extArrays[0]&&(Q.set(this.extArrays[0]),C.set(this.extArrays[1])),this.extArrays[0]=Q,this.extArrays[1]=C}return this.extArrays}getSplat(A){if(A>=this.numSplats)throw new Error("Invalid index");return yD(this.extArrays,A)}setSplat(A,I,g,Q,C,E){const i=this.ensureSplats(A+1);ks(i,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,E.r,E.g,E.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const E=this.ensureSplats(this.numSplats+1);ks(E,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(this.numSplats)for(let I=0;I<this.numSplats;++I){const g=yD(this.extArrays,I);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}updateTextures(){if(this.textures[0]!==pI.emptyTexture){const{width:A,height:I,depth:g}=this.textures[0].image;this.maxSplats!==A*I*g&&(this.textures[0].dispose(),this.textures[0]=pI.emptyTexture,this.textures[1].dispose(),this.textures[1]=pI.emptyTexture)}if(this.textures[0]===pI.emptyTexture){const{width:A,height:I,depth:g}=FA(this.maxSplats);this.textures[0]=EQ(this.extArrays[0],A,I,g,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"),this.textures[1]=EQ(this.extArrays[1],A,I,g,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")}else this.extArrays[0].buffer!==this.textures[0].image.data.buffer&&(this.textures[0].image.data=new Uint8Array(this.extArrays[0].buffer),this.textures[1].image.data=new Uint8Array(this.extArrays[1].buffer),this.textures[0].needsUpdate=!0,this.textures[1].needsUpdate=!0)}extractSplats(A,I){const g=FA(A.length).maxSplats,Q=new pI({maxSplats:g});for(let C=0;C<A.length;C++){const E=this.getSplat(A[C]);if(I){let i=(A[C]>>>16)*.61803398875;i=i-Math.floor(i);const D=Math.max(0,Math.min(1,Math.abs(i*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(i*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(i*6-1)-1));E.color.r*=D,E.color.g*=o,E.color.b*=s}Q.pushSplat(E.center,E.scales,E.quaternion,E.opacity,E.color)}return Q}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=[this.extArrays[0].slice(),this.extArrays[1].slice()],C=A?(await A.getArray()).slice():void 0,E={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},i=await vE.withWorker(async o=>await o.call(I?"qualityLodExtSplats":"tinyLodExtSplats",{numSplats:this.numSplats,extArrays:Q,extra:E,lodBase:g,rgba:C})),D=new pI(i);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}};WE.emptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();WE.emptyTexture=EQ(null,1,1,1,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");WE.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();let lg=WE;class xh extends kI{constructor({extSplats:A}={}){super({key:"extSplats",type:Tw,globals:()=>[Vw],value:{textureArray1:lg.emptyTexture,textureArray2:lg.emptyTexture,numSplats:0},update:I=>{var g,Q,C;return I.textureArray1=((g=this.extSplats)==null?void 0:g.textures[0])??lg.emptyTexture,I.textureArray2=((Q=this.extSplats)==null?void 0:Q.textures[1])??lg.emptyTexture,I.numSplats=((C=this.extSplats)==null?void 0:C.numSplats)??0,I}}),this.extSplats=A}}const ph=lA(`
11029
+ `)+this.after}}const Ks=new WeakMap;function kh(B){let A=Ks.get(B);return A||(A=new F.RawShaderMaterial({glslVersion:F.GLSL3,vertexShader:xc,fragmentShader:B.shader,uniforms:B.uniforms}),Ks.set(B,A),A)}function Ca(B,A,I="add"){const g=()=>{throw new Error(`Invalid ${I} types: ${B}, ${A}`)};if(B===A)return B;if(B==="int"){if(sQ(A))return A;g()}if(A==="int"){if(sQ(B))return B;g()}if(B==="uint"){if(tQ(A))return A;g()}if(A==="uint"){if(tQ(B))return B;g()}if(B==="float"){if(RC(A))return A;g()}if(A==="float"){if(RC(B))return B;g()}throw new Error(`Invalid ${I} types: ${B}, ${A}`)}function Mh(B,A){return Ca(B,A,"sub")}function Nh(B,A){const I=()=>{throw new Error(`Invalid mul types: ${B}, ${A}`)},g=Q=>Q;if(B==="int"){if(sQ(A))return g(A);I()}if(A==="int"){if(sQ(B))return g(B);I()}if(B==="uint"){if(tQ(A))return g(A);I()}if(A==="uint"){if(tQ(B))return g(B);I()}if(B==="float"){if(RC(A))return g(A);I()}if(A==="float"){if(RC(B))return g(B);I()}if(sQ(B)||tQ(B)||sQ(A)||tQ(A)){if(B===A)return g(B);I()}if(B==="vec2"){if(A==="vec2"||LQ(A))return g("vec2");if(A==="mat3x2")return g("vec3");if(A==="mat4x2")return g("vec4");I()}if(B==="vec3"){if(A==="mat2x3")return g("vec2");if(A==="vec3"||HQ(A))return g("vec3");if(A==="mat4x3")return g("vec4");I()}if(B==="vec4"){if(A==="mat2x4")return g("vec2");if(A==="mat3x4")return g("vec3");if(A==="vec4"||YQ(A))return g("vec4");I()}if(A==="vec2"){if(LQ(B))return g("vec2");if(B==="mat2x3")return g("vec3");if(B==="mat2x4")return g("vec4");I()}if(A==="vec3"){if(B==="mat3x2")return g("vec2");if(HQ(B))return g("vec3");if(B==="mat3x4")return g("vec4");I()}if(A==="vec4"){if(B==="mat4x2")return g("vec2");if(B==="mat4x3")return g("vec3");if(YQ(B))return g("vec4");I()}if(LQ(B)){if(LQ(A))return g("mat2");if(A==="mat3x2")return g("mat3x2");if(A==="mat4x2")return g("mat4x2");I()}if(B==="mat2x3"){if(LQ(A))return g("mat2x3");if(A==="mat3x2")return g("mat3");if(A==="mat4x2")return g("mat4x3");I()}if(B==="mat2x4"){if(LQ(A))return g("mat2x4");if(A==="mat3x2")return g("mat3x4");if(A==="mat4x2")return g("mat4");I()}if(B==="mat3x2"){if(A==="mat2x3")return g("mat2");if(HQ(A))return g("mat3x2");if(A==="mat4x3")return g("mat4x2");I()}if(HQ(B)){if(A==="mat2x3")return g("mat2x3");if(HQ(A))return g("mat3");if(A==="mat4x3")return g("mat4x3");I()}if(B==="mat3x4"){if(A==="mat2x3")return g("mat2x4");if(HQ(A))return g("mat3x4");if(A==="mat4x3")return g("mat4");I()}if(B==="mat4x2"){if(A==="mat2x4")return g("mat2");if(A==="mat3x4")return g("mat3x2");if(YQ(A))return g("mat4x2");I()}if(B==="mat4x3"){if(A==="mat2x4")return g("mat2x3");if(A==="mat3x4")return g("mat3");if(YQ(A))return g("mat4x3");I()}if(YQ(B)){if(A==="mat2x4")return g("mat2x4");if(A==="mat3x4")return g("mat3x4");if(YQ(A))return g("mat4");I()}throw new Error(`Invalid mul types: ${B}, ${A}`)}const rQ=(B,A)=>new Jh({a:B,b:A}),$Q=(B,A)=>new Uh({a:B,b:A}),SQ=(B,A)=>new Lh({a:B,b:A});class Jh extends go{constructor({a:A,b:I}){super({a:A,b:I,outKey:"sum",outTypeFunc:Ca}),this.statements=({inputs:g,outputs:Q})=>[`${Q.sum} = ${g.a} + ${g.b};`]}}class Uh extends go{constructor({a:A,b:I}){super({a:A,b:I,outKey:"difference",outTypeFunc:Mh}),this.statements=({inputs:g,outputs:Q})=>[`${Q.difference} = ${g.a} - ${g.b};`]}}class Lh extends go{constructor({a:A,b:I}){super({a:A,b:I,outKey:"product",outTypeFunc:Nh}),this.statements=({inputs:g,outputs:Q})=>[`${Q.product} = ${g.a} * ${g.b};`]}}const Hh=B=>new Kh({value:B}),Yh=B=>new dh({value:B}),ds=B=>new lh({value:B});class Kh extends XE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = floatBitsToUint(${I.a});`]}}class dh extends XE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packHalf2x16(${I.a});`]}}class lh extends XE{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:I,outputs:g})=>[`uvec4 uRgba = uvec4(${I.a} & 0xffu, (${I.a} >> 8u) & 0xffu, (${I.a} >> 16u) & 0xffu, (${I.a} >> 24u) & 0xffu);`,`${g.rgba8} = vec4(uRgba) / 255.0;`]}}const pE=B=>new xh({a:B}),fh=({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:E,g:i,b:D,a:o})=>new ph({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:E,g:i,b:D,a:o});class xh extends XE{constructor({a:A}){super({a:A,outTypeFunc:I=>I,outKey:"normalize"}),this.statements=({inputs:I,outputs:g})=>[`${g.normalize} = normalize(${I.a});`]}}class ph extends tA{constructor({vector:A,vectorType:I,x:g,y:Q,z:C,w:E,r:i,g:D,b:o,a:s}){if(!A&&!I)throw new Error("Either vector or vectorType must be provided");const t=I??wQ(A),w=Gc(t),a=rc(t),y={vector:t,x:w,y:w,r:w,g:w},r={vector:A,x:g,y:Q,r:i,g:D};a>=3&&(Object.assign(y,{z:w,b:w}),Object.assign(r,{z:C,b:o})),a>=4&&(Object.assign(y,{w,a:w}),Object.assign(r,{w:E,a:s})),super({inTypes:y,outTypes:{vector:t},inputs:r}),this.statements=({inputs:c,outputs:h})=>{const{vector:G}=h,{vector:R,x:N,y:k,z:J,w:U,r:H,g:d,b:Y,a:f}=c,l=[`${G}.x = ${N??H??(R?`${R}.x`:VC(w))};`,`${G}.y = ${k??d??(R?`${R}.y`:VC(w))};`];return a>=3&&l.push(`${G}.z = ${J??Y??(R?`${R}.z`:VC(w))};`),a>=4&&l.push(`${G}.w = ${U??f??(R?`${R}.w`:VC(w))};`),l}}dynoOut(){return new gI(this,"vector")}}const uh=(B,{scale:A,scales:I,rotate:g,translate:Q})=>new bh({position:B,scale:A,scales:I,rotate:g,translate:Q}).outputs.position,qh=(B,{scale:A,scales:I,rotate:g})=>new mh({dir:B,scale:A,scales:I,rotate:g}).outputs.dir;class bh extends tA{constructor({position:A,scale:I,scales:g,rotate:Q,translate:C}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:I,scales:g,rotate:Q,translate:C},statements:({inputs:E,outputs:i})=>{const{position:D}=i;if(!D)return[];const{scale:o,scales:s,rotate:t,translate:w}=E;return[`${D} = ${E.position??"vec3(0.0, 0.0, 0.0)"};`,o?`${D} *= ${o};`:null,s?`${D} *= ${s};`:null,t?`${D} = quatVec(${t}, ${D});`:null,w?`${D} += ${w};`:null].filter(Boolean)}})}}class mh extends tA{constructor({dir:A,scale:I,scales:g,rotate:Q}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:I,scales:g,rotate:Q},statements:({inputs:C,outputs:E})=>{const{dir:i}=E;if(!i)return[];const{scale:D,scales:o,rotate:s}=C;return[`${i} = ${C.dir??"vec3(0.0, 0.0, 0.0)"};`,D?`${i} *= ${D};`:null,o?`${i} *= ${o};`:null,s?`${i} = quatVec(${s}, ${i});`:null].filter(Boolean)}})}}const jE=class pI{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.extra={},this.maxSh=3,this.isInitialized=!1,this.extArrays=[new Uint32Array(0),new Uint32Array(0)],this.textures=[pI.emptyTexture,pI.emptyTexture],this.extra={},this.dyno=new Ph({extSplats:this}),this.dynoNumSh=new xg({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.lodSplats=A.lodSplats,A.extArrays?(this.extArrays=A.extArrays,this.maxSplats=Math.floor(Math.min(this.extArrays[0].length/4,this.extArrays[1].length/4)),this.numSplats=A.numSplats??this.maxSplats,this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY),this.updateTextures()):(this.maxSplats=A.maxSplats??0,this.numSplats=0,this.extArrays=[new Uint32Array(0),new Uint32Array(0)])}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new so;if((g||I||E)&&await w.loadInternalAsync({extSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.textures[0]!==pI.emptyTexture&&(this.textures[0].dispose(),this.textures[0].source.data=null,this.textures[0]=pI.emptyTexture),this.textures[1]!==pI.emptyTexture&&(this.textures[1].dispose(),this.textures[1].source.data=null,this.textures[1]=pI.emptyTexture),this.extArrays=[new Uint32Array(0),new Uint32Array(0)];for(const A in this.extra){const I=this.extra[A];if(I instanceof kI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?!this.extra.sh3a||!this.extra.sh3b?2:3:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=$c(this.dyno,A);if(this.hasRgbDir()&&I){const Q=XI(g).outputs.center,C=pE($Q(Q,I)),{sh1Texture:E,sh2Texture:i,sh3TextureA:D,sh3TextureB:o}=this.ensureShTextures();let{rgb:s}=Ea({coord:$w(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:E,sh2Texture:i,sh3TextureA:D,sh3TextureB:o});s=rQ(s,XI(g).outputs.rgb),g=zQ({gsplat:g,rgb:s})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let C=this.extra.sh1;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh1=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");A=new rI({value:s,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let C=this.extra.sh2;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh2=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");I=new rI({value:s,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3a||!this.extra.sh3b)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3TextureA;if(!g){let C=this.extra.sh3a;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3a=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");g=new rI({value:s,key:"sh3"}),this.extra.sh3TextureA=g}let Q=this.extra.sh3TextureB;if(!Q){let C=this.extra.sh3b;const{width:E,height:i,depth:D,maxSplats:o}=FA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3b=t,C=t}const s=EQ(C,E,i,D,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");Q=new rI({value:s,key:"sh3b"}),this.extra.sh3TextureB=Q}return{sh1Texture:A,sh2Texture:I,sh3TextureA:g,sh3TextureB:Q}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.extArrays[0]?this.extArrays[0].length/4:0;if(!this.extArrays[0]||I>g){this.maxSplats=FA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4),C=new Uint32Array(this.maxSplats*4);this.extArrays[0]&&(Q.set(this.extArrays[0]),C.set(this.extArrays[1])),this.extArrays[0]=Q,this.extArrays[1]=C}return this.extArrays}getSplat(A){if(A>=this.numSplats)throw new Error("Invalid index");return GD(this.extArrays,A)}setSplat(A,I,g,Q,C,E){const i=this.ensureSplats(A+1);Us(i,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,E.r,E.g,E.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const E=this.ensureSplats(this.numSplats+1);Us(E,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(this.numSplats)for(let I=0;I<this.numSplats;++I){const g=GD(this.extArrays,I);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}updateTextures(){if(this.textures[0]!==pI.emptyTexture){const{width:A,height:I,depth:g}=this.textures[0].image;this.maxSplats!==A*I*g&&(this.textures[0].dispose(),this.textures[0]=pI.emptyTexture,this.textures[1].dispose(),this.textures[1]=pI.emptyTexture)}if(this.textures[0]===pI.emptyTexture){const{width:A,height:I,depth:g}=FA(this.maxSplats);this.textures[0]=EQ(this.extArrays[0],A,I,g,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"),this.textures[1]=EQ(this.extArrays[1],A,I,g,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")}else this.extArrays[0].buffer!==this.textures[0].image.data.buffer&&(this.textures[0].image.data=new Uint8Array(this.extArrays[0].buffer),this.textures[1].image.data=new Uint8Array(this.extArrays[1].buffer),this.textures[0].needsUpdate=!0,this.textures[1].needsUpdate=!0)}extractSplats(A,I){const g=FA(A.length).maxSplats,Q=new pI({maxSplats:g});for(let C=0;C<A.length;C++){const E=this.getSplat(A[C]);if(I){let i=(A[C]>>>16)*.61803398875;i=i-Math.floor(i);const D=Math.max(0,Math.min(1,Math.abs(i*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(i*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(i*6-1)-1));E.color.r*=D,E.color.g*=o,E.color.b*=s}Q.pushSplat(E.center,E.scales,E.quaternion,E.opacity,E.color)}return Q}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=[this.extArrays[0].slice(),this.extArrays[1].slice()],C=A?(await A.getArray()).slice():void 0,E={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},i=await VE.withWorker(async o=>await o.call(I?"qualityLodExtSplats":"tinyLodExtSplats",{numSplats:this.numSplats,extArrays:Q,extra:E,lodBase:g,rgba:C})),D=new pI(i);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}};jE.emptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();jE.emptyTexture=EQ(null,1,1,1,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI");jE.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();let lg=jE;class Ph extends kI{constructor({extSplats:A}={}){super({key:"extSplats",type:zw,globals:()=>[Ia],value:{textureArray1:lg.emptyTexture,textureArray2:lg.emptyTexture,numSplats:0},update:I=>{var g,Q,C;return I.textureArray1=((g=this.extSplats)==null?void 0:g.textures[0])??lg.emptyTexture,I.textureArray2=((Q=this.extSplats)==null?void 0:Q.textures[1])??lg.emptyTexture,I.numSplats=((C=this.extSplats)==null?void 0:C.numSplats)??0,I}}),this.extSplats=A}}const Th=lA(`
11030
11030
  vec3 evaluateExtSH1(uvec4 packedData, vec3 viewDir) {
11031
11031
  vec3 sh1_0 = decodeExtRgb(packedData.x);
11032
11032
  vec3 sh1_1 = decodeExtRgb(packedData.y);
@@ -11036,7 +11036,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
11036
11036
  + sh1_1 * (0.4886025 * viewDir.z)
11037
11037
  + sh1_2 * (-0.4886025 * viewDir.x);
11038
11038
  }
11039
- `),uh=lA(`
11039
+ `),Oh=lA(`
11040
11040
  vec3 evaluateExtSH12(uvec4 packed1, uvec4 packed2, vec3 viewDir) {
11041
11041
  vec3 sh1_0 = decodeExtRgb(packed1.x);
11042
11042
  vec3 sh1_1 = decodeExtRgb(packed1.y);
@@ -11060,7 +11060,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
11060
11060
 
11061
11061
  return sh1Rgb + sh2Rgb;
11062
11062
  }
11063
- `),qh=lA(`
11063
+ `),Xh=lA(`
11064
11064
  vec3 evaluateExtSH3(uvec4 packedA, uvec4 packedB, vec3 viewDir) {
11065
11065
  vec3 sh3_0 = decodeExtRgb(packedA.x);
11066
11066
  vec3 sh3_1 = decodeExtRgb(packedA.y);
@@ -11085,7 +11085,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
11085
11085
  + sh3_5 * (1.4453057 * viewDir.z * (xx - yy))
11086
11086
  + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy));
11087
11087
  }
11088
- `);function _w({coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3TextureA:C,sh3TextureB:E}){return new tA({inTypes:{coord:"ivec3",viewDir:"vec3",numSh:"int",sh1Texture:"usampler2DArray",sh2Texture:"usampler2DArray",sh3TextureA:"usampler2DArray",sh3TextureB:"usampler2DArray"},outTypes:{rgb:"vec3"},inputs:{coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3TextureA:C,sh3TextureB:E},globals:()=>[ph,uh,qh],statements:({inputs:i,outputs:D})=>{const o=["vec3 rgb = vec3(0.0);"];return i.sh1Texture&&(i.sh2Texture?(o.push(...GA(`
11088
+ `);function Ea({coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3TextureA:C,sh3TextureB:E}){return new tA({inTypes:{coord:"ivec3",viewDir:"vec3",numSh:"int",sh1Texture:"usampler2DArray",sh2Texture:"usampler2DArray",sh3TextureA:"usampler2DArray",sh3TextureB:"usampler2DArray"},outTypes:{rgb:"vec3"},inputs:{coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3TextureA:C,sh3TextureB:E},globals:()=>[Th,Oh,Xh],statements:({inputs:i,outputs:D})=>{const o=["vec3 rgb = vec3(0.0);"];return i.sh1Texture&&(i.sh2Texture?(o.push(...GA(`
11089
11089
  if (${i.numSh} == 1) {
11090
11090
  rgb = evaluateExtSH1(texelFetch(${i.sh1Texture}, ${i.coord}, 0), ${i.viewDir});
11091
11091
  } else if (${i.numSh} >= 2) {
@@ -11098,7 +11098,7 @@ a=extmap-allow-mixed`)!==-1){const C=Q.sdp.split(`
11098
11098
  if (${i.numSh} >= 1) {
11099
11099
  rgb = evaluateExtSH1(texelFetch(${i.sh1Texture}, ${i.coord}, 0), ${i.viewDir});
11100
11100
  }
11101
- `))),o.push(`${D.rgb} = rgb;`),o}}).outputs}function EQ(B,A,I,g,Q,C,E){const i=new F.DataArrayTexture(B,A,I,g);return i.format=Q,i.type=C,i.internalFormat=E,i.needsUpdate=!0,i}function Hs(B){const A=dA.decode_rad_header(B);if(A[2])throw ls(A[1]);return ls(A[0])}function bh(){return dA.get_raycast_buffer()}function mh(){return dA.get_raycast_buffer2()}function Ph(B,A,I,g,Q,C,E,i,D,o){return dA.raycast_ext_buffers(B,A,I,g,Q,C,E,i,D,o)}function Th(B,A,I,g,Q,C,E,i,D,o,s,t,w){return dA.raycast_packed_buffer(B,A,I,g,Q,C,E,i,D,o,s,t,w)}function Oh(){return{__proto__:null,"./spark_rs_bg.js":{__proto__:null,__wbg_Error_2e59b1b37a9a34c3:function(A,I){return Error(ZC(A,I))},__wbg___wbindgen_throw_81fc77679af83bc6:function(A,I){throw new Error(ZC(A,I))},__wbg_error_a6fa202b58aa1cd3:function(A,I){let g,Q;try{g=A,Q=I,console.error(ZC(A,I))}finally{dA.__wbindgen_free(g,Q,1)}},__wbg_length_0c32cb8543c8e4c8:function(A){return A.length},__wbg_length_1e701798fdcaa3b4:function(A){return A.length},__wbg_length_fd4646b401926788:function(A){return A.length},__wbg_new_227d7c05414eb861:function(){return new Error},__wbg_new_4f9fafbb3909af72:function(){return new Object},__wbg_new_f3c9df4f38f3f798:function(){return new Array},__wbg_new_with_length_26bffbe236bf73f9:function(A){return new Float32Array(A>>>0)},__wbg_prototypesetcall_3e05eb9545565046:function(A,I,g){Uint8Array.prototype.set.call(vh(A,I),g)},__wbg_prototypesetcall_e42275e601e14eeb:function(A,I,g){Uint32Array.prototype.set.call(Ks(A,I),g)},__wbg_set_6be42768c690e380:function(A,I,g){A[I]=g},__wbg_set_6c60b2e8ad0e9383:function(A,I,g){A[I>>>0]=g},__wbg_set_8ee2d34facb8466e:function(){return Wh(function(A,I,g){return Reflect.set(A,I,g)},arguments)},__wbg_set_a98c8da6557e63de:function(A,I,g){A.set(Ys(I,g))},__wbg_stack_3b0d974bbf31e44f:function(A,I){const g=I.stack,Q=jh(g,dA.__wbindgen_malloc,dA.__wbindgen_realloc),C=MD;ds().setInt32(A+4,C,!0),ds().setInt32(A+0,Q,!0)},__wbg_subarray_d51e89458b3fdbf6:function(A,I,g){return A.subarray(I>>>0,g>>>0)},__wbindgen_cast_0000000000000001:function(A){return A},__wbindgen_cast_0000000000000002:function(A,I){return Ys(A,I)},__wbindgen_cast_0000000000000003:function(A,I){return Ks(A,I)},__wbindgen_cast_0000000000000004:function(A,I){return ZC(A,I)},__wbindgen_cast_0000000000000005:function(A){return BigInt.asUintN(64,A)},__wbindgen_init_externref_table:function(){const A=dA.__wbindgen_externrefs,I=A.grow(4);A.set(0,void 0),A.set(I+0,void 0),A.set(I+1,null),A.set(I+2,!0),A.set(I+3,!1)}}}}function Xh(B){const A=dA.__externref_table_alloc();return dA.__wbindgen_externrefs.set(A,B),A}function Ys(B,A){return B=B>>>0,Vh().subarray(B/4,B/4+A)}function Ks(B,A){return B=B>>>0,Zh().subarray(B/4,B/4+A)}function vh(B,A){return B=B>>>0,xB().subarray(B/1,B/1+A)}let iQ=null;function ds(){return(iQ===null||iQ.buffer.detached===!0||iQ.buffer.detached===void 0&&iQ.buffer!==dA.memory.buffer)&&(iQ=new DataView(dA.memory.buffer)),iQ}let MB=null;function Vh(){return(MB===null||MB.byteLength===0)&&(MB=new Float32Array(dA.memory.buffer)),MB}function ZC(B,A){return B=B>>>0,_h(B,A)}let NB=null;function Zh(){return(NB===null||NB.byteLength===0)&&(NB=new Uint32Array(dA.memory.buffer)),NB}let JB=null;function xB(){return(JB===null||JB.byteLength===0)&&(JB=new Uint8Array(dA.memory.buffer)),JB}function Wh(B,A){try{return B.apply(this,A)}catch(I){const g=Xh(I);dA.__wbindgen_exn_store(g)}}function jh(B,A,I){if(I===void 0){const i=pB.encode(B),D=A(i.length,1)>>>0;return xB().subarray(D,D+i.length).set(i),MD=i.length,D}let g=B.length,Q=A(g,1)>>>0;const C=xB();let E=0;for(;E<g;E++){const i=B.charCodeAt(E);if(i>127)break;C[Q+E]=i}if(E!==g){E!==0&&(B=B.slice(E)),Q=I(Q,g,g=E+B.length*3,1)>>>0;const i=xB().subarray(Q+E,Q+g),D=pB.encodeInto(B,i);E+=D.written,Q=I(Q,g,E,1)>>>0}return MD=E,Q}function ls(B){const A=dA.__wbindgen_externrefs.get(B);return dA.__externref_table_dealloc(B),A}let GE=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});GE.decode();const zh=2146435072;let pi=0;function _h(B,A){return pi+=A,pi>=zh&&(GE=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),GE.decode(),pi=A),GE.decode(xB().subarray(B,B+A))}const pB=new TextEncoder;"encodeInto"in pB||(pB.encodeInto=function(B,A){const I=pB.encode(B);return A.set(I),{read:B.length,written:I.length}});let MD=0,dA;function $h(B,A){return dA=B.exports,iQ=null,MB=null,NB=null,JB=null,dA.__wbindgen_start(),dA}async function Ay(B,A){if(typeof Response=="function"&&B instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(B,A)}catch(Q){if(B.ok&&I(B.type)&&B.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",Q);else throw Q}const g=await B.arrayBuffer();return await WebAssembly.instantiate(g,A)}else{const g=await WebAssembly.instantiate(B,A);return g instanceof WebAssembly.Instance?{instance:g,module:B}:g}function I(g){switch(g){case"basic":case"cors":case"default":return!0}return!1}}async function $w(B){if(dA!==void 0)return dA;B!==void 0&&(Object.getPrototypeOf(B)===Object.prototype?{module_or_path:B}=B:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),B===void 0&&(B=new URL("data:application/wasm;base64,AGFzbQEAAAABhQM1YAN/f38Bf2ACf38Bf2ACf38AYAN/f38AYAF/AGABfwF/YAV/f39/fwBgBH9/f38AYAAAYAABb2AEf39/fwF/YAZ/f39/f38AYAJ/fwFvYAFvAX9gAX0BfWAFf39/fn8AYAABf2AFf39/f38Bf2ADf39vAGAGf39/f39/AX9gB39/f39/f38AYAV/f35/fwBgBX9/fH9/AGAFf399f38AYAADf39/YANvb28AYANvf28AYANvb28Bf2ADb39/AW9gAX8Bb2ADb39/AGACf28AYAF8AW9gAX4Bb2AJf39/f399fX1/AGAHf39/fX9/fwBgB39/f39/f38Bf2ACfn8AYAJ/fgBgAn9+AX9gA39+fgBgBn9/f35/fwBgBn9/f3x/fwBgBn9/f31/fwBgBH9+fn8AYA59fX19fX19fX1/b319fwFvYA19fX19fX19fX1/fX1/AW9gAW8Df39/YAp9fX19fX19fX1/AW9gBH9+f38AYAR/fX9/AGAEf3x/fwBgAXwBfwK7CRgQLi9zcGFya19yc19iZy5qcxpfX3diZ19uZXdfNGY5ZmFmYmIzOTA5YWY3MgAJEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzZiZTQyNzY4YzY5MGUzODAAGRAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8wYzMyY2I4NTQzYzhlNGM4AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsXzNlMDVlYjk1NDU1NjUwNDYAEhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld19mM2M5ZGY0ZjM4ZjNmNzk4AAkQLi9zcGFya19yc19iZy5qcxpfX3diZ19zZXRfNmM2MGIyZThhZDBlOTM4MwAaEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzhlZTJkMzRmYWNiODQ2NmUAGxAuL3NwYXJrX3JzX2JnLmpzH19fd2JnX3N1YmFycmF5X2Q1MWU4OTQ1OGIzZmRiZjYAHBAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8xZTcwMTc5OGZkY2FhM2I0AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsX2U0MjI3NWU2MDFlMTRlZWIAEhAuL3NwYXJrX3JzX2JnLmpzJl9fd2JnX25ld193aXRoX2xlbmd0aF8yNmJmZmJlMjM2YmY3M2Y5AB0QLi9zcGFya19yc19iZy5qcx1fX3diZ19sZW5ndGhfZmQ0NjQ2YjQwMTkyNjc4OAANEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0X2E5OGM4ZGE2NTU3ZTYzZGUAHhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld18yMjdkN2MwNTQxNGViODYxAAkQLi9zcGFya19yc19iZy5qcxxfX3diZ19zdGFja18zYjBkOTc0YmJmMzFlNDRmAB8QLi9zcGFya19yc19iZy5qcxxfX3diZ19lcnJvcl9hNmZhMjAyYjU4YWExY2QzAAIQLi9zcGFya19yc19iZy5qcxxfX3diZ19FcnJvcl8yZTU5YjFiMzdhOWEzNGMzAAwQLi9zcGFya19yc19iZy5qcydfX3diZ19fX3diaW5kZ2VuX3Rocm93XzgxZmM3NzY3OWFmODNiYzYAAhAuL3NwYXJrX3JzX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAxACAQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMgAMEC4vc3BhcmtfcnNfYmcuanMgX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDMADBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA0AAwQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNQAhA5oCmAIFAAIBAQIFAQEGIgcAAwUBAAICDg4EBQUCCgEAACMDAQUkBQUCAgICBAIDAwACAAoFCAETAhQCAQIOBRQPAQUCAAUEDwEDAiUDAQIFAgUEBQEBBwEBAhAHAQUBAQUBDwEBAQEBJgYBCwYCCwQBBQInBAIBAgsDAQICAQMDBQECASgCBAcBBAQABgQEAgAAAAMBCwQEBgIGAgIGBykLKissAAAGAwcBAAIBAAMDAwMBAQIBAwMB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AWogATYCAAsgAkEIag8LQQAhAEHc58EAKAIAIgEgBU0NAEHc58EAIAEgBWsiATYCAEHk58EAQeTnwQAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQMAQsgAA8LIABBCGoL4RcCGX8CfCMAQbAEayIDJAAgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANCADcDaCADQgA3A2AgA0IANwNYIANCADcDUCADQgA3A0ggA0IANwNAIANCADcDOCADQgA3AzAgA0IANwMoIANCADcDICADQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgA0IANwO4AiADQgA3A7ACIANCADcDqAIgA0IANwOgAiADQgA3A5gCIANCADcDkAIgA0IANwOIAiADQgA3A4ACIANCADcD+AEgA0IANwPwASADQgA3A+gBIANCADcD4AEgA0IANwPYASADQgA3A9ABIANCADcDyAEgA0IANwPAASADQgA3A7gBIANCADcDsAEgA0IANwOoASADQgA3A6ABIANCADcD2AMgA0IANwPQAyADQgA3A8gDIANCADcDwAMgA0IANwO4AyADQgA3A7ADIANCADcDqAMgA0IANwOgAyADQgA3A5gDIANCADcDkAMgA0IANwOIAyADQgA3A4ADIANCADcD+AIgA0IANwPwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3A9ACIANCADcDyAIgA0IANwPAAiADQeADakEAQdAA/AsAQfTgwQAoAgAiCSEGIAJBA2tBGG0iBUEAIAVBAEobIgshBSALQQJ0QYThwQBqIQcDQCADIARBA3RqIAVBAEgEfEQAAAAAAAAAAAUgBygCALcLOQMAIAQgBkkiCgRAIAdBBGohByAFQQFqIQUgBCAKaiIEIAZNDQELC0EAIQUDQEEAIQQgA0HAAmogBUEDdGogHCAAIARBA3RqKwMAIAMgBSAEa0EDdGorAwCioDkDACAFIAlJIgQEQCAEIAVqIgUgCU0NAQsLRAAAAAAAAPB/RAAAAAAAAOB/IAIgC0FobGoiCkEYayIGQf4PSyIPG0QAAAAAAAAAAEQAAAAAAABgAyAGQblwSSIQG0QAAAAAAADwPyAGQYJ4SCIRGyAGQf8HSiISG0H9FyAGIAZB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AgQoAgwRAAAMDAsgASgCAEHXosEAQQMgASgCBCgCDBEAAAwLCyABKAIAQdqiwQBBBCABKAIEKAIMEQAADAoLIAEoAgBB3qLBAEEMIAEoAgQoAgwRAAAMCQsgASgCAEHqosEAQQ8gASgCBCgCDBEAAAwICyABKAIAQfmiwQBBDSABKAIEKAIMEQAADAcLIAEoAgBBhqPBAEEOIAEoAgQoAgwRAAAMBgsgASgCACAAKAIEIAAoAgggASgCBCgCDBEAAAwFCyAAKQMIIgpC/////////weDIQsgCkL///////////8Ag0L/////////9/8AWARAIApCNIinIQAgCkIAUw0CIAJBsAJqDAMLQYizwQBBi7PBACAKQgBZIgAbQY+zwQAgC1AiBBshA0EDQQQgABtBAyAEGyEADAMLIAEoAgBB5KTBAEEEIAEoAgQoAgwRAAAMAwsgAkEtOgCwAkEBIQggAkGxAmoLIQYCfwJAAkACQCAAQf8PcSIARSALUHFFBEAgAEECSSALQgBSciEDIAtCgICAgICAgAiEIAsgABsiC0IChiEKIAtCAYMhDwJAAkAgAEG1CGtBzHcgABsiAEEASARAIAJBkAJqQejOwAAgACAAQYWiU2xBFHYgAEF/R2siAGoiB0EEdCIEaykDACILIApCAoQiDBCYASACQYACakHwzsAAIARrKQMAIg0gDBCYASACQfABaiACKQOYAiIMIAIpA4ACfCIOIAIpA4gCIAwgDlatfCAAIAdBsdm1H2xBE3ZrQfwAakH/AHFBwABzIgQQtwEgAkGwAWogCyAKIANBf3OsfCIMEJgBIAJBoAFqIA0gDBCYASACQZABaiACKQO4ASIMIAIpA6ABfCIOIAIpA6gBIAwgDlatfCAEELcBIAJB4AFqIAsgChCYASACQdABaiANIAoQmAEgAkHAAWogAikD6AEiCyACKQPQAXwiDSACKQPYASALIA1WrXwgBBC3ASACKQPAASELIAIpA5ABIQwgAikD8AEhDiAAQQJJDQEgAEE/TyAKQn8gAK2GQn+Fg0IAUnINBkEBIQVBACEEDAULIAJBgAFqIABBwegEbEESdiAAQQNLayIHQQR0IgQpA8j3QCILIApCAoQiDRCYASACQfAAaiAEQdD3wABqKQMAIgwgDRCYASACQeAAaiACKQOIASIOIAIpA3B8IhAg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ABggBEH/AXFFDQYgASADQQFqNgIUIAJBAToAqAEgAiABNgKkASACQeQAaiACQaQBahBMAkACfyACLQBkQQFGBEAgAigCaAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAi0AZUEBRgRAIAJB5ABqIAIoAqQBED4gAigCZCIEQQJGBEAgAigCaAwQCyACKAJoIQYgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwQCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgVBAkcNASACKAJoDA8LQQBB/LrBABCoAQwOCyACKgJoIRAgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwOCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgdBAkcNASACKAJoDA0LQQFB/LrBABCoAQwMCyACKgJoIREgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwMCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIghBAkcNASACKAJoDAsLQQJB/LrBABCoAQwKCyACKgJoIRIgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwKCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIglBAkcNASACKAJoDAkLQQNB/LrBABCoAQwICyACKgJoIRMgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwICyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgpBAkcNASACKAJoDAcLQQRB/LrBABCoAQwGCyACKgJoIRQgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwGCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgtBAkcNASACKAJoDAULQQVB/LrBABCoAQwECyACKgJoIRUgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwECyACLQBlQQFHDQIgAkHkAGogAigCpAEQKiACLQBkQQFHDQEgAigCaAwDC0EGQfy6wQAQqAEMAgsgAi0AZSEMDAILQQdB/LrBABCoAQshBkECIQQLIAEgAS0AGEEBajoAGCACIAEQViIDNgKgASACIAw6AJwBIAIgFTgCmAEgAiALNgKUASACIBQ4ApAB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IAAtAABFBEAgAUH8xsAAQQUQRA8LIAFBgcfAAEEEEEQLHgAgAEUEQBCrAgALIAAgAiADIAQgBSABKAIQEREACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARCgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEHAAscACAARQRAEKsCAAsgACACIAMgBCABKAIQETEACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARMgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEzAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEDAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEAAAscAQFvIAAlASABJQEgARCrASACJQEgAhCrARABCw8AIAAEQBCeAgALEJMCAAsYACAARQRAEKsCAAsgACACIAEoAhARAQALHAAgASgCACAAKAIAIAAoAgQgASgCBCgCDBEAAAsfAEH858EALQAARQRAQfznwQBBAToAAAsgAEEBNgIACyYAIABBHGpBACAB/QACAP0M2geMSXhlTNPCfY9Nlp8mz/0j/WMbCyYAIABBHGpBACAB/QACAP0MpB4B+3qY2OUTfOG8yehUVf0j/WMbCxIAIAAgAUEBdEEBciACEMoBAAsYACABKAIAIAEoAgQgACgCACAAKAIEEEcLFwAgACgCACABIAAoAgRBDGooAgARAQALFgEBbyAAIAEQFCECEG4iACACJgEgAAsWAQFvIAAgARAVIQIQbiIAIAImASAACxYBAW8gACABEBYhAhBuIgAgAiYBIAALGQAgASgCAEGEtMEAQQUgASgCBCgCDBEAAAsZACABKAIAQYzMwABBEiABKAIEKAIMEQAACxUAIAEgACgCACIAKAIAIAAoAgQQRAsWACAAQci2wQA2AgQgACABQRxqNgIACxYAIABBhLfBADYCBCAAIAFBHGo2AgALEAAgAEEEahBAIABBHGoQWgsZACABKAIAQa+jwQBBCCABKAIEKAIMEQAACxkAIAEoAgBBo6PBAEEDIAEoAgQoAgwRAAALGQAgASgCAEHE08EAQRcgASgCBCgCDBEAAAsZACABKAIAQaLTwQBBFCABKAIEKAIMEQAACxkAIAEoAgBBmNPBAEEKIAEoAgQoAgwRAAALGQAgASgCAEGmo8EAQQkgASgCBCgCDBEA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c3NlcnRpb24gYGxlZnQgwBAgcmlnaHRgIGZhaWxlZDogwAkKICBsZWZ0OiDACQogcmlnaHQ6IMAAwAI6IMAAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL2xlZ2FjeS5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTcuMS9zcmMvcmF3LnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZm10LnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvbXV0ZXgvbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZXJyb3IucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGVycm9yLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb3JlL3NyYy9vcHMvZnVuY3Rpb24ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3luYy9sYXp5X2xvY2sucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlx3YXNtLWJpbmRnZW4tMC4yLjExN1xzcmNcZXh0ZXJucmVmLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAc3BhcmstbGliXHNyY1xzcGxhdF9lbmNvZGUucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGRlLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeW5jL29uY2UucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlX2NvcmUtMS4wLjIyOFxzcmNcZGVcbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL2JzdHIvbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy8uLi8uLi9iYWNrdHJhY2Uvc3JjL3N5bWJvbGl6ZS9tb2QucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAc3BhcmstbGliXHNyY1xyYWQucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXHJlYWQucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTMvc3JjL2RsbWFsbG9jLnJzAHNwYXJrLXJzXHNyY1xsaWIucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcanMtc3lzLTAuMy45NFxzcmNcbGliLnJzAC9ydXN0L2RlcHMvcnVzdGMtZGVtYW5nbGUtMC4xLjI3L3NyYy9saWIucnMAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL3YwLnJzAMAsIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXIAOWludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IHN0cjo6ZnJvbV91dGY4KMAEKSA9IMAiIHdhcyBleHBlY3RlZCB0byBoYXZlIDEgY2hhciwgYnV0IMARIGNoYXJzIHdlcmUgZm91bmQAEGZsb2F0aW5nIHBvaW50IGDAAWAAAWDABmAgb3IgYMABYAALY2hhcmFjdGVyIGDAAWAACWludGVnZXIgYMABYAAJYm9vbGVhbiBgwAFgAA9taXNzaW5nIGZpZWxkIGDAAWAAEWR1cGxpY2F0ZSBmaWVsZCBgwAFgAAFgwAFgABFzdGFydCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAPZW5kIGJ5dGUgaW5kZXggwCYgaXMgbm90IGEgY2hhciBib3VuZGFyeTsgaXQgaXMgaW5zaWRlIMAIIChieXRlcyDACyBvZiBzdHJpbmcpAMALIChvcyBlcnJvciDAASkABkVycm9yKMAILCBsaW5lOiDACiwgY29sdW1uOiDAASkAVwkQAEwAAACmAAAAMgAAAN0GEABPAAAAwgIAACYAAABIDBAAEwAAAE8AAAAiAAAASAwQABMAAABOAAAAIAAAAEgMEAATAAAAOgAAACAAAABIDBAAEwAAAG8AAAAoAAAAXAwQAG0AAACVAAAADgAAAG1ldGFjaHVua3NTdGFydAA+AAAADAAAAAQAAAA/AAAAQAAAAEEAQYChwAALQQEAAABCAAAAY2FwYWNpdHkgb3ZlcmZsb3cAAABUCxAAUAAAABwAAAAFAAAAQwAAAAwAAAAEAAAARAAAAEUAAABGAEHMocAAC8ECAQAAAEcAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAAugMQAEgAAACPAgAADgAAAGVuZCBvZiByYW5nZSBzaG91bGQgYmUgYSBjaGFyYWN0ZXIgYm91bmRhcnkKCkNhdXNlZCBieToAAAAAABAAAAAEAAAASAAAAEkAAABKAAAACgpTdGFjayBiYWNrdHJhY2U6CgBdAxAAXAAAADYAAAAfAAAAXQMQAFwAAAA8AAAAGwAAAGJhY2t0cmFjZSBjYXB0dXJlIGZhaWxlZHkFEABeAAAAZwQAAA4AAADmAhAATwAAAPwDAAAzAAAAPgAAAAwAAAAEAAAAPwAAAEAAAABLAEGYpMAACzkBAAAAQgAAAMMgAAAoBQACOiAAICAgICAgIAoKU3RhY2s6Cgo+AAAADAAAAAQAAABMAAAATQAAAE4AQdykwAALoQ4BAAAAQgAAAABwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMC4CDBQEMAoEAyYJDAIgBAIGOAEBAgMBAQU4CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsBASwDMAECBAICAgEkAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABEEFAAJNBkYLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJAQEIBAIBXwMCBAYBAgGdAQMIFQI5AgEBAQEMAQkBDgcDBUMBAgYBAQIBAQMEAwEBDgJVCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAghlAQEBAgQBBQAJAQL1AQoEBAGQBAICBAEgCigGAgQIAQkGAgMuDQECxgEBAwEByQcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQMXAQABBg8ADAMDAAU7BwABPwRRAQsCAAIALgIXAAUDBggIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAT+AvMBAgEHAgUBAAdtBwBggPAAAAAAAAAEAAAABAAAAE8AAAAgewosCmVudGl0eSBub3QgZm91bmRwZXJtaXNzaW9uIGRlbmllZGNvbm5lY3Rpb24gcmVmdXNlZGNvbm5lY3Rpb24gcmVzZXRob3N0IHVucmVhY2hhYmxlbmV0d29yayB1bnJlYWNoYWJsZWNvbm5lY3Rpb24gYWJvcnRlZG5vdCBjb25uZWN0ZWRhZGRyZXNzIGluIHVzZWFkZHJlc3Mgbm90IGF2YWlsYWJsZW5ldHdvcmsgZG93bmJyb2tlbiBwaXBlZW50aXR5IGFscmVhZHkgZXhpc3Rzb3BlcmF0aW9uIHdvdWxkIGJsb2Nrbm90IGEgZGlyZWN0b3J5aXMgYSBkaXJlY3RvcnlkaXJlY3Rvcnkgbm90IGVtcHR5cmVhZC1vbmx5IGZpbGVzeXN0ZW0gb3Igc3RvcmFnZSBtZWRpdW1maWxlc3lzdGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVpbnZhbGlkIGlucHV0IHBhcmFtZXRlcmludmFsaWQgZGF0YXRpbWVkIG91dHdyaXRlIHplcm9ubyBzdG9yYWdlIHNwYWNlc2VlayBvbiB1bnNlZWthYmxlIGZpbGVxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUg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V+l78mKNBz2XuxWH+TUEanmHyY61CgZk32IRccK8BhCPpXXkiHfWbGXRGyc1ymumpbf36dOSq/AdQRYfxKG8Hh7GX+4PD1aNsc0RZdMCYWRjo/8Ws7GJSE98HFHcm01QHOky3yiO1AbZyRYOfUlxc+Mgj7Ig2HYFFDsSfC4PgoUFm37qzVnxO1MrHcq+pQGeN6/L7tdH9C/cVRehmIQ0S/lYCb+sbMOMFqsSMC4wYnl0ZSBhcnJheU9wdGlvbiB2YWx1ZW5ld3R5cGUgc3RydWN0c2VxdWVuY2VtYXBlbnVtdW5pdCB2YXJpYW50bmV3dHlwZSB2YXJpYW50dHVwbGUgdmFyaWFudHN0cnVjdCB2YXJpYW50dW5pdHUzMnU2NHVzaXplZjMyYSBib29sZWFuYSBzdHJpbmdleHBsaWNpdCBwYW5pYwAAAPEJEABkAAAAJAkAABIAAABvbmUgb2YgLCAAAAC6CxAAYgAAAAACAAATAAAAugsQAGIAAAAFAgAAMwAAALoLEABiAAAACQIAAD4AAAC6CxAAYgAAAA8CAAA6AAAAPAYQAE8AAAA+BgAAFAAAADwGEABPAAAAPgYAACEAAAA8BhAATwAAADIGAAAUAAAAPAYQAE8AAAAyBgAAIQAAAG51bGxhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbim6CxAAYgAAALMBAAAaAAAAugsQAGIAAACrAQAAPQAAALoLEABiAAAApgEAAEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAEAAgADAAQABQAGAAcACAAJAP//////////////////CgALAAwADQAOAA8A/////////////////////////////////////////////////////////////////////woACwAMAA0ADgAPAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAEAAgADAAQABQAGAAcACAAJAA//////////////////+gALAAwADQAOAA8AD/////////////////////////////////////////////////////////////////////oACwAMAA0ADgAPAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////IGF0IGxpbmUgAAAA2AUQAGMAAAD3AQAAIQAAANgFEABjAAAA+wEAAAwAAADYBRAAYwAAAAICAAAhAAAA2AUQAGMAAAALAgAAKgAAANgFEABjAAAADwIAACwAAADYBRAAYwAAABQCAAAJAAAARU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdFT0Ygd2hpbGUgcGFyc2luZyBhIHZhbHVlZXhwZWN0ZWQgYDpgZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBpZGVudGV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgYCJgaW52YWxpZCBlc2NhcGVpbnZhbGlkIG51bWJlcm51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludGNvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5na2V5IG11c3QgYmUgYSBzdHJpbmdpbnZhbGlkIHZhbHVlOiBleHBlY3RlZCBrZXkgdG8gYmUgYSBudW1iZXIgaW4gcXVvdGVzZmxvYXQga2V5IG11c3QgYmUgZmluaXRlIChnb3QgTmFOIG9yICsvLWluZilsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGV0cmFpbGluZyBjb21tYXRyYWlsaW5nIGNoYXJhY3RlcnN1bmV4cGVjdGVkIGVuZCBvZiBoZXggZXNjYXBlcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkugsQAGIAAABcAgAAEwAAALoLEABiAAAAbgIAABkAAABpbmYtaW5mTmFOAAA+AAAADAAAAAQAAAA/AAAAQAAAAFoAQbSzwQALxwEBAAAAQgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAfwcQAEsAAABxCwAADgAAAEVycm9yAAAAPAYQAE8AAAC/BAAAJAAAAEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkAABgBBAAXgAAAGsAAAANAAAAAAAAAP//////////cFoQAEGItcEAC0XKDBAAZwAAADUAAAAOAAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGEAQdi1wQALBQEAAABoAEHotcEACwUBAAAAaQBB+LXBAAsFAQAAAGoAQYi2wQAL+QQBAAAAawAAAGludGVybmFsIGVy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"));const A=Oh();(typeof B=="string"||typeof Request=="function"&&B instanceof Request||typeof URL=="function"&&B instanceof URL)&&(B=fetch(B));const{instance:I,module:g}=await Ay(await B,A);return $h(I)}var Iy=`precision highp float;\r
11101
+ `))),o.push(`${D.rgb} = rgb;`),o}}).outputs}function EQ(B,A,I,g,Q,C,E){const i=new F.DataArrayTexture(B,A,I,g);return i.format=Q,i.type=C,i.internalFormat=E,i.needsUpdate=!0,i}function ls(B){const A=dA.decode_rad_header(B);if(A[2])throw us(A[1]);return us(A[0])}function vh(){return dA.get_raycast_buffer()}function Vh(){return dA.get_raycast_buffer2()}function Zh(B,A,I,g,Q,C,E,i,D,o){return dA.raycast_ext_buffers(B,A,I,g,Q,C,E,i,D,o)}function Wh(B,A,I,g,Q,C,E,i,D,o,s,t,w){return dA.raycast_packed_buffer(B,A,I,g,Q,C,E,i,D,o,s,t,w)}function jh(){return{__proto__:null,"./spark_rs_bg.js":{__proto__:null,__wbg_Error_2e59b1b37a9a34c3:function(A,I){return Error(ZC(A,I))},__wbg___wbindgen_throw_81fc77679af83bc6:function(A,I){throw new Error(ZC(A,I))},__wbg_error_a6fa202b58aa1cd3:function(A,I){let g,Q;try{g=A,Q=I,console.error(ZC(A,I))}finally{dA.__wbindgen_free(g,Q,1)}},__wbg_length_0c32cb8543c8e4c8:function(A){return A.length},__wbg_length_1e701798fdcaa3b4:function(A){return A.length},__wbg_length_fd4646b401926788:function(A){return A.length},__wbg_new_227d7c05414eb861:function(){return new Error},__wbg_new_4f9fafbb3909af72:function(){return new Object},__wbg_new_f3c9df4f38f3f798:function(){return new Array},__wbg_new_with_length_26bffbe236bf73f9:function(A){return new Float32Array(A>>>0)},__wbg_prototypesetcall_3e05eb9545565046:function(A,I,g){Uint8Array.prototype.set.call(_h(A,I),g)},__wbg_prototypesetcall_e42275e601e14eeb:function(A,I,g){Uint32Array.prototype.set.call(xs(A,I),g)},__wbg_set_6be42768c690e380:function(A,I,g){A[I]=g},__wbg_set_6c60b2e8ad0e9383:function(A,I,g){A[I>>>0]=g},__wbg_set_8ee2d34facb8466e:function(){return Iy(function(A,I,g){return Reflect.set(A,I,g)},arguments)},__wbg_set_a98c8da6557e63de:function(A,I,g){A.set(fs(I,g))},__wbg_stack_3b0d974bbf31e44f:function(A,I){const g=I.stack,Q=gy(g,dA.__wbindgen_malloc,dA.__wbindgen_realloc),C=ND;ps().setInt32(A+4,C,!0),ps().setInt32(A+0,Q,!0)},__wbg_subarray_d51e89458b3fdbf6:function(A,I,g){return A.subarray(I>>>0,g>>>0)},__wbindgen_cast_0000000000000001:function(A){return A},__wbindgen_cast_0000000000000002:function(A,I){return fs(A,I)},__wbindgen_cast_0000000000000003:function(A,I){return xs(A,I)},__wbindgen_cast_0000000000000004:function(A,I){return ZC(A,I)},__wbindgen_cast_0000000000000005:function(A){return BigInt.asUintN(64,A)},__wbindgen_init_externref_table:function(){const A=dA.__wbindgen_externrefs,I=A.grow(4);A.set(0,void 0),A.set(I+0,void 0),A.set(I+1,null),A.set(I+2,!0),A.set(I+3,!1)}}}}function zh(B){const A=dA.__externref_table_alloc();return dA.__wbindgen_externrefs.set(A,B),A}function fs(B,A){return B=B>>>0,$h().subarray(B/4,B/4+A)}function xs(B,A){return B=B>>>0,Ay().subarray(B/4,B/4+A)}function _h(B,A){return B=B>>>0,pB().subarray(B/1,B/1+A)}let iQ=null;function ps(){return(iQ===null||iQ.buffer.detached===!0||iQ.buffer.detached===void 0&&iQ.buffer!==dA.memory.buffer)&&(iQ=new DataView(dA.memory.buffer)),iQ}let NB=null;function $h(){return(NB===null||NB.byteLength===0)&&(NB=new Float32Array(dA.memory.buffer)),NB}function ZC(B,A){return B=B>>>0,By(B,A)}let JB=null;function Ay(){return(JB===null||JB.byteLength===0)&&(JB=new Uint32Array(dA.memory.buffer)),JB}let UB=null;function pB(){return(UB===null||UB.byteLength===0)&&(UB=new Uint8Array(dA.memory.buffer)),UB}function Iy(B,A){try{return B.apply(this,A)}catch(I){const g=zh(I);dA.__wbindgen_exn_store(g)}}function gy(B,A,I){if(I===void 0){const i=uB.encode(B),D=A(i.length,1)>>>0;return pB().subarray(D,D+i.length).set(i),ND=i.length,D}let g=B.length,Q=A(g,1)>>>0;const C=pB();let E=0;for(;E<g;E++){const i=B.charCodeAt(E);if(i>127)break;C[Q+E]=i}if(E!==g){E!==0&&(B=B.slice(E)),Q=I(Q,g,g=E+B.length*3,1)>>>0;const i=pB().subarray(Q+E,Q+g),D=uB.encodeInto(B,i);E+=D.written,Q=I(Q,g,E,1)>>>0}return ND=E,Q}function us(B){const A=dA.__wbindgen_externrefs.get(B);return dA.__externref_table_dealloc(B),A}let GE=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});GE.decode();const Qy=2146435072;let ui=0;function By(B,A){return ui+=A,ui>=Qy&&(GE=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),GE.decode(),ui=A),GE.decode(pB().subarray(B,B+A))}const uB=new TextEncoder;"encodeInto"in uB||(uB.encodeInto=function(B,A){const I=uB.encode(B);return A.set(I),{read:B.length,written:I.length}});let ND=0,dA;function Cy(B,A){return dA=B.exports,iQ=null,NB=null,JB=null,UB=null,dA.__wbindgen_start(),dA}async function Ey(B,A){if(typeof Response=="function"&&B instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(B,A)}catch(Q){if(B.ok&&I(B.type)&&B.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",Q);else throw Q}const g=await B.arrayBuffer();return await WebAssembly.instantiate(g,A)}else{const g=await WebAssembly.instantiate(B,A);return g instanceof WebAssembly.Instance?{instance:g,module:B}:g}function I(g){switch(g){case"basic":case"cors":case"default":return!0}return!1}}async function ia(B){if(dA!==void 0)return dA;B!==void 0&&(Object.getPrototypeOf(B)===Object.prototype?{module_or_path:B}=B:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),B===void 0&&(B=new URL("data:application/wasm;base64,AGFzbQEAAAABhQM1YAN/f38Bf2ACf38Bf2ACf38AYAN/f38AYAF/AGABfwF/YAV/f39/fwBgBH9/f38AYAAAYAABb2AEf39/fwF/YAZ/f39/f38AYAJ/fwFvYAFvAX9gAX0BfWAFf39/fn8AYAABf2AFf39/f38Bf2ADf39vAGAGf39/f39/AX9gB39/f39/f38AYAV/f35/fwBgBX9/fH9/AGAFf399f38AYAADf39/YANvb28AYANvf28AYANvb28Bf2ADb39/AW9gAX8Bb2ADb39/AGACf28AYAF8AW9gAX4Bb2AJf39/f399fX1/AGAHf39/fX9/fwBgB39/f39/f38Bf2ACfn8AYAJ/fgBgAn9+AX9gA39+fgBgBn9/f35/fwBgBn9/f3x/fwBgBn9/f31/fwBgBH9+fn8AYA59fX19fX19fX1/b319fwFvYA19fX19fX19fX1/fX1/AW9gAW8Df39/YAp9fX19fX19fX1/AW9gBH9+f38AYAR/fX9/AGAEf3x/fwBgAXwBfwK7CRgQLi9zcGFya19yc19iZy5qcxpfX3diZ19uZXdfNGY5ZmFmYmIzOTA5YWY3MgAJEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzZiZTQyNzY4YzY5MGUzODAAGRAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8wYzMyY2I4NTQzYzhlNGM4AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsXzNlMDVlYjk1NDU1NjUwNDYAEhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld19mM2M5ZGY0ZjM4ZjNmNzk4AAkQLi9zcGFya19yc19iZy5qcxpfX3diZ19zZXRfNmM2MGIyZThhZDBlOTM4MwAaEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzhlZTJkMzRmYWNiODQ2NmUAGxAuL3NwYXJrX3JzX2JnLmpzH19fd2JnX3N1YmFycmF5X2Q1MWU4OTQ1OGIzZmRiZjYAHBAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8xZTcwMTc5OGZkY2FhM2I0AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsX2U0MjI3NWU2MDFlMTRlZWIAEhAuL3NwYXJrX3JzX2JnLmpzJl9fd2JnX25ld193aXRoX2xlbmd0aF8yNmJmZmJlMjM2YmY3M2Y5AB0QLi9zcGFya19yc19iZy5qcx1fX3diZ19sZW5ndGhfZmQ0NjQ2YjQwMTkyNjc4OAANEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0X2E5OGM4ZGE2NTU3ZTYzZGUAHhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld18yMjdkN2MwNTQxNGViODYxAAkQLi9zcGFya19yc19iZy5qcxxfX3diZ19zdGFja18zYjBkOTc0YmJmMzFlNDRmAB8QLi9zcGFya19yc19iZy5qcxxfX3diZ19lcnJvcl9hNmZhMjAyYjU4YWExY2QzAAIQLi9zcGFya19yc19iZy5qcxxfX3diZ19FcnJvcl8yZTU5YjFiMzdhOWEzNGMzAAwQLi9zcGFya19yc19iZy5qcydfX3diZ19fX3diaW5kZ2VuX3Rocm93XzgxZmM3NzY3OWFmODNiYzYAAhAuL3NwYXJrX3JzX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAxACAQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMgAMEC4vc3BhcmtfcnNfYmcuanMgX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDMADBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA0AAwQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNQAhA5oCmAIFAAIBAQIFAQEGIgcAAwUBAAICDg4EBQUCCgEAACMDAQUkBQUCAgICBAIDAwACAAoFCAETAhQCAQIOBRQPAQUCAAUEDwEDAiUDAQIFAgUEBQEBBwEBAhAHAQUBAQUBDwEBAQEBJgYBCwYCCwQBBQInBAIBAgsDAQICAQMDBQECASgCBAcBBAQABgQEAgAAAAMBCwQEBgIGAgIGBykLKissAAAGAwcBAAIBAAMDAwMBAQIBAwMB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AWogATYCAAsgAkEIag8LQQAhAEHc58EAKAIAIgEgBU0NAEHc58EAIAEgBWsiATYCAEHk58EAQeTnwQAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQMAQsgAA8LIABBCGoL4RcCGX8CfCMAQbAEayIDJAAgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANCADcDaCADQgA3A2AgA0IANwNYIANCADcDUCADQgA3A0ggA0IANwNAIANCADcDOCADQgA3AzAgA0IANwMoIANCADcDICADQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgA0IANwO4AiADQgA3A7ACIANCADcDqAIgA0IANwOgAiADQgA3A5gCIANCADcDkAIgA0IANwOIAiADQgA3A4ACIANCADcD+AEgA0IANwPwASADQgA3A+gBIANCADcD4AEgA0IANwPYASADQgA3A9ABIANCADcDyAEgA0IANwPAASADQgA3A7gBIANCADcDsAEgA0IANwOoASADQgA3A6ABIANCADcD2AMgA0IANwPQAyADQgA3A8gDIANCADcDwAMgA0IANwO4AyADQgA3A7ADIANCADcDqAMgA0IANwOgAyADQgA3A5gDIANCADcDkAMgA0IANwOIAyADQgA3A4ADIANCADcD+AIgA0IANwPwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3A9ACIANCADcDyAIgA0IANwPAAiADQeADakEAQdAA/AsAQfTgwQAoAgAiCSEGIAJBA2tBGG0iBUEAIAVBAEobIgshBSALQQJ0QYThwQBqIQcDQCADIARBA3RqIAVBAEgEfEQAAAAAAAAAAAUgBygCALcLOQMAIAQgBkkiCgRAIAdBBGohByAFQQFqIQUgBCAKaiIEIAZNDQELC0EAIQUDQEEAIQQgA0HAAmogBUEDdGogHCAAIARBA3RqKwMAIAMgBSAEa0EDdGorAwCioDkDACAFIAlJIgQEQCAEIAVqIgUgCU0NAQsLRAAAAAAAAPB/RAAAAAAAAOB/IAIgC0FobGoiCkEYayIGQf4PSyIPG0QAAAAAAAAAAEQAAAAAAABgAyAGQblwSSIQG0QAAAAAAADwPyAGQYJ4SCIRGyAGQf8HSiISG0H9FyAGIAZB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AgQoAgwRAAAMDAsgASgCAEHXosEAQQMgASgCBCgCDBEAAAwLCyABKAIAQdqiwQBBBCABKAIEKAIMEQAADAoLIAEoAgBB3qLBAEEMIAEoAgQoAgwRAAAMCQsgASgCAEHqosEAQQ8gASgCBCgCDBEAAAwICyABKAIAQfmiwQBBDSABKAIEKAIMEQAADAcLIAEoAgBBhqPBAEEOIAEoAgQoAgwRAAAMBgsgASgCACAAKAIEIAAoAgggASgCBCgCDBEAAAwFCyAAKQMIIgpC/////////weDIQsgCkL///////////8Ag0L/////////9/8AWARAIApCNIinIQAgCkIAUw0CIAJBsAJqDAMLQYizwQBBi7PBACAKQgBZIgAbQY+zwQAgC1AiBBshA0EDQQQgABtBAyAEGyEADAMLIAEoAgBB5KTBAEEEIAEoAgQoAgwRAAAMAwsgAkEtOgCwAkEBIQggAkGxAmoLIQYCfwJAAkACQCAAQf8PcSIARSALUHFFBEAgAEECSSALQgBSciEDIAtCgICAgICAgAiEIAsgABsiC0IChiEKIAtCAYMhDwJAAkAgAEG1CGtBzHcgABsiAEEASARAIAJBkAJqQejOwAAgACAAQYWiU2xBFHYgAEF/R2siAGoiB0EEdCIEaykDACILIApCAoQiDBCYASACQYACakHwzsAAIARrKQMAIg0gDBCYASACQfABaiACKQOYAiIMIAIpA4ACfCIOIAIpA4gCIAwgDlatfCAAIAdBsdm1H2xBE3ZrQfwAakH/AHFBwABzIgQQtwEgAkGwAWogCyAKIANBf3OsfCIMEJgBIAJBoAFqIA0gDBCYASACQZABaiACKQO4ASIMIAIpA6ABfCIOIAIpA6gBIAwgDlatfCAEELcBIAJB4AFqIAsgChCYASACQdABaiANIAoQmAEgAkHAAWogAikD6AEiCyACKQPQAXwiDSACKQPYASALIA1WrXwgBBC3ASACKQPAASELIAIpA5ABIQwgAikD8AEhDiAAQQJJDQEgAEE/TyAKQn8gAK2GQn+Fg0IAUnINBkEBIQVBACEEDAULIAJBgAFqIABBwegEbEESdiAAQQNLayIHQQR0IgQpA8j3QCILIApCAoQiDRCYASACQfAAaiAEQdD3wABqKQMAIgwgDRCYASACQeAAaiACKQOIASIOIAIpA3B8IhAg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ABggBEH/AXFFDQYgASADQQFqNgIUIAJBAToAqAEgAiABNgKkASACQeQAaiACQaQBahBMAkACfyACLQBkQQFGBEAgAigCaAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAi0AZUEBRgRAIAJB5ABqIAIoAqQBED4gAigCZCIEQQJGBEAgAigCaAwQCyACKAJoIQYgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwQCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgVBAkcNASACKAJoDA8LQQBB/LrBABCoAQwOCyACKgJoIRAgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwOCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgdBAkcNASACKAJoDA0LQQFB/LrBABCoAQwMCyACKgJoIREgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwMCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIghBAkcNASACKAJoDAsLQQJB/LrBABCoAQwKCyACKgJoIRIgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwKCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIglBAkcNASACKAJoDAkLQQNB/LrBABCoAQwICyACKgJoIRMgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwICyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgpBAkcNASACKAJoDAcLQQRB/LrBABCoAQwGCyACKgJoIRQgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwGCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgtBAkcNASACKAJoDAULQQVB/LrBABCoAQwECyACKgJoIRUgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwECyACLQBlQQFHDQIgAkHkAGogAigCpAEQKiACLQBkQQFHDQEgAigCaAwDC0EGQfy6wQAQqAEMAgsgAi0AZSEMDAILQQdB/LrBABCoAQshBkECIQQLIAEgAS0AGEEBajoAGCACIAEQViIDNgKgASACIAw6AJwBIAIgFTgCmAEgAiALNgKUASACIBQ4ApABIAIgCjYCjAEgAiATOAKIASACIAk2AoQBIAIgEjgCgAEgAiAINgJ8IAIgETgCeCACIAc2AnQgAiAQOAJwIAIgBTYCbCACIAY2AmggAiAENgJkQQIhBSAEQQJHBEAgAw0GIAIgAkHsAGoiAygCMDYCYCACIAP9AAIg/QsDUCACIAP9AAIQ/QsDQCACIAP9AAIA/QsDMCAGIQMgBCEFDAYLIAMNAgwECyABIAEtABhBAWsiBDoAGCAEQf8BcUUNAiABIANBAWo2AhQgAkEBOgCoASACIAE2AqQBQf8BIQtBAiEOQQIhDUECIQpBAiEIQQIhBkECIQlBAiEHAn8DQAJAIAJB5ABqIAJBpAFqEEEgAi0AZEEBRgRAIAIoAmghBAwBCwJAAkACQAJAAkACQAJAAkACQCACLQBlQQFGBEAgAigCpAEiA0EANgIIIAMgAygCFEEBajYCFCACQeQAaiADQQxqIAMQJSACKAJoIQQgAigCZEECRg0KAkACQAJAIAIoAmxBBmsOBQAMDAwBDAsgBCgAAEHyzonrBHMiDyAEQQRqIgUvAABB6dwBc3JFDQMgBS8AAEHh8AFzIA9yDQEgCUECRg0EQbq5wQBBBhDGASEEQQIMDgsgBCkAAELs3M2alozbss0AhSIWIARBCGoiBTMAAELp3AGFhFANBCAFMwAAQuHwAYUgFoRQDQUgBCkAAELs3pH7hK7YsekAhSAFMwAAQvTyAYWEUEUNCiALQf8BcUH/AUYNCUHmucEAQQoQxgEhBEECDA0LIAUvAABB4fABcyIPIAQoAABB89DF6QRzckUNBSAPIAQoAABB89DJ6QRzckUNBiAPIAQoAABB89DN6QRzcg0JIA5BAkYNB0HgucEAQQYQxgEhBEECDAwLIA5BACAOQQJHGyEFIA1BACANQQJHGyENIApBACAKQQJHGyEKIAhBACAIQQJHGyEIIAZBACAGQQJHGyEGIAlBACAJQQJHGyEJQQIgCyALQf8BcUH/AUYbIQsgDCEEIAdBACAHQQJHGwwLCyAHQQJHBEBBtLnBAEEGEMYBIQRBAgwLCyADEIUBIgQNCCACQeQAaiADED4gAigCZCIHQQJGBEAgAigCaCEEDAkLIAIoAmghDAwJCyADEIUBIgQNByACQeQAaiADED4gAigCZCIJQQJGBEAgAigCaCEEDAgLIAIqAmghEgwICyAGQQJHBEBBwLnBAEEKEMYBIQRBAgwJCyADEIUBIgQNBiACQeQAaiADED4gAigCZCIGQQJGBEAgAigCaCEEDAcLIAIqAmghEAwHCyAIQQJHBEBByrnBAEEKEMYBIQRBAgwICyADEIUBIgQNBSACQeQAaiADED4gAigCZCIIQQJGBEAgAigCaCEEDAYLIAIqAmghEQwGCyAKQQJHBEBB1LnBAEEGEMYBIQRBAgwHCyADEIUBIgQNBCACQeQAaiADED4gAigCZCIKQQJGBEAgAigCaCEEDAULIAIqAmghEwwFCyANQQJHBEBB2rnBAEEGEMYBIQRBAgwGCyADEIUBIgQNAyACQeQAaiADED4gAigCZCINQQJGBEAgAigCaCEEDAQLIAIqAmghFAwECyADEIUBIgQNAiACQeQAaiADED4gAigCZCIOQQJGBEAgAigCaCEEDAMLIAIqAmghFQwDCyADEIUBIgQNASACQeQAaiADECogAi0AZEEBRgRAIAIoAmghBAwCCyACLQBlIQsMAgsgAxAeIgRFDQELC0ECCyEHIAEgAS0AGEEBajoAGCACIAEQdCIDNgKgASACIAs6AJwBIAIgFTgCmAEgAiAFNgKUASACIBQ4ApABIAIgDTYCjAEgAiATOAKIASACIAo2AoQBIAIgETgCgAEgAiAINgJ8IAIgEDgCeCACIAY2AnQgAiASOAJwIAIgCTYCbCACIAQ2AmggAiAHNgJkQQIhBSAHQQJHBEAgAw0FIAIgAkHsAGoiAygCMDYCYCACIAP9AAIg/QsDUCACIAP9AAIQ/QsDQCACIAP9AAIA/QsDMCAEIQMgByEFDAULIANFBEAgBCEDDAULIAJBoAFqEFogBCEDDAQLIAEgA0EBaiIENgIUAn8CQCAEIAVPDQAgASADQQJqIgc2AhQCQAJAIAQgBmotAABB9QBHDQAgByAEIAUgBCAFSxsiBEYNAiABIANBA2oiDDYCFCAGIAdqLQAAQewARwRAIAwhBwwBCyAEIAxGDQIgASADQQRqIgc2AhQgBiAMai0AAEHsAEYNAQsgAkEJNgJkIAJBKGogBiAFIAcQIyACQeQAaiACKAIoIAIoAiwQ0AEMAgsgAEECNgIADAgLIAJBBTYCZCACQSBqIAYgBSAEECMgAkHkAGogAigCICACKAIkENABCyEDIABBfzYCACAAIAM2AgQMBgsgAkGgAWoQWgwBCyACQRg2AmQgAkEQaiAGIAUgA0EBaiIBIAUgASAFSRsQIyACQeQAaiACKAIQIAIoAhQQ0AEMAwsgBiEDCyAFQQJGBEAgAyABEI4BDAILIAAgAigCYDYCOCAAIAL9AANQ/QsCKCAAIAL9AANA/QsCGCAAIAL9AAMw/QsCCCAAIAM2AgQgACAFNgIADAILIAJBGDYCZCACQQhqIAYgBSADQQFqIgEgBSABIAVJGxAjIAJB5ABqIAIoAgggAigCDBDQAQshAyAAQX82AgAgACADNgIECyACQbABaiQAC5oYAQt/IwBBgAFrIgMkAAJAIAAQhQEiAQ0AIABBADYCCCAAQQxqIQsCQCAAKAIUIgEgACgCECICTwRAIAsoAgAhBwwBCyAAKAIMIQcDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEgB2otAAAiBUEJaw4lAQEICAEICAgICAgICAgICAgICAgICAgBCAcICAgICAgICAgIBQALIAVB2wBrDiEFBwcHBwcHBwcHBwMHBwcHBwcHAQcHBwcHAgcHBwcHBwUHCyAAIAFBAWoiATYCFCABIAJHDQ4gAiEBDA8LIAAgAUEBaiIFNgIUIAIgBU0NByAAIAFBAmoiBDYCFAJAIAUgB2otAABB9QBHDQAgBCAFIAIgAiAFSRsiBUYNCCAAIAFBA2oiBjYCFCAEIAdqLQAAQewARwRAIAYhBAwBCyAFIAZGDQggACABQQRqIgQ2AhQgBiAHai0AAEHsAEYNDAsgA0EJNgJ0IANByABqIAcgAiAEECMgA0H0AGogAygCSCADKAJMENABIQEMDwsgACABQQFqIgU2AhQgAiAFTQ0HIAAgAUECaiIENgIUAkAgBSAHai0AAEHyAEcNACAEIAUgAiACIAVJGyIFRg0IIAAgAUEDaiIGNgIUIAQgB2otAABB9QBHBEAgBiEEDAELIAUgBkYNCCAAIAFBBGoiBDYCFCAGIAdqLQAAQeUARg0LCyADQQk2AnQgA0HYAGogByACIAQQIyADQfQAaiADKAJYIAMoAlwQ0AEhAQwOCyAAIAFBAWoiBTYCFCACIAVNDQcgACABQQJqIgQ2AhQCQCAFIAdqLQAAQeEARw0AIAQgBSACIAIgBUkbIgVGDQggACABQQNqIgY2AhQgBCAHai0AAEHsAEcEQCAGIQQMAQsgBSAGRg0IIAAgAUEEaiIINgIUIAYgB2otAABB8wBHBEAgCCEEDAELIAUgCEYNCCAAIAFBBWoiBDYCFCAHIAhqLQAAQeUARg0KCyADQQk2AnQgA0HoAGogByACIAQQIyADQfQAaiADKAJoIAMoAmwQ0AEhAQwNCyAAIAFBAWo2AhQMAwsgCkEBcSICIAAoAgAgACgCCCIBa0sEQCMAQRBrIgQkACACIAEgAmoiAUsEQEEAQQAQ5AEACyAEQQRqIAAoAgAiBiAAKAIEQQggASAGQQF0IgYgASAGSxsiASABQQhNGyIBQQFBARCMASAEKAIEQQFGBEAgBCgCCCAEKAIMEOQBAAsgBCgCCCEGIAAgATYCACAAIAY2AgQgBEEQaiQAIAAoAgghAQsgACACBH8gACgCBCABaiAJOgAAIAFBAWoFIAELNgIIIAAgACgCFEEBajYCFEEAIQQMCAsgACABQQFqNgIUIAsQUiIBDQoMBgsgBUEwa0H/AXFBCk8NBAsjAEEwayIFJAAgACgCDCEIAkACQAJAAkAgACgCFCIBIAAoAhAiBkkEQCAAIAFBAWoiBDYCFCABIAhqLQAAIgJBMEYNAiACQTFrQf8BcUEITQ0BIAQhAQsgBUENNgIkIAVBGGogCCAGIAEQIyAFQSRqIAUoAhggBSgCHBDQASEBDAMLIAQgBk8NAQNAIAQgCGotAABBMGtB/wFxQQlLDQIgACAEQQFqIgQ2AhQgBCAGRw0AC0EAIQEMAgsgBCAGTw0AIAQgCGotAABBMGtB/wFxQQlLDQAgBUENNgIkIAVBCGogCCAGIAFBAmoiBCAGIAQgBkkbECMgBUEkaiAFKAIIIAUoAgwQ0AEhAQwBC0EAIQEgBCAGTw0AAkACQCAEIAhqLQAAIgJB5QBGIAJBxQBGckUEQCACQS5HDQMgACAEQQFqIgI2AhQgAiAGTw0CIAIgCGotAABBMGtB/wFxQQlLDQIgBEECaiEEA0AgBiAEIgJGDQIgAkEBaiEEIAIgCGotAAAiB0Ewa0H/AXFBCkkNAAsgACACNgIUIAdBIHJB5QBHDQMLIwBBIGsiAiQAIAAgACgCFCIBQQFqIgQ2AhQgACgCDCEGAkAgBCAAKAIQIghPDQACQCAEIAZqLQAAQStrDgMAAQABCyAAIAFBAmoiBDYCFAsCQAJAIAQgCEkEQCAAIARBAWoiATYCFCAEIAZqLQAAQTBrQf8BcUEJTQ0BIAEhBAsgAkENNgIUIAJBCGogBiAIIAQQIyACQRRqIAIoAgggAigCDBDQASEEDAELQQAhBCABIAhPDQADQCABIAZqLQAAQTBrQf8BcUEJSw0BIAAgAUEBaiIBNgIUIAEgCEcNAAsLIAJBIGokACAEIQEMAgsgACAGNgIUDAELIAVBDTYCJCAFQRBqIAggBiAEQQJqIgQgBiAEIAZJGxAjIAVBJGogBSgCECAFKAIUENABIQELIAVBMGokACABRQ0EDAgLIANBBTYCdCADQUBrIAcgAiAFECMgA0H0AGogAygCQCADKAJEENABIQEMBwsgA0EFNgJ0IANB0ABqIAcgAiAFECMgA0H0AGogAygCUCADKAJUENABIQEMBgsgA0EFNgJ0IANB4ABqIAcgAiAFECMgA0H0AGogAygCYCADKAJkENABIQEMBQsgA0EKNgJ0IANBOGogByACIAFBAWoiACACIAAgAkkbECMgA0H0AGogAygCOCADKAI8ENABIQEMBAtBASEEIApBAXEEQCAJIQUMAQsgACgCCCIBRQRAQQAhAQwECyAAIAFBAWsiATYCCCAAKAIEIAFqLQAAIQULAkAgAwJ/AkACQAJAAkAgACgCFCIBIAAoAhAiAk8EQCAFIQkMAQsgACgCBCEGIAAoAgwhByAAKAAIIQogBSEJA0ACQAJAAkACQAJAAkAgASAHai0AACIFQQlrDiQBAQgIAQgICAgICAgICAgICAgICAgICAEICAgICAgICAgICAIACyAFQd0ARg0CIAVB/QBGDQMMBwsgACABQQFqIgE2AhQgASACRw0EIAIhAQwFCyAEQQFxRQ0GIAAgAUEBaiIBNgIUDAYLIAlB/wFxQdsARw0EDAELIAlB/wFxQfsARw0DCyAAIAFBAWoiATYCFCAKRQRAQQAhAQwKCyAAIApBAWsiCjYCCCAGIApqLQAAIQlBASEEIAEgAkkNAAsLAkAgAyAJQf8BcSIAQdsARwR/IABB+wBHDQFBAwVBAgs2AnQgA0EwaiALKAIAIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIwIAMoAjQQ0AEhAQwIC0GQtsEAQShB0LzBABDqAQALIARBAXFFDQBBByAJQf8BcSIAQdsARg0CGiAAQfsARg0BQZC2wQBBKEHgvMEAEOoBAAsgCUH/AXFB+wBHDQIgASACSQRAA0ACQAJAIAEgB2otAABBCWsiBEEZSw0AQQEgBHRBk4CABHENASAEQRlHDQAgACABQQFqNgIUIAsQUiIBDQkgACgCDCEHAkACQCAAKAIUIgEgACgCECICSQRAA0ACQCABIAdqLQAAQQlrDjIAAAMDAAMDAwMDAwMDAwMDAwMDAwMDAwADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBAMLIAAgAUEBaiIBNgIUIAEgAkcNAAsgAiEBCyADQQM2AnQgA0EgaiAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIgIAMoAiQQ0AEhAQwLCyADQQY2AnQgA0EYaiAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIYIAMoAhwQ0AEhAQwKCyAAIAFBAWoiATYCFAwGCyADQRE2AnQgA0EIaiAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIIIAMoAgwQ0AEhAQwICyAAIAFBAWoiATYCFCABIAJHDQALIAIhAQsgA0EDNgJ0IANBEGogByACIAFBAWoiACACIAAgAkkbECMgA0H0AGogAygCECADKAIUENABIQEMBQtBCAs2AnQgAyAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIAIAMoAgQQ0AEhAQwDC0EBIQogASACSQ0ACwsgA0EFNgJ0IANBKGogByACIAFBAWoiACACIAAgAkkbECMgA0H0AGogAygCKCADKAIsENABIQELIANBgAFqJAAgAQv+DwMHfwF+AXsjAEEwayIDJAACQAJAIAAoAgAiBkUEQCAAKAIQIgBFDQEgAEHhwsAAQQEQRCEEDAILIAAgACgCDEEBaiIENgIMAkACQAJAAkACQAJAAkACQCAEQfUDTwRAIAAoAhAiAUUNASABQcjCwABBGRBERQ0BDAgLAkACQAJAAkAgACgCCCICIAAoAgQiCE8EQCAAKAIQIgFFDQEgAUG4wsAAQRAQRA0MDAELQQEhBCAAIAJBAWoiBzYCCAJAAkACQAJAAkACQCACIAZqLQAAIgVByQBrDgYCAQEBCAUACwJAIAVBwgBrDgIDBAALIAVB2ABrDgIHCwALIAAoAhAiAUUNBCABQbjCwABBEBBERQ0EDBELIAAgARAfDRAgAQ0GDAwLIwBBIGsiAiQAAkACQCAAKAIARQRAIAAoAhAiAUUNASABQeHCwABBARBEIQEMAgsgAiAAEI8BIAIoAgBFBEAgACgCECIFBEBBASEBIAVByMLAAEG4wsAAIAItAARBAXEiBRtBGUEQIAUbEEQNAwsgACAC/QACAP0LAgAMAQsgACgCEEUNACAA/QACACEKIAAgAv0AAgD9CwIAIAIgCv0LAxAgACABQQFxEB8hASAAIAL9AAMQ/QsCAAwBC0EAIQELIAJBIGokACABRQ0MDA8LIANBIGogAEHzABCNASADLQAgQQFGBEAgAy0AISEBIAAoAhAiAgRAIAJByMLAAEG4wsAAIAFBAXEiAhtBGUEQIAIbEEQNEAsgACABOgAEDAoLIAAoAgBFBEAgACgCECIARQ0OIABB4cLAAEEBEEQhBAwPCyADKQMoIQkgA0EgaiAAED8gAygCIEUEQCADLQAkIQEgACgCECICBEAgAkHIwsAAQbjCwAAgAUEBcSICG0EZQRAgAhsQRA0QCyAAIAE6AAQMCgsgAyAD/QACIP0LAwAgACgCECIBRQ0LIAMgARAnDQwgACgCECIBRSAJUHINCyABKAIIQYCAgARxDQsgASgCAEHIxsAAQQEgASgCBCgCDBEAAA0OIAAoAhAjAEEQayICJABBESEBA0AgASACakECayAJp0EPcS0AjMRAOgAAIAFBAWshASAJQgSIIglCAFINAAtBAUGOx8AAQQIgASACakEBa0ERIAFrEEsgAkEQaiQADQ4gACgCECIBKAIAQcnGwABBASABKAIEKAIMEQAADQ4MCwsgByAISQRAIAAgAkECajYCCCAGIAdqLQAAIgJBwQBrQf8BcUEaSQ0CIAJB4QBrQX8hAkH/AXFBGkkNAgsgACgCECIBRQ0AIAFBuMLAAEEQEEQNCwtBACEEIABBADoABCAAQQA2AgAMDAtBASEEIAAgARAfDQsCQCAAKAIADQAgACgCECIBRQ0LIAFBysbAAEECEEQNDCAAKAIADQBBACEEIAAoAhAiAEUNDCAAQeHCwABBARBEIQQMDAsgA0EgaiAAQfMAEI0BIAMtACBBAUYEQCADLQAhIQEgACgCECICBEAgAkHIwsAAQbjCwAAgAUEBcSICG0EZQRAgAhsQRA0NCyAAIAE6AAQMBwsgACgCAEUEQCAAKAIQIgBFDQsgAEHhwsAAQQEQRCEEDAwLIAMpAyghCSADQSBqIAAQPyADKAIgRQRAIAMtACQhASAAKAIQIgIEQCACQcjCwABBuMLAACABQQFxIgIbQRlBECACGxBEDQ0LIAAgAToABAwHCyADIAP9AAIg/QsDEAJAAkACQCACQX9HBEAgACgCECIBBEAgAUHMxsAAQQMQRA0OCyACQcMARg0BIAJB0wBGDQIgAyACNgIgIAAoAhAiAUUNAyADQSBqIAEQeg0NDAMLIAMoAhQgAygCHHJFDQsgACgCECIBRQ0LIAFBysbAAEECEEQNDiAAKAIQIgFFDQsgA0EQaiABECdFDQsMDgsgACgCECIBRQ0BIAFBz8bAAEEHEEQNCwwBCyAAKAIQIgFFDQAgAUHWxsAAQQQQRA0KCyAAKAIQIQIgAygCFCADKAIcckUNBSACRQ0IIAJB2sbAAEEBEEQNCyAAKAIQIgFFDQggA0EQaiABECcNCyAAKAIQIQIMBQsgA0EgaiAAQfMAEI0BIAMtACBBAUcNAiADLQAhIQEgACgCECICBEAgAkHIwsAAQbjCwAAgAUEBcSICG0EZQRAgAhsQRA0LCyAAIAE6AAQMBQsgACgCECIBRQ0FIAFBysbAAEECEERFDQUMCQsgAEEBOgAEDAMLIwBBEGsiASQAIAAoAhAhAiAAQQA2AhAgAEEAEB8EQEH0wsAAQT0gAUEPakHkwsAAQbTDwAAQrgEACyAAIAI2AhAgAUEQaiQACyAAKAIQIgEEQCABQdzGwABBARBEDQcLIAAQJg0EIAVBzQBHBEAgACgCECIBBEAgAUHdxsAAQQQQRA0GCyAAQQAQHw0HCyAAKAIQIgFFDQMgAUHhxsAAQQEQREUNAwwGCyACRQ0CIAJB28bAAEEBEEQNBSAAKAIQIQEgAyAJNwMgIAFFDQIgA0EgaiABEHMNBSAAKAIQIgFFDQIgAUGVxcAAQQEQREUNAgwFC0EAIQQgAEEANgIADAQLIAAoAhAiAQRAIAFB3MbAAEEBEEQNBAsgABBnDQMgACgCECIBRQ0AIAFB4cbAAEEBEEQNAwtBACEEIAAoAgBFDQIgACAAKAIMQQFrNgIMDAILQQEhBAwBC0EAIQQLIANBMGokACAEC4YYAwd/AX4BeyMAQSBrIgUkAAJAAkAgACgCACIHRQRAIAAoAhAiAEUNASAAQeHCwABBARBEIQIMAgsCQAJAAkACQAJAIAAoAggiAiAAKAIEIgZPBEAgACgCECIBRQ0BIAFBuMLAAEEQEERFDQEMBQsgACACQQFqIgQ2AgggAiAHai0AACEDIAAgACgCDEEBaiIINgIMAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAhB9ANNBEACQCADQdEAaw4pDAsCEAIRAgICAgICAgICAgUICQIKAgIEBQQCBQQFBAMCAgUEAgICBQQACyADQcEAaw4CDgUBCyAAKAIQIgEEQCABQcjCwABBGRBEDRcLIABBAToABAwTCyAAKAIQIgFFDREgAUG4wsAAQRAQRA0VDBELIAAoAhAiAUUNE0EBIQIgAUH7xsAAQQEQREUNEwwWCyAAIAMQcA0TDBILIAQgBk8NECAEIAdqLQAAQe4ARg0BDBALIwBBIGsiAiQAAkACQCAAKAIARQRAIAAoAhAiAUUNASABQeHCwABBARBEIQEMAgsgAiAAEI8BIAIoAgBFBEAgACgCECIDBEBBASEBIANByMLAAEG4wsAAIAItAARBAXEiAxtBGUEQIAMbEEQNAwsgACAC/QACAP0LAgAMAQsgACgCEEUNACAA/QACACEKIAAgAv0AAgD9CwIAIAIgCv0LAxAgACABQQFxECAhASAAIAL9AAMQ/QsCAAwBC0EAIQELIAJBIGokACABDREMEAsgACACQQJqNgIIIAAoAhAiAUUNDkEBIQIgAUH+xMAAQQEQREUNDgwSCyAFQRhqIAAQgQEgBSgCGCIBRQRAIAUtABwhASAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0TCyAAIAE6AAQMDQsgBUEIaiABIAUoAhwQXQJAAkACQCAFKQMIQgFSDQAgBSkDECIJQgFWDQAgCadBAWsNAQwCCyAAKAIQIgFFDQ0gAUG4wsAAQRAQRA0RDA0LIAAoAhAiAUUNDyABQfzGwABBBRBEDRAMDwsgACgCECIBRQ0OIAFBgcfAAEEEEEQNDwwOCyAFQRhqIAAQgQEgBSgCGCIBRQRAIAUtABwhASAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0SCyAAIAE6AAQMDAsgBUEIaiABIAUoAhwQXQJAIAUpAwhCAVINACAFKQMQIglCgICAgBBaDQAgCaciAUGAsANzQYCAxABrQYCQvH9JDQAgACgCECEDIwBBIGsiAiQAAn9BACADRQ0AGgJAIAMoAgBBJyADKAIEKAIQEQEADQADQAJAAkACfwJAAkAgAUEiRwRAIAFBf0YEQCADKAIAQScgAygCBCgCEBEBAAwJCwJAAkACQAJAAkACQCABQSZMBEAgAUEJaw4FAgQJCQMBCyABQSdGDQUgAUHcAEYNBAwICyABDQcgAkIANwECIAJB3OAAOwEADAYLIAJCADcBAiACQdzoATsBAAwFCyACQgA3AQIgAkHc5AE7AQAMBAsgAkIANwECIAJB3NwBOwEADAMLIAJCADcBAiACQdy4ATsBAAwCCyACQgA3AQIgAkHczgA7AQAMAQtBfyEBIAMoAgBBIiADKAIEKAIQEQEADQYMBQtBAiEEQQAMAQsCQAJAAkAgAUH/BU0NACABEGVFDQAMAQsgARA4DQELIAJBEGogARCGASACIAIvABg7AQggAiACKQAQNwMAIAItABohASACLQAbIQQgAiACLwEIOwEYIAIgAikDADcDECABQf8BcSAEQf8BcUkNAgwDCyACIAE2AgBBgQEhBEGAAQshASACIAIvAQg7ARggAiACKQMANwMQCyAEQf8BcSEHIAFB/wFxIQQgAygCACEBIAMoAgQoAhAhBiACKAIQIQgDQCABIAdBgAFNBH8gAkEQaiAEai0AAAUgCAsgBhEBAA0DIAcgBEEBaiIERw0ACwtBfyEBDAALAAtBAQsgAkEgaiQADQ8MDgsgACgCECIBRQ0KIAFBuMLAAEEQEEQNDgwKCwJAIAENACAAKAIQIgNFDQBBASECIANBhcfAAEEBEEQNEAsgACgCECIDBEBBASECIANB6MbAAEEBEEQNEAsgABA6DQ0MCAsgBCAGTw0AIAQgB2otAABB5QBGDQELAkAgAQ0AIAAoAhAiBEUNAEEBIQIgBEGFx8AAQQEQRA0OCyAAKAIQIgQEQEEBIQIgBEHixsAAQQEQRA0OCyADQdIARw0BDAULIAAgAkECajYCCCAAEDoNCgwJCyAAKAIQIgJFDQMgAkHkxsAAQQQQRA0JDAMLAkAgAQ0AIAAoAhAiA0UNAEEBIQIgA0GFx8AAQQEQRA0LCyAAKAIQIgMEQEEBIQIgA0HIxsAAQQEQRA0LCyAAEJQBDQggACgCECIDRQ0HQQEhAiADQcnGwABBARBERQ0DDAoLAkAgAQ0AIAAoAhAiA0UNAEEBIQIgA0GFx8AAQQEQRA0KCyAAKAIQIgMEQEEBIQIgA0HxxsAAQQEQRA0KC0EAIQICfwJAIAAoAgAiA0UNAANAAkAgACgCCCIEIAAoAgRPDQAgAyAEai0AAEHFAEcNACAAIARBAWo2AggMAgsCQCACRQ0AIAAoAhAiA0UNACADQd+jwQBBAhBERQ0AQQEMAwtBASAAQQEQIA0CGiACQQFqIQIgACgCACIDDQALC0EACyEDIAUgAjYCBCAFIAM2AgBBASECIAUoAgBBAXENCSAFKAIEQQFGBEAgACgCECIDRQ0HIANB8sbAAEEBEEQNCgsgACgCECIDRQ0GIANBgsXAAEEBEERFDQIMCQsCQCABDQAgACgCECIDRQ0AQQEhAiADQYXHwABBARBEDQkLQQEhAiAAQQEQHw0IIAAoAgAiBEUEQCAAKAIQIgBFDQggAEHhwsAAQQEQRCECDAkLIAAoAggiAyAAKAIETwRAIAAoAhAiAUUNAyABQbjCwABBEBBERQ0DDAkLIAAgA0EBajYCCAJAAkACQCADIARqLQAAQdMAaw4DAgEEAAsgACgCECIBRQ0EIAFBuMLAAEEQEEQNCAwECyAAKAIQIgMEQCADQfHGwABBARBEDQoLIAAQlAENByAAKAIQIgNFDQYgA0GCxcAAQQEQREUNAgwJCyAAKAIQIgIEQCACQYbHwABBAxBEDQcLQQEhAkEAIQcjAEEgayIDJAACQAJAAkAgACgCACIERQ0AA0ACQCAAKAIIIgYgACgCBE8NACAEIAZqLQAAQcUARw0AIAAgBkEBajYCCAwCCwJAAkAgB0UNACAAKAIQIgRFDQAgBEHfo8EAQQIQRA0EIAAoAgANACAAKAIQIgZFDQFBASEEIAZB4cLAAEEBEERFDQEMBQsgAyAAQfMAEI0BIAMtAABBAUYEQCADLQABIQcgACgCECIGBEBBASEEIAZByMLAAEG4wsAAIAdBAXEiBhtBGUEQIAYbEEQNBgsgACAHOgAEIABBADYCAAwDCyAAKAIARQRAIAAoAhAiBkUNAUEBIQQgBkHhwsAAQQEQREUNAQwFCyADIAAQPyADKAIARQRAIAMtAAQhByAAKAIQIgYEQEEBIQQgBkHIwsAAQbjCwAAgB0EBcSIGG0EZQRAgBhsQRA0GCyAAIAc6AAQgAEEANgIADAMLIAMgA/0AAgD9CwMQAkAgACgCECIERQ0AIANBEGogBBAnDQQgACgCECIERQ0AIARBisXAAEECEEQNBAtBASEEIABBARAgDQQLIAdBAWshByAAKAIAIgQNAAsLQQAhBAwBC0EBIQQLIANBIGokACAEDQggACgCECIDRQ0FIANBicfAAEECEERFDQEMCAtBASECIABBARAgDQcLIAENAyAAKAIQIgFFDQNBASECIAFBlcXAAEEBEERFDQMMBgtBACECIABBADoABCAAQQA2AgAMBQtBACECIABBADYCAAwECyAAIAMQcA0BC0EAIQIgACgCAEUNAiAAIAAoAgxBAWs2AgwMAgtBASECDAELQQAhAgsgBUEgaiQAIAIL3QoDC38BfgJ7QQEhCkEBIQwgBEEBRwRAQQEhCEEBIQcDQAJAIAQgBiAJaiIFSwRAIAMgCGotAAAiCCADIAVqLQAAIgVPBEAgBSAIRwRAQQEhCkEAIQYgByEJIAdBAWohBwwDC0EAIAZBAWoiCCAIIApGIgUbIQYgCEEAIAUbIAdqIQcMAgsgBiAHakEBaiIHIAlrIQpBACEGDAELIAUgBEGAscAAELsBAAsgBiAHaiIIIARJDQALQQEhCEEBIQdBACEGQQAhBQNAAkACQCAEIAUgBmoiC0sEQCADIAhqLQAAIgggAyALai0AACILSw0BIAggC0cEQEEBIQxBACEGIAchBSAHQQFqIQcMAwtBACAGQQFqIgggCCAMRiILGyEGIAhBACALGyAHaiEHDAILIAsgBEGAscAAELsBAAsgBiAHakEBaiIHIAVrIQxBACEGCyAGIAdqIgggBEkNAAsLAkACQAJAAkAgCSAFIAUgCUkiBxsiCyAETQRAAn8CQAJAAkACQCAKIAwgBxsiByALaiIJIAdJIAQgCUlyRQRAIAMgAyAHaiALEL4BRQ0EIARBA3EhByAEQQRPDQFBACEIDAILIAcgCSAEQbCxwAAQbwALIARBDHEhBUEAIQgDQEIBIAMgCGoiCUEDajEAAIZCASAJMQAAhiAQhEIBIAlBAWoxAACGhEIBIAlBAmoxAACGhIQhECAFIAhBBGoiCEcNAAsgB0UNAQsgAyAIaiEGA0BCASAGMQAAhiAQhCEQIAZBAWohBiAHQQFrIgcNAAsLIAQgC2siByALIAcgC0sbQQFqIQdBfyEGIAshCUF/DAELIARBAWshDkEBIQlBACEGQQEhBUEAIQwDQCAEIAUiCCAGaiINSwRAIAQgBmsgBUF/c2oiBSAETw0HIA4gBiAMamsiCiAETw0GAkACQCADIAVqLQAAIgUgAyAKai0AACIKTwRAIAUgCkYNASAIQQFqIQVBACEGQQEhCSAIIQwMAgsgDUEBaiIFIAxrIQlBACEGDAELQQAgBkEBaiIFIAUgCUYiChshBiAFQQAgChsgCGohBQsgByAJRw0BCwtBASEJQQAhBkEBIQVBACEKA0AgBCAFIgggBmoiD0sEQCAEIAZrIAVBf3NqIgUgBE8NBCAOIAYgCmprIg0gBE8NBQJAAkAgAyAFai0AACIFIAMgDWotAAAiDU0EQCAFIA1GDQEgCEEBaiEFQQAhBkEBIQkgCCEKDAILIA9BAWoiBSAKayEJQQAhBgwBC0EAIAZBAWoiBSAFIAlGIg0bIQYgBUEAIA0bIAhqIQULIAcgCUcNAQsLIAQgCiAMIAogDEsbayEJQQAhBgJ/AkACQAJAAkAgBw4CAAIBCyAHDAMLIAMhCCAHQX5xIgYhBQNAQgEgCC8AAP0Q/Qw/Pz8/Pz8/Pz8/Pz8/Pz8//U79iQH9qQH9yQEiEv0dAIb9EkIBIBL9HQGG/R4BIBH9UCERIAhBAmohCCAFQQJrIgUNAAsgESARIBH9DQgJCgsMDQ4PAAECAwQFBgf9UP0dACEQIAYgB0YNAQsDQEIBIAMgBmoxAACGIBCEIRAgByAGQQFqIgZHDQALC0EACyEGIAQLIQggACAENgI8IAAgAzYCOCAAIAI2AjQgACABNgIwIAAgCDYCKCAAIAY2AiQgACACNgIgIABBADYCHCAAIAc2AhggACAJNgIUIAAgCzYCECAAIBA3AwggAEEBNgIADwtBACALIARBwLHAABBvAAsgBSAEQZCxwAAQuwEACyANIARBoLHAABC7AQALIAogBEGgscAAELsBAAsgBSAEQZCxwAAQuwEAC9MJAgh/CX0jAEEwayILJAAgAQRAQwAAAEBDAACAPyAILQAcGyEXIAgqAgwgCCoCCCIVk0MAAH5DlSEWA0AgAUEEIAFBBEkiDhshDQJAIBcgAC0AA7NDAAB/Q5WUIhggBV0NAAJ/AkAgAUECTwRAIAAoAgQiCEH//wFxRQRAIAhBEHQMAwsgCEH/B3EhCiAIQYCAAnEhCSAIQYD4AXEiDEGA+AFGBEAgCUEQdCIJQYCAgPwHciAKRQ0DGiAJIApBDXRyQYCAgP4HcgwDCyAJQRB0IQkgDEUNASAMQQ10QYCAgPwAcSAKQQ10ckGAgIDAA2ogCXIMAgtBAUEBQbjQwQAQuwEACyAJQYCAgNgDciAKZ0EQayIJQRd0ayAKIAlB//8DcUEIanRB////A3FyCyEPAn8gCEGAgHxxIAhBEHYiCEH//wFxRQ0AGiAIQf8HcSEKIAhBgIACcSEJIAhBgPgBcSIMQYD4AUYEQCAJQRB0IglBgICA/AdyIApFDQEaIAkgCEENdHJBgICA/gdyDAELIAlBEHQiCCAMQQ10QYCAgPwAcSAKQQ10ckGAgIDAA2pyIAwNABogCEGAgIDYA3IgCmdBEGsiCEEXdGsgCiAIQf//A3FBCGp0Qf///wNxcgshECALAn8CQAJAIAFBAkcEQCAAKAIIIghB//8BcUUEQCAIQRB0DAQLIAhB/wdxIQogCEGAgAJxIQkgCEGA+AFxIgxBgPgBRgRAIAlBEHQhCSAKDQIgCUGAgID8B3IMBAsgCUEQdCEJIAxFDQIgDEENdEGAgID8AHEgCkENdHJBgICAwANqIAlyDAMLQQJBAkHI0MEAELsBAAsgCSAKQQ10ckGAgID+B3IMAQsgCUGAgIDYA3IgCmdBEGsiCUEXdGsgCiAJQf//A3FBCGp0Qf///wNxcgs2AhAgCyAQNgIMIAsgDzYCCCALAn0CQCAORQRAIAAoAgwiCkEIdiEJQwAAAAAhEUMAAAAAIRIgCkH/AXEEQCAVIBYgCkEBa0H/AXGzlJIQUSESCyAKQYCA/AdxQRB2IQwgCUH/AXEEQCAVIBYgCUEBa0H/AXGzlJIQUSERCyAMDQFDAAAAAAwCC0EDIA1BqNDBABC7AQALIBUgFiAMQQFrQf8BcbOUkhBRCzgCHCALIBE4AhggCyASOAIUIAsgCkEYdrNDAAB/Q5VDAAAAP5RD2w9JQJQiERAsOAIsIAsgERArIhJDAACAPyAIQRB2Qf8BcbNDAAB/Q5UiESARkkMAAIC/kiITi5MgCEEYdrNDAAB/Q5UiESARkkMAAIC/kiIUi5MiESARIBGUIBNDAAAAACARjCIRIBEgEVwbIhFDAAAAACARQwAAAABeGyIRjCIZIBEgE0MAAAAAYBuSIhMgE5QgFCAZIBEgFEMAAAAAYBuSIhEgEZSSkpEiFJWUOAIoIAsgEiARIBSVlDgCJCALIBIgEyAUlZQ4AiAgCyADIAQgGCALQQhqIAtBFGogC0EgahA1IAsoAgBBAUcNACALKgIEIhEgBmBFIAcgEWBFcg0AIAIoAggiCCACKAIARgRAIAIQoQELIAIgCEEBajYCCCACKAIEIAhBAnRqIBE4AgALIAAgDUECdGohACABIA1rIgENAAsLIAtBMGokAAvACwIIfwV7AkACQAJAAkACQCACIANPBEAgA0UNBCABIANqIQUgA0EPTQRAA0AgASAFTw0GIAVBAWsiBS0AAEEKRw0ADAULAAsgBUEQayIE/QAAAP0MCgoKCgoKCgoKCgoKCgoKCiIM/SP9ZCIGBEAgBCAGZ0Efc2ohBQwECwJAAkACQCADQcAASSADIAVBD3FrIgVBwABJcg0AA0AgASAFaiIEQTBrIgb9AAQAIAz9IyINIARBQGoiCP0ABAAgDP0jIg79UCAEQSBrIgf9AAQAIAz9IyIP/VAgBEEQayIE/QAEACAM/SMiEP1Q/WRFBEAgBUFAaiIFQUBrQYABTw0BDAILCyAQ/WQiBQ0EIA/9ZCIEDQUgDf1kIgQNASAIIA79ZGdrQR9qIQUMBgsDQCAFQQ9MBEBBACEHIAVBAEoNA0EAIQQMCQsgASAFQRBrIgVqIgT9AAAAIAz9I/1kIgZFDQALIAQgBmdBH3NqIQUMBQsgBiAEZ0Efc2ohBQwEC0EAIQQgAf0AAAAgDP0j/WQiBUUNBSABIAVna0EfaiEFDAMLQQAgAyACQbilwQAQbwALIAQgBWdBH3NqIQUMAQsgByAEZ0Efc2ohBQsgBSABayIJQQFqIQcgAiAJSwRAIAEgB2oiCiABTQRAQQAhBAwDCyAJQQ5NBEBBACEEAkAgCUEDSQRAIAEhBQwBCyABIAdBHHEiAmohBf0MAAAAAAAAAAAAAAAAAAAAACEMIAIhBANAIAwgAf1cAAD9DAoKCgoKCgoKCgoKCgoKCgr9I/2JAf2pAf0MAQAAAAEAAAABAAAAAQAAAP1O/a4BIQwgAUEEaiEBIARBBGsiBA0ACyAMIAwgDP0NCAkKCwwNDg8AAQIDAAECA/2uASIMIAwgDP0NBAUGBwABAgMAAQIDAAECA/2uAf0bACEEIAIgB0YNBAsDQCAEIAUtAABBCkZqIQQgBUEBaiIFIApHDQALDAMLQQAhAgJAAkAgAUFwcUEQaiIEIAFBAWoiBiAEIAZLGyABayILQQRJBEAgASEGDAELIAEgC0F8cSIIaiEG/QwAAAAAAAAAAAAAAAAAAAAAIQwgCCECA0AgDCAB/VwAAP0MCgoKCgoKCgoKCgoKCgoKCv0j/YkB/akB/QwBAAAAAQAAAAEAAAABAAAA/U79rgEhDCABQQRqIQEgAkEEayICDQALIAwgDCAM/Q0ICQoLDA0ODwABAgMAAQID/a4BIgwgDCAM/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQIgCCALRg0BCwNAIAIgBi0AAEEKRmohAiAGQQFqIgYgBEkNAAsLAkAgCUE/SQ0AIAQgCkFAaiIBSw0AA0AgBP0ABAD9DAoKCgoKCgoKCgoKCgoKCgoiDP0j/WRpIAJqIARBEGr9AAQAIAz9I/1kaWogBEEgav0ABAAgDP0j/WRpaiAEQTBq/QAEACAM/SP9ZGlqIQIgBEFAayIEIAFNDQALCyAKQRBrIgEgBE8EQANAIAT9AAAA/QwKCgoKCgoKCgoKCgoKCgoK/SP9ZGkgAmohAiAEQRBqIgQgAU0NAAsLQQAhBgJAIAQgCk8NAAJAIAUgBGtBAWoiCUEESQRAIAQhAQwBCyAEIAlBfHEiCGohAf0MAAAAAAAAAAAAAAAAAAAAACEMIAghBQNAIAwgBP1cAAD9DAoKCgoKCgoKCgoKCgoKCgr9I/2JAf2pAf0MAQAAAAEAAAABAAAAAQAAAP1O/a4BIQwgBEEEaiEEIAVBBGsiBQ0ACyAMIAwgDP0NCAkKCwwNDg8AAQIDAAECA/2uASIMIAwgDP0NBAUGBwABAgMAAQIDAAECA/2uAf0bACEGIAggCUYNAQsDQCAGIAEtAABBCkZqIQYgAUEBaiIBIApHDQALCyACIAZqIQQMAgtBACAHIAJBqKXBABBvAAsLIAAgAyAHazYCBCAAIARBAWo2AgAL1wkBCH8jAEGAAWsiAyQAIAAoAgwhBgJ/AkACQAJAAkACQCAAKAIUIgggACgCECIESQRAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAYgCGotAAAiBUHbAGsOIQQLCwsLCwsLCwsLAwsLCwsLCwsBCwsLCwsCCwsLCwsLBQALIAVBImsODAkKCgoKCgoKCgoKCAoLIAAgCEEBaiIFNgIUIAQgBU0NDCAAIAhBAmoiBzYCFAJAIAUgBmotAABB9QBHDQAgBCEFIAQgB0YNDSAAIAhBA2oiCTYCFCAGIAdqLQAAQewARwRAIAkhBwwBCyAEIAlGDQ0gACAIQQRqIgc2AhQgBiAJai0AAEHsAEYNBQsgA0EJNgJwIANBGGogBiAEIAcQIyADQfAAaiADKAIYIAMoAhwQ0AEMEAsgACAIQQFqIgU2AhQgBCAFTQ0MIAAgCEECaiIHNgIUAkAgBSAGai0AAEHyAEcNACAEIQUgBCAHRg0NIAAgCEEDaiIJNgIUIAYgB2otAABB9QBHBEAgCSEHDAELIAQgCUYNDSAAIAhBBGoiBzYCFCAGIAlqLQAAQeUARg0FCyADQQk2AnAgA0EoaiAGIAQgBxAjIANB8ABqIAMoAiggAygCLBDQAQwPCyAAIAhBAWoiBTYCFCAEIAVNDQwgACAIQQJqIgc2AhQCQCAFIAZqLQAAQeEARw0AIAQhBSAEIAdGDQ0gACAIQQNqIgk2AhQgBiAHai0AAEHsAEcEQCAJIQcMAQsgBCAJRg0NIAAgCEEEaiIKNgIUIAYgCWotAABB8wBHBEAgCiEHDAELIAQgCkYNDSAAIAhBBWoiBzYCFCAGIApqLQAAQeUARg0FCyADQQk2AnAgA0E4aiAGIAQgBxAjIANB8ABqIAMoAjggAygCPBDQAQwOCyADQQo6AHAgA0HwAGogASACEKQBIAAQjgEMDQsgA0ELOgBwIANB8ABqIAEgAhCkASAAEI4BDAwLIANBBzoAcCADQfAAaiABIAIQpAEgABCOAQwLCyADQYACOwFwIANB8ABqIAEgAhCkASAAEI4BDAoLIANBADsBcCADQfAAaiABIAIQpAEgABCOAQwJCyAAIAhBAWo2AhQgA0FAayIEIABBABA2IAMpA0BCf1ENByAEIAEgAhCfASAAEI4BDAgLIABBADYCCCAAIAhBAWo2AhQgA0HkAGogAEEMaiAAECUgAygCaCIEIAMoAmRBAkYNBxogAyADKAJsNgJ4IAMgBDYCdCADQQU6AHAgA0HwAGogASACEKQBIAAQjgEMBwsgBUEwa0H/AXFBCkkNAQsgA0EKNgJwIANBCGogBiAEIAhBAWoiASAEIAEgBEkbECMgA0HwAGogAygCCCADKAIMENABIAAQjgEMBQsgA0HQAGogAEEBEDYgAykDUEJ/UQRAIAMoAlgMBQsgA0HQAGogASACEJ8BIAAQjgEMBAsgA0EFNgJwIANBEGogBiAEIAUQIyADQfAAaiADKAIQIAMoAhQQ0AEMAwsgA0EFNgJwIANBIGogBiAEIAUQIyADQfAAaiADKAIgIAMoAiQQ0AEMAgsgA0EFNgJwIANBMGogBiAEIAUQIyADQfAAaiADKAIwIAMoAjQQ0AEMAQsgAygCSAsgA0GAAWokAAuBEwEIfyMAQSBrIgYkAAJAAkADQAJAIAEoAgghAyABEIMBAkACQAJAIAEoAggiByABKAIEIgVHBEAgBSAHTQ0BIAEoAgAiCSAHai0AACIEQdwARwRAIARBIkcEQCABIAdBAWo2AgggBkEQNgIUIAAgASAGQRRqEMIBDAkLAkAgAigCCCIIBEAgAyAHTQ0BIAMgByAFQYSkwQAQbwALAkAgAyAHTQRAIAEgB0EBajYCCCAGQQhqIAMgCWogByADaxBCIAYoAghFBEAgBigCECEBIAYoAgwhAwwLCyAGQQ82AhQgBiABIAZBFGoQxQEgBigCACIDRQ0BIAYoAgQhAQwKCyADIAcgBUH0o8EAEG8ACyAAIAYoAgQ2AgQgAEECNgIADAkLAkACQCAHIANrIgUgAigCACAIa0sEQCACIAggBRCSASACKAIEIQQgAigCCCEIDAELIAIoAgQhBCADIAdGDQELIAVFDQAgBCAIaiADIAlqIAX8CgAACyABIAdBAWo2AgggAiAFIAhqIgI2AgggBkEIaiAEIAIQQiAAAn8gBigCCEUEQCAGKAIMIQMgBigCEAwBCyAGQQ82AhQgBiABIAZBFGoQxQEgBigCACIDRQ0EIAYoAgQLNgIIIAAgAzYCBCAAQQE2AgAMCAsCQCADIAdNBEACQAJAIAcgA2siCCACKAIAIAIoAggiBGtLBEAgAiAEIAgQkgEgAigCCCEEDAELIAMgB0YNAQsgCEUNACACKAIEIARqIAMgCWogCPwKAAALIAEgB0EBaiIKNgIIIAIgBCAIaiIDNgIIAkACQAJAAkACQAJAAkACQAJAAkACfyAFIApLBEAgASAHQQJqNgIIIAkgCmotAAAMAQsgBkEENgIUIAZBCGogASAGQRRqEMMBIAYtAAgNDCAGLQAJC0H/AXFBImsOVAIAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAFAAAABgAAAAAAAAAHAAAACAAJAQALIAZBDDYCFCABIAZBFGoQzAEhAwwPCyMAQSBrIgQkAAJAAkACQCABKAIEIgMgASgCCCIFTwRAAkAgAyAFa0EDTQRAIAEgAzYCCCAEQQQ2AhQgBEEMaiABIARBFGoQxAEgAyEHDAELIAEgBUEEaiIHNgIIIAEoAgAgBWoiBS0AAUEBdC8ByKVBIAUtAABBAXQvAcipQXLBQQh0IAUtAAJBAXQuAcipQXIgBS0AA0EBdC4ByKVBciIFQQBOBEAgBEEAOwEMIAQgBTsBDgwBCyAEQQw2AhQgBEEMaiABIARBFGoQxAELIAQvAQxBAUYEQCAEKAIQIQMMBAsgBC8BDiIFQYD4A3FBgLgDRg0BIAVBgMgAakH//wNxQYD4A08EQCABKAIAIQkCfyADIAdLBEAgByAJai0AAAwBCyAEQQQ2AhQgBEEMaiABIARBFGoQwwEgBC0ADEEBRgRAIAQoAhAhAwwGCyAELQANCyABIAdBAWoiCDYCCEHcAEYEQAJ/IAMgCEsEQCAIIAlqLQAADAELIARBBDYCFCAEQQxqIAEgBEEUahDDASAELQAMQQFGBEAgBCgCECEDDAcLIAQtAA0LIAdBAmohCEH1AEYEQCADIAhJDQUCQCADIAhrQQNNBEAgASADNgIIIARBBDYCFCAEQQxqIAEgBEEUahDEAQwBCyABIAdBBmo2AgggCCAJaiIDLQABQQF0LwHIpUEgAy0AAEEBdC8ByKlBcsFBCHQgAy0AAkEBdC4ByKlBciADLQADQQF0LgHIpUFyIgNBAE4EQCAEQQA7AQwgBCADOwEODAELIARBDDYCFCAEQQxqIAEgBEEUahDEAQsgBC8BDEEBRgRAIAQoAhAhAwwHCyAELwEOIgdBgEBrQf//A3FBgPgDTwRAIAdBgMgAakH//wNxIAVBgNAAakH//wNxQQp0ciIIQYCABGohBSACKAIAIAIoAggiA2tBA00EQCACIANBBBCSASACKAIIIQMLIAIgA0EEajYCCCACKAIEIANqIgMgBUESdkHwAXI6AAAgA0EDaiAHQT9xQYABcjoAACADIAhBBnZBP3FBgAFyOgACIAMgBUEMdkE/cUGAAXI6AAFBACEDDAcLIARBFDYCFCABIARBFGoQzAEhAwwGCyABIAg2AgggBEEXNgIUIAEgBEEUahDMASEDDAULIARBFzYCFCABIARBFGoQzAEhAwwECyAFQYABTwRAIAIoAgAgAigCCCIDa0EDTQRAIAIgA0EEEJIBIAIoAgghAwsgAigCBCADaiEHAn8gBUGAEEkEQCAFQQZ2QUByIQhBAgwBCyAHIAVBBnZBP3FBgAFyOgABIAVBDHZBYHIhCEEDCyEJIAcgCDoAACACIAMgCWo2AgggByAJakEBayAFQT9xQYABcjoAAEEAIQMMBAsgAigCCCIDIAIoAgBGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2ogBToAAEEAIQMMAwsgBSADIANB+LLBABBvAAsgBEEUNgIUIAEgBEEUahDMASEDDAELIAggAyADQfiywQAQbwALIARBIGokACADRQ0PDA4LIAIoAgAgA0YEQCACEKIBCyACIANBAWo2AgggAigCBCADakEiOgAADAwLIAIoAgAgA0YEQCACEKIBCyACIANBAWo2AgggAigCBCADakHcADoAAAwLCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBLzoAAAwKCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBCDoAAAwJCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBDDoAAAwICyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBCjoAAAwHCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBDToAAAwGCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBCToAAAwFCyADIAcgBUGUpMEAEG8ACyAGKAIMIQMMBAsgBkEENgIUIAAgASAGQRRqEMIBDAYLIAcgBUHko8EAELsBAAsgACAGKAIENgIEIABBAjYCAAwECwwBCwsgAEECNgIAIAAgAzYCBAwBCyAAIAE2AgggACADNgIEIABBADYCAAsgBkEgaiQAC68QAwd/An4BeyMAQSBrIgUkAAJAAkAgACgCACICRQRAIAAoAhAiAEUNASAAQeHCwABBARBEIQIMAgsCQAJAAkACQAJAAkACQCAAKAIIIgQgACgCBCIGTwRAIAAoAhAiAkUNASACQbjCwABBEBBERQ0BDAcLIAAgBEEBaiIBNgIIIAVBCGogAiAEai0AACIDEMgBIAUoAggiBwRAIAAoAhAiAEUNCCAAIAcgBSgCDBBEIQIMCQsgACAAKAIMQQFqIgc2AgwCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAHQfQDTQRAIANBwQBrDhcDBxAGEAUQEBAQEBAQEAICAQEDBBAQCBALIAAoAhAiAgRAIAJByMLAAEEZEEQNFAsgAEEBOgAEDBILIAAoAhAiBARAQQEhAiAEQeLGwABBARBEDRUgACgCACICRQ0JIAAoAgQhBiAAKAIIIQELIAEgBk8NCCABIAJqLQAAQcwARw0IIAAgAUEBajYCCCAFQRBqIAAQZCAFLQAQRQ0HIAUtABEhASAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0VCyAAIAE6AAQMEQsgACgCECIBBEBBASECIAFB6MbAAEEBEEQNFAsgA0HQAEcNCCAAKAIQIgJFDQkgAkHpxsAAQQYQRA0RDAkLIAAoAhAiAQRAQQEhAiABQcjGwABBARBEDRMLQQEhAiAAECYNEiADQcEARgRAIAAoAhAiAQRAIAFB78bAAEECEEQNFAsgAEEBECANEwsgACgCECIBRQ0OIAFBycbAAEEBEEQNEgwOCyAAKAIQIgEEQEEBIQIgAUHxxsAAQQEQRA0SCyAFIAAQkAFBASECIAUoAgBBAXENESAFKAIEQQFGBEAgACgCECIBRQ0OIAFB8sbAAEEBEEQNEgsgACgCECIBRQ0NIAFBgsXAAEEBEEQNEQwNC0EAIQIjAEEQayIBJAACQAJAAkACQCAAKAIARQRAIAAoAhAiAw0BDAQLIAEgAEHHABCNASABLQAAQQFGBEAgAS0AASEDIAAoAhAiBARAQQEhAiAEQcjCwABBuMLAACADQQFxIgQbQRlBECAEGxBEDQULIAAgAzoABEEAIQIgAEEANgIADAQLIAAoAhAiAgRAIAEpAwgiCVANAyACQcTDwABBBBBEDQIDQCAIIAlRBEAgACgCECIDRQ0FQQEhAiADQcjDwABBAhBERQ0FDAYLAkAgCFANACAAKAIQIgJFDQAgAkHfo8EAQQIQRA0EC0EBIQIgACAAKAIUQQFqNgIUIAhCAXwhCCAAQgEQhwFFDQALDAQLIAAQOyECDAMLIANB4cLAAEEBEEQhAgwCC0EBIQIMAQsgABA7IQIgACAAKAIUIAmnazYCFAsgAUEQaiQAIAINDgwMCyAAKAIQIgIEQCACQfPGwABBBBBEDQ4LQQEhAkEAIQEjAEEQayIDJAACQAJAAkACQCAAKAIARQRAIAAoAhAiBA0BDAQLIAMgAEHHABCNASADLQAAQQFGBEAgAy0AASEEIAAoAhAiBgRAQQEhASAGQcjCwABBuMLAACAEQQFxIgYbQRlBECAGGxBEDQULIAAgBDoABEEAIQEgAEEANgIADAQLIAAoAhAiAQRAIAMpAwgiCVANAyABQcTDwABBBBBEDQIDQCAIIAlRBEAgACgCECIERQ0FQQEhASAEQcjDwABBAhBERQ0FDAYLAkAgCFANACAAKAIQIgFFDQAgAUHfo8EAQQIQRA0EC0EBIQEgACAAKAIUQQFqNgIUIAhCAXwhCCAAQgEQhwFFDQALDAQLIAAQSCEBDAMLIARB4cLAAEEBEEQhAQwCC0EBIQEMAQsgABBIIQEgACAAKAIUIAmnazYCFAsgA0EQaiQAIAENDyAAKAIAIgNFDQYgACgCCCIBIAAoAgRPDQYgASADai0AAEHMAEcNBiAAIAFBAWo2AgggBUEQaiAAEGQgBS0AEEUNCCAFLQARIQEgACgCECIDBEAgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0QCyAAIAE6AAQMDAsjAEEgayICJAACQAJAIAAoAgBFBEAgACgCECIBRQ0BIAFB4cLAAEEBEEQhAQwCCyACIAAQjwEgAigCAEUEQCAAKAIQIgMEQEEBIQEgA0HIwsAAQbjCwAAgAi0ABEEBcSIDG0EZQRAgAxsQRA0DCyAAIAL9AAIA/QsCAAwBCyAAKAIQRQ0AIAD9AAIAIQogACAC/QACAP0LAgAgAiAK/QsDECAAECYhASAAIAL9AAMQ/QsCAAwBC0EAIQELIAJBIGokACABDQwMCgtBASECIAAQJg0NIAAoAhAiAQRAIAFB98bAAEEEEEQNDgsgABBZDQ0MCQsgBSkDGCIIUA0AIAAgCBCHAQ0KIAAoAhAiAUUNAEEBIQIgAUHjxsAAQQEQRA0MCyADQdIARg0GIAAoAhAiAkUNBiACQeTGwABBBBBEDQkMBgsgACgCECICRQ0AIAJB5MbAAEEEEEQNCAsgABAmDQcMBQsgACgCECIBRQ0AIAFBuMLAAEEQEEQNCAtBACECIABBADoABCAAQQA2AgAMBwsgBSkDGCIIUA0CIAAoAhAiAgRAIAJBh8XAAEEDEEQNBQsgACAIEIcBDQQMAgsgACAENgIIIABBABAfDQMMAQsgABAmDQILQQAhAiAAKAIARQ0DIAAgACgCDEEBazYCDAwDC0EAIQIgAEEANgIADAILQQEhAgwBC0EAIQILIAVBIGokACACC60IAhR/An4jAEGQBGsiCCQAIAhBDGpBAEGABPwLAAJAAkAgACgCDCIQRQRAIAEoAgAgACgCACAAKAIEIAEoAgQoAgwRAAAhAAwBCyAAKAIAIQ0gACgCCCIOLQAAIQoCQCAAKAIEIg8EQCANIA9qIQkgCEEMaiECIA0hAANAAn8gACwAACIFQQBOBEAgBUH/AXEhAyAAQQFqDAELIAAtAAFBP3EhByAFQR9xIQMgBUFfTQRAIANBBnQgB3IhAyAAQQJqDAELIAAtAAJBP3EgB0EGdHIhByAFQXBJBEAgByADQQx0ciEDIABBA2oMAQsgA0ESdEGAgPAAcSAALQADQT9xIAdBBnRyciEDIABBBGoLIQAgBEGAAUYNAiACIAM2AgAgAkEEaiECIARBAWohBCAAIAlHDQALCyAOIBBqIRFBgAEgBCAEQYABTRshFSAEQQJ0IgBBBGohCyAAIAhqQQhqIQdBvAUhEkHIACEGIA4hBUGAASEMA0AgBUEBaiECQSQhAEEAIQNBASEUQQAhCQNAAn8gA0EBcQRAIAIgEUYNBCACQQFqIQUgAi0AAAwBCyACIQUgCgsiAkHhAGsiA0H/AXFBGk8EQCACQTBrQf8BcUEJSw0DIAJBFmshAwsgFK0iFiADQf8BcSICrX4iF0IgiKcNAiAXpyIDIAlqIgkgA0kNAiACQRpBASAAIAZrIgNBACAAIANPGyIDIANBAU0bIgMgA0EaTxsiA08EQCAWQSQgA2utfiIWQiCIpw0DIBanIRQgAEEkaiEAQQEhAyAFIQIMAQsLIAkgE2oiCiAJSQ0BIAogBEEBaiIDbiIGIAxqIgwgBkkgDEGAsANzQYCAxABrQYCQvH9JciAEIBVGcg0BIAchAAJAIAQiAiAKIAMgBmxrIgZNBEAgBkGAAUkNASAGQYABQZzEwAAQuwEACwNAIABBBGogACgCADYCACAAQQRrIQAgAkEBayICIAZLDQALCyAIQQxqIAZBAnRqIAw2AgAgBSARRwRAIAUtAAAhCkEAIQIgCSASbiIAIANuIABqIgBByANPBEADQCACQSRqIQIgACIEQSNuIQAgBEHX/ABLDQALCyAGQQFqIRMgAiAAQSRsQfz/A3EgAEEmakH//wNxbmohBiAHQQRqIQcgC0EEaiELQQIhEiADIQQMAQsLIARB/wBLDQIgCEEMaiECA0AgCCACKAIANgKMBCAIQYwEaiABEHoiAA0CIAJBBGohAiALQQRrIgsNAAsMAQtBASEAIAEoAgAiAkGMxcAAQQkgASgCBCgCDCIBEQAADQAgDwRAIAIgDSAPIAERAAANASACQf7EwABBASABEQAADQELIAIgDiAQIAERAAANACACQZXFwABBASABEQAAIQALIAhBkARqJAAgAA8LQQAgA0GAAUHMw8AAEG8AC6QIAg5/AXsjAEEgayIDJAACQAJAAkACQCACKAIIIgxBgICAwABxBEAgAi8BDCINDQELQQAhDSAMQYCAgIABcQ0BIAIoAgQhBCACKAIAIQIgAyABNgIMIAMgADYCCANAAkAgA0EQaiADQQhqEFAgAygCECIARQ0AIAMoAhwgAiAAIAMoAhQgBCgCDCIFEQAADQBFDQEgAkG42cEAQQMgBREAAEUNAQsLIABBAEchCQwDCyAMQYCAgIABcQ0AIAMgATYCDCADIAA2AggDQCADQRBqIANBCGoQUCADKAIQIgpFDQIgAygCHCELAkAgAygCFCIFQRBPBEAgCiAFEDchBgwBCyAFRQRAQQAhBgwBCyAFQQNxIQhBACEHQQAhBiAFQQRPBEAgBUEMcSEFA0AgBiAHIApq/VwAAP0Mv7+/v7+/v7+/v7+/v7+/v/0nIhH9GwBBAXFqIBH9hwH9pwEiEf0bAWsgEf0bAmsgEf0bA2shBiAFIAdBBGoiB0cNAAsgCEUNAQsgByAKaiEHA0AgBiAHLAAAQb9/SmohBiAHQQFqIQcgCEEBayIIDQALCyAEIAtBAEdqIAZqIQQMAAsACyACLwEOIgZFBEBBASEAQQAhAQwBCyADIAE2AgwgAyAANgIIIAYhBQJAA0AgA0EQaiADQQhqEFAgAygCECIHRQ0CIAcgAygCFCIPaiEQIAMoAhwhDkEAIQkgBSEIA0AgECAHIgtHBEAgCQJ/IAdBAWogBywAACIJQQBODQAaIAtBAmogCUFgSQ0AGiALQQRBAyAJQW9LG2oLIgcgC2tqIQkgCEEBayIIDQEMAwsLIAhFDQEgCiAPaiEKIAUgCGsgBGohBCAIIQUgDkUNACAEQQFqIQQgCiAOaiEKIAVBAWsiBQ0ACyABIApPBEAgBiEEIAohAQwCC0EAIAogAUHgwMAAEG8ACyABIAkgCmoiBU8EQCAGIQQgBSEBDAELQQAgBSABQfDAwAAQbwALQQAhBiANIARrIgRBACAEIA1NGyEFQQAhBAJAAkACQCAMQR12QQNxQQFrDgIAAQILIAUhBAwBCyAFQf7/A3FBAXYhBAsgDEH///8AcSEHIAIoAgQhCCACKAIAIQIDQCAGQf//A3EgBEH//wNxSQRAQQEhCSAGQQFqIQYgAiAHIAgoAhARAQBFDQEMAgsLIAMgATYCDCADIAA2AgggBSAEawJAA0AgA0EQaiADQQhqEFAgAygCECIBRQ0BIAMoAhwhBCACIAEgAygCFCAIKAIMIgERAABFBEAgBEUNASACQbjZwQBBAyABEQAARQ0BCwtBASEJDAELQf//A3EhAEEAIQYDQCAAIAZB//8DcU0EQEEAIQkMAgtBASEJIAZBAWohBiACIAcgCCgCEBEBAEUNAAsLIANBIGokACAJC4gIAhN/AX4CQAJAAkACQAJAAkAgASgCAEEBRgRAQQIhAiABKAIcIgUgASgCNCIERg0GIAEoAjAhCyAEIQMgBSABKAI8IghBAWsiEGoiAiAETw0BIAEoAjghDSAFIAtqIREgBSAIaiEHIAEoAhgiAyAFaiEOIAggA2shEiAFIAEoAhAiDGtBAWohEyABKQMIIRUgASgCJCIPQX9GIQkgDyEGIAUhAwNAIAMgBUcNAgJAAkAgFSACIAtqMQAAiKdBAXFFBEAgASAHNgIcIAchAyAJDQJBACECDAELIAwgBiAMIAYgDEsbIAkbIgogCCAIIApJGyEUIAohAwJAAkACQANAIAMiAiAURgRAQQAgBiAJGyEKIAwhAgNAIAIgCk0EQCABIAc2AhwgD0F/RwRAIAFBADYCJAsgACAHNgIIIAAgBTYCBEEAIQIMEAsgAkEBayICIAhPDQUgAiAFaiIDIARPDQMgAiANai0AACADIAtqLQAARg0ACyABIA42AhwgEiECIA4hAyAJRQ0FDAYLIAIgBWogBE8NAiACQQFqIQMgAiANai0AACACIBFqLQAARg0ACyACIBNqIQMgCQ0EQQAhAgwDCyADIARB7MPAABC7AQALIAQgBSAKaiIAIAAgBEkbIARB/MPAABC7AQALIAIgCEHcw8AAELsBAAsgASACNgIkIAIhBgsgAyAQaiICIARJDQALIABBCGohBiAAQQRqIQcgBCEDDAILQQIhAiABLQAODQUgASABLQAMIgVBAXM6AAwgASgCNCEDIAEoAjAhBgJAAkAgASgCBCIERQ0AIAMgBE0EQCADIARGDQEMAgsgBCAGaiwAAEFASA0BCwJAAkAgAyAERwRAAn8gBCAGaiICLAAAIgNBAE4EQCADQf8BcQwBCyACLQABQT9xIQcgA0EfcSEGIAZBBnQgB3IgA0FfTQ0AGiACLQACQT9xIAdBBnRyIQcgByAGQQx0ciADQXBJDQAaIAZBEnRBgIDwAHEgAi0AA0E/cSAHQQZ0cnILIQJBASEDIAVBAXFFDQEMAgsgBUEBcQ0BIAFBAToADgwICwJAIAJBgAFJDQBBAiEDIAJBgBBJDQBBA0EEIAJBgIAESRshAwsgACAENgIEIAAgAyAEaiIDNgIIIAEgAzYCBAwGCyAAIAQ2AgggACAENgIEQQAhAgwGCyAGIAMgBCADQfzMwAAQhAIACyAAQQhqIQYgAEEEaiEHIANFDQELIAMhAgNAAkAgAiAETwRAIAIgBEYNBAwBCyACIAtqLAAAQb9/TA0AIAIhBAwDCyACQQFqIgINAAsLQQAhBAsgASADIAQgAyAESxs2AhwgBiAENgIAIAcgBTYCAAtBASECCyAAIAI2AgALoAgBCH8jAEHQAGsiAiQAIAACfwJAAkACQAJAAkAgASgCFCIDIAEoAhAiBkkEQCABKAIMIQcDQCADIAdqLQAAIgRBCWsiCEEXS0EBIAh0QZOAgARxRXJFBEAgASADQQFqIgM2AhQgAyAGRw0BDAMLCyAEQe4ARg0DCyABKAIMIQcgAyAGTw0BA0AgAyAHai0AACIEQQlrIghBF0tBASAIdEGTgIAEcUVyDQQgASADQQFqIgM2AhQgAyAGRw0ACwsgBiEDCyACQQU2AkAgAkEIaiAHIAYgA0EBaiIBIAYgASAGSRsQIyAAIAJBQGsgAigCCCACKAIMENABNgIEDAILIAEgA0EBaiIFNgIUIAACfwJAIAUgBk8NACABIANBAmoiBDYCFAJAAkAgBSAHai0AAEH1AEcNACAEIAUgBiAFIAZLGyIFRg0CIAEgA0EDaiIINgIUIAQgB2otAABB7ABHBEAgCCEEDAELIAUgCEYNAiABIANBBGoiBDYCFCAHIAhqLQAAQewARg0BCyACQQk2AkAgAkE4aiAHIAYgBBAjIAJBQGsgAigCOCACKAI8ENABDAILIABBAjoAAUEADAQLIAJBBTYCQCACQTBqIAcgBiAFECMgAkFAayACKAIwIAIoAjQQ0AELNgIEDAELAkACQAJAIAACfyAEQeYAayIEBEAgBEEORwRAIAAgASACQc8AakG0u8EAECQgARCOATYCBAwGCyABIANBAWoiBTYCFAJAIAUgBk8NACABIANBAmoiBDYCFCAFIAdqLQAAQfIARw0FIAQgBSAGIAUgBksbIgVGDQAgASADQQNqIgg2AhQgBCAHai0AAEH1AEcEQCAIIQQMBgsgBSAIRg0AIAEgA0EEaiIENgIUIAcgCGotAABB5QBHDQVBAQwCCyACQQU2AkAgAkEQaiAHIAYgBRAjIAAgAkFAayACKAIQIAIoAhQQ0AE2AgQMBQsgASADQQFqIgU2AhQgBSAGTw0BIAEgA0ECaiIENgIUIAUgB2otAABB4QBHDQIgBCAFIAYgBSAGSxsiBUYNASABIANBA2oiCDYCFCAEIAdqLQAAQewARwRAIAghBAwDCyAFIAhGDQEgASADQQRqIgk2AhQgByAIai0AAEHzAEcEQCAJIQQMAwsgBSAJRg0BIAEgA0EFaiIENgIUIAcgCWotAABB5QBHDQJBAAs6AAFBAAwECyACQQU2AkAgAkEgaiAHIAYgBRAjIAAgAkFAayACKAIgIAIoAiQQ0AE2AgQMAgsgAkEJNgJAIAJBKGogByAGIAQQIyAAIAJBQGsgAigCKCACKAIsENABNgIEDAELIAJBCTYCQCACQRhqIAcgBiAEECMgACACQUBrIAIoAhggAigCHBDQATYCBAtBAQs6AAAgAkHQAGokAAu0CgIDfAN/IwBBEGsiBSQAIAC7IQECQCAAvCIGQf////8HcSIEQdufpPoDTwRAIARB0qftgwRPBEAgBEHW44iHBE8EQAJAAkACQAJAIARB////+wdNBEAgBUIANwMIAkAgBEHan6TuBE0EQCABIAFEg8jJbTBf5D+iRAAAAAAAADhDoEQAAAAAAAA4w6AiAkQAAABQ+yH5v6KgIAJEY2IaYbQQUb6ioCEBIAL8AiEEDAELIAUgBCAEQRd2QZYBayIEQRd0a767OQMAIAUgBUEIaiAEEBkhBCAGQQBOBEAgBSsDCCEBDAELQQAgBGshBCAFKwMImiEBCyAEQQNxQQFrDgMDBAECCyAAIACTIQAMBwsgASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQAMBgsgASABIAGiIgKiIgMgAiACoqIgAkSnRjuMh83GPqJEdOfK4vkAKr+goiABIAMgAkSy+26JEBGBP6JEd6zLVFVVxb+goqCgtiEADAULIAEgAaIiAUSBXgz9///fv6JEAAAAAAAA8D+gIAEgAaIiAkRCOgXhU1WlP6KgIAEgAqIgAURpUO7gQpP5PqJEJx4P6IfAVr+goqC2IQAMBAsgASABoiICIAGaoiIDIAIgAqKiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAyACRLL7bokQEYE/okR3rMtUVVXFv6CiIAGhoLYhAAwDCyAEQeDbv4UETwRARBgtRFT7IRnARBgtRFT7IRlAIAZBAE4bIAGgIgIgAiACoiIBoiIDIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiADIAFEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYhAAwDCyAGQQBOBEAgAUTSITN/fNkSwKAiASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQAMAwsgAUTSITN/fNkSQKAiASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLYhAAwCCyAEQeSX24AETwRARBgtRFT7IQnARBgtRFT7IQlAIAZBAE4bIAGgIgIgAqIiASACmqIiAyABIAGioiABRKdGO4yHzcY+okR058ri+QAqv6CiIAMgAUSy+26JEBGBP6JEd6zLVFVVxb+goiACoaC2IQAMAgsgBkEATgRAIAFEGC1EVPsh+b+gIgEgAaIiAUSBXgz9///fv6JEAAAAAAAA8D+gIAEgAaIiAkRCOgXhU1WlP6KgIAEgAqIgAURpUO7gQpP5PqJEJx4P6IfAVr+goqC2IQAMAgsgAUQYLURU+yH5P6AiASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQAMAQsgBEGAgIDMA08EQCABIAGiIgIgAaIiAyACIAKioiACRKdGO4yHzcY+okR058ri+QAqv6CiIAMgAkSy+26JEBGBP6JEd6zLVFVVxb+goiABoKC2IQAMAQsgBSAAQwAAgAOUIABDAACAe5IgBEGAgIAESRs4AgggBSoCCBoLIAVBEGokACAAC4wKAgN8A38jAEEQayIFJAAgALshAQJ9AkACQCAAvCIGQf////8HcSIEQdufpPoDTwRAIARB0qftgwRPBEAgBEHW44iHBE8EQAJAAkACQAJAIARB////+wdNBEAgBUIANwMIAkAgBEHan6TuBE0EQCABIAFEg8jJbTBf5D+iRAAAAAAAADhDoEQAAAAAAAA4w6AiAkQAAABQ+yH5v6KgIAJEY2IaYbQQUb6ioCEBIAL8AiEEDAELIAUgBCAEQRd2QZYBayIEQRd0a767OQMAIAUgBUEIaiAEEBkhBCAGQQBOBEAgBSsDCCEBDAELQQAgBGshBCAFKwMImiEBCyAEQQNxQQFrDgMDBAECCyAAIACTDAkLIAEgASABoiICoiIDIAIgAqKiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgASADIAJEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYMCAsgASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLYMBwsgASABoiICIAGaoiIDIAIgAqKiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAyACRLL7bokQEYE/okR3rMtUVVXFv6CiIAGhoLYMBgsgASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMDAULIARB39u/hQRLDQIgBkEATgRAIAFE0iEzf3zZEsCgIgIgAiACoiIBoiIDIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiADIAFEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYMBQtE0iEzf3zZEsAgAaEiAiACIAKiIgGiIgMgASABoqIgAUSnRjuMh83GPqJEdOfK4vkAKr+goiACIAMgAUSy+26JEBGBP6JEd6zLVFVVxb+goqCgtgwECyAEQeOX24AESw0CIAZBAE4EQEQYLURU+yH5PyABoSICIAIgAqIiAaIiAyABIAGioiABRKdGO4yHzcY+okR058ri+QAqv6CiIAIgAyABRLL7bokQEYE/okR3rMtUVVXFv6CioKC2DAQLIAFEGC1EVPsh+T+gIgIgAiACoiIBoiIDIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiADIAFEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYMAwsgBEGAgIDMA08EQCABIAGiIgFEgV4M/f//37+iRAAAAAAAAPA/oCABIAGiIgJEQjoF4VNVpT+ioCABIAKiIAFEaVDu4EKT+T6iRCceD+iHwFa/oKKgtgwDCyAFIABDAACAe5I4AgggBSoCCBpDAACAPwwCC0QYLURU+yEZwEQYLURU+yEZQCAGQQBOGyABoCIBIAGiIgFEgV4M/f//37+iRAAAAAAAAPA/oCABIAGiIgJEQjoF4VNVpT+ioCABIAKiIAFEaVDu4EKT+T6iRCceD+iHwFa/oKKgtgwBC0QYLURU+yEJwEQYLURU+yEJQCAGQQBOGyABoCIBIAGiIgFEgV4M/f//37+iRAAAAAAAAPA/oCABIAGiIgJEQjoF4VNVpT+ioCABIAKiIAFEaVDu4EKT+T6iRCceD+iHwFa/oKKgtowLIAVBEGokAAvbCAEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAIANBAXENACADQQJxRQ0BIAEoAgAiAyAAaiEAIAEgA2siAUHg58EAKAIARgRAIAIoAgRBA3FBA0cNAUHY58EAIAA2AgAgAiACKAIEQX5xNgIEIAEgAEEBcjYCBCACIAA2AgAPCyABIAMQYgsCQAJAAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkHk58EAKAIARg0CIAJB4OfBACgCAEYNAyACIANBeHEiAhBiIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQeDnwQAoAgBHDQFB2OfBACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQJBHyECIABBgICACEkNAwwFC0Hk58EAIAE2AgBB3OfBAEHc58EAKAIAIABqIgA2AgAgASAAQQFyNgIEQeDnwQAoAgAgAUYEQEHY58EAQQA2AgBB4OfBAEEANgIACyAAQfDnwQAoAgAiAk0NBUHk58EAKAIAIgBFDQVB3OfBACgCACIDQSlJDQNBuOXBACEBA0AgACABKAIAIgRPBEAgACAEIAEoAgRqSQ0FCyABKAIIIQEMAAsAC0Hg58EAIAE2AgBB2OfBAEHY58EAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LAkBB0OfBACgCACICQQEgAEEDdnQiA3FFBEBB0OfBACACIANyNgIAIABB+AFxQcjlwQBqIgAhAgwBCyAAQfgBcSIAQcjlwQBqIQIgAEHQ5cEAaigCACEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPCyAAQSYgAEEIdmciAmt2QQFxIAJBAXRyQT5zIQIMAQtB+OfBAEHA5cEAKAIAIgAEf0EAIQEDQCABQQFqIQEgACgCCCIADQALQf8fIAEgAUH/H00bBUH/Hws2AgAgAiADTw0BQfDnwQBBfzYCAAwBCyABQgA3AhAgASACNgIcIAJBAnRBuOTBAGohAwJAQQEgAnQiBEHU58EAKAIAcUUEQCADIAE2AgAgASADNgIYIAEgATYCDCABIAE2AghB1OfBAEHU58EAKAIAIARyNgIADAELAkACQCAAIAMoAgAiAygCBEF4cUYEQCADIQIMAQsgAEEZIAJBAXZrQQAgAkEfRxt0IQQDQCADIARBHXZBBHFqIgUoAhAiAkUNAiAEQQF0IQQgAiEDIAIoAgRBeHEgAEcNAAsLIAIoAggiACABNgIMIAIgATYCCCABQQA2AhggASACNgIMIAEgADYCCAwBCyAFQRBqIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggLQfjnwQBB+OfBACgCAEEBayIANgIAIAANAEH458EAQcDlwQAoAgAiAAR/QQAhAQNAIAFBAWohASAAKAIIIgANAAtB/x8gASABQf8fTRsFQf8fCzYCAAsLywcBB38jAEHQAGsiASQAIAAoAgwhBAJAAkAgACgCFCICIAAoAhAiA0kEQANAIAIgBGotAAAiBUEJayIGQRlLDQJBASAGdEGTgIAEcUUEQCAGQRlHDQMgABBjIQIMBAsgACACQQFqIgI2AhQgAiADRw0ACyADIQILIAFBBTYCQCABQQhqIAQgAyACQQFqIgAgAyAAIANJGxAjIAFBQGsgASgCCCABKAIMENABIQIMAQsgBUH7AEcEQCABQQo2AkAgASAEIAMgAkEBaiIAIAMgACADSRsQIyABQUBrIAEoAgAgASgCBBDQASECDAELIAAgAC0AGEEBayIFOgAYAkACQAJAIAVB/wFxBEAgACACQQFqNgIUIAAQYyICDQIgABCFASICDQIgAiAAIAIbIQQgACgCFCICIAAoAhAiBkkEQCAAKAIMIQcDQCACIAdqLQAAIgVBCWsiA0EXS0EBIAN0QZOAgARxRXINAyAAIAJBAWoiAjYCFCACIAZHDQALCyABQQU2AkAgAUEYaiAEKAIMIAQoAhAiBSAEKAIUQQFqIgMgBSADIAVJGxAjIAFBQGsgASgCGCABKAIcENABIQIMAgsgAUEYNgJAIAFBEGogBCADIAJBAWoiACADIAAgA0kbECMgAUFAayABKAIQIAEoAhQQ0AEhAgwDCwJAAkAgBUHuAEYEQCAAIAJBAWoiBDYCFCAEIAZPDQIgACACQQJqIgM2AhQCQCAEIAdqLQAAQfUARw0AIAMgBCAGIAQgBksbIgRGDQMgACACQQNqIgU2AhQgAyAHai0AAEHsAEcEQCAFIQMMAQsgBCAFRg0DIAAgAkEEaiIDNgIUIAUgB2otAABB7ABGDQILIAFBCTYCQCABQThqIAcgBiADECMgAUFAayABKAI4IAEoAjwQ0AEhAgwDCyAEIAFBzwBqQcS7wQAQJCAEEI4BIQIMAgsgACAALQAYQQFqOgAYIAMgBkkEQANAIAMgB2otAAAiAkEJayIFQRdLQQEgBXRBk4CABHFFcg0EIAAgA0EBaiIDNgIUIAMgBkcNAAsgBiEDCyABQQM2AkAgAUEwaiAHIAYgAxAjIAFBQGsgASgCMCABKAI0ENABIQIMAwsgAUEFNgJAIAFBIGogByAGIAQQIyABQUBrIAEoAiAgASgCJBDQASECCyAAIAAtABhBAWo6ABgMAQsgAkH9AEYEQCAAIANBAWo2AhRBACECDAELIAFBCjYCQCABQShqIAcgBiADECMgAUFAayABKAIoIAEoAiwQ0AEhAgsgAUHQAGokACACC/MGAQl/IwBBMGsiASQAQX4hAgJAAkAgACgCBCIEIAAoAhAiA0kNACAAIAQgA2siBDYCBCAAIAAoAgAiAiADaiIINgIAAkACQAJAIANBAkYEQCACLQAAIgNBwQBrQV9xQQpqIANBMGsgA0E5SxsiBUEPSw0FIAItAAEiA0HBAGtBX3FBCmogA0EwayADQTlLGyIDQRBPDQVBfyECIAVBBHQgA3IiBcBBAE4NASAFQf8BcSIDQcABSQ0EAn9BAiADQeABSQ0AGkEDIANB8AFJDQAaIANB+AFPDQVBBAshA0EAIQIgAUEAOgALIAFBADsACSABIAU6AAggASADNgIEIANBAXRBAmshCSABIAFBCGo2AgAgAUEJaiEFA0AgBEECSQ0EIAAgBEECayIENgIEIAAgAiAIaiIGQQJqNgIAIAYtAAAiB0HBAGtBX3FBCmogB0EwayAHQTlLGyIHQQ9LDQYgBkEBai0AACIGQcEAa0FfcUEKaiAGQTBrIAZBOUsbIgZBEE8NBiAFIAdBBHQgBnI6AAAgBUEBaiEFIAkgAkECaiICRw0ACwwCC0GQtsEAQShBvMTAABDqAQALQQEhAyABQQE2AgQgAUEAOgALIAFBADsACSABIAU6AAggASABQQhqNgIACyABQRhqIAFBCGogAxBCIAEoAhgNACABIAEoAiAiAjYCECABIAEoAhwiADYCDCAAIAJqIQMCQCACRQ0AIAMCfyAALAAAIgJBAE4EQCACQf8BcSECIABBAWoMAQsgAC0AAUE/cSEFIAJBH3EhBCACQV9NBEAgBEEGdCAFciECIABBAmoMAQsgAC0AAkE/cSAFQQZ0ciEFIAJBcEkEQCAFIARBDHRyIQIgAEEDagwBCyAEQRJ0QYCA8ABxIAAtAANBP3EgBUEGdHJyIQIgAEEEagsiBEYNAiAELAAAQQBODQALIAECf0EAIQIgAyAAayIEQRBPBEAgACAEEDcMAQsgACADRwRAA0AgAiAALAAAQb9/SmohAiAAQQFqIQAgBEEBayIEDQALCyACCzYCFCABIAFBFGqtQoCAgIAwhDcDKCABIAFBDGqtQoCAgIDwBYQ3AyAgASABrUKAgICAgAaENwMYQZWcwAAgAUEYakGsxMAAEMoBAAtBfyECCyABQTBqJAAgAg8LQczEwAAQkQIAC9MHAgd/An4jAEFAaiICJAACQAJ/AkACQAJAAn8CQAJAAkACQCABKAIUIgMgASgCECIESQRAIAEoAgwhBQNAIAMgBWotAAAiBkEJayIIQRdLQQEgCHRBk4CABHFFckUEQCABIANBAWoiAzYCFCADIARHDQEMAwsLIAZB7gBGDQcLIAEoAgwhBSADIARPDQEDQAJAIAMgBWotAAAiBkEJaw4lAAAFBQAFBQUFBQUFBQUFBQUFBQUFBQUABQUFBQUFBQUFBQUFBAULIAEgA0EBaiIDNgIUIAMgBEcNAAsLIAQhAwsgAkEFNgIoIAIgBSAEIANBAWoiASAEIAEgBEkbECMgAkEoaiACKAIAIAIoAgQQ0AEMBgsgASADQQFqNgIUIAJBGGogAUEAEDYgAikDGCIKQn9RDQQgAikDICEJAkACQAJAIAqnQQFrDgIBAgALIAJBAzoAKCACIAk3AzAgAkEoaiACQT9qQfC1wQAQpAEMAwsgCUKAgICAEFQNAyACQQE6ACggAiAJNwMwIAJBKGogAkE/akHwtcEAEKUBDAILIAlCgICAgBBUDQIgAkECOgAoIAIgCTcDMCACQShqIAJBP2pB8LXBABClAQwBCyAGQTBrQf8BcUEKTwRAIAEgAkE/akHwtcEAECQgARCOAQwFCyACQRhqIAFBARA2IAIpAxgiCkJ/UQRAIAIoAiAMBQsgAikDICEJAkACQAJAIAqnQQFrDgIBAgALIAJBAzoAKCACIAk3AzAgAkEoaiACQT9qQfC1wQAQpAEMAgsgCUKAgICAEFQNAiACQQE6ACggAiAJNwMwIAJBKGogAkE/akHwtcEAEKUBDAELIAlCgICAgBBUDQEgAkECOgAoIAIgCTcDMCACQShqIAJBP2pB8LXBABClAQsgARCOAQwDCyAAIAk+AgQgAEEBNgIADAMLIAEgA0EBaiIHNgIUAn8CQCAEIAdNDQAgASADQQJqIgY2AhQCQAJAIAUgB2otAABB9QBHDQAgBiAHIAQgBCAHSRsiB0YNAiABIANBA2oiCDYCFCAFIAZqLQAAQewARwRAIAghBgwBCyAHIAhGDQIgASADQQRqIgY2AhQgBSAIai0AAEHsAEYNAQsgAkEJNgIoIAJBEGogBSAEIAYQIyACQShqIAIoAhAgAigCFBDQAQwCCyAAQQA2AgAMBAsgAkEFNgIoIAJBCGogBSAEIAcQIyACQShqIAIoAgggAigCDBDQAQshAyAAQQI2AgAgACADNgIEDAILIAIoAiALIQMgAEECNgIAIAAgAzYCBAsgAkFAayQAC+UGAQV/AkACQAJAAkACQAJAAkAgAEEEayIHKAIAIghBeHEiBEEEQQggCEEDcSIFGyABak8EQCAFQQAgAUEnaiIGIARJGw0BAkAgAkEJTwRAIAIgAxBcIgINAUEADwtBACECIANBzP97Sw0IQRAgA0ELakF4cSADQQtJGyEBIABBCGshBiAFRQRAIAZFIAFBgAJJciAEIAFrQYCACEsgASAET3JyDQcgAA8LIAQgBmohBQJAIAEgBEsEQCAFQeTnwQAoAgBGDQFB4OfBACgCACAFRwRAIAUoAgQiCEECcQ0JIAhBeHEiCCAEaiIEIAFJDQkgBSAIEGIgBCABayIFQRBPBEAgByABIAcoAgBBAXFyQQJyNgIAIAEgBmoiASAFQQNyNgIEIAQgBmoiBCAEKAIEQQFyNgIEIAEgBRA8DAkLIAcgBCAHKAIAQQFxckECcjYCACAEIAZqIgEgASgCBEEBcjYCBAwIC0HY58EAKAIAIARqIgQgAUkNCAJAIAQgAWsiBUEPTQRAIAcgCEEBcSAEckECcjYCACAEIAZqIgEgASgCBEEBcjYCBEEAIQVBACEBDAELIAcgASAIQQFxckECcjYCACABIAZqIgEgBUEBcjYCBCAEIAZqIgQgBTYCACAEIAQoAgRBfnE2AgQLQeDnwQAgATYCAEHY58EAIAU2AgAMBwsgBCABayIEQQ9NDQYgByABIAhBAXFyQQJyNgIAIAEgBmoiASAEQQNyNgIEIAUgBSgCBEEBcjYCBCABIAQQPAwGC0Hc58EAKAIAIARqIgQgAUsNBAwGCyADIAEgASADSxsiAwRAIAIgACAD/AoAAAsgBygCACIDQXhxIgcgAUEEQQggA0EDcSIBG2pJDQIgAUUgBiAHT3INBkGI18EAQS5BuNfBABDqAQALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0HI1sEAQS5B+NbBABDqAQALIAcgASAIQQFxckECcjYCACABIAZqIgUgBCABayIBQQFyNgIEQdznwQAgATYCAEHk58EAIAU2AgALIAZFDQAgAA8LIAMQGCIBRQ0BIANBfEF4IAcoAgAiAkEDcRsgAkF4cWoiAiACIANLGyICBEAgASAAIAL8CgAACyABIQILIAAQLQsgAgv8CAEEfyMAQSBrIgIkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4YAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYAAsgASgCACAAKAIEIAAoAgggASgCBCgCDBEAACEBDBgLAkACQAJAAkAgAC0ABEEBaw4DAQIDAAsgAiAAKAIINgIAQRQQGCIARQ0bIABBnNrBACgAADYAECAAQYzawQD9AAAA/QsAACACQRQ2AgwgAiAANgIIIAJBFDYCBCACIAKtQoCAgICwBoQ3AxggAiACQQRqrUKAgICAwAaENwMQIAEoAgAgASgCBEGun8AAIAJBEGoQRyEBIAIoAgQiAEUNGiACKAIIIgRBBGsoAgAiA0F4cSIFQQRBCCADQQNxIgMbIABqSQ0cIANBACAFIABBJ2pLGw0dIAQQLQwaCyABKAIAIAAtAAVBAnQiACgCzN9BIAAoAqTeQSABKAIEKAIMEQAAIQEMGQsgASAAKAIIIgAoAgAgACgCBBBEIQEMGAsgACgCCCIAKAIAIAEgACgCBCgCEBEBACEBDBcLIAEoAgBBtK7BAEEYIAEoAgQoAgwRAAAhAQwWCyABKAIAQcyuwQBBGyABKAIEKAIMEQAAIQEMFQsgASgCAEHnrsEAQRogASgCBCgCDBEAACEBDBQLIAEoAgBBga/BAEEZIAEoAgQoAgwRAAAhAQwTCyABKAIAQZqvwQBBDCABKAIEKAIMEQAAIQEMEgsgASgCAEGmr8EAQRMgASgCBCgCDBEAACEBDBELIAEoAgBBua/BAEETIAEoAgQoAgwRAAAhAQwQCyABKAIAQcyvwQBBDiABKAIEKAIMEQAAIQEMDwsgASgCAEHar8EAQQ4gASgCBCgCDBEAACEBDA4LIAEoAgBB6K/BAEEMIAEoAgQoAgwRAAAhAQwNCyABKAIAQfSvwQBBDiABKAIEKAIMEQAAIQEMDAsgASgCAEGCsMEAQQ4gASgCBCgCDBEAACEBDAsLIAEoAgBBkLDBAEETIAEoAgQoAgwRAAAhAQwKCyABKAIAQaOwwQBBGiABKAIEKAIMEQAAIQEMCQsgASgCAEG9sMEAQT4gASgCBCgCDBEAACEBDAgLIAEoAgBB+7DBAEEUIAEoAgQoAgwRAAAhAQwHCyABKAIAQY+xwQBBNCABKAIEKAIMEQAAIQEMBgsgASgCAEHDscEAQSwgASgCBCgCDBEAACEBDAULIAEoAgBB77HBAEEkIAEoAgQoAgwRAAAhAQwECyABKAIAQZOywQBBDiABKAIEKAIMEQAAIQEMAwsgASgCAEGhssEAQRMgASgCBCgCDBEAACEBDAILIAEoAgBBtLLBAEEcIAEoAgQoAgwRAAAhAQwBCyABKAIAQdCywQBBGCABKAIEKAIMEQAAIQELIAJBIGokACABDwtBAUEUEOQBAAtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQAL0QYCEX8BfiMAQRBrIgokACAKQQRqrUKAgICAMIQhFCAALQAMIQ8gACgCBCERIAAoAgAhECAAKAIIIghBBGohCQJ/A0ACQCAMIhINACADIQtBASEMAkACfyACIAZPBEADQCABIAZqIQUCQAJAAkACQAJAAkACQAJAIAIgBmsiB0EITwRAIAVBA2pBfHEiAyAFRg0BIAMgBWshBEEAIQMDQCADIAVqLQAAQQpGDQkgBCADQQFqIgNHDQALIAQgB0EIayIDSw0DDAILIAIgBkYNAyAFLQAAQQpGBEBBACEDDAgLIAdBAUYNBSAFLQABQQpGBEBBASEDDAgLIAdBAkYNBSAFLQACQQpGBEBBAiEDDAgLIAdBA0YNBSAFLQADQQpGBEBBAyEDDAgLIAdBBEYNBSAFLQAEQQpGBEBBBCEDDAgLIAdBBUYNBSAFLQAFQQpGBEBBBSEDDAgLIAdBBkYNBSAFLQAGQQpHDQVBBiEDDAcLIAdBCGshA0EAIQQLA0BBgIKECCAEIAVqIg4oAgAiE0GKlKjQAHNrIBNyQYCChAggDkEEaigCACIOQYqUqNAAc2sgDnJxQYCBgoR4cUGAgYKEeEcNASAEQQhqIgQgA00NAAsLIAQgB0cNAQsgAiEGIAsMBgsgBCAFaiEFIAIgBGsgBmshB0EAIQMDQCADIAVqLQAAQQpGDQIgByADQQFqIgNHDQALCyACIQYgCwwECyADIARqIQMLIAMgBmoiBEEBaiEGAkAgAiAETQ0AIAEgBGotAABBCkcNAEEAIQwgBiEDDAQLIAIgBk8NAAsLIAsLIQMgAiEECwJAIA9BAXFFBEAgAEEBOgAMIBAEQCAKIBE2AgQgCiAUNwMIIAgoAgAgCSgCAEGgpMAAIApBCGoQR0UNAkEBDAULIAgoAgBB2sDAAEEEIAkoAgAoAgwRAAANAgwBCyANRQ0AIAgoAgBBCiAJKAIAKAIQEQEADQEgEARAIAgoAgBBq6TAAEEHIAkoAgAoAgwRAAANAgwBCyAIKAIAQdrAwABBBCAJKAIAKAIMEQAADQELIA1BAWohDUEBIQ8gCCgCACABIAtqIAQgC2sgCSgCACgCDBEAAEUNAQsLIBJBAXMLIApBEGokAEEBcQuxBgEMfyMAQRBrIgkkAEEBIQsCQCACKAIAIgpBIiACKAIEIgwoAhAiDREBAA0AAkACQCABRQRAQQAhAUEAIQIMAQsgASEEIAAhCANAIAQgCGohDkEAIQICQAJAA0AgAiAIaiIGLQAAIgdB/wBrQf8BcUGhAUkgB0EiRnIgB0HcAEZyDQEgBCACQQFqIgJHDQALIAQgBWohBQwBCwJ/IAYsAAAiBEEATgRAIARB/wFxIQQgBkEBagwBCyAGLQABQT9xIQcgBEEfcSEIIARBX00EQCAIQQZ0IAdyIQQgBkECagwBCyAGLQACQT9xIAdBBnRyIQcgBEFwSQRAIAcgCEEMdHIhBCAGQQNqDAELIAhBEnRBgIDwAHEgBi0AA0E/cSAHQQZ0cnIhBCAGQQRqCyEIIAIgBWohAiAJIARBgYAEEEMCQCAJLQANIgUgCS0ADCIGayIHQf8BcUEBRg0AAkACQAJAIAIgA0kNAAJAIANFDQAgASADTQRAIAEgA0cNAgwBCyAAIANqLAAAQb9/TA0BCwJAIAJFDQAgASACTQRAIAEgAkYNAQwCCyAAIAJqLAAAQb9/TA0BCyAKIAAgA2ogAiADayAMKAIMIgMRAABFDQEMAgsgACABIAMgAkGQwcAAEIQCAAsCQCAFQYEBTwRAIAogCSgCACANEQEADQIMAQsgCiAGIAlqIAcgAxEAAA0BCyAEQYABSQRAIAJBAWohAwwCCyAEQYAQSQRAIAJBAmohAwwCC0EDQQQgBEGAgARJGyACaiEDDAELDAULAn9BASAEQYABSQ0AGkECIARBgBBJDQAaQQNBBCAEQYCABEkbCyACaiEFIA4gCGsiBA0BCwsgAyAFSw0BQQAhAgJAIANFDQAgASADTQRAIAMgASICRw0DDAELIAMiAiAAaiwAAEG/f0wNAgsgBUUEQEEAIQEMAQsgASAFTQRAIAEgBUYNASACIQMMAgsgACAFaiwAAEG/f0wEQCACIQMMAgsgBSEBCyAKIAAgAmogASACayAMKAIMEQAADQEgCkEiIA0RAQAhCwwBCyAAIAEgAyAFQaDBwAAQhAIACyAJQRBqJAAgCwvwBwIHewZ9IAEqAgggBCoCCJMiDyAGKgIMIg4gBv1dAgAiCCAP/RMgAf1dAgAgBP1dAgD95QEiB/0NAAECAxAREhMAAQIDAAECA/3mASAHIAYqAggiEv0TIAj9DQABAgMQERITAAECAwABAgMiCf3mAf3lASIK/R8BlCAI/R8BIhEgB/0fASASlCAPIBGUkyIPlCAI/R8AIhAgCv0fACITlJOSIhIgEpKSIRIgByAOIA+U/RMgDiATlP0gASAJIAr95gEgBkEEav1dAgAiCyAKIAj9DQQFBgcAAQIDAAECAwABAgMgD/0gAf3mAf3lAf3kASIHIAf95AH95AEhByACKgIIIA4gCCAC/V0CBCIIIAL9XQIAIgr9DQQFBgcQERITAAECAwABAgMiDf3mASAJIAr95gH95QEiDP0fAZQgESAJIAj95gEgCyAN/eYB/eUBIgj9HwCUIBAgCP0fAZSTkiIPIA+SkiEPIAogDv0TIAj95gEgCSAM/eYBIAsgDCAI/Q0EBQYHEBESEwABAgMAAQID/eYB/eUB/eQBIgggCP3kAf3kASEIAn8CQAJAQwAAgD8gAyADIANcGyIDQwAAgD8gA0MAAIA/XhtDAACAQJRDAABAwJIiAyAFKgIIlCIOIA4gA/0TIAX9XQIA/eYBIgn9HwEiESAJ/R8AIgMgAyADXBsiECAQIBEgESARXBsiEyAQIBNeGyIQIBAgEFwbIhAgECAOIA4gDlwbIhMgECATXhtDCtcjPJQiEF1FBEAgECARXkUEQCADIBBdRQRAIBJDAACAPyAOlSIDlCIOIAMgD5QiD5QgB/0MAACAPwAAgD8AAIA/AACAPyAJ/ecBIgn95gEiByAJIAj95gEiCP3mASIJ/R8AIAn9HwGSkiIDIAOUIAcgB/3mASIH/R8AIAf9HwGSIA4gDpSSQwAAgL+SIA8gD5QgCCAI/eYBIgf9HwAgB/0fAZKSIg6UkyIPQwAAAABdDQQgA4wgD5GTIA6VIQMMAwsgCP0fACIDi0O9N4Y1XQ0DIAf9HwEgCP0fASAH/R8AjCADlSIDlJIgEZUiESARlCASIA8gA5SSIA6VIg4gDpSSQwAAgD9eDQMMAgsgCP0fASIRi0O9N4Y1XQ0CIAcgEv0gASAIIA/9IAEgB/0fAYwgEZUiA/0T/eYB/eQBIAkgDv0gAf3nASIHIAf95gEiB/0fACAH/R8BkkMAAIA/Xg0CDAELIA+LQ703hjVdDQEgByAIIBKMIA+VIgP9E/3mAf3kASAJ/ecBIgcgB/3mASIH/R8AIAf9HwGSQwAAgD9eDQELQQEMAQtBAAshBiAAIAM4AgQgACAGNgIAC5AIAgd/A34jAEEwayIDJAACQAJAIAACfgJAAkACQAJAAkACQAJAAkACQCABKAIUIgQgASgCECIHSQRAIAEgBEEBaiIGNgIUIAEoAgwiCCAEai0AACIFQTBGBEACQAJAAkAgBiAHSQRAIAYgCGotAAAiBUEwa0H/AXFBCkkNAyAFQS5GDQEgBUHFAEYgBUHlAEZyDQILIAKtIQtCAEKAgICAgICAgIB/IAIbDA4LIANBIGogASACQgBBABBbIAMoAiANDgwMCyADQSBqIAEgAkIAQQAQVCADKAIgRQ0LIAAgAygCJDYCCCAAQn83AwAMDgsgA0ENNgIgIANBCGogCCAHIARBAmoiASAHIAEgB0kbECMgA0EgaiADKAIIIAMoAgwQ0AEhASAAQn83AwAgACABNgIIDA0LIAVBMWtB/wFxQQlPBEAgA0ENNgIgIANBEGogCCAHIAYQIyADQSBqIAMoAhAgAygCFBDQASEBIABCfzcDACAAIAE2AggMDQsgBUEwa61C/wGDIQogBiAHTw0BA0AgBiAIai0AAEEwayIEQf8BcSIFQQpPDQIgBUEFSyAKQpmz5syZs+bMGVJyIApCmbPmzJmz5swZWnFFBEAgASAGQQFqIgY2AhQgCkIKfiAErUL/AYN8IQogBiAHRw0BDAQLCyADQSBqIQkgAiEFQQAhBAJAAkACQCABKAIQIgIgASgCFCIITQ0AIAhBAWohByACIAhrIQIgASgCDCAIaiEIA0AgBCAIai0AACIGQTBrQf8BcUEKTwRAIAZBLkYNAyAGQcUARyAGQeUAR3ENAiAJIAEgBSAKIAQQVAwECyABIAQgB2o2AhQgAiAEQQFqIgRHDQALIAIhBAsgCSABIAUgCiAEEHYMAQsgCSABIAUgCiAEEFsLIAMoAiBBAUYEQCAAIAMoAiQ2AgggAEJ/NwMADA0LIAAgAysDKDkDCCAAQgA3AwAMDAsgA0EFNgIgIANBGGogASgCDCAHIAQQIyADQSBqIAMoAhggAygCHBDQASEBIABCfzcDACAAIAE2AggMCwsgBiAHTw0AIAYgCGotAAAiBUEuRg0BIAVBxQBGIAVB5QBGcg0CCyACRQ0CQgEhCwwECyADQSBqIAEgAiAKQQAQWyADKAIgDQQMAgsgA0EgaiABIAIgCkEAEFQgAygCIEUNASAAIAMoAiQ2AgggAEJ/NwMADAcLQgAgCn0iDEIAUwRAQgIhCyAMIQoMAgsgCrq9QoCAgICAgICAgH+EIQoMAQsgAykDKCEKCyAAIAo3AwggACALNwMADAQLIAAgAygCJDYCCCAAQn83AwAMAwsgAykDKAs3AwggACALNwMADAELIAAgAygCJDYCCCAAQn83AwALIANBMGokAAvTCAIHewp/IAEgACAAQQNqQXxxIgprIgtqIgxBA3EhDUEAIQEgACAKRwRAA0AgASAALAAAQb9/SmohASAAQQFqIQAgC0EBaiILDQALCwJAIA1FDQAgCiAMQfz///8HcWoiACwAAEG/f0ohCSANQQFGDQAgCSAALAABQb9/SmohCSANQQJGDQAgCSAALAACQb9/SmohCQsgDEECdiELIAEgCWohDAJAA0AgCiEJIAtFDQFBwAEgCyALQcABTxsiDkEDcSEPAkAgDkECdCIQQfAHcSIRRQRAQQAhAQwBC0EAIQEgCSEAIBBBEGsiCkEwTwRAIAAgCkEEdkEBaiISQfz///8BcSINQQR0aiEA/QwAAAAAAAAAAAAAAAAAAAAAIQIgDSEKIAkhAQNAIAH9AAIAIgMgAf0AAhAiBP0NDA0ODxwdHh8AAQIDAAECAyAB/QACICIGIAH9AAIwIgf9DQABAgMAAQIDDA0ODxwdHh/9DQABAgMEBQYHGBkaGxwdHh8iBf1NQQf9rQEgBUEG/a0B/VD9DAEBAQEBAQEBAQEBAQEBAQEiBf1OIAMgBP0NCAkKCxgZGhsAAQIDAAECAyAGIAf9DQABAgMAAQIDCAkKCxgZGhv9DQABAgMEBQYHGBkaGxwdHh8iCP1NQQf9rQEgCEEG/a0B/VAgBf1OIAMgBP0NBAUGBxQVFhcAAQIDAAECAyAGIAf9DQABAgMAAQIDBAUGBxQVFhf9DQABAgMEBQYHGBkaGxwdHh8iCP1NQQf9rQEgCEEG/a0B/VAgBf1OIAMgBP0NAAECAxAREhMAAQIDAAECAyAGIAf9DQABAgMAAQIDAAECAxAREhP9DQABAgMEBQYHGBkaGxwdHh8iA/1NQQf9rQEgA0EG/a0B/VAgBf1OIAL9rgH9rgH9rgH9rgEhAiABQUBrIQEgCkEEayIKDQALIAIgAiAD/Q0ICQoLDA0ODwABAgMAAQID/a4BIgIgAiAC/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQEgDSASRg0BCyAJIBFqIQoDQCAAQQhq/V0CACIC/U1BB/2tASACQQb9rQH9UP0MAQEBAQEBAQEBAQEBAQEBASIC/U4iA/0bASAA/V0CACIE/U1BB/2tASAEQQb9rQH9UCAC/U4iAv0bASAC/RsAIAFqaiAD/RsAamohASAAQRBqIgAgCkcNAAsLIAsgDmshCyAJIBBqIQogAUEIdkH/gfwHcSABQf+B/AdxakGBgARsQRB2IAxqIQwgD0UNAAsCfyAJIA5B/AFxQQJ0aiIBKAIAIgBBf3NBB3YgAEEGdnJBgYKECHEiACAPQQFGDQAaIAAgASgCBCIAQX9zQQd2IABBBnZyQYGChAhxaiIAIA9BAkYNABogACABKAIIIgBBf3NBB3YgAEEGdnJBgYKECHFqCyIAQQh2Qf+BHHEgAEH/gfwHcWpBgYAEbEEQdiAMaiEMCyAMC5YGAQZ/AkAgAEEgSQRADAELIABB/wBJBEBBASEBDAELAkACQCAAQYCABE8EQCAAQYCACEkNASAAQf7//wBxIgFBrp0LRyAAQeD//wBxQeDNCkcgAUGe8ApHcXEgAEHw1wtrQXFJcSAAQYDwC2tB3mxJcSAAQYCADGtBnnRJcSAAQdCmDGtBe0lxIABBgII4a0H65lRJcSAAQfCDOElxIQEMAwsgAEEIdkH/AXEhBQNAIAFBAmohBiACIAEtAKa6QCIDaiEEIAUgAS0ApbpAIgFHBEAgASAFSw0DIAQhAiAGIgFBzABHDQEMAwsCQAJAIAIgBEsgBEGcAktyRQRAIANFDQIgAkHxusAAaiEBDAELIAIgBEGcAkG0v8AAEG8ACwNAIAEtAAAgAEH/AXFHBEAgAUEBaiEBIANBAWsiAw0BDAILC0EAIQEMBAsgBCECIAYiAUHMAEcNAAsMAQsgAEEIdkH/AXEhBQNAAkAgAUECaiEGIAIgAS0A/rNAIgNqIQQgBSABLQD9s0AiAUcEQCABIAVLDQEgBCECIAYiAUHcAEcNAgwBCwJAAkAgAiAESyAEQdQBS3JFBEAgA0UNAiACQdm0wABqIQEMAQsgAiAEQdQBQbS/wAAQbwALA0AgAS0AACAAQf8BcUcEQCABQQFqIQEgA0EBayIDDQEMAgsLQQAhAQwECyAEIQIgBiIBQdwARw0BCwsgAEH//wNxIQRBASEBQQAhAANAIABBAWohAgJAIAAsAK22QCIDQQBOBEAgAiEADAELIAJB+ANHBEAgAEGutsAAai0AACADQf8AcUEIdHIhAyAAQQJqIQAMAQtBxL/AABCRAgALIAQgA2siBEEASA0CIAFBAXMhASAAQfgDRw0ACwwBC0EBIQFBACEDA0AgA0EBaiECAkAgAywAjb1AIgRBAE4EQCACIQMMAQsgAkGkAkcEQCADQY69wABqLQAAIARB/wBxQQh0ciEEIANBAmohAwwBC0HEv8AAEJECAAsgACAEayIAQQBIDQEgAUEBcyEBIANBpAJHDQALCyABQQFxC4MHAgV/AX4jAEFAaiIHJAAgACgCBCEKIAAoAgAhCCAHQQA2AgQCQAJAIAgtABBBAUcNACAIKAIAIQkCQAJAAkAgCkUEQCAHIAhBDGqtQoCAgIAwhDcDCCAJKAIAIAkoAgRBxdjBACAHQQhqIgsQRw0CIAgtABBBAUcNASAIKAIAIQkgB0KAgICAoAE3AxAgByAHQQRqrUKAgICA8AGENwMIIAkoAgAgCSgCBEHQ2MEAIAsQRw0CDAELIAkoAgBB3NjBAEEGIAkoAgQoAgwRAAANASAILQAQQQFHDQAgCCgCACEJIAdCgICAgNABNwMQIAdCpNjBgKABNwMIIAkoAgAgCSgCBEGs2MEAIAdBCGoQRw0BCwJAAkAgASgCAEF/RwRAQoCAgICAAiEMIAgtABBFDQEgByABKQIgNwMoIAcgAf0AAhD9CwMYIAcgAf0AAgD9CwMIIAgoAgAhASAHIAwgB0EIaq2ENwMwIAEoAgAgASgCBEG1hcAAIAdBMGoQR0UNAgwDCyAIKAIAIgEoAgBB4tjBAEEJIAEoAgQoAgwRAAANAgwBCyAHIAEpAiA3AyggByAB/QACEP0LAxggByAB/QACAP0LAwggCCgCACEBIAcgDCAHQQhqrYQ3AzAgASgCACABKAIEQevYwQAgB0EwahBHDQELIAgoAgAiASgCAEHE2MEAQQEgASgCBCgCDBEAAA0AIANBAXFFIAIoAgBBAkZyDQIgByAENgI8AkAgCC0AEEEBRgRAIAgoAgAhASAHQoCAgICgATcDECAHQqTYwYCgATcDCCABKAIAIAEoAgRBrNjBACAHQQhqEEcNAQsgCCgCACIBKAIAQbTYwQBBECABKAIEKAIMEQAADQAgCCgCBCAIKAIIIQMgByAIKAIAIgQ2AgggByACKQIANwIMIAcgAigCCDYCFCAEIAdBDGogAygCEBEAAA0AIAgoAgAhASAHQoCAgIAwIgwgB0E8aq2ENwMIIAEoAgAgASgCBEGugMAAIAdBCGoiAxBHDQBBASEBIAVBAUcNAiAHIAY2AjAgCCgCACECIAcgDCAHQTBqrYQ3AwggAigCACACKAIEQa6AwAAgAxBHRQ0CC0EBIQEMAwtBASEBDAILIAgoAgAiAigCAEHE2MEAQQEgAigCBCgCDBEAAA0BCyAAIApBAWo2AgRBACEBCyAHQUBrJAAgAQv4BgEHfyMAQUBqIgEkAAJAAkAgACgCAEUEQCAAKAIQIgBFDQEgAEHhwsAAQQEQRCECDAILIAFBBGogABCBAQJAAn8gASgCBCICRQRAIAEtAAghBCAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgBEEBcSIDG0EZQRAgAxsQRA0FCyAAIAQ6AARBAAwBCwJAIAEoAggiBEEBcQ0AIAFCgICAgCA3AhAgASAEQf7///8HcSIDNgIIIAEgAjYCBCABIAIgA2oiBTYCDANAAkAgAUEEahAvQQJqDgIAAgELCyAAKAIQIgRFDQMgBCgCAEEiIAQoAgQoAhARAQANAiABQoCAgIAgNwIQIAEgBTYCDCABIAM2AgggASACNgIEA0ACQAJ/AkACQAJAAkACQCABQQRqEC8iAEECag4CAgABC0HMxcAAQSsgAUE/akG8xcAAQYzNwAAQrgEACyAAQSdHBEACQAJAAkACQAJAAkAgAEEhTARAIABBCWsOBQIECgoDAQsgAEEiRg0FIABB3ABGDQQMCQsgAA0IIAFCADcBGiABQdzgADsBGAwHCyABQgA3ARogAUHc6AE7ARgMBgsgAUIANwEaIAFB3OQBOwEYDAULIAFCADcBGiABQdzcATsBGAwECyABQgA3ARogAUHcuAE7ARgMAwsgAUIANwEaIAFB3MQAOwEYDAILIAQoAgBBJyAEKAIEKAIQEQEADQgMBQsgBCgCAEEiIAQoAgQoAhARAQAhAgwJC0ECIQNBAAwBCwJAAkACQCAAQf8FTQ0AIAAQZUUNAAwBCyAAEDgNAQsgAUEoaiAAEIYBIAEgAS8AMDsBICABIAEpACg3AxggAS0AMiECIAEtADMhAyABIAEvASA7ATAgASABKQMYNwMoIAJB/wFxIANB/wFxTw0DDAILIAEgADYCGEGBASEDQYABCyECIAEgAS8BIDsBMCABIAEpAxg3AygLIANB/wFxIQUgAkH/AXEhAyAEKAIAIQYgBCgCBCgCECEHIAEoAighAANAIAAhAiAGIAVBgAFNBH8gAUEoaiADai0AAAUgAgsgBxEBAA0EIANBAWoiAyAFRw0ACwwACwALIAAoAhAiAgRAIAJBuMLAAEEQEEQNAgsgAEEAOgAEQQALIQIgACACNgIADAILQQEhAgwBC0EAIQILIAFBQGskACACC7EGAQZ/IwBB8ABrIgIkAAJ/AkACQAJAIAAoAgAiAUUNAAJAIAAoAggiAyAAKAIEIgVPDQAgASADai0AAEHVAEcNAEEBIQQgACADQQFqIgM2AggLAkACQAJAIAMgBUkEQCABIANqLQAAQcsARg0BCyAERQ0DQQAhAwwBCyAAIANBAWoiBjYCCAJAAkAgBSAGTQ0AIAEgBmotAABBwwBHDQAgACADQQJqNgIIQQEhAUHcxMAAIQMMAQsgAkHIAGogABA/IAIoAkgiA0UEQCACLQBMIQEgACgCECIEBEBBASAEQcjCwABBuMLAACABQQFxIgQbQRlBECAEGxBEDQgaCyAAIAE6AAQgAEEANgIAQQAMBwsgAigCTCIBBEAgAigCVEUNAQsgACgCECIBBEAgAUG4wsAAQRAQRA0FCyAAQQA6AAQgAEEANgIAQQAMBgsgBEUNAQsgACgCECIEBEAgBEHdxMAAQQcQRA0DCyADRQ0BCyAAKAIQIgQEQCAEQeTEwABBCBBEDQILIAJBATsBRCACIAE2AkAgAkEANgI8IAJBAToAOCACQd8ANgI0IAIgATYCMCACQQA2AiwgAiABNgIoIAIgAzYCJCACQd8ANgIgIAJBGGogAkEgahBXIAIoAhgiAQRAIAQEQCAEIAEgAigCHBBEDQMLIAJByABqIAJBIGpBKPwKAAAgBCEBA0AgASEDAkADQCADIQUgAkEQaiACQcgAahBXIAIoAhAiBkUNAUEAIQMgBUUNAAsgAigCFCEDIAVB/sTAAEEBEEQNBEEAIQEgBEUNASAEIgEgBiADEEQNBAwBCwsgAUUNASABQfzEwABBAhBERQ0BDAILQezEwAAQkQIACyAAKAIQIgEEQCABQf/EwABBAxBEDQELIAJBCGogABCQAUEBIAIoAghBAXENAhogACgCECIBBEBBASABQYLFwABBARBEDQMaCyAAKAIAIgNFDQEgACgCCCIBIAAoAgRPDQEgASADai0AAEH1AEcNASAAIAFBAWo2AghBAAwCC0EBDAELIAAoAhAiAQRAQQEgAUGDxcAAQQQQRA0BGgsgABAmCyACQfAAaiQAC70GAQR/IAAgAWohAgJAAkACQAJAAkACQCAAKAIEIgNBAXENACADQQJxRQ0BIAAoAgAiAyABaiEBIAAgA2siAEHg58EAKAIARgRAIAIoAgRBA3FBA0cNAUHY58EAIAE2AgAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCACIAE2AgAPCyAAIAMQYgsCQAJAIAIoAgQiA0ECcUUEQCACQeTnwQAoAgBGDQIgAkHg58EAKAIARg0EIAIgA0F4cSIDEGIgACABIANqIgFBAXI2AgQgACABaiABNgIAIABB4OfBACgCAEcNAUHY58EAIAE2AgAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAk8EQEEfIQIgAUGAgIAISQ0EDAULAkBB0OfBACgCACICQQEgAUEDdnQiA3FFBEBB0OfBACACIANyNgIAIAFB+AFxQcjlwQBqIgEhAgwBCyABQfgBcSIBQcjlwQBqIQIgAUHQ5cEAaigCACEBCyACIAA2AgggASAANgIMDAULQeTnwQAgADYCAEHc58EAQdznwQAoAgAgAWoiATYCACAAIAFBAXI2AgQgAEHg58EAKAIARw0AQdjnwQBBADYCAEHg58EAQQA2AgALDwtB4OfBACAANgIAQdjnwQBB2OfBACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgAPCyABQSYgAUEIdmciA2t2QQFxIANBAXRyQT5zIQILIABCADcCECAAIAI2AhwgAkECdEG45MEAaiEEQQEgAnQiA0HU58EAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghB1OfBAEHU58EAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWoiBCgCECICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGAwBCyAEQRBqIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggPCyAAIAI2AgwgACABNgIIC+YFAQd/IwBBMGsiAyQAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEoAhQiAiABKAIQIgRJBEAgASgCDCEHA0AgAiAHai0AACIGQQlrIghBF0tBASAIdEGTgIAEcUVyRQRAIAEgAkEBaiICNgIUIAIgBEcNAQwDCwsgBkHuAEYNCQsgASgCDCEHIAIgBE8NASABQQxqIQgDQCACIAdqLQAAQQlrIgZBGUsNB0EBIAZ0QZOAgARxRQRAIAZBGUcNCCABQQA2AgggASACQQFqNgIUIANBIGogCCABECUgAygCJCIFIAMoAiAiAUECRg0JGiADKAIoIQIgAUEBRw0FIAJBAEgNDCACDQRBASEBDAcLIAEgAkEBaiICNgIUIAIgBEcNAAsLIAQhAgsgA0EFNgIgIANBCGogByAEIAJBAWoiASAEIAEgBEkbECMgA0EgaiADKAIIIAMoAgwQ0AEMBQsgAhAYIgENAUEBIAIQ5AEACyACQQBIDQYgAkUEQEEBIQEMAgsgAhAYIgFFDQcLIAJFDQAgASAFIAL8CgAACyAAIAI2AgggACABNgIEIAAgAjYCAAwDCyABIANBL2pBlLvBABAkIAEQjgELIQUgAEF+NgIAIAAgBTYCBAwBCyABIAJBAWoiBTYCFAJ/AkAgBCAFTQ0AIAEgAkECaiIGNgIUAkACQCAFIAdqLQAAQfUARw0AIAYgBSAEIAQgBUkbIgVGDQIgASACQQNqIgg2AhQgBiAHai0AAEHsAEcEQCAIIQYMAQsgBSAIRg0CIAEgAkEEaiIGNgIUIAcgCGotAABB7ABGDQELIANBCTYCICADQRhqIAcgBCAGECMgA0EgaiADKAIYIAMoAhwQ0AEMAgsgAEF/NgIADAILIANBBTYCICADQRBqIAcgBCAFECMgA0EgaiADKAIQIAMoAhQQ0AELIQIgAEF+NgIAIAAgAjYCBAsgA0EwaiQADwsQkwIAC0EBIAIQ5AEAC4kGAgd/An4jAEEwayICJAACQAJAIAACfQJAAn8CQAJAAkACQAJAIAEoAhQiAyABKAIQIgRJBEAgASgCDCEFA0AgAyAFai0AACIGQQlrIghBF0tBASAIdEGTgIAEcUVyRQRAIAEgA0EBaiIDNgIUIAMgBEcNAQwDCwsgBkHuAEYNCQsgASgCDCEFIAMgBE8NAQNAAkAgAyAFai0AACIGQQlrDiUAAAUFAAUFBQUFBQUFBQUFBQUFBQUFBQAFBQUFBQUFBQUFBQUEBQsgASADQQFqIgM2AhQgAyAERw0ACwsgBCEDCyACQQU2AhggAiAFIAQgA0EBaiIBIAQgASAESRsQIyACQRhqIAIoAgAgAigCBBDQAQwDCyABIANBAWo2AhQgAkEYaiABQQAQNiACKQMYIgpCf1ENASACKQMgIQkCQAJAIAqnQQFrDgIAAQULIAm1DAULIAm0DAQLIAZBMGtB/wFxQQpPBEAgASACQS9qQYC2wQAQJCABEI4BDAILIAJBGGogAUEBEDYgAikDGCIKQn9RDQAgAikDICEJAkACQAJAIAqnQQFrDgIBAgALIAm/tkMAAIA/QwAAgL8gCUIAWRuYDAULIAm1DAQLIAm0DAMLIAIoAiALIQMgAEECNgIAIAAgAzYCBAwDCyAJv7ZDAACAP0MAAIC/IAlCAFkbmAs4AgQgAEEBNgIADAELIAEgA0EBaiIHNgIUAn8CQCAEIAdNDQAgASADQQJqIgY2AhQCQAJAIAUgB2otAABB9QBHDQAgBiAHIAQgBCAHSRsiB0YNAiABIANBA2oiCDYCFCAFIAZqLQAAQewARwRAIAghBgwBCyAHIAhGDQIgASADQQRqIgY2AhQgBSAIai0AAEHsAEYNAQsgAkEJNgIYIAJBEGogBSAEIAYQIyACQRhqIAIoAhAgAigCFBDQAQwCCyAAQQA2AgAMAgsgAkEFNgIYIAJBCGogBSAEIAcQIyACQRhqIAIoAgggAigCDBDQAQshAyAAQQI2AgAgACADNgIECyACQTBqJAALlQUCBn8BfgJAIAEoAggiAiABKAIEIgRPDQAgASgCACACai0AAEH1AEcNAEEBIQcgASACQQFqIgI2AggLAkACQCACIARJBEAgASgCACIGIAJqLQAAQTBrIgNB/wFxIgVBCkkNAQsMAQsgASACQQFqIgI2AggCQAJAIAVFBEBBACEDDAELIANB/wFxIQMDQCACIARGBEAgBCECDAMLIAIgBmotAABBMGtB/wFxIgVBCUsNASABIAJBAWoiAjYCCCADrUIKfiIIQiCIUARAIAUgCKciBWoiAyAFTw0BCwsMAgsgAiAETw0AIAIgBmotAABB3wBHDQAgASACQQFqIgI2AggLAkACQAJAIAIgAiADaiIFTQRAIAEgBTYCCCAEIAVJDQQgAkUgAiAET3INASACIAZqLAAAQb9/Sg0BDAILDAMLIAVFIAQgBU1yRQRAIAUgBmosAABBv39MDQELIAIgBmohBCAHDQEgAEIBNwIIIAAgAzYCBCAAIAQ2AgAPCyAGIAQgAiAFQZjGwAAQhAIACyACIAZqQQFrIQYgAyEBAn8DQCABIgJFBEBBACEBIAQhBUEBDAILIAJBAWshASACIAZqLQAAQd8ARw0ACwJAAkAgAUUNAAJAIAEgA08EQCABIANHDQEgAg0CQQAhBgwDCyABIARqLAAAQb9/Sg0BCyAEIANBACABQajGwAAQhAIACwJAIAIgA08EQCADIQYgAiADRw0BDAILIAIgBGosAABBv39MDQAgAiEGDAELIAQgAyACIANBuMbAABCEAgALIAQgBmohBSADIAZrIQMgBAshAiADRQRADAELIAAgAzYCDCAAIAU2AgggACABNgIEIAAgAjYCAA8LIABBADYCACAAQQA6AAQLtgQBC38CQAJAAkAgACgCACIBQX9GIAFBAklyDQACQAJAIAAtABRBAWsOAgIAAQtBhLzBAEH5AEHAvMEAEMoBAAsgACgCCCEJIAAoAgwiCwRAA0AgCSAGQQxsaiIEKAIEIQogBCgCCCIIBEAgCkEkaiEBA0AgAUEEaygCACICQQBKBEAgASgCACIFQQRrKAIAIgNBeHEiB0EEQQggA0EDcSIDGyACakkNByADQQAgByACQSdqSxsNBiAFEC0LAkAgAUEUaygCACIFQQJGDQAgAUEQayECAkAgBUUEQCACKAIAIgJFDQIgAUEMaygCACIFQQRrKAIAIgNBeHEiB0EEQQggA0EDcSIDGyACakkNCSADRSAHIAJBJ2pNcg0BDAgLIAIoAgAiAkUNASABQQxrKAIAIgVBBGsoAgAiA0F4cSIHIAJBAXQiAkEEQQggA0EDcSIDG2pJDQggA0UNACAHIAJBJ2pLDQcLIAUQLQsgAUEsaiEBIAhBAWsiCA0ACwsgBCgCACIBBEAgCkEEaygCACIEQXhxIgggAUEsbCIBQQRBCCAEQQNxIgQbakkNBSAEQQAgCCABQSdqSxsNBCAKEC0LIAZBAWoiBiALRw0ACwsgACgCBCIARQ0AIAlBBGsoAgAiAUF4cSIGIABBDGwiAEEEQQggAUEDcSIBG2pJDQIgAUEAIAYgAEEnaksbDQEgCRAtCw8LQYjXwQBBLkG418EAEOoBAAtByNbBAEEuQfjWwQAQ6gEAC5kFAQd/IwBBQGoiAiQAIAEoAgAiBygCDCEGAkACQCAHKAIUIgQgBygCECIDSQRAA0AgBCAGai0AACIIQQlrIgVBF0tBASAFdEGTgIAEcUVyDQIgByAEQQFqIgQ2AhQgAyAERw0ACyADIQQLIAJBAzYCNEEBIQUgAkEoaiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCKCACKAIsENABNgIEDAELIAhB/QBGBEBBACEFIABBADoAAQwBCwJAAkACQCABLQAERQRAIAhBLEcNAUEBIQUgByAEQQFqIgQ2AhQgAyAESwRAA0AgBCAGai0AACIIQQlrIgFBGUsNBUEBIAF0QZOAgARxRQRAIAFBGUcNBiAAQQE6AAFBACEFDAcLIAcgBEEBaiIENgIUIAMgBEcNAAsgAyEECyACQQU2AjQgAkEQaiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCECACKAIUENABNgIEDAQLQQAhBSABQQA6AAQgCEEiRg0BIAJBETYCNEEBIQUgAiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCACACKAIEENABNgIEDAMLIAJBCDYCNEEBIQUgAkEgaiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCICACKAIkENABNgIEDAILIABBAToAAQwBCyAIQf0ARwRAIAJBETYCNCACQQhqIAYgAyAEQQFqIgEgAyABIANJGxAjIAAgAkE0aiACKAIIIAIoAgwQ0AE2AgQMAQsgAkEVNgI0IAJBGGogBiADIARBAWoiASADIAEgA0kbECMgACACQTRqIAIoAhggAigCHBDQATYCBAsgACAFOgAAIAJBQGskAAurBQIGfwF+AkAgAkUNACACQQdrIgNBACACIANPGyEHIAFBA2pBfHEgAWshCEEAIQMDQAJAAkACQCABIANqLQAAIgXAIgZBAE4EQCAIIANrQQNxDQEgAyAHTw0CA0AgASADaiIEQQRqKAIAIAQoAgByQYCBgoR4cQ0DIANBCGoiAyAHSQ0ACwwCC0KAgICAkCAhCQJAAkACQAJAAkACQAJAAkACQCAFLQD9sUBBAmsOAwABAgcLIANBAWoiBCACSQ0CQgAhCQwGCyADQQFqIgQgAkkNAkIAIQkMBQsgA0EBaiIEIAJJDQJCACEJDAQLIAEgBGosAABBv39KDQMMBAsgASAEaiwAACEEAkACQCAFQeABayIFBEAgBUENRgRADAIFDAMLAAsgBEFgcUGgf0YNAwwECyAEQZ9/Sg0DDAILIAZBH2pB/wFxQQxPBEAgBkF+cUFuRw0DIARBQEgNAgwDCyAEQUBIDQEMAgsgASAEaiwAACEEAkACQAJAAkAgBUHwAWsOBQEAAAACAAsgBkEPakH/AXFBAksNBCAEQUBIDQIMBAsgBEHwAGpB/wFxQTBJDQEMAwsgBEGPf0oNAgsgAiADQQJqIgRNBEBCACEJDAILIAEgBGosAABBv39KBEBCgICAgJDAACEJDAILQgAhCSADQQNqIgQgAk8NASABIARqLAAAQUBIDQJCgICAgJDgACEJDAELQgAhCSADQQJqIgQgAk8NACABIARqLAAAQb9/TA0BQoCAgICQwAAhCQsgACAJIAOthDcCBCAAQQE2AgAPCyAEQQFqIQMMAgsgA0EBaiEDDAELIAIgA00NAANAIAEgA2osAABBAEgNASACIANBAWoiA0cNAAsMAgsgAiADSw0ACwsgACACNgIIIAAgATYCBCAAQQA2AgAL2wUBA38jAEEgayIDJAAgAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDigCAQEBAQEBAQEDBQEBBAEBAQEBAQEBAQEBAQEBAQEBAQEBCAEBAQEHAAsgAUHcAEYNBQsgAkEBcUUgAUGABklyDQcgARBlRQ0HIANBADoADiADQQA7AQwgAyABQRR2LQCMxEA6AA8gAyABQQR2QQ9xLQCMxEA6ABMgAyABQQh2QQ9xLQCMxEA6ABIgAyABQQx2QQ9xLQCMxEA6ABEgAyABQRB2QQ9xLQCMxEA6ABAgAUEBcmdBAnYiAiADQQxqIgRqIgVB+wA6AAAgBUEBa0H1ADoAACAEIAJBAmsiAmpB3AA6AAAgACADKQEMNwAAIANB/QA6ABUgAyABQQ9xLQCMxEA6ABQgACADLwEUOwAIDAgLIABCADcBAiAAQdzgADsBAAwKCyAAQgA3AQIgAEHc6AE7AQAMCQsgAEIANwECIABB3OQBOwEADAgLIABCADcBAiAAQdzcATsBAAwHCyAAQgA3AQIgAEHcuAE7AQAMBgsgAkGAAnFFDQEgAEIANwECIABB3M4AOwEADAULIAJB////B3FBgIAETw0DCyABEDgNASADQQA6ABggA0EAOwEWIAMgAUEUdi0AjMRAOgAZIAMgAUEEdkEPcS0AjMRAOgAdIAMgAUEIdkEPcS0AjMRAOgAcIAMgAUEMdkEPcS0AjMRAOgAbIAMgAUEQdkEPcS0AjMRAOgAaIAFBAXJnQQJ2IgIgA0EWaiIEaiIFQfsAOgAAIAVBAWtB9QA6AAAgBCACQQJrIgJqQdwAOgAAIAAgAykBFjcAACADQf0AOgAfIAMgAUEPcS0AjMRAOgAeIAAgAy8BHjsACAtBCgwDCyAAIAE2AgBBgAEhAkGBAQwCCyAAQgA3AQIgAEHcxAA7AQALQQAhAkECCzoADSAAIAI6AAwgA0EgaiQAC9gEAgd/AXsCQAJAIAAoAggiB0GAgIDAAXFFDQACQAJAAkACQCAHQYCAgIABcQRAIAAvAQ4iAw0BQQAhAgwCCyACQRBPBEAgASACEDchAwwECyACRQRADAQLIAJBA3EhBSACQQRPBEAgAkEMcSEGA0AgAyABIARq/VwAAP0Mv7+/v7+/v7+/v7+/v7+/v/0nIgr9GwBBAXFqIAr9hwH9pwEiCv0bAWsgCv0bAmsgCv0bA2shAyAGIARBBGoiBEcNAAsgBUUNBAsgASAEaiEEA0AgAyAELAAAQb9/SmohAyAEQQFqIQQgBUEBayIFDQALDAMLIAEgAmohCUEAIQIgASEEIAMhBQNAIAQiBiAJRg0CAn8gBEEBaiAELAAAIghBAE4NABogBkECaiAIQWBJDQAaIAZBBEEDIAhBb0sbagsiBCAGayACaiECIAVBAWsiBQ0ACwtBACEFCyADIAVrIQMLIAMgAC8BDCIETw0AIAQgA2shBkEAIQNBACEFAkACQAJAIAdBHXZBA3FBAWsOAgABAgsgBiEFDAELIAZB/v8DcUEBdiEFCyAHQf///wBxIQggACgCBCEHIAAoAgAhAANAIANB//8DcSAFQf//A3FJBEBBASEEIANBAWohAyAAIAggBygCEBEBAEUNAQwDCwtBASEEIAAgASACIAcoAgwRAAANASAGIAVrQf//A3EhAUEAIQMDQCABIANB//8DcU0EQEEADwsgA0EBaiEDIAAgCCAHKAIQEQEARQ0ACwwBCyAAKAIAIAEgAiAAKAIEKAIMEQAAIQQLIAQLkgUCBX8CfiMAQTBrIgIkACABKAIMIQYgAAJ/AkACQAJ/AkACQCABKAIUIgMgASgCECIFSQRAA0ACQCADIAZqLQAAIgRBCWsOJQAABAQABAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAMECyABIANBAWoiAzYCFCADIAVHDQALIAUhAwsgAkEFNgIYQQEhBCACIAYgBSADQQFqIgEgBSABIAVJGxAjIAJBGGogAigCACACKAIEENABDAULQQEhBCABIANBAWo2AhQgAkEIaiABQQAQNiACKQMIIghCf1ENAyACKQMQIQcCQAJAAkACQCAIp0EBaw4CAQIACyACQQM6ABggAiAHNwMgIAJBGGogAkEvakHQtcEAEKQBDAQLIAdCgICAgBBUDQEgAkEBOgAYIAIgBzcDICACQRhqIAJBL2pB0LXBABClAQwDCyAHQoCAgIAQVA0AIAJBAjoAGCACIAc3AyAgAkEYaiACQS9qQdC1wQAQpQEMAgtBACEEIAenDAQLIARBMGtB/wFxQQpPBEBBASEEIAEgAkEvakHQtcEAECQgARCOAQwEC0EBIQQgAkEIaiABQQEQNiACKQMIIghCf1EEQCACKAIQDAQLIAIpAxAhBwJAAkACQCAIp0EBaw4CAQIACyACQQM6ABggAiAHNwMgIAJBGGogAkEvakHQtcEAEKQBDAILIAdCgICAgBBUDQIgAkEBOgAYIAIgBzcDICACQRhqIAJBL2pB0LXBABClAQwBCyAHQoCAgIAQVA0BIAJBAjoAGCACIAc3AyAgAkEYaiACQS9qQdC1wQAQpQELIAEQjgEMAgtBACEEIAenDAELIAIoAhALNgIEIAAgBDYCACACQTBqJAALrgQBC38gACgCBCEJIAAoAgAhCiAAKAIIIQsCQANAIAYNAQJ/AkAgAiAESQ0AA0AgASAEaiEFAkACQAJAAkACQCACIARrIgZBB00EQCACIARHDQEgAiEEDAcLIAVBA2pBfHEiACAFRg0BIAAgBWshA0EAIQADQCAAIAVqLQAAQQpGDQUgAyAAQQFqIgBHDQALIAMgBkEIayIASw0DDAILQQAhAANAIAAgBWotAABBCkYNBCAGIABBAWoiAEcNAAsgAiEEDAULIAZBCGshAEEAIQMLA0BBgIKECCADIAVqIgcoAgAiDUGKlKjQAHNrIA1yQYCChAggB0EEaigCACIHQYqUqNAAc2sgB3JxQYCBgoR4cUGAgYKEeEcNASADQQhqIgMgAE0NAAsLIAMgBkYEQCACIQQMAwsgAyAFaiEGIAIgA2sgBGshB0EAIQACQANAIAAgBmotAABBCkYNASAHIABBAWoiAEcNAAsgAiEEDAMLIAAgA2ohAAsgACAEaiIDQQFqIQQCQCACIANNDQAgACAFai0AAEEKRw0AQQAhBiAEIgUMAwsgAiAETw0ACwsgAiAIRg0CQQEhBiAIIQUgAgshAAJAIAstAAAEQCAKQdrAwABBBCAJKAIMEQAADQELQQAhAyAAIAhHBEAgACABakEBay0AAEEKRiEDCyAAIAhrIQAgASAIaiEHIAsgAzoAACAFIQggCiAHIAAgCSgCDBEAAEUNAQsLQQEhDAsgDAv7AwEIfyMAQRBrIgYkAAJ/AkAgA0EBcUUEQCACLQAAIgUNAUEADAILIAAgAiADQQF2IAEoAgwRAAAMAQsgASgCDCEKA0AgAkEBaiEEAkACQAJAAkAgBcBBAEgEQCAFQf8BcSIIQYABRg0BIAhBwAFHDQMgBiABNgIEIAYgADYCACAGQqCAgIAGNwIIIAMgB0EDdGoiAigCACAGIAIoAgQRAQBFDQJBAQwGCyAAIAQgBUH/AXEiAiAKEQAARQRAIAIgBGohAgwEC0EBDAULIAAgAkEDaiIEIAIvAAEiAiAKEQAARQRAIAIgBGohAgwDC0EBDAQLIAdBAWohByAEIQIMAQtBoICAgAYhCyAFQQFxBEAgAigAASELIAJBBWohBAtBACEIAn8gBUECcUUEQEEAIQkgBAwBCyAELwAAIQkgBEECagshAiAFQQRxBH8gAi8AACEIIAJBAmoFIAILIQQgBUEIcQR/IAQvAAAhByAEQQJqBSAECyECIAVBEHEEQCADIAlBA3RqLwEEIQkLIAYgBUEgcQR/IAMgCEEDdGovAQQFIAgLOwEOIAYgCTsBDCAGIAs2AgggBiABNgIEIAYgADYCAEEBIAMgB0EDdGoiBCgCACAGIAQoAgQRAQANAhogB0EBaiEHCyACLQAAIgUNAAtBAAsgBkEQaiQAC78EAQV/IwBBIGsiAyQAAn8CQAJAIAAoAgAiAUUNAANAAkAgACgCCCICIAAoAgRPDQAgASACai0AAEHFAEcNACAAIAJBAWo2AggMAgsCQCAERQ0AIAAoAhAiAUUNACABQYfFwABBAxBEDQMLIAAQcUH/AXEiAUECRg0CAkACQAJAIAAoAgAiAkUNAANAIAAoAggiBSAAKAIETw0BIAIgBWotAABB8ABHDQEgACAFQQFqNgIIAkAgAUEBcUUEQCAAKAIQIgFFDQEgAUHcxsAAQQEQRA0IDAELIAAoAhAiAUUNACABQd+jwQBBAhBEDQcLIAAoAgBFBEAgACgCECICRQ0EQQEgAkHhwsAAQQEQRA0IGgwECyADIAAQPyADKAIARQRAIAMtAAQhBCAAKAIQIgIEQEEBIAJByMLAAEG4wsAAIARBAXEiAhtBGUEQIAIbEEQNCRoLIAAgBDoABCAAQQA2AgBBAAwICyADIAP9AAIA/QsDEAJAIAAoAhAiAUUNACADQRBqIAEQJw0HIAAoAhAiAUUNACABQYvHwABBAxBEDQcLAkACQCAAKAIAIgJFDQAgACgCCCIBIAAoAgRPDQAgASACai0AAEHLAEcNACAAIAFBAWo2AgggAEEAECANCAwBCyAAECYNBwtBASEBIAAoAgAiAg0ACwwBCyABQQFxRQ0BCyAAKAIQIgJFDQBBASACQeHGwABBARBEDQQaCyAEQQFqIQQgACgCACIBDQALC0EADAELQQELIANBIGokAAvGBAEHfwJAAkACQAJAAkBBgIDAABAYIgQEQCAEQQRrLQAAQQNxBEAgBEEAQYCAwAD8CwALQYCAwAAQGCIFRQ0BIAVBBGstAABBA3EEQCAFQQBBgIDAAPwLAAtBgIAQEBgiBkUNAiAGQQRrLQAAQQNxBEAgBkEAQYCAEPwLAAsCQAJAQYTkwQAtAABBAWsOAgAFAQtBhOTBAEECOgAAQeDjwQAoAgAiAARAQeTjwQAoAgAiAkEEaygCACIBQXhxIgMgAEECdCIAQQRBCCABQQNxIgEbakkNBiABQQAgAyAAQSdqSxsNByACEC0LQezjwQAoAgAiAARAQfDjwQAoAgAiAkEEaygCACIBQXhxIgMgAEECdCIAQQRBCCABQQNxIgEbakkNBiABQQAgAyAAQSdqSxsNByACEC0LQfjjwQAoAgAiAEUNAEH848EAKAIAIgJBBGsoAgAiAUF4cSIDIABBAnQiAEEEQQggAUEDcSIBG2pJDQUgAUEAIAMgAEEnaksbDQYgAhAtC0GE5MEAQQE6AABBgOTBAEGAgAQ2AgBB/OPBACAGNgIAQfTjwQBCgICQgICAwAA3AgBB8OPBACAFNgIAQejjwQBCgICQgICAgAI3AgBB5OPBACAENgIAQdzjwQBCgICAgICAgAI3AgAPC0EEQYCAwAAQ5AEAC0EEQYCAwAAQ5AEAC0EEQYCAEBDkAQALQZy0wQBB/QBB3LTBABDKAQALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC74UAw9/A34Be0Gg5MEALQAAQQFHBEACQAJAAkACQAJAAkBBoOTBAC0AAEEBaw4CAAQBC0Gg5MEAQQI6AABBlOTBACgCACICRQ0AQZzkwQAoAgAiBgRAQZDkwQAoAgAiAkEIaiEEIAIpAwBCf4VCgIGChIiQoMCAf4MhEQNAIBFQBEADQCAEIgNBCGohBCACQeAAayECIAMpAwBCgIGChIiQoMCAf4MiEUKAgYKEiJCgwIB/UQ0ACyARQoCBgoSIkKDAgH+FIRELIAIgEXqnQQN2QXRsakEEaygCACIDQYQITwRAIAMQqwELIBFCAX0gEYMhESAGQQFrIgYNAAtBlOTBACgCACECCyACIAJBDGxBE2pBeHEiA2pBCWoiBEUNAEGQ5MEAKAIAIANrIgNBBGsoAgAiAkF4cSIGQQRBCCACQQNxIgIbIARqSQ0BIAJBACAGIARBJ2pLGw0CIAMQLQtBoOTBAEEBOgAAQZDkwQBB+LTBAP0AAgD9CwIAQYzkwQBBADYCAAwDC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtBnLTBAEH9AEHctMEAEMoBAAsLQYzkwQAoAgBFBEBBjOTBAEF/NgIAQZTkwQAoAgAiAyAAcSEEIABBGXYiEK1CgYKEiJCgwIABfiETQZDkwQAoAgAhAgJAAkADQCACIARqKQAAIhIgE4UiEUJ/hSARQoGChIiQoMCAAX2DQoCBgoSIkKDAgH+DIhFQRQRAA0AgACACIBF6p0EDdiAEaiADcUF0bGoiBkEMaygCAEYEQCAGQQhrKAIAIAFGDQQLIBFCAX0gEYMiEVBFDQALCyASIBJCAYaDQoCBgoSIkKDAgH+DUARAIAQgBUEIaiIFaiADcSEEDAELC0GY5MEAKAIARQRAAkBBACECAkACQAJAQZzkwQAoAgAiDEEBaiIEBEBBlOTBACgCACIJIAlBAWoiCkEDdiIFQQdsIAlBCEkbIgtBAXYgBEkEQAJ/IAtBAWoiAyAEIAMgBEsbIgRBD08EQCAEQf////8BSw0GQX8gBEEDdEEHbkEBa2d2QQFqDAELQQQgBEEIcUEIaiAEQQRJGwsiBK1CDH4iEUIgiKcNBCARpyIDQXhLDQQgA0EHakF4cSIDIARBCGoiAmoiBSADSSAFQfj///8HS3INBCAFEBgiBUUEQBCeAgALIAMgBWohByACBEAgB0H/ASAC/AsACyAEQQFrIgsgBEEDdkEHbCAEQQlJGyENQZDkwQAoAgAhBCAMBEAgBCkDAEJ/hUKAgYKEiJCgwIB/gyERIAQhA0EAIQUgDCECA0AgEVAEQANAIAVBCGohBSADQQhqIgMpAwBCgIGChIiQoMCAf4MiEUKAgYKEiJCgwIB/UQ0ACyARQoCBgoSIkKDAgH+FIRELIAcgBCAReqdBA3YgBWoiDkF0bGoiBkEMaygCACIIIAZBCGsoAgAgCBsiDyALcSIGaikAAEKAgYKEiJCgwIB/gyISUARAQQghCANAIAYgCGohBiAIQQhqIQggByAGIAtxIgZqKQAAQoCBgoSIkKDAgH+DIhJQDQALCyARQgF9IBGDIREgByASeqdBA3YgBmogC3EiBmosAABBAE4EQCAHKQMAQoCBgoSIkKDAgH+DeqdBA3YhBgsgBiAHaiAPQRl2Igg6AAAgByAGQQhrIAtxakEIaiAIOgAAIAcgBkF0bGpBDGsiBiAEIA5BdGxqQQxrIggoAAg2AAggBiAIKQAANwAAIAJBAWsiAg0ACwtBlOTBACALNgIAQZDkwQAgBzYCAEGY5MEAIA0gDGs2AgAgCUUNBSAJIApBDGxBB2pBeHEiAmpBCWoiA0UNBSAEIAJrIgRBBGsoAgAiAkF4cSIFQQRBCCACQQNxIgIbIANqSQ0CIAJBACAFIANBJ2pLGw0DIAQQLQwFCyAKBEBBkOTBACgCACEDAkACQCAFIApBB3FBAEdqIgdBAkkEQCAHIQQMAQsgB0EBcSEEIAdB/v///wNxIghBA3QhAiAIIQYgAyEFA0AgBSAF/QADACIU/U1BB/3NAf0MAQEBAQEBAQEBAQEBAQEBAf1OIBT9DH9/f39/f39/f39/f39/f3/9UP3OAf0LAwAgBUEQaiEFIAZBAmsiBg0ACyAHIAhGDQELIAIgA2ohBQNAIAUgBSkDACIRQn+FQgeIQoGChIiQoMCAAYMgEUL//v379+/fv/8AhHw3AwAgBUEIaiEFIARBAWsiBA0ACwsCQCAKQQhPBEAgAyAKaiADKQAANwAADAELIApFDQAgA0EIaiADIAr8CgAAC0EAIQQDQCAEIgVBAWohBAJAIAMgBWoiCi0AAEGAAUcNACADIARBdGxqIQYgAyAFQXRsaiICQQhrIQ4gAkEMayEPAkADQCAPKAIAIgIgDigCACACGyINIAlxIgchAiADIAdqKQAAQoCBgoSIkKDAgH+DIhFQBEBBCCEIA0AgAiAIaiECIAhBCGohCCADIAIgCXEiAmopAABCgIGChIiQoMCAf4MiEVANAAsLIAMgEXqnQQN2IAJqIAlxIgJqLAAAQQBOBEAgAykDAEKAgYKEiJCgwIB/g3qnQQN2IQILIAIgB2sgBSAHa3MgCXFBCE8EQCACIANqIgctAAAgByANQRl2Igc6AAAgAyACQQhrIAlxakEIaiAHOgAAIAMgAkF0bGoiB0EMayECQf8BRg0CIAYoAAAhCCAGIAIoAAA2AAAgAiAINgAAIAYoAAQhAiAGIAdBCGsiCCgAADYABCAIIAI2AAAgBigACCECIAYgB0EEayIHKAAANgAIIAcgAjYAAAwBCwsgCiANQRl2IgI6AAAgAyAFQQhrIAlxakEIaiACOgAADAELIApB/wE6AAAgAyAFQQhrIAlxakEIakH/AToAACACIAYoAAg2AAggAiAGKQAANwAACyAFIAlHDQALC0GY5MEAIAsgDGs2AgAMBAsMAgtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALQcjBwABBOUHkwcAAEMoBAAsLIAAgARDvASEEQZDkwQAoAgAiAkGU5MEAKAIAIgYgAHEiA2opAABCgIGChIiQoMCAf4MiEVAEQEEIIQUDQCADIAVqIQMgBUEIaiEFIAIgAyAGcSIDaikAAEKAgYKEiJCgwIB/gyIRUA0ACwsgAiAReqdBA3YgA2ogBnEiA2osAAAiBUEATgRAIAIgAikDAEKAgYKEiJCgwIB/g3qnQQN2IgNqLQAAIQULIAIgA2ogEDoAACACIANBCGsgBnFqQQhqIBA6AABBmOTBAEGY5MEAKAIAIAVBAXFrNgIAQZzkwQBBnOTBACgCAEEBajYCACACIANBdGxqIgNBBGsgBDYCACADQQhrIAE2AgAgA0EMayAANgIADAELIAZBBGsoAgAhBAsQbiIAIAQlASYBQYzkwQBBjOTBACgCAEEBajYCACAADwtBiLXBABDVAQALrwQCB38BfkErQX8gACgCCCIIQYCAgAFxIgYbIAZBFXZBASABGyAFaiEHAkAgCEGAgIAEcUUEQEEAIQIMAQsCf0EAIANFDQAaIAIsAABBv39KIgYgA0EBRg0AGiAGIAIsAAFBv39KagsgB2ohBwtBLSABGyEMAkAgAC8BDCILIAdLBEACQAJAIAhBgICACHFFBEAgCyAHayEJQQAhAUEAIQYCQAJAAkAgCEEddkEDcUEBaw4DAAEAAgsgCSEGDAELIAlB/v8DcUEBdiEGCyAIQf///wBxIQsgACgCBCEHIAAoAgAhCANAIAFB//8DcSAGQf//A3FPDQJBASEKIAFBAWohASAIIAsgBygCEBEBAEUNAAsMBAsgACAAKQIIIg2nQYCAgP95cUGwgICAAnI2AghBASEKIAAoAgAiBiAAKAIEIgkgDCACIAMQzwENA0EAIQEgCyAHa0H//wNxIQIDQCABQf//A3EgAk8NAiABQQFqIQEgBkEwIAkoAhARAQBFDQALDAMLQQEhCiAIIAcgDCACIAMQzwENAiAIIAQgBSAHKAIMEQAADQIgCSAGa0H//wNxIQBBACEBA0AgACABQf//A3FNBEBBAA8LIAFBAWohASAIIAsgBygCEBEBAEUNAAsMAgsgBiAEIAUgCSgCDBEAAA0BIAAgDTcCCEEADwtBASEKIAAoAgAiASAAKAIEIgAgDCACIAMQzwENACABIAQgBSAAKAIMEQAAIQoLIAoLjgQBB38jAEEwayICJAAgASgCACIHKAIMIQYCQAJAIAcoAhQiAyAHKAIQIgRJBEADQCADIAZqLQAAIgVBCWsiCEEXS0EBIAh0QZOAgARxRXINAiAHIANBAWoiAzYCFCADIARHDQALIAQhAwsgAkECNgIkQQEhBSACQRhqIAYgBCADQQFqIgEgBCABIARJGxAjIAAgAkEkaiACKAIYIAIoAhwQ0AE2AgQMAQsgBUHdAEYEQEEAIQUgAEEAOgABDAELAkACQCABLQAERQRAIAVBLEcNAUEBIQUgByADQQFqIgM2AhQgAyAESQRAA0AgAyAGai0AACIBQQlrIghBF0tBASAIdEGTgIAEcUVyDQQgByADQQFqIgM2AhQgAyAERw0ACyAEIQMLIAJBBTYCJCACIAYgBCADQQFqIgEgBCABIARJGxAjIAAgAkEkaiACKAIAIAIoAgQQ0AE2AgQMAwsgAEEBOgABQQAhBSABQQA6AAQMAgsgAkEHNgIkQQEhBSACQRBqIAYgBCADQQFqIgEgBCABIARJGxAjIAAgAkEkaiACKAIQIAIoAhQQ0AE2AgQMAQsgAUHdAEYEQCACQRU2AiQgAkEIaiAGIAQgA0EBaiIBIAQgASAESRsQIyAAIAJBJGogAigCCCACKAIMENABNgIEDAELIABBAToAAUEAIQULIAAgBToAACACQTBqJAAL+wMCD38BfiADIAEoAhgiCiAFayIJSwRAQQAgASgCDCIIayEQIAQgCGohESAIIAUgBSAISRsiEiAIayETIAEoAiAhDSABKAIQIQ8gASkDACEWA0ACQAJAIBYgAiAJajEAAIhCAYNQBEAgASAJNgIYIAUhByAJIQogBg0CDAELIAggDSAIIAggDUsbIAYbIgdBAWsgBUkhDAJAAkACQAJAA0AgB0UEQCAQIAUgDSAGGyIHIAggByAISxtqIQ4gCCAJaiEHIBMhCyARIQwDQCAORQRAIAEgCTYCGCAGRQRAIAEgBTYCIAsgACAKNgIIIAAgCTYCBCAAQQE2AgAPCyALRQ0DIAMgB00NBCAOQQFrIQ4gC0EBayELIAIgB2ohFCAMLQAAIAxBAWohDCAHQQFqIQcgFC0AAEYNAAsgCiAPayEKIA8hByAGRQ0GDAcLIAdBAWshByAMRQ0EIAcgCWoiCyADTw0DIAQgB2otAAAgAiALai0AAEYNAAsgByAKaiAIayEKIAUhByAGRQ0EDAULIBIgBUGkpMEAELsBAAsgAyAIIAlqIgAgACADSRsgA0G0pMEAELsBAAsgCyADQdSkwQAQuwEACyAHIAVBxKTBABC7AQALIAEgBzYCICAHIQ0LIAogBWsiCSADSQ0ACwsgAUEANgIYIABBADYCAAvLBAIFfwJ+IwBBMGsiAiQAIAEoAgwhBQJAAkAgAAJ/AkAgAAJ/AkACQCABKAIUIgMgASgCECIESQRAA0ACQCADIAVqLQAAIgZBCWsOJQAABAQABAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAMECyABIANBAWoiAzYCFCADIARHDQALIAQhAwsgAkEFNgIYIAIgBSAEIANBAWoiASAEIAEgBEkbECMgAkEYaiACKAIAIAIoAgQQ0AEhASAAQQE2AgAgACABNgIEDAYLIAEgA0EBajYCFCACQQhqIAFBABA2IAIpAwgiCEJ/UQ0EIAIpAxAhBwJAAkAgCKdBAWsOAgQBAAsgAkEDOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABCkAQwCCyAHQgBZDQIgAkECOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABClAQwBCyAGQTBrQf8BcUEKTwRAIAEgAkEvakHgtcEAECQgARCOASEBIABBATYCACAAIAE2AgQMBQsgAkEIaiABQQEQNiACKQMIIghCf1EEQCAAIAIoAhA2AgQgAEEBNgIADAULIAIpAxAhBwJAAkAgCKdBAWsOAgMBAAsgAkEDOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABCkAQwBCyAHQgBZDQEgAkECOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABClAQsgARCOATYCBEEBDAELIAAgBzcDCEEACzYCAAwBCyAAIAIoAhA2AgQgAEEBNgIACyACQTBqJAAL4QMBA38jAEEQayIEJAACQAJAAkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASAAIAEQdUUNAkEBIQIMAwsgACgCACECQQkhAwNAIAMgBGpBBmogAkEPcS0AjMRAOgAAIANBAWshAyACQQR2IgINAAtBASECIAFBAUGOx8AAQQIgAyAEakEHakEJIANrEEtFDQEMAgsgACgCACECQQkhAwNAIAMgBGpBBmogAkEPcS0AgMFAOgAAIANBAWshAyACQQR2IgINAAtBASECIAFBAUGOx8AAQQIgAyAEakEHakEJIANrEEsNAQsgASgCAEHYwMAAQQIgASgCBCgCDBEAAARAQQEhAgwBCyAAQQRqIQACQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BIAAgARB1IQIMAgsgACgCACECQQkhAwNAIAMgBGpBBmogAkEPcS0AjMRAOgAAIANBAWshAyACQQR2IgINAAsgAUEBQY7HwABBAiADIARqQQdqQQkgA2sQSyECDAELIAAoAgAhAkEJIQMDQCADIARqQQZqIAJBD3EtAIDBQDoAACADQQFrIQMgAkEEdiICDQALIAFBAUGOx8AAQQIgAyAEakEHakEJIANrEEshAgsgBEEQaiQAIAIL8gMBCH8gASgCBCIFBEAgASgCACEEA0ACQCADQQFqIQICfyACIAMgBGotAAAiCMAiCUEATg0AGgJAAkACQAJAAkACQAJAAkACQAJAAkAgCC0A/bFAQQJrDgMAAQIMC0Hfn8AAIAIgBGogAiAFTxssAABBQE4NCyADQQJqDAoLQd+fwAAgAiAEaiACIAVPGywAACEHIAhB4AFrIgZFDQEgBkENRg0CDAMLQd+fwAAgAiAEaiACIAVPGywAACEGIAhB8AFrDgUEAwMDBQMLIAdBYHFBoH9HDQgMBgsgB0Gff0oNBwwFCyAJQR9qQf8BcUEMTwRAIAlBfnFBbkcgB0FATnINBwwFCyAHQUBODQYMBAsgCUEPakH/AXFBAksgBkFATnINBQwCCyAGQfAAakH/AXFBME8NBAwBCyAGQY9/Sg0DC0Hfn8AAIAQgA0ECaiICaiACIAVPGywAAEG/f0oNAkHfn8AAIAQgA0EDaiICaiACIAVPGywAAEG/f0oNAiADQQRqDAELQd+fwAAgBCADQQJqIgJqIAIgBU8bLAAAQUBODQEgA0EDagsiAyICIAVJDQELCyAAIAM2AgQgACAENgIAIAEgBSACazYCBCABIAIgBGo2AgAgACACIANrNgIMIAAgAyAEajYCCA8LIABBADYCAAuHBAIEfwJ9IwBBEGshASAAvCIDQR92IQQCQAJ9IAACfwJAAkACQCADQf////8HcSICQdDYupUETwRAIAJBgICA/AdLBEAgAA8LIAJBl+TFlQRNBEAgA0EATg0CIAFDAACAgCAAlTgCCCABKgIIGgwCCyADQQBIBEAgAUMAAICAIACVOAIIIAEqAggaIAJBtOO/lgRNDQIMBwsgAEMAAAB/lA8LIAJBmOTF9QNNBEAgAkGAgIDIA00NAkEAIQEgAAwFCyACQZKrlPwDTQ0CCyAAQzuquD+UIARBAnQqAtDjQZL8AAwCCyABIABDAAAAf5I4AgwgASoCDBogAEMAAIA/kg8LIARFIARrCyIBsiIFQwByMb+UkiIAIAVDjr6/NZQiBpMLIQUgACAFIAUgBSAFlCIAIABDFVI1u5RDj6oqPpKUkyIAlEMAAABAIACTlSAGk5JDAACAP5IhBSABRQ0AAkACQAJAIAFB/wBMBEAgAUGCf04NAyAFQwAAgAyUIQUgAUGbfk0NASABQeYAaiEBDAMLIAVDAAAAf5QhBSABQf4BSw0BIAFB/wBrIQEMAgsgBUMAAIAMlCEFQbZ9IAEgAUG2fU0bQcwBaiEBDAELIAVDAAAAf5QhBUH9AiABIAFB/QJPG0H+AWshAQsgBSABQRd0QYCAgPwDakGAgID8B3G+lCEFCyAFC7wEAQV/IwBBIGsiASQAAkACQAJAAkACQANAIAAQgwEgACgCCCICIAAoAgQiA0YNASACIANPDQIgACgCACIFIAJqLQAAIgRB3ABHBEAgBEEiRwRAIAFBEDYCFCAAIAFBFGoQzAEhAAwHCyAAIAJBAWo2AghBACEADAYLIAAgAkEBaiIENgIIAkACQAJ/IAMgBEsEQCAAIAJBAmoiAjYCCCAEIAVqLQAADAELIAFBBDYCFCABQQxqIAAgAUEUahDDASABLQAMDQYgBCECIAEtAA0LQSJrDlQCAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAIAAAAAAAAAAgAAAAIAAgEACyABQQw2AhQgACABQRRqEMwBIQAMBgsgAiADSw0EAkAgAyACa0EDTQRAIAAgAzYCCCABQQQ2AhQgAUEMaiAAIAFBFGoQxAEMAQsgACACQQRqNgIIIAIgBWoiAi0AAUEBdC8ByKVBIAItAABBAXQvAcipQXIgAi0AAkEBdC8ByKlBciACLQADQQF0LwHIpUFywUEATgRAIAFBADsBDAwBCyABQQw2AhQgAUEMaiAAIAFBFGoQxAELIAEvAQxBAUcNAAsgASgCECEADAQLIAFBBDYCFCAAIAFBFGoQzAEhAAwDCyACIANB6LLBABC7AQALIAEoAhAhAAwBCyACIAMgA0H4ssEAEG8ACyABQSBqJAAgAAvJAwINfwF+An8gAyAFQQFrIg0gASgCFCIIaiIHSwRAIAUgASgCECIOayEPIAEoAhwhCyABKAIIIQogASkDACEUA0ACQCABAn8CQCAUIAIgB2oxAACIQgGDUARAIAEgBSAIaiIINgIUIAYNAwwBCyAKIAsgCiAKIAtJGyAGGyIJIAUgBSAJSRshDCACIAhqIRAgCSEHAkACQAJAA0AgByAMRgRAQQAgCyAGGyEMIAohBwNAIAcgDE0EQCABIAUgCGoiAjYCFCAGRQRAIAFBADYCHAsgACACNgIIIAAgCDYCBEEBDAwLIAdBAWsiByAFTw0FIAcgCGoiCSADTw0DIAQgB2otAAAgAiAJai0AAEYNAAsgASAIIA5qIgg2AhQgDyAGRQ0GGgwHCyAHIAhqIhEgA08NAiAHIBBqIRIgBCAHaiAHQQFqIQctAAAgEi0AAEYNAAsgESAKa0EBaiEIIAZFDQMMBQsgCSADQezDwAAQuwEACyADIAggCWoiACAAIANJGyADQfzDwAAQuwEACyAHIAVB3MPAABC7AQALQQALIgc2AhwgByELCyAIIA1qIgcgA0kNAAsLIAEgAzYCFEEACyEHIAAgBzYCAAv3BAEHfyMAQSBrIgYkAEEBIQkgASABKAIUIgdBAWoiBTYCFAJAIAUgASgCECIITw0AAkACQCABKAIMIAVqLQAAQStrDgMBAgACC0EAIQkLIAEgB0ECaiIFNgIUCwJAAkAgBSAISQRAIAEgBUEBaiIHNgIUIAEoAgwiCiAFai0AAEEwa0H/AXEiBUEKTwRAIAZBDTYCFCAGIAogCCAHECMgBkEUaiAGKAIAIAYoAgQQ0AEhASAAQQE2AgAgACABNgIEDAMLIAcgCE8NAQNAIAcgCmotAABBMGtB/wFxIgtBCk8NAiABIAdBAWoiBzYCFCAFQcyZs+YARyALQQdLciAFQcuZs+YASnFFBEAgBUEKbCALaiEFIAcgCEcNAQwDCwsjAEEgayIEJAAgAAJ/AkAgA0IAIAkbUARAIAEoAhQiBSABKAIQIgdPDQEgASgCDCEIA0AgBSAIai0AAEEwa0H/AXFBCk8NAiABIAVBAWoiBTYCFCAFIAdHDQALDAELIARBDjYCFCAEQQhqIAEoAgwgASgCECABKAIUECMgACAEQRRqIAQoAgggBCgCDBDQATYCBEEBDAELIABEAAAAAAAAAABEAAAAAAAAAIAgAhs5AwhBAAs2AgAgBEEgaiQADAILIAZBBTYCFCAGQQhqIAEoAgwgCCAFECMgBkEUaiAGKAIIIAYoAgwQ0AEhASAAQQE2AgAgACABNgIEDAELIAAgASACIAMCfyAJRQRAIAQgBWsiAEEfdUGAgICAeHMgACAAIARIIAVBAEpzGwwBCyAEIAVqIgBBH3VBgICAgHhzIAAgBUEASCAAIARIcxsLEHYLIAZBIGokAAv0AwIFfwF+IwBBIGsiAiQAAkACQCAAKAIAIgNBAkcEQEEBIQQCQAJ/AkAgA0EBRgRAIAIgAEEEajYCACABKAIIIAIgATYCDCACQoCAgICAyNAHNwIEIAKtQoCAgIDQB4QhB0GAgIAEcQ0BIAIgBzcDECACQQRqQYjLwABBtYXAACACQRBqEEcMAgsgASgCACIDIAAoAhAgACgCFCABKAIEKAIMIgERAAANBQwECyACIAc3AxAgAkEEakGIy8AAQevYwQAgAkEQahBHCyIDQQAgAigCBCIFG0UEQCADDQQgBUUNAUHEy8AAQTcgAkEfakG0y8AAQfzLwAAQrgEACyABKAIAQaDLwABBFCABKAIEKAIMEQAADQMLIAEoAgAhAyABKAIEKAIMIQEMAQsCQAJAAkAgACgCJCIERQ0AIAAoAiAhAANAIAJBBGogACAEEEICQCACKAIEQQFGBEAgAi0ADSEDIAItAAwhBSACKAIIIQYgAUG42cEAQQMQREUNAQwFCyABIAIoAgggAigCDBBEDQQMAgsgBUEBcUUNASAEIAMgBmoiA0kNAiAAIANqIQAgBCADayIEDQALC0EAIQQMAwsgAyAEIARBvNnBABBvAAtBASEEDAELIAMgACgCGCAAKAIcIAERAAAhBAsgAkEgaiQAIAQL0AMBBn8jAEEwayIBJAAgACgCDCEEAn8CQAJAAkACQCAAKAIUIgIgACgCECIDSQRAA0ACQCACIARqLQAAIgVBCWsOJAAABAQABAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBgMLIAAgAkEBaiICNgIUIAIgA0cNAAsgAyECCyABQQI2AiQgAUEIaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAgggASgCDBDQAQwECyAFQd0ARg0BCyABQRY2AiQgASAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAgAgASgCBBDQAQwCCyAAIAJBAWo2AhRBAAwBCyAAIAJBAWoiAjYCFAJAIAIgA08NAAJAA0AgAiAEai0AACIGQQlrIgVBF0tBASAFdEGTgIAEcUVyDQEgACACQQFqIgI2AhQgAiADRw0ACyADIQIMAQsgBkHdAEcNACABQRU2AiQgAUEYaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAhggASgCHBDQAQwBCyABQRY2AiQgAUEQaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAhAgASgCFBDQAQsgAUEwaiQAC5cDAQ1/IwBBEGsiBiQAAkAgAS0AJQ0AIAEoAgQhBwJAIAEoAhAiCCABKAIIIgxLDQAgCCABKAIMIgJJDQAgAUEUaiINIAEtABgiBWpBAWstAAAhCiAFQQVJIQ4DQCACIAdqIQsCQAJAAn8gCCACayIEQQdNBEBBACEDQQAgBEUNARoDQEEBIAogAyALai0AAEYNAhogBCADQQFqIgNHDQALIAQhA0EADAELIAZBCGogCiALIAQQaiAGKAIMIQMgBigCCAtBAUYEQCABIAIgA2pBAWoiAjYCDCACIAVJIAIgDEtyDQIgDkUNASAHIAIgBWsiA2ogDSAFEL4BDQIgASgCHCEEIAEgAjYCHCAEIAdqIQkgAyAEayEDDAULIAEgCDYCDAwDC0EAIAVBBEGgzMAAEG8ACyACIAhNDQALCyABQQE6ACUCQCABLQAkQQFGBEAgASgCICECIAEoAhwhAQwBCyABKAIgIgIgASgCHCIBRg0BCyABIAdqIQkgAiABayEDCyAAIAM2AgQgACAJNgIAIAZBEGokAAv6AgEEfyMAQRBrIgQkAAJ/IAIoAgBBAXEEQEHi2MEAIQVBCQwBCyAEQQRqIAIoAgQgAigCCBBCQeLYwQAgBCgCCCAEKAIEIgIbIQVBCSAEKAIMIAIbCyECIAUgAiABECghBQJAAkACQAJAIAAoAgAiAUF/RwRAIAFFDQIgACgCBCIAQQRrKAIAIgJBeHEiA0EEQQggAkEDcSICGyABakkNBCACRSADIAFBJ2pNcg0BDAMLIAAtAARBA0cNASAAKAIIIgAoAgAhASAAQQRqKAIAIgIoAgAiAwRAIAEgAxEEAAsgAigCBCICBEAgAUEEaygCACIDQXhxIgZBBEEIIANBA3EiAxsgAmpJDQQgA0EAIAYgAkEnaksbDQMgARAtCyAAQQRrKAIAIgFBeHEiAkEQQRQgAUEDcSIBG0kNAyABRQ0AIAJBNE8NAgsgABAtCyAEQRBqJAAgBQ8LQYjXwQBBLkG418EAEOoBAAtByNbBAEEuQfjWwQAQ6gEAC74DAQN/AkAgACgCACIDRQRAIAAoAhAiAEUNASAAQeHCwABBARBEDwsCQAJ/AkACQCAAKAIIIgEgACgCBE8EQCAAKAIQIgJFDQEgAkG4wsAAQRAQREUNAUEBDwtBASECIAAgAUEBajYCCAJAAkACQAJAIAEgA2otAABBzgBrDgUCAwAAAQALIAAoAhAiAUUNAyABQbjCwABBEBBERQ0DDAYLIABBABAgDQUgACgCECIBBEAgAUGhx8AAQQMQRA0GCyAAQQAQIEUNBgwFCyAAKAIQIgBFDQUgAEGnx8AAQQUQREUNBQwECyAAIAAoAgxBAWoiATYCDCABQfQDSw0BIAAQWQ0DA0AgACgCACIDBEACQCAAKAIIIgEgACgCBE8NACABIANqLQAAQcUARw0AIAAgAUEBajYCCCAAIAAoAgxBAWs2AgwMBwsgACgCECIBBEAgAUGkx8AAQQMQRA0GCyAAEFlFDQEMBQsLIAAoAhAiAUUNACABQbjCwABBEBBEDQMLIABBADoABEEADAELIAAoAhAiAQRAIAFByMLAAEEZEEQNAgsgAEEBOgAEQQALIQIgACACNgIACyACDwtBAAvPAgEFfwJAAkACQAJAAkACQCAAKAIAIgAoAgAOAgABAwsgACgCCCIBRQ0CIAAoAgQiA0EEaygCACICQXhxIgRBBEEIIAJBA3EiAhsgAWpJDQQgAkUgBCABQSdqTXINAQwDCyAALQAEQQNHDQEgACgCCCIDKAIAIQEgA0EEaigCACICKAIAIgQEQCABIAQRBAALIAIoAgQiAgRAIAFBBGsoAgAiBEF4cSIFQQRBCCAEQQNxIgQbIAJqSQ0EIARBACAFIAJBJ2pLGw0DIAEQLQsgA0EEaygCACIBQXhxIgJBEEEUIAFBA3EiARtJDQMgAUUNACACQTRPDQILIAMQLQsgAEEEaygCACIDQXhxIgFBGEEcIANBA3EiAxtJDQEgA0EAIAFBPE8bDQAgABAtDwtBiNfBAEEuQbjXwQAQ6gEAC0HI1sEAQS5B+NbBABDqAQALgAQBCX8jAEEgayIFJAAgASABKAIUIgdBAWoiCDYCFAJAIAEoAhAiBiAISwRAIAggBmshCiABKAIMIQlBACEHAkADQCAIIAlqLQAAIgtBMGsiDEH/AXEiDUEKTwRAIAdFBEAgBUENNgIUIAUgCSAGIAhBAWoiASAGIAEgBkkbECMgBUEUaiAFKAIAIAUoAgQQ0AEhASAAQQE2AgAgACABNgIEDAULIAQgB2ohBCALQSByQeUARwRAIAAgASACIAMgBBB2DAULIAAgASACIAMgBBBUDAQLIA1BBUsgA0KZs+bMmbPmzBlSciADQpiz5syZs+bMGVZxDQEgASAIQQFqIgg2AhQgB0EBayEHIANCCn4gDK1C/wGDfCEDIAYgCEcNAAsgACABIAIgAyAEIApqEHYMAgsgBCAHaiEGAkACQAJAIAEoAhQiBCABKAIQIghPDQAgASgCDCEHA0AgBCAHai0AACIJQTBrQf8BcUEJTQRAIAEgBEEBaiIENgIUIAQgCEcNAQwCCwsgCUEgckHlAEYNAQsgACABIAIgAyAGEHYMAQsgACABIAIgAyAGEFQLDAELIAVBBTYCFCAFQQhqIAEoAgwgBiAHQQJqIgEgBiABIAZJGxAjIAVBFGogBSgCCCAFKAIMENABIQEgAEEBNgIAIAAgATYCBAsgBUEgaiQAC+cCAQV/AkAgAUHN/3tBECAAIABBEE0bIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEBgiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQPAwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEDwLIABBCGohAwsgAwvZAgIEfwF+IwBB0ABrIgQkACAEIAEgAkH3xcAAQQEQIQNAIARBxABqIAQQKSAEKAJEIgNFDQALAkAgACACAn8gA0ECRwRAIAQoAkgMAQsgAgsiA2tBEE0EfiACIANHBEAgASACaiEGIAEgA2ohAwNAAn8gAywAACIBQQBOBEAgAUH/AXEhAiADQQFqDAELIAMtAAFBP3EhBSABQR9xIQIgAUFfTQRAIAJBBnQgBXIhAiADQQJqDAELIAMtAAJBP3EgBUEGdHIhBSABQXBJBEAgBSACQQx0ciECIANBA2oMAQsgAkESdEGAgPAAcSADLQADQT9xIAVBBnRyciECIANBBGoLIQMgAkHBAGtBX3FBCmogAkEwayACQTlLGyIBQRBPDQMgAa0gB0IEhoQhByADIAZHDQALCyAAIAc3AwhCAQUgBws3AwAgBEHQAGokAA8LQfjFwAAQkQIAC/oCAQZ/IwBBMGsiAiQAIAACfyAAAn8CQAJAAkACQCABKAIUIgMgASgCECIFTw0AIAEoAgwhBgNAIAMgBmotAAAiBEEJayIHQRdLQQEgB3RBk4CABHFFckUEQCABIANBAWoiAzYCFCADIAVHDQEMAgsLIARB7gBHDQAgASADQQFqIgA2AhQgACAFTw0DIAEgA0ECaiIENgIUIAAgBmotAABB9QBHDQIgBCAAIAUgACAFSxsiAEYNAyABIANBA2oiBzYCFCAEIAZqLQAAQewARg0BIAchBAwCCyACQQhqIAEQRSACKAIIIAAgAigCDDYCBEEBagwECyAAIAdGDQEgASADQQRqIgQ2AhRBACAGIAdqLQAAQewARg0DGgsgAkEJNgIkIAJBGGogBiAFIAQQIyACQSRqIAIoAhggAigCHBDQAQwBCyACQQU2AiQgAkEQaiAGIAUgABAjIAJBJGogAigCECACKAIUENABCzYCBEECCzYCACACQTBqJAALhQMBBX8CQCAAQoCAgIAQVARAIAEhAgwBCyABQQhrIgIgACAAQoDC1y+AIgBCgL6o0A9+fKciA0GQzgBuIgRBkM4AcCIFQeQAbiIGQQF0LwCczUA7AAAgAUEEayADIARBkM4AbGsiA0H//wNxQeQAbiIEQQF0LwCczUA7AAAgAUEGayAFIAZB5ABsa0H//wNxQQF0LwCczUA7AAAgAUECayADIARB5ABsa0H//wNxQQF0LwCczUA7AAALIACnIgFBkM4ATwRAIAJBBGshAgNAIAIgASIDIAFBkM4AbiIBQfCxf2xqIgRB5ABuIgVBAXQvAJzNQDsAACACQQJqIAQgBUHkAGxrQQF0LwCczUA7AAAgAkEEayECIANB/8HXL0sNAAsgAkEEaiECCyABQeMASwRAIAJBAmsiAiABIAFB//8DcUHkAG4iAUHkAGxrQf//A3FBAXQvAJzNQDsAAAsgAUEJTQRAIAJBAWsgAUEwcjoAAA8LIAJBAmsgAUEBdC8AnM1AOwAAC+8CAQZ/IwBBEGsiBSQAAkACQAJAAkACQAJAAkAgAkEBcQRAIAJBAXYhAwwBCyABLQAAIgNFDQEgASEEA0AgBEEBaiEEAkAgA8BBAEgEQCADQf8BcUGAAUYEQCAGIAQvAAAiA2ohBiADIARqQQJqIQQMAgsgBCADQQNxQQh4IghBBXRBgICAgARxIAhBB3RyQR12aiADQQF2QQJxaiADQQJ2QQJxaiEEIAZFIAdyIQcMAQsgBCADQf8BcSIDaiEEIAMgBmohBgsgBC0AACIDDQALQQAhAyAHIAZBEElxDQAgBkEBdCIDQQBIDQQLIAMNAQtBASEEQQAhAwwBCyADEBgiBEUNAgsgBUEANgIIIAUgBDYCBCAFIAM2AgAgBUGsocAAIAEgAhBHRQ0CQdShwABB1gAgBUEPakHEocAAQayiwAAQrgEACxCTAgALQQEgAxDkAQALIAAgBSgCCDYCCCAAIAUpAgA3AgAgBUEQaiQAC9YCAQN/IwBBEGsiAyQAAn8CQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BQQMhAiAALQAAIgAhBCAAQQpPBEAgAyAAIABB5ABuIgRB5ABsa0H/AXFBAXQvAJzNQDsADEEBIQILQQAgACAEG0UEQCACQQFrIgIgA0ELamogBEEBdC0Anc1AOgAACyABQQFBAUEAIANBC2ogAmpBAyACaxBLDAILIAAtAAAhAkEDIQADQCAAIANqQQdqIAJBD3FBjMTAAGotAAA6AAAgAEEBayEAIAJBBHZBD3EiAg0ACyABQQFBjsfAAEECIAAgA2pBCGpBAyAAaxBLDAELIAAtAAAhAkEDIQADQCAAIANqQQxqIAJBD3FBgMHAAGotAAA6AAAgAEEBayEAIAJBBHZBD3EiAg0ACyABQQFBjsfAAEECIAAgA2pBDWpBAyAAaxBLCyADQRBqJAALggMBBH8gACgCDCECAkACQAJAIAFBgAJPBEAgACgCGCEDAkACQCAAIAJGBEAgAEEUQRAgACgCFCICG2ooAgAiAQ0BQQAhAgwCCyAAKAIIIgEgAjYCDCACIAE2AggMAQsgAEEUaiAAQRBqIAIbIQQDQCAEIQUgASICQRRqIAJBEGogAigCFCIBGyEEIAJBFEEQIAEbaigCACIBDQALIAVBADYCAAsgA0UNAgJAIAAoAhxBAnRBuOTBAGoiASgCACAARwRAIAMoAhAgAEYNASADIAI2AhQgAg0DDAQLIAEgAjYCACACRQ0EDAILIAMgAjYCECACDQEMAgsgACgCCCIAIAJHBEAgACACNgIMIAIgADYCCA8LQdDnwQBB0OfBACgCAEF+IAFBA3Z3cTYCAA8LIAIgAzYCGCAAKAIQIgEEQCACIAE2AhAgASACNgIYCyAAKAIUIgBFDQAgAiAANgIUIAAgAjYCGA8LDwtB1OfBAEHU58EAKAIAQX4gACgCHHdxNgIAC74DAQZ/IwBBIGsiAyQAIAAoAgwhBAJ/AkACQAJAAkAgACgCFCIBIAAoAhAiAkkEQCAAQQxqIQYDQCABIARqLQAAQQlrIgVBGUsNAkEBIAV0QZOAgARxRQRAIAVBGUcNAyAAQQA2AgggACABQQFqNgIUIANBEGogBiAAECUgAygCFCICIAMoAhAiAUECRg0HGiADKAIYIQQgAUEBRw0EIARBBkcNBiACKAAAQefmweMGcyACQQRqLwAAQeHoAXNyRQ0FDAYLIAAgAUEBaiIBNgIUIAEgAkcNAAsgAiEBCyADQQU2AhAgA0EIaiAEIAIgAUEBaiIAIAIgACACSRsQIyADQRBqIAMoAgggAygCDBDQAQwECyAAIANBH2pBpLvBABAkIAAQjgEMAwsgBEEGRw0BIAIoAABB5+bB4wZzIAJBBGovAABB4egBc3INAQtBAAwBCyMAQSBrIgEkACABIAQ2AgQgASACNgIAIAFBATYCDCABQay5wQA2AgggASABQQhqrUKAgICAwAeENwMYIAEgAa1CgICAgPAAhDcDEEHBg8AAIAFBEGoQlQEgAUEgaiQAIAAQjgELIANBIGokAAvbAgIGfwJ+IwBBEGsiBCQAIAEoAgAhBgJAAkACQAJAIAEoAggiAyABKAIEIgJJBEAgAyAGai0AAEHfAEYNAQsgAyACIAIgA0kbIQcCQANAIAMgB0YNBAJAAkAgAyAGai0AACICQd8ARwRAIAJBMGsiBUH/AXFBCkkNAiACQeEAa0H/AXFBGkkNASACQcEAa0H/AXFBGk8NByACQR1rIQUMAgtBASECIAEgA0EBajYCCCAIQn9SBEAgACAIQgF8NwMIDAYLIABBADoAAQwHCyACQdcAayEFCyABIANBAWoiAzYCCCAEIAhCPhCYASAEKQMIQgBSDQEgBCkDACIJIAWtQv8Bg3wiCCAJWg0ACyAAQQA6AAFBASECDAQLIABBADoAAUEBIQIMAwsgAEIANwMIIAEgA0EBajYCCAtBACECDAELIABBADoAAUEBIQILIAAgAjoAACAEQRBqJAALxQIBBX9BEEEAIABBq50ETxsiAiACQQhyIgEgAEELdCICIAFBAnQoAtS/QEELdEkbIgEgAUEEciIBIAFBAnQoAtS/QEELdCACSxsiASABQQJyIgEgAUECdCgC1L9AQQt0IAJLGyIBIAFBAWoiASABQQJ0KALUv0BBC3QgAksbIgEgAUEBaiIBIAFBAnQoAtS/QEELdCACSxsiAUECdCgC1L9AQQt0IgQgAkYgAiAES2ogAWoiBEECdCICQdS/wABqIQUgAigC1L9AQRV2IQJB/wUhAQJAIARBH00EQCAFKAIEQRV2IQEgBEUNAQsgBUEEaygCAEH///8AcSEDCwJAIAEgAkF/c2pFDQAgACADayEDIAFBAWshAUEAIQADQCAAIAJB5KTAAGotAABqIgAgA0sNASABIAJBAWoiAkcNAAsLIAJBAXELlAIBBH8CQAJAAkACQCAAKAIAIgFBf0cEQCABRQ0CIAAoAgQiAEEEaygCACICQXhxIgNBBEEIIAJBA3EiAhsgAWpJDQQgAkUgAyABQSdqTXINAQwDCyAALQAEQQNHDQEgACgCCCIAKAIAIQEgAEEEaigCACICKAIAIgMEQCABIAMRBAALIAIoAgQiAgRAIAFBBGsoAgAiA0F4cSIEQQRBCCADQQNxIgMbIAJqSQ0EIANBACAEIAJBJ2pLGw0DIAEQLQsgAEEEaygCACIBQXhxIgJBEEEUIAFBA3EiARtJDQMgAUUNACACQTRPDQILIAAQLQsPC0GI18EAQS5BuNfBABDqAQALQcjWwQBBLkH41sEAEOoBAAvTAgEGfyMAQRBrIgQkAAJ/AkACQAJAIAAoAgAiA0UNAANAAkAgACgCCCIBIAAoAgQiBU8NACABIANqLQAAQcUARw0AIAAgAUEBajYCCAwCCwJAAkACQAJAAkAgAkUNACAAKAIQIgZFDQAgBkHfo8EAQQIQRA0IIAAoAgAiA0UNASAAKAIIIQEgACgCBCEFCyABIAVPDQAgASADai0AAEHLAGsOAgIBAAsgABAmDQYMAgsgACABQQFqNgIIIAQgABBkIAQtAAANBCAAIAQpAwgQhwENBQwBCyAAIAFBAWo2AghBASAAQQAQIA0FGgsgAkEBayECIAAoAgAiAw0ACwtBAAwCCyAELQABIQEgACgCECICBEBBASACQcjCwABBuMLAACABQQFxIgIbQRlBECACGxBEDQIaCyAAIAE6AAQgAEEANgIAQQAMAQtBAQsgBEEQaiQAC9sCAQh/IwBBIGsiAiQAIAAoAgQhBSAAKAIAIQNBASEGIAEoAgBByMbAAEEBIAEoAgQoAgwRAAAhACAFBEADQCAHIQhBASEHIABBAXEhBEEBIQACQCAEDQACQCABLQAKQYABcUUEQCAIQQFxRQ0BIAEoAgBB36PBAEECIAEoAgQoAgwRAABFDQEMAgsgASgCBCEEIAEoAgAhCSAIQQFxRQRAIAlBxNjBAEEBIAQoAgwRAAANAgsgAkEBOgAPIAIgBDYCBCACIAk2AgAgAkHosMAANgIUIAIgASkCCDcCGCACIAJBD2o2AgggAiACNgIQIAMgAkEQahBhBEAMAgsgAigCEEH3qsAAQQIgAigCFCgCDBEAACEADAELIAMgARBhIQALIANBAWohAyAFQQFrIgUNAAsLIABFBEAgASgCAEHJxsAAQQEgASgCBCgCDBEAACEGCyACQSBqJAAgBgvhAgIGfwF+IwBBIGsiAiQAIAAoAgAhAwJAAkACQAJAAkACQCAAKAIEIgQOAwMCAQALQQEhACABKAIAIgVB2KPBAEEHIAEoAgQiBigCDCIHEQAADQQgAiADNgIcIAIgAkEcaq1CgICAgJAGhCIINwMIIAUgBkGGnsAAIAJBCGoQRw0DIARBA3RBCGshBCADQQhqIQEDQCACIAE2AhwgBUHfo8EAQQIgBxEAAA0EIAIgCDcDCCAFIAZBhp7AACACQQhqEEcNBCABQQhqIQFBACEAIARBCGsiBA0ACwwECyACQoCAgIDwACIIIANBCGqthDcDECACIAggA62ENwMIIAEoAgAgASgCBEGincAAIAJBCGoQRyEADAMLIAIgA61CgICAgPAAhDcDCCABKAIAIAEoAgRBhp7AACACQQhqEEchAAwCC0G3o8EAQQ5ByKPBABDqAQALQQEhAAsgAkEgaiQAIAALsgIBBX8CQAJAAkAgAiACQQNqQXxxIgRGBEAgA0EIayEGQQAhBAwBCyADIAQgAmsiBCADIARJGyEEIAMEQCABQf8BcSEHQQEhBgNAIAIgBWotAAAgB0YNBCAEIAVBAWoiBUcNAAsLIAQgA0EIayIGSw0BCyABQf8BcUGBgoQIbCEFA0BBgIKECCACIARqIgcoAgAgBXMiCGsgCHJBgIKECCAHQQRqKAIAIAVzIgdrIAdycUGAgYKEeHFBgIGChHhHDQEgBEEIaiIEIAZNDQALCwJAIAMgBEYNACADIARrIQMgAiAEaiECQQAhBSABQf8BcSEBA0AgASACIAVqLQAARwRAIAVBAWoiBSADRw0BDAILCyAEIAVqIQVBASEGDAELQQAhBgsgACAFNgIEIAAgBjYCAAuiAgIEfwN+IwBBIGsiAyQAQRQhAiAAKQMAIgcgB0I/hyIGhSAGfSIGQugHWgRAA0AgA0EMaiACaiIAQQRrIAYiCCAGQpDOAIAiBkKQzgB+faciBEH//wNxQeQAbiIFQQF0LwCczUA7AAAgAEECayAEIAVB5ABsa0H//wNxQQF0LwCczUA7AAAgAkEEayECIAhC/6ziBFYNAAsLIAZCCVYEQCACQQJrIgIgA0EMamogBqciACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0LwCczUA7AAAgAK0hBgsgB1BFIAZQcUUEQCACQQFrIgIgA0EMamogBqdBAXQtAJ3NQDoAAAsgASAHQgBZQQFBACADQQxqIAJqQRQgAmsQSyADQSBqJAALmAIBB38jAEEQayIDJABBCiECIAAoAgAiBCAEQR91IgBzIABrIgBB6AdPBEADQCADQQZqIAJqIgVBBGsgACIGIABBkM4AbiIAQZDOAGxrIgdB//8DcUHkAG4iCEEBdC8AnM1AOwAAIAVBAmsgByAIQeQAbGtB//8DcUEBdC8AnM1AOwAAIAJBBGshAiAGQf+s4gRLDQALCyAAQQlLBEAgAkECayICIANBBmpqIAAgAEH//wNxQeQAbiIAQeQAbGtB//8DcUEBdC8AnM1AOwAAC0EAIAQgABtFBEAgAkEBayICIANBBmpqIABBAXQtAJ3NQDoAAAsgASAEQX9zQR92QQFBACADQQZqIAJqQQogAmsQSyADQRBqJAALugIBBH9BHyECIABCADcCECABQYCAgAhJBEAgAUEmIAFBCHZnIgNrdkEBcSADQQF0ckE+cyECCyAAIAI2AhwgAkECdEG45MEAaiEEQQEgAnQiA0HU58EAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghB1OfBAEHU58EAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWoiBCgCECICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBEEQaiAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC80DAQh/IwBBEGsiAyQAAkBBiOjBACgCAEUEQEGI6MEAQX82AgACfwJAAkACQEGU6MEAKAIAIgBBkOjBACgCACIBRgRAIABBjOjBACgCACIBRw0B0G9BgAEgACAAQYABTRsiBvwPASICQX9HDQIMBgsgACABTw0FQdjjwQAoAgAgAEECdGooAgAhAkEADAMLIAAgAU8NBEHY48EAKAIAIQIMAQsCQEGY6MEAKAIAIgFFBEBBmOjBACACNgIADAELIAAgAWogAkcNBAsgA0EEaiEEQdjjwQAoAgAhAkEBIQcCfyAAIAZqIgYiAUH/////AUsEQEEEDAELIAFBAnQhBQJAAn8gAARAIAIgAEECdEEEIAUQMQwBCyAFEBgLIgFFBEAgBEEENgIEDAELIAQgATYCBEEAIQcLQQgLIARqIAU2AgAgBCAHNgIAIAMoAgRBAUYNA0HY48EAIAMoAggiAjYCAEGM6MEAIAY2AgALIAIgAEECdGogAEEBaiICNgIAQZDowQAgAjYCAEGI6MEAKAIAQQFqCyEBQZTowQAgAjYCAEGI6MEAIAE2AgBBmOjBACgCACEBIANBEGokACAAIAFqDwtB1NvBABDVAQALAAuOAgIBfwF+IwBBIGsiBCQAAkACQAJAIAAgAk0EQCABIAJLDQFCgICAgDAhBSAAIAFNDQIgBCAANgIIIAQgATYCDCAEIAUgBEEMaq2ENwMYIAQgBSAEQQhqrYQ3AxBBsoDAACAEQRBqIAMQygEACyAEIAA2AgggBCACNgIMIARCgICAgDAiBSAEQQxqrYQ3AxggBCAFIARBCGqthDcDEEHHgsAAIARBEGogAxDKAQALIAQgATYCCCAEIAI2AgwgBEKAgICAMCIFIARBDGqthDcDGAwBCyAEIAE2AgggBCACNgIMIAQgBSAEQQxqrYQ3AxgLIAQgBSAEQQhqrYQ3AxBBgIPAACAEQRBqIAMQygEAC7QCAQN/IwBBIGsiAiQAAn8CQAJAAkAgACgCAEUEQCAAKAIQIgANAQwDCyACQQhqIAAQgQEgAigCCCIDRQRAIAItAAwhAyAAKAIQIgQEQEEBIARByMLAAEG4wsAAIANBAXEiBBtBGUEQIAQbEEQNBRoLIAAgAzoABCAAQQA2AgBBAAwECyACQQhqIAMgAigCDCIEEF0CQCACKQMIQgFRBEAgAiACKQMQNwMYIAAoAhAiAEUNBCACQRhqIAAQcw0BDAMLIAAoAhAiAEUNAyAAQY7HwABBAhBEDQAgACADIAQQREUNAgtBAQwDCyAAQeHCwABBARBEDAILIAAtAApBgAFxDQAgAiABEMgBIAIoAgAiAQRAIAAgASACKAIEEEQMAgtBkMfAABCRAgALQQALIAJBIGokAAu/AgIDfwF7IwBBIGsiAiQAAkACQAJAIAAoAgAiA0UNACAAKAIIIgEgACgCBE8NAAJAAkACQCABIANqLQAAIgNByQBHBEAgA0HCAEcNBCAAIAFBAWo2AgggAiAAEI8BIAIoAgANASAAKAIQIgFFDQIgAUHIwsAAQbjCwAAgAi0ABEEBcSIBG0EZQRAgARsQREUNAkECIQEMBgsgACABQQFqNgIIQQIhASAAQQAQH0UNBAwFCyAAKAIQRQ0BIAD9AAIAIQQgACAC/QACAP0LAgAgAiAE/QsDECAAEHEgACAC/QADEP0LAgBB/wFxIQEMBAsgACAC/QACAP0LAgALQQAhAQwCC0ECQQAgAEEAEB8bIQEMAQsgACgCECIDBEAgA0HcxsAAQQEQRA0BC0ECQQEgABBnGyEBCyACQSBqJAAgAQu9AgIEfwF+IwBBQGoiAiQAIAAoAgAhACACQQA2AjggAkKAgICAEDcCMCACQZSzwQA2AhwgAkKggICABjcCICACIAJBMGo2AhgCQAJAIAAgAkEYaiIDEDJFBEAgAiACKAI4NgIQIAIgAikCMDcDCCACQoCAgIAwIgYgAEEQaq2ENwMoIAIgBiAAQQxqrYQ3AyAgAiACQQhqrUKAgICAoAaENwMYIAEoAgAgASgCBEG/n8AAIAMQRyACKAIIIgAEQCACKAIMIgRBBGsoAgAiA0F4cSIFQQRBCCADQQNxIgMbIABqSQ0CIANBACAFIABBJ2pLGw0DIAQQLQsgAkFAayQADwtBvLPBAEE3IAJBP2pBrLPBAEH0s8EAEK4BAAtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALlgICBH8DfiMAQSBrIgMkAEEUIQIgACkDACIHIQYgB0LoB1oEQANAIANBDGogAmoiAEEEayAGIgggBkKQzgCAIgZCkM4Afn2nIgRB//8DcUHkAG4iBUEBdC8AnM1AOwAAIABBAmsgBCAFQeQAbGtB//8DcUEBdC8AnM1AOwAAIAJBBGshAiAIQv+s4gRWDQALCyAGQglWBEAgAkECayICIANBDGpqIAanIgAgAEH//wNxQeQAbiIAQeQAbGtB//8DcUEBdC8AnM1AOwAAIACtIQYLIAdQRSAGUHFFBEAgAkEBayICIANBDGpqIAanQQF0LQCdzUA6AAALIAFBAUEBQQAgA0EMaiACakEUIAJrEEsgA0EgaiQAC8ACAQV/IwBBMGsiASQAIAAoAgwhBAJ/AkACQAJAAkAgACgCFCICIAAoAhAiA0kEQANAAkAgAiAEai0AACIFQQlrDiQAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAYDCyAAIAJBAWoiAjYCFCACIANHDQALIAMhAgsgAUEDNgIkIAFBEGogBCADIAJBAWoiACADIAAgA0kbECMgAUEkaiABKAIQIAEoAhQQ0AEMBAsgBUH9AEYNAQsgAUEWNgIkIAFBCGogBCADIAJBAWoiACADIAAgA0kbECMgAUEkaiABKAIIIAEoAgwQ0AEMAgsgACACQQFqNgIUQQAMAQsgAUEVNgIkIAFBGGogBCADIAJBAWoiACADIAAgA0kbECMgAUEkaiABKAIYIAEoAhwQ0AELIAFBMGokAAuJAgEHfyMAQRBrIgMkAEEKIQIgACgCACIEIQAgBEHoB08EQANAIANBBmogAmoiBUEEayAAIgYgAEGQzgBuIgBBkM4AbGsiB0H//wNxQeQAbiIIQQF0LwCczUA7AAAgBUECayAHIAhB5ABsa0H//wNxQQF0LwCczUA7AAAgAkEEayECIAZB/6ziBEsNAAsLIABBCUsEQCACQQJrIgIgA0EGamogACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0LwCczUA7AAALQQAgBCAAG0UEQCACQQFrIgIgA0EGamogAEEBdC0Anc1AOgAACyABQQFBAUEAIANBBmogAmpBCiACaxBLIANBEGokAAuwAgICfwJ8IwBBIGsiBSQAIAO6IQcgAAJ/AkACQAJAAkAgBCAEQR91IgZzIAZrIgZBtQJPBEADQCAHRAAAAAAAAAAAYQ0FIARBAE4NAiAHRKDI64XzzOF/oyEHIARBtAJqIgQgBEEfdSIGcyAGayIGQbUCTw0ACwsgBkEDdCsD8LxBIQggBEEATg0BIAcgCKMhBwwDCyAFQQ42AhQgBUEIaiABKAIMIAEoAhAgASgCFBAjIAAgBUEUaiAFKAIIIAUoAgwQ0AE2AgQMAQsgByAIoiIHmUQAAAAAAADwf2INASAFQQ42AhQgBSABKAIMIAEoAhAgASgCFBAjIAAgBUEUaiAFKAIAIAUoAgQQ0AE2AgQLQQEMAQsgACAHIAeaIAIbOQMIQQALNgIAIAVBIGokAAuUAgEEfyMAQRBrIgIkACACQQA2AgwCfyABQYABTwRAIAFBP3FBgH9yIQMgAUEGdiEEIAFBgBBJBEAgAiADOgANIAIgBEHAAXI6AAxBAgwCCyABQQx2IQUgBEE/cUGAf3IhBCABQf//A00EQCACIAM6AA4gAiAEOgANIAIgBUHgAXI6AAxBAwwCCyACIAM6AA8gAiAEOgAOIAIgBUE/cUGAf3I6AA0gAiABQRJ2QXByOgAMQQQMAQsgAiABOgAMQQELIQEgACAAKAIEIgMgAWs2AgQgACAAKAIAIAEgA0tyIgQ2AgBBASEDIARFBEAgACgCCCIAKAIAIAJBDGogASAAKAIEKAIMEQAAIQMLIAJBEGokACADC4ECAQZ/IAAoAgghBAJ/QQEgAUGAAUkNABpBAiABQYAQSQ0AGkEDQQQgAUGAgARJGwsiBiAAKAIAIARrSwRAIAAgBCAGEJIBCyAAKAIEIARqIQICQCABQYABTwRAIAFBP3FBgH9yIQUgAUEGdiEDIAFBgBBJBEAgAiAFOgABIAIgA0HAAXI6AAAMAgsgAUEMdiEHIANBP3FBgH9yIQMgAUH//wNNBEAgAiAFOgACIAIgAzoAASACIAdB4AFyOgAADAILIAIgBToAAyACIAM6AAIgAiAHQT9xQYB/cjoAASACIAFBEnZBcHI6AAAMAQsgAiABOgAACyAAIAQgBmo2AghBAAuBAgEGfyAAKAIIIQQCf0EBIAFBgAFJDQAaQQIgAUGAEEkNABpBA0EEIAFBgIAESRsLIgYgACgCACAEa0sEQCAAIAQgBhCTAQsgACgCBCAEaiECAkAgAUGAAU8EQCABQT9xQYB/ciEFIAFBBnYhAyABQYAQSQRAIAIgBToAASACIANBwAFyOgAADAILIAFBDHYhByADQT9xQYB/ciEDIAFB//8DTQRAIAIgBToAAiACIAM6AAEgAiAHQeABcjoAAAwCCyACIAU6AAMgAiADOgACIAIgB0E/cUGAf3I6AAEgAiABQRJ2QXByOgAADAELIAIgAToAAAsgACAEIAZqNgIIQQAL+gEBA38jAEEQayICJAAgACgCACEAAn8gAS0AC0EYcUUEQCABKAIAIAAgASgCBCgCEBEBAAwBCyACQQA2AgwgASACQQxqAn8gAEGAAU8EQCAAQT9xQYB/ciEDIABBBnYhASAAQYAQSQRAIAIgAzoADSACIAFBwAFyOgAMQQIMAgsgAEEMdiEEIAFBP3FBgH9yIQEgAEH//wNNBEAgAiADOgAOIAIgAToADSACIARB4AFyOgAMQQMMAgsgAiADOgAPIAIgAToADiACIARBP3FBgH9yOgANIAIgAEESdkFwcjoADEEEDAELIAIgADoADEEBCxBECyACQRBqJAALrAIBBX8jAEEQayICJABBASEFAkAgASgCACIDQbDMwABBDSABKAIEIgYoAgwiBBEAAA0AIAEtAApBgAFxRQRAIANBhsfAAEEDIAQRAAANASADQb3MwABBBCAEEQAADQEgA0GKxcAAQQIgBBEAAA0BIAMgAC0AAEECdCIAKALc3UEgACgCxN1BIAQRAAANASADQYnHwABBAiAEEQAAIQUMAQsgA0H0qsAAQQMgBBEAAA0AIAIgBjYCBCACIAM2AgAgAkEBOgAPIAIgAkEPajYCCCACQb3MwABBBBBGDQAgAkGKxcAAQQIQRg0AIAIgAC0AAEECdCIAKAKM3kEgACgC9N1BEEYNACACQfeqwABBAhBGDQAgA0GVxcAAQQEgBBEAACEFCyACQRBqJAAgBQvsAQIGfwFvIwBBIGsiAiQAIAIgATcDAAJAAkACQCABQoCAgICAgIAQWgRAIAIgAq1CgICAgIABhDcDCCACQRRqQeabwAAgAkEIahBgIAIoAhQhAyACKAIYIgUgAigCHBAQIQgQbiIGIAgmASADBEAgBUEEaygCACIEQXhxIgdBBEEIIARBA3EiBBsgA2pJDQIgBEEAIAcgA0EnaksbDQMgBRAtC0EBIQMMAwsgAboQggIhBgwCC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAsgACAGNgIEIAAgAzYCACACQSBqJAALxQgDA38BfgFvIwBBIGsiBSQAQbTkwQBBtOTBACgCACIGQQFqNgIAAkACQAJAAkAgBkEASA0AAkACQEGo5MEALQAARQRAQajkwQBBAToAAEGk5MEAQaTkwQAoAgBBAWo2AgBBrOTBACgCACIGQQBIDQMgBiAGQQFqIgdKDQRBrOTBACAHNgIAQbDkwQAoAgANAUGs5MEAIAdBAWs2AgAMAgsgBSAAIAEoAhgRAgAACyAFQQhqIAAgASgCFBECACAFIAQ6AB0gBSADOgAcIAUgAjYCGCAFIAUpAwg3AhAgBUEQaiEAIwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMAkACQAJAAkACQCACQQxqIgRB/NrBAEEMELkBDQAgAiAAKAIIIgEpAgA3AhggAiABQQxqrUKAgICAMIQ3AzAgAiABQQhqrUKAgICAMIQ3AyggAiACQRhqrUKAgICAoAGENwMgIARBvKTAAEGqgMAAIAJBIGoiBBBHDQAgBCAAKAIAIgEgACgCBCgCDCIFEQIAIAEhAAJAIAL9AAQg/Qxc9ulf3AL2ufHBcGzyYcEk/SP9YwR/QQQFIAQgACAFEQIAIAL9AAQg/QzaB4xJeGVM08J9j02WnybP/ST9Uw0BIABBBGohAEEICyABaigCACEBIAAoAgAhACACQQxqIgRBiNvBAEECELkBDQEgBCAAIAEQuQENAQsgAiACKAIUIgA2AiggAiACKQIMIgg3AyAgCKciBiAAa0EJTQRAIAJBIGogAEEKEJMBIAIoAiAhBiACKAIoIQALIAIoAiQiBSAAaiIBQbKkwAApAAA3AAAgAUG6pMAALwAAOwAIIAIgAEEKaiIANgIoEA0hCRBuIgEgCSYBIAJBDGogASUBEA4gAigCDCEHAkACQCACKAIQIgQgBiAAa0sEQCACQSBqIAAgBBCTASACKAIgIQYgAigCJCEFIAIoAighAAwBCyAERQ0BCyAERQ0AIAAgBWogByAE/AoAAAsgAiAAIARqIgA2AiggBiAAa0EBTQRAIAJBIGogAEECEJMBIAIoAiQhBSACKAIoIQALIAAgBWpBihQ7AAAgAiAAQQJqIgA2AiggACACKAIgIgZJBEAgBSAGQQEgABAxIgVFDQILIAUgABAPIAQEQCAHQQRrKAIAIgBBeHEiBUEEQQggAEEDcSIAGyAEakkNAyAAQQAgBSAEQSdqSxsNBCAHEC0LIAFBhAhPBEAgARCrAQsgAkFAayQADAQLQbyzwQBBNyACQT9qQdSkwABB9LPBABCuAQALQQEgABDkAQALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0Gs5MEAQazkwQAoAgAiAEEBazYCACAAQQBMDQMLQajkwQBBADoAACADDQMLAAtByNfBAEEcQeTXwQAQywEAC0Gc28EAQc0AQcTbwQAQygEACwAL4AEBAn8jAEEQayIDJAAgACgCACEAAn8CQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BIAAgARB1DAILIAAoAgAhAkEJIQADQCAAIANqQQZqIAJBD3EtAIzEQDoAACAAQQFrIQAgAkEEdiICDQALIAFBAUGOx8AAQQIgACADakEHakEJIABrEEsMAQsgACgCACECQQkhAANAIAAgA2pBBmogAkEPcS0AgMFAOgAAIABBAWshACACQQR2IgINAAsgAUEBQY7HwABBAiAAIANqQQdqQQkgAGsQSwsgA0EQaiQAC/IBAQF/IwBBEGsiBiQAAkACQAJAIAEEQCAGQQRqIAEgAyAEIAUgAigCEBEGAAJAIAYoAgQiAiAGKAIMIgFNBEAgBigCCCEFDAELIAJBAnQhAiAGKAIIIQMgAUUEQCADQQRrKAIAIgRBeHEiBUEEQQggBEEDcSIEGyACakkNAyAEQQAgBSACQSdqSxsNBCADEC1BBCEFDAELIAMgAkEEIAFBAnQiAhAxIgVFDQQLIAAgATYCBCAAIAU2AgAgBkEQaiQADwsQqwIAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtBBCACEOQBAAvwAQECfyMAQRBrIgUkAAJAAkACQCABBEAgBUEEaiABIAMgBCACKAIQEQcAAkAgBSgCBCICIAUoAgwiAU0EQCAFKAIIIQQMAQsgAkECdCECIAUoAgghAyABRQRAIANBBGsoAgAiBEF4cSIGQQRBCCAEQQNxIgQbIAJqSQ0DIARBACAGIAJBJ2pLGw0EIAMQLUEEIQQMAQsgAyACQQQgAUECdCICEDEiBEUNBAsgACABNgIEIAAgBDYCACAFQRBqJAAPCxCrAgALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0EEIAIQ5AEAC+MBAQh/IAEoAggiAiABKAIEIgMgAiADSxshCCABKAIAIQUgAiEGAkACQANAIAggBiIERg0BIAEgBEEBaiIGNgIIIAQgBWotAAAiB0HhAGshCSAHQTBrQf8BcUEKSSAJQf8BcUEGSXINAAsgB0HfAEcNAAJAIAIEQCACIANPBEAgAiADRw0CIAMgBE8NBAwCCyACIAVqLAAAQUBIIAMgBElyDQEMAwsgAyAETw0CCyAFIAMgAiAEQYjGwAAQhAIACyAAQQA2AgAgAEEAOgAEDwsgACAEIAJrNgIEIAAgAiAFajYCAAvpAQIBfwF+IwBBQGoiBiQAIAYgATYCBCAGIAA2AgAgBiADNgIMIAYgAjYCCCAGQQI2AhQgBkH7scAANgIQIAQEQCAGQcEANgIcIAYgBDYCGCAGQoCAgICQASIHIAZBCGqthDcDOCAGIAcgBq2ENwMwIAYgBkEYaq1CgICAgJAChDcDKCAGIAZBEGqtQoCAgICgAYQ3AyBB9oTAACAGQSBqIAUQygEACyAGQoCAgICQASIHIAZBCGqthDcDMCAGIAcgBq2ENwMoIAYgBkEQaq1CgICAgKABhDcDIEG/hMAAIAZBIGogBRDKAQAL1QICBn8BfgJAIAAoAggiASAAKAIEIgJGDQAgASACSQRAIAAoAgAiBCABai0AACIDQSJGIANB3ABGciADQSBJcg0BIAQgAUEBaiIFaiEDQQAgAiAFayIGQfj///8HcWshAgNAIAMhASACRQRAIAAgBkF4cSAFajYCCAJAIAAoAggiASAAKAIEIgJPDQAgACgCACEEA0AgASAEai0AACIDQSJGIANB3ABGciADQSBJcg0BIAAgAUEBaiIBNgIIIAEgAkcNAAsLDAMLIAJBCGohAiABQQhqIQMgASkAACIHQn+FIAdC3Ljx4sWLl67cAIVCgYKEiJCgwIABfSAHQqLEiJGixIiRIoVCgYKEiJCgwIABfSAHQqDAgIGChIiQIH2EhINCgIGChIiQoMCAf4MiB1ANAAsgACABIARrIAd6p0EDdmo2AggPCyABIAJBmKXBABC7AQALC9ABAQN/IwBBEGsiAiQAIAJBADYCDCAAIAJBDGoCfyABQYABTwRAIAFBP3FBgH9yIQMgAUEGdiEAIAFBgBBJBEAgAiADOgANIAIgAEHAAXI6AAxBAgwCCyABQQx2IQQgAEE/cUGAf3IhACABQf//A00EQCACIAM6AA4gAiAAOgANIAIgBEHgAXI6AAxBAwwCCyACIAM6AA8gAiAAOgAOIAIgBEE/cUGAf3I6AA0gAiABQRJ2QXByOgAMQQQMAQsgAiABOgAMQQELEDMgAkEQaiQAC4YCAQR/IwBBIGsiASQAIAAoAgwhBAJ/AkACQCAAKAIUIgIgACgCECIDSQRAA0ACQCACIARqLQAAQQlrDjIAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAwQLIAAgAkEBaiICNgIUIAIgA0cNAAsgAyECCyABQQM2AhQgAUEIaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQRRqIAEoAgggASgCDBDQAQwCCyAAIAJBAWo2AhRBAAwBCyABQQY2AhQgASAEIAMgAkEBaiIAIAMgACADSRsQIyABQRRqIAEoAgAgASgCBBDQAQsgAUEgaiQAC90BAQR/IwBBEGsiAkEAOgAIIAJBADsBBiACIAFBFHYtAIzEQDoACSACIAFBBHZBD3EtAIzEQDoADSACIAFBCHZBD3EtAIzEQDoADCACIAFBDHZBD3EtAIzEQDoACyACIAFBEHZBD3EtAIzEQDoACiABQQFyZ0ECdiIDIAJBBmoiBGoiBUH7ADoAACAFQQFrQfUAOgAAIAQgA0ECayIDakHcADoAACAAQQo6AAsgACADOgAKIAAgAikBBjcAACACQf0AOgAPIAIgAUEPcS0AjMRAOgAOIAAgAi8BDjsACAvDAQIDfwF+IwBBEGsiBCQAAkAgACgCECIDRQRADAELQQEhAiADQaDHwABBARBEDQAgAVAEQCADQfvGwABBARBEIQIMAQsCQCABIAA1AhQiBVgEQCAFIAF9IgFCGlQNASADQfvGwABBARBEDQIgBCABNwMIIARBCGogAxBzIQIMAgsgA0G4wsAAQRAQRA0BQQAhAiAAQQA6AAQgAEEANgIADAELIAQgAadB4QBqNgIEIARBBGogAxB6IQILIARBEGokACACC8gBAQR/IABBBGoQQAJAAkACQAJAIAAoAhwiAQRAIAAoAiAiAkEEaygCACIDQXhxIgRBBEEIIANBA3EiAxsgAWpJDQEgA0EAIAQgAUEnaksbDQIgAhAtCyAAQQRrKAIAIgFBeHFBLEEwIAFBA3EiAhtJDQIgAkEAIAFB0ABPGw0DIAAQLQ8LQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAvdAQICfwF+IwBBIGsiAiQAIAEoAgBBf0YEQCABKAIMIQMgAkEANgIYIAJCgICAgBA3AhAgAkEQakHY1cEAIAMoAgAiAygCACADKAIEEEcaIAIgAigCGCIDNgIIIAIgAikCECIENwMAIAEgAzYCCCABIAQ3AgALIAEoAgghAyABQQA2AgggASkCACEEIAFCgICAgBA3AgAgAiADNgIYIAIgBDcDEEEMEBgiAUUEQBCeAgALIAEgAigCGDYCCCABIAIpAxA3AgAgAEGM28EANgIEIAAgATYCACACQSBqJAALtwECAn8BfiMAQRBrIgIkACAAKAIAIQMCQCABKQIIIgSnIgBBgICABHFFDQAgAEGAgIDAAHEEQCAAQYCAgAhyIQAMAQsgAUEKOwEMIABBgICAyAByIQALIAEgAEGAgIAEcjYCCEEJIQADQCAAIAJqQQZqIANBD3EtAIzEQDoAACAAQQFrIQAgA0EEdiIDDQALIAFBAUGOx8AAQQIgACACakEHakEJIABrEEsgASAENwIIIAJBEGokAAu1AQEEfyMAQRBrIgIkACACIAEoAiQ2AgggAiABKQIcNwMAAkACQEEMEBgiAwRAIAMgAigCCDYCCCADIAIpAwA3AgAgAUEEahBAIAFBBGsoAgAiBEF4cUEsQTAgBEEDcSIFG0kNASAFQQAgBEHQAE8bDQIgARAtIABByLbBADYCBCAAIAM2AgAgAkEQaiQADwsQngIAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAuaAQICfwF+QQEhB0EEIQYCQCAFrSADrX4iCEIgiFBFBEBBACEDDAELIAinIgNBgICAgHggBGtLBEBBACEDDAELAkACQAJ/IAEEQCACIAEgBWwgBCADEDEMAQsgA0UEQCAEIQYMAgsgAxAYCyIGDQAgACAENgIEDAELIAAgBjYCBEEAIQcLQQghBgsgACAGaiADNgIAIAAgBzYCAAuiAQICfwF+IwBBEGsiAyQAAkACQAJAIAEoAggiBCABKAIESQRAIAEoAgAgBGotAAAgAkH/AXFGDQELIABCADcDCAwBC0EBIQIgASAEQQFqNgIIIAMgARBkIAMtAABFBEAgAykDCCIFQn9SBEAgACAFQgF8NwMIDAILIABBADoAAQwCCyAAIAMtAAE6AAEMAQtBACECCyAAIAI6AAAgA0EQaiQAC6MBAQN/IwBBEGsiAiQAAkACQAJAIAAoAgwEQCAAIQEMAQsgAkEIaiABKAIMIAEoAhAgASgCFBAjIAAgAigCCCACKAIMENABIQEgAEEEaygCACIDQXhxIgRBGEEcIANBA3EiAxtJDQEgA0EAIARBPE8bDQIgABAtCyACQRBqJAAgAQ8LQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC6IBAgJ/AX4jAEEQayICJAAgASgCCCEDIAIgARBkAkAgAi0AAEEBRgRAIAItAAEhASAAQQA2AgAgACABOgAEDAELIAIpAwgiBCADQQFrrVQEQCABKAIMQQFqIgNB9ANNBEAgACADNgIMIAAgBD4CCCAAIAEpAgA3AgAMAgsgAEEANgIAIABBAToABAwBCyAAQQA2AgAgAEEAOgAECyACQRBqJAALlAEBA38CfwJAAkAgASgCACIDRQRADAELA0ACQCABKAIIIgQgASgCBE8NACADIARqLQAAQcUARw0AIAEgBEEBajYCCAwCCwJAIAJFDQAgASgCECIDRQ0AIANB36PBAEECEEQNAwsgARAmDQIgAkEBaiECIAEoAgAiAw0ACwtBAAwBC0EBCyEBIAAgAjYCBCAAIAE2AgALjQEBBH8jAEEQayICJAACf0EBIAEoAgAiA0EnIAEoAgQiBSgCECIBEQEADQAaIAIgACgCAEGBAhBDAkAgAi0ADSIAQYEBTwRAIAMgAigCACABEQEARQ0BQQEMAgsgAyACIAItAAwiBGogACAEayAFKAIMEQAARQ0AQQEMAQsgA0EnIAERAQALIAJBEGokAAuGAQEBfyMAQRBrIgMkACACIAEgAmoiAUsEQEEAQQAQ5AEACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBEJsBIAMoAgRBAUYEQCADKAIIIAMoAgwQ5AEACyADKAIIIQIgACABNgIAIAAgAjYCBCADQRBqJAAL7AEBBH8jAEEQayIDJAAgAiABIAJqIgRLBEBBAEEAEOQBAAsgA0EEaiEBIAAoAgAiAiEFIAAoAgQhBgJAQQggBCACQQF0IgIgAiAESRsiAiACQQhNGyICQQBOBEACfyAFBEAgBiAFQQEgAhAxDAELIAIQGAsiBEUEQCABIAI2AgggAUEBNgIEIAFBATYCAAwCCyABIAI2AgggASAENgIEIAFBADYCAAwBCyABQQA2AgQgAUEBNgIACyADKAIEQQFGBEAgAygCCCADKAIMEOQBAAsgAygCCCEBIAAgAjYCACAAIAE2AgQgA0EQaiQAC4MBAQN/An8CQCAAKAIAIgFFDQADQAJAIAAoAggiAyAAKAIETw0AIAEgA2otAABBxQBHDQAgACADQQFqNgIIDAILAkAgAkUNACAAKAIQIgFFDQAgAUHfo8EAQQIQREUNAEEBDwtBASAAQQEQIA0CGiACQQFrIQIgACgCACIBDQALC0EACwvODgINfwF+IwBBEGsiCyQAQQEhAwJAAkAgAUEBcQRAAkAgAUEBdiIBRQ0AIAEQGCIDRQ0DIAFFDQAgAyAAIAH8CgAACyALIAE2AgwgCyADNgIIIAsgATYCBAwBCyALQQRqIAAgARBgCwJ/IwBB0ABrIggkACAIQRBqIAtBBGoiDSgCBCIGIA0oAggiAEHIrcEAQQkQIQJAAkAgCCgCEEUEQCAIAn9BACAILQAeDQAaIAgtAB0hBQJAIAgoAhgiAgRAIAgoAkAhAQJAIAgoAkQiAyACTQRAIAIgA0YNAQwHCyABIAJqLAAAQUBIDQYLIAEgAmoiB0EBaywAACIEQQBIBEAgBEE/cQJ/IAdBAmstAAAiBMAiCUG/f0oEQCAEQR9xDAELIAlBP3ECfyAHQQNrLQAAIgTAIglBv39KBEAgBEEPcQwBCyAJQT9xIAdBBGstAABBB3FBBnRyC0EGdHILIgdBBnRyIQQLIAVBAXENAQJ/QX8gBEGAAUkNABpBfiAEQYAQSQ0AGkF9QXwgBEGAgARJGwsgAmoiAkUEQEEAIQIMAgsCQCACIANPBEAgAiADRw0HDAELIAEgAmosAABBQEgNBgsgASACaiIBQQFrLAAAQQBODQEgAUECaywAABoMAQtBACICIAVBAXFFDQEaCyAIIAI2AghBAQs2AgQMAQsgCEEYaiEBIAgoAkwhAyAIKAJIIQQgCCgCRCEFIAgoAkAhAiAIKAI0QX9HBEAgCEEEaiABIAIgBSAEIANBABBNDAELIAhBBGogASACIAUgBCADQQEQTQsCQAJAAkACQCAIKAIEQQFGBEAgCCgCCCIBQQlqIgQhAgNAAkAgAkUNACAAIAJNBEAgACACRg0BDAcLIAIgBmosAABBQEgNBgsCQCAAIAJGBH8gAAUgAiAGai0AAEEwa0H/AXFBCkkNASACCyEFIAJFDQMCQCAAIAVNBEAgACAFRw0BDAULIAUgBmosAABBv39KDQQLIAYgACAFIABB5K3BABCEAgALIAJBAWohAgwACwALDAELIAAgBWtBCEkNACAFIAZqIgcpAABCoMa949aum7cgUg0AIAVBCGoiCSEDAkACQAJAAkADQAJAIANFDQAgACADTQRAIAAgA0YNAQwICyADIAZqLAAAQUBIDQcLAkACQAJAIAAgA0YEQCAAIQMMAQsgAyAGai0AAEEwa0H/AXFBCkkNASAAIANLDQgLIAQgBUsNAyAERQ0BIAQgBmosAABBv39KDQEMAwsgA0EBaiEDDAELCyACBEAgBywAAEFASA0BCyAEIAZqIQICQAJAAkAgBSAEayIODgIHAAELIAItAAAiCkEraw4DBgEGAQsgAi0AACEKCyACIApBK0YiBGohAiAOIARrIgdBCUkNAUEAIQQDQCAHRQ0DIAStQgp+Ig9CIIinDQQgAi0AAEEwayIKQQlLDQQgAkEBaiECIAdBAWshByAKIA+naiIEIApPDQALDAMLIAYgACAEIAVBhK7BABCEAgALIAdFBEBBACEEDAELQQAhBANAIAItAABBMGsiCkEJSw0CIAJBAWohAiAKIARBCmxqIQQgB0EBayIHDQALCwJAAkAgAyAJSQ0AIAkEQCAAIAlNBEAgACADRg0DDAILIAAgA0cNASAGIAlqLAAAQUBIDQEMAgsgACADRg0BCyAGIAAgCSADQZSuwQAQhAIACyAGIAlqIQICQAJAAkAgACAJayIKDgIEAAELIAItAAAiA0Eraw4DAwEDAQsgAi0AACEDC0EAIQdBf0EAIANBK0YiAxshCSACIANqIQICQCAKIANrIgNBCU8EQCAFIAlrQQhqIQMDQCAAIANGDQIgB61CCn4iD0IgiKcNBCACLQAAQTBrIgVBCUsNBCADQQFqIQMgAkEBaiECIAUgBSAPp2oiB00NAAsMAwsgA0UNACAFIAlrQQhqIQMDQCACLQAAQTBrIgVBCUsNAyACQQFqIQIgBSAHQQpsaiEHIAAgA0EBaiIDRw0ACwtBASEMIAAgAUkNASABRQRAIAEhAAwCCyAAIAFNBEAgASEADAILIAEiACAGaiwAAEG/f0oNAUHopMEAQTBBpK7BABDqAQALCwJAAkACQAJAAkAgDSgCACIBIABNDQAgAEUEQCAGQQRrKAIAIgNBeHEiBUEEQQggA0EDcSIDGyABakkNAiADQQAgBSABQSdqSxsNAyAGEC1BASEGDAELIAYgAUEBIAAQMSIGRQ0DC0EUEBgiAUUNAyABIAA2AgggASAGNgIEIAFBADYCACABIAdBACAMGzYCECABIARBACAMGzYCDCAIQdAAaiQAIAEMBwtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALQQEgABDkAQALEJ4CAAsgBiAAIAMgAEH0rcEAEIQCAAsgBiAAIAIgAEHUrcEAEIQCAAsgASADQQAgAkGMtMEAEIQCAAsgC0EQaiQADwtBASABEOQBAAuLAQEDfyABKAIcIQICQAJAQQQQGCIDBEAgAyACNgIAIAFBBGoQQCABQQRrKAIAIgJBeHFBJEEoIAJBA3EiBBtJDQEgBEEAIAJByABPGw0CIAEQLSAAQYS3wQA2AgQgACADNgIADwsQngIAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAt3AgF/AX4jAEEgayICJAACfyAAKAIAIgAoAgxFBEAgACABEDIMAQsgAkKAgICAMCIDIABBEGqthDcDGCACIAMgAEEMaq2ENwMQIAIgAK1CgICAgNAGhDcDCCABKAIAIAEoAgRBuIHAACACQQhqEEcLIAJBIGokAAtiAQR+IAAgAkL/////D4MiAyABQv////8PgyIEfiIFIAQgAkIgiCICfiIEIAMgAUIgiCIGfnwiAUIghnwiAzcDACAAIAMgBVStIAIgBn4gASAEVK1CIIYgAUIgiIR8fDcDCAuNAQICfwF+IwBBIGsiAiQAIAEoAgBBf0YEQCABKAIMIQMgAkEANgIcIAJCgICAgBA3AhQgAkEUakHY1cEAIAMoAgAiAygCACADKAIEEEcaIAIgAigCHCIDNgIQIAIgAikCFCIENwMIIAEgAzYCCCABIAQ3AgALIABBjNvBADYCBCAAIAE2AgAgAkEgaiQAC3UBA38gAEEEahBAAkACQCAAKAIcIgIEQCAAKAIgIgBBBGsoAgAiAUF4cSIDQQRBCCABQQNxIgEbIAJqSQ0BIAFBACADIAJBJ2pLGw0CIAAQLQsPC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtjAQF/An8gA0EASARAQQEhAUEEDAELAn8CfyABBEAgAiABQQEgAxAxDAELIAMQGAsiBEUEQCAAQQE2AgRBAQwBCyAAIAQ2AgRBAAshASADIQRBCAsgAGogBDYCACAAIAE2AgALYQECfyMAQRBrIgIkACAAKAIAIQNBCSEAA0AgACACakEGaiADQQ9xLQCMxEA6AAAgAEEBayEAIANBBHYiAw0ACyABQQFBjsfAAEECIAAgAmpBB2pBCSAAaxBLIAJBEGokAAtxAQN/AkACQCAAKAIAIgJBAEoEQCAAKAIEIgBBBGsoAgAiAUF4cSIDQQRBCCABQQNxIgEbIAJqSQ0BIAFBACADIAJBJ2pLGw0CIAAQLQsPC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtuAQN/AkACQCAAKAIAIgIEQCAAKAIEIgBBBGsoAgAiAUF4cSIDQQRBCCABQQNxIgEbIAJqSQ0BIAFBACADIAJBJ2pLGw0CIAAQLQsPC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAt9AwF/AX4BfCMAQRBrIgMkAAJAAkACQAJAIAAoAgBBAWsOAgECAAsgACsDCCEFIANBAzoAACADIAU5AwgMAgsgACkDCCEEIANBAToAACADIAQ3AwgMAQsgACkDCCEEIANBAjoAACADIAQ3AwgLIAMgASACEKQBIANBEGokAAtoAQF/IwBBEGsiBSQAIAFFBEAQqwIACyAFQQhqIAEgAyAEIAIoAhARBwAgACAFKAIIIgJBAkYiATYCCCAAIAUoAgwiA0EAIAEbNgIEIABBACADQYAIIAJBAXEbIAEbNgIAIAVBEGokAAvrAQEIfyMAQRBrIgIkACACQQRqIQMgACgCACIBIQQgACgCBCEHQQEhBUEEIQYCQEEEIAFBAXQiASABQQRNGyIIIgFB/////wNLBEBBACEBDAELIAFBAnQiAUH8////B0sEQEEAIQEMAQsCQAJ/IAQEQCAHIARBAnRBBCABEDEMAQsgARAYCyIERQRAIANBBDYCBAwBCyADIAQ2AgRBACEFC0EIIQYLIAMgBmogATYCACADIAU2AgAgAigCBEEBRgRAIAIoAgggAigCDBDkAQALIAIoAgghASAAIAg2AgAgACABNgIEIAJBEGokAAtnAQN/IwBBEGsiASQAIAFBBGogACgCACICIAAoAgRBCCACQQF0IgIgAkEITRsiAhCbASABKAIEQQFGBEAgASgCCCABKAIMEOQBAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQAC2YBA38jAEEQayICJAACQCABKAIAIgQoAgBBAUcNACAELQAEQQNHDQAgAkEIaiAEKAIIIgEoAgAgASgCBCgCGBECACACKAIMIQEgAigCCCEDCyAAIAE2AgQgACADNgIAIAJBEGokAAthAQF/IwBBMGsiAyQAIAMgAjYCDCADIAE2AgggAyAA/QADAP0LAxAgAyADQQhqrUKAgICA4ACENwMoIAMgA0EQaq1CgICAgOAGhDcDIEGhhMAAIANBIGoQlQEgA0EwaiQAC2EBAX8jAEEwayIDJAAgAyACNgIMIAMgATYCCCADIAD9AAMA/QsDECADIANBCGqtQoCAgIDgAIQ3AyggAyADQRBqrUKAgICA4AaENwMgQYKEwAAgA0EgahCVASADQTBqJAALYwEBfyMAQRBrIgAkAAJ/IAIoAgAEQEHi2MEAIQNBCQwBCyAAQQRqIAIoAgQgAigCCBBCQeLYwQAgACgCCCAAKAIEIgIbIQNBCSAAKAIMIAIbCyECIAMgAiABECggAEEQaiQAC2QBAX8CQAJAIAEEQCAAQQRrKAIAIgJBeHEiA0EEQQggAkEDcSICGyABakkNASACQQAgAyABQSdqSxsNAiAAEC0LDwtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALXgEBfyMAQSBrIgIkACACQZy6wQA2AgwgAiABNgIIIAIgADYCBCACIAJBCGqtQoCAgIDgAIQ3AxggAiACQQRqrUKAgICAMIQ3AxBB44PAACACQRBqEJUBIAJBIGokAAtjAQF/IwBBEGsiBiQAIAFFBEAQqwIACyAGQQhqIAEgAyAEIAUgAigCEBEGACAGKAIMIQEgACAGKAIIIgI2AgggACABQQAgAkEBcSICGzYCBCAAQQAgASACGzYCACAGQRBqJAALZAECfyAAQQRqEEAgAEEcahBaAkAgAEEEaygCACIBQXhxQSRBKCABQQNxIgIbTwRAIAJBACABQcgATxsNASAAEC0PC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAt8AQF/AkACQCAAQYQITwRAIADQbyYBQYjowQAoAgANAiAAQZjowQAoAgAiAUkNASAAIAFrIgBBkOjBACgCAE8NAUHY48EAKAIAIABBAnRqQZTowQAoAgA2AgBBlOjBACAANgIAQYjowQBBADYCAAsPCwALQeTbwQAQ1QEAC2EBAX8jAEEQayIFJAAgAUUEQBCrAgALIAVBCGogASADIAQgAigCEBEHACAFKAIMIQEgACAFKAIIIgI2AgggACABQQAgAkEBcSICGzYCBCAAQQAgASACGzYCACAFQRBqJAALXQECfwJAIABBBGsoAgAiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIAAQLQ8LQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC1wBAX8jAEEgayIFJAAgBSABNgIEIAUgADYCACAFIAM2AgwgBSACNgIIIAUgBUEIaq1CgICAgJABhDcDGCAFIAWtQoCAgICgAYQ3AxBBsYXAACAFQRBqIAQQygEAC10BAX8gAEEEahBAAkAgAEEEaygCACIBQXhxQSxBMCABQQNxIgIbTwRAIAJBACABQdAATxsNASAAEC0PC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtdAQF/IABBBGoQQAJAIABBBGsoAgAiAUF4cUEkQSggAUEDcSICG08EQCACQQAgAUHIAE8bDQEgABAtDwtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALWwEBfyMAQRBrIgUkACABRQRAEKsCAAsgBUEIaiABIAMgBCACKAIQEQcAIAAgBS0ACCIBNgIIIAAgBSgCDEEAIAEbNgIEIABBACAFLQAJIAEbNgIAIAVBEGokAAtZAQF/IwBBEGsiBCQAIAFFBEAQqwIACyAEQQhqIAEgAyACKAIQEQMAIAAgBC0ACCIBNgIIIAAgBCgCDEEAIAEbNgIEIABBACAELQAJIAEbNgIAIARBEGokAAtVAQF/IwBBEGsiBiQAIAFFBEAQqwIACyAGQQhqIAEgAyAEIAUgAigCEBEVACAGKAIMIQEgACAGKAIIIgI2AgQgACABQQAgAkEBcRs2AgAgBkEQaiQAC1UBAX8jAEEQayIGJAAgAUUEQBCrAgALIAZBCGogASADIAQgBSACKAIQEQYAIAYoAgwhASAAIAYoAggiAjYCBCAAIAFBACACQQFxGzYCACAGQRBqJAALVQEBfyMAQRBrIgYkACABRQRAEKsCAAsgBkEIaiABIAMgBCAFIAIoAhARFgAgBigCDCEBIAAgBigCCCICNgIEIAAgAUEAIAJBAXEbNgIAIAZBEGokAAtVAQF/IwBBEGsiBiQAIAFFBEAQqwIACyAGQQhqIAEgAyAEIAUgAigCEBEXACAGKAIMIQEgACAGKAIIIgI2AgQgACABQQAgAkEBcRs2AgAgBkEQaiQAC00BAX4CQCADQcAAcUUEQCADRQ0BIAJBACADa62GIAEgA60iBIiEIQEgAiAEiCECDAELIAIgA62IIQFCACECCyAAIAE3AwAgACACNwMIC1UBAX8CQAJAIAAoAgAgACgCCCIDayACSQRAIAAgAyACEJIBIAAoAgghAwwBCyACRQ0BCyACRQ0AIAAoAgQgA2ogASAC/AoAAAsgACACIANqNgIIQQALVQEBfwJAAkAgACgCACAAKAIIIgNrIAJJBEAgACADIAIQkwEgACgCCCEDDAELIAJFDQELIAJFDQAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAtTAQF/IwBBEGsiBSQAIAFFBEAQqwIACyAFQQhqIAEgAyAEIAIoAhARBwAgBSgCDCEBIAAgBSgCCCICNgIEIAAgAUEAIAJBAXEbNgIAIAVBEGokAAtPAgF/AX4jAEEgayIDJAAgAyABNgIMIAMgADYCCCADQoCAgIAwIgQgA0EIaq2ENwMYIAMgBCADQQxqrYQ3AxBBgYHAACADQRBqIAIQygEAC1EBAX8jAEEQayIEJAAgAUUEQBCrAgALIARBCGogASADIAIoAhARAwAgBCgCDCEBIAAgBCgCCCICNgIEIAAgAUEAIAJBAXEbNgIAIARBEGokAAs/AAJAIAFpQQFHIABBgICAgHggAWtLcg0AIAAEQAJ/IAFBCU8EQCABIAAQXAwBCyAAEBgLIgFFDQELIAEPCwALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIABBAWohACABQQFqIQEgAkEBayICDQEMAgsLIAQgBWshAwsgAwtQAQF/IwBBEGsiAiQAIAJBCGogASABKAIAKAIEEQIAIAIgAigCCCACKAIMKAIYEQIAIAIoAgQhASAAIAIoAgA2AgAgACABNgIEIAJBEGokAAtPAQJ/IAAoAgQhAiAAKAIAIQMCQCAAKAIIIgAtAABFDQAgA0HawMAAQQQgAigCDBEAAEUNAEEBDwsgACABQQpGOgAAIAMgASACKAIQEQEAC0oBAn8gACAAKAIEIgMgAms2AgQgACAAKAIAIAIgA0tyIgQ2AgBBASEDIAQEfyADBSAAKAIIIgAoAgAgASACIAAoAgQoAgwRAAALC0kBAX8jAEEQayIDJAAgA0EIaiABKAIAIAEoAgQgASgCCBAjIAIgAygCCCADKAIMENABIQEgAEECNgIAIAAgATYCBCADQRBqJAALSQEBfyMAQRBrIgMkACADQQhqIAEoAgAgASgCBCABKAIIECMgAiADKAIIIAMoAgwQ0AEhASAAQQE6AAAgACABNgIEIANBEGokAAtJAQF/IwBBEGsiAyQAIANBCGogASgCACABKAIEIAEoAggQIyACIAMoAgggAygCDBDQASEBIABBATsBACAAIAE2AgQgA0EQaiQAC0kBAX8jAEEQayIDJAAgA0EIaiABKAIAIAEoAgQgASgCCBAjIAIgAygCCCADKAIMENABIQEgAEEANgIAIAAgATYCBCADQRBqJAALPwEBfyMAQRBrIgIkACACIAE2AgQgAiAANgIAIAIgAq1CgICAgPAAhDcDCEHwncAAIAJBCGoQlQEgAkEQaiQACz8BAX8jAEEQayICJAAgAiABNgIEIAIgADYCACACIAKtQoCAgIDwAIQ3AwhB3J3AACACQQhqEJUBIAJBEGokAAtIAQF/AkAgAUHhAGsiAUH/AXFBGUsEQEEAIQEMAQsgAUECdEH8B3EiAigC3NxBIQEgAigC9NtBIQILIAAgAjYCBCAAIAE2AgALRgAgACgCAEF/RwRAIAEoAgAgACgCBCAAKAIIIAEoAgQoAgwRAAAPCyABKAIAIAEoAgQgACgCDCgCACIAKAIAIAAoAgQQRwvaAQIBfwF+IwBBIGsiAyQAIAMgATYCECADIAA2AgwgA0EBOwEcIAMgAjYCGCADIANBDGo2AhQjAEEQayIBJAAgA0EUaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCBCIDQQFxBEAgAigCACECIAAgA0EBdjYCBCAAIAI2AgAgAEHw1cEAIAEoAgQgASgCCCIALQAIIAAtAAkQfQALIABBfzYCACAAIAE2AgwgAEGM1sEAIAEoAgQgASgCCCIALQAIIAAtAAkQfQALOwEBfyMAQRBrIgMkACADIAE2AgQgAyAANgIAIAMgA61CgICAgKABhDcDCEG1hcAAIANBCGogAhDKAQALOQEBfyMAQRBrIgIkACACQQhqIAAoAgAgACgCBCAAKAIIECMgASACKAIIIAIoAgwQ0AEgAkEQaiQACz8BAn8gASgCBCECIAEoAgAhA0EIEBgiAUUEQBCeAgALIAEgAjYCBCABIAM2AgAgAEGg2sEANgIEIAAgATYCAAs4AQF/IwBBEGsiAiQAIAJBCGogACAAKAIAKAIEEQIAIAIoAgggASACKAIMKAIQEQEAIAJBEGokAAs1AAJAIAJBf0YNACAAIAIgASgCEBEBAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEAAAs2AQF/QRQQGCIDRQRAEJ4CAAsgAyACNgIQIAMgATYCDCADIAAoAgg2AgggAyAAKQIANwIAIAMLOgEBfyMAQRBrIgIkACACIAE2AgwgAiAANgIIIAJBCGpB5KrAACACQQxqQeSqwABBAEGowsAAEIIBAAstAAJAIANpQQFHIAFBgICAgHggA2tLcg0AIAAgASADIAIQMSIARQ0AIAAPCwALkgUBB38QbiISIAomAQJ/IwBB0ABrIg4kACAOQoCAgIDAADcCDCAOQQA2AhQgDiANQQBHOgA0IA5BgICA/AM2AjAgDkKAgID8g4CAwD83AiggDiAMOAIkIA4gCzgCICAOQoCAgICAgIDAPzcCGEGE5MEALQAAQQFHBEAQSQsCQAJAAkACQEHc48EAKAIARQRAQdzjwQBBfzYCAAJ/IAlFBEBBACENQQQMAQtB6OPBACgCACERQeTjwQAoAgAhE0EAIQ0DQCASJQEgDUECdCANQYCABCAJIA1rIg8gD0GAgARPGyIPaiINQQJ0EAchChBuIhAgCiYBIA9BAnQiDyARSw0DIA4gECUBEAgiFDYCOCAOIA82AkQgDyAURw0GIBMgDyAQJQEQCSAOIAI4AkAgDiABOAI8IA4gADgCOCAOIAU4AkwgDiAEOAJIIA4gAzgCRCATIA8gDkEMaiAOQThqIA5BxABqIAYgByAIIA5BGGoQIiAQQYQITwRAIBAQqwELIAkgDUsNAAtB3OPBACgCAEEBaiEPIA4oAhQhDSAOKAIQCyEJQdzjwQAgDzYCACANEAohChBuIg8gCiYBIA4gDyUBEAsiEDYCOCAOIA02AkQgDSAQRw0EIA8lASAJIA0QDCAOKAIMIg0EQCAJQQRrKAIAIhBBeHEiESANQQJ0Ig1BBEEIIBBBA3EiEBtqSQ0DIBBBACARIA1BJ2pLGw0EIAkQLQsgEkGECE8EQCASEKsBCyAOQdAAaiQAIA8MBQtB8J/AABDVAQALQQAgDyARQbCgwAAQbwALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEACyAOQThqIA5BxABqENEBAAsiCSUBIAkQqwEL5wEBA38jAEEQayIAJABBiOTBAC0AAEEDRwRAIABBAToADyAAQQ9qIQECQAJAAkACQAJAAkBBiOTBAC0AAEEBaw4DAgEFAAtBiOTBAEECOgAAIAEtAAAgAUEAOgAARQ0CAkBBtOTBACgCAEH/////B3EEQEGk5MEAKAIADQELQazkwQAoAgANBEGI5MEAQQM6AABBsOTBAEEBNgIADAULQfHYwQBB6QBBqNnBABDKAQALQcTUwQBB8QBBwKDAABDKAQALQYCAwABB1QBBwKDAABDKAQALQeCfwAAQkQILAAsLIABBEGokAAstAQF/IwBBEGsiASQAIAEgAUEPaq1CgICAgLABhDcDAEG1hcAAIAEgABDKAQALuQICAX8BbwJ/IwBBQGoiDSQAQYTkwQAtAABBAUcEQBBJCwJAQdzjwQAoAgBFBEBB3OPBAEF/NgIAQYDkwQBBADYCACANIAxBAEc6ACQgDUGAgID8AzYCICANQoCAgPyDgIDAPzcCGCANIAs4AhQgDSAKOAIQIA1CgICAgICAgMA/NwIIIAlBAnQiCUHo48EAKAIAIgxLDQFB5OPBACgCACANIAI4AjAgDSABOAIsIA0gADgCKCANIAU4AjwgDSAEOAI4IA0gAzgCNCAJQfjjwQAgDUEoaiANQTRqIAYgByAIIA1BCGoQIkH848EAKAIAQYDkwQAoAgAQ7QFB3OPBAEHc48EAKAIAQQFqNgIAIA1BQGskAAwCC0Hwn8AAENUBAAtBACAJIAxBoKDAABBvAAsiCSUBIAkQqwELyEYDHH8EfgF8IwBBEGsiGCQAEG4iGSAAJgEjAEHQBmsiASQAAkACQAJAAkACQAJAAkACQAJAAkACfAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgGRCqAiITQQBOBEACQCATRQRAQQEhFAwBCyATEBgiFEUNAgsgGRCqAiECIAEgGRCqAiIMNgKQAyABIAI2ArgEIAIgDEcNAiAUIAIgGSUBEAMgE0EISQ0DIAEgFCgAACICNgLoASACQdKCkYIDRwRAIAEgAUHoAWqtQoCAgIDAAIQ3A7gEIAFB7AFqIQJBASEEAkACQCABQbgEaiIDQQFxBEACQCADQQF2IgNFDQAgAxAYIgRFDQIgA0UNACAEQejQwQAgA/wKAAALIAIgAzYCCCACIAQ2AgQgAiADNgIADAILIAJB6NDBACADEGAMAQtBASADEOQBAAsjAEEgayIDJAAgA0EIaiIJEOcBQSgQGCIERQRAEJ4CAAsgBEG0tcEANgIAIAQgCSkCADcCBCAEIAn9AAII/QsCDCAEIAIpAgA3AhwgBCACKAIINgIkIANBIGokAEF/DBcLQQIgFCgABCISQQhqIgIgE0sNFhogEkF4Tw0EIAFBADYC+AIgASASNgL0AiABQYABOgD8AiABQQA2AuwCIAFCgICAgBA3AuQCIAEgFEEIaiIDNgLwAgJAIBIEfwNAIAMgBWotAAAiEUEJayIMQRdLQQEgDHRBk4CABHFFcg0CIBIgBUEBaiIFRw0ACyABIBI2AvgCIBJBAWoFQQELIQIgAUEFNgK4BCABQdgAaiADIBIgAiASIAIgEkkbECMgAUG4BGogASgCWCABKAJcENABIQQMEwsgASAFNgL4AgJAIBFB2wBHBEAgEUH7AEYNASABQeQCaiICIAFBzwZqQeS7wQAQJCACEI4BIQQMFAsgAUH/ADoA/AIgASAFQQFqNgL4AiABQQE6ANAFIAEgAUHkAmo2AswFIAFBuARqIAFBzAVqEEwgAS0AuARBAUYEQCABKAK8BCEEDBELIAEtALkEQQFHDQkgAUHoAGogASgCzAUQRSABKAJsIQwgASgCaEEBcQRAIAwhBAwRCyABQbgEaiABQcwFahBMIAEtALgEQQFGBEAgASgCvAQhBAwRCwJAAkACQAJAAkACQAJAAkACQAJAIAEtALkEQQFGBEAgASgCzAUQLiIEDRsgAUG4BGogAUHMBWoQTCABLQC4BEEBRgRAIAEoArwEIQQMHAsgAS0AuQRBAUcNAiABQbgEaiABKALMBRBOIAEoArgEQQFHDQEgASgCvAQhBAwbC0EBQcy6wQAQqAEhBAwaCyABKQPABCEdIAFBuARqIAFBzAVqEEwgAS0AuARBAUYEQCABKAK8BCEEDBoLIAEtALkEQQFHDQIgAUG4BGogASgCzAUQMCABKAK4BCIFQQJHDQEgASgCvAQhBAwZC0ECQcy6wQAQqAEhBAwYCyABKAK8BCECIAFBuARqIAFBzAVqEEwgAS0AuARBAUYEQCABKAK8BCEEDBgLIAEtALkEQQFHDQIgAUG4BGogASgCzAUQKiABLQC4BEEBRw0BIAEoArwEIQQMFwtBA0HMusEAEKgBIQQMFgsgAS0AuQQhAyABQbgEaiABQcwFahBMIAEtALgEQQFGBEAgASgCvAQhBAwWCyABLQC5BEEBRw0CIAFBuARqIAEoAswFEDAgASgCuAQiEUECRw0BIAEoArwEIQQMFQtBBEHMusEAEKgBIQQMFAsgASgCvAQhDyABQbgEaiABQcwFahBMIAEtALgEQQFGBEAgASgCvAQhBAwUCyABLQC5BEEBRw0BIAFBuARqIAEoAswFEE4gASgCuARBAUcNAiABKAK8BCEEDBMLQQVBzLrBABCoASEEDBILQQZBzLrBABCoASEEDBELIAEpA8AEIR4gAUG4BGohByMAQRBrIgQkACAEQQRqIAFBzAVqIhAiCBBMAkAgBC0ABEEBRgRAIAcgBCgCCDYCBCAHQX42AgAMAQsgBC0ABUUEQCAHQX82AgAMAQsgBEEEaiAIKAIAEBogBCgCBEF/RgRAIAcgBCgCCDYCBCAHQX42AgAMAQsgByAEKAIMNgIIIAcgBCkCBDcCAAsgBEEQaiQAIAEoArwEIQQgASgCuAQiCEF+Rg0QIAhBf0YNBiABIAEoAsAENgLcBSABIAQ2AtgFIAEgCDYC1AUjAEFAaiIEJAAgBEEEaiAQEEwCQCAELQAEQQFGBEAgByAEKAIINgIEIAdBfjYCAAwBCyAELQAFRQRAIAdBfzYCAAwBCyAEQQRqIBAoAgAQHSAEKAIEQX9GBEAgByAEKAIINgIEIAdBfjYCAAwBCyAHIAQoAjw2AjggByAEKQI0NwIwIAcgBP0AAiT9CwIgIAcgBP0AAhT9CwIQIAcgBP0AAgT9CwIACyAEQUBrJAAgASgCvAQhBCABKAK4BCIIQX5GDQ8gASABKALwBDYCkAYgASAB/QAC4AT9CwOABiABIAH9AALQBP0LA/AFIAEgAf0AAsAE/QsD4AUgCEF/Rg0HIwBBEGsiCyQAIAtBCGogEBBMAkAgCy0ACEEBRgRAIAcgCygCDDYCBCAHQX82AgAMAQsgCy0ACUUEQCAHQQI2AgAMAQsgC0EIaiAQKAIAEF4gCygCCCIQQQJGBEAgByALKAIMNgIEIAdBfzYCAAwBCyAHIAsoAgw2AgQgByAQNgIACyALQRBqJAAgASgCuAQiC0F/RgRAIAEoArwEIQQMEAsgC0ECRg0IIAEoArwEIQYgAUG4BGohByMAQRBrIg4kACAOQQRqIAFBzAVqIg0QTAJAIA4tAARBAUYEQCAHIA4oAgg2AgQgB0F9NgIADAELIA4tAAVFBEAgB0F+NgIADAELIA5BBGogDSgCABA9IA4oAgRBfkYEQCAHIA4oAgg2AgQgB0F9NgIADAELIAcgDigCDDYCCCAHIA4pAgQ3AgALIA5BEGokACABKAK8BCEOIAEoArgEIg1BfUYEQCAOIQQMEAsgDUF+RwRAIAEoAsAEIQogASABKALcBTYC+AMgASABKQLUBTcD8AMgASAB/QAD4AX9CwOABCABIAH9AAPwBf0LA5AEIAEgAf0AA4AG/QsDoAQgASABKAKQBjYCsAQgBCEJIAIhBAwSC0EKQcy6wQAQqAEhBAwPCyABQf8AOgD8AiABIAVBAWo2AvgCIAFBAToAhAQgASABQeQCajYCgAQgAUHABGohFUF+IQ1BfyEGQX8hEUECIRZBAiEKQf8BIRdBAiEaQQAhAgNAIAFBuARqIAFBgARqEEEgAS0AuARBAUYEQCABKAK8BCEDIAYhAgwMCyABLQC5BEEBRgRAIAEoAoAEIgVBADYCCCAFIAUoAhRBAWo2AhQgAUG4BGogBUEMaiAFECUgASgCvAQhAwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoArgEQQJHBEACQAJAAkAgASgCwARBBGsOCgcABQEIBAgGCAIICyADKAAAQePe1fMGcyADQQRqIhstAABB9ABzckUNCiADKAAAQe3C4ZsFcyAbLQAAQegAc3INByAaQQJGDQtB37jBAEEFEMYBIQMgBiECDB8LIAMoAABB9srJmwdzIANBA2oiGygAAEHz0r3zBnNyRQ0HIAMoAABB7N6RowVzIBsoAABB1OSVqwZzckUNCyADKAAAQePetesGcyAbKAAAQe3KuaMHc3INBiANQX5GDRFBn7nBAEEHEMYBIQMgDUEBa0F9Sw0fIAcgDRCtAQwfCyADKQAAQuHYsZuErZ236wCFIANBBWoiGykAAEL13K2TlI/dsvMAhYRQDQwgAykAAELz4LGLxq6Rt+MAhSAbKQAAQsXcjfvGrJq35wCFhFBFDQUgEUF/Rg0OQYe5wQBBDRDGASEDCyAGIQIMHAsgAykAAELj0NXztu3UtPoAhSADQQhqMQAAQuUAhYRQRQ0DIApBAkYNCUHruMEAQQkQxgEhAyAGIQIMGwsgAygAAEHj0NXzBnMgA0EEai8AAEHr5gFzcg0CIAZBf0YNCkGBucEAQQYQxgEhAyAGIQIMGgsgAykAAELz0I36xqzZoe8AhSADQQNqKQAAQu/IlZv0rZ239ACFhFBFDQEgFkECRg0LQZS5wQBBCxDGASEDIAYhAgwZCyADKAAAQfTywasGRg0CCyAFEB4iA0UNDCAGIQIMFwsgAgRAQdS4wQBBBxDGASEDIAYhAgwXCyAFEIUBIg8Ef0EBBSABQfAAaiAFEEUgASgCdCEPIAEoAnALIgVBAXEEQCAPIQMgBiECDBcLQQEhAgwLCyAQQQFxDRQgBRCFASIDBEAgBiECDBYLQQEhECAFEC4iA0UNCiAGIQIMFQsgHVBFBEBBx7jBAEEFEMYBIQMgBiECDBULAkAgBRCFASIDRQRAIAFBuARqIAUQTiABKAK4BEEBRw0BIAEoArwEIQMLIAYhAgwVCyABKQPABCEgQgEhHQwJCwJAIAUQhQEiA0UEQCABQbgEaiAFEDAgASgCuAQiGkECRw0BIAEoArwEIQMLIAYhAgwUCyABKAK8BCEEDAgLIBdB/wFHBEBB5LjBAEEHEMYBIQMgBiECDBMLAkAgBRCFASIDRQRAIAFBuARqIAUQKiABLQC4BEEBRw0BIAEoArwEIQMLIAYhAgwTCyABLQC5BCEXDAcLAkAgBRCFASIDRQRAIAFBuARqIAUQMCABKAK4BCIKQQJHDQEgASgCvAQhAwsgBiECDBILIAEoArwEIQ4MBgsgH1BFBEBB9LjBAEENEMYBIQMgBiECDBELAkAgBRCFASIDRQRAIAFBuARqIAUQTiABKAK4BEEBRw0BIAEoArwEIQMLIAYhAgwRCyABKQPABCEeQgEhHwwFCwJAIAUQhQEiA0UEQCABQbgEaiAFEBogASgCvAQhAyABKAK4BCIFQX9HDQELQX8hAgwQCyABKALABCEMIAMhCyAFIQYMBAsCQCAFEIUBIgNFBEAgAUG4BGogBRAdIAEoArwEIQkgASgCuAQiEUF/Rw0BIAkhAwsgBiECDA8LIAEgFSgCMDYCkAYgASAV/QACIP0LA4AGIAEgFf0AAhD9CwPwBSABIBX9AAIA/QsD4AUMAwsCQCAFEIUBIgNFBEAgAUG4BGogBRBeIAEoArgEIhZBAkcNASABKAK8BCEDCyAGIQIMDgsgASgCvAQhCAwCCyAFEIUBIgMNDSABQbgEaiAFED0gASgCvAQhByABKAK4BCINQX5GBEAgByEDIAYhAgwPCyABKALABCEcDAELCyACQQFxRQRAQdS4wQBBBxDHASEDIAYhAgwLCyAQQQFxRQRAQdu4wQBBBBDHASEDIAYhAgwLCyAdp0EBcUUEQEHHuMEAQQUQxwEhAyAGIQIMCwsgH1AEQEH0uMEAQQ0QxwEhAyAGIQIMCwtBfyECAkACQCAGQX9HBEAgCkECRiECIBpBAkYhAyAXQf8BRiEFIBFBf0cNAUECIREMAgtBgbnBAEEGEMcBIQMMDAsgASABKAKQBjYCyAYgASAB/QACgAb9CwO4BiABIAH9AALwBf0LA6gGIAEgAf0AAuAF/QsDmAYLQQAgCiACGyEQQQAgGiADGyEKQQIgFyAFGyEDQX8gDSANQX5GGyENIBZBACAWQQJHGyEFIAetIBytQiCGhCEdDA0LEJMCAAtBASATEOQBAAsgAUGQA2ogAUG4BGoQ0QEAC0GBCCEJDBULQQggAiATQdjQwQAQbwALQQdBzLrBABCoASEEDAkLQQhBzLrBABCoASEEDAcLQQlBzLrBABCoASEEDAYLQQBBzLrBABCoASEEDAYLQdu4wQBBBBDGASEDIAYhAgsgDUEBa0F8Sw0BAkAgB0EEaygCACIEQXhxIhFBBEEIIARBA3EiBRsgDWpPBEAgBUEAIBEgDUEnaksbDQEgBxAtDAMLDBYLDBYLIAYhAgtBAiEKAkAgAkF/Rg0AIAwEQCALQSRqIQUDQCAFQQRrKAIAIhFBAEoEQCAFKAIAIghBBGsoAgAiBEF4cSIHQQRBCCAEQQNxIg8bIBFqSQ0XIA9BACAHIBFBJ2pLGw0YIAgQLQsgBUEwaiEFIAxBAWsiDA0ACwsgAkUNACALQQRrKAIAIgRBeHEiDCACQTBsIhFBBEEIIARBA3EiBRtySQ0UIAVBACAMIBFBJ2pLGw0VIAsQLQsgAyEECyABIAEtAPwCQQFqOgD8AiABQeQCahB0IQIgASAJNgLkBCABIBE2AuAEIAEgHjcD2AQgASAgNwPQBCABIAg2AswEIAEgBTYCyAQgASAONgLEBCABIBA2AsAEIAEgBDYCvAQgASADOgC4BSABIAI2AsAFIAEgDzYCtAUgASANNgKoBSABIAw2AqQFIAEgCzYCoAUgASAGNgKcBSABIAH9AAOYBv0LA+gEIAEgAf0AA6gG/QsD+AQgASAB/QADuAb9CwOIBSABIAEoAsgGNgKYBSABIAo2ArgEQQIhCCABIB03AqwFAkAgCkECRgRAIAINAQwFCyAdpyEOIAJFBEAgAUGQA2ogAUHABGpB3AD8CgAAIAEgAf0AA7AF/QsDgAMgCiEIDAULIAwEQCALQSRqIQUDQCAFQQRrKAIAIgRBAEoEQCAFKAIAIgNBBGsoAgAiCUF4cSIIQQRBCCAJQQNxIgkbIARqSQ0WIAlBACAIIARBJ2pLGw0XIAMQLQsgBUEwaiEFIAxBAWsiDA0ACwsgBgRAIAsgBkEwbBCtAQtBAiEIIA1BAEoEQCAOIA0QrQELIAIhBAwECyABQcAFahBaDAMLIAFB1AVqIgcoAgQhBSAHKAIIIhAEQCAFQSRqIQIDQCACQQRrKAIAIhVBAEoEQCACKAIAIhZBBGsoAgAiF0F4cSIaQQRBCCAXQQNxIhcbIBVqSQ0UIBdBACAaIBVBJ2pLGw0VIBYQLQsgAkEwaiECIBBBAWsiEA0ACwsgBygCACICBEAgBUEEaygCACIHQXhxIhAgAkEwbCICQQRBCCAHQQNxIgcbckkNEiAHQQAgECACQSdqSxsNEyAFEC0LC0ECIQULIAEgAS0A/AJBAWo6APwCIAFB5AJqEFYhAiABIAk2AuQEIAEgCDYC4AQgASAeNwPYBCABIB03A9AEIAEgBjYCzAQgASALNgLIBCABIA82AsQEIAEgETYCwAQgASAENgK8BCABIAH9AAOABP0LA+gEIAEgAf0AA5AE/QsD+AQgASAB/QADoAT9CwOIBSABIAEoArAENgKYBSABIAEoAvgDNgKkBSABIAEpA/ADNwKcBSABIAU2ArgEIAEgAjYCwAUgASADOgC4BSABIAw2ArQFIAEgCjYCsAUgASAONgKsBSABIA02AqgFQQIhCAJAIAVBAkYEQCACDQEMAgsgAkUEQCABQZADaiABQcAEakHcAPwKAAAgASABQbAFav0AAwD9CwOAAyABKAKkBSEMIAEoAqAFIQsgASgCnAUhBiAFIQgMAgsgASgCoAUhBAJAIAEoAqQFIgwEQCAEQSRqIQUDQCAFQQRrKAIAIgNBAEoEQCAFKAIAIglBBGsoAgAiCEF4cSIPQQRBCCAIQQNxIggbIANqSQ0UIAhBACAPIANBJ2pLGw0DIAkQLQsgBUEwaiEFIAxBAWsiDA0ACwsgASgCnAUiAwRAIAQgA0EwbBCtAQtBAiEIIA1BAEoEQCAOIA0QrQELIAIhBAwCCwwRCyABQcAFahBaCyAIQQJGBEAgBCABQeQCahCOASEEDAELIAFBiAJqIAFBkANqQdwA/AoAACABIAH9AAOAA/0LA/gBAkAgASgC+AIiBSABKAL0AiICSQRAIAEoAvACIQMDQCADIAVqLQAAQQlrIglBF0tBASAJdEGTgIAEcUVyDQIgAiAFQQFqIgVHDQALIAEgAjYC+AILIAEoAuQCIgUNAgwDCyABIAU2AvgCIAFBFjYCuAQgAUHgAGogAyACIAVBAWoiBCACIAIgBEsbECMgAUG4BGogASgCYCABKAJkENABIQQgDARAIAtBJGohBSAMIQMDQCAFQQRrKAIAIgJBAEoEQCAFKAIAIAIQrQELIAVBMGohBSADQQFrIgMNAAsLIAYEQCALIAZBMGwQrQELIA1BAEwNACAOIA0QrQELQQIhCCABKALkAiIFRQ0CCyABKALoAiICQQRrKAIAIgNBeHEiCUEEQQggA0EDcSIDGyAFakkNDCADQQAgCSAFQSdqSxsNDSACEC0LIAhBAkcNAgsjAEEgayIDJAAgA0EIaiIJEOcBIAQhAkEgEBgiBEUEQBCeAgALIARBmLXBADYCACAEIAI2AhwgBCAJKQIANwIEIAQgCf0AAgj9CwIMIANBIGokAEF/CyEIRAAAAAAAAAAADAELIAFBiAFqIAFBiAJqQdwA/AoAACABIAH9AAP4Af0LA3ggEkEHakF4cUEIargLISEgCEF/RgRAIAFBADYCwAQgAUKAgICAEDcCuAQgAUEIaiAEIAQoAgAoAgQRAgAgASABKQMINwKIAiABIAFBiAJqrUKAgICA0ACENwOQAyABQbgEakHgoMAAQbWFwAAgAUGQA2oQRw0CIAEoArgEIQYgASgCvAQiAiABKALABBDvASEJIAYEQCACQQRrKAIAIgNBeHEiBUEEQQggA0EDcSIDGyAGakkNCSADQQAgBSAGQSdqSxsNCiACEC0LIAQgBCgCACgCABEEAAwFCyABQZADaiICIAFBiAFqQdwA/AoAACABIAH9AAN4/QsDiAJBgQghCSAIQQJGDQAgASAENgK8BCABIAg2ArgEIAFBwARqIAJB3AD8CgAAIAEgDjYCrAUgASANNgKoBSABIAw2AqQFIAEgCzYCoAUgASAGNgKcBSABIAH9AAOIAv0LA7AFEIYCIQlB0KDAAEEEEO8BIQ8gAUEANgKIASABLQC4BSEDIAEoAsAEIAEoAuAEIQcgASgCyAQhERCGAiEFIAEoArQFuBCCAiECIAVB1LjBAEEHEEogAhDjAUGmucEAQQYQSiECIAVB27jBAEEEEEogAhDjASABQdAAaiABKQPQBBB8IAEoAlQhAiABKAJQQQFGDQIgBUHHuMEAQQUQSiACEOMBIAgEQCABQcgAaiAErRB8IAEoAkwhAiABKAJIQQFGDQMgBUHfuMEAQQUQSiACEOMBCyADQQJHBEAgBUHkuMEAQQcQSkGCCEGDCCADQQFxGxDjAQsEQCABQUBrIAE1AsQEEHwgASgCRCECIAEoAkBBAUYNAyAFQeu4wQBBCRBKIAIQ4wELIAFBOGogASkD2AQQfCABKAI8IQIgASgCOEEBRg0CIAVB9LjBAEENEEogAhDjARAEIQAQbiIKIAAmASAMBEAgCyAMQTBsaiESQQAhCCALIQMDQCADQSBqKAIAIANBCGooAgAhFSADKAIAIRYQhgIhBCABQTBqIANBEGopAwAQfCABKAI0IQICQAJAAkAgASgCMEEBcQ0AIARBuLjBAEEGEEogAhDjASABQShqIANBGGopAwAQfCABKAIsIQIgASgCKEEBcQ0AIARBvrjBAEEFEEogAhDjASAWBEAgAUEgaiADQQRqNQIAEHwgASgCJCECIAEoAiBBAXENASAEQcO4wQBBBBBKIAIQ4wELIBVFDQIgAUEYaiADQQxqNQIAEHwgASgCHCECIAEoAhhBAXFFDQELIARBhAhPBEAgBBCrAQsgCkGECEkNBiAKEKsBDAYLIARBx7jBAEEFEEogAhDjAQtBf0cEQCADQSRqKAIAIANBKGooAgAQ7wEhAiAEQcy4wQBBCBBKIAIQ4wELIAolASAIIAQlASAEEKsBEAUgCEEBaiEIIANBMGoiAyASRw0ACwsgBUGBucEAQQYQSiAKEOMBAkAgB0ECRg0AIAFBEGogAUGIAWohBAJAAn8CQCABQeAEaiICKAIAIgpBAkcEQBCGAiEDAn8gCkEBRgRAIAIqAgS7EIICDAELQYEIQYAIIAQtAAAbCyEKIANBtLnBAEEGEEogChDjAQJ/IAIoAghBAUYEQCACKgIMuxCCAgwBC0GBCEGACCAELQAAGwshCiADQbq5wQBBBhBKIAoQ4wECfyACKAIQQQFGBEAgAioCFLsQggIMAQtBgQhBgAggBC0AABsLIQogA0HAucEAQQoQSiAKEOMBAn8gAigCGEEBRgRAIAIqAhy7EIICDAELQYEIQYAIIAQtAAAbCyEKIANByrnBAEEKEEogChDjAQJ/IAIoAiBBAUYEQCACKgIkuxCCAgwBC0GBCEGACCAELQAAGwshCiADQdS5wQBBBhBKIAoQ4wECfyACKAIoQQFGBEAgAioCLLsQggIMAQtBgQhBgAggBC0AABsLIQogA0HaucEAQQYQSiAKEOMBIAIoAjBBAUcNASACKgI0uxCCAgwCC0GBCEGACCAELQAAGyEDDAILQYEIQYAIIAQtAAAbCyEKIANB4LnBAEEGEEogChDjASACLQA4IQIgBC0AACEEIANB5rnBAEEKEEpBgQhBgAggBEEBcRtBgghBgwggAkEBcRsgAkECRhsQ4wELIAVBh7nBAEENEEogAxDjAUEANgIAIAEoAhBBAXFFDQAgASgCFCECDAMLIBEEQCABKALMBLgQggIhAiAFQZS5wQBBCxBKIAIQ4wELIA1Bf0cEQCABQYgBaiEEAn8gAUGoBWoiAigCAEF/RwRAIAIoAgQgAigCCBDvAQwBC0GBCEGACCAELQAAGwshAiAFQZ+5wQBBBxBKIAIQ4wELIAkgDyAFEIcCQYDowQAtAAAEQEGA6MEAQQA6AABBhOjBACgCACECQYTowQBBADYCAAwDC0GE6MEAQQA2AgBBgOjBAEEAOgAAIAVBhAhPBEAgBRCrAQsgD0GECE8EQCAPEKsBCyAJQdSgwABBCxDvASIPICEQggIiBBCHAkGA6MEALQAABEBBgOjBAEEAOgAAQYTowQAoAgAhAkGE6MEAQQA2AgAgBEGECE8EQCAEEKsBCwwEC0GE6MEAQQA2AgBBgOjBAEEAOgAAIARBhAhPBEAgBBCrAQsgD0GECE8EQCAPEKsBCyAMBEAgC0EkaiEFA0AgBUEEaygCACICQQBKBEAgBSgCACIEQQRrKAIAIgNBeHEiCEEEQQggA0EDcSIDGyACakkNCiADQQAgCCACQSdqSxsNCyAEEC0LIAVBMGohBSAMQQFrIgwNAAsLIAYEQCALIAZBMGwQrQELIA1BAEwNACAOIA0QrQELIBMEQCAUQQRrKAIAIgZBeHEiAkEEQQggBkEDcSIGGyATakkNByAGQQAgAiATQSdqSxsNCCAUEC0LQQAhBSAZQYMITQ0FDAQLQbyzwQBBNyABQc8GakH4oMAAQfSzwQAQrgEACyAFQYQITwRAIAUQqwELCyAPQYMISwRAIA8QqwELIAlBhAhPBEAgCRCrAQsgDARAIAtBJGohBQNAIAVBBGsoAgAiBEEASgRAIAUoAgAiA0EEaygCACIJQXhxIghBBEEIIAlBA3EiCRsgBGpJDQYgCUEAIAggBEEnaksbDQcgAxAtCyAFQTBqIQUgDEEBayIMDQALCyAGBEAgC0EEaygCACIEQXhxIgMgBkEwbCIGQQRBCCAEQQNxIgQbckkNBCAEQQAgAyAGQSdqSxsNBSALEC0LIA1BAEoEQCAOQQRrKAIAIgZBeHEiBEEEQQggBkEDcSIGGyANakkNBCAGQQAgBCANQSdqSxsNBSAOEC0LIAIhCQsgFEEEaygCACIGQXhxIgJBBEEIIAZBA3EiBhsgE2pJDQIgBkEAIAIgE0EnaksbDQMgFBAtQQEhBSAZQYQISQ0BCyAZEKsBCyAYIAU2AgggGCAJQQAgBRs2AgQgGEEAIAkgBRs2AgAgAUHQBmokAAwCC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAsgGCgCACAYKAIEIBgoAgggGEEQaiQAC4gMAwx/AXsBbwJ/IwBB0ABrIgskAEGE5MEALQAAQQFHBEAQSQtB3OPBACgCAEUEQEHc48EAQX82AgBBgOTBAEEANgIAIAlBAnQiDkHo48EAKAIAIgpNBEBB9OPBACgCACIKIA5PBEBB5OPBACgCACETQfDjwQAoAgAhFCALIAI4AhggCyABOAIUIAsgADgCECALIAU4AiQgCyAEOAIgIAsgAzgCHEEAIQ4gCUH/////A3EiEgRAA0ACQCAGAn8CQAJAIBIEQCARIBNqIgxBDGooAgAiCkH//wFxRQRAIApBEHQMBAsgCkH/B3EhCSAKQYCAAnEhDyAKQYD4AXEiCkGA+AFGBEAgD0EQdCEKIAkNAiAKQYCAgPwHcgwECyAPQRB0IQ8gCkUNAiAKQQ10QYCAgPwAcSAJQQ10ckGAgIDAA2ogD3IMAwtBA0EAQZjQwQAQuwEACyAKIAlBDXRyQYCAgP4HcgwBCyAPQYCAgNgDciAJZ0EQayIKQRd0ayAJIApB//8DcUEIanRB////A3FyC74iBF4NACALIAwqAgA4AiggCyAMQQRqKQIANwIsIBEgFGoiD0EIaigCACEJAn8gD0EEaigCACIMQRB2IgpB//8BcUUEQCAMQYCAfHEMAQsgCkH/B3EhDCAKQYCAAnEhDSAKQYD4AXEiEEGA+AFGBEAgDUEQdCINQYCAgPwHciAMRQ0BGiANIApBDXRyQYCAgP4HcgwBCyANQRB0IgogEEENdEGAgID8AHEgDEENdHJBgICAwANqciAQDQAaIAwgDGdBEGsiDEH//wNxQQhqdEH///8DcSAKQYCAgNgDciAMQRd0a3ILIRUgCUEQdiEKAn8gCUH//wFxBEAgCUH/B3EhDCAJQYCAAnEhDSAJQYD4AXEiEEGA+AFHBEAgDUEQdCINIBBBDXRBgICA/ABxIAxBDXRyQYCAgMADanIgEA0CGiAMIAxnQRBrIgxB//8DcUEIanRB////A3EgDUGAgIDYA3IgDEEXdGtyDAILIA1BEHQiDSAMQQ10ckGAgID+B3IgDA0BGiANQYCAgPwHcgwBCyAJQRB0CyEQIAsCfyAKQf//AXEEQCAKQf8HcSEJIApBgIACcSEMIApBgPgBcSINQYD4AUcEQCAMQRB0IgogDUENdEGAgID8AHEgCUENdHJBgICAwANqciANDQIaIAkgCWdBEGsiCUH//wNxQQhqdEH///8DcSAKQYCAgNgDciAJQRd0a3IMAgsgDEEQdCIMIApBDXRyQYCAgP4HciAJDQEaIAxBgICA/AdyDAELIAlBgIB8cQu+EFE4AjwgCyAQvhBROAI4IAsgFb4QUTgCNCALIA9BDGooAgAiCUEUdrNDAPB/RZVDAAAAP5RD2w9JQJQiABAsOAJMIAsgABArIgFDAACAPyAJQQp2/REgCf0cAf0M/wMAAP8DAAD/AwAA/wMAAP1O/foB/QwAwH9EAMB/RADAf0QAwH9E/ecBIhYgFv3kAf0MAACAvwAAgL8AAIC/AACAv/3kASIW/R8BIgKLkyAW/R8AIgOLkyIAIAAgAJQgAkMAAAAAIACMIgAgACAAXBsiAEMAAAAAIABDAAAAAF4bIgAgAIwiBSAW/QwAAAAAAAAAAAAAAAAAAAAA/Ub9TSIW/ccB/RsCQQFxG5IiAiAClCADIAAgBSAW/RsAQQFxG5IiACAAlJKSkSIDlZQ4AkggCyABIAAgA5WUOAJEIAsgASACIAOVlDgCQCALQQhqIAtBEGogC0EcaiAEIAtBKGogC0E0aiALQUBrEDUgCygCCEEBRw0AIAsqAgwiACAHYEUgACAIX0VyDQBB+OPBACgCACAORgRAQfjjwQAQoQELQfzjwQAoAgAgDkECdGogADgCAEGA5MEAIA5BAWoiDjYCAAsgEUEQaiERIBJBAWsiEg0ACwtB/OPBACgCACAOEO0BQdzjwQBB3OPBACgCAEEBajYCACALQdAAaiQADAMLQQAgDiAKQYCgwAAQbwALQQAgDiAKQZCgwAAQbwALQfCfwAAQ1QEACyIJJQEgCRCrAQslACAAKAIALQAARQRAIAFB/MbAAEEFEEQPCyABQYHHwABBBBBECyIAIAAtAABFBEAgAUH8xsAAQQUQRA8LIAFBgcfAAEEEEEQLHgAgAEUEQBCrAgALIAAgAiADIAQgBSABKAIQEREACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARCgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEHAAscACAARQRAEKsCAAsgACACIAMgBCABKAIQETEACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARMgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEzAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEDAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEAAAscAQFvIAAlASABJQEgARCrASACJQEgAhCrARABCw8AIAAEQBCeAgALEJMCAAsYACAARQRAEKsCAAsgACACIAEoAhARAQALHAAgASgCACAAKAIAIAAoAgQgASgCBCgCDBEAAAsfAEH858EALQAARQRAQfznwQBBAToAAAsgAEEBNgIACyYAIABBHGpBACAB/QACAP0M2geMSXhlTNPCfY9Nlp8mz/0j/WMbCyYAIABBHGpBACAB/QACAP0MpB4B+3qY2OUTfOG8yehUVf0j/WMbCxIAIAAgAUEBdEEBciACEMoBAAsYACABKAIAIAEoAgQgACgCACAAKAIEEEcLFwAgACgCACABIAAoAgRBDGooAgARAQALFgEBbyAAIAEQFCECEG4iACACJgEgAAsWAQFvIAAgARAVIQIQbiIAIAImASAACxYBAW8gACABEBYhAhBuIgAgAiYBIAALGQAgASgCAEGEtMEAQQUgASgCBCgCDBEAAAsZACABKAIAQYzMwABBEiABKAIEKAIMEQAACxUAIAEgACgCACIAKAIAIAAoAgQQRAsWACAAQci2wQA2AgQgACABQRxqNgIACxYAIABBhLfBADYCBCAAIAFBHGo2AgALEAAgAEEEahBAIABBHGoQWgsZACABKAIAQa+jwQBBCCABKAIEKAIMEQAACxkAIAEoAgBBo6PBAEEDIAEoAgQoAgwRAAALGQAgASgCAEHE08EAQRcgASgCBCgCDBEAAAsZACABKAIAQaLTwQBBFCABKAIEKAIMEQAACxkAIAEoAgBBmNPBAEEKIAEoAgQoAgwRAAALGQAgASgCAEGmo8EAQQkgASgCBCgCDBEA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c3NlcnRpb24gYGxlZnQgwBAgcmlnaHRgIGZhaWxlZDogwAkKICBsZWZ0OiDACQogcmlnaHQ6IMAAwAI6IMAAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL2xlZ2FjeS5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTcuMS9zcmMvcmF3LnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZm10LnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvbXV0ZXgvbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZXJyb3IucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGVycm9yLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb3JlL3NyYy9vcHMvZnVuY3Rpb24ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3luYy9sYXp5X2xvY2sucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlx3YXNtLWJpbmRnZW4tMC4yLjExN1xzcmNcZXh0ZXJucmVmLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAc3BhcmstbGliXHNyY1xzcGxhdF9lbmNvZGUucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGRlLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeW5jL29uY2UucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlX2NvcmUtMS4wLjIyOFxzcmNcZGVcbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL2JzdHIvbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy8uLi8uLi9iYWNrdHJhY2Uvc3JjL3N5bWJvbGl6ZS9tb2QucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAc3BhcmstbGliXHNyY1xyYWQucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXHJlYWQucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTMvc3JjL2RsbWFsbG9jLnJzAHNwYXJrLXJzXHNyY1xsaWIucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcanMtc3lzLTAuMy45NFxzcmNcbGliLnJzAC9ydXN0L2RlcHMvcnVzdGMtZGVtYW5nbGUtMC4xLjI3L3NyYy9saWIucnMAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL3YwLnJzAMAsIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXIAOWludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IHN0cjo6ZnJvbV91dGY4KMAEKSA9IMAiIHdhcyBleHBlY3RlZCB0byBoYXZlIDEgY2hhciwgYnV0IMARIGNoYXJzIHdlcmUgZm91bmQAEGZsb2F0aW5nIHBvaW50IGDAAWAAAWDABmAgb3IgYMABYAALY2hhcmFjdGVyIGDAAWAACWludGVnZXIgYMABYAAJYm9vbGVhbiBgwAFgAA9taXNzaW5nIGZpZWxkIGDAAWAAEWR1cGxpY2F0ZSBmaWVsZCBgwAFgAAFgwAFgABFzdGFydCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAPZW5kIGJ5dGUgaW5kZXggwCYgaXMgbm90IGEgY2hhciBib3VuZGFyeTsgaXQgaXMgaW5zaWRlIMAIIChieXRlcyDACyBvZiBzdHJpbmcpAMALIChvcyBlcnJvciDAASkABkVycm9yKMAILCBsaW5lOiDACiwgY29sdW1uOiDAASkAVwkQAEwAAACmAAAAMgAAAN0GEABPAAAAwgIAACYAAABIDBAAEwAAAE8AAAAiAAAASAwQABMAAABOAAAAIAAAAEgMEAATAAAAOgAAACAAAABIDBAAEwAAAG8AAAAoAAAAXAwQAG0AAACVAAAADgAAAG1ldGFjaHVua3NTdGFydAA+AAAADAAAAAQAAAA/AAAAQAAAAEEAQYChwAALQQEAAABCAAAAY2FwYWNpdHkgb3ZlcmZsb3cAAABUCxAAUAAAABwAAAAFAAAAQwAAAAwAAAAEAAAARAAAAEUAAABGAEHMocAAC8ECAQAAAEcAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAAugMQAEgAAACPAgAADgAAAGVuZCBvZiByYW5nZSBzaG91bGQgYmUgYSBjaGFyYWN0ZXIgYm91bmRhcnkKCkNhdXNlZCBieToAAAAAABAAAAAEAAAASAAAAEkAAABKAAAACgpTdGFjayBiYWNrdHJhY2U6CgBdAxAAXAAAADYAAAAfAAAAXQMQAFwAAAA8AAAAGwAAAGJhY2t0cmFjZSBjYXB0dXJlIGZhaWxlZHkFEABeAAAAZwQAAA4AAADmAhAATwAAAPwDAAAzAAAAPgAAAAwAAAAEAAAAPwAAAEAAAABLAEGYpMAACzkBAAAAQgAAAMMgAAAoBQACOiAAICAgICAgIAoKU3RhY2s6Cgo+AAAADAAAAAQAAABMAAAATQAAAE4AQdykwAALoQ4BAAAAQgAAAABwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMC4CDBQEMAoEAyYJDAIgBAIGOAEBAgMBAQU4CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsBASwDMAECBAICAgEkAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABEEFAAJNBkYLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJAQEIBAIBXwMCBAYBAgGdAQMIFQI5AgEBAQEMAQkBDgcDBUMBAgYBAQIBAQMEAwEBDgJVCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAghlAQEBAgQBBQAJAQL1AQoEBAGQBAICBAEgCigGAgQIAQkGAgMuDQECxgEBAwEByQcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQMXAQABBg8ADAMDAAU7BwABPwRRAQsCAAIALgIXAAUDBggIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAT+AvMBAgEHAgUBAAdtBwBggPAAAAAAAAAEAAAABAAAAE8AAAAgewosCmVudGl0eSBub3QgZm91bmRwZXJtaXNzaW9uIGRlbmllZGNvbm5lY3Rpb24gcmVmdXNlZGNvbm5lY3Rpb24gcmVzZXRob3N0IHVucmVhY2hhYmxlbmV0d29yayB1bnJlYWNoYWJsZWNvbm5lY3Rpb24gYWJvcnRlZG5vdCBjb25uZWN0ZWRhZGRyZXNzIGluIHVzZWFkZHJlc3Mgbm90IGF2YWlsYWJsZW5ldHdvcmsgZG93bmJyb2tlbiBwaXBlZW50aXR5IGFscmVhZHkgZXhpc3Rzb3BlcmF0aW9uIHdvdWxkIGJsb2Nrbm90IGEgZGlyZWN0b3J5aXMgYSBkaXJlY3RvcnlkaXJlY3Rvcnkgbm90IGVtcHR5cmVhZC1vbmx5IGZpbGVzeXN0ZW0gb3Igc3RvcmFnZSBtZWRpdW1maWxlc3lzdGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVpbnZhbGlkIGlucHV0IHBhcmFtZXRlcmludmFsaWQgZGF0YXRpbWVkIG91dHdyaXRlIHplcm9ubyBzdG9yYWdlIHNwYWNlc2VlayBvbiB1bnNlZWthYmxlIGZpbGVxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUg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V+l78mKNBz2XuxWH+TUEanmHyY61CgZk32IRccK8BhCPpXXkiHfWbGXRGyc1ymumpbf36dOSq/AdQRYfxKG8Hh7GX+4PD1aNsc0RZdMCYWRjo/8Ws7GJSE98HFHcm01QHOky3yiO1AbZyRYOfUlxc+Mgj7Ig2HYFFDsSfC4PgoUFm37qzVnxO1MrHcq+pQGeN6/L7tdH9C/cVRehmIQ0S/lYCb+sbMOMFqsSMC4wYnl0ZSBhcnJheU9wdGlvbiB2YWx1ZW5ld3R5cGUgc3RydWN0c2VxdWVuY2VtYXBlbnVtdW5pdCB2YXJpYW50bmV3dHlwZSB2YXJpYW50dHVwbGUgdmFyaWFudHN0cnVjdCB2YXJpYW50dW5pdHUzMnU2NHVzaXplZjMyYSBib29sZWFuYSBzdHJpbmdleHBsaWNpdCBwYW5pYwAAAPEJEABkAAAAJAkAABIAAABvbmUgb2YgLCAAAAC6CxAAYgAAAAACAAATAAAAugsQAGIAAAAFAgAAMwAAALoLEABiAAAACQIAAD4AAAC6CxAAYgAAAA8CAAA6AAAAPAYQAE8AAAA+BgAAFAAAADwGEABPAAAAPgYAACEAAAA8BhAATwAAADIGAAAUAAAAPAYQAE8AAAAyBgAAIQAAAG51bGxhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbim6CxAAYgAAALMBAAAaAAAAugsQAGIAAACrAQAAPQAAALoLEABiAAAApgEAAEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAEAAgADAAQABQAGAAcACAAJAP//////////////////CgALAAwADQAOAA8A/////////////////////////////////////////////////////////////////////woACwAMAA0ADgAPAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAEAAgADAAQABQAGAAcACAAJAA//////////////////+gALAAwADQAOAA8AD/////////////////////////////////////////////////////////////////////oACwAMAA0ADgAPAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////IGF0IGxpbmUgAAAA2AUQAGMAAAD3AQAAIQAAANgFEABjAAAA+wEAAAwAAADYBRAAYwAAAAICAAAhAAAA2AUQAGMAAAALAgAAKgAAANgFEABjAAAADwIAACwAAADYBRAAYwAAABQCAAAJAAAARU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdFT0Ygd2hpbGUgcGFyc2luZyBhIHZhbHVlZXhwZWN0ZWQgYDpgZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBpZGVudGV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgYCJgaW52YWxpZCBlc2NhcGVpbnZhbGlkIG51bWJlcm51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludGNvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5na2V5IG11c3QgYmUgYSBzdHJpbmdpbnZhbGlkIHZhbHVlOiBleHBlY3RlZCBrZXkgdG8gYmUgYSBudW1iZXIgaW4gcXVvdGVzZmxvYXQga2V5IG11c3QgYmUgZmluaXRlIChnb3QgTmFOIG9yICsvLWluZilsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGV0cmFpbGluZyBjb21tYXRyYWlsaW5nIGNoYXJhY3RlcnN1bmV4cGVjdGVkIGVuZCBvZiBoZXggZXNjYXBlcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkugsQAGIAAABcAgAAEwAAALoLEABiAAAAbgIAABkAAABpbmYtaW5mTmFOAAA+AAAADAAAAAQAAAA/AAAAQAAAAFoAQbSzwQALxwEBAAAAQgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAfwcQAEsAAABxCwAADgAAAEVycm9yAAAAPAYQAE8AAAC/BAAAJAAAAEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkAABgBBAAXgAAAGsAAAANAAAAAAAAAP//////////cFoQAEGItcEAC0XKDBAAZwAAADUAAAAOAAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGEAQdi1wQALBQEAAABoAEHotcEACwUBAAAAaQBB+LXBAAsFAQAAAGoAQYi2wQAL+QQBAAAAawAAAGludGVybmFsIGVy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"));const A=jh();(typeof B=="string"||typeof Request=="function"&&B instanceof Request||typeof URL=="function"&&B instanceof URL)&&(B=fetch(B));const{instance:I,module:g}=await Ey(await B,A);return Cy(I)}var iy=`precision highp float;\r
11102
11102
  precision highp int;\r
11103
11103
  precision highp sampler2D;\r
11104
11104
  precision highp usampler2D;\r
@@ -11132,7 +11132,7 @@ void main() {\r
11132
11132
  if ((index >= 0) && (index < targetCount)) {\r
11133
11133
  produceSplat(index);\r
11134
11134
  }\r
11135
- }`,gy=`precision highp float;\r
11135
+ }`,Dy=`precision highp float;\r
11136
11136
  precision highp int;\r
11137
11137
  precision highp sampler2D;\r
11138
11138
  precision highp usampler2D;\r
@@ -11172,7 +11172,7 @@ void main() {\r
11172
11172
  if ((index >= 0) && (index < targetCount)) {\r
11173
11173
  produceSplat(index);\r
11174
11174
  }\r
11175
- }`,Qy=`precision highp float;\r
11175
+ }`,oy=`precision highp float;\r
11176
11176
  precision highp int;\r
11177
11177
  precision highp sampler2D;\r
11178
11178
  precision highp usampler2D;\r
@@ -11214,7 +11214,7 @@ void main() {\r
11214
11214
  if ((index >= 0) && (index < targetCount)) {\r
11215
11215
  produceSplat(index);\r
11216
11216
  }\r
11217
- }`,By=`precision highp float;\r
11217
+ }`,sy=`precision highp float;\r
11218
11218
  precision highp int;\r
11219
11219
  precision highp sampler2D;\r
11220
11220
  precision highp usampler2D;\r
@@ -11249,7 +11249,7 @@ void main() {\r
11249
11249
  } else {\r
11250
11250
  target = vec4(0.0, 0.0, 0.0, 0.0);\r
11251
11251
  }\r
11252
- }`,Cy=`precision highp float;\r
11252
+ }`,ty=`precision highp float;\r
11253
11253
  precision highp int;
11254
11254
 
11255
11255
  #include <splatDefines>
@@ -11343,7 +11343,7 @@ void main() {\r
11343
11343
  fragColor = rgba;\r
11344
11344
  #endif\r
11345
11345
  }\r
11346
- }`,Ey=`precision highp float;\r
11346
+ }`,wy=`precision highp float;\r
11347
11347
  precision highp int;\r
11348
11348
  precision highp usampler2DArray;
11349
11349
 
@@ -11559,7 +11559,7 @@ void main() {\r
11559
11559
  vSplatUv = position.xy * maxStdDev;\r
11560
11560
  vNdc = ndc;\r
11561
11561
  gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);\r
11562
- }`,iy=`const float LN_SCALE_MIN = -12.0;\r
11562
+ }`,ay=`const float LN_SCALE_MIN = -12.0;\r
11563
11563
  const float LN_SCALE_MAX = 9.0;
11564
11564
 
11565
11565
  const uint SPLAT_TEX_WIDTH_BITS = 11u;\r
@@ -12083,7 +12083,7 @@ vec3 debugColorHue(uint i) {\r
12083
12083
 
12084
12084
  vec3 rgb = clamp(abs(mod(hue*6.0 + vec3(0.0,4.0,2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\r
12085
12085
  return mix(vec3(1.0), rgb, 0.85);
12086
- }`,Dy=`precision highp float;\r
12086
+ }`,ey=`precision highp float;\r
12087
12087
  precision highp int;
12088
12088
 
12089
12089
  #include <splatDefines>
@@ -12148,7 +12148,7 @@ void main() {\r
12148
12148
  #endif
12149
12149
 
12150
12150
  #include <logdepthbuf_fragment>\r
12151
- }`,oy=`precision highp float;\r
12151
+ }`,ny=`precision highp float;\r
12152
12152
  precision highp int;\r
12153
12153
  precision highp usampler2DArray;
12154
12154
 
@@ -12419,12 +12419,12 @@ void main() {\r
12419
12419
  gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);
12420
12420
 
12421
12421
  #include <logdepthbuf_vertex>\r
12422
- }`;let ui=null;function EB(){return ui||(F.ShaderChunk.splatDefines=iy,ui={oldSplatVertex:Ey,oldSplatFragment:Cy,splatVertex:oy,splatFragment:Dy,computeVec4Template:By,computeUvec4Vec4Template:gy,computeUvec4x2Vec4Template:Qy,computeUvec4Template:Iy}),ui}const jE=class Jg{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}static ensureBuffer(A,I){const Q=Math.ceil(Math.max(1,A)/_)*_*4;if(I.byteLength>=Q)return I;const C=new ArrayBuffer(Q);if(I instanceof ArrayBuffer)return C;const E=I.constructor;return new E(C)}ensureBuffer(A,I){return Jg.ensureBuffer(A,I)}ensureCapacity(A){const{width:I,height:g,depth:Q,maxSplats:C}=FA(A);(!this.target||C>this.capacity)&&(this.dispose(),this.capacity=C,this.target=new F.WebGLArrayRenderTarget(I,g,Q,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:F.NearestFilter,minFilter:F.NearestFilter}),this.target.texture.format=F.RGBAFormat,this.target.texture.type=F.UnsignedByteType,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let I=Jg.readbackProgram.get(A);if(!I){const Q=DI({index:"int"},{rgba8:"vec4"},({index:C})=>(A.inputs.index=C,{rgba8:new nh({rgba8:A.outputs.rgba8})}));Jg.programTemplate||(Jg.programTemplate=new ZE(EB().computeVec4Template)),I=new go({graph:Q,inputs:{index:"_index"},outputs:{rgba8:"target"},template:Jg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),Jg.readbackProgram.set(A,I)}const g=I.prepareMaterial();return Jg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}process({count:A,material:I}){const g=this.renderer;if(!g)throw new Error("No renderer");if(!this.target)throw new Error("No target");const Q=_*sg;I.uniforms.targetBase.value=0,I.uniforms.targetCount.value=A;let C=0;for(;C<A;){const E=Math.floor(C/Q),i=E*Q,D=Math.min(sg,Math.ceil((A-i)/_));I.uniforms.targetLayer.value=E,this.target.scissor.set(0,0,_,D),g.setRenderTarget(this.target,E),g.xr.enabled=!1,g.autoClear=!1,Jg.fullScreenQuad.render(g),C+=_*D}this.count=A}async read({readback:A}){const I=this.renderer;if(!I)throw new Error("No renderer");if(!this.target)throw new Error("No target");const g=Math.ceil(this.count/_)*_;if(A.byteLength<g*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${g*4}`);const Q=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),C=_*sg;let E=0;const i=[];for(;E<this.count;){const D=Math.floor(E/C),o=D*C,s=Math.min(sg,Math.ceil((this.count-o)/_));I.setRenderTarget(this.target,D);const t=_*s*4,w=Q.subarray(o*4,o*4+t),a=I?.readRenderTargetPixelsAsync(this.target,0,0,_,s,w);i.push(a),E+=_*s}return Promise.all(i).then(()=>A)}render({reader:A,count:I,renderer:g}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:Q,material:C}=this.prepareProgramMaterial(A);Q.update();const E=this.saveRenderState(this.renderer);this.process({count:I,material:C}),this.resetRenderState(this.renderer,E)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const I=this.saveRenderState(this.renderer),g=this.read({readback:A});return this.resetRenderState(this.renderer,I),g}async renderReadback({reader:A,count:I,renderer:g,readback:Q}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:C,material:E}=this.prepareProgramMaterial(A);C.update();const i=this.saveRenderState(this.renderer);this.process({count:I,material:E});const D=this.read({readback:Q});return this.resetRenderState(this.renderer,i),D}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};jE.programTemplate=null;jE.readbackProgram=new WeakMap;jE.fullScreenQuad=new uD.FullScreenQuad(new F.RawShaderMaterial({visible:!1}));let UC=jE;const Qo=class UI{constructor(A={}){if(this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new kI({key:"rgbaArray",type:Ia,globals:()=>[sy],value:{texture:UI.getEmpty(),count:0},update:I=>(I.texture=this.getTexture(),I.count=this.count,I)}),A.array){this.array=A.array;const I=Math.floor(this.array.length/4);this.capacity=Math.ceil(I/_)*_,this.capacity>I&&(this.array=new Uint8Array(this.capacity*4),this.array.set(A.array)),this.count=Math.min(I,A.count??Number.POSITIVE_INFINITY)}else this.capacity=A.capacity??0,this.count=0}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var I;if(!this.array||A>(((I=this.array)==null?void 0:I.length)??0)/4){this.capacity=FA(A).maxSplats;const g=new Uint8Array(this.capacity*4);this.array&&g.set(this.array),this.array=g}return this.array}getTexture(){var A;let I=(A=this.readback)==null?void 0:A.getTexture();return(this.source||this.array)&&(I=this.maybeUpdateSource()),I??UI.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.capacity!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:I,depth:g}=FA(this.capacity);this.source=new F.DataArrayTexture(this.array,A,I,g),this.source.format=F.RGBAFormat,this.source.type=F.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:I,renderer:g}){this.readback||(this.readback=new UC({renderer:g})),this.readback.render({reader:A,count:I,renderer:g}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:I,count:g,renderer:Q}){const{dynoSplats:C,dynoBase:E,dynoCount:i,reader:D}=UI.makeDynos();return C.packedSplats=A,E.value=I,i.value=g,this.render({reader:D,count:g,renderer:Q}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length<this.count*4)&&(this.array=new Uint8Array(this.capacity*4)),(await this.readback.readback({readback:this.array})).subarray(0,this.count*4)}async getArray(){if(this.readback)return await this.read();if(this.array)return this.array;throw new Error("No array")}static getEmpty(){if(!UI.emptySource){const A=new Uint8Array(4);UI.emptySource=new F.DataArrayTexture(A,1,1,1),UI.emptySource.format=F.RGBAFormat,UI.emptySource.type=F.UnsignedByteType,UI.emptySource.internalFormat="RGBA8",UI.emptySource.needsUpdate=!0}return UI.emptySource}static makeDynos(){if(!UI.dynos){const A=new Do,I=new xg({value:0}),g=new xg({value:0}),Q=DI({index:"int"},{rgba8:"vec4"},({index:C})=>{if(!C)throw new Error("index is undefined");C=rQ(C,I);const E=vn(A,C,I,g);return{rgba8:XI(E).outputs.rgba}});UI.dynos={dynoSplats:A,dynoBase:I,dynoCount:g,reader:Q}}return UI.dynos}};Qo.emptySource=null;Qo.dynos=null;let Aa=Qo;const Ia={type:"RgbaArray"},sy=lA(`
12422
+ }`;let qi=null;function EB(){return qi||(F.ShaderChunk.splatDefines=ay,qi={oldSplatVertex:wy,oldSplatFragment:ty,splatVertex:ny,splatFragment:ey,computeVec4Template:sy,computeUvec4Vec4Template:Dy,computeUvec4x2Vec4Template:oy,computeUvec4Template:iy}),qi}const zE=class Jg{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}static ensureBuffer(A,I){const Q=Math.ceil(Math.max(1,A)/_)*_*4;if(I.byteLength>=Q)return I;const C=new ArrayBuffer(Q);if(I instanceof ArrayBuffer)return C;const E=I.constructor;return new E(C)}ensureBuffer(A,I){return Jg.ensureBuffer(A,I)}ensureCapacity(A){const{width:I,height:g,depth:Q,maxSplats:C}=FA(A);(!this.target||C>this.capacity)&&(this.dispose(),this.capacity=C,this.target=new F.WebGLArrayRenderTarget(I,g,Q,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:F.NearestFilter,minFilter:F.NearestFilter}),this.target.texture.format=F.RGBAFormat,this.target.texture.type=F.UnsignedByteType,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let I=Jg.readbackProgram.get(A);if(!I){const Q=DI({index:"int"},{rgba8:"vec4"},({index:C})=>(A.inputs.index=C,{rgba8:new Rh({rgba8:A.outputs.rgba8})}));Jg.programTemplate||(Jg.programTemplate=new WE(EB().computeVec4Template)),I=new Co({graph:Q,inputs:{index:"_index"},outputs:{rgba8:"target"},template:Jg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),Jg.readbackProgram.set(A,I)}const g=I.prepareMaterial();return Jg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}process({count:A,material:I}){const g=this.renderer;if(!g)throw new Error("No renderer");if(!this.target)throw new Error("No target");const Q=_*sg;I.uniforms.targetBase.value=0,I.uniforms.targetCount.value=A;let C=0;for(;C<A;){const E=Math.floor(C/Q),i=E*Q,D=Math.min(sg,Math.ceil((A-i)/_));I.uniforms.targetLayer.value=E,this.target.scissor.set(0,0,_,D),g.setRenderTarget(this.target,E),g.xr.enabled=!1,g.autoClear=!1,Jg.fullScreenQuad.render(g),C+=_*D}this.count=A}async read({readback:A}){const I=this.renderer;if(!I)throw new Error("No renderer");if(!this.target)throw new Error("No target");const g=Math.ceil(this.count/_)*_;if(A.byteLength<g*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${g*4}`);const Q=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),C=_*sg;let E=0;const i=[];for(;E<this.count;){const D=Math.floor(E/C),o=D*C,s=Math.min(sg,Math.ceil((this.count-o)/_));I.setRenderTarget(this.target,D);const t=_*s*4,w=Q.subarray(o*4,o*4+t),a=I?.readRenderTargetPixelsAsync(this.target,0,0,_,s,w);i.push(a),E+=_*s}return Promise.all(i).then(()=>A)}render({reader:A,count:I,renderer:g}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:Q,material:C}=this.prepareProgramMaterial(A);Q.update();const E=this.saveRenderState(this.renderer);this.process({count:I,material:C}),this.resetRenderState(this.renderer,E)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const I=this.saveRenderState(this.renderer),g=this.read({readback:A});return this.resetRenderState(this.renderer,I),g}async renderReadback({reader:A,count:I,renderer:g,readback:Q}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:C,material:E}=this.prepareProgramMaterial(A);C.update();const i=this.saveRenderState(this.renderer);this.process({count:I,material:E});const D=this.read({readback:Q});return this.resetRenderState(this.renderer,i),D}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};zE.programTemplate=null;zE.readbackProgram=new WeakMap;zE.fullScreenQuad=new qD.FullScreenQuad(new F.RawShaderMaterial({visible:!1}));let LC=zE;const Eo=class UI{constructor(A={}){if(this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new kI({key:"rgbaArray",type:oa,globals:()=>[cy],value:{texture:UI.getEmpty(),count:0},update:I=>(I.texture=this.getTexture(),I.count=this.count,I)}),A.array){this.array=A.array;const I=Math.floor(this.array.length/4);this.capacity=Math.ceil(I/_)*_,this.capacity>I&&(this.array=new Uint8Array(this.capacity*4),this.array.set(A.array)),this.count=Math.min(I,A.count??Number.POSITIVE_INFINITY)}else this.capacity=A.capacity??0,this.count=0}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var I;if(!this.array||A>(((I=this.array)==null?void 0:I.length)??0)/4){this.capacity=FA(A).maxSplats;const g=new Uint8Array(this.capacity*4);this.array&&g.set(this.array),this.array=g}return this.array}getTexture(){var A;let I=(A=this.readback)==null?void 0:A.getTexture();return(this.source||this.array)&&(I=this.maybeUpdateSource()),I??UI.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.capacity!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:I,depth:g}=FA(this.capacity);this.source=new F.DataArrayTexture(this.array,A,I,g),this.source.format=F.RGBAFormat,this.source.type=F.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:I,renderer:g}){this.readback||(this.readback=new LC({renderer:g})),this.readback.render({reader:A,count:I,renderer:g}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:I,count:g,renderer:Q}){const{dynoSplats:C,dynoBase:E,dynoCount:i,reader:D}=UI.makeDynos();return C.packedSplats=A,E.value=I,i.value=g,this.render({reader:D,count:g,renderer:Q}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length<this.count*4)&&(this.array=new Uint8Array(this.capacity*4)),(await this.readback.readback({readback:this.array})).subarray(0,this.count*4)}async getArray(){if(this.readback)return await this.read();if(this.array)return this.array;throw new Error("No array")}static getEmpty(){if(!UI.emptySource){const A=new Uint8Array(4);UI.emptySource=new F.DataArrayTexture(A,1,1,1),UI.emptySource.format=F.RGBAFormat,UI.emptySource.type=F.UnsignedByteType,UI.emptySource.internalFormat="RGBA8",UI.emptySource.needsUpdate=!0}return UI.emptySource}static makeDynos(){if(!UI.dynos){const A=new to,I=new xg({value:0}),g=new xg({value:0}),Q=DI({index:"int"},{rgba8:"vec4"},({index:C})=>{if(!C)throw new Error("index is undefined");C=rQ(C,I);const E=_c(A,C,I,g);return{rgba8:XI(E).outputs.rgba}});UI.dynos={dynoSplats:A,dynoBase:I,dynoCount:g,reader:Q}}return UI.dynos}};Eo.emptySource=null;Eo.dynos=null;let Da=Eo;const oa={type:"RgbaArray"},cy=lA(`
12423
12423
  struct RgbaArray {
12424
12424
  sampler2DArray texture;
12425
12425
  int count;
12426
12426
  };
12427
- `);function ty(B){switch(B){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${B}`)}}function wy(B){switch(B){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${B}`)}}class ga extends F.Object3D{constructor(A={}){super();const{type:I,invert:g,opacity:Q,color:C,displace:E,radius:i}=A;this.type=I??"sphere",this.invert=g??!1,this.opacity=Q??1,this.color=C??new F.Color(1,1,1),this.displace=E??new F.Vector3(0,0,0),this.radius=i??0}}const Qa=class Ba extends F.Object3D{constructor(A={}){const{name:I,rgbaBlendMode:g="multiply",sdfSmooth:Q=0,softEdge:C=0,invert:E=!1,sdfs:i=null}=A;super(),this.rgbaBlendMode=g,this.sdfSmooth=Q,this.softEdge=C,this.invert=E,this.sdfs=i,this.ordering=Ba.nextOrdering++,this.name=I??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.includes(A)||this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(I=>I!==A))}};Qa.nextOrdering=1;let zE=Qa;class Ca{constructor({maxSdfs:A,maxEdits:I}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new kI({key:"sdfArray",type:Bo,globals:()=>[Co],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:g=>(g.numSdfs=this.numSdfs,g.sdfTexture=this.sdfTexture,g)}),this.maxEdits=Math.max(16,I??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new xg({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,I){const g=new F.DataTexture(A,8,I,F.RGBAIntegerFormat,F.UnsignedIntType);return g.internalFormat="RGBA32UI",g.needsUpdate=!0,g}newEdits(A,I){return new kI({key:"edits",type:"uvec4",count:I,globals:()=>[Eo],value:A})}ensureCapacity({maxSdfs:A,maxEdits:I}){let g=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),I>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,I),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),g=!0),g}updateEditData(A,I){const g=this.editData[A]!==I;return this.editData[A]=I,g}updateEditFloatData(A,I){KQ[0]=I;const g=this.editFloatData[A]!==KQ[0];return g&&(this.editFloatData[A]=KQ[0]),g}encodeEdit(A,{sdfFirst:I,sdfCount:g,invert:Q,rgbaBlendMode:C,softEdge:E,sdfSmooth:i}){const D=A*4;let o=!1;return o=this.updateEditData(D+0,C|(Q?256:0))||o,o=this.updateEditData(D+1,I|g<<16)||o,o=this.updateEditFloatData(D+2,E)||o,o=this.updateEditFloatData(D+3,i)||o,o}updateSdfData(A,I){const g=this.sdfData[A]!==I;return this.sdfData[A]=I,g}updateSdfFloatData(A,I){KQ[0]=I;const g=this.sdfFloatData[A]!==KQ[0];return g&&(this.sdfFloatData[A]=KQ[0]),g}encodeSdf(A,{sdfType:I,invert:g,center:Q,quaternion:C,scale:E,sizes:i},D){const o=A*32,s=I|(g?256:0);let t=!1;t=this.updateSdfFloatData(o+0,Q?.x??0)||t,t=this.updateSdfFloatData(o+1,Q?.y??0)||t,t=this.updateSdfFloatData(o+2,Q?.z??0)||t,t=this.updateSdfData(o+3,s)||t,t=this.updateSdfFloatData(o+4,C?.x??0)||t,t=this.updateSdfFloatData(o+5,C?.y??0)||t,t=this.updateSdfFloatData(o+6,C?.z??0)||t,t=this.updateSdfFloatData(o+7,C?.w??0)||t,t=this.updateSdfFloatData(o+8,E?.x??0)||t,t=this.updateSdfFloatData(o+9,E?.y??0)||t,t=this.updateSdfFloatData(o+10,E?.z??0)||t,t=this.updateSdfData(o+11,0)||t,t=this.updateSdfFloatData(o+12,i?.x??0)||t,t=this.updateSdfFloatData(o+13,i?.y??0)||t,t=this.updateSdfFloatData(o+14,i?.z??0)||t,t=this.updateSdfFloatData(o+15,i?.w??0)||t;const w=Math.min(4,D.length);for(let a=0;a<w;++a){const y=o+16+a*4;t=this.updateSdfFloatData(y+0,D[a].x)||t,t=this.updateSdfFloatData(y+1,D[a].y)||t,t=this.updateSdfFloatData(y+2,D[a].z)||t,t=this.updateSdfFloatData(y+3,D[a].w)||t}return t}update(A){const I=A.reduce((t,{sdfs:w})=>t+w.length,0),g=this.ensureCapacity({maxEdits:A.length,maxSdfs:I}),Q=[new F.Vector4,new F.Vector4],C=new F.Vector3,E=new F.Quaternion,i=new F.Vector3,D=new F.Vector4;let o=0,s=g;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,s=!0);for(const[t,{edit:w,sdfs:a}]of A.entries()){s=this.encodeEdit(t,{sdfFirst:o,sdfCount:a.length,invert:w.invert,rgbaBlendMode:wy(w.rgbaBlendMode),softEdge:w.softEdge,sdfSmooth:w.sdfSmooth})||s;let y=!1;for(const R of a)D.set(R.scale.x,R.scale.y,R.scale.z,R.radius),R.scale.setScalar(1),R.updateMatrixWorld(),R.matrixWorld.clone().invert().decompose(C,E,i),R.scale.set(D.x,D.y,D.z),R.updateMatrixWorld(),Q[0].set(R.color.r,R.color.g,R.color.b,R.opacity),Q[1].set(R.displace.x,R.displace.y,R.displace.z,1),y=this.encodeSdf(o,{sdfType:ty(R.type),invert:R.invert,center:C,quaternion:E,scale:i,sizes:D},Q)||y,o+=1;this.numSdfs=o,y&&(this.sdfTexture.needsUpdate=!0),s||(s=y)}return{updated:s,dynoUpdated:g}}modify(A){return ay(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}modifyCov(A){return ey(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const Bo={type:"SdfArray"},Co=lA(`
12427
+ `);function hy(B){switch(B){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${B}`)}}function yy(B){switch(B){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${B}`)}}class sa extends F.Object3D{constructor(A={}){super();const{type:I,invert:g,opacity:Q,color:C,displace:E,radius:i}=A;this.type=I??"sphere",this.invert=g??!1,this.opacity=Q??1,this.color=C??new F.Color(1,1,1),this.displace=E??new F.Vector3(0,0,0),this.radius=i??0}}const ta=class wa extends F.Object3D{constructor(A={}){const{name:I,rgbaBlendMode:g="multiply",sdfSmooth:Q=0,softEdge:C=0,invert:E=!1,sdfs:i=null}=A;super(),this.rgbaBlendMode=g,this.sdfSmooth=Q,this.softEdge=C,this.invert=E,this.sdfs=i,this.ordering=wa.nextOrdering++,this.name=I??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.includes(A)||this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(I=>I!==A))}};ta.nextOrdering=1;let _E=ta;class aa{constructor({maxSdfs:A,maxEdits:I}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new kI({key:"sdfArray",type:io,globals:()=>[Do],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:g=>(g.numSdfs=this.numSdfs,g.sdfTexture=this.sdfTexture,g)}),this.maxEdits=Math.max(16,I??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new xg({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,I){const g=new F.DataTexture(A,8,I,F.RGBAIntegerFormat,F.UnsignedIntType);return g.internalFormat="RGBA32UI",g.needsUpdate=!0,g}newEdits(A,I){return new kI({key:"edits",type:"uvec4",count:I,globals:()=>[oo],value:A})}ensureCapacity({maxSdfs:A,maxEdits:I}){let g=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),I>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,I),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),g=!0),g}updateEditData(A,I){const g=this.editData[A]!==I;return this.editData[A]=I,g}updateEditFloatData(A,I){KQ[0]=I;const g=this.editFloatData[A]!==KQ[0];return g&&(this.editFloatData[A]=KQ[0]),g}encodeEdit(A,{sdfFirst:I,sdfCount:g,invert:Q,rgbaBlendMode:C,softEdge:E,sdfSmooth:i}){const D=A*4;let o=!1;return o=this.updateEditData(D+0,C|(Q?256:0))||o,o=this.updateEditData(D+1,I|g<<16)||o,o=this.updateEditFloatData(D+2,E)||o,o=this.updateEditFloatData(D+3,i)||o,o}updateSdfData(A,I){const g=this.sdfData[A]!==I;return this.sdfData[A]=I,g}updateSdfFloatData(A,I){KQ[0]=I;const g=this.sdfFloatData[A]!==KQ[0];return g&&(this.sdfFloatData[A]=KQ[0]),g}encodeSdf(A,{sdfType:I,invert:g,center:Q,quaternion:C,scale:E,sizes:i},D){const o=A*32,s=I|(g?256:0);let t=!1;t=this.updateSdfFloatData(o+0,Q?.x??0)||t,t=this.updateSdfFloatData(o+1,Q?.y??0)||t,t=this.updateSdfFloatData(o+2,Q?.z??0)||t,t=this.updateSdfData(o+3,s)||t,t=this.updateSdfFloatData(o+4,C?.x??0)||t,t=this.updateSdfFloatData(o+5,C?.y??0)||t,t=this.updateSdfFloatData(o+6,C?.z??0)||t,t=this.updateSdfFloatData(o+7,C?.w??0)||t,t=this.updateSdfFloatData(o+8,E?.x??0)||t,t=this.updateSdfFloatData(o+9,E?.y??0)||t,t=this.updateSdfFloatData(o+10,E?.z??0)||t,t=this.updateSdfData(o+11,0)||t,t=this.updateSdfFloatData(o+12,i?.x??0)||t,t=this.updateSdfFloatData(o+13,i?.y??0)||t,t=this.updateSdfFloatData(o+14,i?.z??0)||t,t=this.updateSdfFloatData(o+15,i?.w??0)||t;const w=Math.min(4,D.length);for(let a=0;a<w;++a){const y=o+16+a*4;t=this.updateSdfFloatData(y+0,D[a].x)||t,t=this.updateSdfFloatData(y+1,D[a].y)||t,t=this.updateSdfFloatData(y+2,D[a].z)||t,t=this.updateSdfFloatData(y+3,D[a].w)||t}return t}update(A){const I=A.reduce((t,{sdfs:w})=>t+w.length,0),g=this.ensureCapacity({maxEdits:A.length,maxSdfs:I}),Q=[new F.Vector4,new F.Vector4],C=new F.Vector3,E=new F.Quaternion,i=new F.Vector3,D=new F.Vector4;let o=0,s=g;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,s=!0);for(const[t,{edit:w,sdfs:a}]of A.entries()){s=this.encodeEdit(t,{sdfFirst:o,sdfCount:a.length,invert:w.invert,rgbaBlendMode:yy(w.rgbaBlendMode),softEdge:w.softEdge,sdfSmooth:w.sdfSmooth})||s;let y=!1;for(const r of a)D.set(r.scale.x,r.scale.y,r.scale.z,r.radius),r.scale.setScalar(1),r.updateMatrixWorld(),r.matrixWorld.clone().invert().decompose(C,E,i),r.scale.set(D.x,D.y,D.z),r.updateMatrixWorld(),Q[0].set(r.color.r,r.color.g,r.color.b,r.opacity),Q[1].set(r.displace.x,r.displace.y,r.displace.z,1),y=this.encodeSdf(o,{sdfType:hy(r.type),invert:r.invert,center:C,quaternion:E,scale:i,sizes:D},Q)||y,o+=1;this.numSdfs=o,y&&(this.sdfTexture.needsUpdate=!0),s||(s=y)}return{updated:s,dynoUpdated:g}}modify(A){return Gy(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}modifyCov(A){return ry(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const io={type:"SdfArray"},Do=lA(`
12428
12428
  struct SdfArray {
12429
12429
  int numSdfs;
12430
12430
  usampler2D sdfTexture;
@@ -12589,7 +12589,7 @@ void main() {\r
12589
12589
  return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0)
12590
12590
  : clamp(-distance / softEdge + 0.5, 0.0, 1.0);
12591
12591
  }
12592
- `),Eo=lA(`
12592
+ `),oo=lA(`
12593
12593
  const uint EDIT_FLAG_BLEND = 0xFFu;
12594
12594
  const uint EDIT_BLEND_MULTIPLY = 0u;
12595
12595
  const uint EDIT_BLEND_SET_RGB = 1u;
@@ -12647,7 +12647,7 @@ void main() {\r
12647
12647
  decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth);
12648
12648
  applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba);
12649
12649
  }
12650
- `);function ay(B,A,I,g){return new tA({inTypes:{gsplat:yA,sdfArray:Bo,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:yA},globals:()=>[Co,Eo],inputs:{gsplat:B,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:C,outputs:E})=>{const{sdfArray:i,numEdits:D,rgbaDisplaceEdits:o}=C,{gsplat:s}=E;return GA(`
12650
+ `);function Gy(B,A,I,g){return new tA({inTypes:{gsplat:yA,sdfArray:io,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:yA},globals:()=>[Do,oo],inputs:{gsplat:B,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:C,outputs:E})=>{const{sdfArray:i,numEdits:D,rgbaDisplaceEdits:o}=C,{gsplat:s}=E;return GA(`
12651
12651
  ${s} = ${C.gsplat};
12652
12652
  if (isGsplatActive(${s}.flags)) {
12653
12653
  for (int editIndex = 0; editIndex < ${D}; ++editIndex) {
@@ -12657,7 +12657,7 @@ void main() {\r
12657
12657
  );
12658
12658
  }
12659
12659
  }
12660
- `)}}).outputs.gsplat}function ey(B,A,I,g){return new tA({inTypes:{covsplat:VI,sdfArray:Bo,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{covsplat:VI},globals:()=>[Co,Eo],inputs:{covsplat:B,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:C,outputs:E})=>{const{sdfArray:i,numEdits:D,rgbaDisplaceEdits:o}=C,{covsplat:s}=E;return GA(`
12660
+ `)}}).outputs.gsplat}function ry(B,A,I,g){return new tA({inTypes:{covsplat:VI,sdfArray:io,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{covsplat:VI},globals:()=>[Do,oo],inputs:{covsplat:B,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:C,outputs:E})=>{const{sdfArray:i,numEdits:D,rgbaDisplaceEdits:o}=C,{covsplat:s}=E;return GA(`
12661
12661
  ${s} = ${C.covsplat};
12662
12662
  if (isCovSplatActive(${s}.flags)) {
12663
12663
  for (int editIndex = 0; editIndex < ${D}; ++editIndex) {
@@ -12667,7 +12667,7 @@ void main() {\r
12667
12667
  );
12668
12668
  }
12669
12669
  }
12670
- `)}}).outputs.covsplat}const KQ=new Float32Array(1);class Ea{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let I=this.cache.get(A);return I||(I=DI({index:"int"},{gsplat:yA},({index:g})=>{const{gsplat:Q}=A.apply({index:g});return this.modifier.apply({gsplat:Q})}),this.cache.set(A,I)),I}}class UB{constructor(){this.scale=new _Q({value:Number.NEGATIVE_INFINITY}),this.rotate=new JC({value:new F.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new pg({value:new F.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return Kh(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return dh(A,{rotate:this.rotate})}applyGsplat(A){return Ow(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const I=new F.Vector3,g=new F.Quaternion,Q=new F.Vector3;A.decompose(Q,g,I);const C=(I.x+I.y+I.z)/3;let E=!1;return C!==this.scale.value&&(this.scale.value=C,E=!0),Q.equals(this.translate.value)||(this.translate.value.copy(Q),E=!0),g.equals(this.rotate.value)||(this.rotate.value.copy(g),E=!0),E}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class WC{constructor(){this.basis=new hh({value:new F.Matrix3}),this.offset=new pg({value:new F.Vector3})}apply(A){const I=SQ(this.basis,A);return rQ(I,this.offset)}applyDir(A){return SQ(this.basis,A)}applyCovSplat(A){return new tA({inTypes:{covsplat:VI,basis:"mat3",offset:"vec3"},outTypes:{covsplat:VI},inputs:{covsplat:A,basis:this.basis,offset:this.offset},statements:({inputs:I,outputs:g})=>{const{covsplat:Q,basis:C,offset:E}=I;return!Q||!C||!E?[`${g.covsplat}.flags = 0u;`]:GA(`
12670
+ `)}}).outputs.covsplat}const KQ=new Float32Array(1);class ea{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let I=this.cache.get(A);return I||(I=DI({index:"int"},{gsplat:yA},({index:g})=>{const{gsplat:Q}=A.apply({index:g});return this.modifier.apply({gsplat:Q})}),this.cache.set(A,I)),I}}class LB{constructor(){this.scale=new _Q({value:Number.NEGATIVE_INFINITY}),this.rotate=new UC({value:new F.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new pg({value:new F.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return uh(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return qh(A,{rotate:this.rotate})}applyGsplat(A){return _w(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const I=new F.Vector3,g=new F.Quaternion,Q=new F.Vector3;A.decompose(Q,g,I);const C=(I.x+I.y+I.z)/3;let E=!1;return C!==this.scale.value&&(this.scale.value=C,E=!0),Q.equals(this.translate.value)||(this.translate.value.copy(Q),E=!0),g.equals(this.rotate.value)||(this.rotate.value.copy(g),E=!0),E}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class WC{constructor(){this.basis=new Fh({value:new F.Matrix3}),this.offset=new pg({value:new F.Vector3})}apply(A){const I=SQ(this.basis,A);return rQ(I,this.offset)}applyDir(A){return SQ(this.basis,A)}applyCovSplat(A){return new tA({inTypes:{covsplat:VI,basis:"mat3",offset:"vec3"},outTypes:{covsplat:VI},inputs:{covsplat:A,basis:this.basis,offset:this.offset},statements:({inputs:I,outputs:g})=>{const{covsplat:Q,basis:C,offset:E}=I;return!Q||!C||!E?[`${g.covsplat}.flags = 0u;`]:GA(`
12671
12671
  ${g.covsplat}.flags = 0u;
12672
12672
  if (isCovSplatActive(${Q}.flags)) {
12673
12673
  ${g.covsplat}.flags = ${Q}.flags;
@@ -12685,7 +12685,7 @@ void main() {\r
12685
12685
  ${g.covsplat}.xxyyzz = vec3(cov[0][0], cov[1][1], cov[2][2]);
12686
12686
  ${g.covsplat}.xyxzyz = vec3(cov[0][1], cov[0][2], cov[1][2]);
12687
12687
  }
12688
- `)}}).outputs.covsplat}updateFromMatrix(A){const I=new F.Matrix3().setFromMatrix4(A),g=new F.Vector3().setFromMatrixColumn(A,3),Q=!I.equals(this.basis.value)||!g.equals(this.offset.value);return Q&&(this.basis.value.copy(I),this.offset.value.copy(g)),Q}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class AB extends F.Object3D{constructor({numSplats:A,generator:I,covGenerator:g,construct:Q,update:C}){if(super(),this.numSplats=A??0,this.generator=I,this.covGenerator=g,this.frameUpdate=C,this.version=0,this.mappingVersion=0,Q){const E=Q(this);Object.assign(this,E)}}updateVersion(){this.version+=1}updateMappingVersion(){this.mappingVersion+=1,this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const uI=class xA{constructor({extSplats:A,covSplats:I}={}){if(this.time=0,this.deltaTime=0,this.viewToWorld=new F.Matrix4,this.viewOrigin=new F.Vector3,this.viewDirection=new F.Vector3,this.maxSplats=0,this.numSplats=0,this.target=null,this.mapping=[],this.version=-1,this.mappingVersion=-1,this.readback=null,this.readbackSplats=[],!Gn)throw new Error("Spark requires THREE.js r179 or above");this.extSplats=A??!0,this.covSplats=I??!1}dispose(){this.target&&(this.target.dispose(),this.target=null)}getTextures(){return this.target?this.target.textures:xA.emptyTextures}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,E=Math.ceil(Q/_)*_;return I+=E,{base:C,count:Q}});return{maxSplats:I,mapping:g}}ensureGenerate({maxSplats:A}){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const I=FA(A??1),{width:g,height:Q,depth:C}=I;if(this.maxSplats=I.maxSplats,this.target=new F.WebGLArrayRenderTarget(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:F.NearestFilter,minFilter:F.NearestFilter,format:F.RGBAIntegerFormat,type:F.UnsignedIntType}),this.target.scissorTest=!0,this.extSplats){const E=this.target.texture.clone(),i=this.target.texture.clone();i.format=F.RGBAFormat,i.type=F.UnsignedByteType,i.internalFormat="RGBA8",this.target.textures=[this.target.texture,E,i]}else{const E=this.target.texture.clone();E.format=F.RGBAFormat,E.type=F.UnsignedByteType,E.internalFormat="RGBA8",this.target.textures=[this.target.texture,E]}return!0}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}prepareProgramMaterial(A,I){const g=A??I;if(!g)throw new Error("Either generator or covGenerator must be provided");let Q=xA.generatorProgram.get(g);if(!Q){const E=DI({index:"int"},{},({index:i},D,{roots:o})=>{if(A&&(A.inputs.index=i),I&&(I.inputs.index=i),this.extSplats)if(this.covSplats)if(I){const s=Js(I.outputs.covsplat);o.push(s)}else if(A){const s=FD(A.outputs.gsplat),t=Js(s);o.push(t)}else throw new Error("Generator must be provided");else if(A){const s=ih(A.outputs.gsplat);o.push(s)}else throw new Error("Generator must be provided");else{if(this.covSplats){let s;if(I)s=I.outputs.covsplat;else if(A)s=FD(A.outputs.gsplat);else throw new Error("Generator must be provided");const t=$Q(kD(s).outputs.center,xA.viewCenterUniform),w=SQ(kD(s).outputs.opacity,OQ("float",.5));s=Zw({covsplat:s,center:t,opacity:w});const a=Eh(s,OQ("vec4",[0,1,KI,dI]));o.push(a)}else if(A){const s=$Q(XI(A.outputs.gsplat).outputs.center,xA.viewCenterUniform),t=SQ(XI(A.outputs.gsplat).outputs.opacity,OQ("float",.5)),w=zQ({gsplat:A.outputs.gsplat,center:s,opacity:t}),a=Ww(w,OQ("vec4",[0,1,KI,dI]));o.push(a)}else throw new Error("Generator must be provided");if(!A)throw new Error("Generator must be provided")}if(A){const s=Dh(A.outputs.gsplat,xA.viewCenterUniform,xA.viewDirUniform,xA.sortRadialUniform,xA.sortCullCosUniform);o.push(s)}if(I){const s=oh(I.outputs.covsplat,xA.viewCenterUniform,xA.viewDirUniform,xA.sortRadialUniform,xA.sortCullCosUniform);o.push(s)}});Q=new go({graph:E,inputs:{index:"_index"},outputs:{},template:this.extSplats?xA.programExtTemplate:xA.programTemplate}),xA.generatorProgram.set(g,Q)}Object.assign(Q.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}});const C=Q.prepareMaterial();return xA.fullScreenQuad.material=C,{program:Q,material:C}}generate({generator:A,covGenerator:I,base:g,count:Q,renderer:C}){if(!this.target)throw new Error("Target must be initialized with ensureGenerate");if(g+Q>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:E,material:i}=this.prepareProgramMaterial(A,I);E.update();const D=this.saveRenderState(C),o=Math.ceil((g+Q)/_)*_,s=_*sg;for(i.uniforms.targetBase.value=g,i.uniforms.targetCount.value=Q;g<o;){const t=Math.floor(g/s);i.uniforms.targetLayer.value=t;const w=t*s,a=Math.floor((g-w)/_),y=Math.min(sg,Math.ceil((o-w)/_));this.target.scissor.set(0,a,_,y-a),C.setRenderTarget(this.target,t),C.xr.enabled=!1,C.autoClear=!1,xA.fullScreenQuad.render(C),g+=_*(y-a)}return this.resetRenderState(C,D),{nextBase:o}}prepareGenerate({renderer:A,scene:I,time:g,camera:Q,sortRadial:C,sortCullCos:E,renderSize:i,previous:D,lodInstances:o}){var s;this.viewToWorld.copy(Q.matrixWorld),Q.getWorldPosition(this.viewOrigin),Q.getWorldDirection(this.viewDirection),xA.viewCenterUniform.value.copy(this.viewOrigin),xA.viewDirUniform.value.copy(this.viewDirection),xA.sortRadialUniform.value=C,xA.sortCullCosUniform.value=E??-1,this.time=g,this.deltaTime=g-D.time;const t=[];I.traverse(k=>{k instanceof AB&&(!Q.layers||Q.layers.test(k.layers))&&t.push(k)});const w=new Set;I.traverseVisible(k=>{if(k instanceof zE){let J=k.parent;for(;J!=null&&!(J instanceof Zg);)J=J.parent;J==null&&w.add(k)}});const a=Array.from(w);for(const k of t)try{(s=k.frameUpdate)==null||s.call(k,{renderer:A,object:k,time:this.time,deltaTime:this.deltaTime,viewToWorld:this.viewToWorld,camera:Q,renderSize:i,globalEdits:a,lodIndices:o&&k instanceof Zg?o.get(k):void 0})}catch(J){console.error("frameUpdate error",J),k.generator=void 0,k.covGenerator=void 0,k.generatorError=J}const y=[];I.traverseVisible(k=>{k instanceof AB&&(!Q.layers||Q.layers.test(k.layers))&&y.push(k)});const R=y.map(k=>k.numSplats),{maxSplats:n,mapping:h}=this.generateMapping(R),G=D.mapping.reduce((k,J)=>(k.set(J.node,J),k),new Map);this.mapping=[],this.numSplats=0,h.forEach(({base:k,count:J},U)=>{const Y=y[U],d=G.get(Y);d&&d.count!==Y.numSplats&&Y.updateMappingVersion();const{generator:H,covGenerator:f}=Y;if((H||f)&&J>0){const{version:l,mappingVersion:p}=Y;this.mapping.push({node:Y,generator:H,covGenerator:f,version:l,mappingVersion:p,base:k,count:J}),this.numSplats=Math.max(this.numSplats,k+J)}});const{splatsUpdated:r,mappingUpdated:M}=D.checkVersions(this.mapping);return this.version=D.version+(r?1:0),this.mappingVersion=D.mappingVersion+(M?1:0),{sameMapping:!M,version:this.version,mappingVersion:this.mappingVersion,visibleGenerators:y,generate:()=>{this.ensureGenerate({maxSplats:n});for(const{node:k,base:J,count:U}of this.mapping){const{generator:Y,covGenerator:d}=k;(Y||d)&&U>0&&this.generate({generator:Y,covGenerator:d,base:J,count:U,renderer:A})}},readback:async()=>{const k=this.getTextures();this.readbackSplats.length===0&&(this.readbackSplats=[new rI({value:k[0],key:"extSplats"}),new rI({value:k[1],key:"extSplats"})]),this.readbackSplats[0].value=k[0],this.readbackSplats[1].value=k[1],this.readback||(this.readback=new UC({renderer:A}));const J=this.readback,U=this.extSplats?8:4,Y=J.ensureBuffer(this.numSplats*U,new Uint32Array(0)),d=DI({index:"int"},{rgba8:"vec4"},({index:H})=>({rgba8:new tA({inTypes:{index:"int",extSplats1:"usampler2DArray",extSplats2:"usampler2DArray"},outTypes:{rgba8:"vec4"},inputs:{index:H,extSplats1:this.readbackSplats[0],extSplats2:this.readbackSplats[1]},statements:({inputs:l,outputs:p})=>this.extSplats?GA(`
12688
+ `)}}).outputs.covsplat}updateFromMatrix(A){const I=new F.Matrix3().setFromMatrix4(A),g=new F.Vector3().setFromMatrixColumn(A,3),Q=!I.equals(this.basis.value)||!g.equals(this.offset.value);return Q&&(this.basis.value.copy(I),this.offset.value.copy(g)),Q}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class AB extends F.Object3D{constructor({numSplats:A,generator:I,covGenerator:g,construct:Q,update:C}){if(super(),this.numSplats=A??0,this.generator=I,this.covGenerator=g,this.frameUpdate=C,this.version=0,this.mappingVersion=0,Q){const E=Q(this);Object.assign(this,E)}}updateVersion(){this.version+=1}updateMappingVersion(){this.mappingVersion+=1,this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const uI=class xA{constructor({extSplats:A,covSplats:I}={}){if(this.time=0,this.deltaTime=0,this.viewToWorld=new F.Matrix4,this.viewOrigin=new F.Vector3,this.viewDirection=new F.Vector3,this.maxSplats=0,this.numSplats=0,this.target=null,this.mapping=[],this.version=-1,this.mappingVersion=-1,this.readback=null,this.readbackSplats=[],!Mc)throw new Error("Spark requires THREE.js r179 or above");this.extSplats=A??!0,this.covSplats=I??!1}dispose(){this.target&&(this.target.dispose(),this.target=null)}getTextures(){return this.target?this.target.textures:xA.emptyTextures}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,E=Math.ceil(Q/_)*_;return I+=E,{base:C,count:Q}});return{maxSplats:I,mapping:g}}ensureGenerate({maxSplats:A}){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const I=FA(A??1),{width:g,height:Q,depth:C}=I;if(this.maxSplats=I.maxSplats,this.target=new F.WebGLArrayRenderTarget(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:F.NearestFilter,minFilter:F.NearestFilter,format:F.RGBAIntegerFormat,type:F.UnsignedIntType}),this.target.scissorTest=!0,this.extSplats){const E=this.target.texture.clone(),i=this.target.texture.clone();i.format=F.RGBAFormat,i.type=F.UnsignedByteType,i.internalFormat="RGBA8",this.target.textures=[this.target.texture,E,i]}else{const E=this.target.texture.clone();E.format=F.RGBAFormat,E.type=F.UnsignedByteType,E.internalFormat="RGBA8",this.target.textures=[this.target.texture,E]}return!0}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}prepareProgramMaterial(A,I){const g=A??I;if(!g)throw new Error("Either generator or covGenerator must be provided");let Q=xA.generatorProgram.get(g);if(!Q){const E=DI({index:"int"},{},({index:i},D,{roots:o})=>{if(A&&(A.inputs.index=i),I&&(I.inputs.index=i),this.extSplats)if(this.covSplats)if(I){const s=Ys(I.outputs.covsplat);o.push(s)}else if(A){const s=kD(A.outputs.gsplat),t=Ys(s);o.push(t)}else throw new Error("Generator must be provided");else if(A){const s=ah(A.outputs.gsplat);o.push(s)}else throw new Error("Generator must be provided");else{if(this.covSplats){let s;if(I)s=I.outputs.covsplat;else if(A)s=kD(A.outputs.gsplat);else throw new Error("Generator must be provided");const t=$Q(MD(s).outputs.center,xA.viewCenterUniform),w=SQ(MD(s).outputs.opacity,OQ("float",.5));s=ga({covsplat:s,center:t,opacity:w});const a=wh(s,OQ("vec4",[0,1,KI,dI]));o.push(a)}else if(A){const s=$Q(XI(A.outputs.gsplat).outputs.center,xA.viewCenterUniform),t=SQ(XI(A.outputs.gsplat).outputs.opacity,OQ("float",.5)),w=zQ({gsplat:A.outputs.gsplat,center:s,opacity:t}),a=Qa(w,OQ("vec4",[0,1,KI,dI]));o.push(a)}else throw new Error("Generator must be provided");if(!A)throw new Error("Generator must be provided")}if(A){const s=eh(A.outputs.gsplat,xA.viewCenterUniform,xA.viewDirUniform,xA.sortRadialUniform,xA.sortCullCosUniform);o.push(s)}if(I){const s=nh(I.outputs.covsplat,xA.viewCenterUniform,xA.viewDirUniform,xA.sortRadialUniform,xA.sortCullCosUniform);o.push(s)}});Q=new Co({graph:E,inputs:{index:"_index"},outputs:{},template:this.extSplats?xA.programExtTemplate:xA.programTemplate}),xA.generatorProgram.set(g,Q)}Object.assign(Q.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}});const C=Q.prepareMaterial();return xA.fullScreenQuad.material=C,{program:Q,material:C}}generate({generator:A,covGenerator:I,base:g,count:Q,renderer:C}){if(!this.target)throw new Error("Target must be initialized with ensureGenerate");if(g+Q>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:E,material:i}=this.prepareProgramMaterial(A,I);E.update();const D=this.saveRenderState(C),o=Math.ceil((g+Q)/_)*_,s=_*sg;for(i.uniforms.targetBase.value=g,i.uniforms.targetCount.value=Q;g<o;){const t=Math.floor(g/s);i.uniforms.targetLayer.value=t;const w=t*s,a=Math.floor((g-w)/_),y=Math.min(sg,Math.ceil((o-w)/_));this.target.scissor.set(0,a,_,y-a),C.setRenderTarget(this.target,t),C.xr.enabled=!1,C.autoClear=!1,xA.fullScreenQuad.render(C),g+=_*(y-a)}return this.resetRenderState(C,D),{nextBase:o}}prepareGenerate({renderer:A,scene:I,time:g,camera:Q,sortRadial:C,sortCullCos:E,renderSize:i,previous:D,lodInstances:o}){var s;this.viewToWorld.copy(Q.matrixWorld),Q.getWorldPosition(this.viewOrigin),Q.getWorldDirection(this.viewDirection),xA.viewCenterUniform.value.copy(this.viewOrigin),xA.viewDirUniform.value.copy(this.viewDirection),xA.sortRadialUniform.value=C,xA.sortCullCosUniform.value=E??-1,this.time=g,this.deltaTime=g-D.time;const t=[];I.traverse(k=>{k instanceof AB&&(!Q.layers||Q.layers.test(k.layers))&&t.push(k)});const w=new Set;I.traverseVisible(k=>{if(k instanceof _E){let J=k.parent;for(;J!=null&&!(J instanceof Zg);)J=J.parent;J==null&&w.add(k)}});const a=Array.from(w);for(const k of t)try{(s=k.frameUpdate)==null||s.call(k,{renderer:A,object:k,time:this.time,deltaTime:this.deltaTime,viewToWorld:this.viewToWorld,camera:Q,renderSize:i,globalEdits:a,lodIndices:o&&k instanceof Zg?o.get(k):void 0})}catch(J){console.error("frameUpdate error",J),k.generator=void 0,k.covGenerator=void 0,k.generatorError=J}const y=[];I.traverseVisible(k=>{k instanceof AB&&(!Q.layers||Q.layers.test(k.layers))&&y.push(k)});const r=y.map(k=>k.numSplats),{maxSplats:c,mapping:h}=this.generateMapping(r),G=D.mapping.reduce((k,J)=>(k.set(J.node,J),k),new Map);this.mapping=[],this.numSplats=0,h.forEach(({base:k,count:J},U)=>{const H=y[U],d=G.get(H);d&&d.count!==H.numSplats&&H.updateMappingVersion();const{generator:Y,covGenerator:f}=H;if((Y||f)&&J>0){const{version:l,mappingVersion:p}=H;this.mapping.push({node:H,generator:Y,covGenerator:f,version:l,mappingVersion:p,base:k,count:J}),this.numSplats=Math.max(this.numSplats,k+J)}});const{splatsUpdated:R,mappingUpdated:N}=D.checkVersions(this.mapping);return this.version=D.version+(R?1:0),this.mappingVersion=D.mappingVersion+(N?1:0),{sameMapping:!N,version:this.version,mappingVersion:this.mappingVersion,visibleGenerators:y,generate:()=>{this.ensureGenerate({maxSplats:c});for(const{node:k,base:J,count:U}of this.mapping){const{generator:H,covGenerator:d}=k;(H||d)&&U>0&&this.generate({generator:H,covGenerator:d,base:J,count:U,renderer:A})}},readback:async()=>{const k=this.getTextures();this.readbackSplats.length===0&&(this.readbackSplats=[new rI({value:k[0],key:"extSplats"}),new rI({value:k[1],key:"extSplats"})]),this.readbackSplats[0].value=k[0],this.readbackSplats[1].value=k[1],this.readback||(this.readback=new LC({renderer:A}));const J=this.readback,U=this.extSplats?8:4,H=J.ensureBuffer(this.numSplats*U,new Uint32Array(0)),d=DI({index:"int"},{rgba8:"vec4"},({index:Y})=>({rgba8:new tA({inTypes:{index:"int",extSplats1:"usampler2DArray",extSplats2:"usampler2DArray"},outTypes:{rgba8:"vec4"},inputs:{index:Y,extSplats1:this.readbackSplats[0],extSplats2:this.readbackSplats[1]},statements:({inputs:l,outputs:p})=>this.extSplats?GA(`
12689
12689
  int indexDiv8 = ${l.index} >> 3;
12690
12690
  ivec3 coord = splatTexCoord(indexDiv8);
12691
12691
  uvec4 packedData;
@@ -12712,7 +12712,7 @@ void main() {\r
12712
12712
  : (indexMod4 == 2) ? packedData.z
12713
12713
  : packedData.w;
12714
12714
  ${p.rgba8} = uintToVec4(data);
12715
- `)}).outputs.rgba8}));return await J.renderReadback({reader:d,count:this.numSplats*U,renderer:A,readback:Y})}}}checkVersions(A){if(this.mapping.length!==A.length)return{splatsUpdated:!0,mappingUpdated:!0};const I=this.mapping.some((Q,C)=>{const E=A[C];return Q.node!==E.node||Q.base!==E.base||Q.count!==E.count||Q.mappingVersion!==E.mappingVersion});return I?{splatsUpdated:!0,mappingUpdated:!0}:{splatsUpdated:this.mapping.some((Q,C)=>Q.version!==A[C].version),mappingUpdated:I}}};uI.viewCenterUniform=new pg({value:new F.Vector3});uI.viewDirUniform=new pg({value:new F.Vector3});uI.sortRadialUniform=new RC({value:!0});uI.sortCullCosUniform=new _Q({value:-1});uI.emptyTexture=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();uI.emptyTextures=[uI.emptyTexture,uI.emptyTexture];uI.programExtTemplate=new ZE(EB().computeUvec4x2Vec4Template);uI.programTemplate=new ZE(EB().computeUvec4Vec4Template);uI.generatorProgram=new WeakMap;uI.fullScreenQuad=new uD.FullScreenQuad(new F.RawShaderMaterial({visible:!1}));let mQ=uI;class cy extends F.InstancedBufferGeometry{constructor(){super(),this.setAttribute("position",new F.BufferAttribute(ny,3)),this.setIndex(new F.BufferAttribute(hy,1))}}const ny=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),hy=new Uint16Array([0,1,2,0,2,3]),LB=new F.Vector3;function yy(B){const A=B.getWorldScale(LB);return(A.x+A.y+A.z)/3}const _E=class HA extends F.Mesh{constructor(A){if(!A)throw new Error("SparkRenderer options are required");if(!A.renderer)throw new Error("renderer is required in SparkRenderer options");const I=HA.makeUniforms();Object.assign(I,A.extraUniforms??{});const g=EB(),Q=A.premultipliedAlpha??!0,C=new cy,E=new F.ShaderMaterial({glslVersion:F.GLSL3,vertexShader:A.vertexShader??g.splatVertex,fragmentShader:A.fragmentShader??g.splatFragment,uniforms:I,premultipliedAlpha:Q,transparent:A.transparent??!0,depthTest:A.depthTest??!0,depthWrite:A.depthWrite??!1,side:F.DoubleSide,allowOverride:!1});super(C,E),this.renderSize=new F.Vector2,this.lastFrame=-1,this.updateTimeoutId=-1,this.orderingTexture=null,this.maxSplats=0,this.activeSplats=0,this.accumulators=[],this.sorting=!1,this.sortDirty=!1,this.lastSortTime=0,this.sortWorker=null,this.sortTimeoutId=-1,this.sortedCenter=new F.Vector3().setScalar(Number.NEGATIVE_INFINITY),this.sortedDir=new F.Vector3().setScalar(0),this.sortCullHalfAngle=Math.PI,this.readback32=new Uint32Array(0),this.ordering32=new Uint32Array(0),this.pauseWork=!1,this.lastLodRaycastTime=0,this.lodWorker=null,this.lodMeshes=[],this.lodDirty=!1,this.lodIds=new Map,this.lodIdToSplats=new Map,this.lodInitQueue=[],this.lodInstances=new Map,this.lodUpdates=[],this.lastTraverseTime=0,this.pagerId=0,this.superXY=1,this.flushAfterGenerate=!1,this.flushAfterRead=!1,this.readPause=1,this.sortPause=0,this.sortDelay=0,this.pageSizeWarning=!1,this.material=E,this.uniforms=I,this.frustumCulled=!1,this.renderer=A.renderer,this.onDirty=A.onDirty,this.dirty=!0,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!0,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.accumExtSplats=A.accumExtSplats??!1,this.covSplats=A.covSplats??!1,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.encodeLinear=A.encodeLinear??!1,this.sortRadial=A.sortRadial??!0,this.sortCullHalfAngle=A.sortCullHalfAngle??Math.PI,this.minSortIntervalMs=A.minSortIntervalMs??0,this.enableLod=A.enableLod??!0,this.enableDriveLod=A.enableDriveLod??this.enableLod,this.enableLodFetching=A.enableLodFetching??!0,this.lodSplatCount=A.lodSplatCount,this.lodSplatScale=A.lodSplatScale??1,this.lodRenderScale=A.lodRenderScale??1,this.lodInflate=A.lodInflate??!1,this.pagedExtSplats=A.pagedExtSplats??!1;const i=lE()?fE()?96:128:256;this.maxPagedSplats=A.maxPagedSplats??i*65536,this.numLodFetchers=A.numLodFetchers??3,this.behindFoveate=A.behindFoveate??.2,this.coneFov0=A.coneFov0??90,this.coneFov=A.coneFov??120,this.coneFoveate=A.coneFoveate??.4,this.lodRaycast=A.lodRaycast===void 0?lE()?1e4:25e3:A.lodRaycast,this.lodRaycastIntervalMs=A.lodRaycastIntervalMs??500,this.clock=A.clock?xw(A.clock):new F.Clock;const D={extSplats:this.accumExtSplats,covSplats:this.covSplats};if(this.display=new mQ(D),this.current=this.display,this.accumulators.push(new mQ(D)),this.accumulators.push(new mQ(D)),A.target){const{width:o,height:s,doubleBuffer:t,superXY:w,...a}=A.target,y=Math.max(1,Math.min(4,w??1));if(o*y>8192||s*y>8192)throw new Error("Target size too large");this.superXY=y;const R=o*y,n=s*y,h={format:F.RGBAFormat,type:F.UnsignedByteType,colorSpace:F.SRGBColorSpace,...a};this.target=new F.WebGLRenderTarget(R,n,h),t&&(this.backTarget=new F.WebGLRenderTarget(R,n,h)),this.encodeLinear=A.encodeLinear??!0}}clone(A){const I=this.constructor;return new I({renderer:this.renderer})}static makeUniforms(){return{renderSize:{value:new F.Vector2},near:{value:.1},far:{value:1e3},renderToViewQuat:{value:new F.Quaternion},renderToViewPos:{value:new F.Vector3},renderToViewScale:{value:1},renderToViewBasis:{value:new F.Matrix3},renderToViewOffset:{value:new F.Vector3},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},enable2DGS:{value:!1},lodInflate:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},encodeLinear:{value:!1},ordering:{type:"t",value:HA.emptyOrdering},enableExtSplats:{value:!1},enableCovSplats:{value:!1},extSplats:{type:"t",value:mQ.emptyTexture},extSplats2:{type:"t",value:mQ.emptyTexture},time:{value:0},deltaTime:{value:0},debugFlag:{value:!1}}}dispose(){this.target&&(this.target.dispose(),this.target=void 0),this.backTarget&&(this.backTarget.dispose(),this.backTarget=void 0),this.orderingTexture&&(this.orderingTexture.dispose(),this.orderingTexture=null);const A=new Set;A.add(this.display),A.add(this.current);for(const g of this.accumulators)A.add(g);for(const g of A)g.dispose();const I=this.lodInstances.values();this.lodInstances.clear();for(const g of I)g.texture.dispose();this.sortWorker&&(this.sortWorker.dispose(),this.sortWorker=null),this.lodWorker&&(this.lodWorker.dispose(),this.lodWorker=null),this.pager&&(this.pager.dispose(),this.pager=void 0)}setDirty(){var A;this.dirty||(this.dirty=!0,(A=this.onDirty)==null||A.call(this))}onBeforeRender(A,I,g){var Q;const C=HA.sparkOverride??this,E=A.info.render.frame,i=E!==C.lastFrame;if(C.lastFrame=E,C.target)C.renderSize.set(C.target.width,C.target.height);else{const y=A.getDrawingBufferSize(C.renderSize);if(A.xr.isPresenting&&y.x===1&&y.y===1){const R=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;R&&(y.x=R.framebufferWidth,y.y=R.framebufferHeight)}}this.uniforms.renderSize.value.copy(C.renderSize);const D=g;this.uniforms.near.value=D.near,this.uniforms.far.value=D.far;const o=this.geometry;o.instanceCount=C.activeSplats;const s=new F.Matrix4;this.display.extSplats||s.makeTranslation(C.display.viewOrigin);const a=g.matrixWorld.clone().invert().multiply(s);if(a.decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,LB),this.uniforms.renderToViewScale.value=(LB.x+LB.y+LB.z)/3,this.uniforms.renderToViewBasis.value.setFromMatrix4(a),this.uniforms.maxStdDev.value=C.maxStdDev,this.uniforms.minPixelRadius.value=C.minPixelRadius,this.uniforms.maxPixelRadius.value=C.maxPixelRadius,this.uniforms.minAlpha.value=C.minAlpha,this.uniforms.enable2DGS.value=C.enable2DGS,this.uniforms.lodInflate.value=C.lodInflate,this.uniforms.preBlurAmount.value=C.preBlurAmount,this.uniforms.blurAmount.value=C.blurAmount,this.uniforms.focalDistance.value=C.focalDistance,this.uniforms.apertureAngle.value=C.apertureAngle,this.uniforms.falloff.value=C.falloff,this.uniforms.clipXY.value=C.clipXY,this.uniforms.focalAdjustment.value=C.focalAdjustment,this.uniforms.encodeLinear.value=C.encodeLinear,this.uniforms.ordering.value=C.orderingTexture??HA.emptyOrdering,this.uniforms.enableExtSplats.value=this.display.extSplats,this.uniforms.enableCovSplats.value=this.display.covSplats,this.display.extSplats){const y=C.display.getTextures();this.uniforms.extSplats.value=y[0],this.uniforms.extSplats2.value=y[1]}else{const y=C.display.getTextures();this.uniforms.extSplats.value=y[0],this.uniforms.extSplats2.value=y[0]}if(this.uniforms.time.value=C.display.time,this.uniforms.deltaTime.value=C.display.deltaTime,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,C.autoUpdate&&i){const y=C.preUpdate&&!A.xr.isPresenting,R=A.xr.isPresenting?A.xr.getCamera().cameras[0]??A.xr.getCamera():g;y?C.updateInternal({scene:I,camera:R,autoUpdate:!0}):C.updateTimeoutId===-1&&(C.updateTimeoutId=setTimeout(()=>{C.updateTimeoutId=-1,C.updateInternal({scene:I,camera:R,autoUpdate:!0})},1))}C.dirty=!1}clearSplats(){this.activeSplats=0,this.display.numSplats=0,this.setDirty()}async update({scene:A,camera:I}){await this.updateInternal({scene:A,camera:I,autoUpdate:!1})}async updateInternal({scene:A,camera:I,autoUpdate:g}){if(this.pauseWork)return;const Q=this.renderer,C=this.time??this.clock.getElapsedTime(),E=I.getWorldPosition(new F.Vector3),i=I.getWorldDirection(new F.Vector3),D=E.distanceTo(this.sortedCenter)>.001*yy(I)||i.dot(this.sortedDir)<.999,o=this.accumulators.pop();if(!o)throw new Error("No next accumulator");if(o===this.current)throw new Error("Next accumulator is the same as the current accumulator");const{version:s,mappingVersion:t,visibleGenerators:w,generate:a}=o.prepareGenerate({renderer:Q,scene:A,time:C,camera:I,sortRadial:this.sortRadial??!0,sortCullCos:this.sortCullHalfAngle<Math.PI?Math.cos(this.sortCullHalfAngle):-1,renderSize:this.renderSize,previous:this.current,lodInstances:this.enableLod?this.lodInstances:void 0});let y=!0;const R=t!==this.display.mappingVersion,n=D||s!==this.current.version||R;g&&!n&&(y=!1),R&&this.sorting&&(y=!1),y?(a(),this.flushAfterGenerate&&Q.getContext().flush(),this.display.mappingVersion===o.mappingVersion?(this.accumulators.push(this.display),this.display=o):this.display!==this.current&&this.accumulators.push(this.current),this.current=o,this.sortDirty=!0,this.setDirty()):this.accumulators.push(o),this.enableDriveLod&&this.driveLod({visibleGenerators:w,camera:I,scene:A}),await this.driveSort()}async driveSort(){if(this.sorting||!this.sortDirty)return;this.sortTimeoutId!==-1&&(clearTimeout(this.sortTimeoutId),this.sortTimeoutId=-1);const A=performance.now();let I=this.lastSortTime?this.lastSortTime+this.minSortIntervalMs:A;if(this.sortCullHalfAngle<Math.PI&&this.current){const t=this.current.viewDirection.dot(this.sortedDir),w=Math.max(.087,(this.sortCullHalfAngle-Math.PI/3)/3);t<Math.cos(w)&&(I=A)}if(A<I){this.sortTimeoutId=setTimeout(()=>{this.sortTimeoutId=-1,this.driveSort()},I-A);return}this.sorting=!0,this.sortDirty=!1,this.readPause>0&&await new Promise(t=>setTimeout(t,this.readPause));const g=this.current;this.sortedCenter.copy(g.viewOrigin),this.sortedDir.copy(g.viewDirection);const{numSplats:Q,maxSplats:C}=g,E=Math.max(1,Math.ceil(C/16384)),i=E*16384;this.maxSplats=Math.max(this.maxSplats,i);const D=this.ordering32.length===this.maxSplats?this.ordering32:new Uint32Array(this.maxSplats);this.ordering32=new Uint32Array(0);const o=UC.ensureBuffer(C,this.readback32);this.readback32=o,await this.readbackDepth({current:g,renderer:this.renderer,numSplats:Q,readback:o}),this.sortPause>0&&await new Promise(t=>setTimeout(t,this.sortPause)),this.sortWorker||(this.sortWorker=new RD);const s=await this.sortWorker.call("sortSplats32",{numSplats:Q,readback:o,ordering:D});if(this.sortDelay>0&&await new Promise(t=>setTimeout(t,this.sortDelay)),this.readback32=s.readback,this.activeSplats=s.activeSplats,this.orderingTexture&&E>this.orderingTexture.image.height&&(this.orderingTexture.dispose(),this.orderingTexture=null),this.orderingTexture){this.ordering32=s.ordering;const t=this.renderer,w=t.getContext();if(!t.properties.has(this.orderingTexture))this.orderingTexture.needsUpdate=!0;else{const y=t.properties.get(this.orderingTexture).__webglTexture;if(!y)throw new Error("ordering texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,y),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,E,w.RGBA_INTEGER,w.UNSIGNED_INT,s.ordering),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=new F.DataTexture(s.ordering,4096,E,F.RGBAIntegerFormat,F.UnsignedIntType);t.internalFormat="RGBA32UI",t.needsUpdate=!0,this.orderingTexture=t}this.current.mappingVersion===g.mappingVersion&&this.current.mappingVersion!==this.display.mappingVersion&&(this.accumulators.push(this.display),this.display=this.current),this.lastSortTime=performance.now(),this.sorting=!1,this.setDirty(),this.driveSort()}ensureLodWorker(){return this.lodWorker||(this.lodWorker=new RD),this.lodWorker}defaultSplatTarget(){return lw()?5e5:fw()?75e4:dw()?1e6:fE()?15e5:25e5}driveLod({visibleGenerators:A,camera:I,scene:g}){var Q,C;const E=this.defaultSplatTarget(),D=(this.lodSplatCount??E)*this.lodSplatScale;let o=0;if(I instanceof F.PerspectiveCamera)o=2*Math.tan(.5*I.fov*Math.PI/180)/this.renderSize.y;else if(I instanceof F.OrthographicCamera){const h=(I.top-I.bottom)/I.zoom,G=(I.right-I.left)/I.zoom,r=h/Math.max(1,this.renderSize.y),M=G/Math.max(1,this.renderSize.x);o=Math.min(M,r)}o*=this.lodRenderScale;const s=new F.Vector3,t=new F.Quaternion,w=new F.Vector3;this.current.viewToWorld.decompose(s,t,w);const a=(w.x+w.y+w.z)/3;if(this.lodPosOverride&&s.copy(this.lodPosOverride),this.lodQuatOverride&&t.copy(this.lodQuatOverride).normalize(),this.lastLod){(this.lastLod.pixelScaleLimit!==o||this.lastLod.maxSplats!==D)&&(this.lodDirty=!0);const h=s.distanceTo(this.lastLod.pos),G=Math.max(0,1-h/a),r=t.dot(this.lastLod.quat),M=Math.max(0,1-(1-r)/.01);G*M<.999&&(this.lodDirty=!0)}const y=this.enableLod?A.filter(h=>{var G,r;return h instanceof Zg&&(((G=h.packedSplats)==null?void 0:G.lodSplats)||((r=h.extSplats)==null?void 0:r.lodSplats)||h.paged)&&h.enableLod!==!1}):[],R=y.some(h=>h.paged);this.lodMeshes.length!==y.length?this.lodDirty=!0:y.some((h,G)=>h!==this.lodMeshes[G].mesh||h.version>this.lodMeshes[G].version)&&(this.lodDirty=!0),this.lodMeshes=y.map(h=>({mesh:h,version:h.version+1})),this.lodInitQueue=[];const n=performance.now();for(const h of y){const G=((Q=h.packedSplats)==null?void 0:Q.lodSplats)??((C=h.extSplats)==null?void 0:C.lodSplats)??h.paged;if(G){const r=this.lodIds.get(G);r?r.lastTouched=n:this.lodInitQueue.push(G)}}this.ensureLodWorker().tryExclusive(async h=>{if(R&&!this.pager){this.pager=new eQ({renderer:this.renderer,extSplats:this.pagedExtSplats,maxSplats:this.maxPagedSplats,numFetchers:this.numLodFetchers});const{lodId:G}=await h.call("newLodTree",{capacity:this.pager.maxSplats});this.pagerId=G}if(this.pager)for(const{mesh:G}of this.lodMeshes)G.paged&&!G.paged.pager&&(G.paged.pager=this.pager);if(this.lodInitQueue.length>0){const G=this.lodInitQueue;for(this.lodInitQueue=[];G.length>0;){const r=G.shift();r&&(await this.initLodTree(h,r),this.lodDirty=!0)}}if(this.pager){const G=this.pager.consumeLodTreeUpdates();for(const{splats:r,page:M,chunk:k,numSplats:J,lodTree:U}of G){const Y=this.lodIds.get(r);Y&&(U&&k===0&&(Y.rootPage=M),this.lodUpdates.push({lodId:Y.lodId,pageBase:M*this.pager.pageSplats,chunkBase:k*this.pager.pageSplats,count:J,lodTreeData:U}))}}if(this.lodUpdates.length>0){const G=this.lodUpdates;this.lodUpdates=[],await h.call("updateLodTrees",{ranges:G}),this.lodDirty=!0}if(this.lodDirty){const G=performance.now(),r=new F.Vector3;if(this.lastLod){const M=Math.max(1,G-this.lastLod.timestamp);r.copy(s).sub(this.lastLod.pos).multiplyScalar(this.lastTraverseTime/M)}this.lastLod={pos:s,quat:t,pixelScaleLimit:o,maxSplats:D,timestamp:G},this.lodDirty=!1,await this.updateLodInstances(h,r,y,D,s,t,o),this.currentLod=this.lastLod,this.setDirty()}await this.cleanupLodTrees(h)})}async initLodTree(A,I){if(I instanceof Gg||I instanceof lg){const{lodId:g}=await A.call("initLodTree",{numSplats:I.numSplats??0,lodTree:I.extra.lodTree.slice()});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}else{const{lodId:g}=await A.call("newSharedLodTree",{lodId:this.pagerId});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}}async updateLodInstances(A,I,g,Q,C,E,i){const D=new Map,o=new F.Matrix4().compose(C,E,new F.Vector3().setScalar(1)),s=g.reduce((h,G)=>{var r,M;D.set(G.uuid,G);const k=G.matrixWorld.clone().invert().multiply(o),J=((r=G.packedSplats)==null?void 0:r.lodSplats)??((M=G.extSplats)==null?void 0:M.lodSplats)??G.paged;if(!J)return h;const U=this.lodIds.get(J);return!U||this.pager&&G.paged&&U.rootPage===void 0||(h[G.uuid]={instanceId:G.uuid,lodId:U.lodId,rootPage:U.rootPage,viewToObjectCols:k.elements,lodScale:G.lodScale,behindFoveate:G.behindFoveate??this.behindFoveate,coneFov0:G.coneFov0??this.coneFov0,coneFov:G.coneFov??this.coneFov,coneFoveate:G.coneFoveate??this.coneFoveate}),h},{}),t=performance.now(),w=await A.call("traverseLodTrees",{maxSplats:Q,pixelScaleLimit:i,lastPixelLimit:this.lastPixelLimit,instances:s});this.lastTraverseTime=performance.now()-t;const{keyIndices:a,chunks:y,pixelLimit:R}=w;this.lastPixelLimit=R;const n=Object.values(a).reduce((h,{numSplats:G})=>h+G,0);if(this.updateLodIndices(D,a),this.pager){this.pager.processUploads();const h=g.map(G=>{if(!G.paged||!this.pager)return null;const r=G.getWorldPosition(new F.Vector3);return{splats:G.paged,distance:r.distanceTo(C)}}).filter(G=>G!==null);!this.pageSizeWarning&&h.length>this.pager.maxPages&&(this.pageSizeWarning=!0,console.warn(`# paged SplatMeshes exceeds maxPages: ${h.length} > ${this.pager.maxPages}`)),h.sort((G,r)=>G.distance-r.distance),this.pager.fetchPriority=h.map(({splats:G})=>({splats:G,chunk:0}));for(const[G,r]of y){const M=this.lodIdToSplats.get(G);M instanceof uB&&r!==0&&this.pager.fetchPriority.push({splats:M,chunk:r})}this.pager.autoDrive=this.enableLodFetching,this.enableLodFetching&&this.pager.driveFetchers()}if(this.lodRaycast&&performance.now()-this.lastLodRaycastTime>=this.lodRaycastIntervalMs){this.lastLodRaycastTime=performance.now();const h=performance.now(),G=await A.call("traverseLodTrees",{maxSplats:Math.min(this.lodRaycast,Math.round(n*.1)),pixelScaleLimit:i,instances:s});performance.now()-h;const{keyIndices:r}=G;Object.values(r).reduce((M,{numSplats:k})=>M+k,0);for(const[M,k]of Object.entries(r)){const J=D.get(M);J.raycastIndices=k}}}async cleanupLodTrees(A){const g=performance.now();let Q=null;for(const[C,E]of this.lodIds.entries())(Q==null||E.lastTouched<Q.lastTouched)&&(Q={splats:C,lastTouched:E.lastTouched,lodId:E.lodId});if(!(!Q||Q.lastTouched>g-3e3)){this.lodIds.delete(Q.splats),this.lodIdToSplats.delete(Q.lodId);for(const[C,E]of this.lodInstances.entries())E.lodId===Q.lodId&&(E.texture.dispose(),this.lodInstances.delete(C));await A.call("disposeLodTree",{lodId:Q.lodId})}}updateLodIndices(A,I){for(const[g,Q]of Object.entries(I)){const{lodId:C,numSplats:E,indices:i}=Q,D=A.get(g);if(D.paged)D.paged.update(E,i);else{let o=this.lodInstances.get(D);o&&i.length>o.indices.length&&(o.texture.dispose(),o=void 0);const s=Math.ceil(i.length/16384);if(o){o.numSplats=E;const t=this.renderer,w=t.getContext();if(t.properties.has(o.texture)){const y=t.properties.get(o.texture).__webglTexture;if(!y)throw new Error("lodIndices texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,y),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,s,w.RGBA_INTEGER,w.UNSIGNED_INT,i),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=s*16384;if(i.length!==t)throw new Error("Indices length != capacity");const w=new F.DataTexture(i,4096,s,F.RGBAIntegerFormat,F.UnsignedIntType);w.internalFormat="RGBA32UI",w.needsUpdate=!0,o={lodId:C,numSplats:E,indices:i,texture:w},this.lodInstances.set(D,o)}}D.updateMappingVersion()}}async readbackDepth({current:A,renderer:I,numSplats:g,readback:Q}){if(!I)throw new Error("No renderer");if(!A.target)throw new Error("No target");const C=Math.ceil(g/_)*_;if(Q.byteLength<C*4)throw new Error(`Readback buffer too small: ${Q.byteLength} < ${C*4}`);const E=new Uint8Array(Q.buffer),i=this.saveRenderState(I),D=_*sg;let o=0;const s=[];for(;o<g;){const t=Math.floor(o/D),w=t*D,a=Math.min(sg,Math.ceil((g-w)/_)),y=_*a*4,R=E.subarray(w*4,w*4+y);I.setRenderTarget(A.target,t);const n=I.readRenderTargetPixelsAsync(A.target,0,0,_,a,R,void 0,A.extSplats?2:1);s.push(n),this.flushAfterRead&&I.getContext().flush(),o+=_*a}return this.resetRenderState(I,i),Promise.all(s).then(()=>Q)}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}render(A,I){try{HA.sparkOverride=this,this.renderer.render(A,I)}finally{HA.sparkOverride=void 0}}renderTarget({scene:A,camera:I}){const g=this.backTarget??this.target;if(!g)throw new Error("No target");const Q=this.renderer.getRenderTarget();try{this.renderer.setRenderTarget(g),HA.sparkOverride=this,this.renderer.render(A,I)}finally{HA.sparkOverride=void 0,this.renderer.setRenderTarget(Q)}return g!==this.target&&([this.target,this.backTarget]=[this.backTarget,this.target]),g}async readTarget(){if(!this.target)throw new Error("Must initialize with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g));const Q=this.superPixels;await this.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,Q);const{superXY:C}=this;if(C===1)return Q;const E=A/C,i=I/C,D=E*i*4;(!this.targetPixels||this.targetPixels.length<D)&&(this.targetPixels=new Uint8Array(D));const o=this.targetPixels,s=C*C;for(let t=0;t<i;t++){const w=t*E;for(let a=0;a<E;a++){const y=a*C;let R=0,n=0,h=0,G=0;for(let M=0;M<C;M++){const k=(t*C+M)*A;for(let J=0;J<C;J++){const U=(k+y+J)*4;R+=Q[U],n+=Q[U+1],h+=Q[U+2],G+=Q[U+3]}}const r=(w+a)*4;o[r]=R/s,o[r+1]=n/s,o[r+2]=h/s,o[r+3]=G/s}}return o}async renderReadTarget({scene:A,camera:I}){return this.renderTarget({scene:A,camera:I}),this.readTarget()}async renderCubeMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:E=[],update:i=!0,filter:D=!1}){if(!HA.cubeRender||HA.cubeRender.target.width!==g||HA.cubeRender.near!==Q||HA.cubeRender.far!==C){HA.cubeRender&&HA.cubeRender.target.dispose();const w=new F.WebGLCubeRenderTarget(g,{format:F.RGBAFormat,type:F.UnsignedByteType,generateMipmaps:D,minFilter:D?F.LinearMipMapLinearFilter:F.LinearFilter,magFilter:F.LinearFilter,colorSpace:D?F.LinearSRGBColorSpace:F.SRGBColorSpace}),a=new F.CubeCamera(Q,C,w);HA.cubeRender={target:w,cubeCamera:a,near:Q,far:C}}const{target:o,cubeCamera:s}=HA.cubeRender;s.position.copy(I);const t=new Map;for(const w of E)t.set(w,w.visible),w.visible=!1;if(i){const w=new F.Camera;w.position.copy(I),await this.update({scene:A,camera:w})}try{HA.sparkOverride=this,s.update(this.renderer,A)}finally{HA.sparkOverride=void 0}for(const[w,a]of t.entries())w.visible=a;return o.texture}async readCubeTargets(){if(!HA.cubeRender)throw new Error("No cube render");const A=HA.cubeRender.target.texture,I=[],g=[];for(let Q=0;Q<A.images.length;++Q){const{width:C,height:E}=A.images[Q],i=C*E*4,D=new Uint8Array(i);g.push(D);const o=this.renderer.readRenderTargetPixelsAsync(HA.cubeRender.target,0,0,C,E,D,Q);I.push(o)}return await Promise.all(I),g}async renderEnvMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:E=[],update:i=!0}){var D;const o=await this.renderCubeMap({scene:A,worldCenter:I,size:g,near:Q,far:C,hideObjects:E,update:i,filter:!0});return HA.pmrem||(HA.pmrem=new F.PMREMGenerator(this.renderer)),(D=HA.pmrem)==null?void 0:D.fromCubemap(o).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof F.Mesh)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof F.MeshStandardMaterial&&(Q.envMap=I);else g.material instanceof F.MeshStandardMaterial&&(g.material.envMap=I)})}async getLodTreeLevel(A,I,g=!1){var Q,C;const E=this.lodInstances.get(A);if(!E)return null;const i=await this.ensureLodWorker().exclusive(async D=>await D.call("getLodTreeLevel",{lodId:E.lodId,level:I}));if((Q=A.packedSplats)!=null&&Q.lodSplats){const D=A.packedSplats.lodSplats.extractSplats(i.indices,g);return new Zg({packedSplats:D})}if((C=A.extSplats)!=null&&C.lodSplats){const D=A.extSplats.lodSplats.extractSplats(i.indices,g);return new Zg({extSplats:D})}throw new Error("Only LoD-enabled PackedSplats and ExtSplats are supported")}get premultipliedAlpha(){return this.material.premultipliedAlpha}set premultipliedAlpha(A){this.material.premultipliedAlpha!==A&&(this.material.premultipliedAlpha=A,this.material.needsUpdate=!0)}};_E.emptyOrdering=(()=>{const A=new Uint32Array(16384),I=new F.DataTexture(A,4096,1);return I.format=F.RGBAIntegerFormat,I.type=F.UnsignedIntType,I.internalFormat="RGBA32UI",I.needsUpdate=!0,I})();_E.cubeRender=null;_E.pmrem=null;let Gy=_E;class uB{constructor(A){var I;if(this.shCodesSent=new WeakMap,this.pager=A.pager,this.rootUrl=A.rootUrl??"",this.requestHeader=A.requestHeader,this.withCredentials=A.withCredentials,this.numSh=0,this.maxSh=((I=A.pager)==null?void 0:I.maxSh)??3,this.numSplats=0,this.dynoNumSplats=new xg({value:0}),this.dynoIndices=new jw({value:eQ.emptyIndicesTexture}),this.rgbMinMaxLnScaleMinMax=new JC({value:new F.Vector4(0,1,KI,dI)}),this.lodOpacity=new RC({value:!1}),this.dynoNumSh=new xg({value:0}),this.shMax=new pg({value:new F.Vector3}),this.fileBytes=A.fileBytes,this.fileType=A.fileType,!this.fileType&&this.fileBytes&&(this.fileType=Da(this.fileBytes)),!this.fileType&&this.rootUrl&&(this.fileType=Fy(this.rootUrl)),!this.fileType)throw new Error("Unable to determine file type");this.fileType===HI.RAD&&(this.radMetaPromise=this.getRadMeta())}dispose(){this.dynoIndices.value!==eQ.emptyIndicesTexture&&(this.dynoIndices.value.dispose(),this.dynoIndices.value=eQ.emptyIndicesTexture)}setMaxSh(A){this.maxSh=A}getRadMeta(){return this.radMetaPromise?this.radMetaPromise:(this.radMetaPromise=(async()=>{if(await ry,this.fileBytes){const A=Hs(this.fileBytes.slice(0,1048576));if(A)return A;throw new Error("Failed to decode RAD header")}if(!this.rootUrl)throw new Error("No url or fileBytes provided");for(const A of[65536,256*1024,1024*1024]){const I=await qi({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:0,bytes:A}),g=Hs(I);if(g)return g}throw new Error("Failed to decode RAD header")})().then(A=>A),this.radMetaPromise.catch(A=>{console.error(A)}),this.radMetaPromise)}chunkUrl(A){return this.rootUrl.replace(/-lod-0\./,`-lod-${A}.`)}async fetchDecodeChunk(A){let I;if(this.fileType===HI.RAD){const{meta:g,chunksStart:Q}=await this.getRadMeta();if(A<0||A>=g.chunks.length)throw new Error(`Chunk index out of range: ${A} (max: ${g.chunks.length-1})`);let{offset:C,bytes:E,filename:i}=g.chunks[A];if(i){if(this.fileBytes)throw new Error("Chunked RAD file not supported with fileBytes");const D=new URL(this.rootUrl,window.location.href).toString(),o=new URL(i,D).toString();I=await qi({url:o,requestHeader:this.requestHeader,withCredentials:this.withCredentials})}else if(C+=Q,this.fileBytes){if(C<0||C+E>this.fileBytes.length)throw new Error(`Invalid chunk offset or bytes: ${C} + ${E} > ${this.fileBytes.length}`);I=this.fileBytes.slice(C,C+E)}else if(this.rootUrl)I=await qi({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:C,bytes:E});else throw new Error("No url or fileBytes provided")}else if(!this.fileBytes)if(this.rootUrl){const g=this.chunkUrl(A),Q=new Request(g,{headers:this.requestHeader?new Headers(this.requestHeader):void 0,credentials:this.withCredentials?"include":"same-origin"}),C=await fetch(Q);if(!C.ok||!C.body)throw new Error(`Failed to fetch "${g}": ${C.status} ${C.statusText}`);I=new Uint8Array(await C.arrayBuffer())}else throw new Error("No url or fileBytes provided");return await vE.withWorker(async g=>{var Q,C,E,i,D;if(!this.pager)throw new Error("PagedSplats.pager not set");const o={sh1:this.sh1Codes,sh2:this.sh2Codes,sh3:this.sh3Codes},s=this.shCodesSent.get(g),t=!s||s.sh1!==o.sh1||s.sh2!==o.sh2||s.sh3!==o.sh3,w=()=>{t&&this.shCodesSent.set(g,o)};if(!this.pager.extSplats){const n=await g.call("loadPackedSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(Q=o.sh1)==null?void 0:Q.slice():void 0,sh2Codes:t?(C=o.sh2)==null?void 0:C.slice():void 0,sh3Codes:t?(E=o.sh3)==null?void 0:E.slice():void 0});w();const h=n.lodSplats;return this.splatEncoding||(this.splatEncoding=h.splatEncoding,this.numSh=h.extra.sh3?3:h.extra.sh2?2:h.extra.sh1?1:0,this.rgbMinMaxLnScaleMinMax.value.set(this.splatEncoding.rgbMin??0,this.splatEncoding.rgbMax??1,this.splatEncoding.lnScaleMin??KI,this.splatEncoding.lnScaleMax??dI),this.lodOpacity.value=this.splatEncoding.lodOpacity??!1,this.shMax.value.set(this.splatEncoding.sh1Max??1,this.splatEncoding.sh2Max??1,this.splatEncoding.sh3Max??1)),this.sh1Codes=h.extra.sh1Codes??this.sh1Codes,this.sh2Codes=h.extra.sh2Codes??this.sh2Codes,this.sh3Codes=h.extra.sh3Codes??this.sh3Codes,h}const a=o.sh3,y=await g.call("loadExtSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(i=o.sh1)==null?void 0:i.slice():void 0,sh2Codes:t?(D=o.sh2)==null?void 0:D.slice():void 0,sh3Codes:t&&a?[a[0].slice(),a[1].slice()]:void 0});w();const R=y.lodSplats;return this.splatEncoding||(this.splatEncoding=TE,this.numSh=R.extra.sh3a&&R.extra.sh3b?3:R.extra.sh2?2:R.extra.sh1?1:0),this.sh1Codes=R.extra.sh1Codes??this.sh1Codes,this.sh2Codes=R.extra.sh2Codes??this.sh2Codes,this.sh3Codes=R.extra.sh3Codes??this.sh3Codes,R})}update(A,I){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.renderer;this.numSplats=A,this.dynoNumSplats.value=this.numSplats;const Q=Math.ceil(A/16384);let C=this.dynoIndices.value===eQ.emptyIndicesTexture?void 0:this.dynoIndices.value;if(C&&Q>C.image.height&&(C.dispose(),C=void 0),!C)C=new F.DataTexture(I,4096,Q,F.RGBAIntegerFormat,F.UnsignedIntType),C.internalFormat="RGBA32UI",C.needsUpdate=!0,g.initTexture(C),this.dynoIndices.value=C;else{C.image.data.set(I.subarray(0,A));const i=g.getContext();g.state.activeTexture(i.TEXTURE0),g.state.bindTexture(i.TEXTURE_2D,ia(g,C)),i.bindBuffer(i.PIXEL_UNPACK_BUFFER,null),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.texSubImage2D(i.TEXTURE_2D,0,0,0,4096,Q,i.RGBA_INTEGER,i.UNSIGNED_INT,I),g.state.bindTexture(i.TEXTURE_2D,null)}}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return this.pager?Math.min(this.numSh,this.pager.maxSh)>0:!1}getNumSh(){return this.numSh}fetchSplat({index:A,viewOrigin:I}){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.readIndex.apply({index:A,numSplats:this.dynoNumSplats,indices:this.dynoIndices}).index;return this.pager.extSplats?this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatExtDir.apply({index:g,viewOrigin:I,numSh:this.dynoNumSh}).gsplat):this.pager.readSplatExt.apply({index:g}).gsplat:this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatDir.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity,viewOrigin:I,numSh:this.dynoNumSh,shMax:this.shMax}).gsplat):this.pager.readSplat.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity}).gsplat}forEachSplat(A){if(!this.pager||!this.numSplats)return;const I=this.pager.extSplats,g=this.dynoIndices.value.image.data,Q=this.pager.packedTexture.value.image.data,C=this.pager.extTexture.value.image.data,E=[Q,C];for(let i=0;i<this.numSplats;++i){const D=g[i],o=I?yD(E,D):dE(Q,D,this.splatEncoding);A(i,o.center,o.scales,o.quaternion,o.opacity,o.color)}}}const uA=class cA{constructor(A){this.fetchPause=0,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=[],this.renderer=A.renderer,this.extSplats=A.extSplats??!1,this.pageSplats=65536,this.maxSplats=A.maxSplats??16777216,this.maxPages=Math.ceil(this.maxSplats/this.pageSplats),this.maxSplats=this.maxPages*this.pageSplats,this.maxSh=A.maxSh??3,this.curSh=0,this.autoDrive=A.autoDrive??!0,this.numFetchers=A.numFetchers??3,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=new Array(this.maxPages),this.pageFreelist=Array.from({length:this.maxPages},(I,g)=>g),this.pageLru=new Set,this.freeablePages=[],this.newUploads=[],this.readyUploads=[],this.lodTreeUpdates=[],this.fetchers=[],this.fetched=[],this.fetchPriority=[],this.packedTexture=new rI({value:this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")}),this.extTexture=new rI({value:this.extSplats?this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"):cA.emptyExtTexture}),this.sh1Texture=new rI({value:this.extSplats?cA.emptyExtSh1Texture:cA.emptySh1Texture}),this.sh2Texture=new rI({value:this.extSplats?cA.emptyExtSh2Texture:cA.emptySh2Texture}),this.sh3Texture=new rI({value:this.extSplats?cA.emptyExtSh3Texture:cA.emptySh3Texture}),this.sh3TextureB=new rI({value:cA.emptyExtSh3BTexture}),this.readIndex=DI({index:"int",numSplats:"int",indices:"usampler2D"},{index:"int"},({index:I,numSplats:g,indices:Q})=>new tA({inTypes:{index:"int",numSplats:"int",indices:"usampler2D"},outTypes:{index:"int"},inputs:{index:I,numSplats:g,indices:Q},statements:({inputs:C,outputs:E})=>GA(`
12715
+ `)}).outputs.rgba8}));return await J.renderReadback({reader:d,count:this.numSplats*U,renderer:A,readback:H})}}}checkVersions(A){if(this.mapping.length!==A.length)return{splatsUpdated:!0,mappingUpdated:!0};const I=this.mapping.some((Q,C)=>{const E=A[C];return Q.node!==E.node||Q.base!==E.base||Q.count!==E.count||Q.mappingVersion!==E.mappingVersion});return I?{splatsUpdated:!0,mappingUpdated:!0}:{splatsUpdated:this.mapping.some((Q,C)=>Q.version!==A[C].version),mappingUpdated:I}}};uI.viewCenterUniform=new pg({value:new F.Vector3});uI.viewDirUniform=new pg({value:new F.Vector3});uI.sortRadialUniform=new FC({value:!0});uI.sortCullCosUniform=new _Q({value:-1});uI.emptyTexture=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();uI.emptyTextures=[uI.emptyTexture,uI.emptyTexture];uI.programExtTemplate=new WE(EB().computeUvec4x2Vec4Template);uI.programTemplate=new WE(EB().computeUvec4Vec4Template);uI.generatorProgram=new WeakMap;uI.fullScreenQuad=new qD.FullScreenQuad(new F.RawShaderMaterial({visible:!1}));let mQ=uI;class Sy extends F.InstancedBufferGeometry{constructor(){super(),this.setAttribute("position",new F.BufferAttribute(Ry,3)),this.setIndex(new F.BufferAttribute(Fy,1))}}const Ry=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),Fy=new Uint16Array([0,1,2,0,2,3]),HB=new F.Vector3;function ky(B){const A=B.getWorldScale(HB);return(A.x+A.y+A.z)/3}const $E=class HA extends F.Mesh{constructor(A){if(!A)throw new Error("SparkRenderer options are required");if(!A.renderer)throw new Error("renderer is required in SparkRenderer options");const I=HA.makeUniforms();Object.assign(I,A.extraUniforms??{});const g=EB(),Q=A.premultipliedAlpha??!0,C=new Sy,E=new F.ShaderMaterial({glslVersion:F.GLSL3,vertexShader:A.vertexShader??g.splatVertex,fragmentShader:A.fragmentShader??g.splatFragment,uniforms:I,premultipliedAlpha:Q,transparent:A.transparent??!0,depthTest:A.depthTest??!0,depthWrite:A.depthWrite??!1,side:F.DoubleSide,allowOverride:!1});super(C,E),this.renderSize=new F.Vector2,this.lastFrame=-1,this.updateTimeoutId=-1,this.orderingTexture=null,this.maxSplats=0,this.activeSplats=0,this.accumulators=[],this.sorting=!1,this.sortDirty=!1,this.lastSortTime=0,this.sortWorker=null,this.sortTimeoutId=-1,this.sortedCenter=new F.Vector3().setScalar(Number.NEGATIVE_INFINITY),this.sortedDir=new F.Vector3().setScalar(0),this.sortCullHalfAngle=Math.PI,this.readback32=new Uint32Array(0),this.ordering32=new Uint32Array(0),this.pauseWork=!1,this.lastLodRaycastTime=0,this.lodWorker=null,this.lodMeshes=[],this.lodDirty=!1,this.lodIds=new Map,this.lodIdToSplats=new Map,this.lodInitQueue=[],this.lodInstances=new Map,this.lodUpdates=[],this.lastTraverseTime=0,this.pagerId=0,this.superXY=1,this.flushAfterGenerate=!1,this.flushAfterRead=!1,this.readPause=1,this.sortPause=0,this.sortDelay=0,this.pageSizeWarning=!1,this.material=E,this.uniforms=I,this.frustumCulled=!1,this.renderer=A.renderer,this.onDirty=A.onDirty,this.dirty=!0,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!0,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.accumExtSplats=A.accumExtSplats??!1,this.covSplats=A.covSplats??!1,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.encodeLinear=A.encodeLinear??!1,this.sortRadial=A.sortRadial??!0,this.sortCullHalfAngle=A.sortCullHalfAngle??Math.PI,this.minSortIntervalMs=A.minSortIntervalMs??0,this.enableLod=A.enableLod??!0,this.enableDriveLod=A.enableDriveLod??this.enableLod,this.enableLodFetching=A.enableLodFetching??!0,this.lodSplatCount=A.lodSplatCount,this.lodSplatScale=A.lodSplatScale??1,this.lodRenderScale=A.lodRenderScale??1,this.lodInflate=A.lodInflate??!1,this.pagedExtSplats=A.pagedExtSplats??!1;const i=lE()?fE()?96:128:256;this.maxPagedSplats=A.maxPagedSplats??i*65536,this.numLodFetchers=A.numLodFetchers??3,this.behindFoveate=A.behindFoveate??.2,this.coneFov0=A.coneFov0??90,this.coneFov=A.coneFov??120,this.coneFoveate=A.coneFoveate??.4,this.lodRaycast=A.lodRaycast===void 0?lE()?1e4:25e3:A.lodRaycast,this.lodRaycastIntervalMs=A.lodRaycastIntervalMs??500,this.clock=A.clock?Ow(A.clock):new F.Clock;const D={extSplats:this.accumExtSplats,covSplats:this.covSplats};if(this.display=new mQ(D),this.current=this.display,this.accumulators.push(new mQ(D)),this.accumulators.push(new mQ(D)),A.target){const{width:o,height:s,doubleBuffer:t,superXY:w,...a}=A.target,y=Math.max(1,Math.min(4,w??1));if(o*y>8192||s*y>8192)throw new Error("Target size too large");this.superXY=y;const r=o*y,c=s*y,h={format:F.RGBAFormat,type:F.UnsignedByteType,colorSpace:F.SRGBColorSpace,...a};this.target=new F.WebGLRenderTarget(r,c,h),t&&(this.backTarget=new F.WebGLRenderTarget(r,c,h)),this.encodeLinear=A.encodeLinear??!0}}clone(A){const I=this.constructor;return new I({renderer:this.renderer})}static makeUniforms(){return{renderSize:{value:new F.Vector2},near:{value:.1},far:{value:1e3},renderToViewQuat:{value:new F.Quaternion},renderToViewPos:{value:new F.Vector3},renderToViewScale:{value:1},renderToViewBasis:{value:new F.Matrix3},renderToViewOffset:{value:new F.Vector3},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},enable2DGS:{value:!1},lodInflate:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},encodeLinear:{value:!1},ordering:{type:"t",value:HA.emptyOrdering},enableExtSplats:{value:!1},enableCovSplats:{value:!1},extSplats:{type:"t",value:mQ.emptyTexture},extSplats2:{type:"t",value:mQ.emptyTexture},time:{value:0},deltaTime:{value:0},debugFlag:{value:!1}}}dispose(){this.target&&(this.target.dispose(),this.target=void 0),this.backTarget&&(this.backTarget.dispose(),this.backTarget=void 0),this.orderingTexture&&(this.orderingTexture.dispose(),this.orderingTexture=null);const A=new Set;A.add(this.display),A.add(this.current);for(const g of this.accumulators)A.add(g);for(const g of A)g.dispose();const I=this.lodInstances.values();this.lodInstances.clear();for(const g of I)g.texture.dispose();this.sortWorker&&(this.sortWorker.dispose(),this.sortWorker=null),this.lodWorker&&(this.lodWorker.dispose(),this.lodWorker=null),this.pager&&(this.pager.dispose(),this.pager=void 0)}setDirty(){var A;this.dirty||(this.dirty=!0,(A=this.onDirty)==null||A.call(this))}onBeforeRender(A,I,g){var Q;const C=HA.sparkOverride??this,E=A.info.render.frame,i=E!==C.lastFrame;if(C.lastFrame=E,C.target)C.renderSize.set(C.target.width,C.target.height);else{const y=A.getDrawingBufferSize(C.renderSize);if(A.xr.isPresenting&&y.x===1&&y.y===1){const r=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;r&&(y.x=r.framebufferWidth,y.y=r.framebufferHeight)}}this.uniforms.renderSize.value.copy(C.renderSize);const D=g;this.uniforms.near.value=D.near,this.uniforms.far.value=D.far;const o=this.geometry;o.instanceCount=C.activeSplats;const s=new F.Matrix4;this.display.extSplats||s.makeTranslation(C.display.viewOrigin);const a=g.matrixWorld.clone().invert().multiply(s);if(a.decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,HB),this.uniforms.renderToViewScale.value=(HB.x+HB.y+HB.z)/3,this.uniforms.renderToViewBasis.value.setFromMatrix4(a),this.uniforms.maxStdDev.value=C.maxStdDev,this.uniforms.minPixelRadius.value=C.minPixelRadius,this.uniforms.maxPixelRadius.value=C.maxPixelRadius,this.uniforms.minAlpha.value=C.minAlpha,this.uniforms.enable2DGS.value=C.enable2DGS,this.uniforms.lodInflate.value=C.lodInflate,this.uniforms.preBlurAmount.value=C.preBlurAmount,this.uniforms.blurAmount.value=C.blurAmount,this.uniforms.focalDistance.value=C.focalDistance,this.uniforms.apertureAngle.value=C.apertureAngle,this.uniforms.falloff.value=C.falloff,this.uniforms.clipXY.value=C.clipXY,this.uniforms.focalAdjustment.value=C.focalAdjustment,this.uniforms.encodeLinear.value=C.encodeLinear,this.uniforms.ordering.value=C.orderingTexture??HA.emptyOrdering,this.uniforms.enableExtSplats.value=this.display.extSplats,this.uniforms.enableCovSplats.value=this.display.covSplats,this.display.extSplats){const y=C.display.getTextures();this.uniforms.extSplats.value=y[0],this.uniforms.extSplats2.value=y[1]}else{const y=C.display.getTextures();this.uniforms.extSplats.value=y[0],this.uniforms.extSplats2.value=y[0]}if(this.uniforms.time.value=C.display.time,this.uniforms.deltaTime.value=C.display.deltaTime,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,C.autoUpdate&&i){const y=C.preUpdate&&!A.xr.isPresenting,r=A.xr.isPresenting?A.xr.getCamera().cameras[0]??A.xr.getCamera():g;y?C.updateInternal({scene:I,camera:r,autoUpdate:!0}):C.updateTimeoutId===-1&&(C.updateTimeoutId=setTimeout(()=>{C.updateTimeoutId=-1,C.updateInternal({scene:I,camera:r,autoUpdate:!0})},1))}C.dirty=!1}clearSplats(){this.activeSplats=0,this.display.numSplats=0,this.setDirty()}async update({scene:A,camera:I}){await this.updateInternal({scene:A,camera:I,autoUpdate:!1})}async updateInternal({scene:A,camera:I,autoUpdate:g}){if(this.pauseWork)return;const Q=this.renderer,C=this.time??this.clock.getElapsedTime(),E=I.getWorldPosition(new F.Vector3),i=I.getWorldDirection(new F.Vector3),D=E.distanceTo(this.sortedCenter)>.001*ky(I)||i.dot(this.sortedDir)<.999,o=this.accumulators.pop();if(!o)throw new Error("No next accumulator");if(o===this.current)throw new Error("Next accumulator is the same as the current accumulator");const{version:s,mappingVersion:t,visibleGenerators:w,generate:a}=o.prepareGenerate({renderer:Q,scene:A,time:C,camera:I,sortRadial:this.sortRadial??!0,sortCullCos:this.sortCullHalfAngle<Math.PI?Math.cos(this.sortCullHalfAngle):-1,renderSize:this.renderSize,previous:this.current,lodInstances:this.enableLod?this.lodInstances:void 0});let y=!0;const r=t!==this.display.mappingVersion,c=D||s!==this.current.version||r;g&&!c&&(y=!1),r&&this.sorting&&(y=!1),y?(a(),this.flushAfterGenerate&&Q.getContext().flush(),this.display.mappingVersion===o.mappingVersion?(this.accumulators.push(this.display),this.display=o):this.display!==this.current&&this.accumulators.push(this.current),this.current=o,this.sortDirty=!0,this.setDirty()):this.accumulators.push(o),this.enableDriveLod&&this.driveLod({visibleGenerators:w,camera:I,scene:A}),await this.driveSort()}async driveSort(){if(this.sorting||!this.sortDirty)return;this.sortTimeoutId!==-1&&(clearTimeout(this.sortTimeoutId),this.sortTimeoutId=-1);const A=performance.now();let I=this.lastSortTime?this.lastSortTime+this.minSortIntervalMs:A;if(this.sortCullHalfAngle<Math.PI&&this.current){const t=this.current.viewDirection.dot(this.sortedDir),w=Math.max(.087,(this.sortCullHalfAngle-Math.PI/3)/3);t<Math.cos(w)&&(I=A)}if(A<I){this.sortTimeoutId=setTimeout(()=>{this.sortTimeoutId=-1,this.driveSort()},I-A);return}this.sorting=!0,this.sortDirty=!1,this.readPause>0&&await new Promise(t=>setTimeout(t,this.readPause));const g=this.current;this.sortedCenter.copy(g.viewOrigin),this.sortedDir.copy(g.viewDirection);const{numSplats:Q,maxSplats:C}=g,E=Math.max(1,Math.ceil(C/16384)),i=E*16384;this.maxSplats=Math.max(this.maxSplats,i);const D=this.ordering32.length===this.maxSplats?this.ordering32:new Uint32Array(this.maxSplats);this.ordering32=new Uint32Array(0);const o=LC.ensureBuffer(C,this.readback32);this.readback32=o,await this.readbackDepth({current:g,renderer:this.renderer,numSplats:Q,readback:o}),this.sortPause>0&&await new Promise(t=>setTimeout(t,this.sortPause)),this.sortWorker||(this.sortWorker=new FD);const s=await this.sortWorker.call("sortSplats32",{numSplats:Q,readback:o,ordering:D});if(this.sortDelay>0&&await new Promise(t=>setTimeout(t,this.sortDelay)),this.readback32=s.readback,this.activeSplats=s.activeSplats,this.orderingTexture&&E>this.orderingTexture.image.height&&(this.orderingTexture.dispose(),this.orderingTexture=null),this.orderingTexture){this.ordering32=s.ordering;const t=this.renderer,w=t.getContext();if(!t.properties.has(this.orderingTexture))this.orderingTexture.needsUpdate=!0;else{const y=t.properties.get(this.orderingTexture).__webglTexture;if(!y)throw new Error("ordering texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,y),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,E,w.RGBA_INTEGER,w.UNSIGNED_INT,s.ordering),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=new F.DataTexture(s.ordering,4096,E,F.RGBAIntegerFormat,F.UnsignedIntType);t.internalFormat="RGBA32UI",t.needsUpdate=!0,this.orderingTexture=t}this.current.mappingVersion===g.mappingVersion&&this.current.mappingVersion!==this.display.mappingVersion&&(this.accumulators.push(this.display),this.display=this.current),this.lastSortTime=performance.now(),this.sorting=!1,this.setDirty(),this.driveSort()}ensureLodWorker(){return this.lodWorker||(this.lodWorker=new FD),this.lodWorker}defaultSplatTarget(){return Pw()?5e5:Tw()?75e4:mw()?1e6:fE()?15e5:25e5}driveLod({visibleGenerators:A,camera:I,scene:g}){var Q,C;const E=this.defaultSplatTarget(),D=(this.lodSplatCount??E)*this.lodSplatScale;let o=0;if(I instanceof F.PerspectiveCamera)o=2*Math.tan(.5*I.fov*Math.PI/180)/this.renderSize.y;else if(I instanceof F.OrthographicCamera){const h=(I.top-I.bottom)/I.zoom,G=(I.right-I.left)/I.zoom,R=h/Math.max(1,this.renderSize.y),N=G/Math.max(1,this.renderSize.x);o=Math.min(N,R)}o*=this.lodRenderScale;const s=new F.Vector3,t=new F.Quaternion,w=new F.Vector3;this.current.viewToWorld.decompose(s,t,w);const a=(w.x+w.y+w.z)/3;if(this.lodPosOverride&&s.copy(this.lodPosOverride),this.lodQuatOverride&&t.copy(this.lodQuatOverride).normalize(),this.lastLod){(this.lastLod.pixelScaleLimit!==o||this.lastLod.maxSplats!==D)&&(this.lodDirty=!0);const h=s.distanceTo(this.lastLod.pos),G=Math.max(0,1-h/a),R=t.dot(this.lastLod.quat),N=Math.max(0,1-(1-R)/.01);G*N<.999&&(this.lodDirty=!0)}const y=this.enableLod?A.filter(h=>{var G,R;return h instanceof Zg&&(((G=h.packedSplats)==null?void 0:G.lodSplats)||((R=h.extSplats)==null?void 0:R.lodSplats)||h.paged)&&h.enableLod!==!1}):[],r=y.some(h=>h.paged);this.lodMeshes.length!==y.length?this.lodDirty=!0:y.some((h,G)=>h!==this.lodMeshes[G].mesh||h.version>this.lodMeshes[G].version)&&(this.lodDirty=!0),this.lodMeshes=y.map(h=>({mesh:h,version:h.version+1})),this.lodInitQueue=[];const c=performance.now();for(const h of y){const G=((Q=h.packedSplats)==null?void 0:Q.lodSplats)??((C=h.extSplats)==null?void 0:C.lodSplats)??h.paged;if(G){const R=this.lodIds.get(G);R?R.lastTouched=c:this.lodInitQueue.push(G)}}this.ensureLodWorker().tryExclusive(async h=>{if(r&&!this.pager){this.pager=new eQ({renderer:this.renderer,extSplats:this.pagedExtSplats,maxSplats:this.maxPagedSplats,numFetchers:this.numLodFetchers});const{lodId:G}=await h.call("newLodTree",{capacity:this.pager.maxSplats});this.pagerId=G}if(this.pager)for(const{mesh:G}of this.lodMeshes)G.paged&&!G.paged.pager&&(G.paged.pager=this.pager);if(this.lodInitQueue.length>0){const G=this.lodInitQueue;for(this.lodInitQueue=[];G.length>0;){const R=G.shift();R&&(await this.initLodTree(h,R),this.lodDirty=!0)}}if(this.pager){const G=this.pager.consumeLodTreeUpdates();for(const{splats:R,page:N,chunk:k,numSplats:J,lodTree:U}of G){const H=this.lodIds.get(R);H&&(U&&k===0&&(H.rootPage=N),this.lodUpdates.push({lodId:H.lodId,pageBase:N*this.pager.pageSplats,chunkBase:k*this.pager.pageSplats,count:J,lodTreeData:U}))}}if(this.lodUpdates.length>0){const G=this.lodUpdates;this.lodUpdates=[],await h.call("updateLodTrees",{ranges:G}),this.lodDirty=!0}if(this.lodDirty){const G=performance.now(),R=new F.Vector3;if(this.lastLod){const N=Math.max(1,G-this.lastLod.timestamp);R.copy(s).sub(this.lastLod.pos).multiplyScalar(this.lastTraverseTime/N)}this.lastLod={pos:s,quat:t,pixelScaleLimit:o,maxSplats:D,timestamp:G},this.lodDirty=!1,await this.updateLodInstances(h,R,y,D,s,t,o),this.currentLod=this.lastLod,this.setDirty()}await this.cleanupLodTrees(h)})}async initLodTree(A,I){if(I instanceof Gg||I instanceof lg){const{lodId:g}=await A.call("initLodTree",{numSplats:I.numSplats??0,lodTree:I.extra.lodTree.slice()});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}else{const{lodId:g}=await A.call("newSharedLodTree",{lodId:this.pagerId});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}}async updateLodInstances(A,I,g,Q,C,E,i){const D=new Map,o=new F.Matrix4().compose(C,E,new F.Vector3().setScalar(1)),s=g.reduce((h,G)=>{var R,N;D.set(G.uuid,G);const k=G.matrixWorld.clone().invert().multiply(o),J=((R=G.packedSplats)==null?void 0:R.lodSplats)??((N=G.extSplats)==null?void 0:N.lodSplats)??G.paged;if(!J)return h;const U=this.lodIds.get(J);return!U||this.pager&&G.paged&&U.rootPage===void 0||(h[G.uuid]={instanceId:G.uuid,lodId:U.lodId,rootPage:U.rootPage,viewToObjectCols:k.elements,lodScale:G.lodScale,behindFoveate:G.behindFoveate??this.behindFoveate,coneFov0:G.coneFov0??this.coneFov0,coneFov:G.coneFov??this.coneFov,coneFoveate:G.coneFoveate??this.coneFoveate}),h},{}),t=performance.now(),w=await A.call("traverseLodTrees",{maxSplats:Q,pixelScaleLimit:i,lastPixelLimit:this.lastPixelLimit,instances:s});this.lastTraverseTime=performance.now()-t;const{keyIndices:a,chunks:y,pixelLimit:r}=w;this.lastPixelLimit=r;const c=Object.values(a).reduce((h,{numSplats:G})=>h+G,0);if(this.updateLodIndices(D,a),this.pager){this.pager.processUploads();const h=g.map(G=>{if(!G.paged||!this.pager)return null;const R=G.getWorldPosition(new F.Vector3);return{splats:G.paged,distance:R.distanceTo(C)}}).filter(G=>G!==null);!this.pageSizeWarning&&h.length>this.pager.maxPages&&(this.pageSizeWarning=!0,console.warn(`# paged SplatMeshes exceeds maxPages: ${h.length} > ${this.pager.maxPages}`)),h.sort((G,R)=>G.distance-R.distance),this.pager.fetchPriority=h.map(({splats:G})=>({splats:G,chunk:0}));for(const[G,R]of y){const N=this.lodIdToSplats.get(G);N instanceof qB&&R!==0&&this.pager.fetchPriority.push({splats:N,chunk:R})}this.pager.autoDrive=this.enableLodFetching,this.enableLodFetching&&this.pager.driveFetchers()}if(this.lodRaycast&&performance.now()-this.lastLodRaycastTime>=this.lodRaycastIntervalMs){this.lastLodRaycastTime=performance.now();const h=performance.now(),G=await A.call("traverseLodTrees",{maxSplats:Math.min(this.lodRaycast,Math.round(c*.1)),pixelScaleLimit:i,instances:s});performance.now()-h;const{keyIndices:R}=G;Object.values(R).reduce((N,{numSplats:k})=>N+k,0);for(const[N,k]of Object.entries(R)){const J=D.get(N);J.raycastIndices=k}}}async cleanupLodTrees(A){const g=performance.now();let Q=null;for(const[C,E]of this.lodIds.entries())(Q==null||E.lastTouched<Q.lastTouched)&&(Q={splats:C,lastTouched:E.lastTouched,lodId:E.lodId});if(!(!Q||Q.lastTouched>g-3e3)){this.lodIds.delete(Q.splats),this.lodIdToSplats.delete(Q.lodId);for(const[C,E]of this.lodInstances.entries())E.lodId===Q.lodId&&(E.texture.dispose(),this.lodInstances.delete(C));await A.call("disposeLodTree",{lodId:Q.lodId})}}updateLodIndices(A,I){for(const[g,Q]of Object.entries(I)){const{lodId:C,numSplats:E,indices:i}=Q,D=A.get(g);if(D.paged)D.paged.update(E,i);else{let o=this.lodInstances.get(D);o&&i.length>o.indices.length&&(o.texture.dispose(),o=void 0);const s=Math.ceil(i.length/16384);if(o){o.numSplats=E;const t=this.renderer,w=t.getContext();if(t.properties.has(o.texture)){const y=t.properties.get(o.texture).__webglTexture;if(!y)throw new Error("lodIndices texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,y),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,s,w.RGBA_INTEGER,w.UNSIGNED_INT,i),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=s*16384;if(i.length!==t)throw new Error("Indices length != capacity");const w=new F.DataTexture(i,4096,s,F.RGBAIntegerFormat,F.UnsignedIntType);w.internalFormat="RGBA32UI",w.needsUpdate=!0,o={lodId:C,numSplats:E,indices:i,texture:w},this.lodInstances.set(D,o)}}D.updateMappingVersion()}}async readbackDepth({current:A,renderer:I,numSplats:g,readback:Q}){if(!I)throw new Error("No renderer");if(!A.target)throw new Error("No target");const C=Math.ceil(g/_)*_;if(Q.byteLength<C*4)throw new Error(`Readback buffer too small: ${Q.byteLength} < ${C*4}`);const E=new Uint8Array(Q.buffer),i=this.saveRenderState(I),D=_*sg;let o=0;const s=[];for(;o<g;){const t=Math.floor(o/D),w=t*D,a=Math.min(sg,Math.ceil((g-w)/_)),y=_*a*4,r=E.subarray(w*4,w*4+y);I.setRenderTarget(A.target,t);const c=I.readRenderTargetPixelsAsync(A.target,0,0,_,a,r,void 0,A.extSplats?2:1);s.push(c),this.flushAfterRead&&I.getContext().flush(),o+=_*a}return this.resetRenderState(I,i),Promise.all(s).then(()=>Q)}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}render(A,I){try{HA.sparkOverride=this,this.renderer.render(A,I)}finally{HA.sparkOverride=void 0}}renderTarget({scene:A,camera:I}){const g=this.backTarget??this.target;if(!g)throw new Error("No target");const Q=this.renderer.getRenderTarget();try{this.renderer.setRenderTarget(g),HA.sparkOverride=this,this.renderer.render(A,I)}finally{HA.sparkOverride=void 0,this.renderer.setRenderTarget(Q)}return g!==this.target&&([this.target,this.backTarget]=[this.backTarget,this.target]),g}async readTarget(){if(!this.target)throw new Error("Must initialize with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g));const Q=this.superPixels;await this.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,Q);const{superXY:C}=this;if(C===1)return Q;const E=A/C,i=I/C,D=E*i*4;(!this.targetPixels||this.targetPixels.length<D)&&(this.targetPixels=new Uint8Array(D));const o=this.targetPixels,s=C*C;for(let t=0;t<i;t++){const w=t*E;for(let a=0;a<E;a++){const y=a*C;let r=0,c=0,h=0,G=0;for(let N=0;N<C;N++){const k=(t*C+N)*A;for(let J=0;J<C;J++){const U=(k+y+J)*4;r+=Q[U],c+=Q[U+1],h+=Q[U+2],G+=Q[U+3]}}const R=(w+a)*4;o[R]=r/s,o[R+1]=c/s,o[R+2]=h/s,o[R+3]=G/s}}return o}async renderReadTarget({scene:A,camera:I}){return this.renderTarget({scene:A,camera:I}),this.readTarget()}async renderCubeMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:E=[],update:i=!0,filter:D=!1}){if(!HA.cubeRender||HA.cubeRender.target.width!==g||HA.cubeRender.near!==Q||HA.cubeRender.far!==C){HA.cubeRender&&HA.cubeRender.target.dispose();const w=new F.WebGLCubeRenderTarget(g,{format:F.RGBAFormat,type:F.UnsignedByteType,generateMipmaps:D,minFilter:D?F.LinearMipMapLinearFilter:F.LinearFilter,magFilter:F.LinearFilter,colorSpace:D?F.LinearSRGBColorSpace:F.SRGBColorSpace}),a=new F.CubeCamera(Q,C,w);HA.cubeRender={target:w,cubeCamera:a,near:Q,far:C}}const{target:o,cubeCamera:s}=HA.cubeRender;s.position.copy(I);const t=new Map;for(const w of E)t.set(w,w.visible),w.visible=!1;if(i){const w=new F.Camera;w.position.copy(I),await this.update({scene:A,camera:w})}try{HA.sparkOverride=this,s.update(this.renderer,A)}finally{HA.sparkOverride=void 0}for(const[w,a]of t.entries())w.visible=a;return o.texture}async readCubeTargets(){if(!HA.cubeRender)throw new Error("No cube render");const A=HA.cubeRender.target.texture,I=[],g=[];for(let Q=0;Q<A.images.length;++Q){const{width:C,height:E}=A.images[Q],i=C*E*4,D=new Uint8Array(i);g.push(D);const o=this.renderer.readRenderTargetPixelsAsync(HA.cubeRender.target,0,0,C,E,D,Q);I.push(o)}return await Promise.all(I),g}async renderEnvMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:E=[],update:i=!0}){var D;const o=await this.renderCubeMap({scene:A,worldCenter:I,size:g,near:Q,far:C,hideObjects:E,update:i,filter:!0});return HA.pmrem||(HA.pmrem=new F.PMREMGenerator(this.renderer)),(D=HA.pmrem)==null?void 0:D.fromCubemap(o).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof F.Mesh)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof F.MeshStandardMaterial&&(Q.envMap=I);else g.material instanceof F.MeshStandardMaterial&&(g.material.envMap=I)})}async getLodTreeLevel(A,I,g=!1){var Q,C;const E=this.lodInstances.get(A);if(!E)return null;const i=await this.ensureLodWorker().exclusive(async D=>await D.call("getLodTreeLevel",{lodId:E.lodId,level:I}));if((Q=A.packedSplats)!=null&&Q.lodSplats){const D=A.packedSplats.lodSplats.extractSplats(i.indices,g);return new Zg({packedSplats:D})}if((C=A.extSplats)!=null&&C.lodSplats){const D=A.extSplats.lodSplats.extractSplats(i.indices,g);return new Zg({extSplats:D})}throw new Error("Only LoD-enabled PackedSplats and ExtSplats are supported")}get premultipliedAlpha(){return this.material.premultipliedAlpha}set premultipliedAlpha(A){this.material.premultipliedAlpha!==A&&(this.material.premultipliedAlpha=A,this.material.needsUpdate=!0)}};$E.emptyOrdering=(()=>{const A=new Uint32Array(16384),I=new F.DataTexture(A,4096,1);return I.format=F.RGBAIntegerFormat,I.type=F.UnsignedIntType,I.internalFormat="RGBA32UI",I.needsUpdate=!0,I})();$E.cubeRender=null;$E.pmrem=null;let My=$E;class qB{constructor(A){var I;if(this.shCodesSent=new WeakMap,this.pager=A.pager,this.rootUrl=A.rootUrl??"",this.requestHeader=A.requestHeader,this.withCredentials=A.withCredentials,this.numSh=0,this.maxSh=((I=A.pager)==null?void 0:I.maxSh)??3,this.numSplats=0,this.dynoNumSplats=new xg({value:0}),this.dynoIndices=new Ba({value:eQ.emptyIndicesTexture}),this.rgbMinMaxLnScaleMinMax=new UC({value:new F.Vector4(0,1,KI,dI)}),this.lodOpacity=new FC({value:!1}),this.dynoNumSh=new xg({value:0}),this.shMax=new pg({value:new F.Vector3}),this.fileBytes=A.fileBytes,this.fileType=A.fileType,!this.fileType&&this.fileBytes&&(this.fileType=ca(this.fileBytes)),!this.fileType&&this.rootUrl&&(this.fileType=Ly(this.rootUrl)),!this.fileType)throw new Error("Unable to determine file type");this.fileType===HI.RAD&&(this.radMetaPromise=this.getRadMeta())}dispose(){this.dynoIndices.value!==eQ.emptyIndicesTexture&&(this.dynoIndices.value.dispose(),this.dynoIndices.value=eQ.emptyIndicesTexture)}setMaxSh(A){this.maxSh=A}getRadMeta(){return this.radMetaPromise?this.radMetaPromise:(this.radMetaPromise=(async()=>{if(await Ny,this.fileBytes){const A=ls(this.fileBytes.slice(0,1048576));if(A)return A;throw new Error("Failed to decode RAD header")}if(!this.rootUrl)throw new Error("No url or fileBytes provided");for(const A of[65536,256*1024,1024*1024]){const I=await bi({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:0,bytes:A}),g=ls(I);if(g)return g}throw new Error("Failed to decode RAD header")})().then(A=>A),this.radMetaPromise.catch(A=>{console.error(A)}),this.radMetaPromise)}chunkUrl(A){return this.rootUrl.replace(/-lod-0\./,`-lod-${A}.`)}async fetchDecodeChunk(A){let I;if(this.fileType===HI.RAD){const{meta:g,chunksStart:Q}=await this.getRadMeta();if(A<0||A>=g.chunks.length)throw new Error(`Chunk index out of range: ${A} (max: ${g.chunks.length-1})`);let{offset:C,bytes:E,filename:i}=g.chunks[A];if(i){if(this.fileBytes)throw new Error("Chunked RAD file not supported with fileBytes");const D=new URL(this.rootUrl,window.location.href).toString(),o=new URL(i,D).toString();I=await bi({url:o,requestHeader:this.requestHeader,withCredentials:this.withCredentials})}else if(C+=Q,this.fileBytes){if(C<0||C+E>this.fileBytes.length)throw new Error(`Invalid chunk offset or bytes: ${C} + ${E} > ${this.fileBytes.length}`);I=this.fileBytes.slice(C,C+E)}else if(this.rootUrl)I=await bi({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:C,bytes:E});else throw new Error("No url or fileBytes provided")}else if(!this.fileBytes)if(this.rootUrl){const g=this.chunkUrl(A),Q=new Request(g,{headers:this.requestHeader?new Headers(this.requestHeader):void 0,credentials:this.withCredentials?"include":"same-origin"}),C=await fetch(Q);if(!C.ok||!C.body)throw new Error(`Failed to fetch "${g}": ${C.status} ${C.statusText}`);I=new Uint8Array(await C.arrayBuffer())}else throw new Error("No url or fileBytes provided");return await VE.withWorker(async g=>{var Q,C,E,i,D;if(!this.pager)throw new Error("PagedSplats.pager not set");const o={sh1:this.sh1Codes,sh2:this.sh2Codes,sh3:this.sh3Codes},s=this.shCodesSent.get(g),t=!s||s.sh1!==o.sh1||s.sh2!==o.sh2||s.sh3!==o.sh3,w=()=>{t&&this.shCodesSent.set(g,o)};if(!this.pager.extSplats){const c=await g.call("loadPackedSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(Q=o.sh1)==null?void 0:Q.slice():void 0,sh2Codes:t?(C=o.sh2)==null?void 0:C.slice():void 0,sh3Codes:t?(E=o.sh3)==null?void 0:E.slice():void 0});w();const h=c.lodSplats;return this.splatEncoding||(this.splatEncoding=h.splatEncoding,this.numSh=h.extra.sh3?3:h.extra.sh2?2:h.extra.sh1?1:0,this.rgbMinMaxLnScaleMinMax.value.set(this.splatEncoding.rgbMin??0,this.splatEncoding.rgbMax??1,this.splatEncoding.lnScaleMin??KI,this.splatEncoding.lnScaleMax??dI),this.lodOpacity.value=this.splatEncoding.lodOpacity??!1,this.shMax.value.set(this.splatEncoding.sh1Max??1,this.splatEncoding.sh2Max??1,this.splatEncoding.sh3Max??1)),this.sh1Codes=h.extra.sh1Codes??this.sh1Codes,this.sh2Codes=h.extra.sh2Codes??this.sh2Codes,this.sh3Codes=h.extra.sh3Codes??this.sh3Codes,h}const a=o.sh3,y=await g.call("loadExtSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(i=o.sh1)==null?void 0:i.slice():void 0,sh2Codes:t?(D=o.sh2)==null?void 0:D.slice():void 0,sh3Codes:t&&a?[a[0].slice(),a[1].slice()]:void 0});w();const r=y.lodSplats;return this.splatEncoding||(this.splatEncoding=OE,this.numSh=r.extra.sh3a&&r.extra.sh3b?3:r.extra.sh2?2:r.extra.sh1?1:0),this.sh1Codes=r.extra.sh1Codes??this.sh1Codes,this.sh2Codes=r.extra.sh2Codes??this.sh2Codes,this.sh3Codes=r.extra.sh3Codes??this.sh3Codes,r})}update(A,I){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.renderer;this.numSplats=A,this.dynoNumSplats.value=this.numSplats;const Q=Math.ceil(A/16384);let C=this.dynoIndices.value===eQ.emptyIndicesTexture?void 0:this.dynoIndices.value;if(C&&Q>C.image.height&&(C.dispose(),C=void 0),!C)C=new F.DataTexture(I,4096,Q,F.RGBAIntegerFormat,F.UnsignedIntType),C.internalFormat="RGBA32UI",C.needsUpdate=!0,g.initTexture(C),this.dynoIndices.value=C;else{C.image.data.set(I.subarray(0,A));const i=g.getContext();g.state.activeTexture(i.TEXTURE0),g.state.bindTexture(i.TEXTURE_2D,na(g,C)),i.bindBuffer(i.PIXEL_UNPACK_BUFFER,null),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.texSubImage2D(i.TEXTURE_2D,0,0,0,4096,Q,i.RGBA_INTEGER,i.UNSIGNED_INT,I),g.state.bindTexture(i.TEXTURE_2D,null)}}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return this.pager?Math.min(this.numSh,this.pager.maxSh)>0:!1}getNumSh(){return this.numSh}fetchSplat({index:A,viewOrigin:I}){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.readIndex.apply({index:A,numSplats:this.dynoNumSplats,indices:this.dynoIndices}).index;return this.pager.extSplats?this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatExtDir.apply({index:g,viewOrigin:I,numSh:this.dynoNumSh}).gsplat):this.pager.readSplatExt.apply({index:g}).gsplat:this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatDir.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity,viewOrigin:I,numSh:this.dynoNumSh,shMax:this.shMax}).gsplat):this.pager.readSplat.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity}).gsplat}forEachSplat(A){if(!this.pager||!this.numSplats)return;const I=this.pager.extSplats,g=this.dynoIndices.value.image.data,Q=this.pager.packedTexture.value.image.data,C=this.pager.extTexture.value.image.data,E=[Q,C];for(let i=0;i<this.numSplats;++i){const D=g[i],o=I?GD(E,D):dE(Q,D,this.splatEncoding);A(i,o.center,o.scales,o.quaternion,o.opacity,o.color)}}}const uA=class nA{constructor(A){this.fetchPause=0,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=[],this.renderer=A.renderer,this.extSplats=A.extSplats??!1,this.pageSplats=65536,this.maxSplats=A.maxSplats??16777216,this.maxPages=Math.ceil(this.maxSplats/this.pageSplats),this.maxSplats=this.maxPages*this.pageSplats,this.maxSh=A.maxSh??3,this.curSh=0,this.autoDrive=A.autoDrive??!0,this.numFetchers=A.numFetchers??3,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=new Array(this.maxPages),this.pageFreelist=Array.from({length:this.maxPages},(I,g)=>g),this.pageLru=new Set,this.freeablePages=[],this.newUploads=[],this.readyUploads=[],this.lodTreeUpdates=[],this.fetchers=[],this.fetched=[],this.fetchPriority=[],this.packedTexture=new rI({value:this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")}),this.extTexture=new rI({value:this.extSplats?this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"):nA.emptyExtTexture}),this.sh1Texture=new rI({value:this.extSplats?nA.emptyExtSh1Texture:nA.emptySh1Texture}),this.sh2Texture=new rI({value:this.extSplats?nA.emptyExtSh2Texture:nA.emptySh2Texture}),this.sh3Texture=new rI({value:this.extSplats?nA.emptyExtSh3Texture:nA.emptySh3Texture}),this.sh3TextureB=new rI({value:nA.emptyExtSh3BTexture}),this.readIndex=DI({index:"int",numSplats:"int",indices:"usampler2D"},{index:"int"},({index:I,numSplats:g,indices:Q})=>new tA({inTypes:{index:"int",numSplats:"int",indices:"usampler2D"},outTypes:{index:"int"},inputs:{index:I,numSplats:g,indices:Q},statements:({inputs:C,outputs:E})=>GA(`
12716
12716
  if (${C.index} >= ${C.numSplats}) {
12717
12717
  return;
12718
12718
  }
@@ -12735,7 +12735,7 @@ void main() {\r
12735
12735
  if (${C.lodOpacity}) {
12736
12736
  ${E.gsplat}.rgba.a *= 2.0;
12737
12737
  }
12738
- `)}).outputs),this.readSplatDir=DI({index:"int",rgbMinMaxLnScaleMinMax:"vec4",lodOpacity:"bool",viewOrigin:"vec3",numSh:"int",shMax:"vec3"},{gsplat:yA},({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q,viewOrigin:C,numSh:E,shMax:i})=>{if(!I||!g||!Q||!C||!E||!i)throw new Error("index and viewOrigin are required");let D=this.readSplat.apply({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q}).gsplat;const o=XI(D).outputs.center,s=pE($Q(o,C));let t=oa({coord:Ns(I),viewDir:s,numSh:E,sh1Texture:this.sh1Texture,sh2Texture:this.sh2Texture,sh3Texture:this.sh3Texture,shMax:i}).rgb;return t=rQ(t,XI(D).outputs.rgb),D=zQ({gsplat:D,rgb:t}),{gsplat:D}}),this.readSplatExt=DI({index:"int"},{gsplat:yA},({index:I})=>new tA({inTypes:{index:"int",extTexture1:"usampler2DArray",extTexture2:"usampler2DArray"},outTypes:{gsplat:yA},inputs:{index:I,extTexture1:this.packedTexture,extTexture2:this.extTexture},globals:()=>[lI],statements:({inputs:g,outputs:Q})=>GA(`
12738
+ `)}).outputs),this.readSplatDir=DI({index:"int",rgbMinMaxLnScaleMinMax:"vec4",lodOpacity:"bool",viewOrigin:"vec3",numSh:"int",shMax:"vec3"},{gsplat:yA},({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q,viewOrigin:C,numSh:E,shMax:i})=>{if(!I||!g||!Q||!C||!E||!i)throw new Error("index and viewOrigin are required");let D=this.readSplat.apply({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q}).gsplat;const o=XI(D).outputs.center,s=pE($Q(o,C));let t=ha({coord:Hs(I),viewDir:s,numSh:E,sh1Texture:this.sh1Texture,sh2Texture:this.sh2Texture,sh3Texture:this.sh3Texture,shMax:i}).rgb;return t=rQ(t,XI(D).outputs.rgb),D=zQ({gsplat:D,rgb:t}),{gsplat:D}}),this.readSplatExt=DI({index:"int"},{gsplat:yA},({index:I})=>new tA({inTypes:{index:"int",extTexture1:"usampler2DArray",extTexture2:"usampler2DArray"},outTypes:{gsplat:yA},inputs:{index:I,extTexture1:this.packedTexture,extTexture2:this.extTexture},globals:()=>[lI],statements:({inputs:g,outputs:Q})=>GA(`
12739
12739
  int index = ${g.index};
12740
12740
  ivec3 splatCoord = ivec3(index & 255, (index >> 8) & 255, index >> 16);
12741
12741
  uvec4 ext1 = texelFetch(${g.extTexture1}, splatCoord, 0);
@@ -12752,10 +12752,10 @@ void main() {\r
12752
12752
 
12753
12753
  ${Q.gsplat}.index = index;
12754
12754
  ${Q.gsplat}.flags = GSPLAT_FLAG_ACTIVE;
12755
- `)}).outputs),this.readSplatExtDir=DI({index:"int",viewOrigin:"vec3",numSh:"int"},{gsplat:yA},({index:I,viewOrigin:g,numSh:Q})=>{if(!I||!g||!Q)throw new Error("index and viewOrigin are required");let C=this.readSplatExt.apply({index:I}).gsplat;const E=XI(C).outputs.center,i=pE($Q(E,g));let D=_w({coord:Ns(I),viewDir:i,numSh:Q,sh1Texture:this.sh1Texture,sh2Texture:this.sh2Texture,sh3TextureA:this.sh3Texture,sh3TextureB:this.sh3TextureB}).rgb;return D=rQ(D,XI(C).outputs.rgb),C=zQ({gsplat:C,rgb:D}),{gsplat:C}})}dispose(){this.autoDrive=!1,this.numFetchers=0,this.packedTexture.value.dispose(),this.packedTexture.value.source.data=null,this.extTexture.value!==cA.emptyExtTexture&&(this.extTexture.value.dispose(),this.extTexture.value.source.data=null),this.extSplats?(this.sh1Texture.value!==cA.emptyExtSh1Texture&&(this.sh1Texture.value.dispose(),this.sh1Texture.value.source.data=null),this.sh2Texture.value!==cA.emptyExtSh2Texture&&(this.sh2Texture.value.dispose(),this.sh2Texture.value.source.data=null),this.sh3Texture.value!==cA.emptyExtSh3Texture&&(this.sh3Texture.value.dispose(),this.sh3Texture.value.source.data=null),this.sh3TextureB.value!==cA.emptyExtSh3BTexture&&(this.sh3TextureB.value.dispose(),this.sh3TextureB.value.source.data=null)):(this.sh1Texture.value!==cA.emptySh1Texture&&(this.sh1Texture.value.dispose(),this.sh1Texture.value.source.data=null),this.sh2Texture.value!==cA.emptySh2Texture&&(this.sh2Texture.value.dispose(),this.sh2Texture.value.source.data=null),this.sh3Texture.value!==cA.emptySh3Texture&&(this.sh3Texture.value.dispose(),this.sh3Texture.value.source.data=null))}ensureShTextures(A){this.curSh=Math.max(this.curSh,A),this.extSplats?this.curSh>=1&&this.sh1Texture.value===cA.emptyExtSh1Texture&&(this.sh1Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")):this.curSh>=1&&this.sh1Texture.value===cA.emptySh1Texture&&(this.sh1Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*2),256,256,this.maxPages,F.RGIntegerFormat,F.UnsignedIntType,"RG32UI")),this.curSh>=2&&this.sh2Texture.value===(this.extSplats?cA.emptyExtSh2Texture:cA.emptySh2Texture)&&(this.sh2Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")),this.extSplats?this.curSh>=3&&(this.sh3Texture.value===cA.emptyExtSh3Texture&&(this.sh3Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")),this.sh3TextureB.value===cA.emptyExtSh3BTexture&&(this.sh3TextureB.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"))):this.curSh>=3&&this.sh3Texture.value===cA.emptySh3Texture&&(this.sh3Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"))}allocatePage(){return this.pageFreelist.shift()}freePage(A){this.pageFreelist.push(A)}getSplatsChunk(A,I){const g=this.splatsChunkToPage.get(A);if(g)return g[I]}insertSplatsChunkPage(A,I,g,Q){this.splatsChunkToPage.has(A)||this.splatsChunkToPage.set(A,[]);const C=this.splatsChunkToPage.get(A);if(!C)throw new Error("impossible");I>=C.length&&(C.length=I+1);const E={page:g,lru:Q};return C[I]=E,this.pageLru.add(E),this.pageToSplatsChunk[g]={splats:A,chunk:I,time:performance.now()},this.pageToSplatsChunk[g]}removeSplatsChunkPage(A,I,g){const Q=this.splatsChunkToPage.get(A);if(!Q)throw new Error("impossible");const C=Q[I];if(!C)throw new Error(`pageLru not found for splats: ${A}, chunk: ${I}, page: ${g}`);for(this.pageLru.delete(C),Q[I]=void 0;Q.length>0&&Q[Q.length-1]===void 0;)Q.pop();for(Q.length===0&&this.splatsChunkToPage.delete(A),this.pageToSplatsChunk[g]=void 0;this.pageToSplatsChunk.length>0&&this.pageToSplatsChunk[this.pageToSplatsChunk.length-1]===void 0;)this.pageToSplatsChunk.pop()}uploadPage(A,I,g,Q){const C=A*this.pageSplats;this.packedTexture.value.image.data.subarray(C*4,C*4+I.length).set(I),this.packedTexture.value.addLayerUpdate(A),this.packedTexture.value.needsUpdate=!0,Q&&(this.extTexture.value.image.data.subarray(C*4,C*4+Q.length).set(Q),this.extTexture.value.addLayerUpdate(A),this.extTexture.value.needsUpdate=!0);const i=this.extSplats?g.sh3a&&g.sh3b?3:g.sh2?2:g.sh1?1:0:g.sh3?3:g.sh2?2:g.sh1?1:0;if(this.ensureShTextures(i),this.extSplats){if(this.sh1Texture.value!==cA.emptyExtSh1Texture&&g.sh1){const D=g.sh1;this.sh1Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh1Texture.value.addLayerUpdate(A),this.sh1Texture.value.needsUpdate=!0}}else if(this.sh1Texture.value!==cA.emptySh1Texture&&g.sh1){const D=g.sh1;this.sh1Texture.value.image.data.subarray(C*2,C*2+D.length).set(D),this.sh1Texture.value.addLayerUpdate(A),this.sh1Texture.value.needsUpdate=!0}if(this.sh2Texture.value!==cA.emptySh2Texture&&g.sh2){const D=g.sh2;this.sh2Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh2Texture.value.addLayerUpdate(A),this.sh2Texture.value.needsUpdate=!0}if(this.extSplats){if(this.sh3Texture.value!==cA.emptyExtSh3Texture&&g.sh3a){const D=g.sh3a;this.sh3Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh3Texture.value.addLayerUpdate(A),this.sh3Texture.value.needsUpdate=!0}if(this.sh3TextureB.value!==cA.emptyExtSh3BTexture&&g.sh3b){const D=g.sh3b;this.sh3TextureB.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh3TextureB.value.addLayerUpdate(A),this.sh3TextureB.value.needsUpdate=!0}}else if(this.sh3Texture.value!==cA.emptySh3Texture&&g.sh3){const D=g.sh3;this.sh3Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh3Texture.value.addLayerUpdate(A),this.sh3Texture.value.needsUpdate=!0}}getGlTexture(A){return ia(this.renderer,A)}newUint32ArrayTexture(A,I,g,Q,C,E,i){const D=new F.DataArrayTexture(A,I,g,Q);return D.format=C,D.type=E,D.internalFormat=i,D.needsUpdate=!0,this.renderer.initTexture(D),D}driveFetchers(){const A=[],I=[];let g=0;for(const{splats:E,chunk:i}of this.fetchPriority){const D=this.getSplatsChunk(E,i);if(D){g>=this.maxPages?I.push(D):A.push(D),g+=1;continue}if(this.fetched.some(({splats:o,chunk:s})=>E===o&&i===s)||this.fetchers.some(({splats:o,chunk:s})=>E===o&&i===s)){g+=1;continue}if(g<this.maxPages&&this.fetchers.length<this.numFetchers){g+=1;const o=E.fetchDecodeChunk(i).then(async s=>{this.fetched.push({splats:E,chunk:i,data:s}),this.fetchPause>0&&await new Promise(t=>setTimeout(t,this.fetchPause))},async s=>{console.warn(s);const t=250+500*Math.random();await new Promise(w=>setTimeout(w,t))}).finally(()=>{this.fetchers=this.fetchers.filter(({splats:s,chunk:t})=>E!==s||i!==t),this.processFetched()});this.fetchers.push({splats:E,chunk:i,promise:o}),o.then(s=>{this.autoDrive&&this.driveFetchers()})}}const Q=performance.now();for(const E of I.reverse())E.lru=Q,this.pageLru.delete(E),this.pageLru.add(E);const C=new Set(this.pageLru);for(const E of A.reverse())C.delete(E),E.lru=Q,this.pageLru.delete(E),this.pageLru.add(E);this.freeablePages=Array.from(C).map(({page:E})=>E)}allocateFreeable(){const A=this.freeablePages.shift();if(A===void 0)return;const I=this.pageToSplatsChunk[A];if(!I)throw new Error(`splatsChunk not found for page: ${A}`);const{splats:g,chunk:Q}=I;return this.removeSplatsChunkPage(g,Q,A),this.lodTreeUpdates.push({splats:g,page:A,chunk:Q,numSplats:this.pageSplats}),A}processFetched(){const A=performance.now();for(;;){const I=this.fetched.shift();if(!I)break;const{splats:g,chunk:Q,data:C}=I;let E=this.allocatePage();if(E===void 0&&(E=this.allocateFreeable(),E===void 0))return;this.insertSplatsChunkPage(g,Q,E,A);const{numSplats:i,extra:D}=C;if(this.lodTreeUpdates.push({splats:g,page:E,chunk:Q,numSplats:i,lodTree:D.lodTree}),this.extSplats){const o=C.extArrays,s=o[0],t=o[1];this.newUploads.push({page:E,numSplats:i,packedArray:s,extArray:t,extra:D})}else{const o=C.packedArray;this.newUploads.push({page:E,numSplats:i,packedArray:o,extra:D})}}}processUploads(){for(;;){const A=this.readyUploads.shift();if(!A)break;const{page:I,numSplats:g,packedArray:Q,extArray:C,extra:E}=A;this.uploadPage(I,Q,E,C)}}consumeLodTreeUpdates(){const A=this.lodTreeUpdates;return this.lodTreeUpdates=[],this.readyUploads.push(...this.newUploads),this.newUploads=[],A}};uA.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();uA.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*2),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RG32UI",C.needsUpdate=!0,C})();uA.emptyIndicesTexture=(()=>{const B=new Uint32Array(16384),A=new F.DataTexture(B,4096,1);return A.format=F.RGBAIntegerFormat,A.type=F.UnsignedIntType,A.internalFormat="RGBA32UI",A.needsUpdate=!0,A})();uA.emptyPackedTexture=uA.emptyUint32x4;uA.emptyExtTexture=uA.emptyUint32x4;uA.emptySh1Texture=uA.emptyUint32x2;uA.emptySh2Texture=uA.emptyUint32x4;uA.emptySh3Texture=uA.emptyUint32x4;uA.emptyExtSh1Texture=uA.emptyUint32x4;uA.emptyExtSh2Texture=uA.emptyUint32x4;uA.emptyExtSh3Texture=uA.emptyUint32x4;uA.emptyExtSh3BTexture=uA.emptyUint32x4;let eQ=uA;function ia(B,A){if(!B.properties.has(A))throw new Error("texture not found");const g=B.properties.get(A).__webglTexture;if(!g)throw new Error("texture not found");return g}const ry=$w();async function qi({url:B,requestHeader:A,withCredentials:I,offset:g,bytes:Q}){const C=new Request(B,{headers:A?new Headers(A):void 0,credentials:I?"include":"same-origin"});g!==void 0&&Q!==void 0&&C.headers.set("Range",`bytes=${g}-${g+Q-1}`);const E=await fetch(C);if(!E.ok||!E.body)throw new Error(`Failed to fetch "${B}": ${E.status} ${E.statusText}`);return new Uint8Array(await E.arrayBuffer())}class Sy{constructor(){this.fetchDyno=new tA({inTypes:{},outTypes:{gsplat:yA},globals:()=>[lI],statements:({outputs:A})=>GA(`
12755
+ `)}).outputs),this.readSplatExtDir=DI({index:"int",viewOrigin:"vec3",numSh:"int"},{gsplat:yA},({index:I,viewOrigin:g,numSh:Q})=>{if(!I||!g||!Q)throw new Error("index and viewOrigin are required");let C=this.readSplatExt.apply({index:I}).gsplat;const E=XI(C).outputs.center,i=pE($Q(E,g));let D=Ea({coord:Hs(I),viewDir:i,numSh:Q,sh1Texture:this.sh1Texture,sh2Texture:this.sh2Texture,sh3TextureA:this.sh3Texture,sh3TextureB:this.sh3TextureB}).rgb;return D=rQ(D,XI(C).outputs.rgb),C=zQ({gsplat:C,rgb:D}),{gsplat:C}})}dispose(){this.autoDrive=!1,this.numFetchers=0,this.packedTexture.value.dispose(),this.packedTexture.value.source.data=null,this.extTexture.value!==nA.emptyExtTexture&&(this.extTexture.value.dispose(),this.extTexture.value.source.data=null),this.extSplats?(this.sh1Texture.value!==nA.emptyExtSh1Texture&&(this.sh1Texture.value.dispose(),this.sh1Texture.value.source.data=null),this.sh2Texture.value!==nA.emptyExtSh2Texture&&(this.sh2Texture.value.dispose(),this.sh2Texture.value.source.data=null),this.sh3Texture.value!==nA.emptyExtSh3Texture&&(this.sh3Texture.value.dispose(),this.sh3Texture.value.source.data=null),this.sh3TextureB.value!==nA.emptyExtSh3BTexture&&(this.sh3TextureB.value.dispose(),this.sh3TextureB.value.source.data=null)):(this.sh1Texture.value!==nA.emptySh1Texture&&(this.sh1Texture.value.dispose(),this.sh1Texture.value.source.data=null),this.sh2Texture.value!==nA.emptySh2Texture&&(this.sh2Texture.value.dispose(),this.sh2Texture.value.source.data=null),this.sh3Texture.value!==nA.emptySh3Texture&&(this.sh3Texture.value.dispose(),this.sh3Texture.value.source.data=null))}ensureShTextures(A){this.curSh=Math.max(this.curSh,A),this.extSplats?this.curSh>=1&&this.sh1Texture.value===nA.emptyExtSh1Texture&&(this.sh1Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")):this.curSh>=1&&this.sh1Texture.value===nA.emptySh1Texture&&(this.sh1Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*2),256,256,this.maxPages,F.RGIntegerFormat,F.UnsignedIntType,"RG32UI")),this.curSh>=2&&this.sh2Texture.value===(this.extSplats?nA.emptyExtSh2Texture:nA.emptySh2Texture)&&(this.sh2Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")),this.extSplats?this.curSh>=3&&(this.sh3Texture.value===nA.emptyExtSh3Texture&&(this.sh3Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI")),this.sh3TextureB.value===nA.emptyExtSh3BTexture&&(this.sh3TextureB.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"))):this.curSh>=3&&this.sh3Texture.value===nA.emptySh3Texture&&(this.sh3Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,F.RGBAIntegerFormat,F.UnsignedIntType,"RGBA32UI"))}allocatePage(){return this.pageFreelist.shift()}freePage(A){this.pageFreelist.push(A)}getSplatsChunk(A,I){const g=this.splatsChunkToPage.get(A);if(g)return g[I]}insertSplatsChunkPage(A,I,g,Q){this.splatsChunkToPage.has(A)||this.splatsChunkToPage.set(A,[]);const C=this.splatsChunkToPage.get(A);if(!C)throw new Error("impossible");I>=C.length&&(C.length=I+1);const E={page:g,lru:Q};return C[I]=E,this.pageLru.add(E),this.pageToSplatsChunk[g]={splats:A,chunk:I,time:performance.now()},this.pageToSplatsChunk[g]}removeSplatsChunkPage(A,I,g){const Q=this.splatsChunkToPage.get(A);if(!Q)throw new Error("impossible");const C=Q[I];if(!C)throw new Error(`pageLru not found for splats: ${A}, chunk: ${I}, page: ${g}`);for(this.pageLru.delete(C),Q[I]=void 0;Q.length>0&&Q[Q.length-1]===void 0;)Q.pop();for(Q.length===0&&this.splatsChunkToPage.delete(A),this.pageToSplatsChunk[g]=void 0;this.pageToSplatsChunk.length>0&&this.pageToSplatsChunk[this.pageToSplatsChunk.length-1]===void 0;)this.pageToSplatsChunk.pop()}uploadPage(A,I,g,Q){const C=A*this.pageSplats;this.packedTexture.value.image.data.subarray(C*4,C*4+I.length).set(I),this.packedTexture.value.addLayerUpdate(A),this.packedTexture.value.needsUpdate=!0,Q&&(this.extTexture.value.image.data.subarray(C*4,C*4+Q.length).set(Q),this.extTexture.value.addLayerUpdate(A),this.extTexture.value.needsUpdate=!0);const i=this.extSplats?g.sh3a&&g.sh3b?3:g.sh2?2:g.sh1?1:0:g.sh3?3:g.sh2?2:g.sh1?1:0;if(this.ensureShTextures(i),this.extSplats){if(this.sh1Texture.value!==nA.emptyExtSh1Texture&&g.sh1){const D=g.sh1;this.sh1Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh1Texture.value.addLayerUpdate(A),this.sh1Texture.value.needsUpdate=!0}}else if(this.sh1Texture.value!==nA.emptySh1Texture&&g.sh1){const D=g.sh1;this.sh1Texture.value.image.data.subarray(C*2,C*2+D.length).set(D),this.sh1Texture.value.addLayerUpdate(A),this.sh1Texture.value.needsUpdate=!0}if(this.sh2Texture.value!==nA.emptySh2Texture&&g.sh2){const D=g.sh2;this.sh2Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh2Texture.value.addLayerUpdate(A),this.sh2Texture.value.needsUpdate=!0}if(this.extSplats){if(this.sh3Texture.value!==nA.emptyExtSh3Texture&&g.sh3a){const D=g.sh3a;this.sh3Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh3Texture.value.addLayerUpdate(A),this.sh3Texture.value.needsUpdate=!0}if(this.sh3TextureB.value!==nA.emptyExtSh3BTexture&&g.sh3b){const D=g.sh3b;this.sh3TextureB.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh3TextureB.value.addLayerUpdate(A),this.sh3TextureB.value.needsUpdate=!0}}else if(this.sh3Texture.value!==nA.emptySh3Texture&&g.sh3){const D=g.sh3;this.sh3Texture.value.image.data.subarray(C*4,C*4+D.length).set(D),this.sh3Texture.value.addLayerUpdate(A),this.sh3Texture.value.needsUpdate=!0}}getGlTexture(A){return na(this.renderer,A)}newUint32ArrayTexture(A,I,g,Q,C,E,i){const D=new F.DataArrayTexture(A,I,g,Q);return D.format=C,D.type=E,D.internalFormat=i,D.needsUpdate=!0,this.renderer.initTexture(D),D}driveFetchers(){const A=[],I=[];let g=0;for(const{splats:E,chunk:i}of this.fetchPriority){const D=this.getSplatsChunk(E,i);if(D){g>=this.maxPages?I.push(D):A.push(D),g+=1;continue}if(this.fetched.some(({splats:o,chunk:s})=>E===o&&i===s)||this.fetchers.some(({splats:o,chunk:s})=>E===o&&i===s)){g+=1;continue}if(g<this.maxPages&&this.fetchers.length<this.numFetchers){g+=1;const o=E.fetchDecodeChunk(i).then(async s=>{this.fetched.push({splats:E,chunk:i,data:s}),this.fetchPause>0&&await new Promise(t=>setTimeout(t,this.fetchPause))},async s=>{console.warn(s);const t=250+500*Math.random();await new Promise(w=>setTimeout(w,t))}).finally(()=>{this.fetchers=this.fetchers.filter(({splats:s,chunk:t})=>E!==s||i!==t),this.processFetched()});this.fetchers.push({splats:E,chunk:i,promise:o}),o.then(s=>{this.autoDrive&&this.driveFetchers()})}}const Q=performance.now();for(const E of I.reverse())E.lru=Q,this.pageLru.delete(E),this.pageLru.add(E);const C=new Set(this.pageLru);for(const E of A.reverse())C.delete(E),E.lru=Q,this.pageLru.delete(E),this.pageLru.add(E);this.freeablePages=Array.from(C).map(({page:E})=>E)}allocateFreeable(){const A=this.freeablePages.shift();if(A===void 0)return;const I=this.pageToSplatsChunk[A];if(!I)throw new Error(`splatsChunk not found for page: ${A}`);const{splats:g,chunk:Q}=I;return this.removeSplatsChunkPage(g,Q,A),this.lodTreeUpdates.push({splats:g,page:A,chunk:Q,numSplats:this.pageSplats}),A}processFetched(){const A=performance.now();for(;;){const I=this.fetched.shift();if(!I)break;const{splats:g,chunk:Q,data:C}=I;let E=this.allocatePage();if(E===void 0&&(E=this.allocateFreeable(),E===void 0))return;this.insertSplatsChunkPage(g,Q,E,A);const{numSplats:i,extra:D}=C;if(this.lodTreeUpdates.push({splats:g,page:E,chunk:Q,numSplats:i,lodTree:D.lodTree}),this.extSplats){const o=C.extArrays,s=o[0],t=o[1];this.newUploads.push({page:E,numSplats:i,packedArray:s,extArray:t,extra:D})}else{const o=C.packedArray;this.newUploads.push({page:E,numSplats:i,packedArray:o,extra:D})}}}processUploads(){for(;;){const A=this.readyUploads.shift();if(!A)break;const{page:I,numSplats:g,packedArray:Q,extArray:C,extra:E}=A;this.uploadPage(I,Q,E,C)}}consumeLodTreeUpdates(){const A=this.lodTreeUpdates;return this.lodTreeUpdates=[],this.readyUploads.push(...this.newUploads),this.newUploads=[],A}};uA.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();uA.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*2),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RG32UI",C.needsUpdate=!0,C})();uA.emptyIndicesTexture=(()=>{const B=new Uint32Array(16384),A=new F.DataTexture(B,4096,1);return A.format=F.RGBAIntegerFormat,A.type=F.UnsignedIntType,A.internalFormat="RGBA32UI",A.needsUpdate=!0,A})();uA.emptyPackedTexture=uA.emptyUint32x4;uA.emptyExtTexture=uA.emptyUint32x4;uA.emptySh1Texture=uA.emptyUint32x2;uA.emptySh2Texture=uA.emptyUint32x4;uA.emptySh3Texture=uA.emptyUint32x4;uA.emptyExtSh1Texture=uA.emptyUint32x4;uA.emptyExtSh2Texture=uA.emptyUint32x4;uA.emptyExtSh3Texture=uA.emptyUint32x4;uA.emptyExtSh3BTexture=uA.emptyUint32x4;let eQ=uA;function na(B,A){if(!B.properties.has(A))throw new Error("texture not found");const g=B.properties.get(A).__webglTexture;if(!g)throw new Error("texture not found");return g}const Ny=ia();async function bi({url:B,requestHeader:A,withCredentials:I,offset:g,bytes:Q}){const C=new Request(B,{headers:A?new Headers(A):void 0,credentials:I?"include":"same-origin"});g!==void 0&&Q!==void 0&&C.headers.set("Range",`bytes=${g}-${g+Q-1}`);const E=await fetch(C);if(!E.ok||!E.body)throw new Error(`Failed to fetch "${B}": ${E.status} ${E.statusText}`);return new Uint8Array(await E.arrayBuffer())}class Jy{constructor(){this.fetchDyno=new tA({inTypes:{},outTypes:{gsplat:yA},globals:()=>[lI],statements:({outputs:A})=>GA(`
12756
12756
  ${A.gsplat}.flags = 0u;
12757
12757
  return;
12758
- `)}).outputs.gsplat}prepareFetchSplat(){}dispose(){}getNumSplats(){return 0}hasRgbDir(){return!1}getNumSh(){return 0}setMaxSh(A){}fetchSplat({index:A}){return this.fetchDyno}forEachSplat(){}}const IB=class Ug extends AB{constructor(A={}){if(super({update:I=>this.update(I)}),this.isInitialized=!1,this.recolor=new F.Color(1,1,1),this.opacity=1,this.generatorDirty=!0,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.showLodPageDyno=new xg({value:0}),A.splats)this.splats=A.splats,this.numSplats=A.splats.getNumSplats();else if(A.paged){A.extSplats&&console.warn("To set extSplats with the paged option, set SparkRenderer.pagedExtSplats");const I=A.url??"";if(A.paged===!0)this.paged=new uB({rootUrl:I});else if(A.paged instanceof uB)this.paged=A.paged;else if(A.paged instanceof eQ)this.paged=new uB({rootUrl:I,pager:A.paged});else throw new Error("Invalid paged option");this.splats=this.paged}else A.extSplats?(this.extSplats=A.extSplats instanceof lg?A.extSplats:new lg,A.extSplats=this.extSplats,this.numSplats=this.extSplats.numSplats,this.splats=this.extSplats):A.packedSplats?(this.packedSplats=A.packedSplats,this.packedSplats.splatEncoding=A.splatEncoding??{...TE},this.splats=this.packedSplats):this.packedSplats=new Gg;if(this.editable=A.editable??!0,this.raycastable=A.raycastable??!0,this.minRaycastOpacity=A.minRaycastOpacity??.2,this.onFrame=A.onFrame,this.context={transform:new UB,viewToWorld:new UB,worldToView:new UB,viewToObject:new UB,covTransform:new WC,covViewToWorld:new WC,covWorldToView:new WC,covViewToObject:new WC,recolor:new JC({value:new F.Vector4().setScalar(Number.NEGATIVE_INFINITY)}),time:new _Q({value:0}),deltaTime:new _Q({value:0}),numSplats:new xg({value:0}),splats:new Sy,enableLod:new RC({value:!1}),lodIndices:new jw({value:ps,key:"lodIndices"})},this.covSplats=A.covSplats??!1,this.covSplats&&!this.extSplats)throw new Error("CovSplats requires ExtSplats");if(this.objectModifiers=A.objectModifier?[A.objectModifier]:void 0,this.worldModifiers=A.worldModifier?[A.worldModifier]:void 0,A.objectModifiers&&(this.objectModifiers=A.objectModifiers),A.worldModifiers&&(this.worldModifiers=A.worldModifiers),this.enableLod=A.enableLod,this.lodScale=A.lodScale??1,this.behindFoveate=A.behindFoveate,this.coneFov0=A.coneFov0,this.coneFov=A.coneFov,this.coneFoveate=A.coneFoveate,this.updateGenerator(),A.url||A.fileBytes||A.stream||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized||this.extSplats&&!this.extSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const I=A.onLoad(this);I instanceof Promise&&await I}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const I=A.onLoad(this);I instanceof Promise&&(this.initialized=I.then(()=>this))}}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,maxSplats:D,constructSplats:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:y}=A;if(this.packedSplats){if(I||g||E||o){const R={url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,maxSplats:D,construct:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:y};this.packedSplats.reinitialize(R)}await this.packedSplats.initialized,this.splats=this.packedSplats}else if(this.extSplats&&(I||g||E||o)){const R=o;this.extSplats.reinitialize({url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,maxSplats:D,construct:R,onProgress:s,lod:w,nonLod:a,lodAbove:y}),await this.extSplats.initialized,this.splats=this.extSplats}this.splats&&(this.numSplats=this.splats.getNumSplats(),this.updateGenerator())}static async staticInitialize(){await $w(),Ug.isStaticInitialized=!0}pushSplat(A,I,g,Q,C){this.packedSplats?this.packedSplats.pushSplat(A,I,g,Q,C):this.extSplats&&this.extSplats.pushSplat(A,I,g,Q,C)}forEachSplat(A){var I;(I=this.splats)==null||I.forEachSplat(A)}dispose(){this.splats&&this.splats!==this.packedSplats&&this.splats!==this.extSplats&&(this.splats.dispose(),this.splats=void 0),this.packedSplats&&(this.packedSplats.dispose(),this.packedSplats=void 0),this.extSplats&&(this.extSplats.dispose(),this.extSplats=void 0)}getBoundingBox(A=!0){var I;if(!this.initialized)throw new Error("Cannot get bounding box before SplatMesh is initialized");const g=new F.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),Q=new F.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),C=new F.Vector3,E=[-1,1];function i(o,s,t,w,a,y){if(A)g.min(s),Q.max(s);else for(const R of E)for(const n of E)for(const h of E)C.set(R*t.x,n*t.y,h*t.z),C.applyQuaternion(w),C.add(s),g.min(C),Q.max(C)}return(I=this.splats)==null||I.forEachSplat(i),new F.Box3(g,Q)}set objectModifier(A){A?this.objectModifiers=[A]:this.objectModifiers=void 0}set worldModifier(A){A?this.worldModifiers=[A]:this.worldModifiers=void 0}constructGenerator(A){if(this.covSplats)return this.constructCovGenerator(A);const{transform:I,viewToObject:g,recolor:Q}=A,C=DI({index:"int"},{gsplat:yA},({index:E})=>{if(!E)throw new Error("index is undefined");E=fs(A.lodIndices,E,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.setMaxSh(this.maxSh),A.splats.prepareFetchSplat();let i=A.splats.fetchSplat({index:E,viewOrigin:g.translate});if(this.splatRgba&&(i=xs(i,this.splatRgba.dyno,E,A.enableLod)),this.skinning&&(i=this.skinning.modify(i)),this.objectModifiers)for(const o of this.objectModifiers)i=o.apply({gsplat:i}).gsplat;i=I.applyGsplat(i);const D=SQ(Q,XI(i).outputs.rgba);if(i=zQ({gsplat:i,rgba:D}),this.rgbaDisplaceEdits&&(i=this.rgbaDisplaceEdits.modify(i)),this.worldModifiers)for(const o of this.worldModifiers)i=o.apply({gsplat:i}).gsplat;return{gsplat:i}});this.generator=C,this.covGenerator=void 0}constructCovGenerator(A){const{covTransform:I,covViewToObject:g,recolor:Q}=A,C=DI({index:"int"},{covsplat:VI},({index:E})=>{if(!E)throw new Error("index is undefined");E=fs(A.lodIndices,E,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.prepareFetchSplat();let i=A.splats.fetchSplat({index:E,viewOrigin:g.offset});if(this.splatRgba&&(i=xs(i,this.splatRgba.dyno,E,A.enableLod)),this.objectModifiers)for(const s of this.objectModifiers)i=s.apply({gsplat:i}).gsplat;let D=FD(i);if(this.skinning&&(D=this.skinning.modifyCov(D)),this.covObjectModifiers)for(const s of this.covObjectModifiers)D=s.apply({covsplat:D}).covsplat;D=I.applyCovSplat(D);const o=SQ(Q,kD(D).outputs.rgba);if(D=Zw({covsplat:D,rgba:o}),this.rgbaDisplaceEdits&&(D=this.rgbaDisplaceEdits.modifyCov(D)),this.covWorldModifiers)for(const s of this.covWorldModifiers)D=s.apply({covsplat:D}).covsplat;return{covsplat:D}});this.generator=void 0,this.covGenerator=C}updateGenerator(){this.generatorDirty=!0}update({renderer:A,time:I,deltaTime:g,viewToWorld:Q,camera:C,renderSize:E,globalEdits:i,lodIndices:D}){var o,s,t;this.context.time.value=I,this.context.deltaTime.value=g,Ug.dynoTime.value=I,this.showLodPageDyno.value=this.showLodPage??-1;const w=this.splats??this.packedSplats??this.extSplats;w&&(this.context.splats=w),this.numSplats=this.context.splats.getNumSplats();let a=!1;const y=((o=this.packedSplats)==null?void 0:o.lodSplats)??((s=this.extSplats)==null?void 0:s.lodSplats);if(this.context.enableLod.value=y!=null&&D!=null,this.enableLod===!1&&(this.context.enableLod.value=!1),this.context.lodIndices.value=D?.texture??ps,this.context.enableLod.value&&y&&(this.context.splats=y,this.numSplats=D?.numSplats??0),this.context.numSplats.value=this.numSplats,this.context.splats!==this.lastSplats&&(this.lastSplats=this.context.splats,this.generatorDirty=!0),this.covSplats){this.context.covTransform.update(this)&&(a=!0),this.context.covViewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const G=Q.clone().invert();this.context.covWorldToView.updateFromMatrix(G)&&this.enableWorldToView&&(a=!0);const M=this.matrixWorld.clone().invert().multiply(Q);this.context.covViewToObject.updateFromMatrix(M)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}else{this.context.transform.update(this)&&(a=!0),this.context.viewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const G=Q.clone().invert();this.context.worldToView.updateFromMatrix(G)&&this.enableWorldToView&&(a=!0);const k=new F.Matrix4().compose(this.context.transform.translate.value,this.context.transform.rotate.value,new F.Vector3().setScalar(this.context.transform.scale.value)).invert().multiply(Q);this.context.viewToObject.updateFromMatrix(k)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}const R=new F.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);R.equals(this.context.recolor.value)||(this.context.recolor.value.copy(R),a=!0);const n=this.editable?(this.edits??[]).concat(i):[];this.editable&&!this.edits&&this.traverseVisible(G=>{G instanceof zE&&n.push(G)}),n.sort((G,r)=>G.ordering-r.ordering);const h=n.map(G=>{if(G.sdfs!=null)return{edit:G,sdfs:G.sdfs};const r=[];return G.traverseVisible(M=>{M instanceof ga&&r.push(M)}),{edit:G,sdfs:r}});if(h.length>0&&!this.rgbaDisplaceEdits){const G=h.length,r=h.reduce((M,k)=>M+k.sdfs.length,0);this.rgbaDisplaceEdits=new Ca({maxEdits:G,maxSdfs:r}),this.generatorDirty=!0}if(this.rgbaDisplaceEdits){const G=this.rgbaDisplaceEdits.update(h);a||(a=G.updated),G.dynoUpdated&&(this.generatorDirty=!0)}this.generatorDirty&&(this.constructGenerator(this.context),this.generatorDirty=!1,a=!0),a&&this.updateVersion(),(t=this.onFrame)==null||t.call(this,{mesh:this,time:I,deltaTime:g})}raycast(A,I){var g,Q,C,E,i,D,o,s,t,w,a,y,R,n,h,G,r,M,k,J,U,Y,d;if(!Ug.isStaticInitialized||!this.raycastable||!this.packedSplats&&!this.extSplats&&!this.paged)return;const H=this.paged!=null,f=H?((Q=(g=this.paged)==null?void 0:g.pager)==null?void 0:Q.extSplats)??!1:this.extSplats!=null,{near:l,far:p,ray:q}=A,m=this.matrixWorld.clone().invert(),T=new F.Matrix3().setFromMatrix4(m),Z=q.origin.clone().applyMatrix4(m),O=q.direction.clone().applyMatrix3(T),j=bh(),gA=j.length/4;let QA=0;const CA=((C=this.raycastIndices)==null?void 0:C.numSplats)??(H?(E=this.paged)==null?void 0:E.numSplats:this.context.numSplats.value)??0,EA=((i=this.raycastIndices)==null?void 0:i.indices)??(H?(D=this.paged)==null?void 0:D.dynoIndices.value.image.data:this.context.enableLod.value?this.context.lodIndices.value.image.data:null)??null;if(f){const BA=mh(),W=H?(h=(n=this.paged)==null?void 0:n.pager)==null?void 0:h.packedTexture.value.image.data:EA?(r=(G=this.extSplats)==null?void 0:G.lodSplats)==null?void 0:r.extArrays[0]:(M=this.extSplats)==null?void 0:M.extArrays[0],$=H?(J=(k=this.paged)==null?void 0:k.pager)==null?void 0:J.extTexture.value.image.data:EA?(Y=(U=this.extSplats)==null?void 0:U.lodSplats)==null?void 0:Y.extArrays[1]:(d=this.extSplats)==null?void 0:d.extArrays[1];if(!W||!$)return;for(let z=0;z<CA;z+=gA){const MA=Math.min(gA,CA-z);if(!EA)j.set(W.subarray(z*4,(z+MA)*4)),BA.set($.subarray(z*4,(z+MA)*4));else for(let NA=0;NA<MA;++NA){const JA=EA[z+NA],iA=NA*4,oA=JA*4;j[iA]=W[oA],j[iA+1]=W[oA+1],j[iA+2]=W[oA+2],j[iA+3]=W[oA+3],BA[iA]=$[oA],BA[iA+1]=$[oA+1],BA[iA+2]=$[oA+2],BA[iA+3]=$[oA+3]}const kA=Ph(Z.x,Z.y,Z.z,O.x,O.y,O.z,this.minRaycastOpacity,l,p,MA);QA=this.appendRaycastBuffer(QA,kA)}}else{const BA=H?(s=(o=this.paged)==null?void 0:o.pager)==null?void 0:s.packedTexture.value.image.data:EA?(w=(t=this.packedSplats)==null?void 0:t.lodSplats)==null?void 0:w.packedArray:(a=this.packedSplats)==null?void 0:a.packedArray;if(!BA)return;const W=H?(y=this.paged)==null?void 0:y.splatEncoding:(R=this.packedSplats)==null?void 0:R.splatEncoding;for(let $=0;$<CA;$+=gA){const z=Math.min(gA,CA-$);if(!EA)j.set(BA.subarray($*4,($+z)*4));else for(let kA=0;kA<z;++kA){const NA=EA[$+kA],JA=kA*4,iA=NA*4;j[JA]=BA[iA],j[JA+1]=BA[iA+1],j[JA+2]=BA[iA+2],j[JA+3]=BA[iA+3]}const MA=Th(Z.x,Z.y,Z.z,O.x,O.y,O.z,this.minRaycastOpacity,l,p,z,W?.lnScaleMin??KI,W?.lnScaleMax??dI,W?.lodOpacity??!1);QA=this.appendRaycastBuffer(QA,MA)}}for(const BA of Ug.raycastBuffer.subarray(0,QA)){const W=q.direction.clone().multiplyScalar(BA).add(q.origin);I.push({distance:BA,point:W,object:this})}}appendRaycastBuffer(A,I){const g=A+I.length;let Q=Ug.raycastBuffer.length;if(g>Q){for(;Q<g;)Q*=2;const C=new Float32Array(Q);C.set(Ug.raycastBuffer.subarray(0,A)),Ug.raycastBuffer=C}return Ug.raycastBuffer.set(I,A),A+I.length}async createLodSplats({rgbaArray:A,quality:I}={}){this.packedSplats?await this.packedSplats.createLodSplats({quality:I,rgbaArray:A}):this.extSplats&&await this.extSplats.createLodSplats({quality:I,rgbaArray:A})}};IB.staticInitialized=IB.staticInitialize();IB.isStaticInitialized=!1;IB.dynoTime=new _Q({value:0});IB.raycastBuffer=new Float32Array(1024);let Zg=IB;function fs(B,A,I,g,Q){return _D({inTypes:{lodIndices:"usampler2D",index:"int",numSplats:"int",enableLod:"bool",showLodPage:"int"},outTypes:{index:"int"},inputs:{lodIndices:B,index:A,numSplats:I,enableLod:g,showLodPage:Q},statements:({inputs:C,outputs:E})=>GA(`
12758
+ `)}).outputs.gsplat}prepareFetchSplat(){}dispose(){}getNumSplats(){return 0}hasRgbDir(){return!1}getNumSh(){return 0}setMaxSh(A){}fetchSplat({index:A}){return this.fetchDyno}forEachSplat(){}}const IB=class Ug extends AB{constructor(A={}){if(super({update:I=>this.update(I)}),this.isInitialized=!1,this.recolor=new F.Color(1,1,1),this.opacity=1,this.generatorDirty=!0,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.showLodPageDyno=new xg({value:0}),A.splats)this.splats=A.splats,this.numSplats=A.splats.getNumSplats();else if(A.paged){A.extSplats&&console.warn("To set extSplats with the paged option, set SparkRenderer.pagedExtSplats");const I=A.url??"";if(A.paged===!0)this.paged=new qB({rootUrl:I});else if(A.paged instanceof qB)this.paged=A.paged;else if(A.paged instanceof eQ)this.paged=new qB({rootUrl:I,pager:A.paged});else throw new Error("Invalid paged option");this.splats=this.paged}else A.extSplats?(this.extSplats=A.extSplats instanceof lg?A.extSplats:new lg,A.extSplats=this.extSplats,this.numSplats=this.extSplats.numSplats,this.splats=this.extSplats):A.packedSplats?(this.packedSplats=A.packedSplats,this.packedSplats.splatEncoding=A.splatEncoding??{...OE},this.splats=this.packedSplats):this.packedSplats=new Gg;if(this.editable=A.editable??!0,this.raycastable=A.raycastable??!0,this.minRaycastOpacity=A.minRaycastOpacity??.2,this.onFrame=A.onFrame,this.context={transform:new LB,viewToWorld:new LB,worldToView:new LB,viewToObject:new LB,covTransform:new WC,covViewToWorld:new WC,covWorldToView:new WC,covViewToObject:new WC,recolor:new UC({value:new F.Vector4().setScalar(Number.NEGATIVE_INFINITY)}),time:new _Q({value:0}),deltaTime:new _Q({value:0}),numSplats:new xg({value:0}),splats:new Jy,enableLod:new FC({value:!1}),lodIndices:new Ba({value:ms,key:"lodIndices"})},this.covSplats=A.covSplats??!1,this.covSplats&&!this.extSplats)throw new Error("CovSplats requires ExtSplats");if(this.objectModifiers=A.objectModifier?[A.objectModifier]:void 0,this.worldModifiers=A.worldModifier?[A.worldModifier]:void 0,A.objectModifiers&&(this.objectModifiers=A.objectModifiers),A.worldModifiers&&(this.worldModifiers=A.worldModifiers),this.enableLod=A.enableLod,this.lodScale=A.lodScale??1,this.behindFoveate=A.behindFoveate,this.coneFov0=A.coneFov0,this.coneFov=A.coneFov,this.coneFoveate=A.coneFoveate,this.updateGenerator(),A.url||A.fileBytes||A.stream||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized||this.extSplats&&!this.extSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const I=A.onLoad(this);I instanceof Promise&&await I}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const I=A.onLoad(this);I instanceof Promise&&(this.initialized=I.then(()=>this))}}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,maxSplats:D,constructSplats:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:y}=A;if(this.packedSplats){if(I||g||E||o){const r={url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,maxSplats:D,construct:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:y};this.packedSplats.reinitialize(r)}await this.packedSplats.initialized,this.splats=this.packedSplats}else if(this.extSplats&&(I||g||E||o)){const r=o;this.extSplats.reinitialize({url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,maxSplats:D,construct:r,onProgress:s,lod:w,nonLod:a,lodAbove:y}),await this.extSplats.initialized,this.splats=this.extSplats}this.splats&&(this.numSplats=this.splats.getNumSplats(),this.updateGenerator())}static async staticInitialize(){await ia(),Ug.isStaticInitialized=!0}pushSplat(A,I,g,Q,C){this.packedSplats?this.packedSplats.pushSplat(A,I,g,Q,C):this.extSplats&&this.extSplats.pushSplat(A,I,g,Q,C)}forEachSplat(A){var I;(I=this.splats)==null||I.forEachSplat(A)}dispose(){this.splats&&this.splats!==this.packedSplats&&this.splats!==this.extSplats&&(this.splats.dispose(),this.splats=void 0),this.packedSplats&&(this.packedSplats.dispose(),this.packedSplats=void 0),this.extSplats&&(this.extSplats.dispose(),this.extSplats=void 0)}getBoundingBox(A=!0){var I;if(!this.initialized)throw new Error("Cannot get bounding box before SplatMesh is initialized");const g=new F.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),Q=new F.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),C=new F.Vector3,E=[-1,1];function i(o,s,t,w,a,y){if(A)g.min(s),Q.max(s);else for(const r of E)for(const c of E)for(const h of E)C.set(r*t.x,c*t.y,h*t.z),C.applyQuaternion(w),C.add(s),g.min(C),Q.max(C)}return(I=this.splats)==null||I.forEachSplat(i),new F.Box3(g,Q)}set objectModifier(A){A?this.objectModifiers=[A]:this.objectModifiers=void 0}set worldModifier(A){A?this.worldModifiers=[A]:this.worldModifiers=void 0}constructGenerator(A){if(this.covSplats)return this.constructCovGenerator(A);const{transform:I,viewToObject:g,recolor:Q}=A,C=DI({index:"int"},{gsplat:yA},({index:E})=>{if(!E)throw new Error("index is undefined");E=qs(A.lodIndices,E,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.setMaxSh(this.maxSh),A.splats.prepareFetchSplat();let i=A.splats.fetchSplat({index:E,viewOrigin:g.translate});if(this.splatRgba&&(i=bs(i,this.splatRgba.dyno,E,A.enableLod)),this.skinning&&(i=this.skinning.modify(i)),this.objectModifiers)for(const o of this.objectModifiers)i=o.apply({gsplat:i}).gsplat;i=I.applyGsplat(i);const D=SQ(Q,XI(i).outputs.rgba);if(i=zQ({gsplat:i,rgba:D}),this.rgbaDisplaceEdits&&(i=this.rgbaDisplaceEdits.modify(i)),this.worldModifiers)for(const o of this.worldModifiers)i=o.apply({gsplat:i}).gsplat;return{gsplat:i}});this.generator=C,this.covGenerator=void 0}constructCovGenerator(A){const{covTransform:I,covViewToObject:g,recolor:Q}=A,C=DI({index:"int"},{covsplat:VI},({index:E})=>{if(!E)throw new Error("index is undefined");E=qs(A.lodIndices,E,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.prepareFetchSplat();let i=A.splats.fetchSplat({index:E,viewOrigin:g.offset});if(this.splatRgba&&(i=bs(i,this.splatRgba.dyno,E,A.enableLod)),this.objectModifiers)for(const s of this.objectModifiers)i=s.apply({gsplat:i}).gsplat;let D=kD(i);if(this.skinning&&(D=this.skinning.modifyCov(D)),this.covObjectModifiers)for(const s of this.covObjectModifiers)D=s.apply({covsplat:D}).covsplat;D=I.applyCovSplat(D);const o=SQ(Q,MD(D).outputs.rgba);if(D=ga({covsplat:D,rgba:o}),this.rgbaDisplaceEdits&&(D=this.rgbaDisplaceEdits.modifyCov(D)),this.covWorldModifiers)for(const s of this.covWorldModifiers)D=s.apply({covsplat:D}).covsplat;return{covsplat:D}});this.generator=void 0,this.covGenerator=C}updateGenerator(){this.generatorDirty=!0}update({renderer:A,time:I,deltaTime:g,viewToWorld:Q,camera:C,renderSize:E,globalEdits:i,lodIndices:D}){var o,s,t;this.context.time.value=I,this.context.deltaTime.value=g,Ug.dynoTime.value=I,this.showLodPageDyno.value=this.showLodPage??-1;const w=this.splats??this.packedSplats??this.extSplats;w&&(this.context.splats=w),this.numSplats=this.context.splats.getNumSplats();let a=!1;const y=((o=this.packedSplats)==null?void 0:o.lodSplats)??((s=this.extSplats)==null?void 0:s.lodSplats);if(this.context.enableLod.value=y!=null&&D!=null,this.enableLod===!1&&(this.context.enableLod.value=!1),this.context.lodIndices.value=D?.texture??ms,this.context.enableLod.value&&y&&(this.context.splats=y,this.numSplats=D?.numSplats??0),this.context.numSplats.value=this.numSplats,this.context.splats!==this.lastSplats&&(this.lastSplats=this.context.splats,this.generatorDirty=!0),this.covSplats){this.context.covTransform.update(this)&&(a=!0),this.context.covViewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const G=Q.clone().invert();this.context.covWorldToView.updateFromMatrix(G)&&this.enableWorldToView&&(a=!0);const N=this.matrixWorld.clone().invert().multiply(Q);this.context.covViewToObject.updateFromMatrix(N)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}else{this.context.transform.update(this)&&(a=!0),this.context.viewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const G=Q.clone().invert();this.context.worldToView.updateFromMatrix(G)&&this.enableWorldToView&&(a=!0);const k=new F.Matrix4().compose(this.context.transform.translate.value,this.context.transform.rotate.value,new F.Vector3().setScalar(this.context.transform.scale.value)).invert().multiply(Q);this.context.viewToObject.updateFromMatrix(k)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}const r=new F.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);r.equals(this.context.recolor.value)||(this.context.recolor.value.copy(r),a=!0);const c=this.editable?(this.edits??[]).concat(i):[];this.editable&&!this.edits&&this.traverseVisible(G=>{G instanceof _E&&c.push(G)}),c.sort((G,R)=>G.ordering-R.ordering);const h=c.map(G=>{if(G.sdfs!=null)return{edit:G,sdfs:G.sdfs};const R=[];return G.traverseVisible(N=>{N instanceof sa&&R.push(N)}),{edit:G,sdfs:R}});if(h.length>0&&!this.rgbaDisplaceEdits){const G=h.length,R=h.reduce((N,k)=>N+k.sdfs.length,0);this.rgbaDisplaceEdits=new aa({maxEdits:G,maxSdfs:R}),this.generatorDirty=!0}if(this.rgbaDisplaceEdits){const G=this.rgbaDisplaceEdits.update(h);a||(a=G.updated),G.dynoUpdated&&(this.generatorDirty=!0)}this.generatorDirty&&(this.constructGenerator(this.context),this.generatorDirty=!1,a=!0),a&&this.updateVersion(),(t=this.onFrame)==null||t.call(this,{mesh:this,time:I,deltaTime:g})}raycast(A,I){var g,Q,C,E,i,D,o,s,t,w,a,y,r,c,h,G,R,N,k,J,U,H,d;if(!Ug.isStaticInitialized||!this.raycastable||!this.packedSplats&&!this.extSplats&&!this.paged)return;const Y=this.paged!=null,f=Y?((Q=(g=this.paged)==null?void 0:g.pager)==null?void 0:Q.extSplats)??!1:this.extSplats!=null,{near:l,far:p,ray:q}=A,m=this.matrixWorld.clone().invert(),T=new F.Matrix3().setFromMatrix4(m),Z=q.origin.clone().applyMatrix4(m),O=q.direction.clone().applyMatrix3(T),j=vh(),gA=j.length/4;let QA=0;const CA=((C=this.raycastIndices)==null?void 0:C.numSplats)??(Y?(E=this.paged)==null?void 0:E.numSplats:this.context.numSplats.value)??0,EA=((i=this.raycastIndices)==null?void 0:i.indices)??(Y?(D=this.paged)==null?void 0:D.dynoIndices.value.image.data:this.context.enableLod.value?this.context.lodIndices.value.image.data:null)??null;if(f){const BA=Vh(),W=Y?(h=(c=this.paged)==null?void 0:c.pager)==null?void 0:h.packedTexture.value.image.data:EA?(R=(G=this.extSplats)==null?void 0:G.lodSplats)==null?void 0:R.extArrays[0]:(N=this.extSplats)==null?void 0:N.extArrays[0],$=Y?(J=(k=this.paged)==null?void 0:k.pager)==null?void 0:J.extTexture.value.image.data:EA?(H=(U=this.extSplats)==null?void 0:U.lodSplats)==null?void 0:H.extArrays[1]:(d=this.extSplats)==null?void 0:d.extArrays[1];if(!W||!$)return;for(let z=0;z<CA;z+=gA){const MA=Math.min(gA,CA-z);if(!EA)j.set(W.subarray(z*4,(z+MA)*4)),BA.set($.subarray(z*4,(z+MA)*4));else for(let NA=0;NA<MA;++NA){const JA=EA[z+NA],iA=NA*4,oA=JA*4;j[iA]=W[oA],j[iA+1]=W[oA+1],j[iA+2]=W[oA+2],j[iA+3]=W[oA+3],BA[iA]=$[oA],BA[iA+1]=$[oA+1],BA[iA+2]=$[oA+2],BA[iA+3]=$[oA+3]}const kA=Zh(Z.x,Z.y,Z.z,O.x,O.y,O.z,this.minRaycastOpacity,l,p,MA);QA=this.appendRaycastBuffer(QA,kA)}}else{const BA=Y?(s=(o=this.paged)==null?void 0:o.pager)==null?void 0:s.packedTexture.value.image.data:EA?(w=(t=this.packedSplats)==null?void 0:t.lodSplats)==null?void 0:w.packedArray:(a=this.packedSplats)==null?void 0:a.packedArray;if(!BA)return;const W=Y?(y=this.paged)==null?void 0:y.splatEncoding:(r=this.packedSplats)==null?void 0:r.splatEncoding;for(let $=0;$<CA;$+=gA){const z=Math.min(gA,CA-$);if(!EA)j.set(BA.subarray($*4,($+z)*4));else for(let kA=0;kA<z;++kA){const NA=EA[$+kA],JA=kA*4,iA=NA*4;j[JA]=BA[iA],j[JA+1]=BA[iA+1],j[JA+2]=BA[iA+2],j[JA+3]=BA[iA+3]}const MA=Wh(Z.x,Z.y,Z.z,O.x,O.y,O.z,this.minRaycastOpacity,l,p,z,W?.lnScaleMin??KI,W?.lnScaleMax??dI,W?.lodOpacity??!1);QA=this.appendRaycastBuffer(QA,MA)}}for(const BA of Ug.raycastBuffer.subarray(0,QA)){const W=q.direction.clone().multiplyScalar(BA).add(q.origin);I.push({distance:BA,point:W,object:this})}}appendRaycastBuffer(A,I){const g=A+I.length;let Q=Ug.raycastBuffer.length;if(g>Q){for(;Q<g;)Q*=2;const C=new Float32Array(Q);C.set(Ug.raycastBuffer.subarray(0,A)),Ug.raycastBuffer=C}return Ug.raycastBuffer.set(I,A),A+I.length}async createLodSplats({rgbaArray:A,quality:I}={}){this.packedSplats?await this.packedSplats.createLodSplats({quality:I,rgbaArray:A}):this.extSplats&&await this.extSplats.createLodSplats({quality:I,rgbaArray:A})}};IB.staticInitialized=IB.staticInitialize();IB.isStaticInitialized=!1;IB.dynoTime=new _Q({value:0});IB.raycastBuffer=new Float32Array(1024);let Zg=IB;function qs(B,A,I,g,Q){return Io({inTypes:{lodIndices:"usampler2D",index:"int",numSplats:"int",enableLod:"bool",showLodPage:"int"},outTypes:{index:"int"},inputs:{lodIndices:B,index:A,numSplats:I,enableLod:g,showLodPage:Q},statements:({inputs:C,outputs:E})=>GA(`
12759
12759
  int index = ${C.index};
12760
12760
  if (${C.showLodPage} < 0) {
12761
12761
  if (index >= ${C.numSplats}) {
@@ -12775,12 +12775,12 @@ void main() {\r
12775
12775
  }
12776
12776
  ${E.index} = start + index;
12777
12777
  }
12778
- `)}).outputs.index}function xs(B,A,I,g){return _D({inTypes:{gsplat:yA,rgba:Ia,index:"int",enableLod:"bool"},outTypes:{gsplat:yA},inputs:{gsplat:B,rgba:A,index:I,enableLod:g},statements:({inputs:Q,outputs:C})=>GA(`
12778
+ `)}).outputs.index}function bs(B,A,I,g){return Io({inTypes:{gsplat:yA,rgba:oa,index:"int",enableLod:"bool"},outTypes:{gsplat:yA},inputs:{gsplat:B,rgba:A,index:I,enableLod:g},statements:({inputs:Q,outputs:C})=>GA(`
12779
12779
  ${C.gsplat} = ${Q.gsplat};
12780
12780
  if (!${Q.enableLod} && (${Q.index} >= 0) && (${Q.index} < ${Q.rgba}.count)) {
12781
12781
  ${C.gsplat}.rgba = texelFetch(${Q.rgba}.texture, splatTexCoord(${Q.index}), 0);
12782
12782
  }
12783
- `)}).outputs.gsplat}const ps=(()=>{const B=new F.DataTexture(new Uint32Array(16384),4096,1,F.RGBAIntegerFormat,F.UnsignedIntType);return B.internalFormat="RGBA32UI",B.needsUpdate=!0,B})();new F.BufferGeometry;new F.ShaderMaterial;(()=>{try{new Function("return 42;")}catch{return!1}return!0})();class io extends F.Loader{constructor(A){super(A),this.fileLoader=new F.FileLoader(A)}load(A,I,g,Q){return this.loadInternal({url:A,onLoad:I,onProgress:g,onError:Q})}async loadAsync(A,I){return new Promise((g,Q)=>{this.load(A,C=>{g(C)},I,Q)})}parse(A){return new Zg({packedSplats:A})}loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:E,stream:i,streamLength:D,onLoad:o,onProgress:s,onError:t,lod:w,nonLod:a,lodAbove:y,lodBase:R}){Q instanceof ArrayBuffer&&(Q=new Uint8Array(Q));const n=Q?void 0:this.manager.resolveURL((this.path??"")+(g??""));let h=i?.getReader();this.manager.itemStart(n??""),vE.withWorker(async G=>{const r=A?.lod??I?.lod;r&&(w=r);const M=A?.nonLod??I?.nonLod;M!==void 0&&(a=M);const k=async Y=>{const{loaded:d,total:H}=Y;if(d!==void 0&&s&&s(new ProgressEvent("progress",{lengthComputable:H!==0,loaded:d,total:H})),Y.nextChunk){let f;if(!h)f=new Uint8Array(0);else{const{done:l,value:p}=await h.read();l?(h.releaseLock(),h=void 0,f=new Uint8Array(0)):f=p}G.call("nextChunk",{chunk:f})}},J=n?new URL(n,window.location.href).toString():void 0,U=await G.call(I?"loadExtSplats":"loadPackedSplats",{url:J,requestHeader:this.requestHeader,withCredentials:this.withCredentials,fileBytes:Q?.slice(),fileType:C,pathName:n||E,chunked:i!==void 0,chunkedLength:D,encoding:A?.splatEncoding,lod:w,lodBase:R,nonLod:a,lodAbove:y},{onStatus:k});if(U.lodSplats&&(I?U.lodSplats=new lg({...U.lodSplats}):U.lodSplats=new Gg({...U.lodSplats,maxSplats:A?.maxSplats})),I){const Y={...U};I.initialize(Y),o?.(I)}else{const Y={...U};A?(A.initialize(Y),o?.(A)):o?.(new Gg(Y))}}).catch(G=>{this.manager.itemError(n??""),t?.(G)}).finally(()=>{this.manager.itemEnd(n??"")})}async loadInternalAsync({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:E,stream:i,streamLength:D,onProgress:o,lod:s,nonLod:t,lodAbove:w,lodBase:a}){return new Promise((y,R)=>{this.loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:E,stream:i,streamLength:D,onLoad:y,onProgress:o,onError:R,lod:s,nonLod:t,lodAbove:w,lodBase:a})})}}function Da(B){const I=new DataView(B.buffer).getUint32(0,!0);if((I&16777215)===7957616)return HI.PLY;if((I&16777215)===559903){const g=qn(B,4);return new DataView(g.buffer).getUint32(0,!0)===1347635022?HI.SPZ:void 0}if(I===67324752)return My(B)?HI.PCSOGSZIP:void 0;if(I===809779538)return HI.RAD}function Ry(B){const A=B.split(/[?#]/,1)[0],I=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),g=A.slice(I+1),Q=g.lastIndexOf(".");return Q<=0||Q===g.length-1?"":g.slice(Q+1).toLowerCase()}function Fy(B){const A=Ry(B);if(A==="ply")return HI.PLY;if(A==="spz")return HI.SPZ;if(A==="splat")return HI.SPLAT;if(A==="ksplat")return HI.KSPLAT;if(A==="sog")return HI.PCSOGSZIP;if(A==="rad")return HI.RAD}function ky(B){try{let A;if(typeof B=="string")A=B;else{const Q=B instanceof ArrayBuffer?new Uint8Array(B):B;if(Q.length>65536)return;A=new TextDecoder().decode(Q)}const I=JSON.parse(A);if(!I||typeof I!="object"||Array.isArray(I))return;const g=I.version===2;for(const Q of["means","scales","quats","sh0"]){if(!I[Q]||typeof I[Q]!="object"||Array.isArray(I[Q]))return;if(g){if(!I[Q].files||(Q==="scales"||Q==="sh0")&&!I[Q].codebook||Q==="means"&&(!I[Q].mins||!I[Q].maxs))return}else if(!I[Q].shape||!I[Q].files||Q!=="quats"&&(!I[Q].mins||!I[Q].maxs))return}return I}catch{return}}function My(B){try{const A=B instanceof ArrayBuffer?new Uint8Array(B):B;let I=null;const g=Bn(A,{filter:({name:C})=>C.split(/[\\/]/).pop()==="meta.json"?(I=C,!0):!1});if(!I)return;const Q=ky(g[I]);return Q?{name:I,json:Q}:void 0}catch{return}}const RQ=class Bg{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.maxSh=3,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new Do({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new JC({key:"rgbMinMaxLnScaleMinMax",value:new F.Vector4(0,1,KI,dI),update:I=>{var g,Q,C,E;return I.set(((g=this.splatEncoding)==null?void 0:g.rgbMin)??0,((Q=this.splatEncoding)==null?void 0:Q.rgbMax)??1,((C=this.splatEncoding)==null?void 0:C.lnScaleMin)??KI,((E=this.splatEncoding)==null?void 0:E.lnScaleMax)??dI),I}}),this.dynoNumSh=new xg({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.dynoShMax=new pg({key:"shMax",value:new F.Vector3,update:I=>{var g,Q,C;return I.set(((g=this.splatEncoding)==null?void 0:g.sh1Max)??1,((Q=this.splatEncoding)==null?void 0:Q.sh2Max)??1,((C=this.splatEncoding)==null?void 0:C.sh3Max)??1),I}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.splatEncoding=A.splatEncoding,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.splatEncoding=A.splatEncoding??this.splatEncoding,this.lodSplats=A.lodSplats,A.packedArray?(this.packedArray=A.packedArray,this.numSplats=A.numSplats??this.packedArray.length/4,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0)}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new io;if((g||I||E)&&await w.loadInternalAsync({packedSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.target&&(this.target.dispose(),this.target.texture.source.data=null,this.target=null),this.source&&(this.source.dispose(),this.source.source.data=null,this.source=null),this.packedArray=null;for(const A in this.extra){const I=this.extra[A];if(I instanceof kI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?this.extra.sh3?3:2:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=fB(this.dyno,A);if(this.hasRgbDir()&&I){const Q=XI(g).outputs.center,C=pE($Q(Q,I)),{sh1Texture:E,sh2Texture:i,sh3Texture:D}=this.ensureShTextures();let{rgb:o}=oa({coord:Xw(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:E,sh2Texture:i,sh3Texture:D,shMax:this.dynoShMax});o=rQ(o,XI(g).outputs.rgb),g=zQ({gsplat:g,rgb:o})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let Q=this.extra.sh1;const{width:C,height:E,depth:i,maxSplats:D}=FA(Q.length/2);if(Q.length<D*2){const s=new Uint32Array(D*2);s.set(Q),this.extra.sh1=s,Q=s}const o=new F.DataArrayTexture(Q,C,E,i);o.format=F.RGIntegerFormat,o.type=F.UnsignedIntType,o.internalFormat="RG32UI",o.needsUpdate=!0,A=new rI({value:o,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let Q=this.extra.sh2;const{width:C,height:E,depth:i,maxSplats:D}=FA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh2=s,Q=s}const o=new F.DataArrayTexture(Q,C,E,i);o.format=F.RGBAIntegerFormat,o.type=F.UnsignedIntType,o.internalFormat="RGBA32UI",o.needsUpdate=!0,I=new rI({value:o,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3Texture;if(!g){let Q=this.extra.sh3;const{width:C,height:E,depth:i,maxSplats:D}=FA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh3=s,Q=s}const o=new F.DataArrayTexture(Q,C,E,i);o.format=F.RGBAIntegerFormat,o.type=F.UnsignedIntType,o.internalFormat="RGBA32UI",o.needsUpdate=!0,g=new rI({value:o,key:"sh3"}),this.extra.sh3Texture=g}return{sh1Texture:A,sh2Texture:I,sh3Texture:g}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||I>g){this.maxSplats=FA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4);this.packedArray&&Q.set(this.packedArray),this.packedArray=Q}return this.packedArray}ensureSplatsSh(A,I){let g,Q;if(A===0)return this.ensureSplats(I);if(A===1)g=2,Q="sh1";else if(A===2)g=4,Q="sh2";else if(A===3)g=4,Q="sh3";else throw new Error(`Invalid level: ${A}`);let C=this.extra[Q]?this.extra[Q].length/g:0;const E=I<=C?C:Math.max(I,2*C);if(!this.extra[Q]||E>C){C=FA(E).maxSplats;const i=new Uint32Array(C*g);this.extra[Q]&&i.set(this.extra[Q]),this.extra[Q]=i}return this.extra[Q]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return dE(this.packedArray,A,this.splatEncoding)}setSplat(A,I,g,Q,C,E){const i=this.ensureSplats(A+1);GD(i,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,E.r,E.g,E.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const E=this.ensureSplats(this.numSplats+1);GD(E,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let I=0;I<this.numSplats;++I){const g=dE(this.packedArray,I,this.splatEncoding);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.target&&this.target.dispose();const I=FA(A??1),{width:g,height:Q,depth:C}=I;return this.maxSplats=I.maxSplats,this.target=new F.WebGLArrayRenderTarget(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:F.NearestFilter,minFilter:F.NearestFilter}),this.target.texture.format=F.RGBAIntegerFormat,this.target.texture.type=F.UnsignedIntType,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,E=Math.ceil(Q/_)*_;return I+=E,{base:C,count:Q}});return{maxSplats:I,mapping:g}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():Bg.getEmptyArray}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.maxSplats!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:I,depth:g}=FA(this.maxSplats);this.source=new F.DataArrayTexture(this.packedArray,A,I,g),this.source.format=F.RGBAIntegerFormat,this.source.type=F.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}prepareProgramMaterial(A){let I=Bg.generatorProgram.get(A);if(!I){const Q=DI({index:"int"},{},({index:C},E,{roots:i})=>{A.inputs.index=C;const D=A.outputs.gsplat,o=Ww(D,this.dynoRgbMinMaxLnScaleMinMax);i.push(o)});Bg.programTemplate||(Bg.programTemplate=new ZE(EB().computeUvec4Template)),I=new go({graph:Q,inputs:{index:"_index"},outputs:{output:"target"},template:Bg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),Bg.generatorProgram.set(A,I)}const g=I.prepareMaterial();return Bg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}generate({generator:A,base:I,count:g,renderer:Q}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(I+g>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:C,material:E}=this.prepareProgramMaterial(A);C.update();const i=this.saveRenderState(Q),D=Math.ceil((I+g)/_)*_,o=_*sg;for(E.uniforms.targetBase.value=I,E.uniforms.targetCount.value=g;I<D;){const s=Math.floor(I/o);E.uniforms.targetLayer.value=s;const t=s*o,w=Math.floor((I-t)/_),a=Math.min(sg,Math.ceil((D-t)/_));this.target.scissor.set(0,w,_,a-w),Q.setRenderTarget(this.target,s),Q.xr.enabled=!1,Q.autoClear=!1,Bg.fullScreenQuad.render(Q),I+=_*(a-w)}return this.resetRenderState(Q,i),{nextBase:D}}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=this.packedArray.slice(),C=A?(await A.getArray()).slice():void 0,E={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},i=await vE.withWorker(async o=>await o.call(I?"qualityLodPackedSplats":"tinyLodPackedSplats",{numSplats:this.numSplats,packedArray:Q,extra:E,lodBase:g,rgba:C,encoding:this.splatEncoding??TE})),D=new Bg(i);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}extractSplats(A,I){const g=FA(A.length).maxSplats,Q=new Bg({maxSplats:g});for(let C=0;C<A.length;C++){const E=this.getSplat(A[C]);if(I){let i=(A[C]>>>16)*.61803398875;i=i-Math.floor(i);const D=Math.max(0,Math.min(1,Math.abs(i*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(i*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(i*6-1)-1));E.color.r*=D,E.color.g*=o,E.color.b*=s}Q.pushSplat(E.center,E.scales,E.quaternion,E.opacity,E.color)}return Q}};RQ.getEmptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();RQ.programTemplate=null;RQ.generatorProgram=new WeakMap;RQ.fullScreenQuad=new uD.FullScreenQuad(new F.RawShaderMaterial({visible:!1}));RQ.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();RQ.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*2),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RG32UI",C.needsUpdate=!0,C})();let Gg=RQ;class Do extends kI{constructor({packedSplats:A}={}){super({key:"packedSplats",type:VE,globals:()=>[Io],value:{textureArray:Gg.getEmptyArray,numSplats:0,rgbMinMaxLnScaleMinMax:new F.Vector4(0,1,KI,dI),lodOpacity:!1},update:I=>{var g,Q,C,E,i,D,o,s,t,w,a,y;return I.textureArray=((g=this.packedSplats)==null?void 0:g.getTexture())??Gg.getEmptyArray,I.numSplats=((Q=this.packedSplats)==null?void 0:Q.numSplats)??0,I.rgbMinMaxLnScaleMinMax.set(((E=(C=this.packedSplats)==null?void 0:C.splatEncoding)==null?void 0:E.rgbMin)??0,((D=(i=this.packedSplats)==null?void 0:i.splatEncoding)==null?void 0:D.rgbMax)??1,((s=(o=this.packedSplats)==null?void 0:o.splatEncoding)==null?void 0:s.lnScaleMin)??KI,((w=(t=this.packedSplats)==null?void 0:t.splatEncoding)==null?void 0:w.lnScaleMax)??dI),I.lodOpacity=((y=(a=this.packedSplats)==null?void 0:a.splatEncoding)==null?void 0:y.lodOpacity)??!1,I}}),this.packedSplats=A}}const Ny=lA(`
12783
+ `)}).outputs.gsplat}const ms=(()=>{const B=new F.DataTexture(new Uint32Array(16384),4096,1,F.RGBAIntegerFormat,F.UnsignedIntType);return B.internalFormat="RGBA32UI",B.needsUpdate=!0,B})();new F.BufferGeometry;new F.ShaderMaterial;(()=>{try{new Function("return 42;")}catch{return!1}return!0})();class so extends F.Loader{constructor(A){super(A),this.fileLoader=new F.FileLoader(A)}load(A,I,g,Q){return this.loadInternal({url:A,onLoad:I,onProgress:g,onError:Q})}async loadAsync(A,I){return new Promise((g,Q)=>{this.load(A,C=>{g(C)},I,Q)})}parse(A){return new Zg({packedSplats:A})}loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:E,stream:i,streamLength:D,onLoad:o,onProgress:s,onError:t,lod:w,nonLod:a,lodAbove:y,lodBase:r}){Q instanceof ArrayBuffer&&(Q=new Uint8Array(Q));const c=Q?void 0:this.manager.resolveURL((this.path??"")+(g??""));let h=i?.getReader();this.manager.itemStart(c??""),VE.withWorker(async G=>{const R=A?.lod??I?.lod;R&&(w=R);const N=A?.nonLod??I?.nonLod;N!==void 0&&(a=N);const k=async H=>{const{loaded:d,total:Y}=H;if(d!==void 0&&s&&s(new ProgressEvent("progress",{lengthComputable:Y!==0,loaded:d,total:Y})),H.nextChunk){let f;if(!h)f=new Uint8Array(0);else{const{done:l,value:p}=await h.read();l?(h.releaseLock(),h=void 0,f=new Uint8Array(0)):f=p}G.call("nextChunk",{chunk:f})}},J=c?new URL(c,window.location.href).toString():void 0,U=await G.call(I?"loadExtSplats":"loadPackedSplats",{url:J,requestHeader:this.requestHeader,withCredentials:this.withCredentials,fileBytes:Q?.slice(),fileType:C,pathName:c||E,chunked:i!==void 0,chunkedLength:D,encoding:A?.splatEncoding,lod:w,lodBase:r,nonLod:a,lodAbove:y},{onStatus:k});if(U.lodSplats&&(I?U.lodSplats=new lg({...U.lodSplats}):U.lodSplats=new Gg({...U.lodSplats,maxSplats:A?.maxSplats})),I){const H={...U};I.initialize(H),o?.(I)}else{const H={...U};A?(A.initialize(H),o?.(A)):o?.(new Gg(H))}}).catch(G=>{this.manager.itemError(c??""),t?.(G)}).finally(()=>{this.manager.itemEnd(c??"")})}async loadInternalAsync({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:E,stream:i,streamLength:D,onProgress:o,lod:s,nonLod:t,lodAbove:w,lodBase:a}){return new Promise((y,r)=>{this.loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:E,stream:i,streamLength:D,onLoad:y,onProgress:o,onError:r,lod:s,nonLod:t,lodAbove:w,lodBase:a})})}}function ca(B){const I=new DataView(B.buffer).getUint32(0,!0);if((I&16777215)===7957616)return HI.PLY;if((I&16777215)===559903){const g=Xc(B,4);return new DataView(g.buffer).getUint32(0,!0)===1347635022?HI.SPZ:void 0}if(I===67324752)return Yy(B)?HI.PCSOGSZIP:void 0;if(I===809779538)return HI.RAD}function Uy(B){const A=B.split(/[?#]/,1)[0],I=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),g=A.slice(I+1),Q=g.lastIndexOf(".");return Q<=0||Q===g.length-1?"":g.slice(Q+1).toLowerCase()}function Ly(B){const A=Uy(B);if(A==="ply")return HI.PLY;if(A==="spz")return HI.SPZ;if(A==="splat")return HI.SPLAT;if(A==="ksplat")return HI.KSPLAT;if(A==="sog")return HI.PCSOGSZIP;if(A==="rad")return HI.RAD}function Hy(B){try{let A;if(typeof B=="string")A=B;else{const Q=B instanceof ArrayBuffer?new Uint8Array(B):B;if(Q.length>65536)return;A=new TextDecoder().decode(Q)}const I=JSON.parse(A);if(!I||typeof I!="object"||Array.isArray(I))return;const g=I.version===2;for(const Q of["means","scales","quats","sh0"]){if(!I[Q]||typeof I[Q]!="object"||Array.isArray(I[Q]))return;if(g){if(!I[Q].files||(Q==="scales"||Q==="sh0")&&!I[Q].codebook||Q==="means"&&(!I[Q].mins||!I[Q].maxs))return}else if(!I[Q].shape||!I[Q].files||Q!=="quats"&&(!I[Q].mins||!I[Q].maxs))return}return I}catch{return}}function Yy(B){try{const A=B instanceof ArrayBuffer?new Uint8Array(B):B;let I=null;const g=tc(A,{filter:({name:C})=>C.split(/[\\/]/).pop()==="meta.json"?(I=C,!0):!1});if(!I)return;const Q=Hy(g[I]);return Q?{name:I,json:Q}:void 0}catch{return}}const RQ=class Bg{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.maxSh=3,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new to({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new UC({key:"rgbMinMaxLnScaleMinMax",value:new F.Vector4(0,1,KI,dI),update:I=>{var g,Q,C,E;return I.set(((g=this.splatEncoding)==null?void 0:g.rgbMin)??0,((Q=this.splatEncoding)==null?void 0:Q.rgbMax)??1,((C=this.splatEncoding)==null?void 0:C.lnScaleMin)??KI,((E=this.splatEncoding)==null?void 0:E.lnScaleMax)??dI),I}}),this.dynoNumSh=new xg({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.dynoShMax=new pg({key:"shMax",value:new F.Vector3,update:I=>{var g,Q,C;return I.set(((g=this.splatEncoding)==null?void 0:g.sh1Max)??1,((Q=this.splatEncoding)==null?void 0:Q.sh2Max)??1,((C=this.splatEncoding)==null?void 0:C.sh3Max)??1),I}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.splatEncoding=A.splatEncoding,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.splatEncoding=A.splatEncoding??this.splatEncoding,this.lodSplats=A.lodSplats,A.packedArray?(this.packedArray=A.packedArray,this.numSplats=A.numSplats??this.packedArray.length/4,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0)}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new so;if((g||I||E)&&await w.loadInternalAsync({packedSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:E,streamLength:i,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.target&&(this.target.dispose(),this.target.texture.source.data=null,this.target=null),this.source&&(this.source.dispose(),this.source.source.data=null,this.source=null),this.packedArray=null;for(const A in this.extra){const I=this.extra[A];if(I instanceof kI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?this.extra.sh3?3:2:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=xB(this.dyno,A);if(this.hasRgbDir()&&I){const Q=XI(g).outputs.center,C=pE($Q(Q,I)),{sh1Texture:E,sh2Texture:i,sh3Texture:D}=this.ensureShTextures();let{rgb:o}=ha({coord:$w(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:E,sh2Texture:i,sh3Texture:D,shMax:this.dynoShMax});o=rQ(o,XI(g).outputs.rgb),g=zQ({gsplat:g,rgb:o})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let Q=this.extra.sh1;const{width:C,height:E,depth:i,maxSplats:D}=FA(Q.length/2);if(Q.length<D*2){const s=new Uint32Array(D*2);s.set(Q),this.extra.sh1=s,Q=s}const o=new F.DataArrayTexture(Q,C,E,i);o.format=F.RGIntegerFormat,o.type=F.UnsignedIntType,o.internalFormat="RG32UI",o.needsUpdate=!0,A=new rI({value:o,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let Q=this.extra.sh2;const{width:C,height:E,depth:i,maxSplats:D}=FA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh2=s,Q=s}const o=new F.DataArrayTexture(Q,C,E,i);o.format=F.RGBAIntegerFormat,o.type=F.UnsignedIntType,o.internalFormat="RGBA32UI",o.needsUpdate=!0,I=new rI({value:o,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3Texture;if(!g){let Q=this.extra.sh3;const{width:C,height:E,depth:i,maxSplats:D}=FA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh3=s,Q=s}const o=new F.DataArrayTexture(Q,C,E,i);o.format=F.RGBAIntegerFormat,o.type=F.UnsignedIntType,o.internalFormat="RGBA32UI",o.needsUpdate=!0,g=new rI({value:o,key:"sh3"}),this.extra.sh3Texture=g}return{sh1Texture:A,sh2Texture:I,sh3Texture:g}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||I>g){this.maxSplats=FA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4);this.packedArray&&Q.set(this.packedArray),this.packedArray=Q}return this.packedArray}ensureSplatsSh(A,I){let g,Q;if(A===0)return this.ensureSplats(I);if(A===1)g=2,Q="sh1";else if(A===2)g=4,Q="sh2";else if(A===3)g=4,Q="sh3";else throw new Error(`Invalid level: ${A}`);let C=this.extra[Q]?this.extra[Q].length/g:0;const E=I<=C?C:Math.max(I,2*C);if(!this.extra[Q]||E>C){C=FA(E).maxSplats;const i=new Uint32Array(C*g);this.extra[Q]&&i.set(this.extra[Q]),this.extra[Q]=i}return this.extra[Q]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return dE(this.packedArray,A,this.splatEncoding)}setSplat(A,I,g,Q,C,E){const i=this.ensureSplats(A+1);rD(i,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,E.r,E.g,E.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const E=this.ensureSplats(this.numSplats+1);rD(E,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let I=0;I<this.numSplats;++I){const g=dE(this.packedArray,I,this.splatEncoding);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.target&&this.target.dispose();const I=FA(A??1),{width:g,height:Q,depth:C}=I;return this.maxSplats=I.maxSplats,this.target=new F.WebGLArrayRenderTarget(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:F.NearestFilter,minFilter:F.NearestFilter}),this.target.texture.format=F.RGBAIntegerFormat,this.target.texture.type=F.UnsignedIntType,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,E=Math.ceil(Q/_)*_;return I+=E,{base:C,count:Q}});return{maxSplats:I,mapping:g}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():Bg.getEmptyArray}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.maxSplats!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:I,depth:g}=FA(this.maxSplats);this.source=new F.DataArrayTexture(this.packedArray,A,I,g),this.source.format=F.RGBAIntegerFormat,this.source.type=F.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}prepareProgramMaterial(A){let I=Bg.generatorProgram.get(A);if(!I){const Q=DI({index:"int"},{},({index:C},E,{roots:i})=>{A.inputs.index=C;const D=A.outputs.gsplat,o=Qa(D,this.dynoRgbMinMaxLnScaleMinMax);i.push(o)});Bg.programTemplate||(Bg.programTemplate=new WE(EB().computeUvec4Template)),I=new Co({graph:Q,inputs:{index:"_index"},outputs:{output:"target"},template:Bg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),Bg.generatorProgram.set(A,I)}const g=I.prepareMaterial();return Bg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}generate({generator:A,base:I,count:g,renderer:Q}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(I+g>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:C,material:E}=this.prepareProgramMaterial(A);C.update();const i=this.saveRenderState(Q),D=Math.ceil((I+g)/_)*_,o=_*sg;for(E.uniforms.targetBase.value=I,E.uniforms.targetCount.value=g;I<D;){const s=Math.floor(I/o);E.uniforms.targetLayer.value=s;const t=s*o,w=Math.floor((I-t)/_),a=Math.min(sg,Math.ceil((D-t)/_));this.target.scissor.set(0,w,_,a-w),Q.setRenderTarget(this.target,s),Q.xr.enabled=!1,Q.autoClear=!1,Bg.fullScreenQuad.render(Q),I+=_*(a-w)}return this.resetRenderState(Q,i),{nextBase:D}}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=this.packedArray.slice(),C=A?(await A.getArray()).slice():void 0,E={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},i=await VE.withWorker(async o=>await o.call(I?"qualityLodPackedSplats":"tinyLodPackedSplats",{numSplats:this.numSplats,packedArray:Q,extra:E,lodBase:g,rgba:C,encoding:this.splatEncoding??OE})),D=new Bg(i);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}extractSplats(A,I){const g=FA(A.length).maxSplats,Q=new Bg({maxSplats:g});for(let C=0;C<A.length;C++){const E=this.getSplat(A[C]);if(I){let i=(A[C]>>>16)*.61803398875;i=i-Math.floor(i);const D=Math.max(0,Math.min(1,Math.abs(i*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(i*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(i*6-1)-1));E.color.r*=D,E.color.g*=o,E.color.b*=s}Q.pushSplat(E.center,E.scales,E.quaternion,E.opacity,E.color)}return Q}};RQ.getEmptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();RQ.programTemplate=null;RQ.generatorProgram=new WeakMap;RQ.fullScreenQuad=new qD.FullScreenQuad(new F.RawShaderMaterial({visible:!1}));RQ.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*4),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGBAIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();RQ.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=FA(1),Q=new Uint32Array(g*2),C=new F.DataArrayTexture(Q,B,A,I);return C.format=F.RGIntegerFormat,C.type=F.UnsignedIntType,C.internalFormat="RG32UI",C.needsUpdate=!0,C})();let Gg=RQ;class to extends kI{constructor({packedSplats:A}={}){super({key:"packedSplats",type:ZE,globals:()=>[Bo],value:{textureArray:Gg.getEmptyArray,numSplats:0,rgbMinMaxLnScaleMinMax:new F.Vector4(0,1,KI,dI),lodOpacity:!1},update:I=>{var g,Q,C,E,i,D,o,s,t,w,a,y;return I.textureArray=((g=this.packedSplats)==null?void 0:g.getTexture())??Gg.getEmptyArray,I.numSplats=((Q=this.packedSplats)==null?void 0:Q.numSplats)??0,I.rgbMinMaxLnScaleMinMax.set(((E=(C=this.packedSplats)==null?void 0:C.splatEncoding)==null?void 0:E.rgbMin)??0,((D=(i=this.packedSplats)==null?void 0:i.splatEncoding)==null?void 0:D.rgbMax)??1,((s=(o=this.packedSplats)==null?void 0:o.splatEncoding)==null?void 0:s.lnScaleMin)??KI,((w=(t=this.packedSplats)==null?void 0:t.splatEncoding)==null?void 0:w.lnScaleMax)??dI),I.lodOpacity=((y=(a=this.packedSplats)==null?void 0:a.splatEncoding)==null?void 0:y.lodOpacity)??!1,I}}),this.packedSplats=A}}const Ky=lA(`
12784
12784
  vec3 evaluatePackedSH1(uvec2 packedData, vec3 viewDir, float sh1Max) {
12785
12785
  // Extract sint7 values packed into 2 x uint32
12786
12786
  vec3 sh1_0 = vec3(ivec3(
@@ -12804,7 +12804,7 @@ void main() {\r
12804
12804
  + sh1_2 * (-0.4886025 * viewDir.x);
12805
12805
  return rgb * (sh1Max / 63.0);
12806
12806
  }
12807
- `),Jy=lA(`
12807
+ `),dy=lA(`
12808
12808
  vec3 evaluatePackedSH2(uvec4 packedData, vec3 viewDir, float sh2Max) {
12809
12809
  // Extract sint8 values packed into 4 x uint32
12810
12810
  vec3 sh2_0 = vec3(ivec3(
@@ -12840,7 +12840,7 @@ void main() {\r
12840
12840
  + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y));
12841
12841
  return rgb * (sh2Max / 127.0);
12842
12842
  }
12843
- `),Uy=lA(`
12843
+ `),ly=lA(`
12844
12844
  vec3 evaluatePackedSH3(uvec4 packedData, vec3 viewDir, float sh3Max) {
12845
12845
  // Extract sint6 values packed into 4 x uint32
12846
12846
  vec3 sh3_0 = vec3(ivec3(
@@ -12895,7 +12895,7 @@ void main() {\r
12895
12895
  + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy));
12896
12896
  return rgb * (sh3Max / 31.0);
12897
12897
  }
12898
- `);function oa({coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3Texture:C,shMax:E}){return new tA({inTypes:{coord:"ivec3",viewDir:"vec3",numSh:"int",sh1Texture:"usampler2DArray",sh2Texture:"usampler2DArray",sh3Texture:"usampler2DArray",shMax:"vec3"},outTypes:{rgb:"vec3"},inputs:{coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3Texture:C,shMax:E},globals:()=>[Ny,Jy,Uy],statements:({inputs:i,outputs:D})=>{const o=["vec3 rgb = vec3(0.0);"];return i.sh1Texture&&(o.push(...GA(`
12898
+ `);function ha({coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3Texture:C,shMax:E}){return new tA({inTypes:{coord:"ivec3",viewDir:"vec3",numSh:"int",sh1Texture:"usampler2DArray",sh2Texture:"usampler2DArray",sh3Texture:"usampler2DArray",shMax:"vec3"},outTypes:{rgb:"vec3"},inputs:{coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3Texture:C,shMax:E},globals:()=>[Ky,dy,ly],statements:({inputs:i,outputs:D})=>{const o=["vec3 rgb = vec3(0.0);"];return i.sh1Texture&&(o.push(...GA(`
12899
12899
  if (${i.numSh} >= 1) {
12900
12900
  vec3 sh1Rgb = evaluatePackedSH1(texelFetch(${i.sh1Texture}, ${i.coord}, 0).rg, ${i.viewDir}, ${i.shMax}.x);
12901
12901
  rgb += sh1Rgb;
@@ -12908,7 +12908,7 @@ void main() {\r
12908
12908
  vec3 sh3Rgb = evaluatePackedSH3(texelFetch(${i.sh3Texture}, ${i.coord}, 0), ${i.viewDir}, ${i.shMax}.z);
12909
12909
  rgb += sh3Rgb;
12910
12910
  }
12911
- `)),o.push("}")),o.push("}")),o.push(`${D.rgb} = rgb;`),o}}).outputs}const oo=class HB{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback16=new Uint16Array(0),this.readback32=new Uint32Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new F.Matrix4,A.target){const{width:I,height:g,doubleBuffer:Q}=A.target,C=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=C,I*C>8192||g*C>8192)throw new Error("Target size too large");this.target=new F.WebGLRenderTarget(I*C,g*C,{format:F.RGBAFormat,type:F.UnsignedByteType,colorSpace:F.SRGBColorSpace}),Q&&(this.back=new F.WebGLRenderTarget(I*C,g*C,{format:F.RGBAFormat,type:F.UnsignedByteType,colorSpace:F.SRGBColorSpace})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.sort32=A.sort32,this.stochastic=A.stochastic??!1,this.orderingFreelist=new kn({allocate:I=>new Uint32Array(I),valid:(I,g)=>I.length===g}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.spark.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.spark.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.spark.autoViewpoints=this.spark.autoViewpoints.filter(I=>I!==this)),this.autoUpdate=A}async prepare({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}){for(g?this.viewToWorld=g:(this.camera=I??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));Q??!0;){const i=C?this.viewToWorld:this.spark.matrixWorld;if(this.spark.updateInternal({scene:A,originToWorld:i}))break;await new Promise(o=>setTimeout(o,10))}const E=this.spark.active;E.refCount+=1,await this.sortUpdate({accumulator:E,viewToWorld:this.viewToWorld}),this.spark.releaseAccumulator(E)}renderTarget({scene:A,camera:I}){var g;const Q=this.back??this.target;if(!Q)throw new Error("Must initialize SparkViewpoint with target");if(I=I??this.camera,!I)throw new Error("Must provide camera");if(I instanceof F.PerspectiveCamera){const E=new F.PerspectiveCamera().copy(I,!1);E.aspect=Q.width/Q.height,E.updateProjectionMatrix(),I=E}this.viewToWorld=I.matrixWorld.clone();const C=this.spark.renderer.getRenderTarget();try{this.spark.renderer.setRenderTarget(Q),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,I)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(C)}Q!==this.target&&([this.target,this.back]=[this.back,this.target]),(g=this.onTextureUpdated)==null||g.call(this,Q.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,this.superPixels);const{superXY:Q}=this;if(Q===1)return this.superPixels;const C=A/Q,E=I/Q,i=C*E*4;(!this.pixels||this.pixels.length<i)&&(this.pixels=new Uint8Array(i));const{superPixels:D,pixels:o}=this,s=Q*Q;for(let t=0;t<E;t++){const w=t*C;for(let a=0;a<C;a++){const y=a*Q;let R=0,n=0,h=0,G=0;for(let M=0;M<Q;M++){const k=(t*Q+M)*this.target.width;for(let J=0;J<Q;J++){const U=(k+y+J)*4;R+=D[U],n+=D[U+1],h+=D[U+2],G+=D[U+3]}}const r=(w+a)*4;o[r]=R/s,o[r+1]=n/s,o[r+2]=h/s,o[r+3]=G/s}}return o}async prepareRenderPixels({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}){return await this.prepare({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}),this.renderTarget({scene:A,camera:I}),this.readTarget()}autoPoll({accumulator:A}){var I,g,Q;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let C=!1,E=!1;if(!this.display)C=!0;else if(A){C=!0;const{mappingVersion:D}=this.display.accumulator;A.mappingVersion===D&&(A.refCount+=1,this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,this.display.viewToWorld.copy(this.viewToWorld),E=!0,this.spark.viewpoint===this&&this.spark.prepareViewpoint(this))}const i=((I=this.sorting)==null?void 0:I.viewToWorld)??((g=this.display)==null?void 0:g.viewToWorld);i&&!rD({matrix1:this.viewToWorld,matrix2:i,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(C=!0),C&&(A&&(A.refCount+=1),(Q=this.pending)!=null&&Q.accumulator&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:E},this.driveSort())}async driveSort(){for(var A;;){if(this.sorting||!this.pending)return;const{viewToWorld:I,displayed:g}=this.pending;let Q=this.pending.accumulator;if(Q||(Q=((A=this.display)==null?void 0:A.accumulator)??this.spark.active,Q.refCount+=1),this.pending=null,!Q)throw new Error("No accumulator to sort");this.sorting={viewToWorld:I},await this.sortUpdate({accumulator:Q,viewToWorld:I,displayed:g}),this.sorting=null,this.spark.releaseAccumulator(Q)}}async sortUpdate({accumulator:A,viewToWorld:I,displayed:g=!1}){if(this.sortingCheck)throw new Error("Only one sort at a time");this.sortingCheck=!0,A=A??this.spark.active;const{numSplats:Q,maxSplats:C}=A.splats;let E=0,i=this.orderingFreelist.alloc(C);if(this.stochastic){E=Q;for(let D=0;D<Q;++D)i[D]=D}else if(Q>0){const{reader:D,doubleSortReader:o,sort32Reader:s,dynoSortRadial:t,dynoOrigin:w,dynoDirection:a,dynoDepthBias:y,dynoSort360:R,dynoSplats:n}=HB.makeSorter(),h=this.sort32??!1;let G;if(h)this.readback32=D.ensureBuffer(C,this.readback32),G=this.readback32;else{const Y=Math.ceil(C/2);this.readback16=D.ensureBuffer(Y,this.readback16),G=this.readback16}const r=A.toWorld.clone().invert(),M=I.clone().premultiply(r);t.value=this.sort360?!0:this.sortRadial,w.value.set(0,0,0).applyMatrix4(M),a.value.set(0,0,-1).applyMatrix4(M).sub(w.value).normalize(),y.value=this.depthBias??1,R.value=this.sort360??!1,n.packedSplats=A.splats;const k=h?s:o,J=h?Q:Math.ceil(Q/2);await D.renderReadback({renderer:this.spark.renderer,reader:k,count:J,readback:G});const U=await Tn(async Y=>{const d=h?"sort32Splats":"sortDoubleSplats";return Y.call(d,{maxSplats:C,numSplats:Q,readback:G,ordering:i})});h?this.readback32=U.readback:this.readback16=U.readback,i=U.ordering,E=U.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:I,ordering:i,activeSplats:E,displayed:g}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:I,ordering:g,activeSplats:Q,displayed:C=!1}){if(!this.display)A.refCount+=1,this.display={accumulator:A,viewToWorld:I,geometry:new nD(g,Q)};else{!C&&A!==this.display.accumulator&&(A.refCount+=1,this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=I;const E=this.display.geometry.ordering;E.length===g.length?this.display.geometry.update(g,Q):(this.display.geometry.dispose(),this.display.geometry=new nD(g,Q)),this.orderingFreelist.free(E)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!HB.dynos){const A=new RC({value:!0}),I=new pg({value:new F.Vector3}),g=new pg({value:new F.Vector3}),Q=new _Q({value:1}),C=new RC({value:!1}),E=new Do,i=new UC,D=DI({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("No index");const t={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},w=SQ(s,OQ("int",2)),a=fB(E,w),y=bi({gsplat:a,...t}),R=fB(E,rQ(w,OQ("int",1))),n=bi({gsplat:R,...t}),h=Lh({vectorType:"vec2",x:y,y:n});return{rgba8:Ls(Mh(h))}}),o=DI({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("No index");const t={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},w=fB(E,s),a=bi({gsplat:w,...t});return{rgba8:Ls(kh(a))}});HB.dynos={dynoSortRadial:A,dynoOrigin:I,dynoDirection:g,dynoDepthBias:Q,dynoSort360:C,dynoSplats:E,reader:i,doubleSortReader:D,sort32Reader:o}}return HB.dynos}};oo.EMPTY_TEXTURE=new F.Texture;oo.dynos=null;let ND=oo;const Ly=lA(`
12911
+ `)),o.push("}")),o.push("}")),o.push(`${D.rgb} = rgb;`),o}}).outputs}const wo=class YB{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback16=new Uint16Array(0),this.readback32=new Uint32Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new F.Matrix4,A.target){const{width:I,height:g,doubleBuffer:Q}=A.target,C=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=C,I*C>8192||g*C>8192)throw new Error("Target size too large");this.target=new F.WebGLRenderTarget(I*C,g*C,{format:F.RGBAFormat,type:F.UnsignedByteType,colorSpace:F.SRGBColorSpace}),Q&&(this.back=new F.WebGLRenderTarget(I*C,g*C,{format:F.RGBAFormat,type:F.UnsignedByteType,colorSpace:F.SRGBColorSpace})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.sort32=A.sort32,this.stochastic=A.stochastic??!1,this.orderingFreelist=new Hc({allocate:I=>new Uint32Array(I),valid:(I,g)=>I.length===g}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.spark.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.spark.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.spark.autoViewpoints=this.spark.autoViewpoints.filter(I=>I!==this)),this.autoUpdate=A}async prepare({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}){for(g?this.viewToWorld=g:(this.camera=I??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));Q??!0;){const i=C?this.viewToWorld:this.spark.matrixWorld;if(this.spark.updateInternal({scene:A,originToWorld:i}))break;await new Promise(o=>setTimeout(o,10))}const E=this.spark.active;E.refCount+=1,await this.sortUpdate({accumulator:E,viewToWorld:this.viewToWorld}),this.spark.releaseAccumulator(E)}renderTarget({scene:A,camera:I}){var g;const Q=this.back??this.target;if(!Q)throw new Error("Must initialize SparkViewpoint with target");if(I=I??this.camera,!I)throw new Error("Must provide camera");if(I instanceof F.PerspectiveCamera){const E=new F.PerspectiveCamera().copy(I,!1);E.aspect=Q.width/Q.height,E.updateProjectionMatrix(),I=E}this.viewToWorld=I.matrixWorld.clone();const C=this.spark.renderer.getRenderTarget();try{this.spark.renderer.setRenderTarget(Q),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,I)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(C)}Q!==this.target&&([this.target,this.back]=[this.back,this.target]),(g=this.onTextureUpdated)==null||g.call(this,Q.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,this.superPixels);const{superXY:Q}=this;if(Q===1)return this.superPixels;const C=A/Q,E=I/Q,i=C*E*4;(!this.pixels||this.pixels.length<i)&&(this.pixels=new Uint8Array(i));const{superPixels:D,pixels:o}=this,s=Q*Q;for(let t=0;t<E;t++){const w=t*C;for(let a=0;a<C;a++){const y=a*Q;let r=0,c=0,h=0,G=0;for(let N=0;N<Q;N++){const k=(t*Q+N)*this.target.width;for(let J=0;J<Q;J++){const U=(k+y+J)*4;r+=D[U],c+=D[U+1],h+=D[U+2],G+=D[U+3]}}const R=(w+a)*4;o[R]=r/s,o[R+1]=c/s,o[R+2]=h/s,o[R+3]=G/s}}return o}async prepareRenderPixels({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}){return await this.prepare({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}),this.renderTarget({scene:A,camera:I}),this.readTarget()}autoPoll({accumulator:A}){var I,g,Q;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let C=!1,E=!1;if(!this.display)C=!0;else if(A){C=!0;const{mappingVersion:D}=this.display.accumulator;A.mappingVersion===D&&(A.refCount+=1,this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,this.display.viewToWorld.copy(this.viewToWorld),E=!0,this.spark.viewpoint===this&&this.spark.prepareViewpoint(this))}const i=((I=this.sorting)==null?void 0:I.viewToWorld)??((g=this.display)==null?void 0:g.viewToWorld);i&&!SD({matrix1:this.viewToWorld,matrix2:i,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(C=!0),C&&(A&&(A.refCount+=1),(Q=this.pending)!=null&&Q.accumulator&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:E},this.driveSort())}async driveSort(){for(var A;;){if(this.sorting||!this.pending)return;const{viewToWorld:I,displayed:g}=this.pending;let Q=this.pending.accumulator;if(Q||(Q=((A=this.display)==null?void 0:A.accumulator)??this.spark.active,Q.refCount+=1),this.pending=null,!Q)throw new Error("No accumulator to sort");this.sorting={viewToWorld:I},await this.sortUpdate({accumulator:Q,viewToWorld:I,displayed:g}),this.sorting=null,this.spark.releaseAccumulator(Q)}}async sortUpdate({accumulator:A,viewToWorld:I,displayed:g=!1}){if(this.sortingCheck)throw new Error("Only one sort at a time");this.sortingCheck=!0,A=A??this.spark.active;const{numSplats:Q,maxSplats:C}=A.splats;let E=0,i=this.orderingFreelist.alloc(C);if(this.stochastic){E=Q;for(let D=0;D<Q;++D)i[D]=D}else if(Q>0){const{reader:D,doubleSortReader:o,sort32Reader:s,dynoSortRadial:t,dynoOrigin:w,dynoDirection:a,dynoDepthBias:y,dynoSort360:r,dynoSplats:c}=YB.makeSorter(),h=this.sort32??!1;let G;if(h)this.readback32=D.ensureBuffer(C,this.readback32),G=this.readback32;else{const H=Math.ceil(C/2);this.readback16=D.ensureBuffer(H,this.readback16),G=this.readback16}const R=A.toWorld.clone().invert(),N=I.clone().premultiply(R);t.value=this.sort360?!0:this.sortRadial,w.value.set(0,0,0).applyMatrix4(N),a.value.set(0,0,-1).applyMatrix4(N).sub(w.value).normalize(),y.value=this.depthBias??1,r.value=this.sort360??!1,c.packedSplats=A.splats;const k=h?s:o,J=h?Q:Math.ceil(Q/2);await D.renderReadback({renderer:this.spark.renderer,reader:k,count:J,readback:G});const U=await Wc(async H=>{const d=h?"sort32Splats":"sortDoubleSplats";return H.call(d,{maxSplats:C,numSplats:Q,readback:G,ordering:i})});h?this.readback32=U.readback:this.readback16=U.readback,i=U.ordering,E=U.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:I,ordering:i,activeSplats:E,displayed:g}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:I,ordering:g,activeSplats:Q,displayed:C=!1}){if(!this.display)A.refCount+=1,this.display={accumulator:A,viewToWorld:I,geometry:new hD(g,Q)};else{!C&&A!==this.display.accumulator&&(A.refCount+=1,this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=I;const E=this.display.geometry.ordering;E.length===g.length?this.display.geometry.update(g,Q):(this.display.geometry.dispose(),this.display.geometry=new hD(g,Q)),this.orderingFreelist.free(E)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!YB.dynos){const A=new FC({value:!0}),I=new pg({value:new F.Vector3}),g=new pg({value:new F.Vector3}),Q=new _Q({value:1}),C=new FC({value:!1}),E=new to,i=new LC,D=DI({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("No index");const t={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},w=SQ(s,OQ("int",2)),a=xB(E,w),y=mi({gsplat:a,...t}),r=xB(E,rQ(w,OQ("int",1))),c=mi({gsplat:r,...t}),h=fh({vectorType:"vec2",x:y,y:c});return{rgba8:ds(Yh(h))}}),o=DI({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("No index");const t={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},w=xB(E,s),a=mi({gsplat:w,...t});return{rgba8:ds(Hh(a))}});YB.dynos={dynoSortRadial:A,dynoOrigin:I,dynoDirection:g,dynoDepthBias:Q,dynoSort360:C,dynoSplats:E,reader:i,doubleSortReader:D,sort32Reader:o}}return YB.dynos}};wo.EMPTY_TEXTURE=new F.Texture;wo.dynos=null;let JD=wo;const fy=lA(`
12912
12912
  float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) {
12913
12913
  if (!isGsplatActive(gsplat.flags)) {
12914
12914
  return INFINITY;
@@ -12922,9 +12922,9 @@ void main() {\r
12922
12922
 
12923
12923
  return sortRadial ? length(center) : biasedDepth;
12924
12924
  }
12925
- `);function bi({gsplat:B,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C}){return _D({inTypes:{gsplat:yA,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[lI,Ly],inputs:{gsplat:B,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},statements:({inputs:E,outputs:i})=>{const{gsplat:D,sortRadial:o,sortOrigin:s,sortDirection:t,sortDepthBias:w,sort360:a}=E;return GA(`
12925
+ `);function mi({gsplat:B,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C}){return Io({inTypes:{gsplat:yA,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[lI,fy],inputs:{gsplat:B,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},statements:({inputs:E,outputs:i})=>{const{gsplat:D,sortRadial:o,sortOrigin:s,sortDirection:t,sortDepthBias:w,sort360:a}=E;return GA(`
12926
12926
  ${i.metric} = computeSort(${D}, ${o}, ${s}, ${t}, ${w}, ${a});
12927
- `)}}).outputs.metric}class rE{constructor(){this.splats=new Gg,this.toWorld=new F.Matrix4,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:I,generators:g,forceUpdate:Q,originToWorld:C}){const E=this.mapping.reduce((o,s)=>(o.set(s.node,s),o),new Map);let i=0,D=0;for(const{node:o,generator:s,version:t,base:w,count:a}of g){const y=E.get(o);if((Q||s!==y?.generator||t!==y?.version||w!==y?.base||a!==y?.count)&&s&&a>0){const R=I.apply(s);try{this.splats.generate({generator:R,base:w,count:a,renderer:A})}catch(n){o.generator=void 0,o.generatorError=n}i+=1}D=Math.max(D,w+a)}return this.splats.numSplats=D,this.toWorld.copy(C),this.mapping=g,i!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:I,base:g,count:Q},C)=>{const{node:E,base:i,count:D}=A.mapping[C];return I===E&&g===i&&Q===D})}}const us=5,so=class tI extends F.Mesh{constructor(A){const I=tI.makeUniforms(),g=EB(),Q=A.premultipliedAlpha??!0,C=new F.ShaderMaterial({glslVersion:F.GLSL3,vertexShader:g.oldSplatVertex,fragmentShader:g.oldSplatFragment,uniforms:I,premultipliedAlpha:Q,transparent:!0,depthTest:!0,depthWrite:!1,side:F.DoubleSide});super(qs,C),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new JC({value:new F.Quaternion}),this.translateToAccumulator=new pg({value:new F.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.lastStochastic=null,this.pendingUpdate={scene:null,originToWorld:new F.Matrix4,timeoutId:-1},this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=C,this.uniforms=I;const E=DI({gsplat:yA},{gsplat:yA},({gsplat:i})=>{if(!i)throw new Error("gsplat not defined");return i=Ow(i,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:i}});this.modifier=new Ea(E),this.premultipliedAlpha=Q,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...TE},this.active=new rE,this.active.refCount=1,this.accumulatorCount=1,this.freeAccumulators=[];for(let i=0;i<1;++i)this.freeAccumulators.push(new rE),this.accumulatorCount+=1;this.defaultView=new ND({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?xw(A.clock):new F.Clock}static makeUniforms(){return{renderSize:{value:new F.Vector2},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new F.Quaternion},renderToViewPos:{value:new F.Vector3},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},stochastic:{value:!1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:tI.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new F.Matrix2},splatTexAdd:{value:new F.Vector2},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:Gg.getEmptyArray},rgbMinMaxLnScaleMinMax:{value:new F.Vector4},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<us}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=us)return null;A=new rE,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new ND({...A,spark:this})}onBeforeRender(A,I,g){var Q,C;const E=this.time??this.clock.getElapsedTime(),i=E-(this.viewpoint.lastTime??E);this.viewpoint.lastTime=E;const D=A.info.render.frame,o=D!==this.lastFrame;this.lastFrame=D;const s=this.viewpoint;if(s===this.defaultView){if(o)if(!A.xr.isPresenting)this.defaultView.viewToWorld=g.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const R=A.xr.getCamera().cameras;this.defaultCameras=R.map(n=>n.matrixWorld),this.defaultView.viewToWorld=Hy(this.defaultCameras)??new F.Matrix4}this.autoUpdate&&this.update({scene:I,viewToWorld:this.defaultView.viewToWorld})}if(o&&(this.material.premultipliedAlpha!==this.premultipliedAlpha&&(this.material.premultipliedAlpha=this.premultipliedAlpha,this.material.needsUpdate=!0),this.uniforms.time.value=E,this.uniforms.deltaTime.value=i,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,s.display&&s.stochastic&&(this.geometry.instanceCount=this.uniforms.numSplats.value)),s.target)this.uniforms.renderSize.value.set(s.target.width,s.target.height);else{const R=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(R.x===1&&R.y===1){const n=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;n&&(R.x=n.framebufferWidth,R.y=n.framebufferHeight)}}const t=g;if(this.uniforms.near.value=t.near,this.uniforms.far.value=t.far,this.uniforms.encodeLinear.value=s.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.minPixelRadius.value=this.minPixelRadius,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.stochastic.value=s.stochastic,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.lastStochastic!==!s.stochastic&&(this.lastStochastic=!s.stochastic,this.material.transparent=!s.stochastic,this.material.depthWrite=s.stochastic,this.material.needsUpdate=!0),this.splatTexture){const{enable:R,texture:n,multiply:h,add:G,near:r,far:M,mid:k}=this.splatTexture;R&&n?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=n,h?this.uniforms.splatTexMul.value.fromArray(h.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set(G?.x??.5,G?.y??.5),this.uniforms.splatTexNear.value=r??this.uniforms.near.value,this.uniforms.splatTexFar.value=M??this.uniforms.far.value,this.uniforms.splatTexMid.value=k??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=tI.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=tI.EMPTY_SPLAT_TEXTURE;const w=((C=s.display)==null?void 0:C.accumulator.toWorld)??new F.Matrix4,a=g.matrixWorld.clone().invert();w.clone().premultiply(a).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new F.Vector3)}prepareViewpoint(A){var I,g,Q,C;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:E,geometry:i}=this.viewpoint.display;this.uniforms.numSplats.value=E.splats.numSplats,this.uniforms.packedSplats.value=E.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((I=E.splats.splatEncoding)==null?void 0:I.rgbMin)??0,((g=E.splats.splatEncoding)==null?void 0:g.rgbMax)??1,((Q=E.splats.splatEncoding)==null?void 0:Q.lnScaleMin)??KI,((C=E.splats.splatEncoding)==null?void 0:C.lnScaleMax)??dI),this.geometry=i,this.material.transparent=!this.viewpoint.stochastic,this.material.depthWrite=this.viewpoint.stochastic,this.material.needsUpdate=!0}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=Gg.getEmptyArray,this.geometry=qs}update({scene:A,viewToWorld:I}){const g=this.matrixWorld;this.preUpdate?this.updateInternal({scene:A,originToWorld:g.clone(),viewToWorld:I}):(this.pendingUpdate.scene=A,this.pendingUpdate.originToWorld.copy(g),this.pendingUpdate.timeoutId===-1&&(this.pendingUpdate.timeoutId=setTimeout(()=>{const{scene:Q,originToWorld:C}=this.pendingUpdate;this.pendingUpdate.scene=null,this.pendingUpdate.timeoutId=-1,this.updateInternal({scene:Q,originToWorld:C,viewToWorld:I})&&this.renderer.getContext().flush()},1)))}updateInternal({scene:A,originToWorld:I,viewToWorld:g}){var Q;if(!this.canAllocAccumulator())return!1;I||(I=this.active.toWorld),g=g??I.clone();const C=this.time??this.clock.getElapsedTime(),E=C-(this.lastUpdateTime??C);this.lastUpdateTime=C;const i=this.active.mapping.reduce((R,n)=>(R.set(n.node,n),R),new Map),{generators:D,visibleGenerators:o,globalEdits:s}=this.compileScene(A);for(const R of D)(Q=R.frameUpdate)==null||Q.call(R,{renderer:this.renderer,object:R,time:C,deltaTime:E,viewToWorld:g,globalEdits:s});const t=new Set(o.map(R=>R.uuid));for(const R of D){const n=i.get(R),G=R.generator&&t.has(R.uuid)?R.numSplats:0;(this.needsUpdate||R.generator!==n?.generator||G!==n?.count)&&R.updateVersion()}const w=!rD({matrix1:I,matrix2:this.active.toWorld,maxDistance:this.originDistance}),a=this.needsUpdate||w||D.length!==i.size||D.some(R=>{var n;return R.version!==((n=i.get(R))==null?void 0:n.version)});this.needsUpdate=!1;let y=null;if(a){if(y=this.maybeAllocAccumulator(),!y)throw new Error("Unreachable");const R=!rD({matrix1:I,matrix2:y.toWorld,maxDistance:1e-5,minCoorient:.99999}),h=o.map((U,Y)=>{const d=i.get(U);return d?[U.version-d.version,d.base,U]:[Number.POSITIVE_INFINITY,U.version,U]}).sort((U,Y)=>U[0]!==Y[0]?U[0]-Y[0]:U[1]-Y[1]).map(([U,Y,d])=>d),G=h.map(U=>U.numSplats),{maxSplats:r,mapping:M}=y.splats.generateMapping(G),k=h.map((U,Y)=>{const{base:d,count:H}=M[Y];return{node:U,generator:U.generator,version:U.version,base:d,count:H}});I.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new F.Vector3),y.ensureGenerate(r),y.splats.splatEncoding={...this.splatEncoding},y.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:k,forceUpdate:R,originToWorld:I}),y.splatsVersion=this.active.splatsVersion+1;const J=y.hasCorrespondence(this.active);y.mappingVersion=this.active.mappingVersion+(J?0:1),this.releaseAccumulator(this.active),this.active=y,this.prepareViewpoint()}return setTimeout(()=>{for(const R of this.autoViewpoints)R.autoPoll({accumulator:y??void 0})},1),!0}compileScene(A){const I=[];A.traverse(C=>{C instanceof AB&&I.push(C)});const g=[];A.traverseVisible(C=>{C instanceof AB&&g.push(C)});const Q=new Set;return A.traverseVisible(C=>{if(C instanceof zE){let E=C.parent;for(;E!=null&&!(E instanceof Zg);)E=E.parent;E==null&&Q.add(C)}}),{generators:I,visibleGenerators:g,globalEdits:Array.from(Q)}}async renderEnvMap({renderer:A,scene:I,worldCenter:g,size:Q=256,near:C=.1,far:E=1e3,hideObjects:i=[],update:D=!1}){var o,s;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!tI.cubeRender||tI.cubeRender.target.width!==Q||tI.cubeRender.near!==C||tI.cubeRender.far!==E){tI.cubeRender&&tI.cubeRender.target.dispose();const R=new F.WebGLCubeRenderTarget(Q,{format:F.RGBAFormat,generateMipmaps:!0,minFilter:F.LinearMipMapLinearFilter}),n=new F.CubeCamera(C,E,R);tI.cubeRender={target:R,camera:n,near:C,far:E}}tI.pmrem||(tI.pmrem=new F.PMREMGenerator(A??this.renderer));const t=new F.Matrix4().setPosition(g);await((o=this.envViewpoint)==null?void 0:o.prepare({scene:I,viewToWorld:t,update:D}));const{target:w,camera:a}=tI.cubeRender;a.position.copy(g);const y=new Map;for(const R of i)y.set(R,R.visible),R.visible=!1;this.prepareViewpoint(this.envViewpoint),a.update(A??this.renderer,I),this.prepareViewpoint(this.defaultView);for(const[R,n]of y.entries())R.visible=n;return(s=tI.pmrem)==null?void 0:s.fromCubemap(w.texture).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof F.Mesh)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof F.MeshStandardMaterial&&(Q.envMap=I);else g.material instanceof F.MeshStandardMaterial&&(g.material.envMap=I)})}getRgba({generator:A,rgba:I}){const g=this.active.mapping.find(({node:Q})=>Q===A);if(!g)throw new Error("Generator not found");return I=I??new Aa,I.fromPackedSplats({packedSplats:this.active.splats,base:g.base,count:g.count,renderer:this.renderer}),I}async readRgba({generator:A,rgba:I}){return I=this.getRgba({generator:A,rgba:I}),I.read()}};so.cubeRender=null;so.pmrem=null;so.EMPTY_SPLAT_TEXTURE=new F.Data3DTexture;const qs=new nD(new Uint32Array(1),0);DI({packedSplats:VE,index:"int"},{gsplat:yA},({packedSplats:B,index:A})=>{if(!B||!A)throw new Error("Invalid input");return{gsplat:fB(B,A)}});function Hy(B){if(B.length===0)return null;const A=new F.Vector3,I=new F.Quaternion,g=new F.Vector3,Q=[],C=[];for(const E of B)E.decompose(A,I,g),Q.push(A),C.push(I);return new F.Matrix4().compose(Yn(Q),Kn(C),new F.Vector3(1,1,1))}new F.Matrix4;lA(`
12927
+ `)}}).outputs.metric}class rE{constructor(){this.splats=new Gg,this.toWorld=new F.Matrix4,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:I,generators:g,forceUpdate:Q,originToWorld:C}){const E=this.mapping.reduce((o,s)=>(o.set(s.node,s),o),new Map);let i=0,D=0;for(const{node:o,generator:s,version:t,base:w,count:a}of g){const y=E.get(o);if((Q||s!==y?.generator||t!==y?.version||w!==y?.base||a!==y?.count)&&s&&a>0){const r=I.apply(s);try{this.splats.generate({generator:r,base:w,count:a,renderer:A})}catch(c){o.generator=void 0,o.generatorError=c}i+=1}D=Math.max(D,w+a)}return this.splats.numSplats=D,this.toWorld.copy(C),this.mapping=g,i!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:I,base:g,count:Q},C)=>{const{node:E,base:i,count:D}=A.mapping[C];return I===E&&g===i&&Q===D})}}const Ps=5,ao=class tI extends F.Mesh{constructor(A){const I=tI.makeUniforms(),g=EB(),Q=A.premultipliedAlpha??!0,C=new F.ShaderMaterial({glslVersion:F.GLSL3,vertexShader:g.oldSplatVertex,fragmentShader:g.oldSplatFragment,uniforms:I,premultipliedAlpha:Q,transparent:!0,depthTest:!0,depthWrite:!1,side:F.DoubleSide});super(Ts,C),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new UC({value:new F.Quaternion}),this.translateToAccumulator=new pg({value:new F.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.lastStochastic=null,this.pendingUpdate={scene:null,originToWorld:new F.Matrix4,timeoutId:-1},this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=C,this.uniforms=I;const E=DI({gsplat:yA},{gsplat:yA},({gsplat:i})=>{if(!i)throw new Error("gsplat not defined");return i=_w(i,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:i}});this.modifier=new ea(E),this.premultipliedAlpha=Q,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...OE},this.active=new rE,this.active.refCount=1,this.accumulatorCount=1,this.freeAccumulators=[];for(let i=0;i<1;++i)this.freeAccumulators.push(new rE),this.accumulatorCount+=1;this.defaultView=new JD({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?Ow(A.clock):new F.Clock}static makeUniforms(){return{renderSize:{value:new F.Vector2},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new F.Quaternion},renderToViewPos:{value:new F.Vector3},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},stochastic:{value:!1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:tI.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new F.Matrix2},splatTexAdd:{value:new F.Vector2},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:Gg.getEmptyArray},rgbMinMaxLnScaleMinMax:{value:new F.Vector4},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<Ps}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=Ps)return null;A=new rE,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new JD({...A,spark:this})}onBeforeRender(A,I,g){var Q,C;const E=this.time??this.clock.getElapsedTime(),i=E-(this.viewpoint.lastTime??E);this.viewpoint.lastTime=E;const D=A.info.render.frame,o=D!==this.lastFrame;this.lastFrame=D;const s=this.viewpoint;if(s===this.defaultView){if(o)if(!A.xr.isPresenting)this.defaultView.viewToWorld=g.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const r=A.xr.getCamera().cameras;this.defaultCameras=r.map(c=>c.matrixWorld),this.defaultView.viewToWorld=xy(this.defaultCameras)??new F.Matrix4}this.autoUpdate&&this.update({scene:I,viewToWorld:this.defaultView.viewToWorld})}if(o&&(this.material.premultipliedAlpha!==this.premultipliedAlpha&&(this.material.premultipliedAlpha=this.premultipliedAlpha,this.material.needsUpdate=!0),this.uniforms.time.value=E,this.uniforms.deltaTime.value=i,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,s.display&&s.stochastic&&(this.geometry.instanceCount=this.uniforms.numSplats.value)),s.target)this.uniforms.renderSize.value.set(s.target.width,s.target.height);else{const r=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(r.x===1&&r.y===1){const c=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;c&&(r.x=c.framebufferWidth,r.y=c.framebufferHeight)}}const t=g;if(this.uniforms.near.value=t.near,this.uniforms.far.value=t.far,this.uniforms.encodeLinear.value=s.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.minPixelRadius.value=this.minPixelRadius,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.stochastic.value=s.stochastic,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.lastStochastic!==!s.stochastic&&(this.lastStochastic=!s.stochastic,this.material.transparent=!s.stochastic,this.material.depthWrite=s.stochastic,this.material.needsUpdate=!0),this.splatTexture){const{enable:r,texture:c,multiply:h,add:G,near:R,far:N,mid:k}=this.splatTexture;r&&c?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=c,h?this.uniforms.splatTexMul.value.fromArray(h.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set(G?.x??.5,G?.y??.5),this.uniforms.splatTexNear.value=R??this.uniforms.near.value,this.uniforms.splatTexFar.value=N??this.uniforms.far.value,this.uniforms.splatTexMid.value=k??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=tI.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=tI.EMPTY_SPLAT_TEXTURE;const w=((C=s.display)==null?void 0:C.accumulator.toWorld)??new F.Matrix4,a=g.matrixWorld.clone().invert();w.clone().premultiply(a).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new F.Vector3)}prepareViewpoint(A){var I,g,Q,C;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:E,geometry:i}=this.viewpoint.display;this.uniforms.numSplats.value=E.splats.numSplats,this.uniforms.packedSplats.value=E.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((I=E.splats.splatEncoding)==null?void 0:I.rgbMin)??0,((g=E.splats.splatEncoding)==null?void 0:g.rgbMax)??1,((Q=E.splats.splatEncoding)==null?void 0:Q.lnScaleMin)??KI,((C=E.splats.splatEncoding)==null?void 0:C.lnScaleMax)??dI),this.geometry=i,this.material.transparent=!this.viewpoint.stochastic,this.material.depthWrite=this.viewpoint.stochastic,this.material.needsUpdate=!0}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=Gg.getEmptyArray,this.geometry=Ts}update({scene:A,viewToWorld:I}){const g=this.matrixWorld;this.preUpdate?this.updateInternal({scene:A,originToWorld:g.clone(),viewToWorld:I}):(this.pendingUpdate.scene=A,this.pendingUpdate.originToWorld.copy(g),this.pendingUpdate.timeoutId===-1&&(this.pendingUpdate.timeoutId=setTimeout(()=>{const{scene:Q,originToWorld:C}=this.pendingUpdate;this.pendingUpdate.scene=null,this.pendingUpdate.timeoutId=-1,this.updateInternal({scene:Q,originToWorld:C,viewToWorld:I})&&this.renderer.getContext().flush()},1)))}updateInternal({scene:A,originToWorld:I,viewToWorld:g}){var Q;if(!this.canAllocAccumulator())return!1;I||(I=this.active.toWorld),g=g??I.clone();const C=this.time??this.clock.getElapsedTime(),E=C-(this.lastUpdateTime??C);this.lastUpdateTime=C;const i=this.active.mapping.reduce((r,c)=>(r.set(c.node,c),r),new Map),{generators:D,visibleGenerators:o,globalEdits:s}=this.compileScene(A);for(const r of D)(Q=r.frameUpdate)==null||Q.call(r,{renderer:this.renderer,object:r,time:C,deltaTime:E,viewToWorld:g,globalEdits:s});const t=new Set(o.map(r=>r.uuid));for(const r of D){const c=i.get(r),G=r.generator&&t.has(r.uuid)?r.numSplats:0;(this.needsUpdate||r.generator!==c?.generator||G!==c?.count)&&r.updateVersion()}const w=!SD({matrix1:I,matrix2:this.active.toWorld,maxDistance:this.originDistance}),a=this.needsUpdate||w||D.length!==i.size||D.some(r=>{var c;return r.version!==((c=i.get(r))==null?void 0:c.version)});this.needsUpdate=!1;let y=null;if(a){if(y=this.maybeAllocAccumulator(),!y)throw new Error("Unreachable");const r=!SD({matrix1:I,matrix2:y.toWorld,maxDistance:1e-5,minCoorient:.99999}),h=o.map((U,H)=>{const d=i.get(U);return d?[U.version-d.version,d.base,U]:[Number.POSITIVE_INFINITY,U.version,U]}).sort((U,H)=>U[0]!==H[0]?U[0]-H[0]:U[1]-H[1]).map(([U,H,d])=>d),G=h.map(U=>U.numSplats),{maxSplats:R,mapping:N}=y.splats.generateMapping(G),k=h.map((U,H)=>{const{base:d,count:Y}=N[H];return{node:U,generator:U.generator,version:U.version,base:d,count:Y}});I.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new F.Vector3),y.ensureGenerate(R),y.splats.splatEncoding={...this.splatEncoding},y.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:k,forceUpdate:r,originToWorld:I}),y.splatsVersion=this.active.splatsVersion+1;const J=y.hasCorrespondence(this.active);y.mappingVersion=this.active.mappingVersion+(J?0:1),this.releaseAccumulator(this.active),this.active=y,this.prepareViewpoint()}return setTimeout(()=>{for(const r of this.autoViewpoints)r.autoPoll({accumulator:y??void 0})},1),!0}compileScene(A){const I=[];A.traverse(C=>{C instanceof AB&&I.push(C)});const g=[];A.traverseVisible(C=>{C instanceof AB&&g.push(C)});const Q=new Set;return A.traverseVisible(C=>{if(C instanceof _E){let E=C.parent;for(;E!=null&&!(E instanceof Zg);)E=E.parent;E==null&&Q.add(C)}}),{generators:I,visibleGenerators:g,globalEdits:Array.from(Q)}}async renderEnvMap({renderer:A,scene:I,worldCenter:g,size:Q=256,near:C=.1,far:E=1e3,hideObjects:i=[],update:D=!1}){var o,s;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!tI.cubeRender||tI.cubeRender.target.width!==Q||tI.cubeRender.near!==C||tI.cubeRender.far!==E){tI.cubeRender&&tI.cubeRender.target.dispose();const r=new F.WebGLCubeRenderTarget(Q,{format:F.RGBAFormat,generateMipmaps:!0,minFilter:F.LinearMipMapLinearFilter}),c=new F.CubeCamera(C,E,r);tI.cubeRender={target:r,camera:c,near:C,far:E}}tI.pmrem||(tI.pmrem=new F.PMREMGenerator(A??this.renderer));const t=new F.Matrix4().setPosition(g);await((o=this.envViewpoint)==null?void 0:o.prepare({scene:I,viewToWorld:t,update:D}));const{target:w,camera:a}=tI.cubeRender;a.position.copy(g);const y=new Map;for(const r of i)y.set(r,r.visible),r.visible=!1;this.prepareViewpoint(this.envViewpoint),a.update(A??this.renderer,I),this.prepareViewpoint(this.defaultView);for(const[r,c]of y.entries())r.visible=c;return(s=tI.pmrem)==null?void 0:s.fromCubemap(w.texture).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof F.Mesh)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof F.MeshStandardMaterial&&(Q.envMap=I);else g.material instanceof F.MeshStandardMaterial&&(g.material.envMap=I)})}getRgba({generator:A,rgba:I}){const g=this.active.mapping.find(({node:Q})=>Q===A);if(!g)throw new Error("Generator not found");return I=I??new Da,I.fromPackedSplats({packedSplats:this.active.splats,base:g.base,count:g.count,renderer:this.renderer}),I}async readRgba({generator:A,rgba:I}){return I=this.getRgba({generator:A,rgba:I}),I.read()}};ao.cubeRender=null;ao.pmrem=null;ao.EMPTY_SPLAT_TEXTURE=new F.Data3DTexture;const Ts=new hD(new Uint32Array(1),0);DI({packedSplats:ZE,index:"int"},{gsplat:yA},({packedSplats:B,index:A})=>{if(!B||!A)throw new Error("Invalid input");return{gsplat:xB(B,A)}});function xy(B){if(B.length===0)return null;const A=new F.Vector3,I=new F.Quaternion,g=new F.Vector3,Q=[],C=[];for(const E of B)E.decompose(A,I,g),Q.push(A),C.push(I);return new F.Matrix4().compose(pc(Q),uc(C),new F.Vector3(1,1,1))}new F.Matrix4;lA(`
12928
12928
  struct GsplatSkinning {
12929
12929
  int numSplats;
12930
12930
  int numBones;
@@ -13101,4 +13101,4 @@ void main() {\r
13101
13101
  xxyyzz = vec3(cov[0][0], cov[1][1], cov[2][2]);
13102
13102
  xyxzyz = vec3(cov[0][1], cov[0][2], cov[1][2]);
13103
13103
  }
13104
- `);new F.Vector3(-1,-3,1).normalize(),new F.Color(1,1,1),new F.Color(.5,.5,1);new F.Color(1,1,1),new F.Color(.25,.25,.5);var sa=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(sa||{});const Yy=Object.keys(sa);Yy.length;new F.Euler(0,0,0,"YXZ");var to=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(to||{});const ta=Object.keys(to);ta.length;const Ky=Object.freeze(Object.defineProperty({__proto__:null,ExtSplats:lg,JOINT_IDS:ta,JointEnum:to,LN_SCALE_MAX:dI,LN_SCALE_MIN:KI,OldSparkViewpoint:ND,OldSplatAccumulator:rE,PackedSplats:Gg,PagedSplats:uB,Readback:UC,RgbaArray:Aa,SparkRenderer:Gy,SplatAccumulator:mQ,SplatEdit:zE,SplatEditSdf:ga,SplatEdits:Ca,SplatFileType:HI,SplatGenerator:AB,SplatLoader:io,SplatMesh:Zg,SplatModifier:Ea,SplatPager:eQ,SplatTransformer:UB,floatToUint8:kB,fromHalf:ig,getSplatFileType:Da,isAndroid:dw,isIos:fE,isMobile:lE,isOculus:lw,isVisionPro:fw,setPackedSplat:GD,toHalf:Eg,unpackSplat:dE},Symbol.toStringTag,{value:"Module"})),wo=0,wa=1,aa=2,JD=2,mi=1.25,bs=1,wI=32,vA=wI/4,ea=65535,SE=Math.pow(2,-24),$E=Symbol("SKIP_GENERATION"),ca={strategy:wo,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[$E]:!1};function pA(B,A,I){return I.min.x=A[B],I.min.y=A[B+1],I.min.z=A[B+2],I.max.x=A[B+3],I.max.y=A[B+4],I.max.z=A[B+5],I}function ms(B){let A=-1,I=-1/0;for(let g=0;g<3;g++){const Q=B[g+3]-B[g];Q>I&&(I=Q,A=g)}return A}function Ps(B,A){A.set(B)}function Ts(B,A,I){let g,Q;for(let C=0;C<3;C++){const E=C+3;g=B[C],Q=A[C],I[C]=g<Q?g:Q,g=B[E],Q=A[E],I[E]=g>Q?g:Q}}function jC(B,A,I){for(let g=0;g<3;g++){const Q=A[B+2*g],C=A[B+2*g+1],E=Q-C,i=Q+C;E<I[g]&&(I[g]=E),i>I[g+3]&&(I[g+3]=i)}}function wB(B){const A=B[3]-B[0],I=B[4]-B[1],g=B[5]-B[2];return 2*(A*I+I*g+g*A)}function VA(B,A){return A[B+15]===ea}function aI(B,A){return A[B+6]}function RI(B,A){return A[B+14]}function AI(B){return B+vA}function II(B,A){const I=A[B+6];return B+I*vA}function ao(B,A){return A[B+7]}function Pi(B,A,I,g,Q){let C=1/0,E=1/0,i=1/0,D=-1/0,o=-1/0,s=-1/0,t=1/0,w=1/0,a=1/0,y=-1/0,R=-1/0,n=-1/0;const h=B.offset||0;for(let G=(A-h)*6,r=(A+I-h)*6;G<r;G+=6){const M=B[G+0],k=B[G+1],J=M-k,U=M+k;J<C&&(C=J),U>D&&(D=U),M<t&&(t=M),M>y&&(y=M);const Y=B[G+2],d=B[G+3],H=Y-d,f=Y+d;H<E&&(E=H),f>o&&(o=f),Y<w&&(w=Y),Y>R&&(R=Y);const l=B[G+4],p=B[G+5],q=l-p,m=l+p;q<i&&(i=q),m>s&&(s=m),l<a&&(a=l),l>n&&(n=l)}g[0]=C,g[1]=E,g[2]=i,g[3]=D,g[4]=o,g[5]=s,Q[0]=t,Q[1]=w,Q[2]=a,Q[3]=y,Q[4]=R,Q[5]=n}const Lg=32,dy=(B,A)=>B.candidate-A.candidate,Tg=new Array(Lg).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),zC=new Float32Array(6);function ly(B,A,I,g,Q,C){let E=-1,i=0;if(C===wo)E=ms(A),E!==-1&&(i=(A[E]+A[E+3])/2);else if(C===wa)E=ms(B),E!==-1&&(i=fy(I,g,Q,E));else if(C===aa){const D=wB(B);let o=mi*Q;const s=I.offset||0,t=(g-s)*6,w=(g+Q-s)*6;for(let a=0;a<3;a++){const y=A[a],h=(A[a+3]-y)/Lg;if(Q<Lg/4){const G=[...Tg];G.length=Q;let r=0;for(let k=t;k<w;k+=6,r++){const J=G[r];J.candidate=I[k+2*a],J.count=0;const{bounds:U,leftCacheBounds:Y,rightCacheBounds:d}=J;for(let H=0;H<3;H++)d[H]=1/0,d[H+3]=-1/0,Y[H]=1/0,Y[H+3]=-1/0,U[H]=1/0,U[H+3]=-1/0;jC(k,I,U)}G.sort(dy);let M=Q;for(let k=0;k<M;k++){const J=G[k];for(;k+1<M&&G[k+1].candidate===J.candidate;)G.splice(k+1,1),M--}for(let k=t;k<w;k+=6){const J=I[k+2*a];for(let U=0;U<M;U++){const Y=G[U];J>=Y.candidate?jC(k,I,Y.rightCacheBounds):(jC(k,I,Y.leftCacheBounds),Y.count++)}}for(let k=0;k<M;k++){const J=G[k],U=J.count,Y=Q-J.count,d=J.leftCacheBounds,H=J.rightCacheBounds;let f=0;U!==0&&(f=wB(d)/D);let l=0;Y!==0&&(l=wB(H)/D);const p=bs+mi*(f*U+l*Y);p<o&&(E=a,o=p,i=J.candidate)}}else{for(let M=0;M<Lg;M++){const k=Tg[M];k.count=0,k.candidate=y+h+M*h;const J=k.bounds;for(let U=0;U<3;U++)J[U]=1/0,J[U+3]=-1/0}for(let M=t;M<w;M+=6){let U=~~((I[M+2*a]-y)/h);U>=Lg&&(U=Lg-1);const Y=Tg[U];Y.count++,jC(M,I,Y.bounds)}const G=Tg[Lg-1];Ps(G.bounds,G.rightCacheBounds);for(let M=Lg-2;M>=0;M--){const k=Tg[M],J=Tg[M+1];Ts(k.bounds,J.rightCacheBounds,k.rightCacheBounds)}let r=0;for(let M=0;M<Lg-1;M++){const k=Tg[M],J=k.count,U=k.bounds,d=Tg[M+1].rightCacheBounds;J!==0&&(r===0?Ps(U,zC):Ts(U,zC,zC)),r+=J;let H=0,f=0;r!==0&&(H=wB(zC)/D);const l=Q-r;l!==0&&(f=wB(d)/D);const p=bs+mi*(H*r+f*l);p<o&&(E=a,o=p,i=k.candidate)}}}}else console.warn(`BVH: Invalid build strategy value ${C} used.`);return{axis:E,pos:i}}function fy(B,A,I,g){let Q=0;const C=B.offset;for(let E=A,i=A+I;E<i;E++)Q+=B[(E-C)*6+g*2];return Q/I}class Ti{constructor(){this.boundingData=new Float32Array(6)}}function xy(B,A,I,g,Q,C){let E=g,i=g+Q-1;const D=C.pos,o=C.axis*2,s=I.offset||0;for(;;){for(;E<=i&&I[(E-s)*6+o]<D;)E++;for(;E<=i&&I[(i-s)*6+o]>=D;)i--;if(E<i){for(let t=0;t<A;t++){let w=B[E*A+t];B[E*A+t]=B[i*A+t],B[i*A+t]=w}for(let t=0;t<6;t++){const w=E-s,a=i-s,y=I[w*6+t];I[w*6+t]=I[a*6+t],I[a*6+t]=y}E++,i--}else return E}}let na,RE,UD,ha;const py=Math.pow(2,32);function LD(B){return"count"in B?1:1+LD(B.left)+LD(B.right)}function uy(B,A,I){return na=new Float32Array(I),RE=new Uint32Array(I),UD=new Uint16Array(I),ha=new Uint8Array(I),HD(B,A)}function HD(B,A){const I=B/4,g=B/2,Q="count"in A,C=A.boundingData;for(let E=0;E<6;E++)na[I+E]=C[E];if(Q)return A.buffer?(ha.set(new Uint8Array(A.buffer),B),B+A.buffer.byteLength):(RE[I+6]=A.offset,UD[g+14]=A.count,UD[g+15]=ea,B+wI);{const{left:E,right:i,splitAxis:D}=A,o=B+wI;let s=HD(o,E);const t=B/wI,a=s/wI-t;if(a>py)throw new Error("MeshBVH: Cannot store relative child node offset greater than 32 bits.");return RE[I+6]=a,RE[I+7]=D,HD(s,i)}}function qy(B,A,I,g,Q){const{maxDepth:C,verbose:E,maxLeafSize:i,strategy:D,onProgress:o}=Q,s=B.primitiveBuffer,t=B.primitiveBufferStride,w=new Float32Array(6);let a=!1;const y=new Ti;return Pi(A,I,g,y.boundingData,w),n(y,I,g,w),y;function R(h){o&&o(h/g)}function n(h,G,r,M=null,k=0){if(!a&&k>=C&&(a=!0,E&&console.warn(`BVH: Max depth of ${C} reached when generating BVH. Consider increasing maxDepth.`)),r<=i||k>=C)return R(G+r),h.offset=G,h.count=r,h;const J=ly(h.boundingData,M,A,G,r,D);if(J.axis===-1)return R(G+r),h.offset=G,h.count=r,h;const U=xy(s,t,A,G,r,J);if(U===G||U===G+r)R(G+r),h.offset=G,h.count=r;else{h.splitAxis=J.axis;const Y=new Ti,d=G,H=U-G;h.left=Y,Pi(A,d,H,Y.boundingData,w),n(Y,d,H,w,k+1);const f=new Ti,l=U,p=r-H;h.right=f,Pi(A,l,p,f.boundingData,w),n(f,l,p,w,k+1)}return h}}function by(B,A){const I=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,g=B.getRootRanges(A.range),Q=g[0],C=g[g.length-1],E={offset:Q.offset,count:C.offset+C.count-Q.offset},i=new Float32Array(6*E.count);i.offset=E.offset,B.computePrimitiveBounds(E.offset,E.count,i),B._roots=g.map(D=>{const o=qy(B,i,D.offset,D.count,A),s=LD(o),t=new I(wI*s);return uy(0,o,t),t})}class eo{constructor(A){this._getNewPrimitive=A,this._primitives=[]}getPrimitive(){const A=this._primitives;return A.length===0?this._getNewPrimitive():A.pop()}releasePrimitive(A){this._primitives.push(A)}}class my{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const A=[];let I=null;this.setBuffer=g=>{I&&A.push(I),I=g,this.float32Array=new Float32Array(g),this.uint16Array=new Uint16Array(g),this.uint32Array=new Uint32Array(g)},this.clearBuffer=()=>{I=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,A.length!==0&&this.setBuffer(A.pop())}}}const KA=new my;let Vg,XQ;const dQ=[],_C=new eo(()=>new F.Box3);function Py(B,A,I,g,Q,C){Vg=_C.getPrimitive(),XQ=_C.getPrimitive(),dQ.push(Vg,XQ),KA.setBuffer(B._roots[A]);const E=YD(0,B.geometry,I,g,Q,C);KA.clearBuffer(),_C.releasePrimitive(Vg),_C.releasePrimitive(XQ),dQ.pop(),dQ.pop();const i=dQ.length;return i>0&&(XQ=dQ[i-1],Vg=dQ[i-2]),E}function YD(B,A,I,g,Q=null,C=0,E=0){const{float32Array:i,uint16Array:D,uint32Array:o}=KA;let s=B*2;if(VA(s,D)){const w=aI(B,o),a=RI(s,D);return pA(B,i,Vg),g(w,a,!1,E,C+B/vA,Vg)}else{let H=function(l){const{uint16Array:p,uint32Array:q}=KA;let m=l*2;for(;!VA(m,p);)l=AI(l),m=l*2;return aI(l,q)},f=function(l){const{uint16Array:p,uint32Array:q}=KA;let m=l*2;for(;!VA(m,p);)l=II(l,q),m=l*2;return aI(l,q)+RI(m,p)};const w=AI(B),a=II(B,o);let y=w,R=a,n,h,G,r;if(Q&&(G=Vg,r=XQ,pA(y,i,G),pA(R,i,r),n=Q(G),h=Q(r),h<n)){y=a,R=w;const l=n;n=h,h=l,G=r}G||(G=Vg,pA(y,i,G));const M=VA(y*2,D),k=I(G,M,n,E+1,C+y/vA);let J;if(k===JD){const l=H(y),q=f(y)-l;J=g(l,q,!0,E+1,C+y/vA,G)}else J=k&&YD(y,A,I,g,Q,C,E+1);if(J)return!0;r=XQ,pA(R,i,r);const U=VA(R*2,D),Y=I(r,U,h,E+1,C+R/vA);let d;if(Y===JD){const l=H(R),q=f(R)-l;d=g(l,q,!0,E+1,C+R/vA,r)}else d=Y&&YD(R,A,I,g,Q,C,E+1);return!!d}}const qB=new KA.constructor,uE=new KA.constructor,Xg=new eo(()=>new F.Box3),lQ=new F.Box3,fQ=new F.Box3,Oi=new F.Box3,Xi=new F.Box3;let vi=!1;function Ty(B,A,I,g){if(vi)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");vi=!0;const Q=B._roots,C=A._roots;let E,i=0,D=0;const o=new F.Matrix4().copy(I).invert();for(let s=0,t=Q.length;s<t;s++){qB.setBuffer(Q[s]),D=0;const w=Xg.getPrimitive();pA(0,qB.float32Array,w),w.applyMatrix4(o);for(let a=0,y=C.length;a<y&&(uE.setBuffer(C[a]),E=Cg(0,0,I,o,g,i,D,0,0,w),uE.clearBuffer(),D+=C[a].byteLength/wI,!E);a++);if(Xg.releasePrimitive(w),qB.clearBuffer(),i+=Q[s].byteLength/wI,E)break}return vi=!1,E}function Cg(B,A,I,g,Q,C=0,E=0,i=0,D=0,o=null,s=!1){let t,w;s?(t=uE,w=qB):(t=qB,w=uE);const a=t.float32Array,y=t.uint32Array,R=t.uint16Array,n=w.float32Array,h=w.uint32Array,G=w.uint16Array,r=B*2,M=A*2,k=VA(r,R),J=VA(M,G);let U=!1;if(J&&k)s?U=Q(aI(A,h),RI(A*2,G),aI(B,y),RI(B*2,R),D,E+A/vA,i,C+B/vA):U=Q(aI(B,y),RI(B*2,R),aI(A,h),RI(A*2,G),i,C+B/vA,D,E+A/vA);else if(J){const Y=Xg.getPrimitive();pA(A,n,Y),Y.applyMatrix4(I);const d=AI(B),H=II(B,y);pA(d,a,lQ),pA(H,a,fQ);const f=Y.intersectsBox(lQ),l=Y.intersectsBox(fQ);U=f&&Cg(A,d,g,I,Q,E,C,D,i+1,Y,!s)||l&&Cg(A,H,g,I,Q,E,C,D,i+1,Y,!s),Xg.releasePrimitive(Y)}else{const Y=AI(A),d=II(A,h);pA(Y,n,Oi),pA(d,n,Xi);const H=o.intersectsBox(Oi),f=o.intersectsBox(Xi);if(H&&f)U=Cg(B,Y,I,g,Q,C,E,i,D+1,o,s)||Cg(B,d,I,g,Q,C,E,i,D+1,o,s);else if(H)if(k)U=Cg(B,Y,I,g,Q,C,E,i,D+1,o,s);else{const l=Xg.getPrimitive();l.copy(Oi).applyMatrix4(I);const p=AI(B),q=II(B,y);pA(p,a,lQ),pA(q,a,fQ);const m=l.intersectsBox(lQ),T=l.intersectsBox(fQ);U=m&&Cg(Y,p,g,I,Q,E,C,D,i+1,l,!s)||T&&Cg(Y,q,g,I,Q,E,C,D,i+1,l,!s),Xg.releasePrimitive(l)}else if(f)if(k)U=Cg(B,d,I,g,Q,C,E,i,D+1,o,s);else{const l=Xg.getPrimitive();l.copy(Xi).applyMatrix4(I);const p=AI(B),q=II(B,y);pA(p,a,lQ),pA(q,a,fQ);const m=l.intersectsBox(lQ),T=l.intersectsBox(fQ);U=m&&Cg(d,p,g,I,Q,E,C,D,i+1,l,!s)||T&&Cg(d,q,g,I,Q,E,C,D,i+1,l,!s),Xg.releasePrimitive(l)}}return U}const Os=new F.Box3,xQ=new Float32Array(6);class ya{constructor(){this._roots=null,this.primitiveBuffer=null,this.primitiveBufferStride=null}init(A){A={...ca,...A},by(this,A)}getRootRanges(){throw new Error("BVH: getRootRanges() not implemented")}writePrimitiveBounds(){throw new Error("BVH: writePrimitiveBounds() not implemented")}writePrimitiveRangeBounds(A,I,g,Q){let C=1/0,E=1/0,i=1/0,D=-1/0,o=-1/0,s=-1/0;for(let t=A,w=A+I;t<w;t++){this.writePrimitiveBounds(t,xQ,0);const[a,y,R,n,h,G]=xQ;a<C&&(C=a),n>D&&(D=n),y<E&&(E=y),h>o&&(o=h),R<i&&(i=R),G>s&&(s=G)}return g[Q+0]=C,g[Q+1]=E,g[Q+2]=i,g[Q+3]=D,g[Q+4]=o,g[Q+5]=s,g}computePrimitiveBounds(A,I,g){const Q=g.offset||0;for(let C=A,E=A+I;C<E;C++){this.writePrimitiveBounds(C,xQ,0);const[i,D,o,s,t,w]=xQ,a=(i+s)/2,y=(D+t)/2,R=(o+w)/2,n=(s-i)/2,h=(t-D)/2,G=(w-o)/2,r=(C-Q)*6;g[r+0]=a,g[r+1]=n+(Math.abs(a)+n)*SE,g[r+2]=y,g[r+3]=h+(Math.abs(y)+h)*SE,g[r+4]=R,g[r+5]=G+(Math.abs(R)+G)*SE}return g}shiftPrimitiveOffsets(A){const I=this._indirectBuffer;if(I)for(let g=0,Q=I.length;g<Q;g++)I[g]+=A;else{const g=this._roots;for(let Q=0;Q<g.length;Q++){const C=g[Q],E=new Uint32Array(C),i=new Uint16Array(C),D=C.byteLength/wI;for(let o=0;o<D;o++){const s=vA*o,t=2*s;VA(t,i)&&(E[s+6]+=A)}}}}traverse(A,I=0){const g=this._roots[I],Q=new Uint32Array(g),C=new Uint16Array(g);E(0);function E(i,D=0){const o=i*2,s=VA(o,C);if(s){const t=Q[i+6],w=C[o+14];A(D,s,new Float32Array(g,i*4,6),t,w)}else{const t=AI(i),w=II(i,Q),a=ao(i,Q);A(D,s,new Float32Array(g,i*4,6),a)||(E(t,D+1),E(w,D+1))}}}refit(){const A=this._roots;for(let I=0,g=A.length;I<g;I++){const Q=A[I],C=new Uint32Array(Q),E=new Uint16Array(Q),i=new Float32Array(Q),D=Q.byteLength/wI;for(let o=D-1;o>=0;o--){const s=o*vA,t=s*2;if(VA(t,E)){const a=aI(s,C),y=RI(t,E);this.writePrimitiveRangeBounds(a,y,xQ,0),i.set(xQ,s)}else{const a=AI(s),y=II(s,C);for(let R=0;R<3;R++){const n=i[a+R],h=i[a+R+3],G=i[y+R],r=i[y+R+3];i[s+R]=n<G?n:G,i[s+R+3]=h>r?h:r}}}}}getBoundingBox(A){return A.makeEmpty(),this._roots.forEach(g=>{pA(0,new Float32Array(g),Os),A.union(Os)}),A}shapecast(A){let{boundsTraverseOrder:I,intersectsBounds:g,intersectsRange:Q,intersectsPrimitive:C,scratchPrimitive:E,iterate:i}=A;if(Q&&C){const t=Q;Q=(w,a,y,R,n)=>t(w,a,y,R,n)?!0:i(w,a,this,C,y,R,E)}else Q||(C?Q=(t,w,a,y)=>i(t,w,this,C,a,y,E):Q=(t,w,a)=>a);let D=!1,o=0;const s=this._roots;for(let t=0,w=s.length;t<w;t++){const a=s[t];if(D=Py(this,t,g,Q,I,o),D)break;o+=a.byteLength/wI}return D}bvhcast(A,I,g){let{intersectsRanges:Q}=g;return Ty(this,A,I,Q)}}function Oy(){return typeof SharedArrayBuffer<"u"}function co(B){return B.index?B.index.count:B.attributes.position.count}function Ai(B){return co(B)/3}function Xy(B,A=ArrayBuffer){return B>65535?new Uint32Array(new A(4*B)):new Uint16Array(new A(2*B))}function vy(B,A){if(!B.index){const I=B.attributes.position.count,g=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,Q=Xy(I,g);B.setIndex(new F.BufferAttribute(Q,1));for(let C=0;C<I;C++)Q[C]=C}}function Vy(B,A,I){const g=co(B)/I,Q=A||B.drawRange,C=Q.start/I,E=(Q.start+Q.count)/I,i=Math.max(0,C),D=Math.min(g,E)-i;return{offset:Math.floor(i),count:Math.floor(D)}}function Zy(B,A){return B.groups.map(I=>({offset:I.start/A,count:I.count/A}))}function Xs(B,A,I){const g=Vy(B,A,I),Q=Zy(B,I);if(!Q.length)return[g];const C=[],E=g.offset,i=g.offset+g.count,D=co(B)/I,o=[];for(const w of Q){const{offset:a,count:y}=w,R=a,n=isFinite(y)?y:D-a,h=a+n;R<i&&h>E&&(o.push({pos:Math.max(E,R),isStart:!0}),o.push({pos:Math.min(i,h),isStart:!1}))}o.sort((w,a)=>w.pos!==a.pos?w.pos-a.pos:w.type==="end"?-1:1);let s=0,t=null;for(const w of o){const a=w.pos;s!==0&&a!==t&&C.push({offset:t,count:a-t}),s+=w.isStart?1:-1,t=a}return C}function Ga(B,A){const I=B[B.length-1],g=I.offset+I.count>2**16,Q=B.reduce((o,s)=>o+s.count,0),C=g?4:2,E=A?new SharedArrayBuffer(Q*C):new ArrayBuffer(Q*C),i=g?new Uint32Array(E):new Uint16Array(E);let D=0;for(let o=0;o<B.length;o++){const{offset:s,count:t}=B[o];for(let w=0;w<t;w++)i[D+w]=s+w;D+=t}return i}class ra extends ya{get indirect(){return!!this._indirectBuffer}get primitiveStride(){return null}get primitiveBufferStride(){return this.indirect?1:this.primitiveStride}set primitiveBufferStride(A){}get primitiveBuffer(){return this.indirect?this._indirectBuffer:this.geometry.index.array}set primitiveBuffer(A){}constructor(A,I={}){if(A.isBufferGeometry){if(A.index&&A.index.isInterleavedBufferAttribute)throw new Error("BVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("BVH: Only BufferGeometries are supported.");if(I.useSharedArrayBuffer&&!Oy())throw new Error("BVH: SharedArrayBuffer is not available.");super(),this.geometry=A,this.resolvePrimitiveIndex=I.indirect?g=>this._indirectBuffer[g]:g=>g,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,I={...ca,...I},I[$E]||this.init(I)}init(A){const{geometry:I,primitiveStride:g}=this;if(A.indirect){const Q=Xs(I,A.range,g),C=Ga(Q,A.useSharedArrayBuffer);this._indirectBuffer=C}else vy(I,A);super.init(A),!I.boundingBox&&A.setBoundingBox&&(I.boundingBox=this.getBoundingBox(new F.Box3))}getRootRanges(A){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:Xs(this.geometry,A,this.primitiveStride)}raycastObject3D(){throw new Error("BVH: raycastObject3D() not implemented")}}class ug{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(A,I){let g=1/0,Q=-1/0;for(let C=0,E=A.length;C<E;C++){const D=A[C][I];g=D<g?D:g,Q=D>Q?D:Q}this.min=g,this.max=Q}setFromPoints(A,I){let g=1/0,Q=-1/0;for(let C=0,E=I.length;C<E;C++){const i=I[C],D=A.dot(i);g=D<g?D:g,Q=D>Q?D:Q}this.min=g,this.max=Q}isSeparated(A){return this.min>A.max||A.min>this.max}}ug.prototype.setFromBox=(function(){const B=new F.Vector3;return function(I,g){const Q=g.min,C=g.max;let E=1/0,i=-1/0;for(let D=0;D<=1;D++)for(let o=0;o<=1;o++)for(let s=0;s<=1;s++){B.x=Q.x*D+C.x*(1-D),B.y=Q.y*o+C.y*(1-o),B.z=Q.z*s+C.z*(1-s);const t=I.dot(B);E=Math.min(t,E),i=Math.max(t,i)}this.min=E,this.max=i}})();const Wy=(function(){const B=new F.Vector3,A=new F.Vector3,I=new F.Vector3;return function(Q,C,E){const i=Q.start,D=B,o=C.start,s=A;I.subVectors(i,o),B.subVectors(Q.end,Q.start),A.subVectors(C.end,C.start);const t=I.dot(s),w=s.dot(D),a=s.dot(s),y=I.dot(D),n=D.dot(D)*a-w*w;let h,G;n!==0?h=(t*w-y*a)/n:h=0,G=(t+h*w)/a,E.x=h,E.y=G}})(),no=(function(){const B=new F.Vector2,A=new F.Vector3,I=new F.Vector3;return function(Q,C,E,i){Wy(Q,C,B);let D=B.x,o=B.y;if(D>=0&&D<=1&&o>=0&&o<=1){Q.at(D,E),C.at(o,i);return}else if(D>=0&&D<=1){o<0?C.at(0,i):C.at(1,i),Q.closestPointToPoint(i,!0,E);return}else if(o>=0&&o<=1){D<0?Q.at(0,E):Q.at(1,E),C.closestPointToPoint(E,!0,i);return}else{let s;D<0?s=Q.start:s=Q.end;let t;o<0?t=C.start:t=C.end;const w=A,a=I;if(Q.closestPointToPoint(t,!0,A),C.closestPointToPoint(s,!0,I),w.distanceToSquared(t)<=a.distanceToSquared(s)){E.copy(w),i.copy(t);return}else{E.copy(s),i.copy(a);return}}}})(),jy=(function(){const B=new F.Vector3,A=new F.Vector3,I=new F.Plane,g=new F.Line3;return function(C,E){const{radius:i,center:D}=C,{a:o,b:s,c:t}=E;if(g.start=o,g.end=s,g.closestPointToPoint(D,!0,B).distanceTo(D)<=i||(g.start=o,g.end=t,g.closestPointToPoint(D,!0,B).distanceTo(D)<=i)||(g.start=s,g.end=t,g.closestPointToPoint(D,!0,B).distanceTo(D)<=i))return!0;const R=E.getPlane(I);if(Math.abs(R.distanceToPoint(D))<=i){const h=R.projectPoint(D,A);if(E.containsPoint(h))return!0}return!1}})(),zy=["x","y","z"],Yg=1e-15,vs=Yg*Yg;function TI(B){return Math.abs(B)<Yg}class ZI extends F.Triangle{constructor(...A){super(...A),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new F.Vector3),this.satBounds=new Array(4).fill().map(()=>new ug),this.points=[this.a,this.b,this.c],this.plane=new F.Plane,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new F.Line3,this.needsUpdate=!0}intersectsSphere(A){return jy(A,this)}update(){const A=this.a,I=this.b,g=this.c,Q=this.points,C=this.satAxes,E=this.satBounds,i=C[0],D=E[0];this.getNormal(i),D.setFromPoints(i,Q);const o=C[1],s=E[1];o.subVectors(A,I),s.setFromPoints(o,Q);const t=C[2],w=E[2];t.subVectors(I,g),w.setFromPoints(t,Q);const a=C[3],y=E[3];a.subVectors(g,A),y.setFromPoints(a,Q);const R=o.length(),n=t.length(),h=a.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,R<Yg?n<Yg||h<Yg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(A),this.degenerateSegment.end.copy(g)):n<Yg?h<Yg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(I),this.degenerateSegment.end.copy(A)):h<Yg&&(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(g),this.degenerateSegment.end.copy(I)),this.plane.setFromNormalAndCoplanarPoint(i,A),this.needsUpdate=!1}}ZI.prototype.closestPointToSegment=(function(){const B=new F.Vector3,A=new F.Vector3,I=new F.Line3;return function(Q,C=null,E=null){const{start:i,end:D}=Q,o=this.points;let s,t=1/0;for(let w=0;w<3;w++){const a=(w+1)%3;I.start.copy(o[w]),I.end.copy(o[a]),no(I,Q,B,A),s=B.distanceToSquared(A),s<t&&(t=s,C&&C.copy(B),E&&E.copy(A))}return this.closestPointToPoint(i,B),s=i.distanceToSquared(B),s<t&&(t=s,C&&C.copy(B),E&&E.copy(i)),this.closestPointToPoint(D,B),s=D.distanceToSquared(B),s<t&&(t=s,C&&C.copy(B),E&&E.copy(D)),Math.sqrt(t)}})();ZI.prototype.intersectsTriangle=(function(){const B=new ZI,A=new ug,I=new ug,g=new F.Vector3,Q=new F.Vector3,C=new F.Vector3,E=new F.Vector3,i=new F.Line3,D=new F.Line3,o=new F.Vector3,s=new F.Vector2,t=new F.Vector2;function w(r,M,k,J){const U=g;!r.isDegenerateIntoPoint&&!r.isDegenerateIntoSegment?U.copy(r.plane.normal):U.copy(M.plane.normal);const Y=r.satBounds,d=r.satAxes;for(let l=1;l<4;l++){const p=Y[l],q=d[l];if(A.setFromPoints(q,M.points),p.isSeparated(A)||(E.copy(U).cross(q),A.setFromPoints(E,r.points),I.setFromPoints(E,M.points),A.isSeparated(I)))return!1}const H=M.satBounds,f=M.satAxes;for(let l=1;l<4;l++){const p=H[l],q=f[l];if(A.setFromPoints(q,r.points),p.isSeparated(A)||(E.crossVectors(U,q),A.setFromPoints(E,r.points),I.setFromPoints(E,M.points),A.isSeparated(I)))return!1}return k&&(J||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),k.start.set(0,0,0),k.end.set(0,0,0)),!0}function a(r,M,k,J,U,Y,d,H,f,l,p){let q=d/(d-H);l.x=J+(U-J)*q,p.start.subVectors(M,r).multiplyScalar(q).add(r),q=d/(d-f),l.y=J+(Y-J)*q,p.end.subVectors(k,r).multiplyScalar(q).add(r)}function y(r,M,k,J,U,Y,d,H,f,l,p){if(U>0)a(r.c,r.a,r.b,J,M,k,f,d,H,l,p);else if(Y>0)a(r.b,r.a,r.c,k,M,J,H,d,f,l,p);else if(H*f>0||d!=0)a(r.a,r.b,r.c,M,k,J,d,H,f,l,p);else if(H!=0)a(r.b,r.a,r.c,k,M,J,H,d,f,l,p);else if(f!=0)a(r.c,r.a,r.b,J,M,k,f,d,H,l,p);else return!0;return!1}function R(r,M,k,J){const U=M.degenerateSegment,Y=r.plane.distanceToPoint(U.start),d=r.plane.distanceToPoint(U.end);return TI(Y)?TI(d)?w(r,M,k,J):(k&&(k.start.copy(U.start),k.end.copy(U.start)),r.containsPoint(U.start)):TI(d)?(k&&(k.start.copy(U.end),k.end.copy(U.end)),r.containsPoint(U.end)):r.plane.intersectLine(U,g)!=null?(k&&(k.start.copy(g),k.end.copy(g)),r.containsPoint(g)):!1}function n(r,M,k){const J=M.a;return TI(r.plane.distanceToPoint(J))&&r.containsPoint(J)?(k&&(k.start.copy(J),k.end.copy(J)),!0):!1}function h(r,M,k){const J=r.degenerateSegment,U=M.a;return J.closestPointToPoint(U,!0,g),U.distanceToSquared(g)<vs?(k&&(k.start.copy(U),k.end.copy(U)),!0):!1}function G(r,M,k,J){if(r.isDegenerateIntoSegment)if(M.isDegenerateIntoSegment){const U=r.degenerateSegment,Y=M.degenerateSegment,d=Q,H=C;U.delta(d),Y.delta(H);const f=g.subVectors(Y.start,U.start),l=d.x*H.y-d.y*H.x;if(TI(l))return!1;const p=(f.x*H.y-f.y*H.x)/l,q=-(d.x*f.y-d.y*f.x)/l;if(p<0||p>1||q<0||q>1)return!1;const m=U.start.z+d.z*p,T=Y.start.z+H.z*q;return TI(m-T)?(k&&(k.start.copy(U.start).addScaledVector(d,p),k.end.copy(U.start).addScaledVector(d,p)),!0):!1}else return M.isDegenerateIntoPoint?h(r,M,k):R(M,r,k,J);else{if(r.isDegenerateIntoPoint)return M.isDegenerateIntoPoint?M.a.distanceToSquared(r.a)<vs?(k&&(k.start.copy(r.a),k.end.copy(r.a)),!0):!1:M.isDegenerateIntoSegment?h(M,r,k):n(M,r,k);if(M.isDegenerateIntoPoint)return n(r,M,k);if(M.isDegenerateIntoSegment)return R(r,M,k,J)}}return function(M,k=null,J=!1){this.needsUpdate&&this.update(),M.isExtendedTriangle?M.needsUpdate&&M.update():(B.copy(M),B.update(),M=B);const U=G(this,M,k,J);if(U!==void 0)return U;const Y=this.plane,d=M.plane;let H=d.distanceToPoint(this.a),f=d.distanceToPoint(this.b),l=d.distanceToPoint(this.c);TI(H)&&(H=0),TI(f)&&(f=0),TI(l)&&(l=0);const p=H*f,q=H*l;if(p>0&&q>0)return!1;let m=Y.distanceToPoint(M.a),T=Y.distanceToPoint(M.b),Z=Y.distanceToPoint(M.c);TI(m)&&(m=0),TI(T)&&(T=0),TI(Z)&&(Z=0);const O=m*T,j=m*Z;if(O>0&&j>0)return!1;Q.copy(Y.normal),C.copy(d.normal);const gA=Q.cross(C);let QA=0,CA=Math.abs(gA.x);const EA=Math.abs(gA.y);EA>CA&&(CA=EA,QA=1),Math.abs(gA.z)>CA&&(QA=2);const W=zy[QA],$=this.a[W],z=this.b[W],MA=this.c[W],kA=M.a[W],NA=M.b[W],JA=M.c[W];if(y(this,$,z,MA,p,q,H,f,l,s,i))return w(this,M,k,J);if(y(M,kA,NA,JA,O,j,m,T,Z,t,D))return w(this,M,k,J);if(s.y<s.x){const iA=s.y;s.y=s.x,s.x=iA,o.copy(i.start),i.start.copy(i.end),i.end.copy(o)}if(t.y<t.x){const iA=t.y;t.y=t.x,t.x=iA,o.copy(D.start),D.start.copy(D.end),D.end.copy(o)}return s.y<t.x||t.y<s.x?!1:(k&&(t.x>s.x?k.start.copy(D.start):k.start.copy(i.start),t.y<s.y?k.end.copy(D.end):k.end.copy(i.end)),!0)}})();ZI.prototype.distanceToPoint=(function(){const B=new F.Vector3;return function(I){return this.closestPointToPoint(I,B),I.distanceTo(B)}})();ZI.prototype.distanceToTriangle=(function(){const B=new F.Vector3,A=new F.Vector3,I=["a","b","c"],g=new F.Line3,Q=new F.Line3;return function(E,i=null,D=null){const o=i||D?g:null;if(this.intersectsTriangle(E,o))return(i||D)&&(i&&o.getCenter(i),D&&o.getCenter(D)),0;let s=1/0;for(let t=0;t<3;t++){let w;const a=I[t],y=E[a];this.closestPointToPoint(y,B),w=y.distanceToSquared(B),w<s&&(s=w,i&&i.copy(B),D&&D.copy(y));const R=this[a];E.closestPointToPoint(R,B),w=R.distanceToSquared(B),w<s&&(s=w,i&&i.copy(R),D&&D.copy(B))}for(let t=0;t<3;t++){const w=I[t],a=I[(t+1)%3];g.set(this[w],this[a]);for(let y=0;y<3;y++){const R=I[y],n=I[(y+1)%3];Q.set(E[R],E[n]),no(g,Q,B,A);const h=B.distanceToSquared(A);h<s&&(s=h,i&&i.copy(B),D&&D.copy(A))}}return Math.sqrt(s)}})();class cI{constructor(A,I,g){this.isOrientedBox=!0,this.min=new F.Vector3,this.max=new F.Vector3,this.matrix=new F.Matrix4,this.invMatrix=new F.Matrix4,this.points=new Array(8).fill().map(()=>new F.Vector3),this.satAxes=new Array(3).fill().map(()=>new F.Vector3),this.satBounds=new Array(3).fill().map(()=>new ug),this.alignedSatBounds=new Array(3).fill().map(()=>new ug),this.needsUpdate=!1,A&&this.min.copy(A),I&&this.max.copy(I),g&&this.matrix.copy(g)}set(A,I,g){this.min.copy(A),this.max.copy(I),this.matrix.copy(g),this.needsUpdate=!0}copy(A){this.min.copy(A.min),this.max.copy(A.max),this.matrix.copy(A.matrix),this.needsUpdate=!0}}cI.prototype.update=(function(){return function(){const A=this.matrix,I=this.min,g=this.max,Q=this.points;for(let o=0;o<=1;o++)for(let s=0;s<=1;s++)for(let t=0;t<=1;t++){const w=1*o|2*s|4*t,a=Q[w];a.x=o?g.x:I.x,a.y=s?g.y:I.y,a.z=t?g.z:I.z,a.applyMatrix4(A)}const C=this.satBounds,E=this.satAxes,i=Q[0];for(let o=0;o<3;o++){const s=E[o],t=C[o],w=1<<o,a=Q[w];s.subVectors(i,a),t.setFromPoints(s,Q)}const D=this.alignedSatBounds;D[0].setFromPointsField(Q,"x"),D[1].setFromPointsField(Q,"y"),D[2].setFromPointsField(Q,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}})();cI.prototype.intersectsBox=(function(){const B=new ug;return function(I){this.needsUpdate&&this.update();const g=I.min,Q=I.max,C=this.satBounds,E=this.satAxes,i=this.alignedSatBounds;if(B.min=g.x,B.max=Q.x,i[0].isSeparated(B)||(B.min=g.y,B.max=Q.y,i[1].isSeparated(B))||(B.min=g.z,B.max=Q.z,i[2].isSeparated(B)))return!1;for(let D=0;D<3;D++){const o=E[D],s=C[D];if(B.setFromBox(o,I),s.isSeparated(B))return!1}return!0}})();cI.prototype.intersectsTriangle=(function(){const B=new ZI,A=new Array(3),I=new ug,g=new ug,Q=new F.Vector3;return function(E){this.needsUpdate&&this.update(),E.isExtendedTriangle?E.needsUpdate&&E.update():(B.copy(E),B.update(),E=B);const i=this.satBounds,D=this.satAxes;A[0]=E.a,A[1]=E.b,A[2]=E.c;for(let w=0;w<3;w++){const a=i[w],y=D[w];if(I.setFromPoints(y,A),a.isSeparated(I))return!1}const o=E.satBounds,s=E.satAxes,t=this.points;for(let w=0;w<3;w++){const a=o[w],y=s[w];if(I.setFromPoints(y,t),a.isSeparated(I))return!1}for(let w=0;w<3;w++){const a=D[w];for(let y=0;y<4;y++){const R=s[y];if(Q.crossVectors(a,R),I.setFromPoints(Q,A),g.setFromPoints(Q,t),I.isSeparated(g))return!1}}return!0}})();cI.prototype.closestPointToPoint=(function(){return function(A,I){return this.needsUpdate&&this.update(),I.copy(A).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),I}})();cI.prototype.distanceToPoint=(function(){const B=new F.Vector3;return function(I){return this.closestPointToPoint(I,B),I.distanceTo(B)}})();cI.prototype.distanceToBox=(function(){const B=["x","y","z"],A=new Array(12).fill().map(()=>new F.Line3),I=new Array(12).fill().map(()=>new F.Line3),g=new F.Vector3,Q=new F.Vector3;return function(E,i=0,D=null,o=null){if(this.needsUpdate&&this.update(),this.intersectsBox(E))return(D||o)&&(E.getCenter(Q),this.closestPointToPoint(Q,g),E.closestPointToPoint(g,Q),D&&D.copy(g),o&&o.copy(Q)),0;const s=i*i,t=E.min,w=E.max,a=this.points;let y=1/0;for(let n=0;n<8;n++){const h=a[n];Q.copy(h).clamp(t,w);const G=h.distanceToSquared(Q);if(G<y&&(y=G,D&&D.copy(h),o&&o.copy(Q),G<s))return Math.sqrt(G)}let R=0;for(let n=0;n<3;n++)for(let h=0;h<=1;h++)for(let G=0;G<=1;G++){const r=(n+1)%3,M=(n+2)%3,k=h<<r|G<<M,J=1<<n|h<<r|G<<M,U=a[k],Y=a[J];A[R].set(U,Y);const H=B[n],f=B[r],l=B[M],p=I[R],q=p.start,m=p.end;q[H]=t[H],q[f]=h?t[f]:w[f],q[l]=G?t[l]:w[f],m[H]=w[H],m[f]=h?t[f]:w[f],m[l]=G?t[l]:w[f],R++}for(let n=0;n<=1;n++)for(let h=0;h<=1;h++)for(let G=0;G<=1;G++){Q.x=n?w.x:t.x,Q.y=h?w.y:t.y,Q.z=G?w.z:t.z,this.closestPointToPoint(Q,g);const r=Q.distanceToSquared(g);if(r<y&&(y=r,D&&D.copy(g),o&&o.copy(Q),r<s))return Math.sqrt(r)}for(let n=0;n<12;n++){const h=A[n];for(let G=0;G<12;G++){const r=I[G];no(h,r,g,Q);const M=g.distanceToSquared(Q);if(M<y&&(y=M,D&&D.copy(g),o&&o.copy(Q),M<s))return Math.sqrt(M)}}return Math.sqrt(y)}})();class _y extends eo{constructor(){super(()=>new ZI)}}const vI=new _y,aB=new F.Vector3,Vi=new F.Vector3;function $y(B,A,I={},g=0,Q=1/0){const C=g*g,E=Q*Q;let i=1/0,D=null;if(B.shapecast({boundsTraverseOrder:s=>(aB.copy(A).clamp(s.min,s.max),aB.distanceToSquared(A)),intersectsBounds:(s,t,w)=>w<i&&w<E,intersectsTriangle:(s,t)=>{s.closestPointToPoint(A,aB);const w=A.distanceToSquared(aB);return w<i&&(Vi.copy(aB),i=w,D=t),w<C}}),i===1/0)return null;const o=Math.sqrt(i);return I.point?I.point.copy(Vi):I.point=Vi.clone(),I.distance=o,I.faceIndex=D,I}const $C=parseInt(F.REVISION)>=169,AG=parseInt(F.REVISION)<=161,AQ=new F.Vector3,IQ=new F.Vector3,gQ=new F.Vector3,AE=new F.Vector2,IE=new F.Vector2,gE=new F.Vector2,Vs=new F.Vector3,Zs=new F.Vector3,Ws=new F.Vector3,eB=new F.Vector3;function IG(B,A,I,g,Q,C,E,i){let D;if(C===F.BackSide?D=B.intersectTriangle(g,I,A,!0,Q):D=B.intersectTriangle(A,I,g,C!==F.DoubleSide,Q),D===null)return null;const o=B.origin.distanceTo(Q);return o<E||o>i?null:{distance:o,point:Q.clone()}}function js(B,A,I,g,Q,C,E,i,D,o,s){AQ.fromBufferAttribute(A,C),IQ.fromBufferAttribute(A,E),gQ.fromBufferAttribute(A,i);const t=IG(B,AQ,IQ,gQ,eB,D,o,s);if(t){if(g){AE.fromBufferAttribute(g,C),IE.fromBufferAttribute(g,E),gE.fromBufferAttribute(g,i),t.uv=new F.Vector2;const a=F.Triangle.getInterpolation(eB,AQ,IQ,gQ,AE,IE,gE,t.uv);$C||(t.uv=a)}if(Q){AE.fromBufferAttribute(Q,C),IE.fromBufferAttribute(Q,E),gE.fromBufferAttribute(Q,i),t.uv1=new F.Vector2;const a=F.Triangle.getInterpolation(eB,AQ,IQ,gQ,AE,IE,gE,t.uv1);$C||(t.uv1=a),AG&&(t.uv2=t.uv1)}if(I){Vs.fromBufferAttribute(I,C),Zs.fromBufferAttribute(I,E),Ws.fromBufferAttribute(I,i),t.normal=new F.Vector3;const a=F.Triangle.getInterpolation(eB,AQ,IQ,gQ,Vs,Zs,Ws,t.normal);t.normal.dot(B.direction)>0&&t.normal.multiplyScalar(-1),$C||(t.normal=a)}const w={a:C,b:E,c:i,normal:new F.Vector3,materialIndex:0};if(F.Triangle.getNormal(AQ,IQ,gQ,w.normal),t.face=w,t.faceIndex=C,$C){const a=new F.Vector3;F.Triangle.getBarycoord(eB,AQ,IQ,gQ,a),t.barycoord=a}}return t}function zs(B){return B&&B.isMaterial?B.side:B}function Ii(B,A,I,g,Q,C,E){const i=g*3;let D=i+0,o=i+1,s=i+2;const{index:t,groups:w}=B;B.index&&(D=t.getX(D),o=t.getX(o),s=t.getX(s));const{position:a,normal:y,uv:R,uv1:n}=B.attributes;if(Array.isArray(A)){const h=g*3;for(let G=0,r=w.length;G<r;G++){const{start:M,count:k,materialIndex:J}=w[G];if(h>=M&&h<M+k){const U=zs(A[J]),Y=js(I,a,y,R,n,D,o,s,U,C,E);if(Y)if(Y.faceIndex=g,Y.face.materialIndex=J,Q)Q.push(Y);else return Y}}}else{const h=zs(A),G=js(I,a,y,R,n,D,o,s,h,C,E);if(G)if(G.faceIndex=g,G.face.materialIndex=0,Q)Q.push(G);else return G}return null}function TA(B,A,I,g){const Q=B.a,C=B.b,E=B.c;let i=A,D=A+1,o=A+2;I&&(i=I.getX(i),D=I.getX(D),o=I.getX(o)),Q.x=g.getX(i),Q.y=g.getY(i),Q.z=g.getZ(i),C.x=g.getX(D),C.y=g.getY(D),C.z=g.getZ(D),E.x=g.getX(o),E.y=g.getY(o),E.z=g.getZ(o)}function gG(B,A,I,g,Q,C,E,i){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++)Ii(D,A,I,s,C,E,i)}function QG(B,A,I,g,Q,C,E){const{geometry:i,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=Ii(i,A,I,t,null,C,E),a&&a.distance<o&&(s=a,o=a.distance)}return s}function BG(B,A,I,g,Q,C,E){const{geometry:i}=I,{index:D}=i,o=i.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=s,TA(E,w*3,D,o),E.needsUpdate=!0,g(E,w,Q,C))return!0}return!1}function CG(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,E,i,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],E=new Uint32Array(C),i=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,y=!1){const R=w*2;if(VA(R,i)){const n=aI(w,E),h=RI(R,i);let G=1/0,r=1/0,M=1/0,k=-1/0,J=-1/0,U=-1/0;for(let Y=3*n,d=3*(n+h);Y<d;Y++){let H=g[Y];const f=Q.getX(H),l=Q.getY(H),p=Q.getZ(H);f<G&&(G=f),f>k&&(k=f),l<r&&(r=l),l>J&&(J=l),p<M&&(M=p),p>U&&(U=p)}return D[w+0]!==G||D[w+1]!==r||D[w+2]!==M||D[w+3]!==k||D[w+4]!==J||D[w+5]!==U?(D[w+0]=G,D[w+1]=r,D[w+2]=M,D[w+3]=k,D[w+4]=J,D[w+5]=U,!0):!1}else{const n=AI(w),h=II(w,E);let G=y,r=!1,M=!1;if(A){if(!G){const H=n/vA+a/wI,f=h/vA+a/wI;r=A.has(H),M=A.has(f),G=!r&&!M}}else r=!0,M=!0;const k=G||r,J=G||M;let U=!1;k&&(U=t(n,a,G));let Y=!1;J&&(Y=t(h,a,G));const d=U||Y;if(d)for(let H=0;H<3;H++){const f=n+H,l=h+H,p=D[f],q=D[f+3],m=D[l],T=D[l+3];D[w+H]=p<m?p:m,D[w+H+3]=q>T?q:T}return d}}}function Wg(B,A,I,g,Q){let C,E,i,D,o,s;const t=1/I.direction.x,w=1/I.direction.y,a=1/I.direction.z,y=I.origin.x,R=I.origin.y,n=I.origin.z;let h=A[B],G=A[B+3],r=A[B+1],M=A[B+3+1],k=A[B+2],J=A[B+3+2];return t>=0?(C=(h-y)*t,E=(G-y)*t):(C=(G-y)*t,E=(h-y)*t),w>=0?(i=(r-R)*w,D=(M-R)*w):(i=(M-R)*w,D=(r-R)*w),C>D||i>E||((i>C||isNaN(C))&&(C=i),(D<E||isNaN(E))&&(E=D),a>=0?(o=(k-n)*a,s=(J-n)*a):(o=(J-n)*a,s=(k-n)*a),C>s||o>E)?!1:((o>C||C!==C)&&(C=o),(s<E||E!==E)&&(E=s),C<=Q&&E>=g)}function EG(B,A,I,g,Q,C,E,i){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++){let w=o?o[s]:s;Ii(D,A,I,w,C,E,i)}}function iG(B,A,I,g,Q,C,E){const{geometry:i,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=Ii(i,A,I,D?D[t]:t,null,C,E),a&&a.distance<o&&(s=a,o=a.distance)}return s}function DG(B,A,I,g,Q,C,E){const{geometry:i}=I,{index:D}=i,o=i.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=I.resolveTriangleIndex(s),TA(E,w*3,D,o),E.needsUpdate=!0,g(E,w,Q,C))return!0}return!1}function oG(B,A,I,g,Q,C,E){KA.setBuffer(B._roots[A]),KD(0,B,I,g,Q,C,E),KA.clearBuffer()}function KD(B,A,I,g,Q,C,E){const{float32Array:i,uint16Array:D,uint32Array:o}=KA,s=B*2;if(VA(s,D)){const w=aI(B,o),a=RI(s,D);gG(A,I,g,w,a,Q,C,E)}else{const w=AI(B);Wg(w,i,g,C,E)&&KD(w,A,I,g,Q,C,E);const a=II(B,o);Wg(a,i,g,C,E)&&KD(a,A,I,g,Q,C,E)}}const sG=["x","y","z"];function tG(B,A,I,g,Q,C){KA.setBuffer(B._roots[A]);const E=dD(0,B,I,g,Q,C);return KA.clearBuffer(),E}function dD(B,A,I,g,Q,C){const{float32Array:E,uint16Array:i,uint32Array:D}=KA;let o=B*2;if(VA(o,i)){const t=aI(B,D),w=RI(o,i);return QG(A,I,g,t,w,Q,C)}else{const t=ao(B,D),w=sG[t],y=g.direction[w]>=0;let R,n;y?(R=AI(B),n=II(B,D)):(R=II(B,D),n=AI(B));const G=Wg(R,E,g,Q,C)?dD(R,A,I,g,Q,C):null;if(G){const k=G.point[w];if(y?k<=E[n+t]:k>=E[n+t+3])return G}const M=Wg(n,E,g,Q,C)?dD(n,A,I,g,Q,C):null;return G&&M?G.distance<=M.distance?G:M:G||M||null}}const QE=new F.Box3,pQ=new ZI,uQ=new ZI,cB=new F.Matrix4,_s=new cI,BE=new cI;function wG(B,A,I,g){KA.setBuffer(B._roots[A]);const Q=lD(0,B,I,g);return KA.clearBuffer(),Q}function lD(B,A,I,g,Q=null){const{float32Array:C,uint16Array:E,uint32Array:i}=KA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),_s.set(I.boundingBox.min,I.boundingBox.max,g),Q=_s),VA(D,E)){const s=A.geometry,t=s.index,w=s.attributes.position,a=I.index,y=I.attributes.position,R=aI(B,i),n=RI(D,E);if(cB.copy(g).invert(),I.boundsTree)return pA(B,C,BE),BE.matrix.copy(cB),BE.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:G=>BE.intersectsBox(G),intersectsTriangle:G=>{G.a.applyMatrix4(g),G.b.applyMatrix4(g),G.c.applyMatrix4(g),G.needsUpdate=!0;for(let r=R*3,M=(n+R)*3;r<M;r+=3)if(TA(uQ,r,t,w),uQ.needsUpdate=!0,G.intersectsTriangle(uQ))return!0;return!1}});{const h=Ai(I);for(let G=R*3,r=(n+R)*3;G<r;G+=3){TA(pQ,G,t,w),pQ.a.applyMatrix4(cB),pQ.b.applyMatrix4(cB),pQ.c.applyMatrix4(cB),pQ.needsUpdate=!0;for(let M=0,k=h*3;M<k;M+=3)if(TA(uQ,M,a,y),uQ.needsUpdate=!0,pQ.intersectsTriangle(uQ))return!0}}}else{const s=AI(B),t=II(B,i);return pA(s,C,QE),!!(Q.intersectsBox(QE)&&lD(s,A,I,g,Q)||(pA(t,C,QE),Q.intersectsBox(QE)&&lD(t,A,I,g,Q)))}}const CE=new F.Matrix4,Zi=new cI,nB=new cI,aG=new F.Vector3,eG=new F.Vector3,cG=new F.Vector3,nG=new F.Vector3;function hG(B,A,I,g={},Q={},C=0,E=1/0){A.boundingBox||A.computeBoundingBox(),Zi.set(A.boundingBox.min,A.boundingBox.max,I),Zi.needsUpdate=!0;const i=B.geometry,D=i.attributes.position,o=i.index,s=A.attributes.position,t=A.index,w=vI.getPrimitive(),a=vI.getPrimitive();let y=aG,R=eG,n=null,h=null;Q&&(n=cG,h=nG);let G=1/0,r=null,M=null;return CE.copy(I).invert(),nB.matrix.copy(CE),B.shapecast({boundsTraverseOrder:k=>Zi.distanceToBox(k),intersectsBounds:(k,J,U)=>U<G&&U<E?(J&&(nB.min.copy(k.min),nB.max.copy(k.max),nB.needsUpdate=!0),!0):!1,intersectsRange:(k,J)=>{if(A.boundsTree)return A.boundsTree.shapecast({boundsTraverseOrder:Y=>nB.distanceToBox(Y),intersectsBounds:(Y,d,H)=>H<G&&H<E,intersectsRange:(Y,d)=>{for(let H=Y,f=Y+d;H<f;H++){TA(a,3*H,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let l=k,p=k+J;l<p;l++){TA(w,3*l,o,D),w.needsUpdate=!0;const q=w.distanceToTriangle(a,y,n);if(q<G&&(R.copy(y),h&&h.copy(n),G=q,r=l,M=H),q<C)return!0}}}});{const U=Ai(A);for(let Y=0,d=U;Y<d;Y++){TA(a,3*Y,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let H=k,f=k+J;H<f;H++){TA(w,3*H,o,D),w.needsUpdate=!0;const l=w.distanceToTriangle(a,y,n);if(l<G&&(R.copy(y),h&&h.copy(n),G=l,r=H,M=Y),l<C)return!0}}}}}),vI.releasePrimitive(w),vI.releasePrimitive(a),G===1/0?null:(g.point?g.point.copy(R):g.point=R.clone(),g.distance=G,g.faceIndex=r,Q&&(Q.point?Q.point.copy(h):Q.point=h.clone(),Q.point.applyMatrix4(CE),R.applyMatrix4(CE),Q.distance=R.sub(Q.point).length(),Q.faceIndex=M),g)}function yG(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,E,i,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],E=new Uint32Array(C),i=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,y=!1){const R=w*2;if(VA(R,i)){const n=aI(w,E),h=RI(R,i);let G=1/0,r=1/0,M=1/0,k=-1/0,J=-1/0,U=-1/0;for(let Y=n,d=n+h;Y<d;Y++){const H=3*B.resolveTriangleIndex(Y);for(let f=0;f<3;f++){let l=H+f;l=g?g[l]:l;const p=Q.getX(l),q=Q.getY(l),m=Q.getZ(l);p<G&&(G=p),p>k&&(k=p),q<r&&(r=q),q>J&&(J=q),m<M&&(M=m),m>U&&(U=m)}}return D[w+0]!==G||D[w+1]!==r||D[w+2]!==M||D[w+3]!==k||D[w+4]!==J||D[w+5]!==U?(D[w+0]=G,D[w+1]=r,D[w+2]=M,D[w+3]=k,D[w+4]=J,D[w+5]=U,!0):!1}else{const n=AI(w),h=II(w,E);let G=y,r=!1,M=!1;if(A){if(!G){const H=n/vA+a/wI,f=h/vA+a/wI;r=A.has(H),M=A.has(f),G=!r&&!M}}else r=!0,M=!0;const k=G||r,J=G||M;let U=!1;k&&(U=t(n,a,G));let Y=!1;J&&(Y=t(h,a,G));const d=U||Y;if(d)for(let H=0;H<3;H++){const f=n+H,l=h+H,p=D[f],q=D[f+3],m=D[l],T=D[l+3];D[w+H]=p<m?p:m,D[w+H+3]=q>T?q:T}return d}}}function GG(B,A,I,g,Q,C,E){KA.setBuffer(B._roots[A]),fD(0,B,I,g,Q,C,E),KA.clearBuffer()}function fD(B,A,I,g,Q,C,E){const{float32Array:i,uint16Array:D,uint32Array:o}=KA,s=B*2;if(VA(s,D)){const w=aI(B,o),a=RI(s,D);EG(A,I,g,w,a,Q,C,E)}else{const w=AI(B);Wg(w,i,g,C,E)&&fD(w,A,I,g,Q,C,E);const a=II(B,o);Wg(a,i,g,C,E)&&fD(a,A,I,g,Q,C,E)}}const rG=["x","y","z"];function SG(B,A,I,g,Q,C){KA.setBuffer(B._roots[A]);const E=xD(0,B,I,g,Q,C);return KA.clearBuffer(),E}function xD(B,A,I,g,Q,C){const{float32Array:E,uint16Array:i,uint32Array:D}=KA;let o=B*2;if(VA(o,i)){const t=aI(B,D),w=RI(o,i);return iG(A,I,g,t,w,Q,C)}else{const t=ao(B,D),w=rG[t],y=g.direction[w]>=0;let R,n;y?(R=AI(B),n=II(B,D)):(R=II(B,D),n=AI(B));const G=Wg(R,E,g,Q,C)?xD(R,A,I,g,Q,C):null;if(G){const k=G.point[w];if(y?k<=E[n+t]:k>=E[n+t+3])return G}const M=Wg(n,E,g,Q,C)?xD(n,A,I,g,Q,C):null;return G&&M?G.distance<=M.distance?G:M:G||M||null}}const EE=new F.Box3,qQ=new ZI,bQ=new ZI,hB=new F.Matrix4,$s=new cI,iE=new cI;function RG(B,A,I,g){KA.setBuffer(B._roots[A]);const Q=pD(0,B,I,g);return KA.clearBuffer(),Q}function pD(B,A,I,g,Q=null){const{float32Array:C,uint16Array:E,uint32Array:i}=KA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),$s.set(I.boundingBox.min,I.boundingBox.max,g),Q=$s),VA(D,E)){const s=A.geometry,t=s.index,w=s.attributes.position,a=I.index,y=I.attributes.position,R=aI(B,i),n=RI(D,E);if(hB.copy(g).invert(),I.boundsTree)return pA(B,C,iE),iE.matrix.copy(hB),iE.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:G=>iE.intersectsBox(G),intersectsTriangle:G=>{G.a.applyMatrix4(g),G.b.applyMatrix4(g),G.c.applyMatrix4(g),G.needsUpdate=!0;for(let r=R,M=n+R;r<M;r++)if(TA(bQ,3*A.resolveTriangleIndex(r),t,w),bQ.needsUpdate=!0,G.intersectsTriangle(bQ))return!0;return!1}});{const h=Ai(I);for(let G=R,r=n+R;G<r;G++){const M=A.resolveTriangleIndex(G);TA(qQ,3*M,t,w),qQ.a.applyMatrix4(hB),qQ.b.applyMatrix4(hB),qQ.c.applyMatrix4(hB),qQ.needsUpdate=!0;for(let k=0,J=h*3;k<J;k+=3)if(TA(bQ,k,a,y),bQ.needsUpdate=!0,qQ.intersectsTriangle(bQ))return!0}}}else{const s=AI(B),t=II(B,i);return pA(s,C,EE),!!(Q.intersectsBox(EE)&&pD(s,A,I,g,Q)||(pA(t,C,EE),Q.intersectsBox(EE)&&pD(t,A,I,g,Q)))}}const DE=new F.Matrix4,Wi=new cI,yB=new cI,FG=new F.Vector3,kG=new F.Vector3,MG=new F.Vector3,NG=new F.Vector3;function JG(B,A,I,g={},Q={},C=0,E=1/0){A.boundingBox||A.computeBoundingBox(),Wi.set(A.boundingBox.min,A.boundingBox.max,I),Wi.needsUpdate=!0;const i=B.geometry,D=i.attributes.position,o=i.index,s=A.attributes.position,t=A.index,w=vI.getPrimitive(),a=vI.getPrimitive();let y=FG,R=kG,n=null,h=null;Q&&(n=MG,h=NG);let G=1/0,r=null,M=null;return DE.copy(I).invert(),yB.matrix.copy(DE),B.shapecast({boundsTraverseOrder:k=>Wi.distanceToBox(k),intersectsBounds:(k,J,U)=>U<G&&U<E?(J&&(yB.min.copy(k.min),yB.max.copy(k.max),yB.needsUpdate=!0),!0):!1,intersectsRange:(k,J)=>{if(A.boundsTree){const U=A.boundsTree;return U.shapecast({boundsTraverseOrder:Y=>yB.distanceToBox(Y),intersectsBounds:(Y,d,H)=>H<G&&H<E,intersectsRange:(Y,d)=>{for(let H=Y,f=Y+d;H<f;H++){const l=U.resolveTriangleIndex(H);TA(a,3*l,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let p=k,q=k+J;p<q;p++){const m=B.resolveTriangleIndex(p);TA(w,3*m,o,D),w.needsUpdate=!0;const T=w.distanceToTriangle(a,y,n);if(T<G&&(R.copy(y),h&&h.copy(n),G=T,r=p,M=H),T<C)return!0}}}})}else{const U=Ai(A);for(let Y=0,d=U;Y<d;Y++){TA(a,3*Y,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let H=k,f=k+J;H<f;H++){const l=B.resolveTriangleIndex(H);TA(w,3*l,o,D),w.needsUpdate=!0;const p=w.distanceToTriangle(a,y,n);if(p<G&&(R.copy(y),h&&h.copy(n),G=p,r=H,M=Y),p<C)return!0}}}}}),vI.releasePrimitive(w),vI.releasePrimitive(a),G===1/0?null:(g.point?g.point.copy(R):g.point=R.clone(),g.distance=G,g.faceIndex=r,Q&&(Q.point?Q.point.copy(h):Q.point=h.clone(),Q.point.applyMatrix4(DE),R.applyMatrix4(DE),Q.distance=R.sub(Q.point).length(),Q.faceIndex=M),g)}function At(B,A,I){return B===null?null:(B.point.applyMatrix4(A.matrixWorld),B.distance=B.point.distanceTo(I.ray.origin),B.object=A,B)}const oE=new cI,sE=new F.Ray,It=new F.Vector3,gt=new F.Matrix4,Qt=new F.Vector3,ji=["getX","getY","getZ"];class gB extends ra{static serialize(A,I={}){I={cloneBuffers:!0,...I};const g=A.geometry,Q=A._roots,C=A._indirectBuffer,E=g.getIndex(),i={version:1,roots:null,index:null,indirectBuffer:null};return I.cloneBuffers?(i.roots=Q.map(D=>D.slice()),i.index=E?E.array.slice():null,i.indirectBuffer=C?C.slice():null):(i.roots=Q,i.index=E?E.array:null,i.indirectBuffer=C),i}static deserialize(A,I,g={}){g={setIndex:!0,indirect:!!A.indirectBuffer,...g};const{index:Q,roots:C,indirectBuffer:E}=A;A.version||(console.warn("MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data."),D(C));const i=new gB(I,{...g,[$E]:!0});if(i._roots=C,i._indirectBuffer=E||null,g.setIndex){const o=I.getIndex();if(o===null){const s=new F.BufferAttribute(A.index,1,!1);I.setIndex(s)}else o.array!==Q&&(o.array.set(Q),o.needsUpdate=!0)}return i;function D(o){for(let s=0;s<o.length;s++){const t=o[s],w=new Uint32Array(t),a=new Uint16Array(t);for(let y=0,R=t.byteLength/wI;y<R;y++){const n=vA*y,h=2*n;VA(h,a)||(w[n+6]=w[n+6]/vA-y)}}}}get primitiveStride(){return 3}get resolveTriangleIndex(){return this.resolvePrimitiveIndex}constructor(A,I={}){I.maxLeafTris&&(console.warn('MeshBVH: "maxLeafTris" option has been deprecated. Use maxLeafSize, instead.'),I={...I,maxLeafSize:I.maxLeafTris}),super(A,I)}shiftTriangleOffsets(A){return super.shiftPrimitiveOffsets(A)}writePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,E=Q.attributes.position,i=Q.index?Q.index.array:null,o=(C?C[A]:A)*3;let s=o+0,t=o+1,w=o+2;i&&(s=i[s],t=i[t],w=i[w]);for(let a=0;a<3;a++){const y=E[ji[a]](s),R=E[ji[a]](t),n=E[ji[a]](w);let h=y;R<h&&(h=R),n<h&&(h=n);let G=y;R>G&&(G=R),n>G&&(G=n),I[g+a]=h,I[g+a+3]=G}return I}computePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,E=Q.attributes.position,i=Q.index?Q.index.array:null,D=E.normalized;if(A<0||I+A-g.offset>g.length/6)throw new Error("MeshBVH: compute triangle bounds range is invalid.");const o=E.array,s=E.offset||0;let t=3;E.isInterleavedBufferAttribute&&(t=E.data.stride);const w=["getX","getY","getZ"],a=g.offset;for(let y=A,R=A+I;y<R;y++){const h=(C?C[y]:y)*3,G=(y-a)*6;let r=h+0,M=h+1,k=h+2;i&&(r=i[r],M=i[M],k=i[k]),D||(r=r*t+s,M=M*t+s,k=k*t+s);for(let J=0;J<3;J++){let U,Y,d;D?(U=E[w[J]](r),Y=E[w[J]](M),d=E[w[J]](k)):(U=o[r+J],Y=o[M+J],d=o[k+J]);let H=U;Y<H&&(H=Y),d<H&&(H=d);let f=U;Y>f&&(f=Y),d>f&&(f=d);const l=(f-H)/2,p=J*2;g[G+p+0]=H+l,g[G+p+1]=l+(Math.abs(H)+l)*SE}}return g}raycastObject3D(A,I,g=[]){const{material:Q}=A;if(Q===void 0)return;gt.copy(A.matrixWorld).invert(),sE.copy(I.ray).applyMatrix4(gt),Qt.setFromMatrixScale(A.matrixWorld),It.copy(sE.direction).multiply(Qt);const C=It.length(),E=I.near/C,i=I.far/C;if(I.firstHitOnly===!0){let D=this.raycastFirst(sE,Q,E,i);D=At(D,A,I),D&&g.push(D)}else{const D=this.raycast(sE,Q,E,i);for(let o=0,s=D.length;o<s;o++){const t=At(D[o],A,I);t&&g.push(t)}}return g}refit(A=null){return(this.indirect?yG:CG)(this,A)}raycast(A,I=F.FrontSide,g=0,Q=1/0){const C=this._roots,E=[],i=this.indirect?GG:oG;for(let D=0,o=C.length;D<o;D++)i(this,D,I,A,E,g,Q);return E}raycastFirst(A,I=F.FrontSide,g=0,Q=1/0){const C=this._roots;let E=null;const i=this.indirect?SG:tG;for(let D=0,o=C.length;D<o;D++){const s=i(this,D,I,A,g,Q);s!=null&&(E==null||s.distance<E.distance)&&(E=s)}return E}intersectsGeometry(A,I){let g=!1;const Q=this._roots,C=this.indirect?RG:wG;for(let E=0,i=Q.length;E<i&&(g=C(this,E,A,I),!g);E++);return g}shapecast(A){const I=vI.getPrimitive(),g=super.shapecast({...A,intersectsPrimitive:A.intersectsTriangle,scratchPrimitive:I,iterate:this.indirect?DG:BG});return vI.releasePrimitive(I),g}bvhcast(A,I,g){let{intersectsRanges:Q,intersectsTriangles:C}=g;const E=vI.getPrimitive(),i=this.geometry.index,D=this.geometry.attributes.position,o=this.indirect?y=>{const R=this.resolveTriangleIndex(y);TA(E,R*3,i,D)}:y=>{TA(E,y*3,i,D)},s=vI.getPrimitive(),t=A.geometry.index,w=A.geometry.attributes.position,a=A.indirect?y=>{const R=A.resolveTriangleIndex(y);TA(s,R*3,t,w)}:y=>{TA(s,y*3,t,w)};if(C){if(!(A instanceof gB))throw new Error('MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.');const y=(R,n,h,G,r,M,k,J)=>{for(let U=h,Y=h+G;U<Y;U++){a(U),s.a.applyMatrix4(I),s.b.applyMatrix4(I),s.c.applyMatrix4(I),s.needsUpdate=!0;for(let d=R,H=R+n;d<H;d++)if(o(d),E.needsUpdate=!0,C(E,s,d,U,r,M,k,J))return!0}return!1};if(Q){const R=Q;Q=function(n,h,G,r,M,k,J,U){return R(n,h,G,r,M,k,J,U)?!0:y(n,h,G,r,M,k,J,U)}}else Q=y}return super.bvhcast(A,I,{intersectsRanges:Q})}intersectsBox(A,I){return oE.set(A.min,A.max,I),oE.needsUpdate=!0,this.shapecast({intersectsBounds:g=>oE.intersectsBox(g),intersectsTriangle:g=>oE.intersectsTriangle(g)})}intersectsSphere(A){return this.shapecast({intersectsBounds:I=>A.intersectsBox(I),intersectsTriangle:I=>I.intersectsSphere(A)})}closestPointToGeometry(A,I,g={},Q={},C=0,E=1/0){return(this.indirect?JG:hG)(this,A,I,g,Q,C,E)}closestPointToPoint(A,I={},g=0,Q=1/0){return $y(this,A,I,g,Q)}}const PQ={Mesh:F.Mesh.prototype.raycast,Line:F.Line.prototype.raycast,LineSegments:F.LineSegments.prototype.raycast,LineLoop:F.LineLoop.prototype.raycast,Points:F.Points.prototype.raycast,BatchedMesh:F.BatchedMesh.prototype.raycast},CI=new F.Mesh,tE=[];function UG(B,A){if(this.isBatchedMesh)LG.call(this,B,A);else{const{geometry:I}=this;if(I.boundsTree)I.boundsTree.raycastObject3D(this,B,A);else{let g;if(this instanceof F.Mesh)g=PQ.Mesh;else if(this instanceof F.LineSegments)g=PQ.LineSegments;else if(this instanceof F.LineLoop)g=PQ.LineLoop;else if(this instanceof F.Line)g=PQ.Line;else if(this instanceof F.Points)g=PQ.Points;else throw new Error("BVH: Fallback raycast function not found.");g.call(this,B,A)}}}function LG(B,A){if(this.boundsTrees){const I=this.boundsTrees,g=this._drawInfo||this._instanceInfo,Q=this._drawRanges||this._geometryInfo,C=this.matrixWorld;CI.material=this.material,CI.geometry=this.geometry;const E=CI.geometry.boundsTree,i=CI.geometry.drawRange;CI.geometry.boundingSphere===null&&(CI.geometry.boundingSphere=new F.Sphere);for(let D=0,o=g.length;D<o;D++){if(!this.getVisibleAt(D))continue;const s=g[D].geometryIndex;if(CI.geometry.boundsTree=I[s],this.getMatrixAt(D,CI.matrixWorld).premultiply(C),!CI.geometry.boundsTree){this.getBoundingBoxAt(s,CI.geometry.boundingBox),this.getBoundingSphereAt(s,CI.geometry.boundingSphere);const t=Q[s];CI.geometry.setDrawRange(t.start,t.count)}CI.raycast(B,tE);for(let t=0,w=tE.length;t<w;t++){const a=tE[t];a.object=this,a.batchId=D,A.push(a)}tE.length=0}CI.geometry.boundsTree=E,CI.geometry.drawRange=i,CI.material=null,CI.geometry=null}else PQ.BatchedMesh.call(this,B,A)}function HG(B={}){const{type:A=gB}=B;return this.boundsTree=new A(this,B),this.boundsTree}const QQ=new F.Vector3,BQ=new F.Vector3,CQ=new F.Vector3,Bt=new F.Vector4,wE=new F.Vector3,zi=new F.Vector3,Ct=new F.Vector4,Et=new F.Vector4,aE=new F.Matrix4,it=new F.Matrix4;function GB(B,A){if(!B&&!A)return;const I=B.count===A.count,g=B.normalized===A.normalized,Q=B.array.constructor===A.array.constructor,C=B.itemSize===A.itemSize;if(!I||!g||!Q||!C)throw new Error}function YB(B,A=null){const I=B.array.constructor,g=B.normalized,Q=B.itemSize,C=A===null?B.count:A;return new F.BufferAttribute(new I(Q*C),Q,g)}function Sa(B,A,I=0){if(B.isInterleavedBufferAttribute){const g=B.itemSize;for(let Q=0,C=B.count;Q<C;Q++){const E=Q+I;A.setX(E,B.getX(Q)),g>=2&&A.setY(E,B.getY(Q)),g>=3&&A.setZ(E,B.getZ(Q)),g>=4&&A.setW(E,B.getW(Q))}}else{const g=A.array,Q=g.constructor,C=g.BYTES_PER_ELEMENT*B.itemSize*I;new Q(g.buffer,C,B.array.length).set(B.array)}}function YG(B,A,I){const g=B.elements,Q=A.elements;for(let C=0,E=Q.length;C<E;C++)g[C]+=Q[C]*I}function Dt(B,A,I){const g=B.skeleton,Q=B.geometry,C=g.bones,E=g.boneInverses;Ct.fromBufferAttribute(Q.attributes.skinIndex,A),Et.fromBufferAttribute(Q.attributes.skinWeight,A),aE.elements.fill(0);for(let i=0;i<4;i++){const D=Et.getComponent(i);if(D!==0){const o=Ct.getComponent(i);it.multiplyMatrices(C[o].matrixWorld,E[o]),YG(aE,it,D)}}return aE.multiply(B.bindMatrix).premultiply(B.bindMatrixInverse),I.transformDirection(aE),I}function _i(B,A,I,g,Q){wE.set(0,0,0);for(let C=0,E=B.length;C<E;C++){const i=A[C],D=B[C];i!==0&&(zi.fromBufferAttribute(D,g),I?wE.addScaledVector(zi,i):wE.addScaledVector(zi.sub(Q),i))}Q.add(wE)}function KG(B,A={useGroups:!1,updateIndex:!1,skipAttributes:[]},I=new F.BufferGeometry){const g=B[0].index!==null,{useGroups:Q=!1,updateIndex:C=!1,skipAttributes:E=[]}=A,i=new Set(Object.keys(B[0].attributes)),D={};let o=0;I.clearGroups();for(let s=0;s<B.length;++s){const t=B[s];let w=0;if(g!==(t.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const a in t.attributes){if(!i.has(a))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+a+'" attribute exists among all geometries, or in none of them.');D[a]===void 0&&(D[a]=[]),D[a].push(t.attributes[a]),w++}if(w!==i.size)throw new Error("StaticGeometryGenerator: Make sure all geometries have the same number of attributes.");if(Q){let a;if(g)a=t.index.count;else if(t.attributes.position!==void 0)a=t.attributes.position.count;else throw new Error("StaticGeometryGenerator: The geometry must have either an index or a position attribute");I.addGroup(o,a,s),o+=a}}if(g){let s=!1;if(!I.index){let t=0;for(let w=0;w<B.length;++w)t+=B[w].index.count;I.setIndex(new F.BufferAttribute(new Uint32Array(t),1,!1)),s=!0}if(C||s){const t=I.index;let w=0,a=0;for(let y=0;y<B.length;++y){const R=B[y],n=R.index;if(E[y]!==!0)for(let h=0;h<n.count;++h)t.setX(w,n.getX(h)+a),w++;a+=R.attributes.position.count}}}for(const s in D){const t=D[s];if(!(s in I.attributes)){let y=0;for(const R in t)y+=t[R].count;I.setAttribute(s,YB(D[s][0],y))}const w=I.attributes[s];let a=0;for(let y=0,R=t.length;y<R;y++){const n=t[y];E[y]!==!0&&Sa(n,w,a),a+=n.count}}return I}function dG(B,A){if(B===null||A===null)return B===A;if(B.length!==A.length)return!1;for(let I=0,g=B.length;I<g;I++)if(B[I]!==A[I])return!1;return!0}function lG(B){const{index:A,attributes:I}=B;if(A)for(let g=0,Q=A.count;g<Q;g+=3){const C=A.getX(g),E=A.getX(g+2);A.setX(g,E),A.setX(g+2,C)}else for(const g in I){const Q=I[g],C=Q.itemSize;for(let E=0,i=Q.count;E<i;E+=3)for(let D=0;D<C;D++){const o=Q.getComponent(E,D),s=Q.getComponent(E+2,D);Q.setComponent(E,D,s),Q.setComponent(E+2,D,o)}}return B}class fG{constructor(A){this.matrixWorld=new F.Matrix4,this.geometryHash=null,this.boneMatrices=null,this.primitiveCount=-1,this.mesh=A,this.update()}update(){const A=this.mesh,I=A.geometry,g=A.skeleton,Q=(I.index?I.index.count:I.attributes.position.count)/3;if(this.matrixWorld.copy(A.matrixWorld),this.geometryHash=I.attributes.position.version,this.primitiveCount=Q,g){g.boneTexture||g.computeBoneTexture(),g.update();const C=g.boneMatrices;!this.boneMatrices||this.boneMatrices.length!==C.length?this.boneMatrices=C.slice():this.boneMatrices.set(C)}else this.boneMatrices=null}didChange(){const A=this.mesh,I=A.geometry,g=(I.index?I.index.count:I.attributes.position.count)/3;return!(this.matrixWorld.equals(A.matrixWorld)&&this.geometryHash===I.attributes.position.version&&dG(A.skeleton&&A.skeleton.boneMatrices||null,this.boneMatrices)&&this.primitiveCount===g)}}class xG{constructor(A){Array.isArray(A)||(A=[A]);const I=[];A.forEach(g=>{g.traverseVisible(Q=>{Q.isMesh&&I.push(Q)})}),this.meshes=I,this.useGroups=!0,this.applyWorldTransforms=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Array(I.length).fill().map(()=>new F.BufferGeometry),this._diffMap=new WeakMap}getMaterials(){const A=[];return this.meshes.forEach(I=>{Array.isArray(I.material)?A.push(...I.material):A.push(I.material)}),A}generate(A=new F.BufferGeometry){let I=[];const{meshes:g,useGroups:Q,_intermediateGeometry:C,_diffMap:E}=this;for(let i=0,D=g.length;i<D;i++){const o=g[i],s=C[i],t=E.get(o);!t||t.didChange(o)?(this._convertToStaticGeometry(o,s),I.push(!1),t?t.update():E.set(o,new fG(o))):I.push(!0)}if(C.length===0){A.setIndex(null);const i=A.attributes;for(const D in i)A.deleteAttribute(D);for(const D in this.attributes)A.setAttribute(this.attributes[D],new F.BufferAttribute(new Float32Array(0),4,!1))}else KG(C,{useGroups:Q,skipAttributes:I},A);for(const i in A.attributes)A.attributes[i].needsUpdate=!0;return A}_convertToStaticGeometry(A,I=new F.BufferGeometry){const g=A.geometry,Q=this.applyWorldTransforms,C=this.attributes.includes("normal"),E=this.attributes.includes("tangent"),i=g.attributes,D=I.attributes;!I.index&&g.index&&(I.index=g.index.clone()),D.position||I.setAttribute("position",YB(i.position)),C&&!D.normal&&i.normal&&I.setAttribute("normal",YB(i.normal)),E&&!D.tangent&&i.tangent&&I.setAttribute("tangent",YB(i.tangent)),GB(g.index,I.index),GB(i.position,D.position),C&&GB(i.normal,D.normal),E&&GB(i.tangent,D.tangent);const o=i.position,s=C?i.normal:null,t=E?i.tangent:null,w=g.morphAttributes.position,a=g.morphAttributes.normal,y=g.morphAttributes.tangent,R=g.morphTargetsRelative,n=A.morphTargetInfluences,h=new F.Matrix3;h.getNormalMatrix(A.matrixWorld),g.index&&I.index.array.set(g.index.array);for(let G=0,r=i.position.count;G<r;G++)QQ.fromBufferAttribute(o,G),s&&BQ.fromBufferAttribute(s,G),t&&(Bt.fromBufferAttribute(t,G),CQ.fromBufferAttribute(t,G)),n&&(w&&_i(w,n,R,G,QQ),a&&_i(a,n,R,G,BQ),y&&_i(y,n,R,G,CQ)),A.isSkinnedMesh&&(A.applyBoneTransform(G,QQ),s&&Dt(A,G,BQ),t&&Dt(A,G,CQ)),Q&&QQ.applyMatrix4(A.matrixWorld),D.position.setXYZ(G,QQ.x,QQ.y,QQ.z),s&&(Q&&BQ.applyNormalMatrix(h),D.normal.setXYZ(G,BQ.x,BQ.y,BQ.z)),t&&(Q&&CQ.transformDirection(A.matrixWorld),D.tangent.setXYZW(G,CQ.x,CQ.y,CQ.z,Bt.w));for(const G in this.attributes){const r=this.attributes[G];r==="position"||r==="tangent"||r==="normal"||!(r in i)||(D[r]||I.setAttribute(r,YB(i[r])),GB(i[r],D[r]),Sa(i[r],D[r]))}return A.matrixWorld.determinant()<0&&lG(I),I}}const pG=Object.freeze(Object.defineProperty({__proto__:null,AVERAGE:wa,BVH:ya,CENTER:wo,CONTAINED:JD,ExtendedTriangle:ZI,GeometryBVH:ra,MeshBVH:gB,OrientedBox:cI,SAH:aa,SKIP_GENERATION:$E,StaticGeometryGenerator:xG,acceleratedRaycast:UG,computeBoundsTree:HG,generateIndirectBuffer:Ga},Symbol.toStringTag,{value:"Module"}));class uG{constructor(A){this.name="WorkerBase",this.running=!1,this.worker=A,this.worker.onerror=I=>{throw I.message?new Error(`${this.name}: Could not create Web Worker with error "${I.message}"`):new Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...A){if(this.running)throw new Error("GenerateMeshBVHWorker: Already running job.");if(this.worker===null)throw new Error("GenerateMeshBVHWorker: Worker has been disposed.");this.running=!0;const I=this.runTask(this.worker,...A);return I.finally(()=>{this.running=!1}),I}dispose(){this.worker.terminate(),this.worker=null}}const OI={node:"node",material:"material",camera:"camera",light:"light"},DQ="KHR_animation_pointer",qG={CUBICSPLINE:void 0,LINEAR:F.InterpolateLinear,STEP:F.InterpolateDiscrete};class bG{constructor(A){this.name=DQ,this.parser=A,this.animationPointerResolver=null,this.pointerPathMap=new Map}setAnimationPointerResolver(A){return this.animationPointerResolver=A,this}loadAnimationTargetFromChannel(A){const I=A.target,g=I.node!==void 0?I.node:I.id;return this.parser.getDependency("node",g)}loadAnimationTargetFromChannelWithAnimationPointer(A){PG();const I=A.target,g=I.extensions&&I.extensions[DQ]&&I.path&&I.path==="pointer";if(!g)return null;let Q,C=OI.node,E;if(g){const D=I.extensions[DQ];let o=D.pointer;if(!o){console.warn("Invalid path",D,I);return}if(o.startsWith("/materials/")?C=OI.material:o.startsWith("/extensions/KHR_lights_punctual/lights/")?C=OI.light:o.startsWith("/cameras/")&&(C=OI.camera),E=this._tryResolveTargetId(o,C),E===null||isNaN(E)){console.warn("Failed resolving animation node id: "+E,o);return}switch(C){case OI.material:const t=("/materials/"+E.toString()+"/").length,w=o.substring(0,t);switch(Q=o.substring(t),Q){case"pbrMetallicRoughness/baseColorFactor":Q="color";break;case"pbrMetallicRoughness/roughnessFactor":Q="roughness";break;case"pbrMetallicRoughness/metallicFactor":Q="metalness";break;case"emissiveFactor":Q="emissive";break;case"alphaCutoff":Q="alphaTest";break;case"occlusionTexture/strength":Q="aoMapIntensity";break;case"normalTexture/scale":Q="normalScale";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale":Q="map/repeat";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset":Q="map/offset";break;case"emissiveTexture/extensions/KHR_texture_transform/scale":Q="emissiveMap/repeat";break;case"emissiveTexture/extensions/KHR_texture_transform/offset":Q="emissiveMap/offset";break;case"extensions/KHR_materials_emissive_strength/emissiveStrength":Q="emissiveIntensity";break;case"extensions/KHR_materials_transmission/transmissionFactor":Q="transmission";break;case"extensions/KHR_materials_ior/ior":Q="ior";break;case"extensions/KHR_materials_volume/thicknessFactor":Q="thickness";break;case"extensions/KHR_materials_volume/attenuationColor":Q="attenuationColor";break;case"extensions/KHR_materials_volume/attenuationDistance":Q="attenuationDistance";break;case"extensions/KHR_materials_iridescence/iridescenceFactor":Q="iridescence";break;case"extensions/KHR_materials_iridescence/iridescenceIor":Q="iridescenceIOR";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMinimum":Q="iridescenceThicknessRange[0]";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMaximum":Q="iridescenceThicknessRange[1]";break;case"extensions/KHR_materials_clearcoat/clearcoatFactor":Q="clearcoat";break;case"extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor":Q="clearcoatRoughness";break;case"extensions/KHR_materials_sheen/sheenColorFactor":Q="sheenColor";break;case"extensions/KHR_materials_sheen/sheenRoughnessFactor":Q="sheenRoughness";break;case"extensions/KHR_materials_specular/specularFactor":Q="specularIntensity";break;case"extensions/KHR_materials_specular/specularColorFactor":Q="specularColor";break}o=w+Q;break;case OI.node:const a=("/nodes/"+E.toString()+"/").length,y=o.substring(0,a);if(Q=o.substring(a),Q.startsWith("weights/")){const G=Q.substring(8);/^\d+$/.test(G)?Q="morphTargetInfluences["+G+"]":console.warn(DQ+": invalid weight index",Q,o)}else switch(Q){case"translation":Q="position";break;case"rotation":Q="quaternion";break;case"scale":Q="scale";break;case"weights":Q="morphTargetInfluences";break;case"extensions/KHR_node_visibility/visible":Q="visible";break}o=y+Q;break;case OI.light:const R=("/extensions/KHR_lights_punctual/lights/"+E.toString()+"/").length;switch(Q=o.substring(R),Q){case"color":break;case"intensity":break;case"spot/innerConeAngle":Q="penumbra";break;case"spot/outerConeAngle":Q="angle";break;case"range":Q="distance";break}o="/lights/"+E.toString()+"/"+Q;break;case OI.camera:const n=("/cameras/"+E.toString()+"/").length,h=o.substring(0,n);switch(Q=o.substring(n),Q){case"perspective/yfov":Q="fov";break;case"perspective/znear":case"orthographic/znear":Q="near";break;case"perspective/zfar":case"orthographic/zfar":Q="far";break;case"perspective/aspect":Q="aspect";break;case"orthographic/xmag":Q="zoom";break;case"orthographic/ymag":Q="zoom";break}o=h+Q;break}this.animationPointerResolver?.resolvePath&&(o=this.animationPointerResolver.resolvePath(o));const s=D.pointer;this.pointerPathMap.set(s,o)}if(E==null||isNaN(E)){console.warn("Failed resolving animation node id: "+E,I);return}let i;return C===OI.node?i=this.parser.getDependency("node",E):C===OI.material?i=this.parser.getDependency("material",E):C===OI.light?i=this.parser.getDependency("light",E):C===OI.camera?i=this.parser.getDependency("camera",E):console.error("Unhandled type",C),i}createAnimationTracksWithAnimationPointer(A,I,g,Q,C){if(!(C.extensions&&C.extensions[DQ]&&C.path&&C.path==="pointer"))return null;const i=C.extensions[DQ].pointer;let D=this.pointerPathMap.get(i);if(!D)return null;const o=[];D=D.replaceAll("/",".");const s=D.split(".");var w=A.name!==void 0&&A.name!==null?A.name:A.uuid;if(s[2]=w,s[3]?.startsWith("morphTargetInfluences")){const R=s[3];if(A.type==="Group"){for(const n of A.children)n.morphTargetInfluences&&(s[3]=n.name,s[4]=R,y(this.parser));return o}}y(this.parser);function a(R,n){try{const h=n.split(".").filter(Boolean),r=h[h.length-1].replace(/\[.*\]$/,"");return r in R?typeof R[r]=="boolean":!1}catch{return!1}}function y(R){D=s.join(".");let n,h=!1;switch(g.itemSize){case 1:Object.prototype.toString.call(g.array)==="[object Uint8Array]"&&a(A,D)?(n=F.BooleanKeyframeTrack,h=!0):n=F.NumberKeyframeTrack;break;case 2:case 3:n=F.VectorKeyframeTrack;break;case 4:D.endsWith(".quaternion")?n=F.QuaternionKeyframeTrack:n=F.ColorKeyframeTrack;break}if(!n){console.warn("Unsupported output accessor format",g);return}const G=Q.interpolation!==void 0?qG[Q.interpolation]:F.InterpolateLinear;let r=R._getArrayFromAccessor(g);D.endsWith(".fov")&&(r=r.map(k=>k/Math.PI*180)),h&&(r=r.map(k=>k>0));const M=new n(D,I.array,r,G);if(G==="CUBICSPLINE"&&R._createCubicSplineTrackInterpolant(M),o.push(M),D&&g.itemSize===4&&D.startsWith(".materials.")&&D.endsWith(".color")){const k=new Float32Array(r.length/4);for(let U=0,Y=r.length/4;U<Y;U+=1)k[U]=r[U*4+3];const J=new n(D.replace(".color",".opacity"),I.array,k,G);G==="CUBICSPLINE"&&R._createCubicSplineTrackInterpolant(M),o.push(J)}}return o}_tryResolveTargetId(A,I){let g="";return I==="node"?g=A.substring(7):I==="material"?g=A.substring(11):I==="light"?g=A.substring(39):I==="camera"&&(g=A.substring(9)),g=g.substring(0,g.indexOf("/")),Number.parseInt(g)}loadAnimation(A){const I=this,g=this.parser.json,Q=this.parser,C=g.animations[A],E=C.name?C.name:"animation_"+A,i=[],D=[],o=[],s=[],t=[];for(let w=0,a=C.channels.length;w<a;w++){const y=C.channels[w],R=C.samplers[y.sampler],n=y.target,h=C.parameters!==void 0?C.parameters[R.input]:R.input,G=C.parameters!==void 0?C.parameters[R.output]:R.output;let r=I.loadAnimationTargetFromChannelWithAnimationPointer(y);r||(r=I.loadAnimationTargetFromChannel(y)),i.push(r),D.push(Q.getDependency("accessor",h)),o.push(Q.getDependency("accessor",G)),s.push(R),t.push(n)}return Promise.all([Promise.all(i),Promise.all(D),Promise.all(o),Promise.all(s),Promise.all(t)]).then(function(w){const a=w[0],y=w[1],R=w[2],n=w[3],h=w[4],G=[];for(let r=0,M=a.length;r<M;r++){const k=a[r],J=y[r],U=R[r],Y=n[r],d=h[r];if(k===void 0)continue;k.updateMatrix&&(k.updateMatrix(),k.matrixAutoUpdate=!0);let H=I.createAnimationTracksWithAnimationPointer(k,J,U,Y,d);if(H||(H=Q._createAnimationTracks(k,J,U,Y,d)),H)for(let f=0;f<H.length;f++)G.push(H[f])}return new F.AnimationClip(E,void 0,G)})}}let ot=!1,mG=null;function PG(){if(ot)return;ot=!0;const B=mG||=F.PropertyBinding.findNode;F.PropertyBinding.findNode=function(A,I){if(!I)return B(A,I);if(I.startsWith(".materials.")){const g=I.substring(11).substring(I.indexOf(".")),Q=g.indexOf("."),C=Q<0?g:g.substring(0,Q);let E=null;return A.traverse(i=>{E!==null||i.type!=="Mesh"&&i.type!=="SkinnedMesh"||i.material&&(i.material.uuid===C||i.material.name===C)&&(E=i.material,E!==null&&(g.endsWith(".map")?E=E.map:g.endsWith(".emissiveMap")&&(E=E.emissiveMap)))}),E}else if(I.startsWith(".nodes.")||I.startsWith(".lights.")||I.startsWith(".cameras.")){const g=I.split(".");let Q;for(let C=1;C<g.length;C++){const E=g[C];if(E.length==36)Q=A.getObjectByProperty("uuid",E);else if(Q&&Q[E]){const D=Number.parseInt(E);let o=E;D>=0&&(o=D),Q=Q[o]}else{const D=A.getObjectByName(E);D&&(Q=D)}}if(!Q){const C=B(A,g[2]);return C||console.warn(DQ+": Property binding not found",I,A,A.name,g),C}return Q}return B(A,I)}}const TG=Object.freeze(Object.defineProperty({__proto__:null,GLTFAnimationPointerExtension:bG},Symbol.toStringTag,{value:"Module"}));var OG=Object.defineProperty,XG=(B,A,I)=>A in B?OG(B,A,{enumerable:!0,configurable:!0,writable:!0,value:I}):B[A]=I,PA=(B,A,I)=>(XG(B,typeof A!="symbol"?A+"":A,I),I);(function(){class B{}class A extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class I extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class g extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class Q extends B{constructor(c,S="unrestricted"){super(),PA(this,"type"),PA(this,"value"),this.value=c,this.type=S}}class C extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class E extends B{}class i extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class D extends B{}class o extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class s extends B{constructor(c,S="integer"){super(),PA(this,"value"),PA(this,"type"),this.value=c,this.type=S}}class t extends B{constructor(c){super(),PA(this,"value"),this.value=c}}class w extends B{constructor(c,S,N){super(),PA(this,"value"),PA(this,"type"),PA(this,"unit"),this.value=c,this.type=S,this.unit=N}}class a extends B{}class y extends B{}class R extends B{}class n extends B{}class h extends B{}class G extends B{}class r extends B{}class M extends B{}class k extends B{}class J extends B{}class U extends B{}class Y extends B{}class d{constructor(c){PA(this,"input"),PA(this,"index",0),this.input=c}consume(){const c=this.input.codePointAt(this.index);return c!==void 0&&(this.index+=String.fromCodePoint(c).length),c}reconsume(c){c!==void 0&&(this.index-=String.fromCodePoint(c).length)}peek(){const c=[];let S=this.index;for(let N=0;N<3&&S<this.input.length;N++){const L=this.input.codePointAt(S);c.push(L),S+=String.fromCodePoint(L).length}return c}}function H(e){return e===10}function f(e){return H(e)||e===8192||e===32}function l(e){return e>=48&&e<=57}function p(e){return l(e)||e>=65&&e<=70||e>=97&&e<=102}function q(e){return(function(c){return(function(S){return S>=65&&S<=90})(c)||(function(S){return S>=97&&S<=122})(c)})(e)||(function(c){return c>=128})(e)||e===95}function m(e){return q(e)||l(e)||e===45}function T(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function Z(e,c){return e===92&&!H(c)}function O(e,c,S){return e===45?q(c)||c===45||Z(c,S):!!q(e)||e===92&&Z(e,c)}function j(e,c,S){return e===43||e===45?l(c)||c===46&&l(S):l(e===46?c:e)}function gA(e){const c=e.consume();if(p(c)){let S=[c];for(;p(...e.peek())&&S.length<5;)S.push(e.consume());f(...e.peek())&&e.consume();const N=parseInt(String.fromCodePoint(...S),16);return N===0||N>1114111?65533:N}return c===void 0?65533:c}function QA(e,c){const S=new C("");for(;;){const N=e.consume();if(N===c||N===void 0)return S;if(N===10)return e.reconsume(N),new E;if(N===92){const L=e.peek()[0];L===void 0||(H(L)?e.consume():S.value+=String.fromCodePoint(gA(e)))}else S.value+=String.fromCodePoint(N)}}function CA(e){let c="";for(;;){const S=e.consume();if(m(S))c+=String.fromCodePoint(S);else{if(!Z(...e.peek()))return e.reconsume(S),c;c+=String.fromCodePoint(gA(e))}}}function EA(e){let c=(function(S){let N="integer",L="";for([43,45].includes(S.peek()[0])&&(L+=String.fromCodePoint(S.consume()));l(...S.peek());)L+=String.fromCodePoint(S.consume());if(S.peek()[0]===46&&l(S.peek()[1]))for(L+=String.fromCodePoint(S.consume(),S.consume()),N="number";l(...S.peek());)L+=String.fromCodePoint(S.consume());return[69,101].includes(S.peek()[0])&&([45,43].includes(S.peek()[1])&&l(S.peek()[2])?(L+=String.fromCodePoint(S.consume(),S.consume(),S.consume()),N="number"):l(S.peek()[1])&&(L+=String.fromCodePoint(S.consume(),S.consume()),N="number")),{value:parseFloat(L),type:N}})(e);return O(...e.peek())?new w(c.value,c.type,CA(e)):e.peek()[0]===37?(e.consume(),new t(c.value)):new s(c.value,c.type)}function BA(e){for(;;){const c=e.consume();if(c===41||c===void 0)return;Z(...e.peek())&&gA(e)}}function W(e){const c=CA(e);if(c.match(/url/i)&&e.peek()[0]===40){for(e.consume();f(e.peek()[0])&&f(e.peek()[1]);)e.consume();return[34,39].includes(e.peek()[0])||f(e.peek()[0])&&[34,39].includes(e.peek()[1])?new I(c):(function(S){const N=new i("");for(;f(...S.peek());)S.consume();for(;;){const L=S.consume();if(L===41||L===void 0)return N;if(f(L)){for(;f(...S.peek());)S.consume();return S.peek()[0]===41||S.peek()[0]===void 0?(S.consume(),N):(BA(S),new D)}if([34,39,40].includes(L)||T(L))return BA(S),new D;if(L===92){if(!Z(...S.peek()))return BA(S),new D;N.value+=gA(S)}else N.value+=String.fromCodePoint(L)}})(e)}return e.peek()[0]===40?(e.consume(),new I(c)):new A(c)}function $(e){const c=e.consume(),S=e.peek();if(f(c)){for(;f(...e.peek());)e.consume();return new a}if(c===34)return QA(e,c);if(c===35){if(m(S[0])||Z(...S)){const N=new Q;return O(...S)&&(N.type="id"),N.value=CA(e),N}return new o(String.fromCodePoint(c))}return c===39?QA(e,c):c===40?new k:c===41?new J:c===43?j(...S)?(e.reconsume(c),EA(e)):new o(String.fromCodePoint(c)):c===44?new G:c===45?j(...e.peek())?(e.reconsume(c),EA(e)):e.peek()[0]===45&&e.peek()[1]===62?(e.consume(),e.consume(),new R):O(...e.peek())?(e.reconsume(c),W(e)):new o(String.fromCodePoint(c)):c===46?j(...e.peek())?(e.reconsume(c),EA(e)):new o(String.fromCodePoint(c)):c===58?new n:c===59?new h:c===60?S[0]===33&&S[1]===45&&S[2]===45?(e.consume(),e.consume(),e.consume(),new y):new o(String.fromCodePoint(c)):c===64?O(...S)?new g(CA(e)):new o(String.fromCodePoint(c)):c===91?new r:c===92?Z(...S)?(e.reconsume(c),W(e)):new o(String.fromCodePoint(c)):c===93?new M:c===123?new U:c===125?new Y:l(c)?(e.reconsume(c),EA(e)):q(c)?(e.reconsume(c),W(e)):c===void 0?void 0:new o(String.fromCodePoint(c))}const z=new Set(["px","deg","s","hz","dppx","number","fr"]);function MA(e){return z.has(e.toLowerCase())}function kA(e,c){if(["x","y"].includes(e))return e;if(!c)throw new Error("To determine the normalized axis the computedStyle of the source is required.");const S=c.writingMode=="horizontal-tb";if(e==="block")e=S?"y":"x";else{if(e!=="inline")throw new TypeError(`Invalid axis “${e}”`);e=S?"x":"y"}return e}function NA(e){const c=[];let S=0;function N(){let K=0;const x=S;for(;S<e.length;){const b=e.slice(S,S+1);if(/\s/.test(b)&&K===0)break;if(b==="(")K+=1;else if(b===")"&&(K-=1,K===0)){S++;break}S++}return e.slice(x,S)}function L(){for(;/\s/.test(e.slice(S,S+1));)S++}for(;S<e.length;){const K=e.slice(S,S+1);/\s/.test(K)?L():c.push(N())}return c}function JA(e,c){return e.reduce(((S,N)=>(S.has(N[c])?S.get(N[c]).push(N):S.set(N[c],[N]),S)),new Map)}function iA(e,c){const S=[],N=[];for(const L of e)c(L)?S.push(L):N.push(L);return[S,N]}function oA(e,c={}){function S(N){return Array.from(N).map((L=>oA(L,c)))}if(e instanceof CSSUnitValue){if(e.unit==="percent"&&c.percentageReference){const L=e.value/100*c.percentageReference.value,K=c.percentageReference.unit;return new CSSUnitValue(L,K)}const N=e.toSum();if(N&&N.values.length===1&&(e=N.values[0]),e instanceof CSSUnitValue&&e.unit==="em"&&c.fontSize&&(e=new CSSUnitValue(e.value*c.fontSize.value,c.fontSize.unit)),e instanceof CSSKeywordValue){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number")}return e}if(!e.operator)return e;switch(e.operator){case"sum":e=new CSSMathSum(...S(e.values));break;case"product":e=new CSSMathProduct(...S(e.values));break;case"negate":e=new CSSMathNegate(oA(e.value,c));break;case"clamp":e=new CSSMathClamp(oA(e.lower,c),oA(e.value,c),oA(e.upper,c));break;case"invert":e=new CSSMathInvert(oA(e.value,c));break;case"min":e=new CSSMathMin(...S(e.values));break;case"max":e=new CSSMathMax(...S(e.values))}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const N=Array.from(e.values);if(N.every((L=>L instanceof CSSUnitValue&&L.unit!=="percent"&&MA(L.unit)&&L.unit===N[0].unit))){const L=Math[e.operator].apply(Math,N.map((({value:K})=>K)));return new CSSUnitValue(L,N[0].unit)}}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const N=Array.from(e.values),[L,K]=iA(N,(b=>b instanceof CSSUnitValue&&b.unit!=="percent")),x=Array.from(JA(L,"unit").values());if(x.some((b=>b.length>0))){const b=x.map((u=>{const P=Math[e.operator].apply(Math,u.map((({value:V})=>V)));return new CSSUnitValue(P,u[0].unit)}));e=e instanceof CSSMathMin?new CSSMathMin(...b,...K):new CSSMathMax(...b,...K)}return N.length===1?N[0]:e}if(e instanceof CSSMathNegate)return e.value instanceof CSSUnitValue?new CSSUnitValue(0-e.value.value,e.value.unit):e.value instanceof CSSMathNegate?e.value.value:e;if(e instanceof CSSMathInvert)return e.value instanceof CSSMathInvert?e.value.value:e;if(e instanceof CSSMathSum){let N=function(K){const x=K.filter((b=>b instanceof CSSUnitValue));return[...K.filter((b=>!(b instanceof CSSUnitValue))),...Array.from(JA(x,"unit").entries()).map((([b,u])=>{const P=u.reduce(((V,{value:IA})=>V+IA),0);return new CSSUnitValue(P,b)}))]},L=[];for(const K of e.values)K instanceof CSSMathSum?L.push(...K.values):L.push(K);return L=N(L),L.length===1?L[0]:new CSSMathSum(...L)}if(e instanceof CSSMathProduct){let N=[];for(const x of e.values)x instanceof CSSMathProduct?N.push(...x.values):N.push(x);const[L,K]=iA(N,(x=>x instanceof CSSUnitValue&&x.unit==="number"));if(L.length>1){const x=L.reduce(((b,{value:u})=>b*u),1);N=[new CSSUnitValue(x,"number"),...K]}if(N.length===2){let x,b;for(const u of N)u instanceof CSSUnitValue&&u.unit==="number"?x=u:u instanceof CSSMathSum&&[...u.values].every((P=>P instanceof CSSUnitValue))&&(b=u);if(x&&b)return new CSSMathSum(...[...b.values].map((u=>new CSSUnitValue(u.value*x.value,u.unit))))}if(N.every((x=>x instanceof CSSUnitValue&&MA(x.unit)||x instanceof CSSMathInvert&&x.value instanceof CSSUnitValue&&MA(x.value.unit)))){const x=new CSSMathProduct(...N).toSum();if(x&&x.values.length===1)return x.values[0]}return new CSSMathProduct(...N)}return e}const rA=null,qI=["percent","length","angle","time","frequency","resolution","flex"],ZA={fontRelativeLengths:{units:new Set(["em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh"])},viewportRelativeLengths:{units:new Set(["vw","lvw","svw","dvw","vh","lvh","svh","dvh","vi","lvi","svi","dvi","vb","lvb","svb","dvb","vmin","lvmin","svmin","dvmin","vmax","lvmax","svmax","dvmax"])},absoluteLengths:{units:new Set(["cm","mm","Q","in","pt","pc","px"]),compatible:!0,canonicalUnit:"px",ratios:{cm:96/2.54,mm:96/2.54/10,Q:96/2.54/40,in:96,pc:16,pt:96/72,px:1}},angle:{units:new Set(["deg","grad","rad","turn"]),compatible:!0,canonicalUnit:"deg",ratios:{deg:1,grad:.9,rad:180/Math.PI,turn:360}},time:{units:new Set(["s","ms"]),compatible:!0,canonicalUnit:"s",ratios:{s:1,ms:.001}},frequency:{units:new Set(["hz","khz"]),compatible:!0,canonicalUnit:"hz",ratios:{hz:1,khz:1e3}},resolution:{units:new Set(["dpi","dpcm","dppx"]),compatible:!0,canonicalUnit:"dppx",ratios:{dpi:1/96,dpcm:2.54/96,dppx:1}}},UA=new Map;for(const e of Object.values(ZA))if(e.compatible)for(const c of e.units)UA.set(c,e);function MI(e){return UA.get(e)}function WI(e,c){const S={...e};for(const N of Object.keys(c))S[N]?S[N]+=c[N]:S[N]=c[N];return S}function jI(e){return e==="number"?{}:e==="percent"?{percent:1}:ZA.absoluteLengths.units.has(e)||ZA.fontRelativeLengths.units.has(e)||ZA.viewportRelativeLengths.units.has(e)?{length:1}:ZA.angle.units.has(e)?{angle:1}:ZA.time.units.has(e)?{time:1}:ZA.frequency.units.has(e)?{frequency:1}:ZA.resolution.units.has(e)?{resolution:1}:e==="fr"?{flex:1}:rA}function NI(e){if(e instanceof CSSUnitValue){let{unit:c,value:S}=e;const N=MI(e.unit);return N&&c!==N.canonicalUnit&&(S*=N.ratios[c],c=N.canonicalUnit),c==="number"?[[S,{}]]:[[S,{[c]:1}]]}if(e instanceof CSSMathInvert){if(!(e.value instanceof CSSUnitValue))throw new Error("Not implemented");const c=NI(e.value);if(c===rA||c.length>1)return rA;const S=c[0],N={};for(const[L,K]of Object.entries(S[1]))N[L]=-1*K;return c[0]=[1/S[0],N],c}if(e instanceof CSSMathProduct){let c=[[1,{}]];for(const S of e.values){const N=NI(S),L=[];if(N===rA)return rA;for(const K of c)for(const x of N)L.push([K[0]*x[0],WI(K[1],x[1])]);c=L}return c}throw new Error("Not implemented")}function zI(e,c){if(jI(c)===rA)throw new SyntaxError("The string did not match the expected pattern.");const S=NI(e);if(!S)throw new TypeError;if(S.length>1)throw new TypeError("Sum has more than one item");const N=(function(L,K){const x=L.unit,b=L.value,u=MI(x),P=MI(K);return!P||u!==P?rA:new CSSUnitValue(b*P.ratios[x]/P.ratios[K],K)})(bI(S[0]),c);if(N===rA)throw new TypeError;return N}function bI(e){const[c,S]=e,N=Object.entries(S);if(N.length>1)return rA;if(N.length===0)return new CSSUnitValue(c,"number");const L=N[0];return L[1]!==1?rA:new CSSUnitValue(c,L[0])}function mI(e,...c){if(c&&c.length)throw new Error("Not implemented");const S=NI(e).map((N=>bI(N)));if(S.some((N=>N===rA)))throw new TypeError("Type error");return new CSSMathSum(...S)}function _I(e,c){if(e.percentHint&&c.percentHint&&e.percentHint!==c.percentHint)return rA;const S={...e,percentHint:e.percentHint??c.percentHint};for(const N of qI)c[N]&&(S[N]??(S[N]=0),S[N]+=c[N]);return S}class WA{constructor(c,S){PA(this,"name"),PA(this,"values"),this.name=c,this.values=S}}class nI{constructor(c,S){PA(this,"value"),PA(this,"associatedToken"),this.value=c,this.associatedToken=S}}function fI(e){if(Array.isArray(e))return e;if(typeof e=="string")return(function(c){const S=new d(c),N=[];for(;;){const L=$(S);if(L===void 0)return N;N.push(L)}})(e);throw new TypeError("Invalid input type "+typeof e)}function hI(e){const c=e.shift();return c instanceof U||c instanceof r||c instanceof k?(function(S,N){let L;if(N instanceof U)L=Y;else if(N instanceof k)L=J;else{if(!(N instanceof r))return;L=M}const K=new nI([],N);for(;;){const x=S.shift();if(x instanceof L||x===void 0)return K;S.unshift(x),K.value.push(hI(S))}})(e,c):c instanceof I?(function(S,N){const L=new WA(S.value,[]);for(;;){const K=N.shift();if(K instanceof J||K===void 0)return L;N.unshift(K),L.values.push(hI(N))}})(c,e):c}function wA(e){if(e instanceof k||e instanceof J)return 6;if(e instanceof o)switch(e.value){case"*":case"/":return 4;case"+":case"-":return 2}}function $I(e){return e[e.length-1]}function Sg(e,c,S){const N=["+","-"].includes(e.value)?"ADDITION":"MULTIPLICATION",L=c.type===N?c.values:[c],K=S.type===N?S.values:[S];return e.value==="-"?K[0]={type:"NEGATE",value:K[0]}:e.value==="/"&&(K[0]={type:"INVERT",value:K[0]}),{type:N,values:[...L,...K]}}function Ag(e){if(e.type==="ADDITION")return new CSSMathSum(...e.values.map((c=>Ag(c))));if(e.type==="MULTIPLICATION")return new CSSMathProduct(...e.values.map((c=>Ag(c))));if(e.type==="NEGATE")return new CSSMathNegate(Ag(e.value));if(e.type==="INVERT")return new CSSMathInvert(Ag(e.value));if(e instanceof nI)return Rg(new WA("calc",e.value));if(e instanceof A){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number");throw new SyntaxError("Invalid math expression")}return RA(e)}function Rg(e){if(e.name==="min"||e.name==="max"){const N=e.values.filter((L=>!(L instanceof a||L instanceof G))).map((L=>oA(Rg(new WA("calc",L)))));return e.name==="min"?new CSSMathMin(...N):new CSSMathMax(...N)}if(e.name!=="calc")return null;const c=Ag((function(N){const L=[],K=[];for(;N.length;){const x=N.shift();if(x instanceof s||x instanceof w||x instanceof t||x instanceof WA||x instanceof nI||x instanceof A)K.push(x);else if(x instanceof o&&["*","/","+","-"].includes(x.value)){for(;L.length&&!($I(L)instanceof k)&&wA($I(L))>wA(x);){const b=L.pop(),u=K.pop(),P=K.pop();K.push(Sg(b,P,u))}L.push(x)}else if(x instanceof k)L.push(x);else if(x instanceof J){if(!L.length)return null;for(;!($I(L)instanceof k);){const b=L.pop(),u=K.pop(),P=K.pop();K.push(Sg(b,P,u))}if(!($I(L)instanceof k))return null;L.pop()}else if(!(x instanceof a))return null}for(;L.length;){if($I(L)instanceof k)return null;const x=L.pop(),b=K.pop(),u=K.pop();K.push(Sg(x,u,b))}return K[0]})([...e.values]));let S;try{S=oA(c)}catch{new CSSStyleSheet().insertRule("error",0)}return S instanceof CSSUnitValue?new CSSMathSum(S):S}function RA(e){return e instanceof WA&&["calc","min","max","clamp"].includes(e.name)?Rg(e):e instanceof s&&e.value===0&&!e.unit?new CSSUnitValue(0,"px"):e instanceof s?new CSSUnitValue(e.value,"number"):e instanceof t?new CSSUnitValue(e.value,"percent"):e instanceof w?new CSSUnitValue(e.value,e.unit):void 0}function Ra(e){const c=(function(S){const N=fI(S);for(;N[0]instanceof a;)N.shift();if(N[0]===void 0)return null;const L=hI(N);for(;N[0]instanceof a;)N.shift();return N[0]===void 0?L:null})(e);return c===null&&new CSSStyleSheet().insertRule("error",0),c instanceof s||c instanceof t||c instanceof w||c instanceof WA||new CSSStyleSheet().insertRule("error",0),c instanceof w&&jI(c.unit)===null&&new CSSStyleSheet().insertRule("error",0),RA(c)}(function(){let e=new WeakMap;function c(K){const x=[];for(let u=0;u<K.length;u++)x[u]=typeof(b=K[u])=="number"?new CSSUnitValue(b,"number"):b;var b;return x}class S{static parse(x){return x instanceof S?x:oA(Ra(x),{})}}class N extends S{constructor(x,b,u,P){super(),e.set(this,{values:c(x),operator:b,name:u||b,delimiter:P||", "})}get operator(){return e.get(this).operator}get values(){return e.get(this).values}toString(){const x=e.get(this);return`${x.name}(${x.values.join(x.delimiter)})`}}const L={CSSNumericValue:S,CSSMathValue:N,CSSUnitValue:class extends S{constructor(K,x){super(),e.set(this,{value:K,unit:x})}get value(){return e.get(this).value}set value(K){e.get(this).value=K}get unit(){return e.get(this).unit}to(K){return zI(this,K)}toSum(...K){return mI(this,...K)}type(){return jI(e.get(this).unit)}toString(){const K=e.get(this);return`${K.value}${(function(x){switch(x){case"percent":return"%";case"number":return"";default:return x.toLowerCase()}})(K.unit)}`}},CSSKeywordValue:class{constructor(K){this.value=K}toString(){return this.value.toString()}},CSSMathSum:class extends N{constructor(K){super(arguments,"sum","calc"," + ")}},CSSMathProduct:class extends N{constructor(K){super(arguments,"product","calc"," * ")}toSum(...K){return mI(this,...K)}type(){return e.get(this).values.map((K=>K.type())).reduce(_I)}},CSSMathNegate:class extends N{constructor(K){super([arguments[0]],"negate","-")}get value(){return e.get(this).values[0]}type(){return this.value.type()}},CSSMathInvert:class extends N{constructor(K){super([1,arguments[0]],"invert","calc"," / ")}get value(){return e.get(this).values[1]}type(){return(function(K){const x={};for(const b of qI)x[b]=-1*K[b];return x})(e.get(this).values[1].type())}},CSSMathMax:class extends N{constructor(){super(arguments,"max")}},CSSMathMin:class extends N{constructor(){super(arguments,"min")}}};if(!window.CSS&&!Reflect.defineProperty(window,"CSS",{value:{}}))throw Error("Error installing CSSOM support");window.CSSUnitValue||["number","percent","em","ex","px","cm","mm","in","pt","pc","Q","vw","vh","vmin","vmax","rems","ch","deg","rad","grad","turn","ms","s","Hz","kHz","dppx","dpi","dpcm","fr"].forEach((K=>{if(!Reflect.defineProperty(CSS,K,{value:x=>new CSSUnitValue(x,K)}))throw Error(`Error installing CSS.${K}`)}));for(let[K,x]of Object.entries(L))if(!(K in window)&&!Reflect.defineProperty(window,K,{value:x}))throw Error(`Error installing CSSOM support for ${K}`)})();const ho="block";let oI=new WeakMap,Fg=new WeakMap;const LC=["entry","exit","cover","contain","entry-crossing","exit-crossing"];function yo(e){return e===document.scrollingElement?document:e}function jg(e){Qi(e);let c=oI.get(e).animations;if(c.length===0)return;let S=e.currentTime;for(let N=0;N<c.length;N++)c[N].tickAnimation(S)}function Go(e,c){if(!e)return null;const S=Fg.get(e).sourceMeasurements,N=getComputedStyle(e);let L=S.scrollTop;return kA(c,N)==="x"&&(L=Math.abs(S.scrollLeft)),L}function gi(e,c){const S=oA(e,c);if(S instanceof CSSUnitValue){if(S.unit==="px")return S.value;throw TypeError("Unhandled unit type "+S.unit)}throw TypeError("Unsupported value type: "+typeof e)}function Qi(e){if(!(e instanceof kQ))return void(function(S){const N=oI.get(S);if(!N.anonymousSource)return;const L=So(N.anonymousSource,N.anonymousTarget);FQ(S,L)})(e);const c=e.subject;if(!c||getComputedStyle(c).display=="none")return void FQ(e,null);FQ(e,oi(c))}function ro(e){return["block","inline","x","y"].includes(e)}function Bi(e){const c=getComputedStyle(e);return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientWidth:e.clientWidth,clientHeight:e.clientHeight,writingMode:c.writingMode,direction:c.direction,scrollPaddingTop:c.scrollPaddingTop,scrollPaddingBottom:c.scrollPaddingBottom,scrollPaddingLeft:c.scrollPaddingLeft,scrollPaddingRight:c.scrollPaddingRight}}function Ci(e,c){if(!e||!c)return;let S=0,N=0,L=c;const K=e.offsetParent;for(;L&&L!=K;)N+=L.offsetLeft,S+=L.offsetTop,L=L.offsetParent;N-=e.offsetLeft+e.clientLeft,S-=e.offsetTop+e.clientTop;const x=getComputedStyle(c);return{top:S,left:N,offsetWidth:c.offsetWidth,offsetHeight:c.offsetHeight,fontSize:x.fontSize}}function HC(e){let c=Fg.get(e);c.sourceMeasurements=Bi(e);for(const S of c.timelineRefs){const N=S.deref();N instanceof kQ&&(oI.get(N).subjectMeasurements=Ci(e,N.subject))}c.updateScheduled||(setTimeout((()=>{for(const S of c.timelineRefs){const N=S.deref();N&&jg(N)}c.updateScheduled=!1})),c.updateScheduled=!0)}function FQ(e,c){const S=oI.get(e),N=S.source;if(N!=c){if(N){const L=Fg.get(N);if(L){L.timelineRefs.delete(e);const K=Array.from(L.timelineRefs).filter((x=>x.deref()===void 0));for(const x of K)L.timelineRefs.delete(x);L.timelineRefs.size===0&&(L.disconnect(),Fg.delete(N))}}if(S.source=c,c){let L=Fg.get(c);if(!L){L={timelineRefs:new Set,sourceMeasurements:Bi(c)},Fg.set(c,L);const K=new ResizeObserver((u=>{for(const P of u)HC(S.source)}));K.observe(c);for(const u of c.children)K.observe(u);const x=new MutationObserver((u=>{for(const P of u)HC(P.target)}));x.observe(c,{attributes:!0,attributeFilter:["style","class"]});const b=()=>{L.sourceMeasurements.scrollLeft=c.scrollLeft,L.sourceMeasurements.scrollTop=c.scrollTop;for(const u of L.timelineRefs){const P=u.deref();P&&jg(P)}};yo(c).addEventListener("scroll",b),L.disconnect=()=>{K.disconnect(),x.disconnect(),yo(c).removeEventListener("scroll",b)}}L.timelineRefs.add(new WeakRef(e))}}}function Ei(e,c){let S=oI.get(e).animations;for(let N=0;N<S.length;N++)S[N].animation==c&&S.splice(N,1)}function ii(e,c,S){let N=oI.get(e).animations;for(let L=0;L<N.length;L++)if(N[L].animation==c)return;N.push({animation:c,tickAnimation:S}),queueMicrotask((()=>{jg(e)}))}class yI{constructor(c){if(oI.set(this,{source:null,axis:ho,anonymousSource:c?c.anonymousSource:null,anonymousTarget:c?c.anonymousTarget:null,subject:null,inset:null,animations:[],subjectMeasurements:null}),FQ(this,c&&c.source!==void 0?c.source:document.scrollingElement),c&&c.axis!==void 0&&c.axis!=ho){if(!ro(c.axis))throw TypeError("Invalid axis");oI.get(this).axis=c.axis}jg(this)}set source(c){FQ(this,c),jg(this)}get source(){return oI.get(this).source}set axis(c){if(!ro(c))throw TypeError("Invalid axis");oI.get(this).axis=c,jg(this)}get axis(){return oI.get(this).axis}get duration(){return CSS.percent(100)}get phase(){const c=this.source;if(!c)return"inactive";let S=getComputedStyle(c);return S.display=="none"?"inactive":c==document.scrollingElement||S.overflow!="visible"&&S.overflow!="clip"?"active":"inactive"}get currentTime(){const S=this.source;if(!S||!S.isConnected||this.phase=="inactive")return null;const N=getComputedStyle(S);if(N.display==="inline"||N.display==="none")return null;const L=this.axis,K=Go(S,L),x=(function(b,u){const P=Fg.get(b).sourceMeasurements,V=getComputedStyle(b).writingMode=="horizontal-tb";return u==="block"?u=V?"y":"x":u==="inline"&&(u=V?"x":"y"),u==="y"?P.scrollHeight-P.clientHeight:u==="x"?P.scrollWidth-P.clientWidth:void 0})(S,L);return x>0?CSS.percent(100*K/x):CSS.percent(100)}get __polyfill(){return!0}}function Di(e,c){let S=e.parentElement;for(;S!=null;){if(c(S))return S;S=S.parentElement}}function So(e,c){switch(e){case"root":return document.scrollingElement;case"nearest":return oi(c);case"self":return c;default:throw new TypeError("Invalid ScrollTimeline Source Type.")}}function Fa(e){switch(getComputedStyle(e).display){case"block":case"inline-block":case"list-item":case"table":case"table-caption":case"flow-root":case"flex":case"grid":return!0}return!1}function Ro(e){const c=getComputedStyle(e);return c.transform!="none"||c.perspective!="none"||c.willChange=="transform"||c.willChange=="perspective"||c.filter!="none"||c.willChange=="filter"||c.backdropFilter!="none"}function ka(e){return getComputedStyle(e).position!="static"||Ro(e)}function Ma(e){switch(getComputedStyle(e).position){case"static":case"relative":case"sticky":return Di(e,Fa);case"absolute":return Di(e,ka);case"fixed":return Di(e,Ro)}}function oi(e){if(e&&e.isConnected){for(;e=Ma(e);)switch(getComputedStyle(e)["overflow-x"]){case"auto":case"scroll":case"hidden":return e==document.body&&getComputedStyle(document.scrollingElement).overflow=="visible"?document.scrollingElement:e}return document.scrollingElement}}function iB(e,c){const S=oI.get(e),N=S.subjectMeasurements,L=Fg.get(S.source).sourceMeasurements;return e.phase==="inactive"?null:e instanceof kQ?si(c,L,N,S.axis,S.inset):null}function si(e,c,S,N,L){const K=c.direction=="rtl"||c.writingMode=="vertical-rl";let x,b,u={fontSize:S.fontSize};kA(N,c)==="x"?(x=S.offsetWidth,b=S.left,u.scrollPadding=[c.scrollPaddingLeft,c.scrollPaddingRight],K&&(b+=c.scrollWidth-c.clientWidth,u.scrollPadding=[c.scrollPaddingRight,c.scrollPaddingLeft]),u.containerSize=c.clientWidth):(x=S.offsetHeight,b=S.top,u.scrollPadding=[c.scrollPaddingTop,c.scrollPaddingBottom],u.containerSize=c.clientHeight);const P=(function(ei,fC){const pa={start:0,end:0};if(!ei)return pa;const[ua,qa]=[ei.start,ei.end].map(((uo,qo)=>uo==="auto"?fC.scrollPadding[qo]==="auto"?0:parseFloat(fC.scrollPadding[qo]):gi(uo,{percentageReference:CSS.px(fC.containerSize),fontSize:CSS.px(parseFloat(fC.fontSize))})));return{start:ua,end:qa}})(L,u),V=b-u.containerSize+P.end,IA=b+x-P.start,DA=V+x,LA=IA-x,bA=Math.min(DA,LA),JI=Math.max(DA,LA);let Ig,PI;const po=x>u.containerSize-P.start-P.end;switch(e){case"cover":Ig=V,PI=IA;break;case"contain":Ig=bA,PI=JI;break;case"entry":Ig=V,PI=bA;break;case"exit":Ig=JI,PI=IA;break;case"entry-crossing":Ig=V,PI=po?JI:bA;break;case"exit-crossing":Ig=po?bA:JI,PI=IA}return{start:Ig,end:PI}}function Fo(e,c){if(e instanceof kQ){const{rangeName:S,offset:N}=c;return ko(iB(e,S),N,iB(e,"cover"),e.subject)}if(e instanceof yI){const{axis:S,source:N}=e,{sourceMeasurements:L}=Fg.get(N);let K;return K=kA(S,L)==="x"?L.scrollWidth-L.clientWidth:L.scrollHeight-L.clientHeight,gi(c,{percentageReference:CSS.px(K)})/K}unsupportedTimeline(e)}function ko(e,c,S,N){if(!e||!S)return 0;let L=getComputedStyle(N);return(gi(c,{percentageReference:CSS.px(e.end-e.start),fontSize:CSS.px(parseFloat(L.fontSize))})+e.start-S.start)/(S.end-S.start)}let kQ=class extends yI{constructor(c){super(c);const S=oI.get(this);S.subject=c&&c.subject?c.subject:void 0,c&&c.inset&&(S.inset=(function(N){if(!N)return{start:0,end:0};let L;if(L=typeof N=="string"?NA(N).map((K=>{if(K==="auto")return"auto";try{return CSSNumericValue.parse(K)}catch{throw TypeError(`Could not parse inset "${N}"`)}})):Array.isArray(N)?N:[N],L.length===0||L.length>2)throw TypeError("Invalid inset");for(const K of L){if(K==="auto")continue;const x=K.type();if(x.length!==1&&x.percent!==1)throw TypeError("Invalid inset")}return{start:L[0],end:L[1]??L[0]}})(c.inset)),S.subject&&(new ResizeObserver((()=>{HC(S.source)})).observe(S.subject),new MutationObserver((()=>{HC(S.source)})).observe(S.subject,{attributes:!0,attributeFilter:["class","style"]})),Qi(this),S.subjectMeasurements=Ci(S.source,S.subject),jg(this)}get source(){return Qi(this),oI.get(this).source}set source(c){throw new Error("Cannot set the source of a view timeline")}get subject(){return oI.get(this).subject}get axis(){return oI.get(this).axis}get currentTime(){const S=Go(this.source,this.axis);if(S==null)return null;const N=iB(this,"cover");if(!N)return null;const L=(S-N.start)/(N.end-N.start);return CSS.percent(100*L)}get startOffset(){return CSS.px(iB(this,"cover").start)}get endOffset(){return CSS.px(iB(this,"cover").end)}};const Na=document.getAnimations,Ja=window.Element.prototype.getAnimations,Ua=window.Element.prototype.animate,Mo=window.Animation;class MQ{constructor(){this.state="pending",this.nativeResolve=this.nativeReject=null,this.promise=new Promise(((c,S)=>{this.nativeResolve=c,this.nativeReject=S}))}resolve(c){this.state="resolved",this.nativeResolve(c)}reject(c){this.state="rejected",this.promise.catch((()=>{})),this.nativeReject(c)}}function DB(e){e.readyPromise=new MQ,requestAnimationFrame((()=>{var c;(((c=e.timeline)==null?void 0:c.currentTime)??null)!==null&&(YC(e),e.pendingTask!=="play"||e.startTime===null&&e.holdTime===null?e.pendingTask==="pause"&&Uo(e):Jo(e))}))}function No(){return new DOMException("The user aborted a request","AbortError")}function zg(e,c){if(c===null)return c;if(typeof c!="number")throw new DOMException(`Unexpected value: ${c}. Cannot convert to CssNumberish`,"InvalidStateError");const S=e.rangeDuration??100,N=Mg(e),L=N?S*c/N:0;return CSS.percent(L)}function fA(e,c){if(e.timeline){if(c===null)return c;if(c.unit==="percent"){const S=e.rangeDuration??100,N=Mg(e);return c.value*N/S}throw new DOMException("CSSNumericValue must be a percentage for progress based animations.","NotSupportedError")}{if(c==null||typeof c=="number")return c;const S=c.to("ms");if(S)return S.value;throw new DOMException("CSSNumericValue must be either a number or a time value for time based animations.","InvalidStateError")}}function Jo(e){const c=fA(e,e.timeline.currentTime);if(e.holdTime!=null)wg(e),e.animation.playbackRate==0?e.startTime=c:(e.startTime=c-e.holdTime/e.animation.playbackRate,e.holdTime=null);else if(e.startTime!==null&&e.pendingPlaybackRate!==null){const S=(c-e.startTime)*e.animation.playbackRate;wg(e);const N=e.animation.playbackRate;N==0?(e.holdTime=null,e.startTime=c):e.startTime=c-S/N}e.readyPromise&&e.readyPromise.state=="pending"&&e.readyPromise.resolve(e.proxy),kg(e,!1,!1),Ng(e),e.pendingTask=null}function Uo(e){const c=fA(e,e.timeline.currentTime);e.startTime!=null&&e.holdTime==null&&(e.holdTime=(c-e.startTime)*e.animation.playbackRate),wg(e),e.startTime=null,e.readyPromise.resolve(e.proxy),kg(e,!1,!1),Ng(e),e.pendingTask=null}function Lo(e){if(!e.finishedPromise||e.finishedPromise.state!="pending"||e.proxy.playState!="finished")return;e.finishedPromise.resolve(e.proxy),e.animation.pause();const c=new CustomEvent("finish",{detail:{currentTime:e.proxy.currentTime,timelineTime:e.proxy.timeline.currentTime}});Object.defineProperty(c,"currentTime",{get:function(){return this.detail.currentTime}}),Object.defineProperty(c,"timelineTime",{get:function(){return this.detail.timelineTime}}),requestAnimationFrame((()=>{queueMicrotask((()=>{e.animation.dispatchEvent(c)}))}))}function NQ(e){return e.pendingPlaybackRate!==null?e.pendingPlaybackRate:e.animation.playbackRate}function wg(e){e.pendingPlaybackRate!==null&&(e.animation.playbackRate=e.pendingPlaybackRate,e.pendingPlaybackRate=null)}function Ho(e){if(!e.timeline)return null;const c=fA(e,e.timeline.currentTime);if(c===null||e.startTime===null)return null;let S=(c-e.startTime)*e.animation.playbackRate;return S==-0&&(S=0),S}function kg(e,c,S){if(!e.timeline)return;let N=c?fA(e,e.proxy.currentTime):Ho(e);if(N&&e.startTime!=null&&!e.proxy.pending){const L=NQ(e),K=Mg(e);let x=e.previousCurrentTime;L>0&&N>=K&&e.previousCurrentTime!=null?((x===null||x<K)&&(x=K),e.holdTime=c?N:x):L<0&&N<=0?((x==null||x>0)&&(x=0),e.holdTime=c?N:x):L!=0&&(c&&e.holdTime!==null&&(e.startTime=(function(b,u){if(!b.timeline)return null;const P=fA(b,b.timeline.currentTime);return P==null?null:P-u/b.animation.playbackRate})(e,e.holdTime)),e.holdTime=null)}Ng(e),e.previousCurrentTime=fA(e,e.proxy.currentTime),e.proxy.playState=="finished"?(e.finishedPromise||(e.finishedPromise=new MQ),e.finishedPromise.state=="pending"&&(S?Lo(e):Promise.resolve().then((()=>{Lo(e)})))):(e.finishedPromise&&e.finishedPromise.state=="resolved"&&(e.finishedPromise=new MQ),e.animation.playState!="paused"&&e.animation.pause())}function Mg(e){const c=(function(N){const L=N.proxy.effect.getTiming();return N.normalizedTiming||L})(e),S=c.delay+c.endDelay+c.iterations*c.duration;return Math.max(0,S)}function Ng(e){if(e.timeline)if(e.startTime!==null){const c=e.timeline.currentTime;if(c==null)return;ti(e,(fA(e,c)-e.startTime)*e.animation.playbackRate)}else e.holdTime!==null&&ti(e,e.holdTime)}function ti(e,c){const S=e.timeline,N=e.animation.playbackRate,L=S.currentTime&&S.currentTime.value==(N<0?0:100)?N<0?.001:-.001:0;e.animation.currentTime=c+L}function wi(e,c){if(!e.timeline)return;const S=e.proxy.playState=="paused"&&e.proxy.pending;let N=!1,L=fA(e,e.proxy.currentTime);NQ(e)==0&&L==null&&(e.holdTime=0),L==null&&(e.autoAlignStartTime=!0),(e.proxy.playState==="finished"||S)&&(e.holdTime=null,e.startTime=null,e.autoAlignStartTime=!0),e.holdTime&&(e.startTime=null),e.pendingTask&&(e.pendingTask=null,N=!0),(e.holdTime!==null||e.autoAlignStartTime||S||e.pendingPlaybackRate!==null)&&(e.readyPromise&&!N&&(e.readyPromise=null),Ng(e),e.readyPromise||DB(e),e.pendingTask="play",ii(e.timeline,e.animation,ai.bind(e.proxy)),kg(e,!1,!1))}function ai(e){const c=AA.get(this);if(!c)return;if(e==null)return void(c.proxy.playState!=="paused"&&c.animation.playState!="idle"&&c.animation.cancel());YC(c),c.pendingTask&&requestAnimationFrame((()=>{c.pendingTask!=="play"||c.startTime===null&&c.holdTime===null?c.pendingTask==="pause"&&Uo(c):Jo(c)}));const S=this.playState;if(S=="running"||S=="finished"){const N=fA(c,e);ti(c,(N-fA(c,this.startTime))*this.playbackRate),kg(c,!1,!1)}}function Yo(e){e.specifiedTiming=null}let AA=new WeakMap;window.addEventListener("pagehide",(e=>{AA=new WeakMap}),!1);let Ko=new WeakMap;function YC(e){if(!e.autoAlignStartTime||!e.timeline||!e.timeline.currentTime||e.proxy.playState==="idle"||e.proxy.playState==="paused"&&e.holdTime!==null)return;const c=e.rangeDuration;let S,N;try{S=CSS.percent(100*(function(K){if(!K.animationRange)return 0;const x=K.animationRange.start==="normal"?lo(K.timeline):K.animationRange.start;return Fo(K.timeline,x)})(e))}catch(K){S=CSS.percent(0),e.animationRange.start="normal",console.warn("Exception when calculating start offset",K)}try{N=CSS.percent(100*(1-(function(K){if(!K.animationRange)return 0;const x=K.animationRange.end==="normal"?fo(K.timeline):K.animationRange.end;return 1-Fo(K.timeline,x)})(e)))}catch(K){N=CSS.percent(100),e.animationRange.end="normal",console.warn("Exception when calculating end offset",K)}e.rangeDuration=N.value-S.value;const L=NQ(e);e.startTime=fA(e,L>=0?S:N),e.holdTime=null,e.rangeDuration!==c&&Yo(e)}function KC(e){throw new Error("Unsupported timeline class")}function lo(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(0)}:e instanceof yI?CSS.percent(0):void KC()}function fo(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(100)}:e instanceof yI?CSS.percent(100):void KC()}function La(e,c){if(!c)return{start:"normal",end:"normal"};const S={start:lo(e),end:fo(e)};if(e instanceof ViewTimeline){const N=NA(c),L=[],K=[];if(N.forEach((x=>{if(LC.includes(x))L.push(x);else try{K.push(CSSNumericValue.parse(x))}catch{throw TypeError(`Could not parse range "${c}"`)}})),L.length>2||K.length>2||K.length==1)throw TypeError("Invalid time range or unsupported time range format.");return L.length&&(S.start.rangeName=L[0],S.end.rangeName=L.length>1?L[1]:L[0]),K.length>1&&(S.start.offset=K[0],S.end.offset=K[1]),S}if(e instanceof yI){const N=c.split(" ");if(N.length!=2)throw TypeError("Invalid time range or unsupported time range format.");return S.start=CSSNumericValue.parse(N[0]),S.end=CSSNumericValue.parse(N[1]),S}KC()}function dC(e,c,S){if(!c||c==="normal")return"normal";if(e instanceof ViewTimeline){let N="cover",L=S==="start"?CSS.percent(0):CSS.percent(100);if(c instanceof Object)c.rangeName!==void 0&&(N=c.rangeName),c.offset!==void 0&&(L=c.offset);else{const K=NA(c);K.length===1?LC.includes(K[0])?N=K[0]:L=oA(CSSNumericValue.parse(K[0]),{}):K.length===2&&(N=K[0],L=oA(CSSNumericValue.parse(K[1]),{}))}if(!LC.includes(N))throw TypeError("Invalid range name");return{rangeName:N,offset:L}}if(e instanceof yI)return CSSNumericValue.parse(c);KC()}class lC{constructor(c,S,N={}){const L=S instanceof yI,K=c instanceof Mo?c:new Mo(c,L?void 0:S);Ko.set(K,this),AA.set(this,{animation:K,timeline:L?S:void 0,playState:L?"idle":null,readyPromise:null,finishedPromise:null,startTime:null,holdTime:null,rangeDuration:null,previousCurrentTime:null,autoAlignStartTime:!1,pendingPlaybackRate:null,pendingTask:null,specifiedTiming:null,normalizedTiming:null,effect:null,animationRange:L?La(S,N["animation-range"]):null,proxy:this})}get effect(){const c=AA.get(this);return c.timeline?(c.effect||(c.effect=(function(S){const N=S.animation.effect,L=N.updateTiming,K={apply:function(P){N.getTiming();const V=P.apply(N);if(S.timeline){const IA=S.duration??100;V.localTime=zg(S,V.localTime),V.endTime=zg(S,V.endTime),V.activeDuration=zg(S,V.activeDuration);const DA=Mg(S),LA=V.iterations?(DA-V.delay-V.endDelay)/V.iterations:0;V.duration=DA?CSS.percent(IA*LA/DA):CSS.percent(0),S.timeline.currentTime===void 0&&(V.localTime=null)}return V}},x={apply:function(P,V){if(S.specifiedTiming)return S.specifiedTiming;S.specifiedTiming=P.apply(N);let IA,DA=Object.assign({},S.specifiedTiming);if(DA.duration===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");return(DA.duration===null||DA.duration==="auto"||S.autoDurationEffect)&&S.timeline&&(S.autoDurationEffect=!0,DA.delay=0,DA.endDelay=0,IA=DA.iterations?1e5:0,DA.duration=DA.iterations?(IA-DA.delay-DA.endDelay)/DA.iterations:0,DA.duration<0&&(DA.duration=0,DA.endDelay=IA-DA.delay),L.apply(N,[DA])),S.normalizedTiming=DA,S.specifiedTiming}},b={apply:function(P,V,IA){if(IA&&IA.length){if(S.timeline&&IA[0]){const DA=IA[0],LA=DA.duration;if(LA===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");if(DA.iterations===1/0)throw TypeError("Effect iterations cannot be Infinity when used with Scroll Timelines");LA!==void 0&&LA!=="auto"&&(S.autoDurationEffect=null)}S.specifiedTiming&&P.apply(N,[S.specifiedTiming]),P.apply(N,IA),Yo(S)}}},u=new Proxy(N,{get:function(P,V){const IA=P[V];return typeof IA=="function"?IA.bind(N):IA},set:function(P,V,IA){return P[V]=IA,!0}});return u.getComputedTiming=new Proxy(N.getComputedTiming,K),u.getTiming=new Proxy(N.getTiming,x),u.updateTiming=new Proxy(N.updateTiming,b),u})(c)),c.effect):c.animation.effect}set effect(c){const S=AA.get(this);S.animation.effect=c,S.effect=null,S.autoDurationEffect=null}get timeline(){const c=AA.get(this);return c.timeline||c.animation.timeline}set timeline(c){const S=AA.get(this),N=this.timeline;if(N==c)return;const L=this.playState,K=this.currentTime;let x,b=Mg(S);x=K===null?null:b===0?0:fA(S,K)/b;const u=N instanceof yI,P=c instanceof yI,V=this.pending;if(u&&Ei(S.timeline,S.animation),P)return S.timeline=c,wg(S),S.autoAlignStartTime=!0,S.startTime=null,S.holdTime=null,L!=="running"&&L!=="finished"||(S.readyPromise&&S.readyPromise.state!=="resolved"||DB(S),S.pendingTask="play",ii(S.timeline,S.animation,ai.bind(this))),L==="paused"&&x!==null&&(S.holdTime=x*b),V&&(S.readyPromise&&S.readyPromise.state!="resolved"||DB(S),S.pendingTask=L=="paused"?"pause":"play"),S.startTime!==null&&(S.holdTime=null),void kg(S,!1,!1);if(S.animation.timeline!=c)throw TypeError("Unsupported timeline: "+c);if(Ei(S.timeline,S.animation),S.timeline=null,u)switch(K!==null&&(S.animation.currentTime=x*Mg(S)),L){case"paused":S.animation.pause();break;case"running":case"finished":S.animation.play()}}get startTime(){const c=AA.get(this);return c.timeline?zg(c,c.startTime):c.animation.startTime}set startTime(c){const S=AA.get(this);if(c=fA(S,c),!S.timeline)return void(S.animation.startTime=c);S.autoAlignStartTime=!1,fA(S,S.timeline.currentTime)==null&&S.startTime!=null&&(S.holdTime=null,Ng(S));const N=fA(S,this.currentTime);wg(S),S.startTime=c,S.startTime!==null&&S.animation.playbackRate!=0?S.holdTime=null:S.holdTime=N,S.pendingTask&&(S.pendingTask=null,S.readyPromise.resolve(this)),kg(S,!0,!1),Ng(S)}get currentTime(){const c=AA.get(this);return c.timeline?c.holdTime!=null?zg(c,c.holdTime):zg(c,Ho(c)):c.animation.currentTime}set currentTime(c){const S=AA.get(this);S.timeline?((function(N,L){if(L==null&&N.currentTime!==null)throw new TypeError;L=fA(N,L),N.autoAlignStartTime=!1,N.holdTime!==null||N.startTime===null||N.timeline.phase==="inactive"||N.animation.playbackRate===0?N.holdTime=L:N.startTime=fA(N,N.timeline.currentTime)-L/N.animation.playbackRate,N.timeline.phase==="inactive"&&(N.startTime=null),N.previousCurrentTime=null})(S,c),S.pendingTask=="pause"&&(S.holdTime=fA(S,c),wg(S),S.startTime=null,S.pendingTask=null,S.readyPromise.resolve(this)),kg(S,!0,!1)):S.animation.currentTime=c}get playbackRate(){return AA.get(this).animation.playbackRate}set playbackRate(c){const S=AA.get(this);if(!S.timeline)return void(S.animation.playbackRate=c);S.pendingPlaybackRate=null;const N=this.currentTime;S.animation.playbackRate=c,N!==null&&(this.currentTime=N)}get playState(){const c=AA.get(this);if(!c.timeline)return c.animation.playState;const S=fA(c,this.currentTime);return S===null&&c.startTime===null&&c.pendingTask==null?"idle":c.pendingTask=="pause"||c.startTime===null&&c.pendingTask!="play"?"paused":S!=null&&(c.animation.playbackRate>0&&S>=Mg(c)||c.animation.playbackRate<0&&S<=0)?"finished":"running"}get rangeStart(){var c;return((c=AA.get(this).animationRange)==null?void 0:c.start)??"normal"}set rangeStart(c){const S=AA.get(this);if(!S.timeline)return S.animation.rangeStart=c;S.timeline instanceof yI&&(S.animationRange.start=dC(S.timeline,c,"start"),YC(S),Ng(S))}get rangeEnd(){var c;return((c=AA.get(this).animationRange)==null?void 0:c.end)??"normal"}set rangeEnd(c){const S=AA.get(this);if(!S.timeline)return S.animation.rangeEnd=c;S.timeline instanceof yI&&(S.animationRange.end=dC(S.timeline,c,"end"),YC(S),Ng(S))}get replaceState(){return AA.get(this).animation.pending}get pending(){const c=AA.get(this);return c.timeline?!!c.readyPromise&&c.readyPromise.state=="pending":c.animation.pending}finish(){const c=AA.get(this);if(!c.timeline)return void c.animation.finish();const S=NQ(c),N=Mg(c);if(S==0)throw new DOMException("Cannot finish Animation with a playbackRate of 0.","InvalidStateError");if(S>0&&N==1/0)throw new DOMException("Cannot finish Animation with an infinite target effect end.","InvalidStateError");wg(c);const L=S<0?0:N;this.currentTime=zg(c,L);const K=fA(c,c.timeline.currentTime);c.startTime===null&&K!==null&&(c.startTime=K-L/c.animation.playbackRate),c.pendingTask=="pause"&&c.startTime!==null&&(c.holdTime=null,c.pendingTask=null,c.readyPromise.resolve(this)),c.pendingTask=="play"&&c.startTime!==null&&(c.pendingTask=null,c.readyPromise.resolve(this)),kg(c,!0,!0)}play(){const c=AA.get(this);c.timeline?wi(c):c.animation.play()}pause(){const c=AA.get(this);c.timeline?this.playState!="paused"&&(c.animation.currentTime===null&&(c.autoAlignStartTime=!0),c.pendingTask=="play"?c.pendingTask=null:c.readyPromise=null,c.readyPromise||DB(c),c.pendingTask="pause",ii(c.timeline,c.animation,ai.bind(c.proxy))):c.animation.pause()}reverse(){const c=AA.get(this),S=NQ(c),N=fA(c,this.currentTime),L=Mg(c)==1/0,K=S!=0&&(S<0||N>0||!L);if(!c.timeline||!K)return K&&(c.pendingPlaybackRate=-NQ(c)),void c.animation.reverse();if(c.timeline.phase=="inactive")throw new DOMException("Cannot reverse an animation with no active timeline","InvalidStateError");this.updatePlaybackRate(-S),wi(c)}updatePlaybackRate(c){const S=AA.get(this);if(S.pendingPlaybackRate=c,!S.timeline)return void S.animation.updatePlaybackRate(c);const N=this.playState;if(!S.readyPromise||S.readyPromise.state!="pending")switch(N){case"idle":case"paused":wg(S);break;case"finished":const L=fA(S,S.timeline.currentTime),K=L!==null?(L-S.startTime)*S.animation.playbackRate:null;S.startTime=c==0?L:L!=null&&K!=null?(L-K)/c:null,wg(S),kg(S,!1,!1),Ng(S);break;default:wi(S)}}persist(){AA.get(this).animation.persist()}get id(){return AA.get(this).animation.id}set id(c){AA.get(this).animation.id=c}cancel(){const c=AA.get(this);c.timeline?(this.playState!="idle"&&((function(S){S.pendingTask&&(S.pendingTask=null,wg(S),S.readyPromise.reject(No()),DB(S),S.readyPromise.resolve(S.proxy))})(c),c.finishedPromise&&c.finishedPromise.state=="pending"&&c.finishedPromise.reject(No()),c.finishedPromise=new MQ,c.animation.cancel()),c.startTime=null,c.holdTime=null,Ei(c.timeline,c.animation)):c.animation.cancel()}get onfinish(){return AA.get(this).animation.onfinish}set onfinish(c){AA.get(this).animation.onfinish=c}get oncancel(){return AA.get(this).animation.oncancel}set oncancel(c){AA.get(this).animation.oncancel=c}get onremove(){return AA.get(this).animation.onremove}set onremove(c){AA.get(this).animation.onremove=c}get finished(){const c=AA.get(this);return c.timeline?(c.finishedPromise||(c.finishedPromise=new MQ),c.finishedPromise.promise):c.animation.finished}get ready(){const c=AA.get(this);return c.timeline?(c.readyPromise||(c.readyPromise=new MQ,c.readyPromise.resolve(this)),c.readyPromise.promise):c.animation.ready}addEventListener(c,S,N){AA.get(this).animation.addEventListener(c,S,N)}removeEventListener(c,S,N){AA.get(this).animation.removeEventListener(c,S,N)}dispatchEvent(c){AA.get(this).animation.dispatchEvent(c)}}function Ha(e,c){const S=c.timeline;S instanceof yI&&delete c.timeline;const N=Ua.apply(this,[e,c]),L=new lC(N,S);return S instanceof yI&&(N.pause(),AA.get(L).animationRange={start:dC(S,c.rangeStart,"start"),end:dC(S,c.rangeEnd,"end")},L.play()),L}function xo(e){for(let c=0;c<e.length;++c){let S=Ko.get(e[c]);S&&(e[c]=S)}return e}function Ya(e){return xo(Ja.apply(this,[e]))}function Ka(e){return xo(Na.apply(this,[e]))}const jA={IDENTIFIER:/[\w\\\@_-]+/g,WHITE_SPACE:/\s*/g,TIME:/^[0-9]+(s|ms)/,SCROLL_TIMELINE:/scroll-timeline\s*:([^;}]+)/,SCROLL_TIMELINE_NAME:/scroll-timeline-name\s*:([^;}]+)/,SCROLL_TIMELINE_AXIS:/scroll-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE:/view-timeline\s*:([^;}]+)/,VIEW_TIMELINE_NAME:/view-timeline-name\s*:([^;}]+)/,VIEW_TIMELINE_AXIS:/view-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE_INSET:/view-timeline-inset\s*:([^;}]+)/,ANIMATION_TIMELINE:/animation-timeline\s*:([^;}]+)/,ANIMATION_TIME_RANGE:/animation-range\s*:([^;}]+)/,ANIMATION_NAME:/animation-name\s*:([^;}]+)/,ANIMATION:/animation\s*:([^;}]+)/,ANONYMOUS_SCROLL_TIMELINE:/scroll\(([^)]*)\)/,ANONYMOUS_VIEW_TIMELINE:/view\(([^)]*)\)/},JQ=["block","inline","x","y"],da=["nearest","root","self"],qg=new class{constructor(){this.cssRulesWithTimelineName=[],this.nextAnonymousTimelineNameIndex=0,this.anonymousScrollTimelineOptions=new Map,this.anonymousViewTimelineOptions=new Map,this.sourceSelectorToScrollTimeline=[],this.subjectSelectorToViewTimeline=[],this.keyframeNamesSelectors=new Map}transpileStyleSheet(e,c,S){const N={sheetSrc:e,index:0,name:S};for(;N.index<N.sheetSrc.length&&(this.eatWhitespace(N),!(N.index>=N.sheetSrc.length));){if(this.lookAhead("/*",N)){for(;this.lookAhead("/*",N);)this.eatComment(N),this.eatWhitespace(N);continue}const L=this.parseQualifiedRule(N);L&&(c?this.parseKeyframesAndSaveNameMapping(L,N):this.handleScrollTimelineProps(L,N))}return N.sheetSrc}getAnimationTimelineOptions(e,c){for(let S=this.cssRulesWithTimelineName.length-1;S>=0;S--){const N=this.cssRulesWithTimelineName[S];try{if(c.matches(N.selector)&&(!N["animation-name"]||N["animation-name"]==e))return{"animation-timeline":N["animation-timeline"],"animation-range":N["animation-range"]}}catch{}}return null}getAnonymousScrollTimelineOptions(e,c){const S=this.anonymousScrollTimelineOptions.get(e);return S?{anonymousSource:S.source,anonymousTarget:c,source:So(S.source??"nearest",c),axis:S.axis?S.axis:"block"}:null}getScrollTimelineOptions(e,c){const S=this.getAnonymousScrollTimelineOptions(e,c);if(S)return S;for(let N=this.sourceSelectorToScrollTimeline.length-1;N>=0;N--){const L=this.sourceSelectorToScrollTimeline[N];if(L.name==e){const K=this.findPreviousSiblingOrAncestorMatchingSelector(c,L.selector);if(K)return{source:K,...L.axis?{axis:L.axis}:{}}}}return null}findPreviousSiblingOrAncestorMatchingSelector(e,c){let S=e;for(;S;){if(S.matches(c))return S;S=S.previousElementSibling||S.parentElement}return null}getAnonymousViewTimelineOptions(e,c){const S=this.anonymousViewTimelineOptions.get(e);return S?{subject:c,axis:S.axis?S.axis:"block",inset:S.inset?S.inset:"auto"}:null}getViewTimelineOptions(e,c){const S=this.getAnonymousViewTimelineOptions(e,c);if(S)return S;for(let N=this.subjectSelectorToViewTimeline.length-1;N>=0;N--){const L=this.subjectSelectorToViewTimeline[N];if(L.name==e){const K=this.findPreviousSiblingOrAncestorMatchingSelector(c,L.selector);if(K)return{subject:K,axis:L.axis,inset:L.inset}}}return null}handleScrollTimelineProps(e,c){if(e.selector.includes("@keyframes"))return;const S=e.block.contents.includes("animation-name:"),N=e.block.contents.includes("animation-timeline:"),L=e.block.contents.includes("animation:");if(this.saveSourceSelectorToScrollTimeline(e),this.saveSubjectSelectorToViewTimeline(e),!N&&!S&&!L)return;let K=[],x=[],b=!1;N&&(K=this.extractScrollTimelineNames(e.block.contents)),S&&(x=this.extractMatches(e.block.contents,jA.ANIMATION_NAME)),N&&S||(L&&this.extractMatches(e.block.contents,jA.ANIMATION).forEach((u=>{const P=this.extractAnimationName(u);P&&N&&x.push(P),N&&(this.hasDuration(u)||(this.hasAutoDuration(u)&&(e.block.contents=e.block.contents.replace("auto"," ")),e.block.contents=e.block.contents.replace(u," 1s "+u),b=!0))})),b&&this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,c)),this.saveRelationInList(e,K,x)}saveSourceSelectorToScrollTimeline(e){const c=e.block.contents.includes("scroll-timeline:"),S=e.block.contents.includes("scroll-timeline-name:"),N=e.block.contents.includes("scroll-timeline-axis:");if(!c&&!S)return;let L=[];if(c){const x=this.extractMatches(e.block.contents,jA.SCROLL_TIMELINE);for(const b of x){const u=this.split(b);let P={selector:e.selector,name:""};u.length==1?P.name=u[0]:u.length==2&&(JQ.includes(u[0])?(P.axis=u[0],P.name=u[1]):(P.axis=u[1],P.name=u[0])),L.push(P)}}if(S){const x=this.extractMatches(e.block.contents,jA.SCROLL_TIMELINE_NAME);for(let b=0;b<x.length;b++)if(b<L.length)L[b].name=x[b];else{let u={selector:e.selector,name:x[b]};L.push(u)}}let K=[];if(N){const x=this.extractMatches(e.block.contents,jA.SCROLL_TIMELINE_AXIS);if(K=x.filter((b=>JQ.includes(b))),K.length!=x.length)throw new Error("Invalid axis")}for(let x=0;x<L.length;x++)K.length&&(L[x].axis=K[x%L.length]);this.sourceSelectorToScrollTimeline.push(...L)}saveSubjectSelectorToViewTimeline(e){const c=e.block.contents.includes("view-timeline:"),S=e.block.contents.includes("view-timeline-name:"),N=e.block.contents.includes("view-timeline-axis:"),L=e.block.contents.includes("view-timeline-inset:");if(!c&&!S)return;let K=[];if(c){const u=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE);for(let P of u){const V=this.split(P);let IA={selector:e.selector,name:"",inset:null};V.length==1?IA.name=V[0]:V.length==2&&(JQ.includes(V[0])?(IA.axis=V[0],IA.name=V[1]):(IA.axis=V[1],IA.name=V[0])),K.push(IA)}}if(S){const u=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE_NAME);for(let P=0;P<u.length;P++)if(P<K.length)K[P].name=u[P];else{let V={selector:e.selector,name:u[P],inset:null};K.push(V)}}let x=[],b=[];if(L&&(x=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE_INSET)),N){const u=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE_AXIS);if(b=u.filter((P=>JQ.includes(P))),b.length!=u.length)throw new Error("Invalid axis")}for(let u=0;u<K.length;u++)x.length&&(K[u].inset=x[u%K.length]),b.length&&(K[u].axis=b[u%K.length]);this.subjectSelectorToViewTimeline.push(...K)}hasDuration(e){return e.split(" ").filter((c=>{return S=c,jA.TIME.exec(S);var S})).length>=1}hasAutoDuration(e){return e.split(" ").filter((c=>c==="auto")).length>=1}saveRelationInList(e,c,S){let N=[];e.block.contents.includes("animation-range:")&&(N=this.extractMatches(e.block.contents,jA.ANIMATION_TIME_RANGE));const L=Math.max(c.length,S.length,N.length);for(let K=0;K<L;K++)this.cssRulesWithTimelineName.push({selector:e.selector,"animation-timeline":c[K%c.length],...S.length?{"animation-name":S[K%S.length]}:{},...N.length?{"animation-range":N[K%N.length]}:{}})}extractScrollTimelineNames(e){const c=jA.ANIMATION_TIMELINE.exec(e)[1].trim(),S=[];return c.split(",").map((N=>N.trim())).forEach((N=>{if((function(L){return(L.startsWith("scroll")||L.startsWith("view"))&&L.includes("(")})(N)){const L=this.saveAnonymousTimelineName(N);S.push(L)}else S.push(N)})),S}saveAnonymousTimelineName(e){const c=":t"+this.nextAnonymousTimelineNameIndex++;return e.startsWith("scroll(")?this.anonymousScrollTimelineOptions.set(c,this.parseAnonymousScrollTimeline(e)):this.anonymousViewTimelineOptions.set(c,this.parseAnonymousViewTimeline(e)),c}parseAnonymousScrollTimeline(e){const c=jA.ANONYMOUS_SCROLL_TIMELINE.exec(e);if(!c)return null;const S=c[1],N={};return S.split(" ").forEach((L=>{JQ.includes(L)?N.axis=L:da.includes(L)&&(N.source=L)})),N}parseAnonymousViewTimeline(e){const c=jA.ANONYMOUS_VIEW_TIMELINE.exec(e);if(!c)return null;const S=c[1],N={};return S.split(" ").forEach((L=>{JQ.includes(L)?N.axis=L:N.inset=N.inset?`${N.inset} ${L}`:L})),N}extractAnimationName(e){return this.findMatchingEntryInContainer(e,this.keyframeNamesSelectors)}findMatchingEntryInContainer(e,c){const S=e.split(" ").filter((N=>c.has(N)));return S?S[0]:null}parseIdentifier(e){jA.IDENTIFIER.lastIndex=e.index;const c=jA.IDENTIFIER.exec(e.sheetSrc);if(!c)throw this.parseError(e,"Expected an identifier");return e.index+=c[0].length,c[0]}parseKeyframesAndSaveNameMapping(e,c){if(e.selector.startsWith("@keyframes")){const S=this.replaceKeyframesAndGetMapping(e,c);e.selector.split(" ").forEach(((N,L)=>{L>0&&this.keyframeNamesSelectors.set(N,S)}))}}replaceKeyframesAndGetMapping(e,c){function S(u){return LC.some((P=>u.startsWith(P)))}const N=e.block.contents,L=(function(u){let P=0,V=-1,IA=-1;const DA=[];for(let LA=0;LA<u.length;LA++)u[LA]=="{"?P++:u[LA]=="}"&&P--,P==1&&u[LA]!="{"&&u[LA]!="}"&&V==-1&&(V=LA),P==2&&u[LA]=="{"&&(IA=LA,DA.push({start:V,end:IA}),V=IA=-1);return DA})(N);if(L.length==0)return new Map;const K=new Map;let x=!1;const b=[];b.push(N.substring(0,L[0].start));for(let u=0;u<L.length;u++){const P=N.substring(L[u].start,L[u].end);let V=[];P.split(",").forEach((IA=>{const DA=IA.split(" ").map((bA=>bA.trim())).filter((bA=>bA!="")).join(" "),LA=K.size;K.set(LA,DA),V.push(`${LA}%`),S(DA)&&(x=!0)})),b.push(V.join(",")),u==L.length-1?b.push(N.substring(L[u].end)):b.push(N.substring(L[u].end,L[u+1].start))}return x?(e.block.contents=b.join(""),this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,c),K):new Map}parseQualifiedRule(e){const c=e.index,S=this.parseSelector(e).trim();if(S)return{selector:S,block:this.eatBlock(e),startIndex:c,endIndex:e.index}}removeEnclosingDoubleQuotes(e){let c=e[0]=='"'?1:0,S=e[e.length-1]=='"'?e.length-1:e.length;return e.substring(c,S)}assertString(e,c){if(e.sheetSrc.substr(e.index,c.length)!=c)throw this.parseError(e,`Did not find expected sequence ${c}`);e.index+=c.length}replacePart(e,c,S,N){if(N.sheetSrc=N.sheetSrc.slice(0,e)+S+N.sheetSrc.slice(c),N.index>=c){const L=N.index-c;N.index=e+S.length+L}}eatComment(e){this.assertString(e,"/*"),this.eatUntil("*/",e,!0),this.assertString(e,"*/")}eatBlock(e){const c=e.index;this.assertString(e,"{");let S=1;for(;S!=0;)this.lookAhead("/*",e)?this.eatComment(e):(e.sheetSrc[e.index]==="{"?S++:e.sheetSrc[e.index]==="}"&&S--,this.advance(e));const N=e.index;return{startIndex:c,endIndex:N,contents:e.sheetSrc.slice(c,N)}}advance(e){if(e.index++,e.index>e.sheetSrc.length)throw this.parseError(e,"Advanced beyond the end")}parseError(e,c){return Error(`(${e.name?e.name:"<anonymous file>"}): ${c}`)}eatUntil(e,c,S=!1){const N=c.index;for(;!this.lookAhead(e,c);)this.advance(c);return S&&(c.sheetSrc=c.sheetSrc.slice(0,N)+" ".repeat(c.index-N)+c.sheetSrc.slice(c.index)),c.sheetSrc.slice(N,c.index)}parseSelector(e){let c=e.index;if(this.eatUntil("{",e),c===e.index)throw Error("Empty selector");return e.sheetSrc.slice(c,e.index)}eatWhitespace(e){jA.WHITE_SPACE.lastIndex=e.index;const c=jA.WHITE_SPACE.exec(e.sheetSrc);c&&(e.index+=c[0].length)}lookAhead(e,c){return c.sheetSrc.substr(c.index,e.length)==e}peek(e){return e.sheetSrc[e.index]}extractMatches(e,c,S=","){return c.exec(e)[1].trim().split(S).map((N=>N.trim()))}split(e){return e.split(" ").map((c=>c.trim())).filter((c=>c!=""))}};function la(e,c,S,N,L,K){const x=Bi(c),b=Ci(c,S);return ko(si(e,x,b,N,L),K,si("cover",x,b,N,L),S)}function fa(e,c,S){const N=qg.getAnimationTimelineOptions(c,S);if(!N)return null;const L=N["animation-timeline"];if(!L)return null;let K=qg.getScrollTimelineOptions(L,S)||qg.getViewTimelineOptions(L,S);return K?(K.subject&&(function(x,b){const u=oi(b.subject),P=b.axis||b.axis;function V(DA,LA){let bA=null;for(const[JI,Ig]of DA)if(JI==100*LA.offset){if(Ig=="from")bA=0;else if(Ig=="to")bA=100;else{const PI=Ig.split(" ");bA=PI.length==1?parseFloat(PI[0]):100*la(PI[0],u,b.subject,P,b.inset,CSS.percent(parseFloat(PI[1])))}break}return bA}const IA=qg.keyframeNamesSelectors.get(x.animationName);if(IA&&IA.size){const DA=[];x.effect.getKeyframes().forEach((bA=>{const JI=V(IA,bA);JI!==null&&JI>=0&&JI<=100&&(bA.offset=JI/100,DA.push(bA))}));const LA=DA.sort(((bA,JI)=>bA.offset<JI.offset?-1:bA.affset>JI.offset?1:0));x.effect.setKeyframes(LA)}})(e,K),{timeline:K.source?new yI(K):new kQ(K),animOptions:N}):null}function xa(){if(CSS.supports("animation-timeline: --works"))return!0;(function(){function c(N){if(N.innerHTML.trim().length===0||"aphrodite"in N.dataset)return;let L=qg.transpileStyleSheet(N.innerHTML,!0);L=qg.transpileStyleSheet(L,!1),N.innerHTML=L}function S(N){N.type!="text/css"&&N.rel!="stylesheet"||!N.href||new URL(N.href,document.baseURI).origin==location.origin&&fetch(N.getAttribute("href")).then((async L=>{const K=await L.text();let x=qg.transpileStyleSheet(K,!0);if(x=qg.transpileStyleSheet(K,!1),x!=K){const b=new Blob([x],{type:"text/css"}),u=URL.createObjectURL(b);N.setAttribute("href",u)}}))}new MutationObserver((N=>{for(const L of N)for(const K of L.addedNodes)K instanceof HTMLStyleElement&&c(K),K instanceof HTMLLinkElement&&S(K)})).observe(document.documentElement,{childList:!0,subtree:!0}),document.querySelectorAll("style").forEach((N=>c(N))),document.querySelectorAll("link").forEach((N=>S(N)))})();const e=CSS.supports;CSS.supports=c=>(c=c.replaceAll(/(animation-timeline|scroll-timeline(-(name|axis))?|view-timeline(-(name|axis|inset))?|timeline-scope)\s*:/g,"--supported-property:"),e(c)),window.addEventListener("animationstart",(c=>{c.target.getAnimations().filter((S=>S.animationName===c.animationName)).forEach((S=>{const N=fa(S,S.animationName,c.target);if(N)if(!N.timeline||S instanceof lC)S.timeline=N.timeline;else{const L=new lC(S,N.timeline,N.animOptions);S.pause(),L.play()}}))}))}(function(){if(!xa()){if(!Reflect.defineProperty(window,"ScrollTimeline",{value:yI}))throw Error("Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window");if(!Reflect.defineProperty(window,"ViewTimeline",{value:kQ}))throw Error("Error installing ViewTimeline polyfill: could not attach ViewTimeline to window");if(!Reflect.defineProperty(Element.prototype,"animate",{value:Ha}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's animate to DOM Element");if(!Reflect.defineProperty(window,"Animation",{value:lC}))throw Error("Error installing Animation constructor.");if(!Reflect.defineProperty(Element.prototype,"getAnimations",{value:Ya}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to DOM Element");if(!Reflect.defineProperty(document,"getAnimations",{value:Ka}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to document")}})()})();const vG=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),VG=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));exports.BatchedParticleRenderer=Y0;exports.Builder=bD;exports.ByteBuffer=mB;exports.ConstantColor=hQ;exports.ConstantValue=nA;exports.Matrix4=tg;exports.MeshBVH=gB;exports.MotionController=Re;exports.PROJECT_DOCUMENT_KEY=XD;exports.ParticleSystem=LE;exports.SIZE_PREFIX_LENGTH=ct;exports.TrailParticle=JE;exports.Vector4=YI;exports.WorkerBase=uG;exports.__viteBrowserExternal=VG;exports.applyDef=Ut;exports.applyOver=Ht;exports.attachNeedleIdsToLoadedGltf=et;exports.bundler=xc;exports.createNoise4D=d0;exports.createOverApplyState=Lt;exports.deriveInstanceId=Ee;exports.enableProjectDocumentInspection=p0;exports.evaluateProjectDocument=P0;exports.fetchProfile=he;exports.getProjectDocumentInspection=q0;exports.index=Qc;exports.index$1=pG;exports.index$2=TG;exports.isProjectDocument=Mt;exports.reportProjectIssues=f0;exports.resolveDocumentRemoteSrc=rB;exports.resolveMaterialEntity=Yt;exports.scrollTimeline=vG;exports.spark_module=Ky;exports.splitPath=vD;exports.v5=ja;
13104
+ `);new F.Vector3(-1,-3,1).normalize(),new F.Color(1,1,1),new F.Color(.5,.5,1);new F.Color(1,1,1),new F.Color(.25,.25,.5);var ya=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(ya||{});const py=Object.keys(ya);py.length;new F.Euler(0,0,0,"YXZ");var eo=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(eo||{});const Ga=Object.keys(eo);Ga.length;const uy=Object.freeze(Object.defineProperty({__proto__:null,ExtSplats:lg,JOINT_IDS:Ga,JointEnum:eo,LN_SCALE_MAX:dI,LN_SCALE_MIN:KI,OldSparkViewpoint:JD,OldSplatAccumulator:rE,PackedSplats:Gg,PagedSplats:qB,Readback:LC,RgbaArray:Da,SparkRenderer:My,SplatAccumulator:mQ,SplatEdit:_E,SplatEditSdf:sa,SplatEdits:aa,SplatFileType:HI,SplatGenerator:AB,SplatLoader:so,SplatMesh:Zg,SplatModifier:ea,SplatPager:eQ,SplatTransformer:LB,floatToUint8:MB,fromHalf:ig,getSplatFileType:ca,isAndroid:mw,isIos:fE,isMobile:lE,isOculus:Pw,isVisionPro:Tw,setPackedSplat:rD,toHalf:Eg,unpackSplat:dE},Symbol.toStringTag,{value:"Module"})),no=0,ra=1,Sa=2,UD=2,Pi=1.25,Os=1,wI=32,vA=wI/4,Ra=65535,SE=Math.pow(2,-24),Ai=Symbol("SKIP_GENERATION"),Fa={strategy:no,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[Ai]:!1};function pA(B,A,I){return I.min.x=A[B],I.min.y=A[B+1],I.min.z=A[B+2],I.max.x=A[B+3],I.max.y=A[B+4],I.max.z=A[B+5],I}function Xs(B){let A=-1,I=-1/0;for(let g=0;g<3;g++){const Q=B[g+3]-B[g];Q>I&&(I=Q,A=g)}return A}function vs(B,A){A.set(B)}function Vs(B,A,I){let g,Q;for(let C=0;C<3;C++){const E=C+3;g=B[C],Q=A[C],I[C]=g<Q?g:Q,g=B[E],Q=A[E],I[E]=g>Q?g:Q}}function jC(B,A,I){for(let g=0;g<3;g++){const Q=A[B+2*g],C=A[B+2*g+1],E=Q-C,i=Q+C;E<I[g]&&(I[g]=E),i>I[g+3]&&(I[g+3]=i)}}function aB(B){const A=B[3]-B[0],I=B[4]-B[1],g=B[5]-B[2];return 2*(A*I+I*g+g*A)}function VA(B,A){return A[B+15]===Ra}function aI(B,A){return A[B+6]}function RI(B,A){return A[B+14]}function AI(B){return B+vA}function II(B,A){const I=A[B+6];return B+I*vA}function co(B,A){return A[B+7]}function Ti(B,A,I,g,Q){let C=1/0,E=1/0,i=1/0,D=-1/0,o=-1/0,s=-1/0,t=1/0,w=1/0,a=1/0,y=-1/0,r=-1/0,c=-1/0;const h=B.offset||0;for(let G=(A-h)*6,R=(A+I-h)*6;G<R;G+=6){const N=B[G+0],k=B[G+1],J=N-k,U=N+k;J<C&&(C=J),U>D&&(D=U),N<t&&(t=N),N>y&&(y=N);const H=B[G+2],d=B[G+3],Y=H-d,f=H+d;Y<E&&(E=Y),f>o&&(o=f),H<w&&(w=H),H>r&&(r=H);const l=B[G+4],p=B[G+5],q=l-p,m=l+p;q<i&&(i=q),m>s&&(s=m),l<a&&(a=l),l>c&&(c=l)}g[0]=C,g[1]=E,g[2]=i,g[3]=D,g[4]=o,g[5]=s,Q[0]=t,Q[1]=w,Q[2]=a,Q[3]=y,Q[4]=r,Q[5]=c}const Lg=32,qy=(B,A)=>B.candidate-A.candidate,Tg=new Array(Lg).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),zC=new Float32Array(6);function by(B,A,I,g,Q,C){let E=-1,i=0;if(C===no)E=Xs(A),E!==-1&&(i=(A[E]+A[E+3])/2);else if(C===ra)E=Xs(B),E!==-1&&(i=my(I,g,Q,E));else if(C===Sa){const D=aB(B);let o=Pi*Q;const s=I.offset||0,t=(g-s)*6,w=(g+Q-s)*6;for(let a=0;a<3;a++){const y=A[a],h=(A[a+3]-y)/Lg;if(Q<Lg/4){const G=[...Tg];G.length=Q;let R=0;for(let k=t;k<w;k+=6,R++){const J=G[R];J.candidate=I[k+2*a],J.count=0;const{bounds:U,leftCacheBounds:H,rightCacheBounds:d}=J;for(let Y=0;Y<3;Y++)d[Y]=1/0,d[Y+3]=-1/0,H[Y]=1/0,H[Y+3]=-1/0,U[Y]=1/0,U[Y+3]=-1/0;jC(k,I,U)}G.sort(qy);let N=Q;for(let k=0;k<N;k++){const J=G[k];for(;k+1<N&&G[k+1].candidate===J.candidate;)G.splice(k+1,1),N--}for(let k=t;k<w;k+=6){const J=I[k+2*a];for(let U=0;U<N;U++){const H=G[U];J>=H.candidate?jC(k,I,H.rightCacheBounds):(jC(k,I,H.leftCacheBounds),H.count++)}}for(let k=0;k<N;k++){const J=G[k],U=J.count,H=Q-J.count,d=J.leftCacheBounds,Y=J.rightCacheBounds;let f=0;U!==0&&(f=aB(d)/D);let l=0;H!==0&&(l=aB(Y)/D);const p=Os+Pi*(f*U+l*H);p<o&&(E=a,o=p,i=J.candidate)}}else{for(let N=0;N<Lg;N++){const k=Tg[N];k.count=0,k.candidate=y+h+N*h;const J=k.bounds;for(let U=0;U<3;U++)J[U]=1/0,J[U+3]=-1/0}for(let N=t;N<w;N+=6){let U=~~((I[N+2*a]-y)/h);U>=Lg&&(U=Lg-1);const H=Tg[U];H.count++,jC(N,I,H.bounds)}const G=Tg[Lg-1];vs(G.bounds,G.rightCacheBounds);for(let N=Lg-2;N>=0;N--){const k=Tg[N],J=Tg[N+1];Vs(k.bounds,J.rightCacheBounds,k.rightCacheBounds)}let R=0;for(let N=0;N<Lg-1;N++){const k=Tg[N],J=k.count,U=k.bounds,d=Tg[N+1].rightCacheBounds;J!==0&&(R===0?vs(U,zC):Vs(U,zC,zC)),R+=J;let Y=0,f=0;R!==0&&(Y=aB(zC)/D);const l=Q-R;l!==0&&(f=aB(d)/D);const p=Os+Pi*(Y*R+f*l);p<o&&(E=a,o=p,i=k.candidate)}}}}else console.warn(`BVH: Invalid build strategy value ${C} used.`);return{axis:E,pos:i}}function my(B,A,I,g){let Q=0;const C=B.offset;for(let E=A,i=A+I;E<i;E++)Q+=B[(E-C)*6+g*2];return Q/I}class Oi{constructor(){this.boundingData=new Float32Array(6)}}function Py(B,A,I,g,Q,C){let E=g,i=g+Q-1;const D=C.pos,o=C.axis*2,s=I.offset||0;for(;;){for(;E<=i&&I[(E-s)*6+o]<D;)E++;for(;E<=i&&I[(i-s)*6+o]>=D;)i--;if(E<i){for(let t=0;t<A;t++){let w=B[E*A+t];B[E*A+t]=B[i*A+t],B[i*A+t]=w}for(let t=0;t<6;t++){const w=E-s,a=i-s,y=I[w*6+t];I[w*6+t]=I[a*6+t],I[a*6+t]=y}E++,i--}else return E}}let ka,RE,LD,Ma;const Ty=Math.pow(2,32);function HD(B){return"count"in B?1:1+HD(B.left)+HD(B.right)}function Oy(B,A,I){return ka=new Float32Array(I),RE=new Uint32Array(I),LD=new Uint16Array(I),Ma=new Uint8Array(I),YD(B,A)}function YD(B,A){const I=B/4,g=B/2,Q="count"in A,C=A.boundingData;for(let E=0;E<6;E++)ka[I+E]=C[E];if(Q)return A.buffer?(Ma.set(new Uint8Array(A.buffer),B),B+A.buffer.byteLength):(RE[I+6]=A.offset,LD[g+14]=A.count,LD[g+15]=Ra,B+wI);{const{left:E,right:i,splitAxis:D}=A,o=B+wI;let s=YD(o,E);const t=B/wI,a=s/wI-t;if(a>Ty)throw new Error("MeshBVH: Cannot store relative child node offset greater than 32 bits.");return RE[I+6]=a,RE[I+7]=D,YD(s,i)}}function Xy(B,A,I,g,Q){const{maxDepth:C,verbose:E,maxLeafSize:i,strategy:D,onProgress:o}=Q,s=B.primitiveBuffer,t=B.primitiveBufferStride,w=new Float32Array(6);let a=!1;const y=new Oi;return Ti(A,I,g,y.boundingData,w),c(y,I,g,w),y;function r(h){o&&o(h/g)}function c(h,G,R,N=null,k=0){if(!a&&k>=C&&(a=!0,E&&console.warn(`BVH: Max depth of ${C} reached when generating BVH. Consider increasing maxDepth.`)),R<=i||k>=C)return r(G+R),h.offset=G,h.count=R,h;const J=by(h.boundingData,N,A,G,R,D);if(J.axis===-1)return r(G+R),h.offset=G,h.count=R,h;const U=Py(s,t,A,G,R,J);if(U===G||U===G+R)r(G+R),h.offset=G,h.count=R;else{h.splitAxis=J.axis;const H=new Oi,d=G,Y=U-G;h.left=H,Ti(A,d,Y,H.boundingData,w),c(H,d,Y,w,k+1);const f=new Oi,l=U,p=R-Y;h.right=f,Ti(A,l,p,f.boundingData,w),c(f,l,p,w,k+1)}return h}}function vy(B,A){const I=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,g=B.getRootRanges(A.range),Q=g[0],C=g[g.length-1],E={offset:Q.offset,count:C.offset+C.count-Q.offset},i=new Float32Array(6*E.count);i.offset=E.offset,B.computePrimitiveBounds(E.offset,E.count,i),B._roots=g.map(D=>{const o=Xy(B,i,D.offset,D.count,A),s=HD(o),t=new I(wI*s);return Oy(0,o,t),t})}class ho{constructor(A){this._getNewPrimitive=A,this._primitives=[]}getPrimitive(){const A=this._primitives;return A.length===0?this._getNewPrimitive():A.pop()}releasePrimitive(A){this._primitives.push(A)}}class Vy{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const A=[];let I=null;this.setBuffer=g=>{I&&A.push(I),I=g,this.float32Array=new Float32Array(g),this.uint16Array=new Uint16Array(g),this.uint32Array=new Uint32Array(g)},this.clearBuffer=()=>{I=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,A.length!==0&&this.setBuffer(A.pop())}}}const KA=new Vy;let Vg,XQ;const dQ=[],_C=new ho(()=>new F.Box3);function Zy(B,A,I,g,Q,C){Vg=_C.getPrimitive(),XQ=_C.getPrimitive(),dQ.push(Vg,XQ),KA.setBuffer(B._roots[A]);const E=KD(0,B.geometry,I,g,Q,C);KA.clearBuffer(),_C.releasePrimitive(Vg),_C.releasePrimitive(XQ),dQ.pop(),dQ.pop();const i=dQ.length;return i>0&&(XQ=dQ[i-1],Vg=dQ[i-2]),E}function KD(B,A,I,g,Q=null,C=0,E=0){const{float32Array:i,uint16Array:D,uint32Array:o}=KA;let s=B*2;if(VA(s,D)){const w=aI(B,o),a=RI(s,D);return pA(B,i,Vg),g(w,a,!1,E,C+B/vA,Vg)}else{let Y=function(l){const{uint16Array:p,uint32Array:q}=KA;let m=l*2;for(;!VA(m,p);)l=AI(l),m=l*2;return aI(l,q)},f=function(l){const{uint16Array:p,uint32Array:q}=KA;let m=l*2;for(;!VA(m,p);)l=II(l,q),m=l*2;return aI(l,q)+RI(m,p)};const w=AI(B),a=II(B,o);let y=w,r=a,c,h,G,R;if(Q&&(G=Vg,R=XQ,pA(y,i,G),pA(r,i,R),c=Q(G),h=Q(R),h<c)){y=a,r=w;const l=c;c=h,h=l,G=R}G||(G=Vg,pA(y,i,G));const N=VA(y*2,D),k=I(G,N,c,E+1,C+y/vA);let J;if(k===UD){const l=Y(y),q=f(y)-l;J=g(l,q,!0,E+1,C+y/vA,G)}else J=k&&KD(y,A,I,g,Q,C,E+1);if(J)return!0;R=XQ,pA(r,i,R);const U=VA(r*2,D),H=I(R,U,h,E+1,C+r/vA);let d;if(H===UD){const l=Y(r),q=f(r)-l;d=g(l,q,!0,E+1,C+r/vA,R)}else d=H&&KD(r,A,I,g,Q,C,E+1);return!!d}}const bB=new KA.constructor,uE=new KA.constructor,Xg=new ho(()=>new F.Box3),lQ=new F.Box3,fQ=new F.Box3,Xi=new F.Box3,vi=new F.Box3;let Vi=!1;function Wy(B,A,I,g){if(Vi)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");Vi=!0;const Q=B._roots,C=A._roots;let E,i=0,D=0;const o=new F.Matrix4().copy(I).invert();for(let s=0,t=Q.length;s<t;s++){bB.setBuffer(Q[s]),D=0;const w=Xg.getPrimitive();pA(0,bB.float32Array,w),w.applyMatrix4(o);for(let a=0,y=C.length;a<y&&(uE.setBuffer(C[a]),E=Cg(0,0,I,o,g,i,D,0,0,w),uE.clearBuffer(),D+=C[a].byteLength/wI,!E);a++);if(Xg.releasePrimitive(w),bB.clearBuffer(),i+=Q[s].byteLength/wI,E)break}return Vi=!1,E}function Cg(B,A,I,g,Q,C=0,E=0,i=0,D=0,o=null,s=!1){let t,w;s?(t=uE,w=bB):(t=bB,w=uE);const a=t.float32Array,y=t.uint32Array,r=t.uint16Array,c=w.float32Array,h=w.uint32Array,G=w.uint16Array,R=B*2,N=A*2,k=VA(R,r),J=VA(N,G);let U=!1;if(J&&k)s?U=Q(aI(A,h),RI(A*2,G),aI(B,y),RI(B*2,r),D,E+A/vA,i,C+B/vA):U=Q(aI(B,y),RI(B*2,r),aI(A,h),RI(A*2,G),i,C+B/vA,D,E+A/vA);else if(J){const H=Xg.getPrimitive();pA(A,c,H),H.applyMatrix4(I);const d=AI(B),Y=II(B,y);pA(d,a,lQ),pA(Y,a,fQ);const f=H.intersectsBox(lQ),l=H.intersectsBox(fQ);U=f&&Cg(A,d,g,I,Q,E,C,D,i+1,H,!s)||l&&Cg(A,Y,g,I,Q,E,C,D,i+1,H,!s),Xg.releasePrimitive(H)}else{const H=AI(A),d=II(A,h);pA(H,c,Xi),pA(d,c,vi);const Y=o.intersectsBox(Xi),f=o.intersectsBox(vi);if(Y&&f)U=Cg(B,H,I,g,Q,C,E,i,D+1,o,s)||Cg(B,d,I,g,Q,C,E,i,D+1,o,s);else if(Y)if(k)U=Cg(B,H,I,g,Q,C,E,i,D+1,o,s);else{const l=Xg.getPrimitive();l.copy(Xi).applyMatrix4(I);const p=AI(B),q=II(B,y);pA(p,a,lQ),pA(q,a,fQ);const m=l.intersectsBox(lQ),T=l.intersectsBox(fQ);U=m&&Cg(H,p,g,I,Q,E,C,D,i+1,l,!s)||T&&Cg(H,q,g,I,Q,E,C,D,i+1,l,!s),Xg.releasePrimitive(l)}else if(f)if(k)U=Cg(B,d,I,g,Q,C,E,i,D+1,o,s);else{const l=Xg.getPrimitive();l.copy(vi).applyMatrix4(I);const p=AI(B),q=II(B,y);pA(p,a,lQ),pA(q,a,fQ);const m=l.intersectsBox(lQ),T=l.intersectsBox(fQ);U=m&&Cg(d,p,g,I,Q,E,C,D,i+1,l,!s)||T&&Cg(d,q,g,I,Q,E,C,D,i+1,l,!s),Xg.releasePrimitive(l)}}return U}const Zs=new F.Box3,xQ=new Float32Array(6);class Na{constructor(){this._roots=null,this.primitiveBuffer=null,this.primitiveBufferStride=null}init(A){A={...Fa,...A},vy(this,A)}getRootRanges(){throw new Error("BVH: getRootRanges() not implemented")}writePrimitiveBounds(){throw new Error("BVH: writePrimitiveBounds() not implemented")}writePrimitiveRangeBounds(A,I,g,Q){let C=1/0,E=1/0,i=1/0,D=-1/0,o=-1/0,s=-1/0;for(let t=A,w=A+I;t<w;t++){this.writePrimitiveBounds(t,xQ,0);const[a,y,r,c,h,G]=xQ;a<C&&(C=a),c>D&&(D=c),y<E&&(E=y),h>o&&(o=h),r<i&&(i=r),G>s&&(s=G)}return g[Q+0]=C,g[Q+1]=E,g[Q+2]=i,g[Q+3]=D,g[Q+4]=o,g[Q+5]=s,g}computePrimitiveBounds(A,I,g){const Q=g.offset||0;for(let C=A,E=A+I;C<E;C++){this.writePrimitiveBounds(C,xQ,0);const[i,D,o,s,t,w]=xQ,a=(i+s)/2,y=(D+t)/2,r=(o+w)/2,c=(s-i)/2,h=(t-D)/2,G=(w-o)/2,R=(C-Q)*6;g[R+0]=a,g[R+1]=c+(Math.abs(a)+c)*SE,g[R+2]=y,g[R+3]=h+(Math.abs(y)+h)*SE,g[R+4]=r,g[R+5]=G+(Math.abs(r)+G)*SE}return g}shiftPrimitiveOffsets(A){const I=this._indirectBuffer;if(I)for(let g=0,Q=I.length;g<Q;g++)I[g]+=A;else{const g=this._roots;for(let Q=0;Q<g.length;Q++){const C=g[Q],E=new Uint32Array(C),i=new Uint16Array(C),D=C.byteLength/wI;for(let o=0;o<D;o++){const s=vA*o,t=2*s;VA(t,i)&&(E[s+6]+=A)}}}}traverse(A,I=0){const g=this._roots[I],Q=new Uint32Array(g),C=new Uint16Array(g);E(0);function E(i,D=0){const o=i*2,s=VA(o,C);if(s){const t=Q[i+6],w=C[o+14];A(D,s,new Float32Array(g,i*4,6),t,w)}else{const t=AI(i),w=II(i,Q),a=co(i,Q);A(D,s,new Float32Array(g,i*4,6),a)||(E(t,D+1),E(w,D+1))}}}refit(){const A=this._roots;for(let I=0,g=A.length;I<g;I++){const Q=A[I],C=new Uint32Array(Q),E=new Uint16Array(Q),i=new Float32Array(Q),D=Q.byteLength/wI;for(let o=D-1;o>=0;o--){const s=o*vA,t=s*2;if(VA(t,E)){const a=aI(s,C),y=RI(t,E);this.writePrimitiveRangeBounds(a,y,xQ,0),i.set(xQ,s)}else{const a=AI(s),y=II(s,C);for(let r=0;r<3;r++){const c=i[a+r],h=i[a+r+3],G=i[y+r],R=i[y+r+3];i[s+r]=c<G?c:G,i[s+r+3]=h>R?h:R}}}}}getBoundingBox(A){return A.makeEmpty(),this._roots.forEach(g=>{pA(0,new Float32Array(g),Zs),A.union(Zs)}),A}shapecast(A){let{boundsTraverseOrder:I,intersectsBounds:g,intersectsRange:Q,intersectsPrimitive:C,scratchPrimitive:E,iterate:i}=A;if(Q&&C){const t=Q;Q=(w,a,y,r,c)=>t(w,a,y,r,c)?!0:i(w,a,this,C,y,r,E)}else Q||(C?Q=(t,w,a,y)=>i(t,w,this,C,a,y,E):Q=(t,w,a)=>a);let D=!1,o=0;const s=this._roots;for(let t=0,w=s.length;t<w;t++){const a=s[t];if(D=Zy(this,t,g,Q,I,o),D)break;o+=a.byteLength/wI}return D}bvhcast(A,I,g){let{intersectsRanges:Q}=g;return Wy(this,A,I,Q)}}function jy(){return typeof SharedArrayBuffer<"u"}function yo(B){return B.index?B.index.count:B.attributes.position.count}function Ii(B){return yo(B)/3}function zy(B,A=ArrayBuffer){return B>65535?new Uint32Array(new A(4*B)):new Uint16Array(new A(2*B))}function _y(B,A){if(!B.index){const I=B.attributes.position.count,g=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,Q=zy(I,g);B.setIndex(new F.BufferAttribute(Q,1));for(let C=0;C<I;C++)Q[C]=C}}function $y(B,A,I){const g=yo(B)/I,Q=A||B.drawRange,C=Q.start/I,E=(Q.start+Q.count)/I,i=Math.max(0,C),D=Math.min(g,E)-i;return{offset:Math.floor(i),count:Math.floor(D)}}function AG(B,A){return B.groups.map(I=>({offset:I.start/A,count:I.count/A}))}function Ws(B,A,I){const g=$y(B,A,I),Q=AG(B,I);if(!Q.length)return[g];const C=[],E=g.offset,i=g.offset+g.count,D=yo(B)/I,o=[];for(const w of Q){const{offset:a,count:y}=w,r=a,c=isFinite(y)?y:D-a,h=a+c;r<i&&h>E&&(o.push({pos:Math.max(E,r),isStart:!0}),o.push({pos:Math.min(i,h),isStart:!1}))}o.sort((w,a)=>w.pos!==a.pos?w.pos-a.pos:w.type==="end"?-1:1);let s=0,t=null;for(const w of o){const a=w.pos;s!==0&&a!==t&&C.push({offset:t,count:a-t}),s+=w.isStart?1:-1,t=a}return C}function Ja(B,A){const I=B[B.length-1],g=I.offset+I.count>2**16,Q=B.reduce((o,s)=>o+s.count,0),C=g?4:2,E=A?new SharedArrayBuffer(Q*C):new ArrayBuffer(Q*C),i=g?new Uint32Array(E):new Uint16Array(E);let D=0;for(let o=0;o<B.length;o++){const{offset:s,count:t}=B[o];for(let w=0;w<t;w++)i[D+w]=s+w;D+=t}return i}class Ua extends Na{get indirect(){return!!this._indirectBuffer}get primitiveStride(){return null}get primitiveBufferStride(){return this.indirect?1:this.primitiveStride}set primitiveBufferStride(A){}get primitiveBuffer(){return this.indirect?this._indirectBuffer:this.geometry.index.array}set primitiveBuffer(A){}constructor(A,I={}){if(A.isBufferGeometry){if(A.index&&A.index.isInterleavedBufferAttribute)throw new Error("BVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("BVH: Only BufferGeometries are supported.");if(I.useSharedArrayBuffer&&!jy())throw new Error("BVH: SharedArrayBuffer is not available.");super(),this.geometry=A,this.resolvePrimitiveIndex=I.indirect?g=>this._indirectBuffer[g]:g=>g,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,I={...Fa,...I},I[Ai]||this.init(I)}init(A){const{geometry:I,primitiveStride:g}=this;if(A.indirect){const Q=Ws(I,A.range,g),C=Ja(Q,A.useSharedArrayBuffer);this._indirectBuffer=C}else _y(I,A);super.init(A),!I.boundingBox&&A.setBoundingBox&&(I.boundingBox=this.getBoundingBox(new F.Box3))}getRootRanges(A){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:Ws(this.geometry,A,this.primitiveStride)}raycastObject3D(){throw new Error("BVH: raycastObject3D() not implemented")}}class ug{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(A,I){let g=1/0,Q=-1/0;for(let C=0,E=A.length;C<E;C++){const D=A[C][I];g=D<g?D:g,Q=D>Q?D:Q}this.min=g,this.max=Q}setFromPoints(A,I){let g=1/0,Q=-1/0;for(let C=0,E=I.length;C<E;C++){const i=I[C],D=A.dot(i);g=D<g?D:g,Q=D>Q?D:Q}this.min=g,this.max=Q}isSeparated(A){return this.min>A.max||A.min>this.max}}ug.prototype.setFromBox=(function(){const B=new F.Vector3;return function(I,g){const Q=g.min,C=g.max;let E=1/0,i=-1/0;for(let D=0;D<=1;D++)for(let o=0;o<=1;o++)for(let s=0;s<=1;s++){B.x=Q.x*D+C.x*(1-D),B.y=Q.y*o+C.y*(1-o),B.z=Q.z*s+C.z*(1-s);const t=I.dot(B);E=Math.min(t,E),i=Math.max(t,i)}this.min=E,this.max=i}})();const IG=(function(){const B=new F.Vector3,A=new F.Vector3,I=new F.Vector3;return function(Q,C,E){const i=Q.start,D=B,o=C.start,s=A;I.subVectors(i,o),B.subVectors(Q.end,Q.start),A.subVectors(C.end,C.start);const t=I.dot(s),w=s.dot(D),a=s.dot(s),y=I.dot(D),c=D.dot(D)*a-w*w;let h,G;c!==0?h=(t*w-y*a)/c:h=0,G=(t+h*w)/a,E.x=h,E.y=G}})(),Go=(function(){const B=new F.Vector2,A=new F.Vector3,I=new F.Vector3;return function(Q,C,E,i){IG(Q,C,B);let D=B.x,o=B.y;if(D>=0&&D<=1&&o>=0&&o<=1){Q.at(D,E),C.at(o,i);return}else if(D>=0&&D<=1){o<0?C.at(0,i):C.at(1,i),Q.closestPointToPoint(i,!0,E);return}else if(o>=0&&o<=1){D<0?Q.at(0,E):Q.at(1,E),C.closestPointToPoint(E,!0,i);return}else{let s;D<0?s=Q.start:s=Q.end;let t;o<0?t=C.start:t=C.end;const w=A,a=I;if(Q.closestPointToPoint(t,!0,A),C.closestPointToPoint(s,!0,I),w.distanceToSquared(t)<=a.distanceToSquared(s)){E.copy(w),i.copy(t);return}else{E.copy(s),i.copy(a);return}}}})(),gG=(function(){const B=new F.Vector3,A=new F.Vector3,I=new F.Plane,g=new F.Line3;return function(C,E){const{radius:i,center:D}=C,{a:o,b:s,c:t}=E;if(g.start=o,g.end=s,g.closestPointToPoint(D,!0,B).distanceTo(D)<=i||(g.start=o,g.end=t,g.closestPointToPoint(D,!0,B).distanceTo(D)<=i)||(g.start=s,g.end=t,g.closestPointToPoint(D,!0,B).distanceTo(D)<=i))return!0;const r=E.getPlane(I);if(Math.abs(r.distanceToPoint(D))<=i){const h=r.projectPoint(D,A);if(E.containsPoint(h))return!0}return!1}})(),QG=["x","y","z"],Yg=1e-15,js=Yg*Yg;function TI(B){return Math.abs(B)<Yg}class ZI extends F.Triangle{constructor(...A){super(...A),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new F.Vector3),this.satBounds=new Array(4).fill().map(()=>new ug),this.points=[this.a,this.b,this.c],this.plane=new F.Plane,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new F.Line3,this.needsUpdate=!0}intersectsSphere(A){return gG(A,this)}update(){const A=this.a,I=this.b,g=this.c,Q=this.points,C=this.satAxes,E=this.satBounds,i=C[0],D=E[0];this.getNormal(i),D.setFromPoints(i,Q);const o=C[1],s=E[1];o.subVectors(A,I),s.setFromPoints(o,Q);const t=C[2],w=E[2];t.subVectors(I,g),w.setFromPoints(t,Q);const a=C[3],y=E[3];a.subVectors(g,A),y.setFromPoints(a,Q);const r=o.length(),c=t.length(),h=a.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,r<Yg?c<Yg||h<Yg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(A),this.degenerateSegment.end.copy(g)):c<Yg?h<Yg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(I),this.degenerateSegment.end.copy(A)):h<Yg&&(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(g),this.degenerateSegment.end.copy(I)),this.plane.setFromNormalAndCoplanarPoint(i,A),this.needsUpdate=!1}}ZI.prototype.closestPointToSegment=(function(){const B=new F.Vector3,A=new F.Vector3,I=new F.Line3;return function(Q,C=null,E=null){const{start:i,end:D}=Q,o=this.points;let s,t=1/0;for(let w=0;w<3;w++){const a=(w+1)%3;I.start.copy(o[w]),I.end.copy(o[a]),Go(I,Q,B,A),s=B.distanceToSquared(A),s<t&&(t=s,C&&C.copy(B),E&&E.copy(A))}return this.closestPointToPoint(i,B),s=i.distanceToSquared(B),s<t&&(t=s,C&&C.copy(B),E&&E.copy(i)),this.closestPointToPoint(D,B),s=D.distanceToSquared(B),s<t&&(t=s,C&&C.copy(B),E&&E.copy(D)),Math.sqrt(t)}})();ZI.prototype.intersectsTriangle=(function(){const B=new ZI,A=new ug,I=new ug,g=new F.Vector3,Q=new F.Vector3,C=new F.Vector3,E=new F.Vector3,i=new F.Line3,D=new F.Line3,o=new F.Vector3,s=new F.Vector2,t=new F.Vector2;function w(R,N,k,J){const U=g;!R.isDegenerateIntoPoint&&!R.isDegenerateIntoSegment?U.copy(R.plane.normal):U.copy(N.plane.normal);const H=R.satBounds,d=R.satAxes;for(let l=1;l<4;l++){const p=H[l],q=d[l];if(A.setFromPoints(q,N.points),p.isSeparated(A)||(E.copy(U).cross(q),A.setFromPoints(E,R.points),I.setFromPoints(E,N.points),A.isSeparated(I)))return!1}const Y=N.satBounds,f=N.satAxes;for(let l=1;l<4;l++){const p=Y[l],q=f[l];if(A.setFromPoints(q,R.points),p.isSeparated(A)||(E.crossVectors(U,q),A.setFromPoints(E,R.points),I.setFromPoints(E,N.points),A.isSeparated(I)))return!1}return k&&(J||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),k.start.set(0,0,0),k.end.set(0,0,0)),!0}function a(R,N,k,J,U,H,d,Y,f,l,p){let q=d/(d-Y);l.x=J+(U-J)*q,p.start.subVectors(N,R).multiplyScalar(q).add(R),q=d/(d-f),l.y=J+(H-J)*q,p.end.subVectors(k,R).multiplyScalar(q).add(R)}function y(R,N,k,J,U,H,d,Y,f,l,p){if(U>0)a(R.c,R.a,R.b,J,N,k,f,d,Y,l,p);else if(H>0)a(R.b,R.a,R.c,k,N,J,Y,d,f,l,p);else if(Y*f>0||d!=0)a(R.a,R.b,R.c,N,k,J,d,Y,f,l,p);else if(Y!=0)a(R.b,R.a,R.c,k,N,J,Y,d,f,l,p);else if(f!=0)a(R.c,R.a,R.b,J,N,k,f,d,Y,l,p);else return!0;return!1}function r(R,N,k,J){const U=N.degenerateSegment,H=R.plane.distanceToPoint(U.start),d=R.plane.distanceToPoint(U.end);return TI(H)?TI(d)?w(R,N,k,J):(k&&(k.start.copy(U.start),k.end.copy(U.start)),R.containsPoint(U.start)):TI(d)?(k&&(k.start.copy(U.end),k.end.copy(U.end)),R.containsPoint(U.end)):R.plane.intersectLine(U,g)!=null?(k&&(k.start.copy(g),k.end.copy(g)),R.containsPoint(g)):!1}function c(R,N,k){const J=N.a;return TI(R.plane.distanceToPoint(J))&&R.containsPoint(J)?(k&&(k.start.copy(J),k.end.copy(J)),!0):!1}function h(R,N,k){const J=R.degenerateSegment,U=N.a;return J.closestPointToPoint(U,!0,g),U.distanceToSquared(g)<js?(k&&(k.start.copy(U),k.end.copy(U)),!0):!1}function G(R,N,k,J){if(R.isDegenerateIntoSegment)if(N.isDegenerateIntoSegment){const U=R.degenerateSegment,H=N.degenerateSegment,d=Q,Y=C;U.delta(d),H.delta(Y);const f=g.subVectors(H.start,U.start),l=d.x*Y.y-d.y*Y.x;if(TI(l))return!1;const p=(f.x*Y.y-f.y*Y.x)/l,q=-(d.x*f.y-d.y*f.x)/l;if(p<0||p>1||q<0||q>1)return!1;const m=U.start.z+d.z*p,T=H.start.z+Y.z*q;return TI(m-T)?(k&&(k.start.copy(U.start).addScaledVector(d,p),k.end.copy(U.start).addScaledVector(d,p)),!0):!1}else return N.isDegenerateIntoPoint?h(R,N,k):r(N,R,k,J);else{if(R.isDegenerateIntoPoint)return N.isDegenerateIntoPoint?N.a.distanceToSquared(R.a)<js?(k&&(k.start.copy(R.a),k.end.copy(R.a)),!0):!1:N.isDegenerateIntoSegment?h(N,R,k):c(N,R,k);if(N.isDegenerateIntoPoint)return c(R,N,k);if(N.isDegenerateIntoSegment)return r(R,N,k,J)}}return function(N,k=null,J=!1){this.needsUpdate&&this.update(),N.isExtendedTriangle?N.needsUpdate&&N.update():(B.copy(N),B.update(),N=B);const U=G(this,N,k,J);if(U!==void 0)return U;const H=this.plane,d=N.plane;let Y=d.distanceToPoint(this.a),f=d.distanceToPoint(this.b),l=d.distanceToPoint(this.c);TI(Y)&&(Y=0),TI(f)&&(f=0),TI(l)&&(l=0);const p=Y*f,q=Y*l;if(p>0&&q>0)return!1;let m=H.distanceToPoint(N.a),T=H.distanceToPoint(N.b),Z=H.distanceToPoint(N.c);TI(m)&&(m=0),TI(T)&&(T=0),TI(Z)&&(Z=0);const O=m*T,j=m*Z;if(O>0&&j>0)return!1;Q.copy(H.normal),C.copy(d.normal);const gA=Q.cross(C);let QA=0,CA=Math.abs(gA.x);const EA=Math.abs(gA.y);EA>CA&&(CA=EA,QA=1),Math.abs(gA.z)>CA&&(QA=2);const W=QG[QA],$=this.a[W],z=this.b[W],MA=this.c[W],kA=N.a[W],NA=N.b[W],JA=N.c[W];if(y(this,$,z,MA,p,q,Y,f,l,s,i))return w(this,N,k,J);if(y(N,kA,NA,JA,O,j,m,T,Z,t,D))return w(this,N,k,J);if(s.y<s.x){const iA=s.y;s.y=s.x,s.x=iA,o.copy(i.start),i.start.copy(i.end),i.end.copy(o)}if(t.y<t.x){const iA=t.y;t.y=t.x,t.x=iA,o.copy(D.start),D.start.copy(D.end),D.end.copy(o)}return s.y<t.x||t.y<s.x?!1:(k&&(t.x>s.x?k.start.copy(D.start):k.start.copy(i.start),t.y<s.y?k.end.copy(D.end):k.end.copy(i.end)),!0)}})();ZI.prototype.distanceToPoint=(function(){const B=new F.Vector3;return function(I){return this.closestPointToPoint(I,B),I.distanceTo(B)}})();ZI.prototype.distanceToTriangle=(function(){const B=new F.Vector3,A=new F.Vector3,I=["a","b","c"],g=new F.Line3,Q=new F.Line3;return function(E,i=null,D=null){const o=i||D?g:null;if(this.intersectsTriangle(E,o))return(i||D)&&(i&&o.getCenter(i),D&&o.getCenter(D)),0;let s=1/0;for(let t=0;t<3;t++){let w;const a=I[t],y=E[a];this.closestPointToPoint(y,B),w=y.distanceToSquared(B),w<s&&(s=w,i&&i.copy(B),D&&D.copy(y));const r=this[a];E.closestPointToPoint(r,B),w=r.distanceToSquared(B),w<s&&(s=w,i&&i.copy(r),D&&D.copy(B))}for(let t=0;t<3;t++){const w=I[t],a=I[(t+1)%3];g.set(this[w],this[a]);for(let y=0;y<3;y++){const r=I[y],c=I[(y+1)%3];Q.set(E[r],E[c]),Go(g,Q,B,A);const h=B.distanceToSquared(A);h<s&&(s=h,i&&i.copy(B),D&&D.copy(A))}}return Math.sqrt(s)}})();class nI{constructor(A,I,g){this.isOrientedBox=!0,this.min=new F.Vector3,this.max=new F.Vector3,this.matrix=new F.Matrix4,this.invMatrix=new F.Matrix4,this.points=new Array(8).fill().map(()=>new F.Vector3),this.satAxes=new Array(3).fill().map(()=>new F.Vector3),this.satBounds=new Array(3).fill().map(()=>new ug),this.alignedSatBounds=new Array(3).fill().map(()=>new ug),this.needsUpdate=!1,A&&this.min.copy(A),I&&this.max.copy(I),g&&this.matrix.copy(g)}set(A,I,g){this.min.copy(A),this.max.copy(I),this.matrix.copy(g),this.needsUpdate=!0}copy(A){this.min.copy(A.min),this.max.copy(A.max),this.matrix.copy(A.matrix),this.needsUpdate=!0}}nI.prototype.update=(function(){return function(){const A=this.matrix,I=this.min,g=this.max,Q=this.points;for(let o=0;o<=1;o++)for(let s=0;s<=1;s++)for(let t=0;t<=1;t++){const w=1*o|2*s|4*t,a=Q[w];a.x=o?g.x:I.x,a.y=s?g.y:I.y,a.z=t?g.z:I.z,a.applyMatrix4(A)}const C=this.satBounds,E=this.satAxes,i=Q[0];for(let o=0;o<3;o++){const s=E[o],t=C[o],w=1<<o,a=Q[w];s.subVectors(i,a),t.setFromPoints(s,Q)}const D=this.alignedSatBounds;D[0].setFromPointsField(Q,"x"),D[1].setFromPointsField(Q,"y"),D[2].setFromPointsField(Q,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}})();nI.prototype.intersectsBox=(function(){const B=new ug;return function(I){this.needsUpdate&&this.update();const g=I.min,Q=I.max,C=this.satBounds,E=this.satAxes,i=this.alignedSatBounds;if(B.min=g.x,B.max=Q.x,i[0].isSeparated(B)||(B.min=g.y,B.max=Q.y,i[1].isSeparated(B))||(B.min=g.z,B.max=Q.z,i[2].isSeparated(B)))return!1;for(let D=0;D<3;D++){const o=E[D],s=C[D];if(B.setFromBox(o,I),s.isSeparated(B))return!1}return!0}})();nI.prototype.intersectsTriangle=(function(){const B=new ZI,A=new Array(3),I=new ug,g=new ug,Q=new F.Vector3;return function(E){this.needsUpdate&&this.update(),E.isExtendedTriangle?E.needsUpdate&&E.update():(B.copy(E),B.update(),E=B);const i=this.satBounds,D=this.satAxes;A[0]=E.a,A[1]=E.b,A[2]=E.c;for(let w=0;w<3;w++){const a=i[w],y=D[w];if(I.setFromPoints(y,A),a.isSeparated(I))return!1}const o=E.satBounds,s=E.satAxes,t=this.points;for(let w=0;w<3;w++){const a=o[w],y=s[w];if(I.setFromPoints(y,t),a.isSeparated(I))return!1}for(let w=0;w<3;w++){const a=D[w];for(let y=0;y<4;y++){const r=s[y];if(Q.crossVectors(a,r),I.setFromPoints(Q,A),g.setFromPoints(Q,t),I.isSeparated(g))return!1}}return!0}})();nI.prototype.closestPointToPoint=(function(){return function(A,I){return this.needsUpdate&&this.update(),I.copy(A).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),I}})();nI.prototype.distanceToPoint=(function(){const B=new F.Vector3;return function(I){return this.closestPointToPoint(I,B),I.distanceTo(B)}})();nI.prototype.distanceToBox=(function(){const B=["x","y","z"],A=new Array(12).fill().map(()=>new F.Line3),I=new Array(12).fill().map(()=>new F.Line3),g=new F.Vector3,Q=new F.Vector3;return function(E,i=0,D=null,o=null){if(this.needsUpdate&&this.update(),this.intersectsBox(E))return(D||o)&&(E.getCenter(Q),this.closestPointToPoint(Q,g),E.closestPointToPoint(g,Q),D&&D.copy(g),o&&o.copy(Q)),0;const s=i*i,t=E.min,w=E.max,a=this.points;let y=1/0;for(let c=0;c<8;c++){const h=a[c];Q.copy(h).clamp(t,w);const G=h.distanceToSquared(Q);if(G<y&&(y=G,D&&D.copy(h),o&&o.copy(Q),G<s))return Math.sqrt(G)}let r=0;for(let c=0;c<3;c++)for(let h=0;h<=1;h++)for(let G=0;G<=1;G++){const R=(c+1)%3,N=(c+2)%3,k=h<<R|G<<N,J=1<<c|h<<R|G<<N,U=a[k],H=a[J];A[r].set(U,H);const Y=B[c],f=B[R],l=B[N],p=I[r],q=p.start,m=p.end;q[Y]=t[Y],q[f]=h?t[f]:w[f],q[l]=G?t[l]:w[f],m[Y]=w[Y],m[f]=h?t[f]:w[f],m[l]=G?t[l]:w[f],r++}for(let c=0;c<=1;c++)for(let h=0;h<=1;h++)for(let G=0;G<=1;G++){Q.x=c?w.x:t.x,Q.y=h?w.y:t.y,Q.z=G?w.z:t.z,this.closestPointToPoint(Q,g);const R=Q.distanceToSquared(g);if(R<y&&(y=R,D&&D.copy(g),o&&o.copy(Q),R<s))return Math.sqrt(R)}for(let c=0;c<12;c++){const h=A[c];for(let G=0;G<12;G++){const R=I[G];Go(h,R,g,Q);const N=g.distanceToSquared(Q);if(N<y&&(y=N,D&&D.copy(g),o&&o.copy(Q),N<s))return Math.sqrt(N)}}return Math.sqrt(y)}})();class BG extends ho{constructor(){super(()=>new ZI)}}const vI=new BG,eB=new F.Vector3,Zi=new F.Vector3;function CG(B,A,I={},g=0,Q=1/0){const C=g*g,E=Q*Q;let i=1/0,D=null;if(B.shapecast({boundsTraverseOrder:s=>(eB.copy(A).clamp(s.min,s.max),eB.distanceToSquared(A)),intersectsBounds:(s,t,w)=>w<i&&w<E,intersectsTriangle:(s,t)=>{s.closestPointToPoint(A,eB);const w=A.distanceToSquared(eB);return w<i&&(Zi.copy(eB),i=w,D=t),w<C}}),i===1/0)return null;const o=Math.sqrt(i);return I.point?I.point.copy(Zi):I.point=Zi.clone(),I.distance=o,I.faceIndex=D,I}const $C=parseInt(F.REVISION)>=169,EG=parseInt(F.REVISION)<=161,AQ=new F.Vector3,IQ=new F.Vector3,gQ=new F.Vector3,AE=new F.Vector2,IE=new F.Vector2,gE=new F.Vector2,zs=new F.Vector3,_s=new F.Vector3,$s=new F.Vector3,nB=new F.Vector3;function iG(B,A,I,g,Q,C,E,i){let D;if(C===F.BackSide?D=B.intersectTriangle(g,I,A,!0,Q):D=B.intersectTriangle(A,I,g,C!==F.DoubleSide,Q),D===null)return null;const o=B.origin.distanceTo(Q);return o<E||o>i?null:{distance:o,point:Q.clone()}}function At(B,A,I,g,Q,C,E,i,D,o,s){AQ.fromBufferAttribute(A,C),IQ.fromBufferAttribute(A,E),gQ.fromBufferAttribute(A,i);const t=iG(B,AQ,IQ,gQ,nB,D,o,s);if(t){if(g){AE.fromBufferAttribute(g,C),IE.fromBufferAttribute(g,E),gE.fromBufferAttribute(g,i),t.uv=new F.Vector2;const a=F.Triangle.getInterpolation(nB,AQ,IQ,gQ,AE,IE,gE,t.uv);$C||(t.uv=a)}if(Q){AE.fromBufferAttribute(Q,C),IE.fromBufferAttribute(Q,E),gE.fromBufferAttribute(Q,i),t.uv1=new F.Vector2;const a=F.Triangle.getInterpolation(nB,AQ,IQ,gQ,AE,IE,gE,t.uv1);$C||(t.uv1=a),EG&&(t.uv2=t.uv1)}if(I){zs.fromBufferAttribute(I,C),_s.fromBufferAttribute(I,E),$s.fromBufferAttribute(I,i),t.normal=new F.Vector3;const a=F.Triangle.getInterpolation(nB,AQ,IQ,gQ,zs,_s,$s,t.normal);t.normal.dot(B.direction)>0&&t.normal.multiplyScalar(-1),$C||(t.normal=a)}const w={a:C,b:E,c:i,normal:new F.Vector3,materialIndex:0};if(F.Triangle.getNormal(AQ,IQ,gQ,w.normal),t.face=w,t.faceIndex=C,$C){const a=new F.Vector3;F.Triangle.getBarycoord(nB,AQ,IQ,gQ,a),t.barycoord=a}}return t}function It(B){return B&&B.isMaterial?B.side:B}function gi(B,A,I,g,Q,C,E){const i=g*3;let D=i+0,o=i+1,s=i+2;const{index:t,groups:w}=B;B.index&&(D=t.getX(D),o=t.getX(o),s=t.getX(s));const{position:a,normal:y,uv:r,uv1:c}=B.attributes;if(Array.isArray(A)){const h=g*3;for(let G=0,R=w.length;G<R;G++){const{start:N,count:k,materialIndex:J}=w[G];if(h>=N&&h<N+k){const U=It(A[J]),H=At(I,a,y,r,c,D,o,s,U,C,E);if(H)if(H.faceIndex=g,H.face.materialIndex=J,Q)Q.push(H);else return H}}}else{const h=It(A),G=At(I,a,y,r,c,D,o,s,h,C,E);if(G)if(G.faceIndex=g,G.face.materialIndex=0,Q)Q.push(G);else return G}return null}function TA(B,A,I,g){const Q=B.a,C=B.b,E=B.c;let i=A,D=A+1,o=A+2;I&&(i=I.getX(i),D=I.getX(D),o=I.getX(o)),Q.x=g.getX(i),Q.y=g.getY(i),Q.z=g.getZ(i),C.x=g.getX(D),C.y=g.getY(D),C.z=g.getZ(D),E.x=g.getX(o),E.y=g.getY(o),E.z=g.getZ(o)}function DG(B,A,I,g,Q,C,E,i){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++)gi(D,A,I,s,C,E,i)}function oG(B,A,I,g,Q,C,E){const{geometry:i,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=gi(i,A,I,t,null,C,E),a&&a.distance<o&&(s=a,o=a.distance)}return s}function sG(B,A,I,g,Q,C,E){const{geometry:i}=I,{index:D}=i,o=i.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=s,TA(E,w*3,D,o),E.needsUpdate=!0,g(E,w,Q,C))return!0}return!1}function tG(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,E,i,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],E=new Uint32Array(C),i=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,y=!1){const r=w*2;if(VA(r,i)){const c=aI(w,E),h=RI(r,i);let G=1/0,R=1/0,N=1/0,k=-1/0,J=-1/0,U=-1/0;for(let H=3*c,d=3*(c+h);H<d;H++){let Y=g[H];const f=Q.getX(Y),l=Q.getY(Y),p=Q.getZ(Y);f<G&&(G=f),f>k&&(k=f),l<R&&(R=l),l>J&&(J=l),p<N&&(N=p),p>U&&(U=p)}return D[w+0]!==G||D[w+1]!==R||D[w+2]!==N||D[w+3]!==k||D[w+4]!==J||D[w+5]!==U?(D[w+0]=G,D[w+1]=R,D[w+2]=N,D[w+3]=k,D[w+4]=J,D[w+5]=U,!0):!1}else{const c=AI(w),h=II(w,E);let G=y,R=!1,N=!1;if(A){if(!G){const Y=c/vA+a/wI,f=h/vA+a/wI;R=A.has(Y),N=A.has(f),G=!R&&!N}}else R=!0,N=!0;const k=G||R,J=G||N;let U=!1;k&&(U=t(c,a,G));let H=!1;J&&(H=t(h,a,G));const d=U||H;if(d)for(let Y=0;Y<3;Y++){const f=c+Y,l=h+Y,p=D[f],q=D[f+3],m=D[l],T=D[l+3];D[w+Y]=p<m?p:m,D[w+Y+3]=q>T?q:T}return d}}}function Wg(B,A,I,g,Q){let C,E,i,D,o,s;const t=1/I.direction.x,w=1/I.direction.y,a=1/I.direction.z,y=I.origin.x,r=I.origin.y,c=I.origin.z;let h=A[B],G=A[B+3],R=A[B+1],N=A[B+3+1],k=A[B+2],J=A[B+3+2];return t>=0?(C=(h-y)*t,E=(G-y)*t):(C=(G-y)*t,E=(h-y)*t),w>=0?(i=(R-r)*w,D=(N-r)*w):(i=(N-r)*w,D=(R-r)*w),C>D||i>E||((i>C||isNaN(C))&&(C=i),(D<E||isNaN(E))&&(E=D),a>=0?(o=(k-c)*a,s=(J-c)*a):(o=(J-c)*a,s=(k-c)*a),C>s||o>E)?!1:((o>C||C!==C)&&(C=o),(s<E||E!==E)&&(E=s),C<=Q&&E>=g)}function wG(B,A,I,g,Q,C,E,i){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++){let w=o?o[s]:s;gi(D,A,I,w,C,E,i)}}function aG(B,A,I,g,Q,C,E){const{geometry:i,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=gi(i,A,I,D?D[t]:t,null,C,E),a&&a.distance<o&&(s=a,o=a.distance)}return s}function eG(B,A,I,g,Q,C,E){const{geometry:i}=I,{index:D}=i,o=i.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=I.resolveTriangleIndex(s),TA(E,w*3,D,o),E.needsUpdate=!0,g(E,w,Q,C))return!0}return!1}function nG(B,A,I,g,Q,C,E){KA.setBuffer(B._roots[A]),dD(0,B,I,g,Q,C,E),KA.clearBuffer()}function dD(B,A,I,g,Q,C,E){const{float32Array:i,uint16Array:D,uint32Array:o}=KA,s=B*2;if(VA(s,D)){const w=aI(B,o),a=RI(s,D);DG(A,I,g,w,a,Q,C,E)}else{const w=AI(B);Wg(w,i,g,C,E)&&dD(w,A,I,g,Q,C,E);const a=II(B,o);Wg(a,i,g,C,E)&&dD(a,A,I,g,Q,C,E)}}const cG=["x","y","z"];function hG(B,A,I,g,Q,C){KA.setBuffer(B._roots[A]);const E=lD(0,B,I,g,Q,C);return KA.clearBuffer(),E}function lD(B,A,I,g,Q,C){const{float32Array:E,uint16Array:i,uint32Array:D}=KA;let o=B*2;if(VA(o,i)){const t=aI(B,D),w=RI(o,i);return oG(A,I,g,t,w,Q,C)}else{const t=co(B,D),w=cG[t],y=g.direction[w]>=0;let r,c;y?(r=AI(B),c=II(B,D)):(r=II(B,D),c=AI(B));const G=Wg(r,E,g,Q,C)?lD(r,A,I,g,Q,C):null;if(G){const k=G.point[w];if(y?k<=E[c+t]:k>=E[c+t+3])return G}const N=Wg(c,E,g,Q,C)?lD(c,A,I,g,Q,C):null;return G&&N?G.distance<=N.distance?G:N:G||N||null}}const QE=new F.Box3,pQ=new ZI,uQ=new ZI,cB=new F.Matrix4,gt=new nI,BE=new nI;function yG(B,A,I,g){KA.setBuffer(B._roots[A]);const Q=fD(0,B,I,g);return KA.clearBuffer(),Q}function fD(B,A,I,g,Q=null){const{float32Array:C,uint16Array:E,uint32Array:i}=KA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),gt.set(I.boundingBox.min,I.boundingBox.max,g),Q=gt),VA(D,E)){const s=A.geometry,t=s.index,w=s.attributes.position,a=I.index,y=I.attributes.position,r=aI(B,i),c=RI(D,E);if(cB.copy(g).invert(),I.boundsTree)return pA(B,C,BE),BE.matrix.copy(cB),BE.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:G=>BE.intersectsBox(G),intersectsTriangle:G=>{G.a.applyMatrix4(g),G.b.applyMatrix4(g),G.c.applyMatrix4(g),G.needsUpdate=!0;for(let R=r*3,N=(c+r)*3;R<N;R+=3)if(TA(uQ,R,t,w),uQ.needsUpdate=!0,G.intersectsTriangle(uQ))return!0;return!1}});{const h=Ii(I);for(let G=r*3,R=(c+r)*3;G<R;G+=3){TA(pQ,G,t,w),pQ.a.applyMatrix4(cB),pQ.b.applyMatrix4(cB),pQ.c.applyMatrix4(cB),pQ.needsUpdate=!0;for(let N=0,k=h*3;N<k;N+=3)if(TA(uQ,N,a,y),uQ.needsUpdate=!0,pQ.intersectsTriangle(uQ))return!0}}}else{const s=AI(B),t=II(B,i);return pA(s,C,QE),!!(Q.intersectsBox(QE)&&fD(s,A,I,g,Q)||(pA(t,C,QE),Q.intersectsBox(QE)&&fD(t,A,I,g,Q)))}}const CE=new F.Matrix4,Wi=new nI,hB=new nI,GG=new F.Vector3,rG=new F.Vector3,SG=new F.Vector3,RG=new F.Vector3;function FG(B,A,I,g={},Q={},C=0,E=1/0){A.boundingBox||A.computeBoundingBox(),Wi.set(A.boundingBox.min,A.boundingBox.max,I),Wi.needsUpdate=!0;const i=B.geometry,D=i.attributes.position,o=i.index,s=A.attributes.position,t=A.index,w=vI.getPrimitive(),a=vI.getPrimitive();let y=GG,r=rG,c=null,h=null;Q&&(c=SG,h=RG);let G=1/0,R=null,N=null;return CE.copy(I).invert(),hB.matrix.copy(CE),B.shapecast({boundsTraverseOrder:k=>Wi.distanceToBox(k),intersectsBounds:(k,J,U)=>U<G&&U<E?(J&&(hB.min.copy(k.min),hB.max.copy(k.max),hB.needsUpdate=!0),!0):!1,intersectsRange:(k,J)=>{if(A.boundsTree)return A.boundsTree.shapecast({boundsTraverseOrder:H=>hB.distanceToBox(H),intersectsBounds:(H,d,Y)=>Y<G&&Y<E,intersectsRange:(H,d)=>{for(let Y=H,f=H+d;Y<f;Y++){TA(a,3*Y,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let l=k,p=k+J;l<p;l++){TA(w,3*l,o,D),w.needsUpdate=!0;const q=w.distanceToTriangle(a,y,c);if(q<G&&(r.copy(y),h&&h.copy(c),G=q,R=l,N=Y),q<C)return!0}}}});{const U=Ii(A);for(let H=0,d=U;H<d;H++){TA(a,3*H,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let Y=k,f=k+J;Y<f;Y++){TA(w,3*Y,o,D),w.needsUpdate=!0;const l=w.distanceToTriangle(a,y,c);if(l<G&&(r.copy(y),h&&h.copy(c),G=l,R=Y,N=H),l<C)return!0}}}}}),vI.releasePrimitive(w),vI.releasePrimitive(a),G===1/0?null:(g.point?g.point.copy(r):g.point=r.clone(),g.distance=G,g.faceIndex=R,Q&&(Q.point?Q.point.copy(h):Q.point=h.clone(),Q.point.applyMatrix4(CE),r.applyMatrix4(CE),Q.distance=r.sub(Q.point).length(),Q.faceIndex=N),g)}function kG(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,E,i,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],E=new Uint32Array(C),i=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,y=!1){const r=w*2;if(VA(r,i)){const c=aI(w,E),h=RI(r,i);let G=1/0,R=1/0,N=1/0,k=-1/0,J=-1/0,U=-1/0;for(let H=c,d=c+h;H<d;H++){const Y=3*B.resolveTriangleIndex(H);for(let f=0;f<3;f++){let l=Y+f;l=g?g[l]:l;const p=Q.getX(l),q=Q.getY(l),m=Q.getZ(l);p<G&&(G=p),p>k&&(k=p),q<R&&(R=q),q>J&&(J=q),m<N&&(N=m),m>U&&(U=m)}}return D[w+0]!==G||D[w+1]!==R||D[w+2]!==N||D[w+3]!==k||D[w+4]!==J||D[w+5]!==U?(D[w+0]=G,D[w+1]=R,D[w+2]=N,D[w+3]=k,D[w+4]=J,D[w+5]=U,!0):!1}else{const c=AI(w),h=II(w,E);let G=y,R=!1,N=!1;if(A){if(!G){const Y=c/vA+a/wI,f=h/vA+a/wI;R=A.has(Y),N=A.has(f),G=!R&&!N}}else R=!0,N=!0;const k=G||R,J=G||N;let U=!1;k&&(U=t(c,a,G));let H=!1;J&&(H=t(h,a,G));const d=U||H;if(d)for(let Y=0;Y<3;Y++){const f=c+Y,l=h+Y,p=D[f],q=D[f+3],m=D[l],T=D[l+3];D[w+Y]=p<m?p:m,D[w+Y+3]=q>T?q:T}return d}}}function MG(B,A,I,g,Q,C,E){KA.setBuffer(B._roots[A]),xD(0,B,I,g,Q,C,E),KA.clearBuffer()}function xD(B,A,I,g,Q,C,E){const{float32Array:i,uint16Array:D,uint32Array:o}=KA,s=B*2;if(VA(s,D)){const w=aI(B,o),a=RI(s,D);wG(A,I,g,w,a,Q,C,E)}else{const w=AI(B);Wg(w,i,g,C,E)&&xD(w,A,I,g,Q,C,E);const a=II(B,o);Wg(a,i,g,C,E)&&xD(a,A,I,g,Q,C,E)}}const NG=["x","y","z"];function JG(B,A,I,g,Q,C){KA.setBuffer(B._roots[A]);const E=pD(0,B,I,g,Q,C);return KA.clearBuffer(),E}function pD(B,A,I,g,Q,C){const{float32Array:E,uint16Array:i,uint32Array:D}=KA;let o=B*2;if(VA(o,i)){const t=aI(B,D),w=RI(o,i);return aG(A,I,g,t,w,Q,C)}else{const t=co(B,D),w=NG[t],y=g.direction[w]>=0;let r,c;y?(r=AI(B),c=II(B,D)):(r=II(B,D),c=AI(B));const G=Wg(r,E,g,Q,C)?pD(r,A,I,g,Q,C):null;if(G){const k=G.point[w];if(y?k<=E[c+t]:k>=E[c+t+3])return G}const N=Wg(c,E,g,Q,C)?pD(c,A,I,g,Q,C):null;return G&&N?G.distance<=N.distance?G:N:G||N||null}}const EE=new F.Box3,qQ=new ZI,bQ=new ZI,yB=new F.Matrix4,Qt=new nI,iE=new nI;function UG(B,A,I,g){KA.setBuffer(B._roots[A]);const Q=uD(0,B,I,g);return KA.clearBuffer(),Q}function uD(B,A,I,g,Q=null){const{float32Array:C,uint16Array:E,uint32Array:i}=KA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),Qt.set(I.boundingBox.min,I.boundingBox.max,g),Q=Qt),VA(D,E)){const s=A.geometry,t=s.index,w=s.attributes.position,a=I.index,y=I.attributes.position,r=aI(B,i),c=RI(D,E);if(yB.copy(g).invert(),I.boundsTree)return pA(B,C,iE),iE.matrix.copy(yB),iE.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:G=>iE.intersectsBox(G),intersectsTriangle:G=>{G.a.applyMatrix4(g),G.b.applyMatrix4(g),G.c.applyMatrix4(g),G.needsUpdate=!0;for(let R=r,N=c+r;R<N;R++)if(TA(bQ,3*A.resolveTriangleIndex(R),t,w),bQ.needsUpdate=!0,G.intersectsTriangle(bQ))return!0;return!1}});{const h=Ii(I);for(let G=r,R=c+r;G<R;G++){const N=A.resolveTriangleIndex(G);TA(qQ,3*N,t,w),qQ.a.applyMatrix4(yB),qQ.b.applyMatrix4(yB),qQ.c.applyMatrix4(yB),qQ.needsUpdate=!0;for(let k=0,J=h*3;k<J;k+=3)if(TA(bQ,k,a,y),bQ.needsUpdate=!0,qQ.intersectsTriangle(bQ))return!0}}}else{const s=AI(B),t=II(B,i);return pA(s,C,EE),!!(Q.intersectsBox(EE)&&uD(s,A,I,g,Q)||(pA(t,C,EE),Q.intersectsBox(EE)&&uD(t,A,I,g,Q)))}}const DE=new F.Matrix4,ji=new nI,GB=new nI,LG=new F.Vector3,HG=new F.Vector3,YG=new F.Vector3,KG=new F.Vector3;function dG(B,A,I,g={},Q={},C=0,E=1/0){A.boundingBox||A.computeBoundingBox(),ji.set(A.boundingBox.min,A.boundingBox.max,I),ji.needsUpdate=!0;const i=B.geometry,D=i.attributes.position,o=i.index,s=A.attributes.position,t=A.index,w=vI.getPrimitive(),a=vI.getPrimitive();let y=LG,r=HG,c=null,h=null;Q&&(c=YG,h=KG);let G=1/0,R=null,N=null;return DE.copy(I).invert(),GB.matrix.copy(DE),B.shapecast({boundsTraverseOrder:k=>ji.distanceToBox(k),intersectsBounds:(k,J,U)=>U<G&&U<E?(J&&(GB.min.copy(k.min),GB.max.copy(k.max),GB.needsUpdate=!0),!0):!1,intersectsRange:(k,J)=>{if(A.boundsTree){const U=A.boundsTree;return U.shapecast({boundsTraverseOrder:H=>GB.distanceToBox(H),intersectsBounds:(H,d,Y)=>Y<G&&Y<E,intersectsRange:(H,d)=>{for(let Y=H,f=H+d;Y<f;Y++){const l=U.resolveTriangleIndex(Y);TA(a,3*l,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let p=k,q=k+J;p<q;p++){const m=B.resolveTriangleIndex(p);TA(w,3*m,o,D),w.needsUpdate=!0;const T=w.distanceToTriangle(a,y,c);if(T<G&&(r.copy(y),h&&h.copy(c),G=T,R=p,N=Y),T<C)return!0}}}})}else{const U=Ii(A);for(let H=0,d=U;H<d;H++){TA(a,3*H,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let Y=k,f=k+J;Y<f;Y++){const l=B.resolveTriangleIndex(Y);TA(w,3*l,o,D),w.needsUpdate=!0;const p=w.distanceToTriangle(a,y,c);if(p<G&&(r.copy(y),h&&h.copy(c),G=p,R=Y,N=H),p<C)return!0}}}}}),vI.releasePrimitive(w),vI.releasePrimitive(a),G===1/0?null:(g.point?g.point.copy(r):g.point=r.clone(),g.distance=G,g.faceIndex=R,Q&&(Q.point?Q.point.copy(h):Q.point=h.clone(),Q.point.applyMatrix4(DE),r.applyMatrix4(DE),Q.distance=r.sub(Q.point).length(),Q.faceIndex=N),g)}function Bt(B,A,I){return B===null?null:(B.point.applyMatrix4(A.matrixWorld),B.distance=B.point.distanceTo(I.ray.origin),B.object=A,B)}const oE=new nI,sE=new F.Ray,Ct=new F.Vector3,Et=new F.Matrix4,it=new F.Vector3,zi=["getX","getY","getZ"];class gB extends Ua{static serialize(A,I={}){I={cloneBuffers:!0,...I};const g=A.geometry,Q=A._roots,C=A._indirectBuffer,E=g.getIndex(),i={version:1,roots:null,index:null,indirectBuffer:null};return I.cloneBuffers?(i.roots=Q.map(D=>D.slice()),i.index=E?E.array.slice():null,i.indirectBuffer=C?C.slice():null):(i.roots=Q,i.index=E?E.array:null,i.indirectBuffer=C),i}static deserialize(A,I,g={}){g={setIndex:!0,indirect:!!A.indirectBuffer,...g};const{index:Q,roots:C,indirectBuffer:E}=A;A.version||(console.warn("MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data."),D(C));const i=new gB(I,{...g,[Ai]:!0});if(i._roots=C,i._indirectBuffer=E||null,g.setIndex){const o=I.getIndex();if(o===null){const s=new F.BufferAttribute(A.index,1,!1);I.setIndex(s)}else o.array!==Q&&(o.array.set(Q),o.needsUpdate=!0)}return i;function D(o){for(let s=0;s<o.length;s++){const t=o[s],w=new Uint32Array(t),a=new Uint16Array(t);for(let y=0,r=t.byteLength/wI;y<r;y++){const c=vA*y,h=2*c;VA(h,a)||(w[c+6]=w[c+6]/vA-y)}}}}get primitiveStride(){return 3}get resolveTriangleIndex(){return this.resolvePrimitiveIndex}constructor(A,I={}){I.maxLeafTris&&(console.warn('MeshBVH: "maxLeafTris" option has been deprecated. Use maxLeafSize, instead.'),I={...I,maxLeafSize:I.maxLeafTris}),super(A,I)}shiftTriangleOffsets(A){return super.shiftPrimitiveOffsets(A)}writePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,E=Q.attributes.position,i=Q.index?Q.index.array:null,o=(C?C[A]:A)*3;let s=o+0,t=o+1,w=o+2;i&&(s=i[s],t=i[t],w=i[w]);for(let a=0;a<3;a++){const y=E[zi[a]](s),r=E[zi[a]](t),c=E[zi[a]](w);let h=y;r<h&&(h=r),c<h&&(h=c);let G=y;r>G&&(G=r),c>G&&(G=c),I[g+a]=h,I[g+a+3]=G}return I}computePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,E=Q.attributes.position,i=Q.index?Q.index.array:null,D=E.normalized;if(A<0||I+A-g.offset>g.length/6)throw new Error("MeshBVH: compute triangle bounds range is invalid.");const o=E.array,s=E.offset||0;let t=3;E.isInterleavedBufferAttribute&&(t=E.data.stride);const w=["getX","getY","getZ"],a=g.offset;for(let y=A,r=A+I;y<r;y++){const h=(C?C[y]:y)*3,G=(y-a)*6;let R=h+0,N=h+1,k=h+2;i&&(R=i[R],N=i[N],k=i[k]),D||(R=R*t+s,N=N*t+s,k=k*t+s);for(let J=0;J<3;J++){let U,H,d;D?(U=E[w[J]](R),H=E[w[J]](N),d=E[w[J]](k)):(U=o[R+J],H=o[N+J],d=o[k+J]);let Y=U;H<Y&&(Y=H),d<Y&&(Y=d);let f=U;H>f&&(f=H),d>f&&(f=d);const l=(f-Y)/2,p=J*2;g[G+p+0]=Y+l,g[G+p+1]=l+(Math.abs(Y)+l)*SE}}return g}raycastObject3D(A,I,g=[]){const{material:Q}=A;if(Q===void 0)return;Et.copy(A.matrixWorld).invert(),sE.copy(I.ray).applyMatrix4(Et),it.setFromMatrixScale(A.matrixWorld),Ct.copy(sE.direction).multiply(it);const C=Ct.length(),E=I.near/C,i=I.far/C;if(I.firstHitOnly===!0){let D=this.raycastFirst(sE,Q,E,i);D=Bt(D,A,I),D&&g.push(D)}else{const D=this.raycast(sE,Q,E,i);for(let o=0,s=D.length;o<s;o++){const t=Bt(D[o],A,I);t&&g.push(t)}}return g}refit(A=null){return(this.indirect?kG:tG)(this,A)}raycast(A,I=F.FrontSide,g=0,Q=1/0){const C=this._roots,E=[],i=this.indirect?MG:nG;for(let D=0,o=C.length;D<o;D++)i(this,D,I,A,E,g,Q);return E}raycastFirst(A,I=F.FrontSide,g=0,Q=1/0){const C=this._roots;let E=null;const i=this.indirect?JG:hG;for(let D=0,o=C.length;D<o;D++){const s=i(this,D,I,A,g,Q);s!=null&&(E==null||s.distance<E.distance)&&(E=s)}return E}intersectsGeometry(A,I){let g=!1;const Q=this._roots,C=this.indirect?UG:yG;for(let E=0,i=Q.length;E<i&&(g=C(this,E,A,I),!g);E++);return g}shapecast(A){const I=vI.getPrimitive(),g=super.shapecast({...A,intersectsPrimitive:A.intersectsTriangle,scratchPrimitive:I,iterate:this.indirect?eG:sG});return vI.releasePrimitive(I),g}bvhcast(A,I,g){let{intersectsRanges:Q,intersectsTriangles:C}=g;const E=vI.getPrimitive(),i=this.geometry.index,D=this.geometry.attributes.position,o=this.indirect?y=>{const r=this.resolveTriangleIndex(y);TA(E,r*3,i,D)}:y=>{TA(E,y*3,i,D)},s=vI.getPrimitive(),t=A.geometry.index,w=A.geometry.attributes.position,a=A.indirect?y=>{const r=A.resolveTriangleIndex(y);TA(s,r*3,t,w)}:y=>{TA(s,y*3,t,w)};if(C){if(!(A instanceof gB))throw new Error('MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.');const y=(r,c,h,G,R,N,k,J)=>{for(let U=h,H=h+G;U<H;U++){a(U),s.a.applyMatrix4(I),s.b.applyMatrix4(I),s.c.applyMatrix4(I),s.needsUpdate=!0;for(let d=r,Y=r+c;d<Y;d++)if(o(d),E.needsUpdate=!0,C(E,s,d,U,R,N,k,J))return!0}return!1};if(Q){const r=Q;Q=function(c,h,G,R,N,k,J,U){return r(c,h,G,R,N,k,J,U)?!0:y(c,h,G,R,N,k,J,U)}}else Q=y}return super.bvhcast(A,I,{intersectsRanges:Q})}intersectsBox(A,I){return oE.set(A.min,A.max,I),oE.needsUpdate=!0,this.shapecast({intersectsBounds:g=>oE.intersectsBox(g),intersectsTriangle:g=>oE.intersectsTriangle(g)})}intersectsSphere(A){return this.shapecast({intersectsBounds:I=>A.intersectsBox(I),intersectsTriangle:I=>I.intersectsSphere(A)})}closestPointToGeometry(A,I,g={},Q={},C=0,E=1/0){return(this.indirect?dG:FG)(this,A,I,g,Q,C,E)}closestPointToPoint(A,I={},g=0,Q=1/0){return CG(this,A,I,g,Q)}}const PQ={Mesh:F.Mesh.prototype.raycast,Line:F.Line.prototype.raycast,LineSegments:F.LineSegments.prototype.raycast,LineLoop:F.LineLoop.prototype.raycast,Points:F.Points.prototype.raycast,BatchedMesh:F.BatchedMesh.prototype.raycast},CI=new F.Mesh,tE=[];function lG(B,A){if(this.isBatchedMesh)fG.call(this,B,A);else{const{geometry:I}=this;if(I.boundsTree)I.boundsTree.raycastObject3D(this,B,A);else{let g;if(this instanceof F.Mesh)g=PQ.Mesh;else if(this instanceof F.LineSegments)g=PQ.LineSegments;else if(this instanceof F.LineLoop)g=PQ.LineLoop;else if(this instanceof F.Line)g=PQ.Line;else if(this instanceof F.Points)g=PQ.Points;else throw new Error("BVH: Fallback raycast function not found.");g.call(this,B,A)}}}function fG(B,A){if(this.boundsTrees){const I=this.boundsTrees,g=this._drawInfo||this._instanceInfo,Q=this._drawRanges||this._geometryInfo,C=this.matrixWorld;CI.material=this.material,CI.geometry=this.geometry;const E=CI.geometry.boundsTree,i=CI.geometry.drawRange;CI.geometry.boundingSphere===null&&(CI.geometry.boundingSphere=new F.Sphere);for(let D=0,o=g.length;D<o;D++){if(!this.getVisibleAt(D))continue;const s=g[D].geometryIndex;if(CI.geometry.boundsTree=I[s],this.getMatrixAt(D,CI.matrixWorld).premultiply(C),!CI.geometry.boundsTree){this.getBoundingBoxAt(s,CI.geometry.boundingBox),this.getBoundingSphereAt(s,CI.geometry.boundingSphere);const t=Q[s];CI.geometry.setDrawRange(t.start,t.count)}CI.raycast(B,tE);for(let t=0,w=tE.length;t<w;t++){const a=tE[t];a.object=this,a.batchId=D,A.push(a)}tE.length=0}CI.geometry.boundsTree=E,CI.geometry.drawRange=i,CI.material=null,CI.geometry=null}else PQ.BatchedMesh.call(this,B,A)}function xG(B={}){const{type:A=gB}=B;return this.boundsTree=new A(this,B),this.boundsTree}const QQ=new F.Vector3,BQ=new F.Vector3,CQ=new F.Vector3,Dt=new F.Vector4,wE=new F.Vector3,_i=new F.Vector3,ot=new F.Vector4,st=new F.Vector4,aE=new F.Matrix4,tt=new F.Matrix4;function rB(B,A){if(!B&&!A)return;const I=B.count===A.count,g=B.normalized===A.normalized,Q=B.array.constructor===A.array.constructor,C=B.itemSize===A.itemSize;if(!I||!g||!Q||!C)throw new Error}function KB(B,A=null){const I=B.array.constructor,g=B.normalized,Q=B.itemSize,C=A===null?B.count:A;return new F.BufferAttribute(new I(Q*C),Q,g)}function La(B,A,I=0){if(B.isInterleavedBufferAttribute){const g=B.itemSize;for(let Q=0,C=B.count;Q<C;Q++){const E=Q+I;A.setX(E,B.getX(Q)),g>=2&&A.setY(E,B.getY(Q)),g>=3&&A.setZ(E,B.getZ(Q)),g>=4&&A.setW(E,B.getW(Q))}}else{const g=A.array,Q=g.constructor,C=g.BYTES_PER_ELEMENT*B.itemSize*I;new Q(g.buffer,C,B.array.length).set(B.array)}}function pG(B,A,I){const g=B.elements,Q=A.elements;for(let C=0,E=Q.length;C<E;C++)g[C]+=Q[C]*I}function wt(B,A,I){const g=B.skeleton,Q=B.geometry,C=g.bones,E=g.boneInverses;ot.fromBufferAttribute(Q.attributes.skinIndex,A),st.fromBufferAttribute(Q.attributes.skinWeight,A),aE.elements.fill(0);for(let i=0;i<4;i++){const D=st.getComponent(i);if(D!==0){const o=ot.getComponent(i);tt.multiplyMatrices(C[o].matrixWorld,E[o]),pG(aE,tt,D)}}return aE.multiply(B.bindMatrix).premultiply(B.bindMatrixInverse),I.transformDirection(aE),I}function $i(B,A,I,g,Q){wE.set(0,0,0);for(let C=0,E=B.length;C<E;C++){const i=A[C],D=B[C];i!==0&&(_i.fromBufferAttribute(D,g),I?wE.addScaledVector(_i,i):wE.addScaledVector(_i.sub(Q),i))}Q.add(wE)}function uG(B,A={useGroups:!1,updateIndex:!1,skipAttributes:[]},I=new F.BufferGeometry){const g=B[0].index!==null,{useGroups:Q=!1,updateIndex:C=!1,skipAttributes:E=[]}=A,i=new Set(Object.keys(B[0].attributes)),D={};let o=0;I.clearGroups();for(let s=0;s<B.length;++s){const t=B[s];let w=0;if(g!==(t.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const a in t.attributes){if(!i.has(a))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+a+'" attribute exists among all geometries, or in none of them.');D[a]===void 0&&(D[a]=[]),D[a].push(t.attributes[a]),w++}if(w!==i.size)throw new Error("StaticGeometryGenerator: Make sure all geometries have the same number of attributes.");if(Q){let a;if(g)a=t.index.count;else if(t.attributes.position!==void 0)a=t.attributes.position.count;else throw new Error("StaticGeometryGenerator: The geometry must have either an index or a position attribute");I.addGroup(o,a,s),o+=a}}if(g){let s=!1;if(!I.index){let t=0;for(let w=0;w<B.length;++w)t+=B[w].index.count;I.setIndex(new F.BufferAttribute(new Uint32Array(t),1,!1)),s=!0}if(C||s){const t=I.index;let w=0,a=0;for(let y=0;y<B.length;++y){const r=B[y],c=r.index;if(E[y]!==!0)for(let h=0;h<c.count;++h)t.setX(w,c.getX(h)+a),w++;a+=r.attributes.position.count}}}for(const s in D){const t=D[s];if(!(s in I.attributes)){let y=0;for(const r in t)y+=t[r].count;I.setAttribute(s,KB(D[s][0],y))}const w=I.attributes[s];let a=0;for(let y=0,r=t.length;y<r;y++){const c=t[y];E[y]!==!0&&La(c,w,a),a+=c.count}}return I}function qG(B,A){if(B===null||A===null)return B===A;if(B.length!==A.length)return!1;for(let I=0,g=B.length;I<g;I++)if(B[I]!==A[I])return!1;return!0}function bG(B){const{index:A,attributes:I}=B;if(A)for(let g=0,Q=A.count;g<Q;g+=3){const C=A.getX(g),E=A.getX(g+2);A.setX(g,E),A.setX(g+2,C)}else for(const g in I){const Q=I[g],C=Q.itemSize;for(let E=0,i=Q.count;E<i;E+=3)for(let D=0;D<C;D++){const o=Q.getComponent(E,D),s=Q.getComponent(E+2,D);Q.setComponent(E,D,s),Q.setComponent(E+2,D,o)}}return B}class mG{constructor(A){this.matrixWorld=new F.Matrix4,this.geometryHash=null,this.boneMatrices=null,this.primitiveCount=-1,this.mesh=A,this.update()}update(){const A=this.mesh,I=A.geometry,g=A.skeleton,Q=(I.index?I.index.count:I.attributes.position.count)/3;if(this.matrixWorld.copy(A.matrixWorld),this.geometryHash=I.attributes.position.version,this.primitiveCount=Q,g){g.boneTexture||g.computeBoneTexture(),g.update();const C=g.boneMatrices;!this.boneMatrices||this.boneMatrices.length!==C.length?this.boneMatrices=C.slice():this.boneMatrices.set(C)}else this.boneMatrices=null}didChange(){const A=this.mesh,I=A.geometry,g=(I.index?I.index.count:I.attributes.position.count)/3;return!(this.matrixWorld.equals(A.matrixWorld)&&this.geometryHash===I.attributes.position.version&&qG(A.skeleton&&A.skeleton.boneMatrices||null,this.boneMatrices)&&this.primitiveCount===g)}}class PG{constructor(A){Array.isArray(A)||(A=[A]);const I=[];A.forEach(g=>{g.traverseVisible(Q=>{Q.isMesh&&I.push(Q)})}),this.meshes=I,this.useGroups=!0,this.applyWorldTransforms=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Array(I.length).fill().map(()=>new F.BufferGeometry),this._diffMap=new WeakMap}getMaterials(){const A=[];return this.meshes.forEach(I=>{Array.isArray(I.material)?A.push(...I.material):A.push(I.material)}),A}generate(A=new F.BufferGeometry){let I=[];const{meshes:g,useGroups:Q,_intermediateGeometry:C,_diffMap:E}=this;for(let i=0,D=g.length;i<D;i++){const o=g[i],s=C[i],t=E.get(o);!t||t.didChange(o)?(this._convertToStaticGeometry(o,s),I.push(!1),t?t.update():E.set(o,new mG(o))):I.push(!0)}if(C.length===0){A.setIndex(null);const i=A.attributes;for(const D in i)A.deleteAttribute(D);for(const D in this.attributes)A.setAttribute(this.attributes[D],new F.BufferAttribute(new Float32Array(0),4,!1))}else uG(C,{useGroups:Q,skipAttributes:I},A);for(const i in A.attributes)A.attributes[i].needsUpdate=!0;return A}_convertToStaticGeometry(A,I=new F.BufferGeometry){const g=A.geometry,Q=this.applyWorldTransforms,C=this.attributes.includes("normal"),E=this.attributes.includes("tangent"),i=g.attributes,D=I.attributes;!I.index&&g.index&&(I.index=g.index.clone()),D.position||I.setAttribute("position",KB(i.position)),C&&!D.normal&&i.normal&&I.setAttribute("normal",KB(i.normal)),E&&!D.tangent&&i.tangent&&I.setAttribute("tangent",KB(i.tangent)),rB(g.index,I.index),rB(i.position,D.position),C&&rB(i.normal,D.normal),E&&rB(i.tangent,D.tangent);const o=i.position,s=C?i.normal:null,t=E?i.tangent:null,w=g.morphAttributes.position,a=g.morphAttributes.normal,y=g.morphAttributes.tangent,r=g.morphTargetsRelative,c=A.morphTargetInfluences,h=new F.Matrix3;h.getNormalMatrix(A.matrixWorld),g.index&&I.index.array.set(g.index.array);for(let G=0,R=i.position.count;G<R;G++)QQ.fromBufferAttribute(o,G),s&&BQ.fromBufferAttribute(s,G),t&&(Dt.fromBufferAttribute(t,G),CQ.fromBufferAttribute(t,G)),c&&(w&&$i(w,c,r,G,QQ),a&&$i(a,c,r,G,BQ),y&&$i(y,c,r,G,CQ)),A.isSkinnedMesh&&(A.applyBoneTransform(G,QQ),s&&wt(A,G,BQ),t&&wt(A,G,CQ)),Q&&QQ.applyMatrix4(A.matrixWorld),D.position.setXYZ(G,QQ.x,QQ.y,QQ.z),s&&(Q&&BQ.applyNormalMatrix(h),D.normal.setXYZ(G,BQ.x,BQ.y,BQ.z)),t&&(Q&&CQ.transformDirection(A.matrixWorld),D.tangent.setXYZW(G,CQ.x,CQ.y,CQ.z,Dt.w));for(const G in this.attributes){const R=this.attributes[G];R==="position"||R==="tangent"||R==="normal"||!(R in i)||(D[R]||I.setAttribute(R,KB(i[R])),rB(i[R],D[R]),La(i[R],D[R]))}return A.matrixWorld.determinant()<0&&bG(I),I}}const TG=Object.freeze(Object.defineProperty({__proto__:null,AVERAGE:ra,BVH:Na,CENTER:no,CONTAINED:UD,ExtendedTriangle:ZI,GeometryBVH:Ua,MeshBVH:gB,OrientedBox:nI,SAH:Sa,SKIP_GENERATION:Ai,StaticGeometryGenerator:PG,acceleratedRaycast:lG,computeBoundsTree:xG,generateIndirectBuffer:Ja},Symbol.toStringTag,{value:"Module"}));class OG{constructor(A){this.name="WorkerBase",this.running=!1,this.worker=A,this.worker.onerror=I=>{throw I.message?new Error(`${this.name}: Could not create Web Worker with error "${I.message}"`):new Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...A){if(this.running)throw new Error("GenerateMeshBVHWorker: Already running job.");if(this.worker===null)throw new Error("GenerateMeshBVHWorker: Worker has been disposed.");this.running=!0;const I=this.runTask(this.worker,...A);return I.finally(()=>{this.running=!1}),I}dispose(){this.worker.terminate(),this.worker=null}}const OI={node:"node",material:"material",camera:"camera",light:"light"},DQ="KHR_animation_pointer",XG={CUBICSPLINE:void 0,LINEAR:F.InterpolateLinear,STEP:F.InterpolateDiscrete};class vG{constructor(A){this.name=DQ,this.parser=A,this.animationPointerResolver=null,this.pointerPathMap=new Map}setAnimationPointerResolver(A){return this.animationPointerResolver=A,this}loadAnimationTargetFromChannel(A){const I=A.target,g=I.node!==void 0?I.node:I.id;return this.parser.getDependency("node",g)}loadAnimationTargetFromChannelWithAnimationPointer(A){WG();const I=A.target,g=I.extensions&&I.extensions[DQ]&&I.path&&I.path==="pointer";if(!g)return null;let Q,C=OI.node,E;if(g){const D=I.extensions[DQ];let o=D.pointer;if(!o){console.warn("Invalid path",D,I);return}if(o.startsWith("/materials/")?C=OI.material:o.startsWith("/extensions/KHR_lights_punctual/lights/")?C=OI.light:o.startsWith("/cameras/")&&(C=OI.camera),E=this._tryResolveTargetId(o,C),E===null||isNaN(E)){console.warn("Failed resolving animation node id: "+E,o);return}switch(C){case OI.material:const t=("/materials/"+E.toString()+"/").length,w=o.substring(0,t);switch(Q=o.substring(t),Q){case"pbrMetallicRoughness/baseColorFactor":Q="color";break;case"pbrMetallicRoughness/roughnessFactor":Q="roughness";break;case"pbrMetallicRoughness/metallicFactor":Q="metalness";break;case"emissiveFactor":Q="emissive";break;case"alphaCutoff":Q="alphaTest";break;case"occlusionTexture/strength":Q="aoMapIntensity";break;case"normalTexture/scale":Q="normalScale";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale":Q="map/repeat";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset":Q="map/offset";break;case"emissiveTexture/extensions/KHR_texture_transform/scale":Q="emissiveMap/repeat";break;case"emissiveTexture/extensions/KHR_texture_transform/offset":Q="emissiveMap/offset";break;case"extensions/KHR_materials_emissive_strength/emissiveStrength":Q="emissiveIntensity";break;case"extensions/KHR_materials_transmission/transmissionFactor":Q="transmission";break;case"extensions/KHR_materials_ior/ior":Q="ior";break;case"extensions/KHR_materials_volume/thicknessFactor":Q="thickness";break;case"extensions/KHR_materials_volume/attenuationColor":Q="attenuationColor";break;case"extensions/KHR_materials_volume/attenuationDistance":Q="attenuationDistance";break;case"extensions/KHR_materials_iridescence/iridescenceFactor":Q="iridescence";break;case"extensions/KHR_materials_iridescence/iridescenceIor":Q="iridescenceIOR";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMinimum":Q="iridescenceThicknessRange[0]";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMaximum":Q="iridescenceThicknessRange[1]";break;case"extensions/KHR_materials_clearcoat/clearcoatFactor":Q="clearcoat";break;case"extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor":Q="clearcoatRoughness";break;case"extensions/KHR_materials_sheen/sheenColorFactor":Q="sheenColor";break;case"extensions/KHR_materials_sheen/sheenRoughnessFactor":Q="sheenRoughness";break;case"extensions/KHR_materials_specular/specularFactor":Q="specularIntensity";break;case"extensions/KHR_materials_specular/specularColorFactor":Q="specularColor";break}o=w+Q;break;case OI.node:const a=("/nodes/"+E.toString()+"/").length,y=o.substring(0,a);if(Q=o.substring(a),Q.startsWith("weights/")){const G=Q.substring(8);/^\d+$/.test(G)?Q="morphTargetInfluences["+G+"]":console.warn(DQ+": invalid weight index",Q,o)}else switch(Q){case"translation":Q="position";break;case"rotation":Q="quaternion";break;case"scale":Q="scale";break;case"weights":Q="morphTargetInfluences";break;case"extensions/KHR_node_visibility/visible":Q="visible";break}o=y+Q;break;case OI.light:const r=("/extensions/KHR_lights_punctual/lights/"+E.toString()+"/").length;switch(Q=o.substring(r),Q){case"color":break;case"intensity":break;case"spot/innerConeAngle":Q="penumbra";break;case"spot/outerConeAngle":Q="angle";break;case"range":Q="distance";break}o="/lights/"+E.toString()+"/"+Q;break;case OI.camera:const c=("/cameras/"+E.toString()+"/").length,h=o.substring(0,c);switch(Q=o.substring(c),Q){case"perspective/yfov":Q="fov";break;case"perspective/znear":case"orthographic/znear":Q="near";break;case"perspective/zfar":case"orthographic/zfar":Q="far";break;case"perspective/aspect":Q="aspect";break;case"orthographic/xmag":Q="zoom";break;case"orthographic/ymag":Q="zoom";break}o=h+Q;break}this.animationPointerResolver?.resolvePath&&(o=this.animationPointerResolver.resolvePath(o));const s=D.pointer;this.pointerPathMap.set(s,o)}if(E==null||isNaN(E)){console.warn("Failed resolving animation node id: "+E,I);return}let i;return C===OI.node?i=this.parser.getDependency("node",E):C===OI.material?i=this.parser.getDependency("material",E):C===OI.light?i=this.parser.getDependency("light",E):C===OI.camera?i=this.parser.getDependency("camera",E):console.error("Unhandled type",C),i}createAnimationTracksWithAnimationPointer(A,I,g,Q,C){if(!(C.extensions&&C.extensions[DQ]&&C.path&&C.path==="pointer"))return null;const i=C.extensions[DQ].pointer;let D=this.pointerPathMap.get(i);if(!D)return null;const o=[];D=D.replaceAll("/",".");const s=D.split(".");var w=A.name!==void 0&&A.name!==null?A.name:A.uuid;if(s[2]=w,s[3]?.startsWith("morphTargetInfluences")){const r=s[3];if(A.type==="Group"){for(const c of A.children)c.morphTargetInfluences&&(s[3]=c.name,s[4]=r,y(this.parser));return o}}y(this.parser);function a(r,c){try{const h=c.split(".").filter(Boolean),R=h[h.length-1].replace(/\[.*\]$/,"");return R in r?typeof r[R]=="boolean":!1}catch{return!1}}function y(r){D=s.join(".");let c,h=!1;switch(g.itemSize){case 1:Object.prototype.toString.call(g.array)==="[object Uint8Array]"&&a(A,D)?(c=F.BooleanKeyframeTrack,h=!0):c=F.NumberKeyframeTrack;break;case 2:case 3:c=F.VectorKeyframeTrack;break;case 4:D.endsWith(".quaternion")?c=F.QuaternionKeyframeTrack:c=F.ColorKeyframeTrack;break}if(!c){console.warn("Unsupported output accessor format",g);return}const G=Q.interpolation!==void 0?XG[Q.interpolation]:F.InterpolateLinear;let R=r._getArrayFromAccessor(g);D.endsWith(".fov")&&(R=R.map(k=>k/Math.PI*180)),h&&(R=R.map(k=>k>0));const N=new c(D,I.array,R,G);if(G==="CUBICSPLINE"&&r._createCubicSplineTrackInterpolant(N),o.push(N),D&&g.itemSize===4&&D.startsWith(".materials.")&&D.endsWith(".color")){const k=new Float32Array(R.length/4);for(let U=0,H=R.length/4;U<H;U+=1)k[U]=R[U*4+3];const J=new c(D.replace(".color",".opacity"),I.array,k,G);G==="CUBICSPLINE"&&r._createCubicSplineTrackInterpolant(N),o.push(J)}}return o}_tryResolveTargetId(A,I){let g="";return I==="node"?g=A.substring(7):I==="material"?g=A.substring(11):I==="light"?g=A.substring(39):I==="camera"&&(g=A.substring(9)),g=g.substring(0,g.indexOf("/")),Number.parseInt(g)}loadAnimation(A){const I=this,g=this.parser.json,Q=this.parser,C=g.animations[A],E=C.name?C.name:"animation_"+A,i=[],D=[],o=[],s=[],t=[];for(let w=0,a=C.channels.length;w<a;w++){const y=C.channels[w],r=C.samplers[y.sampler],c=y.target,h=C.parameters!==void 0?C.parameters[r.input]:r.input,G=C.parameters!==void 0?C.parameters[r.output]:r.output;let R=I.loadAnimationTargetFromChannelWithAnimationPointer(y);R||(R=I.loadAnimationTargetFromChannel(y)),i.push(R),D.push(Q.getDependency("accessor",h)),o.push(Q.getDependency("accessor",G)),s.push(r),t.push(c)}return Promise.all([Promise.all(i),Promise.all(D),Promise.all(o),Promise.all(s),Promise.all(t)]).then(function(w){const a=w[0],y=w[1],r=w[2],c=w[3],h=w[4],G=[];for(let R=0,N=a.length;R<N;R++){const k=a[R],J=y[R],U=r[R],H=c[R],d=h[R];if(k===void 0)continue;k.updateMatrix&&(k.updateMatrix(),k.matrixAutoUpdate=!0);let Y=I.createAnimationTracksWithAnimationPointer(k,J,U,H,d);if(Y||(Y=Q._createAnimationTracks(k,J,U,H,d)),Y)for(let f=0;f<Y.length;f++)G.push(Y[f])}return new F.AnimationClip(E,void 0,G)})}}function VG(B,A){for(const I of B.children){const g=I.getObjectByName(A);if(g)return g}}let at=!1,ZG=null;function WG(){if(at)return;at=!0;const B=ZG||=F.PropertyBinding.findNode;F.PropertyBinding.findNode=function(A,I){if(!I)return B(A,I);if(I.startsWith(".materials.")){const g=I.substring(11).substring(I.indexOf(".")),Q=g.indexOf("."),C=Q<0?g:g.substring(0,Q);let E=null;return A.traverse(i=>{E!==null||i.type!=="Mesh"&&i.type!=="SkinnedMesh"||i.material&&(i.material.uuid===C||i.material.name===C)&&(E=i.material,E!==null&&(g.endsWith(".map")?E=E.map:g.endsWith(".emissiveMap")&&(E=E.emissiveMap)))}),E}else if(I.startsWith(".nodes.")||I.startsWith(".lights.")||I.startsWith(".cameras.")){const g=I.split(".");let Q;for(let C=1;C<g.length;C++){const E=g[C],i=E.length==36;let D;if(!i&&Q?.isObject3D&&(D=VG(Q,E)),i)Q=A.getObjectByProperty("uuid",E);else if(D)Q=D;else if(Q&&Q[E]){const o=Number.parseInt(E);let s=E;o>=0&&(s=o),Q=Q[s]}else if(!Q||!Q.isObject3D){const o=A.getObjectByName(E);o&&(Q=o)}}if(!Q){const C=B(A,g[2]);return C||console.warn(DQ+": Property binding not found",I,A,A.name,g),C}return Q}return B(A,I)}}const jG=Object.freeze(Object.defineProperty({__proto__:null,GLTFAnimationPointerExtension:vG},Symbol.toStringTag,{value:"Module"}));var zG=Object.defineProperty,_G=(B,A,I)=>A in B?zG(B,A,{enumerable:!0,configurable:!0,writable:!0,value:I}):B[A]=I,PA=(B,A,I)=>(_G(B,typeof A!="symbol"?A+"":A,I),I);(function(){class B{}class A extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class I extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class g extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class Q extends B{constructor(n,S="unrestricted"){super(),PA(this,"type"),PA(this,"value"),this.value=n,this.type=S}}class C extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class E extends B{}class i extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class D extends B{}class o extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class s extends B{constructor(n,S="integer"){super(),PA(this,"value"),PA(this,"type"),this.value=n,this.type=S}}class t extends B{constructor(n){super(),PA(this,"value"),this.value=n}}class w extends B{constructor(n,S,M){super(),PA(this,"value"),PA(this,"type"),PA(this,"unit"),this.value=n,this.type=S,this.unit=M}}class a extends B{}class y extends B{}class r extends B{}class c extends B{}class h extends B{}class G extends B{}class R extends B{}class N extends B{}class k extends B{}class J extends B{}class U extends B{}class H extends B{}class d{constructor(n){PA(this,"input"),PA(this,"index",0),this.input=n}consume(){const n=this.input.codePointAt(this.index);return n!==void 0&&(this.index+=String.fromCodePoint(n).length),n}reconsume(n){n!==void 0&&(this.index-=String.fromCodePoint(n).length)}peek(){const n=[];let S=this.index;for(let M=0;M<3&&S<this.input.length;M++){const L=this.input.codePointAt(S);n.push(L),S+=String.fromCodePoint(L).length}return n}}function Y(e){return e===10}function f(e){return Y(e)||e===8192||e===32}function l(e){return e>=48&&e<=57}function p(e){return l(e)||e>=65&&e<=70||e>=97&&e<=102}function q(e){return(function(n){return(function(S){return S>=65&&S<=90})(n)||(function(S){return S>=97&&S<=122})(n)})(e)||(function(n){return n>=128})(e)||e===95}function m(e){return q(e)||l(e)||e===45}function T(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function Z(e,n){return e===92&&!Y(n)}function O(e,n,S){return e===45?q(n)||n===45||Z(n,S):!!q(e)||e===92&&Z(e,n)}function j(e,n,S){return e===43||e===45?l(n)||n===46&&l(S):l(e===46?n:e)}function gA(e){const n=e.consume();if(p(n)){let S=[n];for(;p(...e.peek())&&S.length<5;)S.push(e.consume());f(...e.peek())&&e.consume();const M=parseInt(String.fromCodePoint(...S),16);return M===0||M>1114111?65533:M}return n===void 0?65533:n}function QA(e,n){const S=new C("");for(;;){const M=e.consume();if(M===n||M===void 0)return S;if(M===10)return e.reconsume(M),new E;if(M===92){const L=e.peek()[0];L===void 0||(Y(L)?e.consume():S.value+=String.fromCodePoint(gA(e)))}else S.value+=String.fromCodePoint(M)}}function CA(e){let n="";for(;;){const S=e.consume();if(m(S))n+=String.fromCodePoint(S);else{if(!Z(...e.peek()))return e.reconsume(S),n;n+=String.fromCodePoint(gA(e))}}}function EA(e){let n=(function(S){let M="integer",L="";for([43,45].includes(S.peek()[0])&&(L+=String.fromCodePoint(S.consume()));l(...S.peek());)L+=String.fromCodePoint(S.consume());if(S.peek()[0]===46&&l(S.peek()[1]))for(L+=String.fromCodePoint(S.consume(),S.consume()),M="number";l(...S.peek());)L+=String.fromCodePoint(S.consume());return[69,101].includes(S.peek()[0])&&([45,43].includes(S.peek()[1])&&l(S.peek()[2])?(L+=String.fromCodePoint(S.consume(),S.consume(),S.consume()),M="number"):l(S.peek()[1])&&(L+=String.fromCodePoint(S.consume(),S.consume()),M="number")),{value:parseFloat(L),type:M}})(e);return O(...e.peek())?new w(n.value,n.type,CA(e)):e.peek()[0]===37?(e.consume(),new t(n.value)):new s(n.value,n.type)}function BA(e){for(;;){const n=e.consume();if(n===41||n===void 0)return;Z(...e.peek())&&gA(e)}}function W(e){const n=CA(e);if(n.match(/url/i)&&e.peek()[0]===40){for(e.consume();f(e.peek()[0])&&f(e.peek()[1]);)e.consume();return[34,39].includes(e.peek()[0])||f(e.peek()[0])&&[34,39].includes(e.peek()[1])?new I(n):(function(S){const M=new i("");for(;f(...S.peek());)S.consume();for(;;){const L=S.consume();if(L===41||L===void 0)return M;if(f(L)){for(;f(...S.peek());)S.consume();return S.peek()[0]===41||S.peek()[0]===void 0?(S.consume(),M):(BA(S),new D)}if([34,39,40].includes(L)||T(L))return BA(S),new D;if(L===92){if(!Z(...S.peek()))return BA(S),new D;M.value+=gA(S)}else M.value+=String.fromCodePoint(L)}})(e)}return e.peek()[0]===40?(e.consume(),new I(n)):new A(n)}function $(e){const n=e.consume(),S=e.peek();if(f(n)){for(;f(...e.peek());)e.consume();return new a}if(n===34)return QA(e,n);if(n===35){if(m(S[0])||Z(...S)){const M=new Q;return O(...S)&&(M.type="id"),M.value=CA(e),M}return new o(String.fromCodePoint(n))}return n===39?QA(e,n):n===40?new k:n===41?new J:n===43?j(...S)?(e.reconsume(n),EA(e)):new o(String.fromCodePoint(n)):n===44?new G:n===45?j(...e.peek())?(e.reconsume(n),EA(e)):e.peek()[0]===45&&e.peek()[1]===62?(e.consume(),e.consume(),new r):O(...e.peek())?(e.reconsume(n),W(e)):new o(String.fromCodePoint(n)):n===46?j(...e.peek())?(e.reconsume(n),EA(e)):new o(String.fromCodePoint(n)):n===58?new c:n===59?new h:n===60?S[0]===33&&S[1]===45&&S[2]===45?(e.consume(),e.consume(),e.consume(),new y):new o(String.fromCodePoint(n)):n===64?O(...S)?new g(CA(e)):new o(String.fromCodePoint(n)):n===91?new R:n===92?Z(...S)?(e.reconsume(n),W(e)):new o(String.fromCodePoint(n)):n===93?new N:n===123?new U:n===125?new H:l(n)?(e.reconsume(n),EA(e)):q(n)?(e.reconsume(n),W(e)):n===void 0?void 0:new o(String.fromCodePoint(n))}const z=new Set(["px","deg","s","hz","dppx","number","fr"]);function MA(e){return z.has(e.toLowerCase())}function kA(e,n){if(["x","y"].includes(e))return e;if(!n)throw new Error("To determine the normalized axis the computedStyle of the source is required.");const S=n.writingMode=="horizontal-tb";if(e==="block")e=S?"y":"x";else{if(e!=="inline")throw new TypeError(`Invalid axis “${e}”`);e=S?"x":"y"}return e}function NA(e){const n=[];let S=0;function M(){let K=0;const x=S;for(;S<e.length;){const b=e.slice(S,S+1);if(/\s/.test(b)&&K===0)break;if(b==="(")K+=1;else if(b===")"&&(K-=1,K===0)){S++;break}S++}return e.slice(x,S)}function L(){for(;/\s/.test(e.slice(S,S+1));)S++}for(;S<e.length;){const K=e.slice(S,S+1);/\s/.test(K)?L():n.push(M())}return n}function JA(e,n){return e.reduce(((S,M)=>(S.has(M[n])?S.get(M[n]).push(M):S.set(M[n],[M]),S)),new Map)}function iA(e,n){const S=[],M=[];for(const L of e)n(L)?S.push(L):M.push(L);return[S,M]}function oA(e,n={}){function S(M){return Array.from(M).map((L=>oA(L,n)))}if(e instanceof CSSUnitValue){if(e.unit==="percent"&&n.percentageReference){const L=e.value/100*n.percentageReference.value,K=n.percentageReference.unit;return new CSSUnitValue(L,K)}const M=e.toSum();if(M&&M.values.length===1&&(e=M.values[0]),e instanceof CSSUnitValue&&e.unit==="em"&&n.fontSize&&(e=new CSSUnitValue(e.value*n.fontSize.value,n.fontSize.unit)),e instanceof CSSKeywordValue){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number")}return e}if(!e.operator)return e;switch(e.operator){case"sum":e=new CSSMathSum(...S(e.values));break;case"product":e=new CSSMathProduct(...S(e.values));break;case"negate":e=new CSSMathNegate(oA(e.value,n));break;case"clamp":e=new CSSMathClamp(oA(e.lower,n),oA(e.value,n),oA(e.upper,n));break;case"invert":e=new CSSMathInvert(oA(e.value,n));break;case"min":e=new CSSMathMin(...S(e.values));break;case"max":e=new CSSMathMax(...S(e.values))}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const M=Array.from(e.values);if(M.every((L=>L instanceof CSSUnitValue&&L.unit!=="percent"&&MA(L.unit)&&L.unit===M[0].unit))){const L=Math[e.operator].apply(Math,M.map((({value:K})=>K)));return new CSSUnitValue(L,M[0].unit)}}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const M=Array.from(e.values),[L,K]=iA(M,(b=>b instanceof CSSUnitValue&&b.unit!=="percent")),x=Array.from(JA(L,"unit").values());if(x.some((b=>b.length>0))){const b=x.map((u=>{const P=Math[e.operator].apply(Math,u.map((({value:V})=>V)));return new CSSUnitValue(P,u[0].unit)}));e=e instanceof CSSMathMin?new CSSMathMin(...b,...K):new CSSMathMax(...b,...K)}return M.length===1?M[0]:e}if(e instanceof CSSMathNegate)return e.value instanceof CSSUnitValue?new CSSUnitValue(0-e.value.value,e.value.unit):e.value instanceof CSSMathNegate?e.value.value:e;if(e instanceof CSSMathInvert)return e.value instanceof CSSMathInvert?e.value.value:e;if(e instanceof CSSMathSum){let M=function(K){const x=K.filter((b=>b instanceof CSSUnitValue));return[...K.filter((b=>!(b instanceof CSSUnitValue))),...Array.from(JA(x,"unit").entries()).map((([b,u])=>{const P=u.reduce(((V,{value:IA})=>V+IA),0);return new CSSUnitValue(P,b)}))]},L=[];for(const K of e.values)K instanceof CSSMathSum?L.push(...K.values):L.push(K);return L=M(L),L.length===1?L[0]:new CSSMathSum(...L)}if(e instanceof CSSMathProduct){let M=[];for(const x of e.values)x instanceof CSSMathProduct?M.push(...x.values):M.push(x);const[L,K]=iA(M,(x=>x instanceof CSSUnitValue&&x.unit==="number"));if(L.length>1){const x=L.reduce(((b,{value:u})=>b*u),1);M=[new CSSUnitValue(x,"number"),...K]}if(M.length===2){let x,b;for(const u of M)u instanceof CSSUnitValue&&u.unit==="number"?x=u:u instanceof CSSMathSum&&[...u.values].every((P=>P instanceof CSSUnitValue))&&(b=u);if(x&&b)return new CSSMathSum(...[...b.values].map((u=>new CSSUnitValue(u.value*x.value,u.unit))))}if(M.every((x=>x instanceof CSSUnitValue&&MA(x.unit)||x instanceof CSSMathInvert&&x.value instanceof CSSUnitValue&&MA(x.value.unit)))){const x=new CSSMathProduct(...M).toSum();if(x&&x.values.length===1)return x.values[0]}return new CSSMathProduct(...M)}return e}const rA=null,qI=["percent","length","angle","time","frequency","resolution","flex"],ZA={fontRelativeLengths:{units:new Set(["em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh"])},viewportRelativeLengths:{units:new Set(["vw","lvw","svw","dvw","vh","lvh","svh","dvh","vi","lvi","svi","dvi","vb","lvb","svb","dvb","vmin","lvmin","svmin","dvmin","vmax","lvmax","svmax","dvmax"])},absoluteLengths:{units:new Set(["cm","mm","Q","in","pt","pc","px"]),compatible:!0,canonicalUnit:"px",ratios:{cm:96/2.54,mm:96/2.54/10,Q:96/2.54/40,in:96,pc:16,pt:96/72,px:1}},angle:{units:new Set(["deg","grad","rad","turn"]),compatible:!0,canonicalUnit:"deg",ratios:{deg:1,grad:.9,rad:180/Math.PI,turn:360}},time:{units:new Set(["s","ms"]),compatible:!0,canonicalUnit:"s",ratios:{s:1,ms:.001}},frequency:{units:new Set(["hz","khz"]),compatible:!0,canonicalUnit:"hz",ratios:{hz:1,khz:1e3}},resolution:{units:new Set(["dpi","dpcm","dppx"]),compatible:!0,canonicalUnit:"dppx",ratios:{dpi:1/96,dpcm:2.54/96,dppx:1}}},UA=new Map;for(const e of Object.values(ZA))if(e.compatible)for(const n of e.units)UA.set(n,e);function MI(e){return UA.get(e)}function WI(e,n){const S={...e};for(const M of Object.keys(n))S[M]?S[M]+=n[M]:S[M]=n[M];return S}function jI(e){return e==="number"?{}:e==="percent"?{percent:1}:ZA.absoluteLengths.units.has(e)||ZA.fontRelativeLengths.units.has(e)||ZA.viewportRelativeLengths.units.has(e)?{length:1}:ZA.angle.units.has(e)?{angle:1}:ZA.time.units.has(e)?{time:1}:ZA.frequency.units.has(e)?{frequency:1}:ZA.resolution.units.has(e)?{resolution:1}:e==="fr"?{flex:1}:rA}function NI(e){if(e instanceof CSSUnitValue){let{unit:n,value:S}=e;const M=MI(e.unit);return M&&n!==M.canonicalUnit&&(S*=M.ratios[n],n=M.canonicalUnit),n==="number"?[[S,{}]]:[[S,{[n]:1}]]}if(e instanceof CSSMathInvert){if(!(e.value instanceof CSSUnitValue))throw new Error("Not implemented");const n=NI(e.value);if(n===rA||n.length>1)return rA;const S=n[0],M={};for(const[L,K]of Object.entries(S[1]))M[L]=-1*K;return n[0]=[1/S[0],M],n}if(e instanceof CSSMathProduct){let n=[[1,{}]];for(const S of e.values){const M=NI(S),L=[];if(M===rA)return rA;for(const K of n)for(const x of M)L.push([K[0]*x[0],WI(K[1],x[1])]);n=L}return n}throw new Error("Not implemented")}function zI(e,n){if(jI(n)===rA)throw new SyntaxError("The string did not match the expected pattern.");const S=NI(e);if(!S)throw new TypeError;if(S.length>1)throw new TypeError("Sum has more than one item");const M=(function(L,K){const x=L.unit,b=L.value,u=MI(x),P=MI(K);return!P||u!==P?rA:new CSSUnitValue(b*P.ratios[x]/P.ratios[K],K)})(bI(S[0]),n);if(M===rA)throw new TypeError;return M}function bI(e){const[n,S]=e,M=Object.entries(S);if(M.length>1)return rA;if(M.length===0)return new CSSUnitValue(n,"number");const L=M[0];return L[1]!==1?rA:new CSSUnitValue(n,L[0])}function mI(e,...n){if(n&&n.length)throw new Error("Not implemented");const S=NI(e).map((M=>bI(M)));if(S.some((M=>M===rA)))throw new TypeError("Type error");return new CSSMathSum(...S)}function _I(e,n){if(e.percentHint&&n.percentHint&&e.percentHint!==n.percentHint)return rA;const S={...e,percentHint:e.percentHint??n.percentHint};for(const M of qI)n[M]&&(S[M]??(S[M]=0),S[M]+=n[M]);return S}class WA{constructor(n,S){PA(this,"name"),PA(this,"values"),this.name=n,this.values=S}}class cI{constructor(n,S){PA(this,"value"),PA(this,"associatedToken"),this.value=n,this.associatedToken=S}}function fI(e){if(Array.isArray(e))return e;if(typeof e=="string")return(function(n){const S=new d(n),M=[];for(;;){const L=$(S);if(L===void 0)return M;M.push(L)}})(e);throw new TypeError("Invalid input type "+typeof e)}function hI(e){const n=e.shift();return n instanceof U||n instanceof R||n instanceof k?(function(S,M){let L;if(M instanceof U)L=H;else if(M instanceof k)L=J;else{if(!(M instanceof R))return;L=N}const K=new cI([],M);for(;;){const x=S.shift();if(x instanceof L||x===void 0)return K;S.unshift(x),K.value.push(hI(S))}})(e,n):n instanceof I?(function(S,M){const L=new WA(S.value,[]);for(;;){const K=M.shift();if(K instanceof J||K===void 0)return L;M.unshift(K),L.values.push(hI(M))}})(n,e):n}function wA(e){if(e instanceof k||e instanceof J)return 6;if(e instanceof o)switch(e.value){case"*":case"/":return 4;case"+":case"-":return 2}}function $I(e){return e[e.length-1]}function Sg(e,n,S){const M=["+","-"].includes(e.value)?"ADDITION":"MULTIPLICATION",L=n.type===M?n.values:[n],K=S.type===M?S.values:[S];return e.value==="-"?K[0]={type:"NEGATE",value:K[0]}:e.value==="/"&&(K[0]={type:"INVERT",value:K[0]}),{type:M,values:[...L,...K]}}function Ag(e){if(e.type==="ADDITION")return new CSSMathSum(...e.values.map((n=>Ag(n))));if(e.type==="MULTIPLICATION")return new CSSMathProduct(...e.values.map((n=>Ag(n))));if(e.type==="NEGATE")return new CSSMathNegate(Ag(e.value));if(e.type==="INVERT")return new CSSMathInvert(Ag(e.value));if(e instanceof cI)return Rg(new WA("calc",e.value));if(e instanceof A){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number");throw new SyntaxError("Invalid math expression")}return RA(e)}function Rg(e){if(e.name==="min"||e.name==="max"){const M=e.values.filter((L=>!(L instanceof a||L instanceof G))).map((L=>oA(Rg(new WA("calc",L)))));return e.name==="min"?new CSSMathMin(...M):new CSSMathMax(...M)}if(e.name!=="calc")return null;const n=Ag((function(M){const L=[],K=[];for(;M.length;){const x=M.shift();if(x instanceof s||x instanceof w||x instanceof t||x instanceof WA||x instanceof cI||x instanceof A)K.push(x);else if(x instanceof o&&["*","/","+","-"].includes(x.value)){for(;L.length&&!($I(L)instanceof k)&&wA($I(L))>wA(x);){const b=L.pop(),u=K.pop(),P=K.pop();K.push(Sg(b,P,u))}L.push(x)}else if(x instanceof k)L.push(x);else if(x instanceof J){if(!L.length)return null;for(;!($I(L)instanceof k);){const b=L.pop(),u=K.pop(),P=K.pop();K.push(Sg(b,P,u))}if(!($I(L)instanceof k))return null;L.pop()}else if(!(x instanceof a))return null}for(;L.length;){if($I(L)instanceof k)return null;const x=L.pop(),b=K.pop(),u=K.pop();K.push(Sg(x,u,b))}return K[0]})([...e.values]));let S;try{S=oA(n)}catch{new CSSStyleSheet().insertRule("error",0)}return S instanceof CSSUnitValue?new CSSMathSum(S):S}function RA(e){return e instanceof WA&&["calc","min","max","clamp"].includes(e.name)?Rg(e):e instanceof s&&e.value===0&&!e.unit?new CSSUnitValue(0,"px"):e instanceof s?new CSSUnitValue(e.value,"number"):e instanceof t?new CSSUnitValue(e.value,"percent"):e instanceof w?new CSSUnitValue(e.value,e.unit):void 0}function Ha(e){const n=(function(S){const M=fI(S);for(;M[0]instanceof a;)M.shift();if(M[0]===void 0)return null;const L=hI(M);for(;M[0]instanceof a;)M.shift();return M[0]===void 0?L:null})(e);return n===null&&new CSSStyleSheet().insertRule("error",0),n instanceof s||n instanceof t||n instanceof w||n instanceof WA||new CSSStyleSheet().insertRule("error",0),n instanceof w&&jI(n.unit)===null&&new CSSStyleSheet().insertRule("error",0),RA(n)}(function(){let e=new WeakMap;function n(K){const x=[];for(let u=0;u<K.length;u++)x[u]=typeof(b=K[u])=="number"?new CSSUnitValue(b,"number"):b;var b;return x}class S{static parse(x){return x instanceof S?x:oA(Ha(x),{})}}class M extends S{constructor(x,b,u,P){super(),e.set(this,{values:n(x),operator:b,name:u||b,delimiter:P||", "})}get operator(){return e.get(this).operator}get values(){return e.get(this).values}toString(){const x=e.get(this);return`${x.name}(${x.values.join(x.delimiter)})`}}const L={CSSNumericValue:S,CSSMathValue:M,CSSUnitValue:class extends S{constructor(K,x){super(),e.set(this,{value:K,unit:x})}get value(){return e.get(this).value}set value(K){e.get(this).value=K}get unit(){return e.get(this).unit}to(K){return zI(this,K)}toSum(...K){return mI(this,...K)}type(){return jI(e.get(this).unit)}toString(){const K=e.get(this);return`${K.value}${(function(x){switch(x){case"percent":return"%";case"number":return"";default:return x.toLowerCase()}})(K.unit)}`}},CSSKeywordValue:class{constructor(K){this.value=K}toString(){return this.value.toString()}},CSSMathSum:class extends M{constructor(K){super(arguments,"sum","calc"," + ")}},CSSMathProduct:class extends M{constructor(K){super(arguments,"product","calc"," * ")}toSum(...K){return mI(this,...K)}type(){return e.get(this).values.map((K=>K.type())).reduce(_I)}},CSSMathNegate:class extends M{constructor(K){super([arguments[0]],"negate","-")}get value(){return e.get(this).values[0]}type(){return this.value.type()}},CSSMathInvert:class extends M{constructor(K){super([1,arguments[0]],"invert","calc"," / ")}get value(){return e.get(this).values[1]}type(){return(function(K){const x={};for(const b of qI)x[b]=-1*K[b];return x})(e.get(this).values[1].type())}},CSSMathMax:class extends M{constructor(){super(arguments,"max")}},CSSMathMin:class extends M{constructor(){super(arguments,"min")}}};if(!window.CSS&&!Reflect.defineProperty(window,"CSS",{value:{}}))throw Error("Error installing CSSOM support");window.CSSUnitValue||["number","percent","em","ex","px","cm","mm","in","pt","pc","Q","vw","vh","vmin","vmax","rems","ch","deg","rad","grad","turn","ms","s","Hz","kHz","dppx","dpi","dpcm","fr"].forEach((K=>{if(!Reflect.defineProperty(CSS,K,{value:x=>new CSSUnitValue(x,K)}))throw Error(`Error installing CSS.${K}`)}));for(let[K,x]of Object.entries(L))if(!(K in window)&&!Reflect.defineProperty(window,K,{value:x}))throw Error(`Error installing CSSOM support for ${K}`)})();const ro="block";let oI=new WeakMap,Fg=new WeakMap;const HC=["entry","exit","cover","contain","entry-crossing","exit-crossing"];function So(e){return e===document.scrollingElement?document:e}function jg(e){Bi(e);let n=oI.get(e).animations;if(n.length===0)return;let S=e.currentTime;for(let M=0;M<n.length;M++)n[M].tickAnimation(S)}function Ro(e,n){if(!e)return null;const S=Fg.get(e).sourceMeasurements,M=getComputedStyle(e);let L=S.scrollTop;return kA(n,M)==="x"&&(L=Math.abs(S.scrollLeft)),L}function Qi(e,n){const S=oA(e,n);if(S instanceof CSSUnitValue){if(S.unit==="px")return S.value;throw TypeError("Unhandled unit type "+S.unit)}throw TypeError("Unsupported value type: "+typeof e)}function Bi(e){if(!(e instanceof kQ))return void(function(S){const M=oI.get(S);if(!M.anonymousSource)return;const L=ko(M.anonymousSource,M.anonymousTarget);FQ(S,L)})(e);const n=e.subject;if(!n||getComputedStyle(n).display=="none")return void FQ(e,null);FQ(e,si(n))}function Fo(e){return["block","inline","x","y"].includes(e)}function Ci(e){const n=getComputedStyle(e);return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientWidth:e.clientWidth,clientHeight:e.clientHeight,writingMode:n.writingMode,direction:n.direction,scrollPaddingTop:n.scrollPaddingTop,scrollPaddingBottom:n.scrollPaddingBottom,scrollPaddingLeft:n.scrollPaddingLeft,scrollPaddingRight:n.scrollPaddingRight}}function Ei(e,n){if(!e||!n)return;let S=0,M=0,L=n;const K=e.offsetParent;for(;L&&L!=K;)M+=L.offsetLeft,S+=L.offsetTop,L=L.offsetParent;M-=e.offsetLeft+e.clientLeft,S-=e.offsetTop+e.clientTop;const x=getComputedStyle(n);return{top:S,left:M,offsetWidth:n.offsetWidth,offsetHeight:n.offsetHeight,fontSize:x.fontSize}}function YC(e){let n=Fg.get(e);n.sourceMeasurements=Ci(e);for(const S of n.timelineRefs){const M=S.deref();M instanceof kQ&&(oI.get(M).subjectMeasurements=Ei(e,M.subject))}n.updateScheduled||(setTimeout((()=>{for(const S of n.timelineRefs){const M=S.deref();M&&jg(M)}n.updateScheduled=!1})),n.updateScheduled=!0)}function FQ(e,n){const S=oI.get(e),M=S.source;if(M!=n){if(M){const L=Fg.get(M);if(L){L.timelineRefs.delete(e);const K=Array.from(L.timelineRefs).filter((x=>x.deref()===void 0));for(const x of K)L.timelineRefs.delete(x);L.timelineRefs.size===0&&(L.disconnect(),Fg.delete(M))}}if(S.source=n,n){let L=Fg.get(n);if(!L){L={timelineRefs:new Set,sourceMeasurements:Ci(n)},Fg.set(n,L);const K=new ResizeObserver((u=>{for(const P of u)YC(S.source)}));K.observe(n);for(const u of n.children)K.observe(u);const x=new MutationObserver((u=>{for(const P of u)YC(P.target)}));x.observe(n,{attributes:!0,attributeFilter:["style","class"]});const b=()=>{L.sourceMeasurements.scrollLeft=n.scrollLeft,L.sourceMeasurements.scrollTop=n.scrollTop;for(const u of L.timelineRefs){const P=u.deref();P&&jg(P)}};So(n).addEventListener("scroll",b),L.disconnect=()=>{K.disconnect(),x.disconnect(),So(n).removeEventListener("scroll",b)}}L.timelineRefs.add(new WeakRef(e))}}}function ii(e,n){let S=oI.get(e).animations;for(let M=0;M<S.length;M++)S[M].animation==n&&S.splice(M,1)}function Di(e,n,S){let M=oI.get(e).animations;for(let L=0;L<M.length;L++)if(M[L].animation==n)return;M.push({animation:n,tickAnimation:S}),queueMicrotask((()=>{jg(e)}))}class yI{constructor(n){if(oI.set(this,{source:null,axis:ro,anonymousSource:n?n.anonymousSource:null,anonymousTarget:n?n.anonymousTarget:null,subject:null,inset:null,animations:[],subjectMeasurements:null}),FQ(this,n&&n.source!==void 0?n.source:document.scrollingElement),n&&n.axis!==void 0&&n.axis!=ro){if(!Fo(n.axis))throw TypeError("Invalid axis");oI.get(this).axis=n.axis}jg(this)}set source(n){FQ(this,n),jg(this)}get source(){return oI.get(this).source}set axis(n){if(!Fo(n))throw TypeError("Invalid axis");oI.get(this).axis=n,jg(this)}get axis(){return oI.get(this).axis}get duration(){return CSS.percent(100)}get phase(){const n=this.source;if(!n)return"inactive";let S=getComputedStyle(n);return S.display=="none"?"inactive":n==document.scrollingElement||S.overflow!="visible"&&S.overflow!="clip"?"active":"inactive"}get currentTime(){const S=this.source;if(!S||!S.isConnected||this.phase=="inactive")return null;const M=getComputedStyle(S);if(M.display==="inline"||M.display==="none")return null;const L=this.axis,K=Ro(S,L),x=(function(b,u){const P=Fg.get(b).sourceMeasurements,V=getComputedStyle(b).writingMode=="horizontal-tb";return u==="block"?u=V?"y":"x":u==="inline"&&(u=V?"x":"y"),u==="y"?P.scrollHeight-P.clientHeight:u==="x"?P.scrollWidth-P.clientWidth:void 0})(S,L);return x>0?CSS.percent(100*K/x):CSS.percent(100)}get __polyfill(){return!0}}function oi(e,n){let S=e.parentElement;for(;S!=null;){if(n(S))return S;S=S.parentElement}}function ko(e,n){switch(e){case"root":return document.scrollingElement;case"nearest":return si(n);case"self":return n;default:throw new TypeError("Invalid ScrollTimeline Source Type.")}}function Ya(e){switch(getComputedStyle(e).display){case"block":case"inline-block":case"list-item":case"table":case"table-caption":case"flow-root":case"flex":case"grid":return!0}return!1}function Mo(e){const n=getComputedStyle(e);return n.transform!="none"||n.perspective!="none"||n.willChange=="transform"||n.willChange=="perspective"||n.filter!="none"||n.willChange=="filter"||n.backdropFilter!="none"}function Ka(e){return getComputedStyle(e).position!="static"||Mo(e)}function da(e){switch(getComputedStyle(e).position){case"static":case"relative":case"sticky":return oi(e,Ya);case"absolute":return oi(e,Ka);case"fixed":return oi(e,Mo)}}function si(e){if(e&&e.isConnected){for(;e=da(e);)switch(getComputedStyle(e)["overflow-x"]){case"auto":case"scroll":case"hidden":return e==document.body&&getComputedStyle(document.scrollingElement).overflow=="visible"?document.scrollingElement:e}return document.scrollingElement}}function iB(e,n){const S=oI.get(e),M=S.subjectMeasurements,L=Fg.get(S.source).sourceMeasurements;return e.phase==="inactive"?null:e instanceof kQ?ti(n,L,M,S.axis,S.inset):null}function ti(e,n,S,M,L){const K=n.direction=="rtl"||n.writingMode=="vertical-rl";let x,b,u={fontSize:S.fontSize};kA(M,n)==="x"?(x=S.offsetWidth,b=S.left,u.scrollPadding=[n.scrollPaddingLeft,n.scrollPaddingRight],K&&(b+=n.scrollWidth-n.clientWidth,u.scrollPadding=[n.scrollPaddingRight,n.scrollPaddingLeft]),u.containerSize=n.clientWidth):(x=S.offsetHeight,b=S.top,u.scrollPadding=[n.scrollPaddingTop,n.scrollPaddingBottom],u.containerSize=n.clientHeight);const P=(function(ni,xC){const Xa={start:0,end:0};if(!ni)return Xa;const[va,Va]=[ni.start,ni.end].map(((mo,Po)=>mo==="auto"?xC.scrollPadding[Po]==="auto"?0:parseFloat(xC.scrollPadding[Po]):Qi(mo,{percentageReference:CSS.px(xC.containerSize),fontSize:CSS.px(parseFloat(xC.fontSize))})));return{start:va,end:Va}})(L,u),V=b-u.containerSize+P.end,IA=b+x-P.start,DA=V+x,LA=IA-x,bA=Math.min(DA,LA),JI=Math.max(DA,LA);let Ig,PI;const bo=x>u.containerSize-P.start-P.end;switch(e){case"cover":Ig=V,PI=IA;break;case"contain":Ig=bA,PI=JI;break;case"entry":Ig=V,PI=bA;break;case"exit":Ig=JI,PI=IA;break;case"entry-crossing":Ig=V,PI=bo?JI:bA;break;case"exit-crossing":Ig=bo?bA:JI,PI=IA}return{start:Ig,end:PI}}function No(e,n){if(e instanceof kQ){const{rangeName:S,offset:M}=n;return Jo(iB(e,S),M,iB(e,"cover"),e.subject)}if(e instanceof yI){const{axis:S,source:M}=e,{sourceMeasurements:L}=Fg.get(M);let K;return K=kA(S,L)==="x"?L.scrollWidth-L.clientWidth:L.scrollHeight-L.clientHeight,Qi(n,{percentageReference:CSS.px(K)})/K}unsupportedTimeline(e)}function Jo(e,n,S,M){if(!e||!S)return 0;let L=getComputedStyle(M);return(Qi(n,{percentageReference:CSS.px(e.end-e.start),fontSize:CSS.px(parseFloat(L.fontSize))})+e.start-S.start)/(S.end-S.start)}let kQ=class extends yI{constructor(n){super(n);const S=oI.get(this);S.subject=n&&n.subject?n.subject:void 0,n&&n.inset&&(S.inset=(function(M){if(!M)return{start:0,end:0};let L;if(L=typeof M=="string"?NA(M).map((K=>{if(K==="auto")return"auto";try{return CSSNumericValue.parse(K)}catch{throw TypeError(`Could not parse inset "${M}"`)}})):Array.isArray(M)?M:[M],L.length===0||L.length>2)throw TypeError("Invalid inset");for(const K of L){if(K==="auto")continue;const x=K.type();if(x.length!==1&&x.percent!==1)throw TypeError("Invalid inset")}return{start:L[0],end:L[1]??L[0]}})(n.inset)),S.subject&&(new ResizeObserver((()=>{YC(S.source)})).observe(S.subject),new MutationObserver((()=>{YC(S.source)})).observe(S.subject,{attributes:!0,attributeFilter:["class","style"]})),Bi(this),S.subjectMeasurements=Ei(S.source,S.subject),jg(this)}get source(){return Bi(this),oI.get(this).source}set source(n){throw new Error("Cannot set the source of a view timeline")}get subject(){return oI.get(this).subject}get axis(){return oI.get(this).axis}get currentTime(){const S=Ro(this.source,this.axis);if(S==null)return null;const M=iB(this,"cover");if(!M)return null;const L=(S-M.start)/(M.end-M.start);return CSS.percent(100*L)}get startOffset(){return CSS.px(iB(this,"cover").start)}get endOffset(){return CSS.px(iB(this,"cover").end)}};const la=document.getAnimations,fa=window.Element.prototype.getAnimations,xa=window.Element.prototype.animate,Uo=window.Animation;class MQ{constructor(){this.state="pending",this.nativeResolve=this.nativeReject=null,this.promise=new Promise(((n,S)=>{this.nativeResolve=n,this.nativeReject=S}))}resolve(n){this.state="resolved",this.nativeResolve(n)}reject(n){this.state="rejected",this.promise.catch((()=>{})),this.nativeReject(n)}}function DB(e){e.readyPromise=new MQ,requestAnimationFrame((()=>{var n;(((n=e.timeline)==null?void 0:n.currentTime)??null)!==null&&(KC(e),e.pendingTask!=="play"||e.startTime===null&&e.holdTime===null?e.pendingTask==="pause"&&Yo(e):Ho(e))}))}function Lo(){return new DOMException("The user aborted a request","AbortError")}function zg(e,n){if(n===null)return n;if(typeof n!="number")throw new DOMException(`Unexpected value: ${n}. Cannot convert to CssNumberish`,"InvalidStateError");const S=e.rangeDuration??100,M=Mg(e),L=M?S*n/M:0;return CSS.percent(L)}function fA(e,n){if(e.timeline){if(n===null)return n;if(n.unit==="percent"){const S=e.rangeDuration??100,M=Mg(e);return n.value*M/S}throw new DOMException("CSSNumericValue must be a percentage for progress based animations.","NotSupportedError")}{if(n==null||typeof n=="number")return n;const S=n.to("ms");if(S)return S.value;throw new DOMException("CSSNumericValue must be either a number or a time value for time based animations.","InvalidStateError")}}function Ho(e){const n=fA(e,e.timeline.currentTime);if(e.holdTime!=null)wg(e),e.animation.playbackRate==0?e.startTime=n:(e.startTime=n-e.holdTime/e.animation.playbackRate,e.holdTime=null);else if(e.startTime!==null&&e.pendingPlaybackRate!==null){const S=(n-e.startTime)*e.animation.playbackRate;wg(e);const M=e.animation.playbackRate;M==0?(e.holdTime=null,e.startTime=n):e.startTime=n-S/M}e.readyPromise&&e.readyPromise.state=="pending"&&e.readyPromise.resolve(e.proxy),kg(e,!1,!1),Ng(e),e.pendingTask=null}function Yo(e){const n=fA(e,e.timeline.currentTime);e.startTime!=null&&e.holdTime==null&&(e.holdTime=(n-e.startTime)*e.animation.playbackRate),wg(e),e.startTime=null,e.readyPromise.resolve(e.proxy),kg(e,!1,!1),Ng(e),e.pendingTask=null}function Ko(e){if(!e.finishedPromise||e.finishedPromise.state!="pending"||e.proxy.playState!="finished")return;e.finishedPromise.resolve(e.proxy),e.animation.pause();const n=new CustomEvent("finish",{detail:{currentTime:e.proxy.currentTime,timelineTime:e.proxy.timeline.currentTime}});Object.defineProperty(n,"currentTime",{get:function(){return this.detail.currentTime}}),Object.defineProperty(n,"timelineTime",{get:function(){return this.detail.timelineTime}}),requestAnimationFrame((()=>{queueMicrotask((()=>{e.animation.dispatchEvent(n)}))}))}function NQ(e){return e.pendingPlaybackRate!==null?e.pendingPlaybackRate:e.animation.playbackRate}function wg(e){e.pendingPlaybackRate!==null&&(e.animation.playbackRate=e.pendingPlaybackRate,e.pendingPlaybackRate=null)}function lo(e){if(!e.timeline)return null;const n=fA(e,e.timeline.currentTime);if(n===null||e.startTime===null)return null;let S=(n-e.startTime)*e.animation.playbackRate;return S==-0&&(S=0),S}function kg(e,n,S){if(!e.timeline)return;let M=n?fA(e,e.proxy.currentTime):lo(e);if(M&&e.startTime!=null&&!e.proxy.pending){const L=NQ(e),K=Mg(e);let x=e.previousCurrentTime;L>0&&M>=K&&e.previousCurrentTime!=null?((x===null||x<K)&&(x=K),e.holdTime=n?M:x):L<0&&M<=0?((x==null||x>0)&&(x=0),e.holdTime=n?M:x):L!=0&&(n&&e.holdTime!==null&&(e.startTime=(function(b,u){if(!b.timeline)return null;const P=fA(b,b.timeline.currentTime);return P==null?null:P-u/b.animation.playbackRate})(e,e.holdTime)),e.holdTime=null)}Ng(e),e.previousCurrentTime=fA(e,e.proxy.currentTime),e.proxy.playState=="finished"?(e.finishedPromise||(e.finishedPromise=new MQ),e.finishedPromise.state=="pending"&&(S?Ko(e):Promise.resolve().then((()=>{Ko(e)})))):(e.finishedPromise&&e.finishedPromise.state=="resolved"&&(e.finishedPromise=new MQ),e.animation.playState!="paused"&&e.animation.pause())}function Mg(e){const n=(function(M){const L=M.proxy.effect.getTiming();return M.normalizedTiming||L})(e),S=n.delay+n.endDelay+n.iterations*n.duration;return Math.max(0,S)}function Ng(e){if(e.timeline)if(e.startTime!==null){const n=e.timeline.currentTime;if(n==null)return;wi(e,(fA(e,n)-e.startTime)*e.animation.playbackRate)}else e.holdTime!==null&&wi(e,e.holdTime)}function wi(e,n){const S=e.timeline,M=e.animation.playbackRate,L=S.currentTime&&S.currentTime.value==(M<0?0:100)?M<0?.001:-.001:0;e.animation.currentTime=n+L}function ai(e,n){if(!e.timeline)return;const S=e.proxy.playState=="paused"&&e.proxy.pending;let M=!1,L=fA(e,e.proxy.currentTime);NQ(e)==0&&L==null&&(e.holdTime=0),L==null&&(e.autoAlignStartTime=!0),(e.proxy.playState==="finished"||S)&&(e.holdTime=null,e.startTime=null,e.autoAlignStartTime=!0),e.holdTime&&(e.startTime=null),e.pendingTask&&(e.pendingTask=null,M=!0),(e.holdTime!==null||e.autoAlignStartTime||S||e.pendingPlaybackRate!==null)&&(e.readyPromise&&!M&&(e.readyPromise=null),Ng(e),e.readyPromise||DB(e),e.pendingTask="play",Di(e.timeline,e.animation,ei.bind(e.proxy)),kg(e,!1,!1))}function ei(e){const n=AA.get(this);if(!n)return;if(e==null)return void(n.proxy.playState!=="paused"&&n.animation.playState!="idle"&&n.animation.cancel());KC(n),n.pendingTask&&requestAnimationFrame((()=>{n.pendingTask!=="play"||n.startTime===null&&n.holdTime===null?n.pendingTask==="pause"&&Yo(n):Ho(n)}));const S=this.playState;if(S=="running"||S=="finished"){const M=fA(n,e);wi(n,(M-fA(n,this.startTime))*this.playbackRate),kg(n,!1,!1)}}function fo(e){e.specifiedTiming=null}let AA=new WeakMap;window.addEventListener("pagehide",(e=>{AA=new WeakMap}),!1);let xo=new WeakMap;function KC(e){if(!e.autoAlignStartTime||!e.timeline||!e.timeline.currentTime||e.proxy.playState==="idle"||e.proxy.playState==="paused"&&e.holdTime!==null)return;const n=e.rangeDuration;let S,M;try{S=CSS.percent(100*(function(K){if(!K.animationRange)return 0;const x=K.animationRange.start==="normal"?po(K.timeline):K.animationRange.start;return No(K.timeline,x)})(e))}catch(K){S=CSS.percent(0),e.animationRange.start="normal",console.warn("Exception when calculating start offset",K)}try{M=CSS.percent(100*(1-(function(K){if(!K.animationRange)return 0;const x=K.animationRange.end==="normal"?uo(K.timeline):K.animationRange.end;return 1-No(K.timeline,x)})(e)))}catch(K){M=CSS.percent(100),e.animationRange.end="normal",console.warn("Exception when calculating end offset",K)}e.rangeDuration=M.value-S.value;const L=NQ(e);e.startTime=fA(e,L>=0?S:M),e.holdTime=null,e.rangeDuration!==n&&fo(e)}function dC(e){throw new Error("Unsupported timeline class")}function po(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(0)}:e instanceof yI?CSS.percent(0):void dC()}function uo(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(100)}:e instanceof yI?CSS.percent(100):void dC()}function pa(e,n){if(!n)return{start:"normal",end:"normal"};const S={start:po(e),end:uo(e)};if(e instanceof ViewTimeline){const M=NA(n),L=[],K=[];if(M.forEach((x=>{if(HC.includes(x))L.push(x);else try{K.push(CSSNumericValue.parse(x))}catch{throw TypeError(`Could not parse range "${n}"`)}})),L.length>2||K.length>2||K.length==1)throw TypeError("Invalid time range or unsupported time range format.");return L.length&&(S.start.rangeName=L[0],S.end.rangeName=L.length>1?L[1]:L[0]),K.length>1&&(S.start.offset=K[0],S.end.offset=K[1]),S}if(e instanceof yI){const M=n.split(" ");if(M.length!=2)throw TypeError("Invalid time range or unsupported time range format.");return S.start=CSSNumericValue.parse(M[0]),S.end=CSSNumericValue.parse(M[1]),S}dC()}function lC(e,n,S){if(!n||n==="normal")return"normal";if(e instanceof ViewTimeline){let M="cover",L=S==="start"?CSS.percent(0):CSS.percent(100);if(n instanceof Object)n.rangeName!==void 0&&(M=n.rangeName),n.offset!==void 0&&(L=n.offset);else{const K=NA(n);K.length===1?HC.includes(K[0])?M=K[0]:L=oA(CSSNumericValue.parse(K[0]),{}):K.length===2&&(M=K[0],L=oA(CSSNumericValue.parse(K[1]),{}))}if(!HC.includes(M))throw TypeError("Invalid range name");return{rangeName:M,offset:L}}if(e instanceof yI)return CSSNumericValue.parse(n);dC()}class fC{constructor(n,S,M={}){const L=S instanceof yI,K=n instanceof Uo?n:new Uo(n,L?void 0:S);xo.set(K,this),AA.set(this,{animation:K,timeline:L?S:void 0,playState:L?"idle":null,readyPromise:null,finishedPromise:null,startTime:null,holdTime:null,rangeDuration:null,previousCurrentTime:null,autoAlignStartTime:!1,pendingPlaybackRate:null,pendingTask:null,specifiedTiming:null,normalizedTiming:null,effect:null,animationRange:L?pa(S,M["animation-range"]):null,proxy:this})}get effect(){const n=AA.get(this);return n.timeline?(n.effect||(n.effect=(function(S){const M=S.animation.effect,L=M.updateTiming,K={apply:function(P){M.getTiming();const V=P.apply(M);if(S.timeline){const IA=S.duration??100;V.localTime=zg(S,V.localTime),V.endTime=zg(S,V.endTime),V.activeDuration=zg(S,V.activeDuration);const DA=Mg(S),LA=V.iterations?(DA-V.delay-V.endDelay)/V.iterations:0;V.duration=DA?CSS.percent(IA*LA/DA):CSS.percent(0),S.timeline.currentTime===void 0&&(V.localTime=null)}return V}},x={apply:function(P,V){if(S.specifiedTiming)return S.specifiedTiming;S.specifiedTiming=P.apply(M);let IA,DA=Object.assign({},S.specifiedTiming);if(DA.duration===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");return(DA.duration===null||DA.duration==="auto"||S.autoDurationEffect)&&S.timeline&&(S.autoDurationEffect=!0,DA.delay=0,DA.endDelay=0,IA=DA.iterations?1e5:0,DA.duration=DA.iterations?(IA-DA.delay-DA.endDelay)/DA.iterations:0,DA.duration<0&&(DA.duration=0,DA.endDelay=IA-DA.delay),L.apply(M,[DA])),S.normalizedTiming=DA,S.specifiedTiming}},b={apply:function(P,V,IA){if(IA&&IA.length){if(S.timeline&&IA[0]){const DA=IA[0],LA=DA.duration;if(LA===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");if(DA.iterations===1/0)throw TypeError("Effect iterations cannot be Infinity when used with Scroll Timelines");LA!==void 0&&LA!=="auto"&&(S.autoDurationEffect=null)}S.specifiedTiming&&P.apply(M,[S.specifiedTiming]),P.apply(M,IA),fo(S)}}},u=new Proxy(M,{get:function(P,V){const IA=P[V];return typeof IA=="function"?IA.bind(M):IA},set:function(P,V,IA){return P[V]=IA,!0}});return u.getComputedTiming=new Proxy(M.getComputedTiming,K),u.getTiming=new Proxy(M.getTiming,x),u.updateTiming=new Proxy(M.updateTiming,b),u})(n)),n.effect):n.animation.effect}set effect(n){const S=AA.get(this);S.animation.effect=n,S.effect=null,S.autoDurationEffect=null}get timeline(){const n=AA.get(this);return n.timeline||n.animation.timeline}set timeline(n){const S=AA.get(this),M=this.timeline;if(M==n)return;const L=this.playState,K=this.currentTime;let x,b=Mg(S);x=K===null?null:b===0?0:fA(S,K)/b;const u=M instanceof yI,P=n instanceof yI,V=this.pending;if(u&&ii(S.timeline,S.animation),P)return S.timeline=n,wg(S),S.autoAlignStartTime=!0,S.startTime=null,S.holdTime=null,L!=="running"&&L!=="finished"||(S.readyPromise&&S.readyPromise.state!=="resolved"||DB(S),S.pendingTask="play",Di(S.timeline,S.animation,ei.bind(this))),L==="paused"&&x!==null&&(S.holdTime=x*b),V&&(S.readyPromise&&S.readyPromise.state!="resolved"||DB(S),S.pendingTask=L=="paused"?"pause":"play"),S.startTime!==null&&(S.holdTime=null),void kg(S,!1,!1);if(S.animation.timeline!=n)throw TypeError("Unsupported timeline: "+n);if(ii(S.timeline,S.animation),S.timeline=null,u)switch(K!==null&&(S.animation.currentTime=x*Mg(S)),L){case"paused":S.animation.pause();break;case"running":case"finished":S.animation.play()}}get startTime(){const n=AA.get(this);return n.timeline?zg(n,n.startTime):n.animation.startTime}set startTime(n){const S=AA.get(this);if(n=fA(S,n),!S.timeline)return void(S.animation.startTime=n);S.autoAlignStartTime=!1,fA(S,S.timeline.currentTime)==null&&S.startTime!=null&&(S.holdTime=null,Ng(S));const M=fA(S,this.currentTime);wg(S),S.startTime=n,S.startTime!==null&&S.animation.playbackRate!=0?S.holdTime=null:S.holdTime=M,S.pendingTask&&(S.pendingTask=null,S.readyPromise.resolve(this)),kg(S,!0,!1),Ng(S)}get currentTime(){const n=AA.get(this);return n.timeline?n.holdTime!=null?zg(n,n.holdTime):zg(n,lo(n)):n.animation.currentTime}set currentTime(n){const S=AA.get(this);S.timeline?((function(M,L){if(L==null&&M.currentTime!==null)throw new TypeError;L=fA(M,L),M.autoAlignStartTime=!1,M.holdTime!==null||M.startTime===null||M.timeline.phase==="inactive"||M.animation.playbackRate===0?M.holdTime=L:M.startTime=fA(M,M.timeline.currentTime)-L/M.animation.playbackRate,M.timeline.phase==="inactive"&&(M.startTime=null),M.previousCurrentTime=null})(S,n),S.pendingTask=="pause"&&(S.holdTime=fA(S,n),wg(S),S.startTime=null,S.pendingTask=null,S.readyPromise.resolve(this)),kg(S,!0,!1)):S.animation.currentTime=n}get playbackRate(){return AA.get(this).animation.playbackRate}set playbackRate(n){const S=AA.get(this);if(!S.timeline)return void(S.animation.playbackRate=n);S.pendingPlaybackRate=null;const M=this.currentTime;S.animation.playbackRate=n,M!==null&&(this.currentTime=M)}get playState(){const n=AA.get(this);if(!n.timeline)return n.animation.playState;const S=fA(n,this.currentTime);return S===null&&n.startTime===null&&n.pendingTask==null?"idle":n.pendingTask=="pause"||n.startTime===null&&n.pendingTask!="play"?"paused":S!=null&&(n.animation.playbackRate>0&&S>=Mg(n)||n.animation.playbackRate<0&&S<=0)?"finished":"running"}get rangeStart(){var n;return((n=AA.get(this).animationRange)==null?void 0:n.start)??"normal"}set rangeStart(n){const S=AA.get(this);if(!S.timeline)return S.animation.rangeStart=n;S.timeline instanceof yI&&(S.animationRange.start=lC(S.timeline,n,"start"),KC(S),Ng(S))}get rangeEnd(){var n;return((n=AA.get(this).animationRange)==null?void 0:n.end)??"normal"}set rangeEnd(n){const S=AA.get(this);if(!S.timeline)return S.animation.rangeEnd=n;S.timeline instanceof yI&&(S.animationRange.end=lC(S.timeline,n,"end"),KC(S),Ng(S))}get replaceState(){return AA.get(this).animation.pending}get pending(){const n=AA.get(this);return n.timeline?!!n.readyPromise&&n.readyPromise.state=="pending":n.animation.pending}finish(){const n=AA.get(this);if(!n.timeline)return void n.animation.finish();const S=NQ(n),M=Mg(n);if(S==0)throw new DOMException("Cannot finish Animation with a playbackRate of 0.","InvalidStateError");if(S>0&&M==1/0)throw new DOMException("Cannot finish Animation with an infinite target effect end.","InvalidStateError");wg(n);const L=S<0?0:M;this.currentTime=zg(n,L);const K=fA(n,n.timeline.currentTime);n.startTime===null&&K!==null&&(n.startTime=K-L/n.animation.playbackRate),n.pendingTask=="pause"&&n.startTime!==null&&(n.holdTime=null,n.pendingTask=null,n.readyPromise.resolve(this)),n.pendingTask=="play"&&n.startTime!==null&&(n.pendingTask=null,n.readyPromise.resolve(this)),kg(n,!0,!0)}play(){const n=AA.get(this);n.timeline?ai(n):n.animation.play()}pause(){const n=AA.get(this);n.timeline?this.playState!="paused"&&(n.animation.currentTime===null&&(n.autoAlignStartTime=!0),n.pendingTask=="play"?n.pendingTask=null:n.readyPromise=null,n.readyPromise||DB(n),n.pendingTask="pause",Di(n.timeline,n.animation,ei.bind(n.proxy))):n.animation.pause()}reverse(){const n=AA.get(this),S=NQ(n),M=fA(n,this.currentTime),L=Mg(n)==1/0,K=S!=0&&(S<0||M>0||!L);if(!n.timeline||!K)return K&&(n.pendingPlaybackRate=-NQ(n)),void n.animation.reverse();if(n.timeline.phase=="inactive")throw new DOMException("Cannot reverse an animation with no active timeline","InvalidStateError");this.updatePlaybackRate(-S),ai(n)}updatePlaybackRate(n){const S=AA.get(this);if(S.pendingPlaybackRate=n,!S.timeline)return void S.animation.updatePlaybackRate(n);const M=this.playState;if(!S.readyPromise||S.readyPromise.state!="pending")switch(M){case"idle":case"paused":wg(S);break;case"finished":const L=fA(S,S.timeline.currentTime),K=L!==null?(L-S.startTime)*S.animation.playbackRate:null;S.startTime=n==0?L:L!=null&&K!=null?(L-K)/n:null,wg(S),kg(S,!1,!1),Ng(S);break;default:ai(S)}}persist(){AA.get(this).animation.persist()}get id(){return AA.get(this).animation.id}set id(n){AA.get(this).animation.id=n}cancel(){const n=AA.get(this);n.timeline?(this.playState!="idle"&&((function(S){S.pendingTask&&(S.pendingTask=null,wg(S),S.readyPromise.reject(Lo()),DB(S),S.readyPromise.resolve(S.proxy))})(n),n.finishedPromise&&n.finishedPromise.state=="pending"&&n.finishedPromise.reject(Lo()),n.finishedPromise=new MQ,n.animation.cancel()),n.startTime=null,n.holdTime=null,ii(n.timeline,n.animation)):n.animation.cancel()}get onfinish(){return AA.get(this).animation.onfinish}set onfinish(n){AA.get(this).animation.onfinish=n}get oncancel(){return AA.get(this).animation.oncancel}set oncancel(n){AA.get(this).animation.oncancel=n}get onremove(){return AA.get(this).animation.onremove}set onremove(n){AA.get(this).animation.onremove=n}get finished(){const n=AA.get(this);return n.timeline?(n.finishedPromise||(n.finishedPromise=new MQ),n.finishedPromise.promise):n.animation.finished}get ready(){const n=AA.get(this);return n.timeline?(n.readyPromise||(n.readyPromise=new MQ,n.readyPromise.resolve(this)),n.readyPromise.promise):n.animation.ready}addEventListener(n,S,M){AA.get(this).animation.addEventListener(n,S,M)}removeEventListener(n,S,M){AA.get(this).animation.removeEventListener(n,S,M)}dispatchEvent(n){AA.get(this).animation.dispatchEvent(n)}}function ua(e,n){const S=n.timeline;S instanceof yI&&delete n.timeline;const M=xa.apply(this,[e,n]),L=new fC(M,S);return S instanceof yI&&(M.pause(),AA.get(L).animationRange={start:lC(S,n.rangeStart,"start"),end:lC(S,n.rangeEnd,"end")},L.play()),L}function qo(e){for(let n=0;n<e.length;++n){let S=xo.get(e[n]);S&&(e[n]=S)}return e}function qa(e){return qo(fa.apply(this,[e]))}function ba(e){return qo(la.apply(this,[e]))}const jA={IDENTIFIER:/[\w\\\@_-]+/g,WHITE_SPACE:/\s*/g,TIME:/^[0-9]+(s|ms)/,SCROLL_TIMELINE:/scroll-timeline\s*:([^;}]+)/,SCROLL_TIMELINE_NAME:/scroll-timeline-name\s*:([^;}]+)/,SCROLL_TIMELINE_AXIS:/scroll-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE:/view-timeline\s*:([^;}]+)/,VIEW_TIMELINE_NAME:/view-timeline-name\s*:([^;}]+)/,VIEW_TIMELINE_AXIS:/view-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE_INSET:/view-timeline-inset\s*:([^;}]+)/,ANIMATION_TIMELINE:/animation-timeline\s*:([^;}]+)/,ANIMATION_TIME_RANGE:/animation-range\s*:([^;}]+)/,ANIMATION_NAME:/animation-name\s*:([^;}]+)/,ANIMATION:/animation\s*:([^;}]+)/,ANONYMOUS_SCROLL_TIMELINE:/scroll\(([^)]*)\)/,ANONYMOUS_VIEW_TIMELINE:/view\(([^)]*)\)/},JQ=["block","inline","x","y"],ma=["nearest","root","self"],qg=new class{constructor(){this.cssRulesWithTimelineName=[],this.nextAnonymousTimelineNameIndex=0,this.anonymousScrollTimelineOptions=new Map,this.anonymousViewTimelineOptions=new Map,this.sourceSelectorToScrollTimeline=[],this.subjectSelectorToViewTimeline=[],this.keyframeNamesSelectors=new Map}transpileStyleSheet(e,n,S){const M={sheetSrc:e,index:0,name:S};for(;M.index<M.sheetSrc.length&&(this.eatWhitespace(M),!(M.index>=M.sheetSrc.length));){if(this.lookAhead("/*",M)){for(;this.lookAhead("/*",M);)this.eatComment(M),this.eatWhitespace(M);continue}const L=this.parseQualifiedRule(M);L&&(n?this.parseKeyframesAndSaveNameMapping(L,M):this.handleScrollTimelineProps(L,M))}return M.sheetSrc}getAnimationTimelineOptions(e,n){for(let S=this.cssRulesWithTimelineName.length-1;S>=0;S--){const M=this.cssRulesWithTimelineName[S];try{if(n.matches(M.selector)&&(!M["animation-name"]||M["animation-name"]==e))return{"animation-timeline":M["animation-timeline"],"animation-range":M["animation-range"]}}catch{}}return null}getAnonymousScrollTimelineOptions(e,n){const S=this.anonymousScrollTimelineOptions.get(e);return S?{anonymousSource:S.source,anonymousTarget:n,source:ko(S.source??"nearest",n),axis:S.axis?S.axis:"block"}:null}getScrollTimelineOptions(e,n){const S=this.getAnonymousScrollTimelineOptions(e,n);if(S)return S;for(let M=this.sourceSelectorToScrollTimeline.length-1;M>=0;M--){const L=this.sourceSelectorToScrollTimeline[M];if(L.name==e){const K=this.findPreviousSiblingOrAncestorMatchingSelector(n,L.selector);if(K)return{source:K,...L.axis?{axis:L.axis}:{}}}}return null}findPreviousSiblingOrAncestorMatchingSelector(e,n){let S=e;for(;S;){if(S.matches(n))return S;S=S.previousElementSibling||S.parentElement}return null}getAnonymousViewTimelineOptions(e,n){const S=this.anonymousViewTimelineOptions.get(e);return S?{subject:n,axis:S.axis?S.axis:"block",inset:S.inset?S.inset:"auto"}:null}getViewTimelineOptions(e,n){const S=this.getAnonymousViewTimelineOptions(e,n);if(S)return S;for(let M=this.subjectSelectorToViewTimeline.length-1;M>=0;M--){const L=this.subjectSelectorToViewTimeline[M];if(L.name==e){const K=this.findPreviousSiblingOrAncestorMatchingSelector(n,L.selector);if(K)return{subject:K,axis:L.axis,inset:L.inset}}}return null}handleScrollTimelineProps(e,n){if(e.selector.includes("@keyframes"))return;const S=e.block.contents.includes("animation-name:"),M=e.block.contents.includes("animation-timeline:"),L=e.block.contents.includes("animation:");if(this.saveSourceSelectorToScrollTimeline(e),this.saveSubjectSelectorToViewTimeline(e),!M&&!S&&!L)return;let K=[],x=[],b=!1;M&&(K=this.extractScrollTimelineNames(e.block.contents)),S&&(x=this.extractMatches(e.block.contents,jA.ANIMATION_NAME)),M&&S||(L&&this.extractMatches(e.block.contents,jA.ANIMATION).forEach((u=>{const P=this.extractAnimationName(u);P&&M&&x.push(P),M&&(this.hasDuration(u)||(this.hasAutoDuration(u)&&(e.block.contents=e.block.contents.replace("auto"," ")),e.block.contents=e.block.contents.replace(u," 1s "+u),b=!0))})),b&&this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,n)),this.saveRelationInList(e,K,x)}saveSourceSelectorToScrollTimeline(e){const n=e.block.contents.includes("scroll-timeline:"),S=e.block.contents.includes("scroll-timeline-name:"),M=e.block.contents.includes("scroll-timeline-axis:");if(!n&&!S)return;let L=[];if(n){const x=this.extractMatches(e.block.contents,jA.SCROLL_TIMELINE);for(const b of x){const u=this.split(b);let P={selector:e.selector,name:""};u.length==1?P.name=u[0]:u.length==2&&(JQ.includes(u[0])?(P.axis=u[0],P.name=u[1]):(P.axis=u[1],P.name=u[0])),L.push(P)}}if(S){const x=this.extractMatches(e.block.contents,jA.SCROLL_TIMELINE_NAME);for(let b=0;b<x.length;b++)if(b<L.length)L[b].name=x[b];else{let u={selector:e.selector,name:x[b]};L.push(u)}}let K=[];if(M){const x=this.extractMatches(e.block.contents,jA.SCROLL_TIMELINE_AXIS);if(K=x.filter((b=>JQ.includes(b))),K.length!=x.length)throw new Error("Invalid axis")}for(let x=0;x<L.length;x++)K.length&&(L[x].axis=K[x%L.length]);this.sourceSelectorToScrollTimeline.push(...L)}saveSubjectSelectorToViewTimeline(e){const n=e.block.contents.includes("view-timeline:"),S=e.block.contents.includes("view-timeline-name:"),M=e.block.contents.includes("view-timeline-axis:"),L=e.block.contents.includes("view-timeline-inset:");if(!n&&!S)return;let K=[];if(n){const u=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE);for(let P of u){const V=this.split(P);let IA={selector:e.selector,name:"",inset:null};V.length==1?IA.name=V[0]:V.length==2&&(JQ.includes(V[0])?(IA.axis=V[0],IA.name=V[1]):(IA.axis=V[1],IA.name=V[0])),K.push(IA)}}if(S){const u=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE_NAME);for(let P=0;P<u.length;P++)if(P<K.length)K[P].name=u[P];else{let V={selector:e.selector,name:u[P],inset:null};K.push(V)}}let x=[],b=[];if(L&&(x=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE_INSET)),M){const u=this.extractMatches(e.block.contents,jA.VIEW_TIMELINE_AXIS);if(b=u.filter((P=>JQ.includes(P))),b.length!=u.length)throw new Error("Invalid axis")}for(let u=0;u<K.length;u++)x.length&&(K[u].inset=x[u%K.length]),b.length&&(K[u].axis=b[u%K.length]);this.subjectSelectorToViewTimeline.push(...K)}hasDuration(e){return e.split(" ").filter((n=>{return S=n,jA.TIME.exec(S);var S})).length>=1}hasAutoDuration(e){return e.split(" ").filter((n=>n==="auto")).length>=1}saveRelationInList(e,n,S){let M=[];e.block.contents.includes("animation-range:")&&(M=this.extractMatches(e.block.contents,jA.ANIMATION_TIME_RANGE));const L=Math.max(n.length,S.length,M.length);for(let K=0;K<L;K++)this.cssRulesWithTimelineName.push({selector:e.selector,"animation-timeline":n[K%n.length],...S.length?{"animation-name":S[K%S.length]}:{},...M.length?{"animation-range":M[K%M.length]}:{}})}extractScrollTimelineNames(e){const n=jA.ANIMATION_TIMELINE.exec(e)[1].trim(),S=[];return n.split(",").map((M=>M.trim())).forEach((M=>{if((function(L){return(L.startsWith("scroll")||L.startsWith("view"))&&L.includes("(")})(M)){const L=this.saveAnonymousTimelineName(M);S.push(L)}else S.push(M)})),S}saveAnonymousTimelineName(e){const n=":t"+this.nextAnonymousTimelineNameIndex++;return e.startsWith("scroll(")?this.anonymousScrollTimelineOptions.set(n,this.parseAnonymousScrollTimeline(e)):this.anonymousViewTimelineOptions.set(n,this.parseAnonymousViewTimeline(e)),n}parseAnonymousScrollTimeline(e){const n=jA.ANONYMOUS_SCROLL_TIMELINE.exec(e);if(!n)return null;const S=n[1],M={};return S.split(" ").forEach((L=>{JQ.includes(L)?M.axis=L:ma.includes(L)&&(M.source=L)})),M}parseAnonymousViewTimeline(e){const n=jA.ANONYMOUS_VIEW_TIMELINE.exec(e);if(!n)return null;const S=n[1],M={};return S.split(" ").forEach((L=>{JQ.includes(L)?M.axis=L:M.inset=M.inset?`${M.inset} ${L}`:L})),M}extractAnimationName(e){return this.findMatchingEntryInContainer(e,this.keyframeNamesSelectors)}findMatchingEntryInContainer(e,n){const S=e.split(" ").filter((M=>n.has(M)));return S?S[0]:null}parseIdentifier(e){jA.IDENTIFIER.lastIndex=e.index;const n=jA.IDENTIFIER.exec(e.sheetSrc);if(!n)throw this.parseError(e,"Expected an identifier");return e.index+=n[0].length,n[0]}parseKeyframesAndSaveNameMapping(e,n){if(e.selector.startsWith("@keyframes")){const S=this.replaceKeyframesAndGetMapping(e,n);e.selector.split(" ").forEach(((M,L)=>{L>0&&this.keyframeNamesSelectors.set(M,S)}))}}replaceKeyframesAndGetMapping(e,n){function S(u){return HC.some((P=>u.startsWith(P)))}const M=e.block.contents,L=(function(u){let P=0,V=-1,IA=-1;const DA=[];for(let LA=0;LA<u.length;LA++)u[LA]=="{"?P++:u[LA]=="}"&&P--,P==1&&u[LA]!="{"&&u[LA]!="}"&&V==-1&&(V=LA),P==2&&u[LA]=="{"&&(IA=LA,DA.push({start:V,end:IA}),V=IA=-1);return DA})(M);if(L.length==0)return new Map;const K=new Map;let x=!1;const b=[];b.push(M.substring(0,L[0].start));for(let u=0;u<L.length;u++){const P=M.substring(L[u].start,L[u].end);let V=[];P.split(",").forEach((IA=>{const DA=IA.split(" ").map((bA=>bA.trim())).filter((bA=>bA!="")).join(" "),LA=K.size;K.set(LA,DA),V.push(`${LA}%`),S(DA)&&(x=!0)})),b.push(V.join(",")),u==L.length-1?b.push(M.substring(L[u].end)):b.push(M.substring(L[u].end,L[u+1].start))}return x?(e.block.contents=b.join(""),this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,n),K):new Map}parseQualifiedRule(e){const n=e.index,S=this.parseSelector(e).trim();if(S)return{selector:S,block:this.eatBlock(e),startIndex:n,endIndex:e.index}}removeEnclosingDoubleQuotes(e){let n=e[0]=='"'?1:0,S=e[e.length-1]=='"'?e.length-1:e.length;return e.substring(n,S)}assertString(e,n){if(e.sheetSrc.substr(e.index,n.length)!=n)throw this.parseError(e,`Did not find expected sequence ${n}`);e.index+=n.length}replacePart(e,n,S,M){if(M.sheetSrc=M.sheetSrc.slice(0,e)+S+M.sheetSrc.slice(n),M.index>=n){const L=M.index-n;M.index=e+S.length+L}}eatComment(e){this.assertString(e,"/*"),this.eatUntil("*/",e,!0),this.assertString(e,"*/")}eatBlock(e){const n=e.index;this.assertString(e,"{");let S=1;for(;S!=0;)this.lookAhead("/*",e)?this.eatComment(e):(e.sheetSrc[e.index]==="{"?S++:e.sheetSrc[e.index]==="}"&&S--,this.advance(e));const M=e.index;return{startIndex:n,endIndex:M,contents:e.sheetSrc.slice(n,M)}}advance(e){if(e.index++,e.index>e.sheetSrc.length)throw this.parseError(e,"Advanced beyond the end")}parseError(e,n){return Error(`(${e.name?e.name:"<anonymous file>"}): ${n}`)}eatUntil(e,n,S=!1){const M=n.index;for(;!this.lookAhead(e,n);)this.advance(n);return S&&(n.sheetSrc=n.sheetSrc.slice(0,M)+" ".repeat(n.index-M)+n.sheetSrc.slice(n.index)),n.sheetSrc.slice(M,n.index)}parseSelector(e){let n=e.index;if(this.eatUntil("{",e),n===e.index)throw Error("Empty selector");return e.sheetSrc.slice(n,e.index)}eatWhitespace(e){jA.WHITE_SPACE.lastIndex=e.index;const n=jA.WHITE_SPACE.exec(e.sheetSrc);n&&(e.index+=n[0].length)}lookAhead(e,n){return n.sheetSrc.substr(n.index,e.length)==e}peek(e){return e.sheetSrc[e.index]}extractMatches(e,n,S=","){return n.exec(e)[1].trim().split(S).map((M=>M.trim()))}split(e){return e.split(" ").map((n=>n.trim())).filter((n=>n!=""))}};function Pa(e,n,S,M,L,K){const x=Ci(n),b=Ei(n,S);return Jo(ti(e,x,b,M,L),K,ti("cover",x,b,M,L),S)}function Ta(e,n,S){const M=qg.getAnimationTimelineOptions(n,S);if(!M)return null;const L=M["animation-timeline"];if(!L)return null;let K=qg.getScrollTimelineOptions(L,S)||qg.getViewTimelineOptions(L,S);return K?(K.subject&&(function(x,b){const u=si(b.subject),P=b.axis||b.axis;function V(DA,LA){let bA=null;for(const[JI,Ig]of DA)if(JI==100*LA.offset){if(Ig=="from")bA=0;else if(Ig=="to")bA=100;else{const PI=Ig.split(" ");bA=PI.length==1?parseFloat(PI[0]):100*Pa(PI[0],u,b.subject,P,b.inset,CSS.percent(parseFloat(PI[1])))}break}return bA}const IA=qg.keyframeNamesSelectors.get(x.animationName);if(IA&&IA.size){const DA=[];x.effect.getKeyframes().forEach((bA=>{const JI=V(IA,bA);JI!==null&&JI>=0&&JI<=100&&(bA.offset=JI/100,DA.push(bA))}));const LA=DA.sort(((bA,JI)=>bA.offset<JI.offset?-1:bA.affset>JI.offset?1:0));x.effect.setKeyframes(LA)}})(e,K),{timeline:K.source?new yI(K):new kQ(K),animOptions:M}):null}function Oa(){if(CSS.supports("animation-timeline: --works"))return!0;(function(){function n(M){if(M.innerHTML.trim().length===0||"aphrodite"in M.dataset)return;let L=qg.transpileStyleSheet(M.innerHTML,!0);L=qg.transpileStyleSheet(L,!1),M.innerHTML=L}function S(M){M.type!="text/css"&&M.rel!="stylesheet"||!M.href||new URL(M.href,document.baseURI).origin==location.origin&&fetch(M.getAttribute("href")).then((async L=>{const K=await L.text();let x=qg.transpileStyleSheet(K,!0);if(x=qg.transpileStyleSheet(K,!1),x!=K){const b=new Blob([x],{type:"text/css"}),u=URL.createObjectURL(b);M.setAttribute("href",u)}}))}new MutationObserver((M=>{for(const L of M)for(const K of L.addedNodes)K instanceof HTMLStyleElement&&n(K),K instanceof HTMLLinkElement&&S(K)})).observe(document.documentElement,{childList:!0,subtree:!0}),document.querySelectorAll("style").forEach((M=>n(M))),document.querySelectorAll("link").forEach((M=>S(M)))})();const e=CSS.supports;CSS.supports=n=>(n=n.replaceAll(/(animation-timeline|scroll-timeline(-(name|axis))?|view-timeline(-(name|axis|inset))?|timeline-scope)\s*:/g,"--supported-property:"),e(n)),window.addEventListener("animationstart",(n=>{n.target.getAnimations().filter((S=>S.animationName===n.animationName)).forEach((S=>{const M=Ta(S,S.animationName,n.target);if(M)if(!M.timeline||S instanceof fC)S.timeline=M.timeline;else{const L=new fC(S,M.timeline,M.animOptions);S.pause(),L.play()}}))}))}(function(){if(!Oa()){if(!Reflect.defineProperty(window,"ScrollTimeline",{value:yI}))throw Error("Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window");if(!Reflect.defineProperty(window,"ViewTimeline",{value:kQ}))throw Error("Error installing ViewTimeline polyfill: could not attach ViewTimeline to window");if(!Reflect.defineProperty(Element.prototype,"animate",{value:ua}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's animate to DOM Element");if(!Reflect.defineProperty(window,"Animation",{value:fC}))throw Error("Error installing Animation constructor.");if(!Reflect.defineProperty(Element.prototype,"getAnimations",{value:qa}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to DOM Element");if(!Reflect.defineProperty(document,"getAnimations",{value:ba}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to document")}})()})();const $G=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ar=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));exports.BatchedParticleRenderer=u0;exports.Builder=mD;exports.ByteBuffer=PB;exports.ConstantColor=hQ;exports.ConstantValue=cA;exports.Matrix4=tg;exports.MeshBVH=gB;exports.MotionController=Le;exports.PROJECT_DOCUMENT_KEY=vD;exports.ParticleSystem=LE;exports.SIZE_PREFIX_LENGTH=rt;exports.TrailParticle=JE;exports.Vector4=YI;exports.WorkerBase=OG;exports.__viteBrowserExternal=Ar;exports.applyDef=VD;exports.applyOver=WD;exports.attachNeedleIdsToLoadedGltf=Gt;exports.bundler=Tn;exports.createNoise4D=b0;exports.createOverApplyState=ZD;exports.deriveInstanceId=ee;exports.enableProjectDocumentInspection=O0;exports.evaluateProjectDocument=j0;exports.fetchProfile=ke;exports.getProjectDocumentInspection=v0;exports.index=sn;exports.index$1=TG;exports.index$2=jG;exports.isProjectDocument=Ht;exports.joinPath=ht;exports.reportProjectIssues=P0;exports.resolveDocumentRemoteSrc=SB;exports.resolveMaterialEntity=qt;exports.scrollTimeline=$G;exports.spark_module=uy;exports.splitPath=PE;exports.v5=Be;