@volter/model-editor 0.5.66 → 0.5.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +1022 -1006
- package/dist/assets/AudioViewer-DVXaSSYC.js +1 -0
- package/dist/assets/{BVHLoader-xUHWsz84.js → BVHLoader-msuIvJVn.js} +1 -1
- package/dist/assets/ColladaLoader-BpvxwqkB.js +3 -0
- package/dist/assets/EntityModelDocument-BtlQZcoU.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-BH3zT9rt.js +1 -0
- package/dist/assets/FBXLoader-CsdO937F.js +1 -0
- package/dist/assets/{GameplaySessionTimeline-HJLZUV4Q.js → GameplaySessionTimeline-Dko95kB7.js} +10 -10
- package/dist/assets/ImageViewer-CZ_RMER2.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CLDhscy0.js → InspectorCanvasPreview-BLecDHpc.js} +1 -1
- package/dist/assets/InspectorObjectPreview-CSIWwJQE.js +1 -0
- package/dist/assets/JsonAssetDocument-CGYSeJyl.js +2 -0
- package/dist/assets/{LineSegments2-C8H20K8w.js → LineSegments2-BKEsgiC8.js} +2 -2
- package/dist/assets/LiveModuleDocument-CIvS-SUT.js +2 -0
- package/dist/assets/LutAssetDocument-BA70uU3w.js +1 -0
- package/dist/assets/{MTLLoader-C-rA0fNF.js → MTLLoader-DNh2pFDc.js} +2 -2
- package/dist/assets/ModelAssetDocument-D0lNEhOg.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-C0pCfkJ4.js +2 -0
- package/dist/assets/OBJLoader-DPi99VIm.js +5 -0
- package/dist/assets/Object3DDocumentToolbar-PGYkZEwr.js +1 -0
- package/dist/assets/Object3DPreview-BROKXSTC.js +2 -0
- package/dist/assets/OnlineAssetDetail-lEHnhdUS.js +1 -0
- package/dist/assets/OrbitControls-smIenN60.js +1 -0
- package/dist/assets/PLYLoader-Cx9Yc9xe.js +2 -0
- package/dist/assets/QuarksAssetDocument-C_8eG4KG.js +2 -0
- package/dist/assets/RectAreaLightUniformsLib-Iam8rS8R.js +1 -0
- package/dist/assets/STLLoader-BaJkM-k1.js +1 -0
- package/dist/assets/{ShaderAssetDocument-qlLeb2S3.js → ShaderAssetDocument-Gdp7OCfv.js} +5 -5
- package/dist/assets/SourceAssetViewer-l72u0hOa.js +1 -0
- package/dist/assets/StageHost-CdzuP0NS.js +1179 -0
- package/dist/assets/TDSLoader-BskhMiUy.js +1 -0
- package/dist/assets/ToolObject3DPreview-CU5klD6l.js +1 -0
- package/dist/assets/Toolbar-DI0LGx25.js +1 -0
- package/dist/assets/TransientHint-myZtSdd6.js +1 -0
- package/dist/assets/VideoViewer-z0JPXPKa.js +1 -0
- package/dist/assets/ViewportShadingMenu-CVU2bU_3.js +1 -0
- package/dist/assets/animation-mixers.service-DSIsxWG5.js +1 -0
- package/dist/assets/animation-timeline.utility-BEgDQC04.js +1 -0
- package/dist/assets/asset-editor-persistence-BtRQI8t6.js +1 -0
- package/dist/assets/bitmap-label-Ct4k6ehY.js +1 -0
- package/dist/assets/{blender-emscripten-engine-CEsWgnR7.js → blender-emscripten-engine-BeWFjMn-.js} +1 -1
- package/dist/assets/blender-node-editor.document-C_kpsARB.js +1 -0
- package/dist/assets/{blender-properties-tab-C5tUuCSv.js → blender-properties-tab-B_XBg6S8.js} +3 -3
- package/dist/assets/blender-runtime-host-CYhl4T9S.js +4 -0
- package/dist/assets/{blender-runtime-skin-DMq0XAvO.js → blender-runtime-skin-Bk6uXECD.js} +98 -51
- package/dist/assets/blender-runtime.document-CAPDRCvN.js +12 -0
- package/dist/assets/blender-timeline.document-CcEymQyL.js +1 -0
- package/dist/assets/blender-uv-editor.document-DSPvSEuE.js +1 -0
- package/dist/assets/blender-version.status-CEu7vCi3.js +1 -0
- package/dist/assets/{blender-wali-engine-D3iKpzn9.js → blender-wali-engine-da698rDf.js} +1 -1
- package/dist/assets/blender.command-BCb_c9lw.js +1 -0
- package/dist/assets/blender.keymap-_rF_vRX8.js +1 -0
- package/dist/assets/{blender.status-ujwGU6dU.js → blender.status-DrasQhJV.js} +1 -1
- package/dist/assets/{blender.style-CxfbTFcE.js → blender.style-DaIh9SiA.js} +1 -1
- package/dist/assets/{client-DNXj_opT.js → client-mkWk8S65.js} +1 -1
- package/dist/assets/content-bounds-_QWiKD5_.js +85 -0
- package/dist/assets/{hosted-asset-materialization-BXM49Qkc.js → hosted-asset-materialization-hUS3IhTD.js} +2 -2
- package/dist/assets/index-0Lm0Nf1M.css +1 -0
- package/dist/assets/{index-CJbYy-CF.js → index-7vd2obXq.js} +2 -2
- package/dist/assets/{index-DgapqSPi.js → index-BRLA7zdc.js} +1 -1
- package/dist/assets/{index-BtfYaG4D.js → index-CQG6JOSy.js} +18 -18
- package/dist/assets/{index-CanA16PU.js → index-CnvSS9lU.js} +1 -1
- package/dist/assets/{index-Bge9JUr6.js → index-DYNMP0kE.js} +1 -1
- package/dist/assets/index-Dm_h-T4x.js +1406 -0
- package/dist/assets/{index-gHZae-lw.js → index-Dz8qGBZc.js} +1 -1
- package/dist/assets/{index-BncK9THk.js → index-Fv4R0cYr.js} +1 -1
- package/dist/assets/{index-IEjydI9d.js → index-f-MQ14bP.js} +1 -1
- package/dist/assets/{index-D2LwEE0L.js → index-jib6KJY8.js} +6 -6
- package/dist/assets/{index-DUqP1RMl.js → index-ux8XhRyW.js} +1 -1
- package/dist/assets/{jsx-runtime-DPjLkJKQ.js → jsx-runtime-CAUTK36e.js} +1 -1
- package/dist/assets/layered-pick-CT4HlEpW.js +1 -0
- package/dist/assets/live-mixers-B-bwLZ7c.js +1 -0
- package/dist/assets/model-inspection-DDZE59vp.js +1 -0
- package/dist/assets/models.finder-Caf-3Yix.js +1 -0
- package/dist/assets/product-DbFrUS6F.js +1 -0
- package/dist/assets/properties-bone-constraints.inspector-DB3Rc_Hf.js +1 -0
- package/dist/assets/properties-bone.inspector-B7f7H_Co.js +1 -0
- package/dist/assets/properties-collection.inspector-JCtV3h3Y.js +1 -0
- package/dist/assets/properties-constraints.inspector-Cs8MwS-1.js +1 -0
- package/dist/assets/properties-data.inspector-DKGiHu8O.js +1 -0
- package/dist/assets/properties-material.inspector-Dc18RI13.js +1 -0
- package/dist/assets/properties-modifiers.inspector-DvGvXq2v.js +1 -0
- package/dist/assets/properties-object.inspector-Bl9nrytP.js +1 -0
- package/dist/assets/properties-output.inspector-B6QsU94n.js +1 -0
- package/dist/assets/properties-particles.inspector-B1dMnZSA.js +1 -0
- package/dist/assets/properties-physics.inspector-BwfNykfW.js +1 -0
- package/dist/assets/properties-render.inspector-KrL2EiTH.js +1 -0
- package/dist/assets/properties-scene.inspector-CewQnyRt.js +1 -0
- package/dist/assets/properties-texture.inspector-BITMzY-f.js +1 -0
- package/dist/assets/properties-view-layer.inspector-BpkDbmcb.js +1 -0
- package/dist/assets/properties-world.inspector-DLRH45Oj.js +1 -0
- package/dist/assets/{react-18-DyywM-Z2.js → react-18-D335xReo.js} +1 -1
- package/dist/assets/{react-story-board-B9V-j_Y5.js → react-story-board-CkaP4mEG.js} +1 -1
- package/dist/assets/{session-CsR0lApe.js → session-CTXsU1lK.js} +176 -1
- package/dist/assets/{spark.module-gG1EsWx8.js → spark.module-DMQ9J7rT.js} +11 -11
- package/dist/assets/stage-keyboard-BY7u9_MB.js +1 -0
- package/dist/assets/stage-overlay-set-DRFcVd27.js +1 -0
- package/dist/assets/stage-presence-markers-D2IpuOAY.js +1 -0
- package/dist/assets/stage-transform-tools-BGcIULoe.js +1 -0
- package/dist/assets/story-capture-RSWY8I8h.js +1 -0
- package/dist/assets/three-integration.service-0EyPpd5f.js +4 -0
- package/dist/assets/{three.module-ZILb6uB7.js → three.module-CrYDk-Xr.js} +1 -1
- package/dist/assets/transform-mode-request-Cz6fzydi.js +1 -0
- package/dist/assets/transport-strip-Co-ZDkf-.js +1 -0
- package/dist/assets/{vgai-shared-fontawesome-CFSkqz69.js → vgai-shared-fontawesome-2ZSGa7vM.js} +1 -1
- package/dist/assets/vgai-shared-jsx-dev-runtime-hkPLeIJV.js +1 -0
- package/dist/assets/vgai-shared-jsx-runtime-CUvvjEqj.js +1 -0
- package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → vgai-shared-react-dom-client-CS681GK2.js} +1 -1
- package/dist/assets/{vgai-shared-three-DzfWDqlp.js → vgai-shared-three-CLJ0K3jQ.js} +1 -1
- package/dist/assets/viewport-door-BdL0u5rd.js +1 -0
- package/dist/assets/viewport-editor-controls-BYaAZ_Ku.js +1 -0
- package/dist/assets/viewport-surface-status-yS6CrXH7.js +24 -0
- package/dist/assets/{worker-B7zhIsFh.js → worker-CC9Ug5Ei.js} +1 -1
- package/dist/assets/world-documents-B5IWN-ng.js +3 -0
- package/dist/vgai-shared-react.json +4 -4
- package/dist/vgai-shared-three.json +1 -1
- package/dist-node/cli.js +248 -209
- package/dist-node/create.js +77 -77
- package/package.json +10 -10
- package/src/index.ts +1 -0
- package/dist/assets/AudioViewer-CRWsJVYN.js +0 -1
- package/dist/assets/ColladaLoader-Ccy_gHsu.js +0 -3
- package/dist/assets/EntityModelDocument-Dal8YnLK.js +0 -1
- package/dist/assets/EnvironmentAssetDocument-DFOFYX5v.js +0 -1
- package/dist/assets/FBXLoader-Dh0pOBW2.js +0 -1
- package/dist/assets/ImageViewer-BzqBpqL-.js +0 -1
- package/dist/assets/InspectorObjectPreview-BUZEp4xS.js +0 -1
- package/dist/assets/JsonAssetDocument-DCkqRS0N.js +0 -2
- package/dist/assets/LiveModuleDocument-CuOBVz3A.js +0 -2
- package/dist/assets/LutAssetDocument-IyEir1rq.js +0 -1
- package/dist/assets/ModelAssetDocument-DNStNyCc.js +0 -1
- package/dist/assets/NonThreeAuthoringBootstrap-BE15Wpmw.js +0 -2
- package/dist/assets/OBJLoader-CopWRneC.js +0 -5
- package/dist/assets/Object3DDocumentToolbar-5Dv_8caG.js +0 -1
- package/dist/assets/Object3DPreview-C09u9uQZ.js +0 -2
- package/dist/assets/OnlineAssetDetail-DOPUI1iu.js +0 -1
- package/dist/assets/OrbitControls-DrFzvAAB.js +0 -1
- package/dist/assets/PLYLoader-D_esTZ2f.js +0 -2
- package/dist/assets/QuarksAssetDocument-BbSJ970L.js +0 -2
- package/dist/assets/RectAreaLightUniformsLib-u1ciScuw.js +0 -1
- package/dist/assets/STLLoader-Cl5I0sAi.js +0 -1
- package/dist/assets/SourceAssetViewer-DwhuqbA4.js +0 -1
- package/dist/assets/StageHost-D-o8MsFS.js +0 -1122
- package/dist/assets/TDSLoader-KKBg8ef1.js +0 -1
- package/dist/assets/ToolObject3DPreview-ILbch3kN.js +0 -1
- package/dist/assets/Toolbar-DYJjJKTt.js +0 -1
- package/dist/assets/TransientHint-D94hsJSR.js +0 -1
- package/dist/assets/VideoViewer-Bx3FPbgE.js +0 -1
- package/dist/assets/ViewportShadingMenu-B3N6hSdN.js +0 -1
- package/dist/assets/animation-mixers.service-N9HxGOMf.js +0 -1
- package/dist/assets/asset-editor-persistence-DGD05u26.js +0 -1
- package/dist/assets/blender-node-editor.document-BT2M622g.js +0 -1
- package/dist/assets/blender-runtime-host-4ufXy47O.js +0 -4
- package/dist/assets/blender-runtime.document-DeFQQsF6.js +0 -8
- package/dist/assets/blender-timeline.document-BnlSdxy0.js +0 -1
- package/dist/assets/blender-uv-editor.document-UC-XeNn0.js +0 -1
- package/dist/assets/blender-version.status-BZP39oH7.js +0 -1
- package/dist/assets/blender.command-IGP5wuda.js +0 -1
- package/dist/assets/blender.keymap-GAQgeklK.js +0 -1
- package/dist/assets/browserAll-2r3AVaAO.js +0 -14
- package/dist/assets/canvas-preview-frames-CO60PDM7.js +0 -5
- package/dist/assets/index-B4bmKkgY.css +0 -1
- package/dist/assets/index-cpXNKgvz.js +0 -1498
- package/dist/assets/live-mixers-BRkRHd6g.js +0 -1
- package/dist/assets/material-preview.view-DqNcpd_b.js +0 -1
- package/dist/assets/model-inspection-JC6gbV8Q.js +0 -1
- package/dist/assets/models.finder-BplPGS4I.js +0 -1
- package/dist/assets/product-CfZaqLpw.js +0 -1
- package/dist/assets/properties-bone-constraints.inspector-Di8kNtAi.js +0 -1
- package/dist/assets/properties-bone.inspector-CqAIKNsE.js +0 -1
- package/dist/assets/properties-collection.inspector-DpHC_fXW.js +0 -1
- package/dist/assets/properties-constraints.inspector-C7G7NOZU.js +0 -1
- package/dist/assets/properties-data.inspector-D1sUUst6.js +0 -1
- package/dist/assets/properties-material.inspector-BUSjc8tl.js +0 -1
- package/dist/assets/properties-modifiers.inspector-Sq9bcfFz.js +0 -1
- package/dist/assets/properties-object.inspector-BzqiU_29.js +0 -1
- package/dist/assets/properties-output.inspector-BWpFqvfT.js +0 -1
- package/dist/assets/properties-particles.inspector-DO1KoaTz.js +0 -1
- package/dist/assets/properties-physics.inspector-BgkrTNSA.js +0 -1
- package/dist/assets/properties-render.inspector-BU5NOVoQ.js +0 -1
- package/dist/assets/properties-scene.inspector-DbMErJ48.js +0 -1
- package/dist/assets/properties-texture.inspector-toPpEwqp.js +0 -1
- package/dist/assets/properties-view-layer.inspector-COpx9iEK.js +0 -1
- package/dist/assets/properties-world.inspector-CxU0DrYX.js +0 -1
- package/dist/assets/react-three-rapier.esm-CN6t4A7c.js +0 -1
- package/dist/assets/stage-keyboard-CzlqI0nh.js +0 -1
- package/dist/assets/stage-overlay-set-DQeskS16.js +0 -1
- package/dist/assets/stage-presence-markers-S1lMOwIa.js +0 -1
- package/dist/assets/stage-transform-tools-Cqtv-ZQ1.js +0 -1
- package/dist/assets/story-capture-DmIUyEQn.js +0 -1
- package/dist/assets/story-mount-turn-2IYGgHob.js +0 -1
- package/dist/assets/story-pixi-preview-aw8xQhvF.js +0 -1
- package/dist/assets/story-three-preview-DDmMjlI8.js +0 -37
- package/dist/assets/transform-mode-request-DSPwviXs.js +0 -1
- package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +0 -1
- package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +0 -1
- package/dist/assets/viewport-pick-context-DkawXbEi.js +0 -1
- package/dist/assets/viewport-surface-status-DuININWe.js +0 -20
- package/dist/assets/webworkerAll-CqQUotBj.js +0 -101
- package/dist/assets/world-documents-DkBqH8VU.js +0 -3
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ToolObject3DPreview-CU5klD6l.js","assets/jsx-runtime-CAUTK36e.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/Object3DPreview-BROKXSTC.js","assets/index-Dm_h-T4x.js","assets/index-DaQZGF7d.js","assets/index-D_NuPfjr.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-jib6KJY8.js","assets/client-mkWk8S65.js","assets/index-0Lm0Nf1M.css","assets/three.module-CrYDk-Xr.js","assets/OrbitControls-smIenN60.js","assets/editor-presentation-activity-C7SNSmTd.js","assets/content-bounds-_QWiKD5_.js","assets/layered-pick-CT4HlEpW.js","assets/viewport-door-BdL0u5rd.js","assets/bitmap-label-Ct4k6ehY.js","assets/StageHost-CdzuP0NS.js","assets/viewport-surface-status-yS6CrXH7.js","assets/live-mixers-B-bwLZ7c.js","assets/model-inspection-DDZE59vp.js","assets/clip-planes-CnAI6DZn.js","assets/LineSegments2-BKEsgiC8.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/transport-strip-Co-ZDkf-.js","assets/ModelAssetDocument-D0lNEhOg.js","assets/EntityModelDocument-BtlQZcoU.js","assets/EnvironmentAssetDocument-BH3zT9rt.js","assets/asset-editor-persistence-BtRQI8t6.js","assets/LutAssetDocument-BA70uU3w.js","assets/index-CQG6JOSy.js","assets/ShaderAssetDocument-Gdp7OCfv.js","assets/LiveModuleDocument-CIvS-SUT.js","assets/QuarksAssetDocument-C_8eG4KG.js","assets/spark.module-DMQ9J7rT.js","assets/FBXLoader-CsdO937F.js","assets/OBJLoader-DPi99VIm.js","assets/MTLLoader-DNh2pFDc.js","assets/ColladaLoader-BpvxwqkB.js","assets/STLLoader-BaJkM-k1.js","assets/PLYLoader-Cx9Yc9xe.js","assets/BVHLoader-msuIvJVn.js","assets/TDSLoader-BskhMiUy.js","assets/Object3DDocumentToolbar-PGYkZEwr.js","assets/ViewportShadingMenu-CVU2bU_3.js","assets/InspectorObjectPreview-CSIWwJQE.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{z as ts,B as As,C as wA,F as ns,G as as,H as ss,I as os,J as is,i as x,K as rs,L as cs,N as gs,O as ls,P as ds,Q as hs,R as Pt,S as hn,T as un,U as us,V as fs,W as ps,X as Is,Y as bs,Z as Es,$ as Cs,a0 as Bs,a1 as ms,a2 as Qs,a3 as ws,a4 as ys,a5 as Ss,a6 as fn,a7 as st,y as lt,a8 as Ds,a9 as Rs,e as pn,aa as ks,ab as xs,ac as Fs,ad as St,ae as Ts,af as Ms,ag as _s}from"./index-Dm_h-T4x.js";import{m as ce,O as Ls,b as vs,g as yA,v as Gs,i as nA,d as Ns,c as Us,l as Os,e as Hs}from"./content-bounds-_QWiKD5_.js";import{aB as ge,as as In,f as G,C as J,aT as aA,aU as pe,L as K,B as bn,i as je,aE as dt,aV as Ps,aW as jt,aX as En,aY as qe,J as V,g as Cn,p as js,o as qs,D as ye,a as Ie,V as y,ax as Bn,Q as We,aZ as Js,O as sA,a_ as mn,a$ as Ks,b0 as Ys,ac as Et,b1 as Vs,b2 as zs,b3 as Qn,n as be,ab as ht,N as qt,T as Ws,I as Xs,b4 as wn,b5 as Dt,a1 as Zs,aw as ut,a2 as yn,e as me,b6 as $s,aj as Sn,c as De,a0 as Dn,b7 as Rn,b8 as kn,b9 as oA,G as $,P as Ct,j as Re,at as iA,ak as eo,ao as to,ai as xn,ba as Ao,bb as Fn,aQ as no,ag as Z,am as SA,bc as DA,al as RA,b as ao,bd as so,t as ke,a7 as Tn,be as oo,bf as io,bg as Mn,ad as kA,bh as xA,bi as Jt,bj as Kt,bk as ro,bl as co,bm as go,bn as lo,bo as FA,bp as TA,bq as Yt,br as Rt,bs as ot,bt as _n,bu as Ln,bv as Vt,v as He,az as Pe,R as Qe,af as k,H as ie,bw as vn,bx as Gn,w as Je,l as ho,u as uo,by as fo,bz as po,bA as Io,bB as bo,bC as Eo,x as Co,bD as Bo,aJ as Fe,Y as rA,A as mo,W as MA,bE as Nn,bF as Qo,bG as wo,an as yo,bH as So}from"./three.module-CrYDk-Xr.js";import{p as Do}from"./layered-pick-CT4HlEpW.js";import{j as U}from"./jsx-runtime-CAUTK36e.js";import{r as v}from"./index-DaQZGF7d.js";import{t as Un,a as Ro,b as Bt}from"./viewport-door-BdL0u5rd.js";import{d as Ee,m as On}from"./bitmap-label-Ct4k6ehY.js";function ko(A){return()=>{}}const xo=1,ee=[];function zt(A){const e=ee.indexOf(A);e>=0&&ee.splice(e,1),A.renderer.dispose(),A.renderer.forceContextLoss(),A.canvas.remove()}function Fo(A,e){const t=document.createElement("canvas");t.style.width="100%",t.style.height="100%",t.style.display="block",t.width=Math.max(1,A),t.height=Math.max(1,e);const n={canvas:t,renderer:ce(new ge({canvas:t,antialias:!0,alpha:!0})),leased:!0,lost:!1,onContextLost:null};return t.addEventListener("webglcontextlost",()=>{n.lost=!0,n.onContextLost?.();const a=ee.indexOf(n);a>=0&&ee.splice(a,1),n.leased||zt(n)}),ee.push(n),n}function To(A){const{renderer:e}=A;e.setRenderTarget(null),e.setScissorTest(!1),e.setViewport(0,0,Math.max(1,A.canvas.width),Math.max(1,A.canvas.height)),e.setScissor(0,0,Math.max(1,A.canvas.width),Math.max(1,A.canvas.height)),e.autoClear=!0,e.autoClearColor=!0,e.autoClearDepth=!0,e.autoClearStencil=!0,e.sortObjects=!0,e.localClippingEnabled=!1,e.clippingPlanes=[],e.shadowMap.enabled=!1,e.shadowMap.autoUpdate=!0,e.toneMapping=In,e.toneMappingExposure=1,e.outputColorSpace=G,e.xr.enabled=!1,e.setAnimationLoop(null),e.setClearColor(0,0),e.clear(!0,!0,!0),e.info.reset()}function dg(A,e,t){let n=ee.find(o=>!o.leased&&!o.lost);n||(n=Fo(A,e)),n.leased=!0,n.onContextLost=t??null;const a=n;let s=!1;return{canvas:a.canvas,renderer:a.renderer,release(){if(s)return;if(s=!0,a.leased=!1,a.onContextLost=null,a.canvas.remove(),a.lost){zt(a);return}To(a);const o=ee.filter(i=>!i.leased&&!i.lost);for(const i of o.slice(xo))zt(i)}}}function Mo(){return{active:ee.filter(A=>A.leased&&!A.lost).length,idle:ee.filter(A=>!A.leased&&!A.lost).length}}const cA={...Ls,entityId:"entityId",forward:"forward",tags:"tags",attributes:"attributes",navRole:"navRole",pivot:"pivot",splineCurve:"splineCurve",splineControlPoint:"splineControlPoint",_camera:"_camera",_particleSystem:"_particleSystem",gaussianSplat:"gaussianSplat",__sharedGeometry:"__sharedGeometry",__shadeOrig:"__shadeOrig",__shadeUnlit:"__shadeUnlit",__ingest:"__ingest",__ingestNextId:"__ingestNextId",authoringRoot:"authoringRoot",authoringInstance:"authoringInstance",authoringLabel:"authoringLabel",authoringComponent:"authoringComponent",authoringDocument:"authoringDocument",authoringHierarchyId:"authoringHierarchyId",authoringHierarchyParentId:"authoringHierarchyParentId",authoringHierarchyOrder:"authoringHierarchyOrder",editorIcon:"editorIcon",envObject:"envObject",constraints:"constraints",authoringSubject:"authoringSubject",reflectionProbe:"reflectionProbe",triggerVolume:"triggerVolume",vcDirIdx:"vcDirIdx"};function te(A,e){return A?A.userData[cA[e]]:void 0}function Ye(A,e,t){A.userData[cA[e]]=t}function le(A,e){return A?A.userData[cA[e]]!==void 0:!1}function _o(A,e){if(e!==null&&ts(e))for(const n of A.values())n.visible=!1}const Lo=new J("#aaaaaa");function vo(A){A.background=Lo,A.fog=null,A.environment=null,A.traverse(e=>{te(e,"envObject")&&(e.visible=!1)})}const Go={activeAuthoring:A=>is(A),panelAuthoring:A=>os(A).adapter,pick:(A,e,t,n)=>Do(A,e,t,{intent:n}),toolOwner:(A,e)=>ss(A,e),toolOwnerPainted:(A,e)=>wA(A)&&as(A,e),threeSurfaceShowing:(A,e)=>wA(A)&&(e instanceof ns?e.childAdapters().some(t=>t.kind==="three"):!e.rects&&typeof e.hierarchy.object3D=="function"),threeViewportRootId:A=>As(A),applyRootHiddenVisibility:_o,suppressRootEnvironment:vo},No=v.lazy(async()=>({default:(await x(async()=>{const{ToolObject3DPreview:A}=await import("./ToolObject3DPreview-CU5klD6l.js");return{ToolObject3DPreview:A}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]))).ToolObject3DPreview})),Uo=v.lazy(async()=>({default:(await x(async()=>{const{ToolObject3DAuthoring:A}=await import("./StageHost-CdzuP0NS.js").then(e=>e.S);return{ToolObject3DAuthoring:A}},__vite__mapDeps([19,4,5,2,6,1,7,8,9,10,11,20,15,12,21,17,22,23,13,24,25,14,26]))).ToolObject3DAuthoring}));function Oo(A){return U.jsx(v.Suspense,{fallback:U.jsx("div",{style:{minHeight:240},children:"Loading 3D preview…"}),children:U.jsx(No,{...A})})}function Ho(A){return v.useEffect(()=>rs(A.documentId),[A.documentId]),U.jsx(v.Suspense,{fallback:U.jsx("div",{style:{minHeight:240},children:"Loading 3D authoring surface…"}),children:U.jsx(Uo,{...A})})}const _A={model:v.lazy(async()=>{const{ModelAssetDocument:A}=await x(async()=>{const{ModelAssetDocument:e}=await import("./ModelAssetDocument-D0lNEhOg.js");return{ModelAssetDocument:e}},__vite__mapDeps([27,1,2,5,6,7,8,4,9,10,11,19,20,15,12,21,17,22,23,13,24,25,14,26,16,18]));return{default:e=>U.jsx(A,{documentId:e.documentId,assetPath:e.assetPath,displayName:e.displayName,active:e.active})}}),"entity-model":v.lazy(async()=>{const{EntityModelDocument:A}=await x(async()=>{const{EntityModelDocument:e}=await import("./EntityModelDocument-BtlQZcoU.js");return{EntityModelDocument:e}},__vite__mapDeps([28,1,2,4,5,6,7,8,9,10,11,21,19,20,15,12,17,22,23,13,24,25,14,26,16,18]));return{default:e=>U.jsx(A,{documentId:e.documentId,entityId:e.entityId??"",displayName:e.displayName,active:e.active})}}),environment:v.lazy(async()=>{const{EnvironmentAssetDocument:A}=await x(async()=>{const{EnvironmentAssetDocument:e}=await import("./EnvironmentAssetDocument-BH3zT9rt.js");return{EnvironmentAssetDocument:e}},__vite__mapDeps([29,1,2,4,5,6,7,8,9,10,11,12,13,15,30]));return{default:e=>U.jsx(A,{documentId:e.documentId,assetPath:e.assetPath,active:e.active})}}),lut:v.lazy(async()=>{const{LutAssetDocument:A}=await x(async()=>{const{LutAssetDocument:e}=await import("./LutAssetDocument-BA70uU3w.js");return{LutAssetDocument:e}},__vite__mapDeps([31,1,2,4,5,6,7,8,9,10,11,32,12,30]));return{default:e=>U.jsx(A,{documentId:e.documentId,assetPath:e.assetPath,active:e.active})}}),shader:v.lazy(async()=>{const{ShaderAssetDocument:A}=await x(async()=>{const{ShaderAssetDocument:e}=await import("./ShaderAssetDocument-Gdp7OCfv.js");return{ShaderAssetDocument:e}},__vite__mapDeps([33,1,2,4,5,6,7,8,9,10,11,12,30]));return{default:e=>U.jsx(A,{documentId:e.documentId,assetPath:e.assetPath,active:e.active})}}),"model-preview":v.lazy(async()=>{const{Object3DPreview:A}=await x(async()=>{const{Object3DPreview:e}=await import("./Object3DPreview-BROKXSTC.js");return{Object3DPreview:e}},__vite__mapDeps([3,4,5,2,6,1,7,8,9,10,11,12,13,14,15,16,17,18]));return{default:e=>U.jsx(A,{assetPath:e.assetPath,...e.materialPath?{materialPath:e.materialPath}:{},displayName:e.displayName})}}),module:v.lazy(async()=>{const{LiveModuleDocument:A}=await x(async()=>{const{LiveModuleDocument:e}=await import("./LiveModuleDocument-CIvS-SUT.js");return{LiveModuleDocument:e}},__vite__mapDeps([34,1,2,4,5,6,7,8,9,10,11,20,15,12,16,17,18]));return{default:e=>e.projectRoot?U.jsx(A,{documentId:e.documentId,projectRoot:e.projectRoot,modulePath:(e.assetPath.split(/[?#]/,1)[0]??e.assetPath).replace(/^\//,""),displayName:e.displayName,active:e.active,fallback:e.fallback}):e.fallback}})},Po={recognize:async(A,e)=>(await x(async()=>{const{loadNativeQuarksJsonSource:t}=await import("./QuarksAssetDocument-C_8eG4KG.js");return{loadNativeQuarksJsonSource:t}},__vite__mapDeps([35,1,2,5,6,7,8,4,9,10,11,19,20,15,12,21,17,22,23,13,24,25,14,26,16,18]))).loadNativeQuarksJsonSource(A,e),Viewer:v.lazy(async()=>{const{QuarksAssetDocument:A}=await x(async()=>{const{QuarksAssetDocument:e}=await import("./QuarksAssetDocument-C_8eG4KG.js");return{QuarksAssetDocument:e}},__vite__mapDeps([35,1,2,5,6,7,8,4,9,10,11,19,20,15,12,21,17,22,23,13,24,25,14,26,16,18]));return{default:e=>U.jsx(A,{documentId:e.documentId,assetPath:e.assetPath,displayName:e.displayName,active:e.active,source:e.content})}})};function jo(){const A=[...Object.keys(_A).map(e=>cs(e,_A[e])),gs(Po)];return()=>{for(const e of A)e()}}var qo=(function(){var A="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var a=WebAssembly.validate(t)?i(e):i(A),s,o=WebAssembly.instantiate(a,{}).then(function(b){s=b.instance,s.exports.__wasm_call_ctors()});function i(b){for(var I=new Uint8Array(b.length),B=0;B<b.length;++B){var f=b.charCodeAt(B);I[B]=f>96?f-97:f>64?f-39:f+4}for(var E=0,B=0;B<b.length;++B)I[E++]=I[B]<60?n[I[B]]:(I[B]-60)*64+I[++B];return I.buffer.slice(0,E)}function r(b,I,B,f,E,m,Q){var w=b.exports.sbrk,S=f+3&-4,R=w(S*E),T=w(m.length),ne=new Uint8Array(b.exports.memory.buffer);ne.set(m,T);var z=I(R,f,E,T,m.length);if(z==0&&Q&&Q(R,S,E),B.set(ne.subarray(R,R+f*E)),w(R-w(0)),z!=0)throw new Error("Malformed buffer data: "+z)}var c={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},g={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},l=[],d=0;function h(b){var I={object:new Worker(b),pending:0,requests:{}};return I.object.onmessage=function(B){var f=B.data;I.pending-=f.count,I.requests[f.id][f.action](f.value),delete I.requests[f.id]},I}function u(b){for(var I="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(a)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+C.name+";"+r.toString()+C.toString(),B=new Blob([I],{type:"text/javascript"}),f=URL.createObjectURL(B),E=l.length;E<b;++E)l[E]=h(f);for(var E=b;E<l.length;++E)l[E].object.postMessage({});l.length=b,URL.revokeObjectURL(f)}function p(b,I,B,f,E){for(var m=l[0],Q=1;Q<l.length;++Q)l[Q].pending<m.pending&&(m=l[Q]);return new Promise(function(w,S){var R=new Uint8Array(B),T=++d;m.pending+=b,m.requests[T]={resolve:w,reject:S},m.object.postMessage({id:T,count:b,size:I,source:R,mode:f,filter:E},[R.buffer])})}function C(b){var I=b.data;if(!I.id)return self.close();self.ready.then(function(B){try{var f=new Uint8Array(I.count*I.size);r(B,B.exports[I.mode],f,I.count,I.size,I.source,B.exports[I.filter]),self.postMessage({id:I.id,count:I.count,action:"resolve",value:f},[f.buffer])}catch(E){self.postMessage({id:I.id,count:I.count,action:"reject",value:E})}})}return{ready:o,supported:!0,useWorkers:function(b){u(b)},decodeVertexBuffer:function(b,I,B,f,E){r(s,s.exports.meshopt_decodeVertexBuffer,b,I,B,f,s.exports[c[E]])},decodeIndexBuffer:function(b,I,B,f){r(s,s.exports.meshopt_decodeIndexBuffer,b,I,B,f)},decodeIndexSequence:function(b,I,B,f){r(s,s.exports.meshopt_decodeIndexSequence,b,I,B,f)},decodeGltfBuffer:function(b,I,B,f,E,m){r(s,s.exports[g[E]],b,I,B,f,s.exports[c[m]])},decodeGltfBufferAsync:function(b,I,B,f,E){return l.length>0?p(b,I,B,g[f],c[E]):o.then(function(){var m=new Uint8Array(b*I);return r(s,s.exports[g[f]],m,b,I,B,s.exports[c[E]]),m})}}})();const kt=new WeakMap;class Jo extends aA{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,a){const s=new pe(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,o=>{this.parse(o,t,a)},n,a)}parse(e,t,n=()=>{}){this.decodeDracoFile(e,t,null,null,G,n).catch(n)}decodeDracoFile(e,t,n,a,s=K,o=()=>{}){const i={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:a||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:s};return this.decodeGeometry(e,i).then(t).catch(o)}decodeGeometry(e,t){const n=JSON.stringify(t);if(kt.has(e)){const r=kt.get(e);if(r.key===n)return r.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let a;const s=this.workerNextTaskID++,o=e.byteLength,i=this._getWorker(s,o).then(r=>(a=r,new Promise((c,g)=>{a._callbacks[s]={resolve:c,reject:g},a.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(r=>this._createGeometry(r.geometry));return i.catch(()=>!0).then(()=>{a&&s&&this._releaseTask(a,s)}),kt.set(e,{key:n,promise:i}),i}_createGeometry(e){const t=new bn;e.index&&t.setIndex(new je(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const a=e.attributes[n],s=a.name,o=a.array,i=a.itemSize,r=new je(o,i);s==="color"&&(this._assignVertexColorSpace(r,a.vertexColorSpace),r.normalized=!(o instanceof Float32Array)),t.setAttribute(s,r)}return t}_assignVertexColorSpace(e,t){if(t!==G)return;const n=new J;for(let a=0,s=e.count;a<s;a++)n.fromBufferAttribute(e,a),dt.colorSpaceToWorking(n,G),e.setXYZ(a,n.r,n.g,n.b)}_loadLibrary(e,t){const n=new pe(this.manager);return n.setPath(this.decoderPath),n.setResponseType(t),n.setWithCredentials(this.withCredentials),new Promise((a,s)=>{n.load(e,a,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(n=>{const a=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const s=Ko.toString(),o=["/* draco decoder */",a,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(`
|
|
3
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([o]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const a=new Worker(this.workerSourceURL);a._callbacks={},a._taskCosts={},a._taskLoad=0,a.postMessage({type:"init",decoderConfig:this.decoderConfig}),a.onmessage=function(s){const o=s.data;switch(o.type){case"decode":a._callbacks[o.id].resolve(o);break;case"error":a._callbacks[o.id].reject(o);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+o.type+'"')}},this.workerPool.push(a)}else this.workerPool.sort(function(a,s){return a._taskLoad>s._taskLoad?-1:1});const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function Ko(){let A,e;onmessage=function(o){const i=o.data;switch(i.type){case"init":A=i.decoderConfig,e=new Promise(function(g){A.onModuleLoaded=function(l){g({draco:l})},DracoDecoderModule(A)});break;case"decode":const r=i.buffer,c=i.taskConfig;e.then(g=>{const l=g.draco,d=new l.Decoder;try{const h=t(l,d,new Int8Array(r),c),u=h.attributes.map(p=>p.array.buffer);h.index&&u.push(h.index.array.buffer),self.postMessage({type:"decode",id:i.id,geometry:h},u)}catch(h){console.error(h),self.postMessage({type:"error",id:i.id,error:h.message})}finally{l.destroy(d)}});break}};function t(o,i,r,c){const g=c.attributeIDs,l=c.attributeTypes;let d,h;const u=i.GetEncodedGeometryType(r);if(u===o.TRIANGULAR_MESH)d=new o.Mesh,h=i.DecodeArrayToMesh(r,r.byteLength,d);else if(u===o.POINT_CLOUD)d=new o.PointCloud,h=i.DecodeArrayToPointCloud(r,r.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!h.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+h.error_msg());const p={index:null,attributes:[]};for(const C in g){const b=self[l[C]];let I,B;if(c.useUniqueIDs)B=g[C],I=i.GetAttributeByUniqueId(d,B);else{if(B=i.GetAttributeId(d,o[g[C]]),B===-1)continue;I=i.GetAttribute(d,B)}const f=a(o,i,d,C,b,I);C==="color"&&(f.vertexColorSpace=c.vertexColorSpace),p.attributes.push(f)}return u===o.TRIANGULAR_MESH&&(p.index=n(o,i,d)),o.destroy(d),p}function n(o,i,r){const g=r.num_faces()*3,l=g*4,d=o._malloc(l);i.GetTrianglesUInt32Array(r,l,d);const h=new Uint32Array(o.HEAPF32.buffer,d,g).slice();return o._free(d),{array:h,itemSize:1}}function a(o,i,r,c,g,l){const d=l.num_components(),u=r.num_points()*d,p=u*g.BYTES_PER_ELEMENT,C=s(o,g),b=o._malloc(p);i.GetAttributeDataArrayForAllPoints(r,l,C,p,b);const I=new g(o.HEAPF32.buffer,b,u).slice();return o._free(b),{name:c,array:I,itemSize:d}}function s(o,i){switch(i){case Float32Array:return o.DT_FLOAT32;case Int8Array:return o.DT_INT8;case Int16Array:return o.DT_INT16;case Int32Array:return o.DT_INT32;case Uint8Array:return o.DT_UINT8;case Uint16Array:return o.DT_UINT16;case Uint32Array:return o.DT_UINT32}}}function LA(A,e){if(e===Ps)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),A;if(e===jt||e===En){let t=A.getIndex();if(t===null){const o=[],i=A.getAttribute("position");if(i!==void 0){for(let r=0;r<i.count;r++)o.push(r);A.setIndex(o),t=A.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),A}const n=t.count-2,a=[];if(e===jt)for(let o=1;o<=n;o++)a.push(t.getX(0)),a.push(t.getX(o)),a.push(t.getX(o+1));else for(let o=0;o<n;o++)o%2===0?(a.push(t.getX(o)),a.push(t.getX(o+1)),a.push(t.getX(o+2))):(a.push(t.getX(o+2)),a.push(t.getX(o+1)),a.push(t.getX(o)));a.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const s=A.clone();return s.setIndex(a),s.clearGroups(),s}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),A}class Yo extends aA{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new Zo(t)}),this.register(function(t){return new $o(t)}),this.register(function(t){return new ri(t)}),this.register(function(t){return new ci(t)}),this.register(function(t){return new gi(t)}),this.register(function(t){return new ti(t)}),this.register(function(t){return new Ai(t)}),this.register(function(t){return new ni(t)}),this.register(function(t){return new ai(t)}),this.register(function(t){return new Xo(t)}),this.register(function(t){return new si(t)}),this.register(function(t){return new ei(t)}),this.register(function(t){return new ii(t)}),this.register(function(t){return new oi(t)}),this.register(function(t){return new zo(t)}),this.register(function(t){return new li(t)}),this.register(function(t){return new di(t)})}load(e,t,n,a){const s=this;let o;if(this.resourcePath!=="")o=this.resourcePath;else if(this.path!==""){const c=qe.extractUrlBase(e);o=qe.resolveURL(c,this.path)}else o=qe.extractUrlBase(e);this.manager.itemStart(e);const i=function(c){a?a(c):console.error(c),s.manager.itemError(e),s.manager.itemEnd(e)},r=new pe(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(c){try{s.parse(c,o,function(g){t(g),s.manager.itemEnd(e)},i)}catch(g){i(g)}},n,i)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,a){let s;const o={},i={},r=new TextDecoder;if(typeof e=="string")s=JSON.parse(e);else if(e instanceof ArrayBuffer)if(r.decode(new Uint8Array(e,0,4))===Hn){try{o[D.KHR_BINARY_GLTF]=new hi(e)}catch(l){a&&a(l);return}s=JSON.parse(o[D.KHR_BINARY_GLTF].content)}else s=JSON.parse(r.decode(e));else s=e;if(s.asset===void 0||s.asset.version[0]<2){a&&a(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const c=new Si(s,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let g=0;g<this.pluginCallbacks.length;g++){const l=this.pluginCallbacks[g](c);l.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),i[l.name]=l,o[l.name]=!0}if(s.extensionsUsed)for(let g=0;g<s.extensionsUsed.length;++g){const l=s.extensionsUsed[g],d=s.extensionsRequired||[];switch(l){case D.KHR_MATERIALS_UNLIT:o[l]=new Wo;break;case D.KHR_DRACO_MESH_COMPRESSION:o[l]=new ui(s,this.dracoLoader);break;case D.KHR_TEXTURE_TRANSFORM:o[l]=new fi;break;case D.KHR_MESH_QUANTIZATION:o[l]=new pi;break;default:d.indexOf(l)>=0&&i[l]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+l+'".')}}c.setExtensions(o),c.setPlugins(i),c.parse(n,a)}parseAsync(e,t){const n=this;return new Promise(function(a,s){n.parse(e,t,a,s)})}}function Vo(){let A={};return{get:function(e){return A[e]},add:function(e,t){A[e]=t},remove:function(e){delete A[e]},removeAll:function(){A={}}}}const D={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class zo{constructor(e){this.parser=e,this.name=D.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,a=t.length;n<a;n++){const s=t[n];s.extensions&&s.extensions[this.name]&&s.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,s.extensions[this.name].light)}}_loadLight(e){const t=this.parser,n="light:"+e;let a=t.cache.get(n);if(a)return a;const s=t.json,r=((s.extensions&&s.extensions[this.name]||{}).lights||[])[e];let c;const g=new J(16777215);r.color!==void 0&&g.setRGB(r.color[0],r.color[1],r.color[2],K);const l=r.range!==void 0?r.range:0;switch(r.type){case"directional":c=new ye(g),c.target.position.set(0,0,-1),c.add(c.target);break;case"point":c=new qs(g),c.distance=l;break;case"spot":c=new js(g),c.distance=l,r.spot=r.spot||{},r.spot.innerConeAngle=r.spot.innerConeAngle!==void 0?r.spot.innerConeAngle:0,r.spot.outerConeAngle=r.spot.outerConeAngle!==void 0?r.spot.outerConeAngle:Math.PI/4,c.angle=r.spot.outerConeAngle,c.penumbra=1-r.spot.innerConeAngle/r.spot.outerConeAngle,c.target.position.set(0,0,-1),c.add(c.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+r.type)}return c.position.set(0,0,0),Y(c,r),r.intensity!==void 0&&(c.intensity=r.intensity),c.name=t.createUniqueName(r.name||"light_"+e),a=Promise.resolve(c),t.cache.add(n,a),a}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,n=this.parser,s=n.json.nodes[e],i=(s.extensions&&s.extensions[this.name]||{}).light;return i===void 0?null:this._loadLight(i).then(function(r){return n._getNodeRef(t.cache,i,r)})}}class Wo{constructor(){this.name=D.KHR_MATERIALS_UNLIT}getMaterialType(){return me}extendParams(e,t,n){const a=[];e.color=new J(1,1,1),e.opacity=1;const s=t.pbrMetallicRoughness;if(s){if(Array.isArray(s.baseColorFactor)){const o=s.baseColorFactor;e.color.setRGB(o[0],o[1],o[2],K),e.opacity=o[3]}s.baseColorTexture!==void 0&&a.push(n.assignTexture(e,"map",s.baseColorTexture,G))}return Promise.all(a)}}class Xo{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=a.extensions[this.name].emissiveStrength;return s!==void 0&&(t.emissiveIntensity=s),Promise.resolve()}}class Zo{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];if(o.clearcoatFactor!==void 0&&(t.clearcoat=o.clearcoatFactor),o.clearcoatTexture!==void 0&&s.push(n.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),o.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),o.clearcoatRoughnessTexture!==void 0&&s.push(n.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),o.clearcoatNormalTexture!==void 0&&(s.push(n.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),o.clearcoatNormalTexture.scale!==void 0)){const i=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new Cn(i,i)}return Promise.all(s)}}class $o{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_DISPERSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=a.extensions[this.name];return t.dispersion=s.dispersion!==void 0?s.dispersion:0,Promise.resolve()}}class ei{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];return o.iridescenceFactor!==void 0&&(t.iridescence=o.iridescenceFactor),o.iridescenceTexture!==void 0&&s.push(n.assignTexture(t,"iridescenceMap",o.iridescenceTexture)),o.iridescenceIor!==void 0&&(t.iridescenceIOR=o.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),o.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),o.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),o.iridescenceThicknessTexture!==void 0&&s.push(n.assignTexture(t,"iridescenceThicknessMap",o.iridescenceThicknessTexture)),Promise.all(s)}}class ti{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_SHEEN}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[];t.sheenColor=new J(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=a.extensions[this.name];if(o.sheenColorFactor!==void 0){const i=o.sheenColorFactor;t.sheenColor.setRGB(i[0],i[1],i[2],K)}return o.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=o.sheenRoughnessFactor),o.sheenColorTexture!==void 0&&s.push(n.assignTexture(t,"sheenColorMap",o.sheenColorTexture,G)),o.sheenRoughnessTexture!==void 0&&s.push(n.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(s)}}class Ai{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];return o.transmissionFactor!==void 0&&(t.transmission=o.transmissionFactor),o.transmissionTexture!==void 0&&s.push(n.assignTexture(t,"transmissionMap",o.transmissionTexture)),Promise.all(s)}}class ni{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_VOLUME}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];t.thickness=o.thicknessFactor!==void 0?o.thicknessFactor:0,o.thicknessTexture!==void 0&&s.push(n.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const i=o.attenuationColor||[1,1,1];return t.attenuationColor=new J().setRGB(i[0],i[1],i[2],K),Promise.all(s)}}class ai{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_IOR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const a=this.parser.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=a.extensions[this.name];return t.ior=s.ior!==void 0?s.ior:1.5,Promise.resolve()}}class si{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_SPECULAR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];t.specularIntensity=o.specularFactor!==void 0?o.specularFactor:1,o.specularTexture!==void 0&&s.push(n.assignTexture(t,"specularIntensityMap",o.specularTexture));const i=o.specularColorFactor||[1,1,1];return t.specularColor=new J().setRGB(i[0],i[1],i[2],K),o.specularColorTexture!==void 0&&s.push(n.assignTexture(t,"specularColorMap",o.specularColorTexture,G)),Promise.all(s)}}class oi{constructor(e){this.parser=e,this.name=D.EXT_MATERIALS_BUMP}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];return t.bumpScale=o.bumpFactor!==void 0?o.bumpFactor:1,o.bumpTexture!==void 0&&s.push(n.assignTexture(t,"bumpMap",o.bumpTexture)),Promise.all(s)}}class ii{constructor(e){this.parser=e,this.name=D.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:V}extendMaterialParams(e,t){const n=this.parser,a=n.json.materials[e];if(!a.extensions||!a.extensions[this.name])return Promise.resolve();const s=[],o=a.extensions[this.name];return o.anisotropyStrength!==void 0&&(t.anisotropy=o.anisotropyStrength),o.anisotropyRotation!==void 0&&(t.anisotropyRotation=o.anisotropyRotation),o.anisotropyTexture!==void 0&&s.push(n.assignTexture(t,"anisotropyMap",o.anisotropyTexture)),Promise.all(s)}}class ri{constructor(e){this.parser=e,this.name=D.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,n=t.json,a=n.textures[e];if(!a.extensions||!a.extensions[this.name])return null;const s=a.extensions[this.name],o=t.options.ktx2Loader;if(!o){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,s.source,o)}}class ci{constructor(e){this.parser=e,this.name=D.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,n=this.parser,a=n.json,s=a.textures[e];if(!s.extensions||!s.extensions[t])return null;const o=s.extensions[t],i=a.images[o.source];let r=n.textureLoader;if(i.uri){const c=n.options.manager.getHandler(i.uri);c!==null&&(r=c)}return n.loadTextureImage(e,o.source,r)}}class gi{constructor(e){this.parser=e,this.name=D.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,n=this.parser,a=n.json,s=a.textures[e];if(!s.extensions||!s.extensions[t])return null;const o=s.extensions[t],i=a.images[o.source];let r=n.textureLoader;if(i.uri){const c=n.options.manager.getHandler(i.uri);c!==null&&(r=c)}return n.loadTextureImage(e,o.source,r)}}class li{constructor(e){this.name=D.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const a=n.extensions[this.name],s=this.parser.getDependency("buffer",a.buffer),o=this.parser.options.meshoptDecoder;if(!o||!o.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return s.then(function(i){const r=a.byteOffset||0,c=a.byteLength||0,g=a.count,l=a.byteStride,d=new Uint8Array(i,r,c);return o.decodeGltfBufferAsync?o.decodeGltfBufferAsync(g,l,d,a.mode,a.filter).then(function(h){return h.buffer}):o.ready.then(function(){const h=new ArrayBuffer(g*l);return o.decodeGltfBuffer(new Uint8Array(h),g,l,d,a.mode,a.filter),h})})}else return null}}class di{constructor(e){this.name=D.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;const a=t.meshes[n.mesh];for(const c of a.primitives)if(c.mode!==H.TRIANGLES&&c.mode!==H.TRIANGLE_STRIP&&c.mode!==H.TRIANGLE_FAN&&c.mode!==void 0)return null;const o=n.extensions[this.name].attributes,i=[],r={};for(const c in o)i.push(this.parser.getDependency("accessor",o[c]).then(g=>(r[c]=g,r[c])));return i.length<1?null:(i.push(this.parser.createNodeMesh(e)),Promise.all(i).then(c=>{const g=c.pop(),l=g.isGroup?g.children:[g],d=c[0].count,h=[];for(const u of l){const p=new Ie,C=new y,b=new We,I=new y(1,1,1),B=new Bn(u.geometry,u.material,d);for(let f=0;f<d;f++)r.TRANSLATION&&C.fromBufferAttribute(r.TRANSLATION,f),r.ROTATION&&b.fromBufferAttribute(r.ROTATION,f),r.SCALE&&I.fromBufferAttribute(r.SCALE,f),B.setMatrixAt(f,p.compose(C,b,I));for(const f in r)if(f==="_COLOR_0"){const E=r[f];B.instanceColor=new Js(E.array,E.itemSize,E.normalized)}else f!=="TRANSLATION"&&f!=="ROTATION"&&f!=="SCALE"&&u.geometry.setAttribute(f,r[f]);sA.prototype.copy.call(B,u),this.parser.assignFinalMaterial(B),h.push(B)}return g.isGroup?(g.clear(),g.add(...h),g):h[0]}))}}const Hn="glTF",Ne=12,vA={JSON:1313821514,BIN:5130562};class hi{constructor(e){this.name=D.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Ne),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Hn)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const a=this.header.length-Ne,s=new DataView(e,Ne);let o=0;for(;o<a;){const i=s.getUint32(o,!0);o+=4;const r=s.getUint32(o,!0);if(o+=4,r===vA.JSON){const c=new Uint8Array(e,Ne+o,i);this.content=n.decode(c)}else if(r===vA.BIN){const c=Ne+o;this.body=e.slice(c,c+i)}o+=i}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class ui{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=D.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const n=this.json,a=this.dracoLoader,s=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,i={},r={},c={};for(const g in o){const l=Wt[g]||g.toLowerCase();i[l]=o[g]}for(const g in e.attributes){const l=Wt[g]||g.toLowerCase();if(o[g]!==void 0){const d=n.accessors[e.attributes[g]],h=Se[d.componentType];c[l]=h.name,r[l]=d.normalized===!0}}return t.getDependency("bufferView",s).then(function(g){return new Promise(function(l,d){a.decodeDracoFile(g,function(h){for(const u in h.attributes){const p=h.attributes[u],C=r[u];C!==void 0&&(p.normalized=C)}l(h)},i,c,K,d)})})}}class fi{constructor(){this.name=D.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class pi{constructor(){this.name=D.KHR_MESH_QUANTIZATION}}class Pn extends so{constructor(e,t,n,a){super(e,t,n,a)}copySampleValue_(e){const t=this.resultBuffer,n=this.sampleValues,a=this.valueSize,s=e*a*3+a;for(let o=0;o!==a;o++)t[o]=n[s+o];return t}interpolate_(e,t,n,a){const s=this.resultBuffer,o=this.sampleValues,i=this.valueSize,r=i*2,c=i*3,g=a-t,l=(n-t)/g,d=l*l,h=d*l,u=e*c,p=u-c,C=-2*h+3*d,b=h-d,I=1-C,B=b-d+l;for(let f=0;f!==i;f++){const E=o[p+f+i],m=o[p+f+r]*g,Q=o[u+f+i],w=o[u+f]*g;s[f]=I*E+B*m+C*Q+b*w}return s}}const Ii=new We;class bi extends Pn{interpolate_(e,t,n,a){const s=super.interpolate_(e,t,n,a);return Ii.fromArray(s).normalize().toArray(s),s}}const H={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},Se={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},GA={9728:ht,9729:be,9984:Qn,9985:zs,9986:Vs,9987:Et},NA={33071:Xs,33648:Ws,10497:qt},xt={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Wt={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},oe={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},Ei={CUBICSPLINE:void 0,LINEAR:Fn,STEP:Ao},Ft={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function Ci(A){return A.DefaultMaterial===void 0&&(A.DefaultMaterial=new ut({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:ao})),A.DefaultMaterial}function he(A,e,t){for(const n in t.extensions)A[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=t.extensions[n])}function Y(A,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(A.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function Bi(A,e,t){let n=!1,a=!1,s=!1;for(let c=0,g=e.length;c<g;c++){const l=e[c];if(l.POSITION!==void 0&&(n=!0),l.NORMAL!==void 0&&(a=!0),l.COLOR_0!==void 0&&(s=!0),n&&a&&s)break}if(!n&&!a&&!s)return Promise.resolve(A);const o=[],i=[],r=[];for(let c=0,g=e.length;c<g;c++){const l=e[c];if(n){const d=l.POSITION!==void 0?t.getDependency("accessor",l.POSITION):A.attributes.position;o.push(d)}if(a){const d=l.NORMAL!==void 0?t.getDependency("accessor",l.NORMAL):A.attributes.normal;i.push(d)}if(s){const d=l.COLOR_0!==void 0?t.getDependency("accessor",l.COLOR_0):A.attributes.color;r.push(d)}}return Promise.all([Promise.all(o),Promise.all(i),Promise.all(r)]).then(function(c){const g=c[0],l=c[1],d=c[2];return n&&(A.morphAttributes.position=g),a&&(A.morphAttributes.normal=l),s&&(A.morphAttributes.color=d),A.morphTargetsRelative=!0,A})}function mi(A,e){if(A.updateMorphTargets(),e.weights!==void 0)for(let t=0,n=e.weights.length;t<n;t++)A.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(A.morphTargetInfluences.length===t.length){A.morphTargetDictionary={};for(let n=0,a=t.length;n<a;n++)A.morphTargetDictionary[t[n]]=n}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function Qi(A){let e;const t=A.extensions&&A.extensions[D.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+Tt(t.attributes):e=A.indices+":"+Tt(A.attributes)+":"+A.mode,A.targets!==void 0)for(let n=0,a=A.targets.length;n<a;n++)e+=":"+Tt(A.targets[n]);return e}function Tt(A){let e="";const t=Object.keys(A).sort();for(let n=0,a=t.length;n<a;n++)e+=t[n]+":"+A[t[n]]+";";return e}function Xt(A){switch(A){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function wi(A){return A.search(/\.jpe?g($|\?)/i)>0||A.search(/^data\:image\/jpeg/)===0?"image/jpeg":A.search(/\.webp($|\?)/i)>0||A.search(/^data\:image\/webp/)===0?"image/webp":A.search(/\.ktx2($|\?)/i)>0||A.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const yi=new Ie;class Si{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new Vo,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,a=-1,s=!1,o=-1;if(typeof navigator<"u"){const i=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(i)===!0;const r=i.match(/Version\/(\d+)/);a=n&&r?parseInt(r[1],10):-1,s=i.indexOf("Firefox")>-1,o=s?i.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||n&&a<17||s&&o<98?this.textureLoader=new mn(this.options.manager):this.textureLoader=new Ks(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new pe(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const n=this,a=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(o){return o._markDefs&&o._markDefs()}),Promise.all(this._invokeAll(function(o){return o.beforeRoot&&o.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(o){const i={scene:o[0][a.scene||0],scenes:o[0],animations:o[1],cameras:o[2],asset:a.asset,parser:n,userData:{}};return he(s,i,a),Y(i,a),Promise.all(n._invokeAll(function(r){return r.afterRoot&&r.afterRoot(i)})).then(function(){for(const r of i.scenes)r.updateMatrixWorld();e(i)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let a=0,s=t.length;a<s;a++){const o=t[a].joints;for(let i=0,r=o.length;i<r;i++)e[o[i]].isBone=!0}for(let a=0,s=e.length;a<s;a++){const o=e[a];o.mesh!==void 0&&(this._addNodeRef(this.meshCache,o.mesh),o.skin!==void 0&&(n[o.mesh].isSkinnedMesh=!0)),o.camera!==void 0&&this._addNodeRef(this.cameraCache,o.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;const a=n.clone(),s=(o,i)=>{const r=this.associations.get(o);r!=null&&this.associations.set(i,r);for(const[c,g]of o.children.entries())s(g,i.children[c])};return s(n,a),a.name+="_instance_"+e.uses[t]++,a}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){const a=e(t[n]);if(a)return a}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const n=[];for(let a=0;a<t.length;a++){const s=e(t[a]);s&&n.push(s)}return n}getDependency(e,t){const n=e+":"+t;let a=this.cache.get(n);if(!a){switch(e){case"scene":a=this.loadScene(t);break;case"node":a=this._invokeOne(function(s){return s.loadNode&&s.loadNode(t)});break;case"mesh":a=this._invokeOne(function(s){return s.loadMesh&&s.loadMesh(t)});break;case"accessor":a=this.loadAccessor(t);break;case"bufferView":a=this._invokeOne(function(s){return s.loadBufferView&&s.loadBufferView(t)});break;case"buffer":a=this.loadBuffer(t);break;case"material":a=this._invokeOne(function(s){return s.loadMaterial&&s.loadMaterial(t)});break;case"texture":a=this._invokeOne(function(s){return s.loadTexture&&s.loadTexture(t)});break;case"skin":a=this.loadSkin(t);break;case"animation":a=this._invokeOne(function(s){return s.loadAnimation&&s.loadAnimation(t)});break;case"camera":a=this.loadCamera(t);break;default:if(a=this._invokeOne(function(s){return s!=this&&s.getDependency&&s.getDependency(e,t)}),!a)throw new Error("Unknown type: "+e);break}this.cache.add(n,a)}return a}getDependencies(e){let t=this.cache.get(e);if(!t){const n=this,a=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(a.map(function(s,o){return n.getDependency(e,o)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],n=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[D.KHR_BINARY_GLTF].body);const a=this.options;return new Promise(function(s,o){n.load(qe.resolveURL(t.uri,a.path),s,void 0,function(){o(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(n){const a=t.byteLength||0,s=t.byteOffset||0;return n.slice(s,s+a)})}loadAccessor(e){const t=this,n=this.json,a=this.json.accessors[e];if(a.bufferView===void 0&&a.sparse===void 0){const o=xt[a.type],i=Se[a.componentType],r=a.normalized===!0,c=new i(a.count*o);return Promise.resolve(new je(c,o,r))}const s=[];return a.bufferView!==void 0?s.push(this.getDependency("bufferView",a.bufferView)):s.push(null),a.sparse!==void 0&&(s.push(this.getDependency("bufferView",a.sparse.indices.bufferView)),s.push(this.getDependency("bufferView",a.sparse.values.bufferView))),Promise.all(s).then(function(o){const i=o[0],r=xt[a.type],c=Se[a.componentType],g=c.BYTES_PER_ELEMENT,l=g*r,d=a.byteOffset||0,h=a.bufferView!==void 0?n.bufferViews[a.bufferView].byteStride:void 0,u=a.normalized===!0;let p,C;if(h&&h!==l){const b=Math.floor(d/h),I="InterleavedBuffer:"+a.bufferView+":"+a.componentType+":"+b+":"+a.count;let B=t.cache.get(I);B||(p=new c(i,b*h,a.count*h/g),B=new Ys(p,h/g),t.cache.add(I,B)),C=new no(B,r,d%h/g,u)}else i===null?p=new c(a.count*r):p=new c(i,d,a.count*r),C=new je(p,r,u);if(a.sparse!==void 0){const b=xt.SCALAR,I=Se[a.sparse.indices.componentType],B=a.sparse.indices.byteOffset||0,f=a.sparse.values.byteOffset||0,E=new I(o[1],B,a.sparse.count*b),m=new c(o[2],f,a.sparse.count*r);i!==null&&(C=new je(C.array.slice(),C.itemSize,C.normalized)),C.normalized=!1;for(let Q=0,w=E.length;Q<w;Q++){const S=E[Q];if(C.setX(S,m[Q*r]),r>=2&&C.setY(S,m[Q*r+1]),r>=3&&C.setZ(S,m[Q*r+2]),r>=4&&C.setW(S,m[Q*r+3]),r>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}C.normalized=u}return C})}loadTexture(e){const t=this.json,n=this.options,s=t.textures[e].source,o=t.images[s];let i=this.textureLoader;if(o.uri){const r=n.manager.getHandler(o.uri);r!==null&&(i=r)}return this.loadTextureImage(e,s,i)}loadTextureImage(e,t,n){const a=this,s=this.json,o=s.textures[e],i=s.images[t],r=(i.uri||i.bufferView)+":"+o.sampler;if(this.textureCache[r])return this.textureCache[r];const c=this.loadImageSource(t,n).then(function(g){g.flipY=!1,g.name=o.name||i.name||"",g.name===""&&typeof i.uri=="string"&&i.uri.startsWith("data:image/")===!1&&(g.name=i.uri);const d=(s.samplers||{})[o.sampler]||{};return g.magFilter=GA[d.magFilter]||be,g.minFilter=GA[d.minFilter]||Et,g.wrapS=NA[d.wrapS]||qt,g.wrapT=NA[d.wrapT]||qt,g.generateMipmaps=!g.isCompressedTexture&&g.minFilter!==ht&&g.minFilter!==be,a.associations.set(g,{textures:e}),g}).catch(function(){return null});return this.textureCache[r]=c,c}loadImageSource(e,t){const n=this,a=this.json,s=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(l=>l.clone());const o=a.images[e],i=self.URL||self.webkitURL;let r=o.uri||"",c=!1;if(o.bufferView!==void 0)r=n.getDependency("bufferView",o.bufferView).then(function(l){c=!0;const d=new Blob([l],{type:o.mimeType});return r=i.createObjectURL(d),r});else if(o.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const g=Promise.resolve(r).then(function(l){return new Promise(function(d,h){let u=d;t.isImageBitmapLoader===!0&&(u=function(p){const C=new Z(p);C.needsUpdate=!0,d(C)}),t.load(qe.resolveURL(l,s.path),u,void 0,h)})}).then(function(l){return c===!0&&i.revokeObjectURL(r),Y(l,o),l.userData.mimeType=o.mimeType||wi(o.uri),l}).catch(function(l){throw console.error("THREE.GLTFLoader: Couldn't load texture",r),l});return this.sourceCache[e]=g,g}assignTexture(e,t,n,a){const s=this;return this.getDependency("texture",n.index).then(function(o){if(!o)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(o=o.clone(),o.channel=n.texCoord),s.extensions[D.KHR_TEXTURE_TRANSFORM]){const i=n.extensions!==void 0?n.extensions[D.KHR_TEXTURE_TRANSFORM]:void 0;if(i){const r=s.associations.get(o);o=s.extensions[D.KHR_TEXTURE_TRANSFORM].extendTexture(o,i),s.associations.set(o,r)}}return a!==void 0&&(o.colorSpace=a),e[t]=o,o})}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const a=t.attributes.tangent===void 0,s=t.attributes.color!==void 0,o=t.attributes.normal===void 0;if(e.isPoints){const i="PointsMaterial:"+n.uuid;let r=this.cache.get(i);r||(r=new wn,Dt.prototype.copy.call(r,n),r.color.copy(n.color),r.map=n.map,r.sizeAttenuation=!1,this.cache.add(i,r)),n=r}else if(e.isLine){const i="LineBasicMaterial:"+n.uuid;let r=this.cache.get(i);r||(r=new Zs,Dt.prototype.copy.call(r,n),r.color.copy(n.color),r.map=n.map,this.cache.add(i,r)),n=r}if(a||s||o){let i="ClonedMaterial:"+n.uuid+":";a&&(i+="derivative-tangents:"),s&&(i+="vertex-colors:"),o&&(i+="flat-shading:");let r=this.cache.get(i);r||(r=n.clone(),s&&(r.vertexColors=!0),o&&(r.flatShading=!0),a&&(r.normalScale&&(r.normalScale.y*=-1),r.clearcoatNormalScale&&(r.clearcoatNormalScale.y*=-1)),this.cache.add(i,r),this.associations.set(r,this.associations.get(n))),n=r}e.material=n}getMaterialType(){return ut}loadMaterial(e){const t=this,n=this.json,a=this.extensions,s=n.materials[e];let o;const i={},r=s.extensions||{},c=[];if(r[D.KHR_MATERIALS_UNLIT]){const l=a[D.KHR_MATERIALS_UNLIT];o=l.getMaterialType(),c.push(l.extendParams(i,s,t))}else{const l=s.pbrMetallicRoughness||{};if(i.color=new J(1,1,1),i.opacity=1,Array.isArray(l.baseColorFactor)){const d=l.baseColorFactor;i.color.setRGB(d[0],d[1],d[2],K),i.opacity=d[3]}l.baseColorTexture!==void 0&&c.push(t.assignTexture(i,"map",l.baseColorTexture,G)),i.metalness=l.metallicFactor!==void 0?l.metallicFactor:1,i.roughness=l.roughnessFactor!==void 0?l.roughnessFactor:1,l.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(i,"metalnessMap",l.metallicRoughnessTexture)),c.push(t.assignTexture(i,"roughnessMap",l.metallicRoughnessTexture))),o=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,i)})))}s.doubleSided===!0&&(i.side=yn);const g=s.alphaMode||Ft.OPAQUE;if(g===Ft.BLEND?(i.transparent=!0,i.depthWrite=!1):(i.transparent=!1,g===Ft.MASK&&(i.alphaTest=s.alphaCutoff!==void 0?s.alphaCutoff:.5)),s.normalTexture!==void 0&&o!==me&&(c.push(t.assignTexture(i,"normalMap",s.normalTexture)),i.normalScale=new Cn(1,1),s.normalTexture.scale!==void 0)){const l=s.normalTexture.scale;i.normalScale.set(l,l)}if(s.occlusionTexture!==void 0&&o!==me&&(c.push(t.assignTexture(i,"aoMap",s.occlusionTexture)),s.occlusionTexture.strength!==void 0&&(i.aoMapIntensity=s.occlusionTexture.strength)),s.emissiveFactor!==void 0&&o!==me){const l=s.emissiveFactor;i.emissive=new J().setRGB(l[0],l[1],l[2],K)}return s.emissiveTexture!==void 0&&o!==me&&c.push(t.assignTexture(i,"emissiveMap",s.emissiveTexture,G)),Promise.all(c).then(function(){const l=new o(i);return s.name&&(l.name=s.name),Y(l,s),t.associations.set(l,{materials:e}),s.extensions&&he(a,l,s),l})}createUniqueName(e){const t=$s.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,n=this.extensions,a=this.primitiveCache;function s(i){return n[D.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(i,t).then(function(r){return UA(r,i,t)})}const o=[];for(let i=0,r=e.length;i<r;i++){const c=e[i],g=Qi(c),l=a[g];if(l)o.push(l.promise);else{let d;c.extensions&&c.extensions[D.KHR_DRACO_MESH_COMPRESSION]?d=s(c):d=UA(new bn,c,t),a[g]={primitive:c,promise:d},o.push(d)}}return Promise.all(o)}loadMesh(e){const t=this,n=this.json,a=this.extensions,s=n.meshes[e],o=s.primitives,i=[];for(let r=0,c=o.length;r<c;r++){const g=o[r].material===void 0?Ci(this.cache):this.getDependency("material",o[r].material);i.push(g)}return i.push(t.loadGeometries(o)),Promise.all(i).then(function(r){const c=r.slice(0,r.length-1),g=r[r.length-1],l=[];for(let h=0,u=g.length;h<u;h++){const p=g[h],C=o[h];let b;const I=c[h];if(C.mode===H.TRIANGLES||C.mode===H.TRIANGLE_STRIP||C.mode===H.TRIANGLE_FAN||C.mode===void 0)b=s.isSkinnedMesh===!0?new Sn(p,I):new De(p,I),b.isSkinnedMesh===!0&&b.normalizeSkinWeights(),C.mode===H.TRIANGLE_STRIP?b.geometry=LA(b.geometry,En):C.mode===H.TRIANGLE_FAN&&(b.geometry=LA(b.geometry,jt));else if(C.mode===H.LINES)b=new Dn(p,I);else if(C.mode===H.LINE_STRIP)b=new Rn(p,I);else if(C.mode===H.LINE_LOOP)b=new kn(p,I);else if(C.mode===H.POINTS)b=new oA(p,I);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+C.mode);Object.keys(b.geometry.morphAttributes).length>0&&mi(b,s),b.name=t.createUniqueName(s.name||"mesh_"+e),Y(b,s),C.extensions&&he(a,b,C),t.assignFinalMaterial(b),l.push(b)}for(let h=0,u=l.length;h<u;h++)t.associations.set(l[h],{meshes:e,primitives:h});if(l.length===1)return s.extensions&&he(a,l[0],s),l[0];const d=new $;s.extensions&&he(a,d,s),t.associations.set(d,{meshes:e});for(let h=0,u=l.length;h<u;h++)d.add(l[h]);return d})}loadCamera(e){let t;const n=this.json.cameras[e],a=n[n.type];if(!a){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return n.type==="perspective"?t=new Ct(Re.radToDeg(a.yfov),a.aspectRatio||1,a.znear||1,a.zfar||2e6):n.type==="orthographic"&&(t=new iA(-a.xmag,a.xmag,a.ymag,-a.ymag,a.znear,a.zfar)),n.name&&(t.name=this.createUniqueName(n.name)),Y(t,n),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],n=[];for(let a=0,s=t.joints.length;a<s;a++)n.push(this._loadNodeShallow(t.joints[a]));return t.inverseBindMatrices!==void 0?n.push(this.getDependency("accessor",t.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(a){const s=a.pop(),o=a,i=[],r=[];for(let c=0,g=o.length;c<g;c++){const l=o[c];if(l){i.push(l);const d=new Ie;s!==null&&d.fromArray(s.array,c*16),r.push(d)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[c])}return new eo(i,r)})}loadAnimation(e){const t=this.json,n=this,a=t.animations[e],s=a.name?a.name:"animation_"+e,o=[],i=[],r=[],c=[],g=[];for(let l=0,d=a.channels.length;l<d;l++){const h=a.channels[l],u=a.samplers[h.sampler],p=h.target,C=p.node,b=a.parameters!==void 0?a.parameters[u.input]:u.input,I=a.parameters!==void 0?a.parameters[u.output]:u.output;p.node!==void 0&&(o.push(this.getDependency("node",C)),i.push(this.getDependency("accessor",b)),r.push(this.getDependency("accessor",I)),c.push(u),g.push(p))}return Promise.all([Promise.all(o),Promise.all(i),Promise.all(r),Promise.all(c),Promise.all(g)]).then(function(l){const d=l[0],h=l[1],u=l[2],p=l[3],C=l[4],b=[];for(let B=0,f=d.length;B<f;B++){const E=d[B],m=h[B],Q=u[B],w=p[B],S=C[B];if(E===void 0)continue;E.updateMatrix&&E.updateMatrix();const R=n._createAnimationTracks(E,m,Q,w,S);if(R)for(let T=0;T<R.length;T++)b.push(R[T])}const I=new to(s,void 0,b);return Y(I,a),I})}createNodeMesh(e){const t=this.json,n=this,a=t.nodes[e];return a.mesh===void 0?null:n.getDependency("mesh",a.mesh).then(function(s){const o=n._getNodeRef(n.meshCache,a.mesh,s);return a.weights!==void 0&&o.traverse(function(i){if(i.isMesh)for(let r=0,c=a.weights.length;r<c;r++)i.morphTargetInfluences[r]=a.weights[r]}),o})}loadNode(e){const t=this.json,n=this,a=t.nodes[e],s=n._loadNodeShallow(e),o=[],i=a.children||[];for(let c=0,g=i.length;c<g;c++)o.push(n.getDependency("node",i[c]));const r=a.skin===void 0?Promise.resolve(null):n.getDependency("skin",a.skin);return Promise.all([s,Promise.all(o),r]).then(function(c){const g=c[0],l=c[1],d=c[2];d!==null&&g.traverse(function(h){h.isSkinnedMesh&&h.bind(d,yi)});for(let h=0,u=l.length;h<u;h++)g.add(l[h]);return g})}_loadNodeShallow(e){const t=this.json,n=this.extensions,a=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const s=t.nodes[e],o=s.name?a.createUniqueName(s.name):"",i=[],r=a._invokeOne(function(c){return c.createNodeMesh&&c.createNodeMesh(e)});return r&&i.push(r),s.camera!==void 0&&i.push(a.getDependency("camera",s.camera).then(function(c){return a._getNodeRef(a.cameraCache,s.camera,c)})),a._invokeAll(function(c){return c.createNodeAttachment&&c.createNodeAttachment(e)}).forEach(function(c){i.push(c)}),this.nodeCache[e]=Promise.all(i).then(function(c){let g;if(s.isBone===!0?g=new xn:c.length>1?g=new $:c.length===1?g=c[0]:g=new sA,g!==c[0])for(let l=0,d=c.length;l<d;l++)g.add(c[l]);if(s.name&&(g.userData.name=s.name,g.name=o),Y(g,s),s.extensions&&he(n,g,s),s.matrix!==void 0){const l=new Ie;l.fromArray(s.matrix),g.applyMatrix4(l)}else s.translation!==void 0&&g.position.fromArray(s.translation),s.rotation!==void 0&&g.quaternion.fromArray(s.rotation),s.scale!==void 0&&g.scale.fromArray(s.scale);if(!a.associations.has(g))a.associations.set(g,{});else if(s.mesh!==void 0&&a.meshCache.refs[s.mesh]>1){const l=a.associations.get(g);a.associations.set(g,{...l})}return a.associations.get(g).nodes=e,g}),this.nodeCache[e]}loadScene(e){const t=this.extensions,n=this.json.scenes[e],a=this,s=new $;n.name&&(s.name=a.createUniqueName(n.name)),Y(s,n),n.extensions&&he(t,s,n);const o=n.nodes||[],i=[];for(let r=0,c=o.length;r<c;r++)i.push(a.getDependency("node",o[r]));return Promise.all(i).then(function(r){for(let g=0,l=r.length;g<l;g++)s.add(r[g]);const c=g=>{const l=new Map;for(const[d,h]of a.associations)(d instanceof Dt||d instanceof Z)&&l.set(d,h);return g.traverse(d=>{const h=a.associations.get(d);h!=null&&l.set(d,h)}),l};return a.associations=c(s),s})}_createAnimationTracks(e,t,n,a,s){const o=[],i=e.name?e.name:e.uuid,r=[];oe[s.path]===oe.weights?e.traverse(function(d){d.morphTargetInfluences&&r.push(d.name?d.name:d.uuid)}):r.push(i);let c;switch(oe[s.path]){case oe.weights:c=DA;break;case oe.rotation:c=RA;break;case oe.translation:case oe.scale:c=SA;break;default:switch(n.itemSize){case 1:c=DA;break;case 2:case 3:default:c=SA;break}break}const g=a.interpolation!==void 0?Ei[a.interpolation]:Fn,l=this._getArrayFromAccessor(n);for(let d=0,h=r.length;d<h;d++){const u=new c(r[d]+"."+oe[s.path],t.array,l,g);a.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(u),o.push(u)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const n=Xt(t.constructor),a=new Float32Array(t.length);for(let s=0,o=t.length;s<o;s++)a[s]=t[s]*n;t=a}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){const a=this instanceof RA?bi:Pn;return new a(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function Di(A,e,t){const n=e.attributes,a=new ke;if(n.POSITION!==void 0){const i=t.json.accessors[n.POSITION],r=i.min,c=i.max;if(r!==void 0&&c!==void 0){if(a.set(new y(r[0],r[1],r[2]),new y(c[0],c[1],c[2])),i.normalized){const g=Xt(Se[i.componentType]);a.min.multiplyScalar(g),a.max.multiplyScalar(g)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const s=e.targets;if(s!==void 0){const i=new y,r=new y;for(let c=0,g=s.length;c<g;c++){const l=s[c];if(l.POSITION!==void 0){const d=t.json.accessors[l.POSITION],h=d.min,u=d.max;if(h!==void 0&&u!==void 0){if(r.setX(Math.max(Math.abs(h[0]),Math.abs(u[0]))),r.setY(Math.max(Math.abs(h[1]),Math.abs(u[1]))),r.setZ(Math.max(Math.abs(h[2]),Math.abs(u[2]))),d.normalized){const p=Xt(Se[d.componentType]);r.multiplyScalar(p)}i.max(r)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}a.expandByVector(i)}A.boundingBox=a;const o=new Tn;a.getCenter(o.center),o.radius=a.min.distanceTo(a.max)/2,A.boundingSphere=o}function UA(A,e,t){const n=e.attributes,a=[];function s(o,i){return t.getDependency("accessor",o).then(function(r){A.setAttribute(i,r)})}for(const o in n){const i=Wt[o]||o.toLowerCase();i in A.attributes||a.push(s(n[o],i))}if(e.indices!==void 0&&!A.index){const o=t.getDependency("accessor",e.indices).then(function(i){A.setIndex(i)});a.push(o)}return dt.workingColorSpace!==K&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${dt.workingColorSpace}" not supported.`),Y(A,e),Di(A,e,t),Promise.all(a).then(function(){return e.targets!==void 0?Bi(A,e.targets,t):A})}class Ri{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0,this.workerCreator=null}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const n=this.workersResolve[e];if(n&&n(t),this.queue.length){const{resolve:a,msg:s,transfer:o}=this.queue.shift();this.workersResolve[e]=a,this.workers[e].postMessage(s,o)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise(n=>{const a=this._getIdleWorker();a!==-1?(this._initWorker(a),this.workerStatus|=1<<a,this.workersResolve[a]=n,this.workers[a].postMessage(e,t)):this.queue.push({resolve:n,msg:e,transfer:t})})}dispose(){this.workers.forEach(e=>e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const ki=0,OA=2,xi=1,HA=2,Fi=0,Ti=1,Mi=10,_i=0,jn=9,qn=15,Jn=16,Kn=22,Yn=37,Vn=43,zn=76,Wn=83,Xn=97,Zn=100,$n=103,ea=109,ta=122,Aa=123,na=131,aa=132,sa=133,oa=134,ia=137,ra=138,ca=139,ga=140,la=141,da=142,ha=145,ua=146,fa=148,pa=152,Ia=157,ba=158,Ea=165,Ca=166,Ba=1000054e3,ma=1000054001,Qa=1000054004,wa=1000054005,gA=1000066e3,ya=1000066004;class Ue{constructor(e,t,n,a){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+t,n),this._littleEndian=a,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){const t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,t}_skip(e){return this._offset+=e,this}_scan(e,t=0){const n=this._offset;let a=0;for(;this._dataView.getUint8(this._offset)!==t&&a<e;)a++,this._offset++;return a<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,a)}}const N=[171,75,84,88,32,50,48,187,13,10,26,10];function PA(A){return new TextDecoder().decode(A)}function Li(A){const e=new Uint8Array(A.buffer,A.byteOffset,N.length);if(e[0]!==N[0]||e[1]!==N[1]||e[2]!==N[2]||e[3]!==N[3]||e[4]!==N[4]||e[5]!==N[5]||e[6]!==N[6]||e[7]!==N[7]||e[8]!==N[8]||e[9]!==N[9]||e[10]!==N[10]||e[11]!==N[11])throw new Error("Missing KTX 2.0 identifier.");const t={vkFormat:0,typeSize:1,pixelWidth:0,pixelHeight:0,pixelDepth:0,layerCount:0,faceCount:1,levelCount:0,supercompressionScheme:0,levels:[],dataFormatDescriptor:[{vendorId:0,descriptorType:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],keyValue:{},globalData:null},n=17*Uint32Array.BYTES_PER_ELEMENT,a=new Ue(A,N.length,n,!0);t.vkFormat=a._nextUint32(),t.typeSize=a._nextUint32(),t.pixelWidth=a._nextUint32(),t.pixelHeight=a._nextUint32(),t.pixelDepth=a._nextUint32(),t.layerCount=a._nextUint32(),t.faceCount=a._nextUint32(),t.levelCount=a._nextUint32(),t.supercompressionScheme=a._nextUint32();const s=a._nextUint32(),o=a._nextUint32(),i=a._nextUint32(),r=a._nextUint32(),c=a._nextUint64(),g=a._nextUint64(),l=3*Math.max(t.levelCount,1)*8,d=new Ue(A,N.length+n,l,!0);for(let F=0,M=Math.max(t.levelCount,1);F<M;F++)t.levels.push({levelData:new Uint8Array(A.buffer,A.byteOffset+d._nextUint64(),d._nextUint64()),uncompressedByteLength:d._nextUint64()});const h=new Ue(A,s,o,!0);h._skip(4);const u=h._nextUint16(),p=h._nextUint16(),C=h._nextUint16(),b=h._nextUint16(),I={vendorId:u,descriptorType:p,versionNumber:C,colorModel:h._nextUint8(),colorPrimaries:h._nextUint8(),transferFunction:h._nextUint8(),flags:h._nextUint8(),texelBlockDimension:[h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8()],bytesPlane:[h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8()],samples:[]},B=(b/4-6)/4;for(let F=0;F<B;F++){const M={bitOffset:h._nextUint16(),bitLength:h._nextUint8(),channelType:h._nextUint8(),samplePosition:[h._nextUint8(),h._nextUint8(),h._nextUint8(),h._nextUint8()],sampleLower:Number.NEGATIVE_INFINITY,sampleUpper:Number.POSITIVE_INFINITY};64&M.channelType?(M.sampleLower=h._nextInt32(),M.sampleUpper=h._nextInt32()):(M.sampleLower=h._nextUint32(),M.sampleUpper=h._nextUint32()),I.samples[F]=M}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(I);const f=new Ue(A,i,r,!0);for(;f._offset<r;){const F=f._nextUint32(),M=f._scan(F),q=PA(M);if(t.keyValue[q]=f._nextUint8Array(F-M.byteLength-1),q.match(/^ktx/i)){const At=PA(t.keyValue[q]);t.keyValue[q]=At.substring(0,At.lastIndexOf("\0"))}f._skip(F%4?4-F%4:0)}if(g<=0)return t;const E=new Ue(A,c,g,!0),m=E._nextUint16(),Q=E._nextUint16(),w=E._nextUint32(),S=E._nextUint32(),R=E._nextUint32(),T=E._nextUint32(),ne=[];for(let F=0,M=Math.max(t.levelCount,1);F<M;F++)ne.push({imageFlags:E._nextUint32(),rgbSliceByteOffset:E._nextUint32(),rgbSliceByteLength:E._nextUint32(),alphaSliceByteOffset:E._nextUint32(),alphaSliceByteLength:E._nextUint32()});const z=c+E._offset,ae=z+w,Le=ae+S,se=Le+R,et=new Uint8Array(A.buffer,A.byteOffset+z,w),ve=new Uint8Array(A.buffer,A.byteOffset+ae,S),Ge=new Uint8Array(A.buffer,A.byteOffset+Le,R),tt=new Uint8Array(A.buffer,A.byteOffset+se,T);return t.globalData={endpointCount:m,selectorCount:Q,imageDescs:ne,endpointsData:et,selectorsData:ve,tablesData:Ge,extendedData:tt},t}let Mt,W,Zt;const _t={env:{emscripten_notify_memory_growth:function(A){Zt=new Uint8Array(W.exports.memory.buffer)}}};class vi{init(){return Mt||(Mt=typeof fetch<"u"?fetch("data:application/wasm;base64,"+jA).then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,_t)).then(this._init):WebAssembly.instantiate(Buffer.from(jA,"base64"),_t).then(this._init),Mt)}_init(e){W=e.instance,_t.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!W)throw new Error("ZSTDDecoder: Await .init() before decoding.");const n=e.byteLength,a=W.exports.malloc(n);Zt.set(e,a),t=t||Number(W.exports.ZSTD_findDecompressedSize(a,n));const s=W.exports.malloc(t),o=W.exports.ZSTD_decompress(s,t,a,n),i=Zt.slice(s,s+o);return W.exports.free(a),W.exports.free(s),i}}const jA="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",Gi="display-p3",Ni="display-p3-linear";({...dt.spaces[G]});const Lt=new WeakMap;let vt=0,Gt;class P extends aA{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Ri,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:await e.hasFeatureAsync("texture-compression-etc2"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return e.isWebGPURenderer===!0?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:e.hasFeature("texture-compression-etc2"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),astcHDRSupported:e.extensions.has("WEBGL_compressed_texture_astc")&&e.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new pe(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),n=new pe(this.manager);n.setPath(this.transcoderPath),n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials);const a=n.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,a]).then(([s,o])=>{const i=P.BasisWorker.toString(),r=["/* constants */","let _EngineFormat = "+JSON.stringify(P.EngineFormat),"let _EngineType = "+JSON.stringify(P.EngineType),"let _TranscoderFormat = "+JSON.stringify(P.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(P.BasisFormat),"/* basis_transcoder.js */",s,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join(`
|
|
4
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([r])),this.transcoderBinary=o,this.workerPool.setWorkerCreator(()=>{const c=new Worker(this.workerSourceURL),g=this.transcoderBinary.slice(0);return c.postMessage({type:"init",config:this.workerConfig,transcoderBinary:g},[g]),c})}),vt>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),vt++}return this.transcoderPending}load(e,t,n,a){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const s=new pe(this.manager);s.setPath(this.path),s.setCrossOrigin(this.crossOrigin),s.setWithCredentials(this.withCredentials),s.setResponseType("arraybuffer"),s.load(e,o=>{this.parse(o,t,a)},n,a)}parse(e,t,n){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Lt.has(e))return Lt.get(e).promise.then(t).catch(n);this._createTexture(e).then(a=>t?t(a):null).catch(n)}_createTextureFrom(e,t){const{type:n,error:a,data:{faces:s,width:o,height:i,format:r,type:c,dfdFlags:g}}=e;if(n==="error")return Promise.reject(a);let l;if(t.faceCount===6)l=new oo(s,r,c);else{const d=s[0].mipmaps;l=t.layerCount>1?new io(d,o,i,t.layerCount,r,c):new Mn(d,o,i,r,c)}return l.minFilter=s[0].mipmaps.length===1?be:Et,l.magFilter=be,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=Sa(t),l.premultiplyAlpha=!!(g&xi),l}async _createTexture(e,t={}){const n=Li(new Uint8Array(e)),a=n.vkFormat===gA&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===_i||a&&!this.workerConfig.astcHDRSupported))return Oi(n);const o=t,i=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:o},[e])).then(r=>this._createTextureFrom(r.data,n));return Lt.set(e,{promise:i}),i}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),vt--}}P.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2};P.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25};P.EngineFormat={RGBAFormat:Qe,RGBA_ASTC_4x4_Format:ot,RGB_BPTC_UNSIGNED_Format:bo,RGBA_BPTC_Format:Kt,RGBA_ETC2_EAC_Format:Ln,RGBA_PVRTC_4BPPV1_Format:Jt,RGBA_S3TC_DXT5_Format:Io,RGB_ETC1_Format:po,RGB_ETC2_Format:_n,RGB_PVRTC_4BPPV1_Format:fo,RGBA_S3TC_DXT1_Format:Yt};P.EngineType={UnsignedByteType:k,HalfFloatType:ie,FloatType:Je};P.BasisWorker=function(){let A,e,t;const n=_EngineFormat,a=_EngineType,s=_TranscoderFormat,o=_BasisFormat;self.addEventListener("message",function(u){const p=u.data;switch(p.type){case"init":A=p.config,i(p.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:C,buffers:b,width:I,height:B,hasAlpha:f,format:E,type:m,dfdFlags:Q}=r(p.buffer);self.postMessage({type:"transcode",id:p.id,data:{faces:C,width:I,height:B,hasAlpha:f,format:E,type:m,dfdFlags:Q}},b)}catch(C){console.error(C),self.postMessage({type:"error",id:p.id,error:C.message})}});break}});function i(u){e=new Promise(p=>{t={wasmBinary:u,onRuntimeInitialized:p},BASIS(t)}).then(()=>{t.initializeBasis(),t.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function r(u){const p=new t.KTX2File(new Uint8Array(u));function C(){p.close(),p.delete()}if(!p.isValid())throw C(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let b;if(p.isUASTC())b=o.UASTC;else if(p.isETC1S())b=o.ETC1S;else if(p.isHDR())b=o.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const I=p.getWidth(),B=p.getHeight(),f=p.getLayers()||1,E=p.getLevels(),m=p.getFaces(),Q=p.getHasAlpha(),w=p.getDFDFlags(),{transcoderFormat:S,engineFormat:R,engineType:T}=l(b,I,B,Q);if(!I||!B||!E)throw C(),new Error("THREE.KTX2Loader: Invalid texture");if(!p.startTranscoding())throw C(),new Error("THREE.KTX2Loader: .startTranscoding failed");const ne=[],z=[];for(let ae=0;ae<m;ae++){const Le=[];for(let se=0;se<E;se++){const et=[];let ve,Ge;for(let F=0;F<f;F++){const M=p.getImageLevelInfo(se,F,ae);ae===0&&se===0&&F===0&&(M.origWidth%4!==0||M.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),E>1?(ve=M.origWidth,Ge=M.origHeight):(ve=M.width,Ge=M.height);let q=new Uint8Array(p.getImageTranscodedSizeInBytes(se,F,0,S));const At=p.transcodeImage(q,se,F,ae,S,0,-1,-1);if(T===a.HalfFloatType&&(q=new Uint16Array(q.buffer,q.byteOffset,q.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!At)throw C(),new Error("THREE.KTX2Loader: .transcodeImage failed.");et.push(q)}const tt=h(et);Le.push({data:tt,width:ve,height:Ge}),z.push(tt.buffer)}ne.push({mipmaps:Le,width:I,height:B,format:R,type:T})}return C(),{faces:ne,buffers:z,width:I,height:B,hasAlpha:Q,dfdFlags:w,format:R,type:T}}const c=[{if:"astcSupported",basisFormat:[o.UASTC],transcoderFormat:[s.ASTC_4x4,s.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],engineType:[a.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[s.BC7_M5,s.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],engineType:[a.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[s.BC1,s.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],engineType:[a.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[s.ETC1,s.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],engineType:[a.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[s.ETC1],engineFormat:[n.RGB_ETC1_Format],engineType:[a.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[s.PVRTC1_4_RGB,s.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],engineType:[a.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[o.UASTC_HDR],transcoderFormat:[s.BC6H],engineFormat:[n.RGB_BPTC_UNSIGNED_Format],engineType:[a.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[s.RGBA32,s.RGBA32],engineFormat:[n.RGBAFormat,n.RGBAFormat],engineType:[a.UnsignedByteType,a.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[o.UASTC_HDR],transcoderFormat:[s.RGBA_HALF],engineFormat:[n.RGBAFormat],engineType:[a.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],g={[o.ETC1S]:c.filter(u=>u.basisFormat.includes(o.ETC1S)).sort((u,p)=>u.priorityUASTC-p.priorityUASTC),[o.UASTC]:c.filter(u=>u.basisFormat.includes(o.UASTC)).sort((u,p)=>u.priorityUASTC-p.priorityUASTC),[o.UASTC_HDR]:c.filter(u=>u.basisFormat.includes(o.UASTC_HDR)).sort((u,p)=>u.priorityHDR-p.priorityHDR)};function l(u,p,C,b){const I=g[u];for(let B=0;B<I.length;B++){const f=I[B];if(f.if&&!A[f.if]||!f.basisFormat.includes(u)||b&&f.transcoderFormat.length<2||f.needsPowerOfTwo&&!(d(p)&&d(C)))continue;const E=f.transcoderFormat[b?1:0],m=f.engineFormat[b?1:0],Q=f.engineType[0];return{transcoderFormat:E,engineFormat:m,engineType:Q}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function d(u){return u<=2?!0:(u&u-1)===0&&u!==0}function h(u){if(u.length===1)return u[0];let p=0;for(let I=0;I<u.length;I++){const B=u[I];p+=B.byteLength}const C=new Uint8Array(p);let b=0;for(let I=0;I<u.length;I++){const B=u[I];C.set(B,b),b+=B.byteLength}return C}};const Ui=new Set([Qe,Vt,Pe,He]),Nt={[ea]:Qe,[$n]:Pe,[Zn]:He,[Xn]:Qe,[Wn]:Pe,[zn]:He,[Vn]:Qe,[Yn]:Qe,[Kn]:Pe,[Jn]:Pe,[qn]:He,[jn]:He,[Aa]:Vt,[ta]:Vt,[pa]:Ln,[fa]:_n,[gA]:ot,[ba]:ot,[Ia]:ot,[ya]:Rt,[Ca]:Rt,[Ea]:Rt,[oa]:Yt,[sa]:Yt,[aa]:TA,[na]:TA,[ra]:FA,[ia]:FA,[ga]:lo,[ca]:go,[da]:co,[la]:ro,[ua]:Kt,[ha]:Kt,[wa]:Jt,[ma]:Jt,[Qa]:xA,[Ba]:xA},Be={[ea]:Je,[$n]:Je,[Zn]:Je,[Xn]:ie,[Wn]:ie,[zn]:ie,[Vn]:k,[Yn]:k,[Kn]:k,[Jn]:k,[qn]:k,[jn]:k,[Aa]:Gn,[ta]:vn,[pa]:k,[fa]:k,[gA]:ie,[ba]:k,[Ia]:k,[ya]:ie,[Ca]:k,[Ea]:k,[oa]:k,[sa]:k,[aa]:k,[na]:k,[ra]:k,[ia]:k,[ga]:k,[ca]:k,[da]:k,[la]:k,[ua]:k,[ha]:k,[wa]:k,[ma]:k,[Qa]:k,[Ba]:k};async function Oi(A){const{vkFormat:e}=A;if(Nt[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat: "+e);Be[e]===void 0&&console.warn('THREE.KTX2Loader: Missing ".type" for vkFormat: '+e);let t;A.supercompressionScheme===OA&&(Gt||(Gt=new Promise(async o=>{const i=new vi;await i.init(),o(i)})),t=await Gt);const n=[];for(let o=0;o<A.levels.length;o++){const i=Math.max(1,A.pixelWidth>>o),r=Math.max(1,A.pixelHeight>>o),c=A.pixelDepth?Math.max(1,A.pixelDepth>>o):0,g=A.levels[o];let l;if(A.supercompressionScheme===ki)l=g.levelData;else if(A.supercompressionScheme===OA)l=t.decode(g.levelData,g.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let d;Be[e]===Je?d=new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):Be[e]===ie?d=new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):Be[e]===Gn||Be[e]===vn?d=new Uint32Array(l.buffer,l.byteOffset,l.byteLength/Uint32Array.BYTES_PER_ELEMENT):d=l,n.push({data:d,width:i,height:r,depth:c})}const a=A.levelCount===0||n.length>1;let s;if(Ui.has(Nt[e]))s=A.pixelDepth===0?new ho(n[0].data,A.pixelWidth,A.pixelHeight):new uo(n[0].data,A.pixelWidth,A.pixelHeight,A.pixelDepth),s.minFilter=a?Qn:ht,s.magFilter=ht,s.generateMipmaps=A.levelCount===0;else{if(A.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");s=new Mn(n,A.pixelWidth,A.pixelHeight),s.minFilter=a?Et:be,s.magFilter=be}return s.mipmaps=n,s.type=Be[e],s.format=Nt[e],s.colorSpace=Sa(A),s.needsUpdate=!0,Promise.resolve(s)}function Sa(A){const e=A.dataFormatDescriptor[0];return e.colorPrimaries===Ti?e.transferFunction===HA?G:K:e.colorPrimaries===Mi?e.transferFunction===HA?Gi:Ni:e.colorPrimaries===Fi?kA:(console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),kA)}let Hi="/";function Da(A){return A.startsWith("/")||A.startsWith("http")||A.startsWith("data:")||A.startsWith("blob:")?A:Hi+A}const Xe=new Eo;Xe.setURLModifier(Da);new mn(Xe);const Ra=new Jo(Xe);Ra.setDecoderPath("/jsm/libs/draco/gltf/");const ka=new P(Xe);ka.setTranscoderPath("/jsm/libs/basis/");const Te=new Yo(Xe);Te.setDRACOLoader(Ra);Te.setKTX2Loader(ka);Te.setMeshoptDecoder(qo);function Pi(A){return Da(A)}const nt=new Map;async function xa(A,e){let t=nt.get(A);!t&&e&&(t=Promise.resolve(e),nt.set(A,t)),t||(t=fetch(Pi(A)).then(async n=>{if(!n.ok)throw new Error(`Failed to load Gaussian splat: ${A} (${n.status} ${n.statusText})`);return new Uint8Array(await n.arrayBuffer())}),nt.set(A,t));try{const[{SplatMesh:n},a]=await Promise.all([x(()=>import("./spark.module-DMQ9J7rT.js"),__vite__mapDeps([36,12,15])),t]),s=new n({fileBytes:a,fileName:A,raycastable:!0});await s.initialized,Ye(s,"gaussianSplat",{src:A,numSplats:s.numSplats});const o=s.getBoundingBox();if(!o.isEmpty()){const i=o.getSize(new y).multiplyScalar(1.5),r=o.getCenter(new y),c=new De(new Co(i.x,i.y,i.z));c.name="__vgai_splat_bounds",c.position.copy(r),c.visible=!1,c.raycast=()=>{},Ye(c,"engineInternal",!0),s.add(c)}return s}catch(n){throw nt.delete(A),n}}const qA=16,ji=3e3,qi=500;function hg(A,e){return e-A>=qi}function ug(A){let e=!1;return A.traverse(t=>{!e&&le(t,"gaussianSplat")&&(e=!0)}),e}function Ji(A){A.autoUpdate=!1,A.sortDirty=!1,A.updateTimeoutId!==-1&&(clearTimeout(A.updateTimeoutId),A.updateTimeoutId=-1),A.sortTimeoutId!==-1&&(clearTimeout(A.sortTimeoutId),A.sortTimeoutId=-1);let e=ji;const t=()=>{if(A.sorting){e>0?(e-=qA,setTimeout(t,qA)):console.warn("SparkRenderer did not become idle; skipped worker termination.");return}A.dispose()};t()}const Ki=.45,Fa=.25,ft=new WeakMap;function Ze(A,e){let t=ft.get(e);t||(t=vs(e),ft.set(e,t)),A.environment=t.texture,A.environmentIntensity=Ki}function mt(A){const e=ft.get(A);e&&(ft.delete(A),e.dispose())}const at=128;let it=null;const Yi=new Set(["glb","gltf","fbx","obj","dae","stl","ply","spz","bvh","3ds"]);function $t(A){const e=A.split(/[?#]/,1)[0].toLowerCase(),t=e.slice(e.lastIndexOf(".")+1);return Yi.has(t)?t:void 0}class Vi{renderer;scene;camera;cache=new Map;pending=new Map;sparkRenderer=null;constructor(){const e=document.createElement("canvas");e.width=at,e.height=at,this.renderer=ce(new ge({canvas:e,alpha:!0,antialias:!0,preserveDrawingBuffer:!0})),this.renderer.setSize(at,at),this.renderer.setPixelRatio(1),this.renderer.outputColorSpace=G,this.renderer.toneMapping=Fe,this.renderer.toneMappingExposure=1,this.scene=new rA,Ze(this.scene,this.renderer),this.scene.add(new mo(16777215,.8*Fa));const t=new ye(16777215,1.5);t.position.set(3,5,4),this.scene.add(t);const n=new ye(16772829,.4);n.position.set(-3,-1,2),this.scene.add(n),this.camera=new Ct(35,1,.01,1e3)}async render(e){const t=typeof e=="string"?{url:e}:e,n=t.format??$t(t.url);if(!n)throw new Error(`No thumbnail loader for ${t.url}`);const a={...t,format:n},s=JSON.stringify(a),o=this.cache.get(s);if(o)return o;const i=this.pending.get(s);if(i)return i;const r=this._render(a);this.pending.set(s,r);try{const c=await r;return this.cache.set(s,c),c}finally{this.pending.delete(s)}}async _render(e){const t=Zi(await Xi(e));if(this.scene.add(t),e.format==="spz"&&!this.sparkRenderer){const{SparkRenderer:l}=await x(async()=>{const{SparkRenderer:d}=await import("./spark.module-DMQ9J7rT.js");return{SparkRenderer:d}},__vite__mapDeps([36,12,15]));this.sparkRenderer=new l({renderer:this.renderer,enableLod:!1}),this.scene.add(this.sparkRenderer)}const n=Wi(t);if(n.isEmpty())throw this.scene.remove(t),new Error("Model contains no previewable geometry.");const a=n.getCenter(new y),s=n.getBoundingSphere(new Tn),o=this.camera.fov*Math.PI/180,i=Math.max(s.radius,1e-4)/Math.sin(o/2)*1.18,r=new y(.65,.45,.65).normalize();this.camera.position.set(a.x+i*r.x,a.y+i*r.y,a.z+i*r.z),this.camera.lookAt(a),this.camera.near=i*.01,this.camera.far=i*20,this.camera.updateProjectionMatrix(),e.background==="neutral"?this.renderer.setClearColor(2106410,1):this.renderer.setClearColor(0,0),this.renderer.clear(),this.renderer.render(this.scene,this.camera);const c=zi(this.renderer.domElement,e.background==="neutral"),g=e.output==="webp"?c.toDataURL("image/webp",.86):c.toDataURL("image/png");return this.scene.remove(t),t.traverse(l=>{le(l,"gaussianSplat")&&l.dispose();const d=l;if(d.geometry&&d.geometry.dispose(),d.material){const h=Array.isArray(d.material)?d.material:[d.material];for(const u of h)"map"in u&&u.map instanceof Z&&u.map.dispose(),"normalMap"in u&&u.normalMap instanceof Z&&u.normalMap.dispose(),"emissiveMap"in u&&u.emissiveMap instanceof Z&&u.emissiveMap.dispose(),"aoMap"in u&&u.aoMap instanceof Z&&u.aoMap.dispose(),"roughnessMap"in u&&u.roughnessMap instanceof Z&&u.roughnessMap.dispose(),"metalnessMap"in u&&u.metalnessMap instanceof Z&&u.metalnessMap.dispose(),u.dispose()}}),g}dispose(){this.sparkRenderer&&(this.scene.remove(this.sparkRenderer),Ji(this.sparkRenderer),this.sparkRenderer=null),this.renderer.dispose(),this.renderer.forceContextLoss(),this.cache.clear(),it=null}}function zi(A,e){const t=document.createElement("canvas");t.width=A.width,t.height=A.height;const n=t.getContext("2d",{willReadFrequently:!0});if(!n)return A;n.drawImage(A,0,0);const a=n.getImageData(0,0,t.width,t.height),s=new Uint8Array(t.width*t.height);let o=0;for(let l=0;l<s.length;l++){const d=l*4;(e?Math.abs(a.data[d]-32)>3||Math.abs(a.data[d+1]-36)>3||Math.abs(a.data[d+2]-42)>3:a.data[d+3]>8)&&(s[l]=1,o++)}const i=o/s.length;if(i<1e-4)return t;const r=new Uint8ClampedArray(a.data);if(e)for(let l=0;l<s.length;l++){if(!s[l])continue;const d=l*4,h=r[d]*.2126+r[d+1]*.7152+r[d+2]*.0722;if(h>=88)continue;const u=88-h;a.data[d]=Math.min(255,r[d]+u),a.data[d+1]=Math.min(255,r[d+1]+u),a.data[d+2]=Math.min(255,r[d+2]+u)}const c=i<.004?2:i<.02?1:0;let g=s;for(let l=0;l<c;l++){const d=g.slice(),h=new Uint8ClampedArray(a.data);for(let u=1;u<t.height-1;u++)for(let p=1;p<t.width-1;p++){const C=u*t.width+p;if(g[C])continue;const b=[C-1,C+1,C-t.width,C+t.width].find(f=>g[f]);if(b===void 0)continue;const I=C*4,B=b*4;a.data.set(h.subarray(B,B+4),I),d[C]=1}g=d}return n.putImageData(a,0,0),t}function Wi(A){A.updateWorldMatrix(!0,!0);const e=new ke,t=new ke;return A.traverseVisible(n=>{if(le(n,"gaussianSplat")){t.copy(n.getBoundingBox()).applyMatrix4(n.matrixWorld),e.union(t);return}const a=n;a.geometry&&(a.geometry.boundingBox||a.geometry.computeBoundingBox(),a.geometry.boundingBox&&(t.copy(a.geometry.boundingBox).applyMatrix4(n.matrixWorld),e.union(t)))}),e}async function Xi(A){switch(A.format){case"glb":case"gltf":{const e=await Te.loadAsync(A.url);return e.scene.animations=[...e.animations],e.scene}case"fbx":{const{FBXLoader:e}=await x(async()=>{const{FBXLoader:t}=await import("./FBXLoader-CsdO937F.js");return{FBXLoader:t}},__vite__mapDeps([37,12,15]));return new e().loadAsync(A.url)}case"obj":{const{OBJLoader:e}=await x(async()=>{const{OBJLoader:a}=await import("./OBJLoader-DPi99VIm.js");return{OBJLoader:a}},__vite__mapDeps([38,12])),t=A.materialUrl??await tr(A.url),n=new e;if(t){const{MTLLoader:a}=await x(async()=>{const{MTLLoader:o}=await import("./MTLLoader-DNh2pFDc.js");return{MTLLoader:o}},__vite__mapDeps([39,12])),s=await new a().loadAsync(t);s.preload(),n.setMaterials(s)}return n.loadAsync(A.url)}case"dae":{const{ColladaLoader:e}=await x(async()=>{const{ColladaLoader:a}=await import("./ColladaLoader-BpvxwqkB.js");return{ColladaLoader:a}},__vite__mapDeps([40,12])),t=await new e().loadAsync(A.url),n=t.animations;return n&&(t.scene.animations=[...n]),t.scene}case"stl":{const{STLLoader:e}=await x(async()=>{const{STLLoader:n}=await import("./STLLoader-BaJkM-k1.js");return{STLLoader:n}},__vite__mapDeps([41,12])),t=await new e().loadAsync(A.url);return new De(t,new ut({color:7710680,roughness:.75}))}case"ply":{const{PLYLoader:e}=await x(async()=>{const{PLYLoader:a}=await import("./PLYLoader-Cx9Yc9xe.js");return{PLYLoader:a}},__vite__mapDeps([42,12])),t=await new e().loadAsync(A.url);if(t.index||t.hasAttribute("normal"))return t.hasAttribute("normal")||t.computeVertexNormals(),new De(t,new ut({color:t.hasAttribute("color")?16777215:12112027,vertexColors:t.hasAttribute("color"),roughness:.8,side:yn}));t.computeBoundingBox();const n=t.boundingBox?.getSize(new y).length()??1;return new oA(t,new wn({color:t.hasAttribute("color")?16777215:12112027,vertexColors:t.hasAttribute("color"),size:Math.max(n/220,1e-4),sizeAttenuation:!0}))}case"spz":return xa(A.url);case"bvh":{const{BVHLoader:e}=await x(async()=>{const{BVHLoader:s}=await import("./BVHLoader-msuIvJVn.js");return{BVHLoader:s}},__vite__mapDeps([43,12])),t=await new e().loadAsync(A.url),n=t.skeleton.bones[0];if(!n)throw new Error("BVH contains no skeleton root.");const a=new $;return a.animations=[t.clip],a.add(n),a}case"3ds":{const{TDSLoader:e}=await x(async()=>{const{TDSLoader:t}=await import("./TDSLoader-BskhMiUy.js");return{TDSLoader:t}},__vite__mapDeps([44,12]));return new e().loadAsync(A.url)}}}function Zi(A){if($i(A))return A;A.updateWorldMatrix(!0,!0);const e=new Bo(A),t=e.geometry.getAttribute("position");if(!t||t.count===0)return e.dispose(),A;e.name="Asset Editor skeleton preview",e.frustumCulled=!1;const n=new $;return n.name=A.name,n.animations=[...A.animations],n.add(A,e),n.updateWorldMatrix(!0,!0),e.updateMatrixWorld(!0),n}function $i(A){let e=!1;return A.traverseVisible(t=>{!e&&er(t)&&(e=!0)}),e}function er(A){const e=A;if(e.isSprite)return e.material.visible;const t=A,n=A,a=A;if(!t.isMesh&&!n.isLine&&!a.isPoints)return!1;const s=A,o=A;if(o.isInstancedMesh&&o.count===0)return!1;const i=Array.isArray(s.material)?s.material:[s.material];if(i.length===0||i.every(c=>!c?.visible))return!1;const r=s.geometry?.getAttribute("position");return!!(r&&r.count>0&&s.geometry.drawRange.count!==0)}async function tr(A){const e=A.split(/[?#]/,1)[0],t=`${e.slice(0,e.lastIndexOf("."))}.mtl`;try{return(await fetch(t,{method:"HEAD"})).ok?t:void 0}catch{return}}function Ar(){return it||(it=new Vi),it}function nr(){return ls({accepts:A=>$t(A)!==void 0,render:A=>Ar().render({url:A,format:$t(A),background:"neutral",output:"webp"})})}const ar=v.lazy(()=>x(()=>import("./Object3DDocumentToolbar-PGYkZEwr.js"),__vite__mapDeps([45,1,2,4,5,6,7,8,9,10,11,22,12,17,46,15,16,18])).then(A=>({default:A.Object3DDocumentToolbar}))),Ke=new Map,rt=new Map;let Ta=0;const eA=new Set;function JA(){Ta++;for(const A of eA)A()}function fg(A,e={}){Ke.set(A.documentId,A);const t=ds(A),n=hs(A.documentId,{...sr(A),...e});return JA(),()=>{n(),t(),Ke.get(A.documentId)===A&&(Ke.delete(A.documentId),JA())}}const KA=([A,e,t])=>({x:A,y:e,z:t});function sr(A){return{read:()=>{const e=A.cameraPose(),t=A.presentation();return{camera:{position:KA(e.position),target:KA(e.target),...e.fov?{fov:e.fov}:{}},diagnostic:t.skeleton?"skeleton":t.mode,grid:un(A.documentId)}},setDiagnostic:e=>{if(e==="preview"||e==="rendered"){const t=Pt(A.documentId)?.stageKind;if(!t||hn(t)?.modes?.[e]?.lighting===void 0)return!1}return A.setSkeleton(e==="skeleton"),A.setBounds(e==="bounds"),A.setMode(e==="skeleton"||e==="bounds"?"solid":e),!0},setCamera:e=>(typeof e!="string"?A.setCameraPose(e.position,e.target,e.fov):e==="perspective"?(A.setProjection("perspective"),A.frame()):A.setViewPreset(e),!0),frame:e=>e==="selection"?A.frameSelection():(A.frame(),!0),selection:{read:()=>A.selection(),apply:e=>A.select(e)},idsNamed:e=>{const t=[];return A.root.traverse(n=>{if(n.name!==e)return;const a=A.idForObject(n);a&&t.push(a)}),t},setTransformMode:e=>A.viewport.setTransformMode(e),capture:e=>A.captureImage(e??512),prepare:()=>or(A.documentId),HeaderControls:ar}}function Ma(A){return Ke.get(A)??null}function pg(A,e){return rt.set(A,e),()=>{rt.get(A)===e&&rt.delete(A)}}async function or(A){await rt.get(A)?.()}function ir(){return[...Ke.values()]}function Ig(A){return eA.add(A),()=>eA.delete(A)}function bg(){return Ta}const lA=31,Eg=30;function dA(A){return(A.layers.mask&1<<lA)!==0||!!yA(A,"editorHelper")||!!yA(A,"engineInternal")}function Cg(A){let e=A;for(;e;){if(dA(e))return!0;e=e.parent}return!1}function Qt(A,e,t){return Un(A.hierarchy,t)??e.get(t)??null}function _a(A){const e=te(A,"entityId");return typeof e=="string"&&e?e:void 0}function La(A){return _a(A)!==void 0}function Bg(A){let e=A??null;for(;e&&!La(e);)e=e.parent;return e}function mg(A,e){Ye(A,"entityId",e)}function rr(A,e=La){if(A.isLOD)return A;const t=[...A.children];for(;t.length>0;){const n=t.pop();if(!e(n)){if(n.isLOD)return n;t.push(...n.children)}}return null}const cr=1e20,gr=2e20;function lr(A,e){const t=A.fog;if(!t){e();return}const n=t.isFog?t:null,a=t.isFogExp2?t:null,s=n?.near,o=n?.far,i=a?.density;n&&(n.near=cr,n.far=gr),a&&(a.density=0);try{e()}finally{n&&s!==void 0&&o!==void 0&&(n.near=s,n.far=o),a&&i!==void 0&&(a.density=i)}}const dr=256;class we{constructor(e){this.shell=e}_scene=null;_adoptionStack=[];_objectMap=new Map;_renderer=null;_camera=null;_batchedRenderer=null;_lastThumbnailTime=0;_lastEditorStateSaveTime=0;_orbitTarget=null;_gizmoEpoch=0;_objectMapParentChangedAt=new Map;_objectMapFullChangeEpoch=0;_objectMapMembershipChangedAt=new Map;_objectMapMembershipFullChangeEpoch=0;_objectMapMembershipHistoryFloor=0;_showStats=!1;_shadingMode="solid";_statePersistence=null;_vertexSnapActive=!1;_composerVersion=0;bindScene(e,t,n,a){const s=this._adoptionStack[0];s?s.scene=e:this._scene=e,this._renderer=t??null,this._batchedRenderer=n??null,a&&(this._camera=a)}setOrbitTarget(e){this._orbitTarget=e}setViewportCamera(e){this._camera=e}attachStatePersistence(e){if(this._statePersistence!==e){if(this._statePersistence)throw new Error("EditorStore is already attached to a state persistence.");this._statePersistence=e}}get sceneCameraLookup(){return this._sceneCameraLookup}_sceneCameraLookup=null;focusOnScene(e){this._sceneCameraLookup=e??null,this.shell.focusOnScene()}get cameraPose(){if(!this._camera)return null;const e=this._camera.fov;return{position:this._camera.position.clone(),target:this._orbitTarget?this._orbitTarget.clone():new y,fov:typeof e=="number"?e:0}}get objectMap(){return this._objectMap}get scene(){return this._scene}get composerVersion(){return this._composerVersion}get gizmoEpoch(){return this._gizmoEpoch}ingestObjectMapChangesSince(e){if(e<0||e>this._gizmoEpoch||e<this._objectMapFullChangeEpoch)return null;const t=new Set;for(const[n,a]of this._objectMapParentChangedAt)a>e&&t.add(n);return{epoch:this._gizmoEpoch,changedParentIds:t}}ingestObjectMapMembershipChangesSince(e){if(e<0||e>this._gizmoEpoch||e<this._objectMapMembershipFullChangeEpoch||e<this._objectMapMembershipHistoryFloor)return null;const t=new Set;for(const[n,a]of this._objectMapMembershipChangedAt)a>e&&t.add(n);return{epoch:this._gizmoEpoch,changedIds:t}}isSkeletonVisible(e){return!!te(this._objectMap.get(e),"skeletonVisible")}setSkeletonVisible(e,t){const n=this._objectMap.get(e);n&&(Ye(n,"skeletonVisible",t),n.traverse(a=>{te(a,"editorHelperType")==="skeletons"&&(Ye(a,"skeletonEnabled",t),a.visible=t||this.shell.helperVisibility.skeletons)}),this.shell.notifyChange())}get showStats(){return this._showStats}get shadingMode(){return this._shadingMode}notifyIngestObjectMapEdit(e){if(this._gizmoEpoch++,e===void 0||e.rootsChanged)this._objectMapFullChangeEpoch=this._gizmoEpoch,this._objectMapParentChangedAt.clear();else for(const n of e.changedParentIds)this._objectMapParentChangedAt.set(n,this._gizmoEpoch);if(e?.addedIds===void 0||e.removedIds===void 0)this._objectMapMembershipFullChangeEpoch=this._gizmoEpoch,this._objectMapMembershipChangedAt.clear();else{for(const a of e.addedIds)this._objectMapMembershipChangedAt.set(a,this._gizmoEpoch);for(const a of e.removedIds)this._objectMapMembershipChangedAt.set(a,this._gizmoEpoch);const n=Math.max(0,this._gizmoEpoch-dr);if(n>this._objectMapMembershipHistoryFloor){this._objectMapMembershipHistoryFloor=n;for(const[a,s]of this._objectMapMembershipChangedAt)s<=n&&this._objectMapMembershipChangedAt.delete(a)}}const t=e===void 0||e.rootsChanged||[...e.addedIds??[],...e.removedIds??[]].some(n=>this.shell.selectedEntityIds.has(n));this.shell.notifyChange("content",t?"shell":"object-map",!1)}_ecsSyncTransform=null;setEcsSyncTransform(e){this._ecsSyncTransform=e}enterPlayScene(e,t,n){this._adoptionStack.push({scene:this._scene,objectMap:this._objectMap,extras:this._captureAdoptionExtras(),selection:new Set(this.shell.selectedEntityIds),imageConfig:this._adoptedImageConfig}),this._scene=e,this._applyAdoptedImageConfig(t);const a=n?new Map(n):(()=>{const s=new Map,o=i=>{if(dA(i))return;const r=_a(i);r!==void 0&&s.set(r,i);for(const c of i.children)o(c)};for(const i of e.children)o(i);return s})();this._objectMap=a,this.shell.applySelectionBeforePresentation([...this.shell.selectedEntityIds].filter(s=>a.has(s))),this._lodForcedLevels.clear(),this._composerVersion++,this.shell.notifyChange()}get hasAdoptedScene(){return this._adoptionStack.length>0}exitPlayScene(){const e=this._adoptionStack.pop();e&&(this._scene=e.scene,this._objectMap=e.objectMap,this._applyAdoptedImageConfig(e.imageConfig),this._restoreAdoptionExtras(e.extras),this.shell.applySelectionBeforePresentation([...e.selection]),this._composerVersion++,this.shell.notifyChange())}releaseAdoptedScene(e){if(this._scene===e){this.exitPlayScene();return}const t=this._adoptionStack.findIndex(n=>n.scene===e);t!==-1&&this._adoptionStack.splice(t,1)}_adoptedImageConfig;get adoptedImageConfig(){return this._adoptedImageConfig}_applyAdoptedImageConfig(e){e!==this._adoptedImageConfig&&(this._adoptedImageConfig=e,this._composerVersion++)}get isAdoptedSceneActive(){return this._adoptionStack.length>0}get vertexSnapActive(){return this._vertexSnapActive}setVertexSnapActive(e){this._vertexSnapActive=e,this.shell.notifyChange()}static THUMBNAIL_INTERVAL_MS=6e4;static THUMBNAIL_SIZE=256;_renderViewportImage(e,t){if(!this._renderer||!this._scene||!this._camera)return null;const n=typeof e=="number"?e:e.width,a=typeof e=="number"?e:e.height;if(!Number.isFinite(n)||n<1||!Number.isFinite(a)||a<1)return null;const s=n*2,o=a*2,i=this._renderer,r=new MA(s,o,{type:ie}),c=new MA(s,o),g=i.getRenderTarget(),l=i.getPixelRatio(),d=this._camera,h=d.layers.mask,u=d instanceof Ct?d:null,p=u?.aspect;t?d.layers.enableAll():(d.layers.disableAll(),d.layers.enable(0));try{u&&(u.aspect=n/a,u.updateProjectionMatrix()),i.setPixelRatio(1),i.setRenderTarget(r),lr(this._scene,()=>i.render(this._scene,d)),Gs().render(i,c,r,0,!1)}finally{i.setRenderTarget(g),i.setPixelRatio(l),d.layers.mask=h,u&&p!==void 0&&(u.aspect=p,u.updateProjectionMatrix())}const C=s*4,b=new Uint8Array(C*o);i.readRenderTargetPixels(c,0,0,s,o,b),c.dispose(),r.dispose();const I=document.createElement("canvas");I.width=s,I.height=o;const B=I.getContext("2d"),f=B.createImageData(s,o);for(let Q=0;Q<o;Q++){const w=(o-1-Q)*C,S=Q*C;f.data.set(b.subarray(w,w+C),S)}B.putImageData(f,0,0);const E=document.createElement("canvas");return E.width=n,E.height=a,E.getContext("2d").drawImage(I,0,0,n,a),E.toDataURL("image/png")}_captureThumbnail(){const e=Date.now();if(e-this._lastThumbnailTime<we.THUMBNAIL_INTERVAL_MS)return;this._lastThumbnailTime=e;const t=this._renderViewportImage(we.THUMBNAIL_SIZE,!1);t&&this._statePersistence?.saveThumbnail?.(t)}captureViewportImage(e=we.THUMBNAIL_SIZE){return this._renderViewportImage(e,!0)}viewportCanvas(){return this._renderer?.domElement??null}static EDITOR_STATE_INTERVAL_MS=6e4;_saveEditorStateIfDue(){if(!this._statePersistence)return;const e=Date.now();if(e-this._lastEditorStateSaveTime<we.EDITOR_STATE_INTERVAL_MS)return;this._lastEditorStateSaveTime=e;const t={transformMode:this.shell.transformMode,transformSpace:this.shell.transformSpace,snapEnabled:this.shell.snapEnabled,snapValues:this.shell.snapValues,preserveChildrenTransform:this.shell.preserveChildrenTransform,pivotMode:this.shell.pivotMode,gizmoAnchor:this.shell.gizmoAnchor,showHelpers:this.shell.showHelpers,helperVisibility:{...this.shell.helperVisibility},showStats:this._showStats,shadingMode:this._shadingMode};if(Object.assign(t,this._editorStateExtras()),this._camera){const n=this._camera;t.camera={position:n.position.toArray(),target:this._orbitTarget?this._orbitTarget.toArray():[0,0,0]}}this._statePersistence.save(t)}_lodForcedLevels=new Map;get lodForcedLevels(){return this._lodForcedLevels}getLodForcedLevel(e){return this._lodForcedLevels.get(e)??null}setLodForcedLevel(e,t){if(t===null){this._lodForcedLevels.delete(e);const n=this._objectMap.get(e),a=new Set(this._objectMap.values()),s=n?rr(n,o=>a.has(o)):null;s&&(s.autoUpdate=!0)}else this._lodForcedLevels.set(e,t);this.shell.notifyChange()}toggleStats(){this._showStats=!this._showStats,this.shell.notifyChange()}setShadingMode(e){this._shadingMode=e,this.shell.notifyChange()}_captureAdoptionExtras(){}_restoreAdoptionExtras(e){}_editorStateExtras(){return{}}}const YA=new WeakMap;function re(A){let e=YA.get(A);return e||(e=new we(A),YA.set(A,e)),e}function hr(A){return A===null?null:re(A)}function $e(){return hr(us())}async function VA(A){const e=new Image;return e.src=A,await e.decode(),e}function ur(){return fs((A,e)=>{const t=$e();if(t&&t.viewportCanvas()===A)return(async()=>{const a=await ps(A);if(a)return a;const s=t.captureViewportImage(e);return s?VA(s):null})();const n=ir().find(a=>a.renderer.domElement===A);return n?(async()=>{const a=await n.requestPresentedFrame();if(a)return a;const s=n.captureImage(e);return s?VA(s):null})():null})}function fr(A){return va(A)!==void 0}function pr(A){const e=te(A,"authoringInstance");return typeof e=="string"&&e?e:void 0}function Ir(A){const e=A?.userData?.oid;return typeof e=="string"&&e?e:void 0}function va(A){const e=pr(A);if(e!==void 0)return te(A?.parent,"authoringInstance")===e?void 0:e}function br(A){const e=A?.__vgaiOid;return typeof e=="string"&&e?e:void 0}function Qg(A,e){return e===0?A:`${A}#${e}`}function wg(A){return va(A)??br(A)??Ir(A)}function Er(A){const e=Ns(A);if(e||nA(A)||te(A,"authoringRoot")===!0||!fr(A))return e;const t=te(A,"authoringComponent");return typeof t=="string"&&t?t:void 0}function Cr(A){if(typeof A.object3D!="function")return Is;const t=new Map;return n=>{if(t.has(n))return t.get(n);const a=Un(A,n),s=a?{componentRoot:Er(a),authoredEntity:te(a,"authoringRoot")===!0,builtInternal:nA(a)}:void 0;return t.set(n,s),s}}const Br=1e-4,mr="World-anchored — content is placed in world space by the game each frame; moving this container offsets future placements away from their source.";function Ga(A){if(!A)return 0;const e=A;if(e.isInstancedMesh!==!0)return 0;const t=e.count;return typeof t=="number"&&t>0?t:0}function Qr(A){const e=A.elements;for(let t=0;t<16;t++){const n=t%5===0?1:0,a=e[t];if(!Number.isFinite(a)||Math.abs(a-n)>Br)return!1}return!0}const zA=new ke,WA=new y;function wr(A,e){const t=Ga(A);if(t===0)return null;const n=yr(A,e);return{units:t,detail:Na(t),worldAnchored:n,note:n?mr:null}}function yr(A,e){if(!e||e.isEmpty()||!Qr(A.matrixWorld))return!1;const t=A.geometry;return t.boundingBox===null&&t.computeBoundingBox(),t.boundingBox?(zA.copy(t.boundingBox),e.getCenter(WA),!zA.containsPoint(WA)):!1}function Sr(A){const e=Ga(A);return e===0?null:Na(e)}function Na(A){return`${A} instanced unit${A===1?"":"s"}`}function Dr(){return bs({detail:(A,e,t)=>Sr(Qt(A,re(t).objectMap,e)),marks:A=>Cr(A),structureLog:A=>{const e=re(A);return{epoch:()=>e.gizmoEpoch,parentChangesSince:t=>e.ingestObjectMapChangesSince(t)}}})}function Rr(A){return Math.min(1600,Math.max(800,900+A*25))}function kr(A){return A<.5?4*A*A*A:1-(-2*A+2)**3/2}function Ua(A,e,t=new y(0,1,0)){const n=new y().subVectors(e,A),a=n.length();if(a<1e-6)return[A.clone(),A.clone(),e.clone(),e.clone()];const s=Math.min(a*.18,6),o=new y().crossVectors(n,t);o.lengthSq()>1e-9?o.normalize().multiplyScalar(Math.min(a*.08,2.5)):o.set(0,0,0);const i=t.clone().normalize().multiplyScalar(s),r=A.clone().addScaledVector(n,.3).add(i).add(o),c=e.clone().addScaledVector(n,-.3).addScaledVector(i,.6).addScaledVector(o,.5);return[A.clone(),r,c,e.clone()]}const xr=1<<31;function Fr(A){return(A.layers.mask&xr)!==0||/gizmo/i.test(A.name)}function Oa(A){if(Fr(A))return null;if(A.isCamera)return A;for(const e of A.children){const t=Oa(e);if(t)return t}return null}function Tr(A,e,t){const n=new y,a=new We;return e.getWorldPosition(n),e.getWorldQuaternion(a),{entityId:A,position:n.toArray(),quaternion:a.toArray(),fov:t}}function Mr(A){for(const[e,t]of A.objectMap){const n=Oa(t);if(!n)continue;const a=n;return Tr(e,n,a.isPerspectiveCamera?a.fov:60)}return null}function _r(A){A.curve=new Nn(Ua(A.startPos,A.endPos))}let Ce=null;function Lr(A){const e=Bt(),t=$e()?.objectMap,n=t?Mr({objectMap:t}):null;if(!n||!e)return!1;const a=e.camera.position.clone(),s=new y().fromArray(n.position);return Ce={runtime:{startPos:a,startQuat:e.camera.quaternion.clone(),startFov:e.camera.fov,endPos:s,endQuat:new We().fromArray(n.quaternion),endFov:n.fov,curve:new Nn(Ua(a,s)),startedAt:performance.now(),durationMs:Rr(a.distanceTo(s)),landed:!1},snapshot:{position:e.camera.position.clone(),target:e.orbit.target.clone(),up:e.camera.up.clone(),fov:e.camera.fov},onLanded:A,getLiveCamera:null,driving:!0},e.orbit.enabled=!1,!0}function vr(){const A=Bt(),e=Ce;if(!e||(e.driving=!1,!A))return;const t=A.camera,n=new y(0,0,-1).applyQuaternion(t.quaternion),a=Math.max(1,e.snapshot.position.distanceTo(e.snapshot.target));A.orbit.target.copy(t.position).addScaledVector(n,a),t.up.set(0,1,0).applyQuaternion(t.quaternion),A.orbit.enabled=!0}function Gr(){const A=Ce;if(!A)return;Ce=null;const e=Bt();if(!e)return;const t=A.snapshot;e.camera.position.copy(t.position),e.orbit.target.copy(t.target),e.camera.up.copy(t.up),e.camera.lookAt(t.target),e.camera.fov!==t.fov&&(e.camera.fov=t.fov,e.camera.updateProjectionMatrix()),e.orbit.enabled=!0,e.orbit.update()}const Ut=new y,XA=new We;Ro(Nr);function Nr(){const A=Ce,e=Bt();if(!A||!e||!A.driving)return;const t=A.runtime,n=A.getLiveCamera?.()??null,a=n?.isObject3D?n:null;if(a){a.getWorldPosition(Ut),a.getWorldQuaternion(XA),Ut.distanceToSquared(t.endPos)>1e-8&&(t.endPos.copy(Ut),_r(t)),t.endQuat.copy(XA);const r=a.fov;typeof r=="number"&&(t.endFov=r)}const s=e.camera;if(t.landed){s.position.copy(t.endPos),s.quaternion.copy(t.endQuat),s.fov!==t.endFov&&(s.fov=t.endFov,s.updateProjectionMatrix());return}const o=Math.min(1,(performance.now()-t.startedAt)/t.durationMs),i=kr(o);s.position.copy(t.curve.getPoint(i)),s.quaternion.slerpQuaternions(t.startQuat,t.endQuat,i),s.fov=t.startFov+(t.endFov-t.startFov)*i,s.updateProjectionMatrix(),o>=1&&(t.landed=!0,A.onLanded())}function Ur(){return Es({begin:Lr,track:A=>{Ce&&(Ce.getLiveCamera=A)},settle:vr,end:Gr})}const Or=v.lazy(()=>x(()=>import("./InspectorObjectPreview-CSIWwJQE.js"),__vite__mapDeps([47,1,2,28,4,5,6,7,8,9,10,11,21,19,20,15,12,17,22,23,13,24,25,14,26,16,18])).then(A=>({default:A.InspectorObjectPreview})));function Hr(A,e){return{preview:A.isCamera?null:({displayName:t,previewKey:n,actions:a})=>s=>v.createElement(Bs,{picture:()=>v.createElement(Or,{previewKey:n,object:A,displayName:t,fill:!0}),previewKey:n,actions:a,...s?{mode:s}:{}}),instanced:wr(A,Us(A)),assetDocument:e}}function Pr(){return Cs((A,e)=>{const t=$e();if(!t)return null;const n=Qt(A,t.objectMap,e);return n?Hr(n,t.objectMap.has(e)?{open:()=>ms("asset-editor:entity",t.shell,{entityId:e,title:n.name||e})}:null):null})}const ZA=new WeakMap,hA={activeAuthoring(A){let e=ZA.get(A);return e||(e=ws(A,"No authoring adapter"),ZA.set(A,e)),e},panelAuthoring(A){return hA.activeAuthoring(A)},pick(){return null},toolOwner:Qs,toolOwnerPainted(){return!0},threeSurfaceShowing(A,e){return!e.rects&&typeof e.hierarchy.object3D=="function"},threeViewportRootId(){return null},applyRootHiddenVisibility(){},suppressRootEnvironment(){}};let ct=hA;function jr(A){if(ct!==A){if(ct!==hA)throw new Error("A viewport authoring policy is already installed.");ct=A}}function yg(){return ct}const qr=["front","side"],Ha=1,Jr=.55,$A=Ha/2,Ot=128,Kr=[24,26,31],Yr=[235,137,52],Vr=[56,189,248],zr=[236,240,238];function Wr(A,e){if(A.length<e*4)throw new Error(`Silhouette mask expected ${e*4} RGBA bytes but received ${A.length}.`);const t=new Uint8Array(e);for(let n=0;n<e;n++){const a=n*4,s=A[a]>=Ot||A[a+1]>=Ot||A[a+2]>=Ot;t[n]=s?1:0}return t}function Xr(A,e){if(A.length!==e.length)throw new Error(`Mask IoU requires equal-size masks (${A.length} vs ${e.length}).`);let t=0,n=0,a=0;for(let o=0;o<A.length;o++){const i=A[o]!==0,r=e[o]!==0;i&&n++,r&&a++,i&&r&&t++}const s=n+a-t;return{intersection:t,union:s,aCount:n,bCount:a,iou:s===0?0:t/s}}function Zr(A,e){if(A.length!==e.length)throw new Error(`Overlay requires equal-size masks (${A.length} vs ${e.length}).`);const t=new Uint8ClampedArray(A.length*4);for(let n=0;n<A.length;n++){const a=A[n]!==0,s=e[n]!==0,o=a&&s?zr:a?Yr:s?Vr:Kr,i=n*4;t[i]=o[0],t[i+1]=o[1],t[i+2]=o[2],t[i+3]=255}return t}function gt(A){if(!Array.isArray(A)||A.length!==3)return null;const[e,t,n]=A;return typeof e!="number"||typeof t!="number"||typeof n!="number"||!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||Math.hypot(e,n)<1e-6?null:[e,t,n]}function uA(A){const[e,,t]=A;if(!Number.isFinite(e)||!Number.isFinite(t)||Math.hypot(e,t)<1e-6)throw new Error(`Cannot derive a facing from forward vector [${A.join(", ")}].`);return Math.atan2(e,t)}function $r(A,e,t=Ha){const n=e[1]-A[1];if(!Number.isFinite(n)||n<=0)throw new Error(`Compare normalization needs positive model height, got ${n}.`);const a=t/n,s=(A[0]+e[0])/2,o=(A[2]+e[2])/2;return{scale:a,position:[-s*a,-A[1]*a,-o*a]}}const pt=1.2,Pa=.001;function tA(A){const e=new y(Math.sin(A),0,Math.cos(A)),n=new y(0,1,0).clone().cross(e).normalize(),a=e.clone().cross(n).normalize();return{direction:e,right:n,up:a}}function ja(){return{minRight:Number.POSITIVE_INFINITY,maxRight:Number.NEGATIVE_INFINITY,minUp:Number.POSITIVE_INFINITY,maxUp:Number.NEGATIVE_INFINITY,minDepth:Number.POSITIVE_INFINITY,maxDepth:Number.NEGATIVE_INFINITY}}function fA(A){return A.maxRight<A.minRight}function ec(A){A.minRight=Number.POSITIVE_INFINITY,A.maxRight=Number.NEGATIVE_INFINITY,A.minUp=Number.POSITIVE_INFINITY,A.maxUp=Number.NEGATIVE_INFINITY,A.minDepth=Number.POSITIVE_INFINITY,A.maxDepth=Number.NEGATIVE_INFINITY}function qa(A,e,t){const n=e.dot(t.right),a=e.dot(t.up),s=e.dot(t.direction);n<A.minRight&&(A.minRight=n),n>A.maxRight&&(A.maxRight=n),a<A.minUp&&(A.minUp=a),a>A.maxUp&&(A.maxUp=a),s<A.minDepth&&(A.minDepth=s),s>A.maxDepth&&(A.maxDepth=s)}function tc(A,e){if(fA(A))throw new Error("Asset preview cannot frame an empty projected span.");return new y().addScaledVector(e.right,(A.minRight+A.maxRight)/2).addScaledVector(e.up,(A.minUp+A.maxUp)/2).addScaledVector(e.direction,(A.minDepth+A.maxDepth)/2)}function Ja(A,e,t,n=pt){const a=Math.max(e,A/t,Pa)*n;return{halfHeight:a,halfWidth:a*t}}function Ac(A,e,t=pt){if(fA(A))throw new Error("Asset preview cannot frame an empty projected span.");return Ja((A.maxRight-A.minRight)/2,(A.maxUp-A.minUp)/2,e,t)}function nc(A){if(A.length===0)throw new Error("Asset preview cannot union an empty set of frames.");let e=0,t=0;for(const n of A)e=Math.max(e,n.halfWidth),t=Math.max(t,n.halfHeight);return{halfWidth:e,halfHeight:t}}function ac(A,e,t,n,a,s){const o=Math.max(n*a,Pa);let i=o,r=o;const c=new y;for(const g of A)c.copy(g).sub(e),i=Math.max(i,Math.abs(c.dot(t.right))+o),r=Math.max(r,Math.abs(c.dot(t.up))+o);return i=Math.max(i,r*s),r=Math.max(r,i/s),{halfWidth:i,halfHeight:r}}function sc(A){if(A.length===0)throw new Error("Asset preview cannot centre a bone-zoom crop on zero anchors.");const e=new y;for(const t of A)e.add(t);return e.multiplyScalar(1/A.length)}function oc(A,e){const t=A.position.dot(e.right),n=A.position.dot(e.up),a=A.position.dot(e.direction),s=A.zoom||1;return{minRight:t+A.left/s,maxRight:t+A.right/s,minUp:n+A.bottom/s,maxUp:n+A.top/s,minDepth:a-A.far,maxDepth:a-A.near}}function ic(A,e){return fA(A)?!1:A.maxRight>=e.minRight&&A.minRight<=e.maxRight&&A.maxUp>=e.minUp&&A.minUp<=e.maxUp&&A.maxDepth>=e.minDepth&&A.minDepth<=e.maxDepth}function pA(A,e,t,n,a){const s=new iA(-t.halfWidth,t.halfWidth,t.halfHeight,-t.halfHeight,.01,a);return s.position.copy(A).addScaledVector(e.direction,n),s.up.copy(e.up),s.lookAt(A),s.updateProjectionMatrix(),s.updateMatrixWorld(!0),s}const Ve=["front","right","top","perspective"],en=24;function Ka(A){const e=A;return typeof e=="object"&&e!==null&&typeof e.bone=="string"&&e.bone.length>0&&(e.axis==="x"||e.axis==="y"||e.axis==="z")&&typeof e.radians=="number"&&Number.isFinite(e.radians)}function Ya(A){const e=A;return typeof e=="object"&&e!==null&&typeof e.morph=="string"&&e.morph.length>0&&typeof e.influence=="number"&&Number.isFinite(e.influence)}function Va(A){const e=A;return typeof e=="object"&&e!==null&&typeof e.bone=="string"&&e.bone.length>0&&(e.axis==="x"||e.axis==="y"||e.axis==="z")&&typeof e.meters=="number"&&Number.isFinite(e.meters)}function rc(A){return Ka(A)||Ya(A)||Va(A)}function cc(A,e){const t=A;if(typeof t!="object"||t===null||typeof t.label!="string"||!/^[a-z0-9][a-z0-9-]*$/i.test(t.label)||t.pose!==void 0&&(typeof t.pose!="string"||!e.has(t.pose)))return!1;if(t.view==="turntable")return typeof t.yaw=="number"&&Number.isFinite(t.yaw);if(t.view==="bone-zoom"){const n=t;return n.yaw!==void 0&&(typeof n.yaw!="number"||!Number.isFinite(n.yaw))?!1:Array.isArray(n.bones)&&n.bones.length>0&&n.bones.every(a=>typeof a=="string"&&a.length>0)&&typeof n.spanFraction=="number"&&Number.isFinite(n.spanFraction)&&n.spanFraction>0&&n.spanFraction<=2}return!1}function gc(A){const e=r=>{throw new Error(`Asset preview shot-set definition is invalid: ${r}`)},t=A;(typeof t!="object"||t===null)&&e("expected an object.");const n=t;(typeof n.name!="string"||!/^[a-z0-9][a-z0-9-]*$/i.test(n.name))&&e("`name` must be a short alphanumeric/dash identifier."),n.requiredBones!==void 0&&(!Array.isArray(n.requiredBones)||n.requiredBones.some(r=>typeof r!="string"||r.length===0))&&e("`requiredBones` must be an array of non-empty bone names."),n.rigRequirementHint!==void 0&&typeof n.rigRequirementHint!="string"&&e("`rigRequirementHint` must be a string.");const a=n.poses??{};(typeof a!="object"||a===null||Array.isArray(a))&&e("`poses` must be an object of named pose-step lists.");for(const[r,c]of Object.entries(a))(!Array.isArray(c)||!c.every(rc))&&e(`pose ${JSON.stringify(r)} must be an array of {bone, axis, radians} and/or {morph, influence}.`);const s=new Set(Object.keys(a));(!Array.isArray(n.shots)||n.shots.length===0||n.shots.length>en)&&e(`\`shots\` must list 1-${en} shots.`);const o=n.shots,i=new Set;for(const r of o){cc(r,s)||e('every shot needs a label plus either {view:"turntable", yaw} or {view:"bone-zoom", bones, spanFraction, yaw?}, with every `yaw` a finite number of radians and `pose` naming a declared pose.');const{label:c}=r;i.has(c)&&e(`duplicate shot label ${JSON.stringify(c)}.`),i.add(c)}return n}const lc=512,tn=64,An=1024,Me=2106410,dc=25e3,fe=64*1024*1024;function j(A){const e=A??lc;if(!Number.isInteger(e)||e<tn||e>An)throw new Error(`Asset preview dimensions must be integers from ${tn} to ${An}.`);return e}function O(A){const e=A.toDataURL("image/png"),t=e.indexOf(",");return t>=0?e.slice(t+1):e}function Sg(A){const e=new Set;A.traverse(n=>e.add(n));let t=A;return A.traverse(n=>{const a=n;if(!(!a.isSkinnedMesh||!a.skeleton))for(const s of a.skeleton.bones){if(!s||e.has(s))continue;const o=new Set;for(let r=t;r;r=r.parent)o.add(r);let i=null;for(let r=s;r;r=r.parent)if(o.has(r)){i=r;break}i&&i!==t&&(t=i,t.traverse(r=>e.add(r)))}}),t}function xe(A){const e=new Set;A.traverse(o=>{e.add(o)});const t=uc(A,e),n=fc(A,t),a=hc(A);n.matrix.copy(a),n.matrix.decompose(n.position,n.quaternion,n.scale),n.matrixAutoUpdate=!1,n.matrixWorld.copy(a),n.matrixWorldAutoUpdate=A.matrixWorldAutoUpdate,n.visible=!0;const s=[];n.traverse(o=>{o!==n&&o.userData.editorHelper&&s.push(o)});for(const o of s)o.parent?.remove(o);return n}function hc(A){const e=[];let t=A;for(;t;)e.push(t),t=t.parent;const n=e.findIndex(i=>!i.matrixWorldAutoUpdate),a=n>=0?e[n].matrixWorld.clone():new Ie,s=new Ie,o=n>=0?n-1:e.length-1;for(let i=o;i>=0;i--){const r=e[i];r.matrixAutoUpdate?s.compose(r.position,r.quaternion,r.scale):s.copy(r.matrix),a.multiply(s)}return a}function uc(A,e){const t=new Map,n=new Map;let a=null;const s=()=>{if(a)return a;const o=new Map;for(const i of e){const r=i;if(!r.isBone||r.name==="")continue;const c=o.get(r.name);c?c.push(r):o.set(r.name,[r])}return a=o,o};if(A.traverse(o=>{const i=o;if(!i.isSkinnedMesh)return;const r=i.name||i.uuid;for(const c of i.skeleton.bones){if(c&&e.has(c)||c&&t.has(c))continue;const g=c?s().get(c.name)??[]:[];if(g.length===1){t.set(c,g[0]);continue}const l=c?.name||"(unnamed bone)";n.set(`${r} -> ${l}`,{mesh:r,bone:l,sameNamed:g.length})}}),n.size>0){const o=[...n.values()].map(({mesh:i,bone:r,sameNamed:c})=>c>1?`${i} -> ${r} (${c} bones inside the selection share that name — which one is meant is ambiguous)`:`${i} -> ${r} (no bone of that name inside the selection)`).join("; ");throw new Error(`Asset preview selection references bones outside its hierarchy that it cannot bind to: ${o}. Select the complete skeleton root — the node that owns both the skinned mesh and its bones.`)}return t}function fc(A,e=new Map){const t=new Map,n=[],a=o=>{const i=pc(o);t.set(o,i),Ic(o,i),o.isSkinnedMesh&&n.push([o,i]);const r=o;if(r.isLOD){const c=i,g=r.levels.filter(h=>h.object.visible),l=g.length===1?g[0]:r.levels[0];c.autoUpdate=!1;const d=new Set(r.levels.map(h=>h.object));for(const h of r.levels){if(Ht(h.object))continue;const u=a(h.object);u.visible=r.autoUpdate?h===l:h.object.visible,c.addLevel(u,h.distance,h.hysteresis)}for(const h of o.children)!d.has(h)&&!Ht(h)&&i.add(a(h))}else for(const c of o.children)Ht(c)||i.add(a(c));return i},s=a(A);for(const[o,i]of n){const r=o.skeleton.clone();r.bones=o.skeleton.bones.map(c=>{const g=t.get(e.get(c)??c);if(!g?.isBone)throw new Error(`Asset preview could not map skeleton bone: ${c.name||c.uuid}`);return g}),i.skeleton=r,i.bindMode=o.bindMode,i.bindMatrix.copy(o.bindMatrix),i.bindMatrixInverse.copy(o.bindMatrixInverse)}return s}function pc(A){const e=A;if(e.isSkinnedMesh)return new Sn(e.geometry,e.material);const t=A;if(t.isInstancedMesh){const i=new Bn(t.geometry,t.material,t.count);return i.instanceMatrix.copy(t.instanceMatrix),i.instanceColor=t.instanceColor?t.instanceColor.clone():null,i.morphTexture=t.morphTexture,i}const n=A;if(n.isMesh)return new De(n.geometry,n.material);const a=A;if(A.isLineSegments)return new Dn(a.geometry,a.material);if(A.isLineLoop)return new kn(a.geometry,a.material);if(a.isLine)return new Rn(a.geometry,a.material);const s=A;if(s.isPoints)return new oA(s.geometry,s.material);const o=A;return o.isSprite?new Qo(o.material):A.isLOD?new wo:A.isBone?new xn:A.isGroup?new $:new sA}function Ic(A,e){e.name=A.name,e.up.copy(A.up),e.position.copy(A.position),e.quaternion.copy(A.quaternion),e.scale.copy(A.scale),e.matrix.copy(A.matrix),e.matrixWorld.copy(A.matrixWorld),e.matrixAutoUpdate=A.matrixAutoUpdate,e.matrixWorldAutoUpdate=A.matrixWorldAutoUpdate,e.visible=A.visible,e.castShadow=A.castShadow,e.receiveShadow=A.receiveShadow,e.frustumCulled=!1,e.renderOrder=A.renderOrder,e.layers.set(0),e.animations=[...A.animations];const t=A,n=e;t.morphTargetInfluences&&(t.morphTargetDictionary&&(n.morphTargetDictionary={...t.morphTargetDictionary}),n.morphTargetInfluences=[...t.morphTargetInfluences]);const a=A;a.isSprite&&e.center.copy(a.center)}function Ht(A){const e=1<<lA;return!!(A.userData.editorHelper||A.userData.editorIcon||(A.layers.mask&e)!==0)}function _e(A){const e=new Set;A.traverse(t=>{const n=t;n.isSkinnedMesh&&e.add(n.skeleton);const a=t;if(a.isInstancedMesh){const s=a.morphTexture;a.morphTexture=null,a.dispose(),a.morphTexture=s}});for(const t of e)t.dispose()}function Dg(A){const e=A();let t;try{t=xe(e.root),t.animations=[...e.animations??e.root.animations]}catch(a){try{e.dispose()}catch(s){throw new AggregateError([a,s],"Object3D preview snapshot creation and source cleanup both failed.")}throw a}let n=!1;return{root:t,dispose(){if(n)return;n=!0;const a=[];try{_e(t)}catch(s){a.push(s)}try{e.dispose()}catch(s){a.push(s)}if(a.length===1)throw a[0];if(a.length>1)throw new AggregateError(a,"Object3D preview snapshot cleanup failed.")}}}function Ae(A,e="front"){IA(A);const t=bc(A,e);if(t.isEmpty())throw new Error("Asset preview source has no renderable bounds.");const n=t.getCenter(new y),a=t.getSize(new y);return{center:n,size:a,radius:Math.max(a.length()/2,.001)}}function IA(A){A.parent?.updateWorldMatrix(!0,!1),A.updateMatrixWorld(!0)}function bc(A,e){const t=new ke;return bA(A,wt(e),e==="perspective",n=>t.expandByPoint(n)),t}function Ec(A,e){const t=e.map(()=>ja());return e.length===0||(IA(A),bA(A,e[0],!1,n=>{for(let a=0;a<e.length;a++)qa(t[a],n,e[a])})),t}function Cc(A,e){const t=e.map(()=>0);let n=0;if(e.length===0)return{framed:t,total:n};IA(A);const a=e.map(()=>ja());let s=-1;const o=()=>{if(!(s<0)){n++;for(let i=0;i<e.length;i++)ic(a[i],e[i].window)&&t[i]++,ec(a[i])}};return bA(A,e[0].basis,!1,(i,r)=>{r!==s&&(o(),s=r);for(let c=0;c<e.length;c++)qa(a[c],i,e[c].basis)}),o(),{framed:t,total:n}}function bA(A,e,t,n){const a=new ke,s=new y,o=new y,i=new Ie;let r=0;const c=g=>{if(!g.visible||g!==A&&nA(g))return;if(le(g,"gaussianSplat")){a.copy(g.getBoundingBox()).applyMatrix4(g.matrixWorld);const u=r++;for(const p of[a.min.x,a.max.x])for(const C of[a.min.y,a.max.y])for(const b of[a.min.z,a.max.z])n(s.set(p,C,b),u)}const l=g;if(l.isLOD&&l.levels.length>0){const u=new Set(l.levels.map(p=>p.object));for(const p of l.levels)c(p.object);for(const p of g.children)u.has(p)||c(p);return}const d=g;if(d.isSprite&&d.material.visible){if(t&&!d.material.sizeAttenuation)throw new Error("Asset preview cannot deterministically frame a perspective Sprite with sizeAttenuation disabled.");const u=new y().setFromMatrixPosition(d.matrixWorld),p=new y().setFromMatrixScale(d.matrixWorld),C=Math.cos(d.material.rotation),b=Math.sin(d.material.rotation),I=r++;for(const B of[-d.center.x,1-d.center.x])for(const f of[-d.center.y,1-d.center.y]){const E=B*Math.abs(p.x),m=f*Math.abs(p.y),Q=C*E-b*m,w=b*E+C*m;n(u.clone().addScaledVector(e.right,Q).addScaledVector(e.up,w),I)}}const h=d.isSprite?void 0:g.geometry;if(h){const u=h.getAttribute("position");if(u){const p=Bc(g,h,u.count),C=mc(g,p.length),b=Math.ceil(p.length/C),I=g;if(I.isInstancedMesh){const B=new De(I.geometry,I.material);for(let f=0;f<I.count;f++)I.getMatrixAt(f,i),I.morphTexture&&I.getMorphAt(f,B),p.forEach((E,m)=>{B.getVertexPosition(E,o),o.applyMatrix4(i).applyMatrix4(I.matrixWorld),n(o,r+Math.floor(m/C))}),r+=b}else{const B=g;p.forEach((f,E)=>{B.isMesh?B.getVertexPosition(f,o):wc(g,h,f,o),o.applyMatrix4(g.matrixWorld),n(o,r+Math.floor(E/C))}),r+=b}}}for(const u of g.children)c(u)};c(A)}function Bc(A,e,t){const n=A.material;if(!n)return[];const a=e.index?.count??t,s=Math.max(0,e.drawRange.start),o=Math.min(a,Number.isFinite(e.drawRange.count)?s+e.drawRange.count:a),i=[];if(Array.isArray(n))for(const c of e.groups){const g=c.materialIndex??0;if(!n[g]?.visible)continue;const l=Math.max(s,c.start),d=Math.min(o,c.start+c.count);d>l&&i.push([l,d])}else n.visible&&o>s&&i.push([s,o]);const r=[];for(const[c,g]of i){const l=Qc(A,g-c);for(let d=c;d<c+l;d++)r.push(e.index?e.index.getX(d):d)}return r}function mc(A,e){return A.isMesh?3:A.isLineSegments?2:A.isLine?Math.max(e,1):1}function Qc(A,e){return A.isMesh?e-e%3:A.isLineSegments?e-e%2:A.isLine?e>=2?e:0:e}function wc(A,e,t,n){const a=e.getAttribute("position");n.fromBufferAttribute(a,t);const s=e.morphAttributes.position,o=A.morphTargetInfluences;if(!s||!o)return n;const i=n.clone(),r=new y,c=new y;for(let g=0;g<s.length;g++){const l=o[g]??0;l!==0&&(c.fromBufferAttribute(s[g],t),e.morphTargetsRelative||c.sub(i),r.addScaledVector(c,l))}return n.add(r)}function yc(A,e,t){const{center:n,size:a,radius:s}=e;let o=a.x,i=a.y;const r=wt(A),{direction:c,up:g}=r;A==="right"?o=a.z:A==="top"&&(o=a.x,i=a.z);const l=Ja(o/2,i/2,t);return pA(n,{direction:c,right:r.right,up:g},l,s*3+1,s*10+10)}function It(A,e,t,n){const a=new Ct(35,e,.01,A.radius*20+20),s=Re.degToRad(a.fov/2),o=Math.atan(Math.tan(s)*e),i=wt("perspective"),r=t?.clone().normalize()??i.direction,c=Math.abs(r.y)>.999?new y(0,0,1):new y(0,1,0),g=t?c.clone().cross(r).normalize():i.right,l=t?r.clone().cross(g).normalize():i.up,d=A.size.clone().multiplyScalar(.5);let h=0;for(const u of[-1,1])for(const p of[-1,1])for(const C of[-1,1]){const b=new y(u*d.x,p*d.y,C*d.z),I=b.dot(r);h=Math.max(h,I+Math.abs(b.dot(g))*pt/Math.tan(o),I+Math.abs(b.dot(l))*pt/Math.tan(s))}return a.position.copy(A.center).addScaledVector(r,Math.max(n??h,.01)),a.lookAt(A.center),a.updateProjectionMatrix(),a.updateMatrixWorld(!0),a}function wt(A){const e=A==="front"?new y(0,0,1):A==="right"?new y(1,0,0):A==="top"?new y(0,1,0):new y(1,.72,1).normalize(),n=(A==="top"?new y(0,0,-1):new y(0,1,0)).clone().cross(e).normalize(),a=e.clone().cross(n).normalize();return{direction:e,right:n,up:a}}function EA(A,e,t){return A==="perspective"?It(e,t):yc(A,e,t)}function nn(A,e,t){return It(A,e,t)}function za(A,e,t,n){const a=t.map(tA),s=Ec(A,a),o=nc(s.map(r=>Ac(r,n))),i=new Map;return t.forEach((r,c)=>{i.set(r,pA(tc(s[c],a[c]),a[c],o,e.radius*3+1,e.radius*10+10))}),i}function Wa(A,e,t={}){const n=j(t.width),a=j(t.height),s=t.background??"neutral",o=xe(A);let i=null;try{const r=Ae(o,"perspective"),c=ze(o,r),g=ce(new ge({antialias:!0,alpha:!0,preserveDrawingBuffer:!0}));i=g,g.setPixelRatio(1),g.outputColorSpace=G,g.toneMapping=Fe,g.toneMappingExposure=1,g.setClearColor(Me,s==="transparent"?0:1),g.setSize(n,a,!1),Ze(c,g);const l=Math.atan2(e[0],e[2]),d=n/a,h=m=>new y(Math.sin(m),.72,Math.cos(m)).normalize(),u=[l,l+Math.PI,l-Math.PI/2,l+Math.PI/2],p=za(o,r,u,d),C=[{label:"front",camera:p.get(u[0])},{label:"back",camera:p.get(u[1])},{label:"left",camera:p.get(u[2])},{label:"right",camera:p.get(u[3])},{label:"quarter-left",camera:nn(r,d,h(l-Math.PI/4))},{label:"quarter-right",camera:nn(r,d,h(l+Math.PI/4))}],b=[],I=2,B=3,f=document.createElement("canvas");f.width=n*I,f.height=a*B;const E=f.getContext("2d");if(!E)throw new Error("Unable to create the source-review contact sheet.");return C.forEach(({label:m,camera:Q},w)=>{g.render(c,Q),b.push({label:m,base64:O(g.domElement),mimeType:"image/png"});const S=w%I*n,R=Math.floor(w/I)*a;E.drawImage(g.domElement,S,R,n,a);const T=m==="quarter-left"?"3/4-L":m==="quarter-right"?"3/4-R":m.toUpperCase();Ee(E,T,S,R,n,a)}),{width:n,height:a,shots:b,contactSheet:{width:n*I,height:a*B,base64:O(f),mimeType:"image/png"}}}finally{i&&mt(i),i?.dispose(),i?.forceContextLoss(),_e(o)}}function Sc(A,e,t,n,a){const s=sc(A),o=ac(A,s,e,t,n,a),i=t*3+1;return pA(s,e,o,i,i+t*4+1)}function an(A,e){const t=new Map;A.traverse(o=>{const i=o;i.isBone&&o.name&&t.set(o.name,i)});const n=e.requiredBones??[],a=n.filter(o=>!t.has(o)),s=e.rigRequirementHint?` (${e.rigRequirementHint})`:"";if(n.length>0&&t.size===0)throw new Error(`Asset preview '--shots ${e.name}' requires a rigged GLB${s}, but this model has no skeleton at all. Required joints: ${n.join(", ")}.`);if(a.length>0)throw new Error(`Asset preview '--shots ${e.name}' requires joints this GLB's skeleton does not have${s}. Missing joint(s): ${a.join(", ")}.`);return t}function Dc(A,e,t){const n=t.filter(Ya);for(const a of t)if(Ka(a)){const s=e.get(a.bone);if(!s)continue;a.axis==="x"?s.rotateX(a.radians):a.axis==="y"?s.rotateY(a.radians):s.rotateZ(a.radians)}else if(Va(a)){const s=e.get(a.bone);if(!s)continue;a.axis==="x"?s.translateX(a.meters):a.axis==="y"?s.translateY(a.meters):s.translateZ(a.meters)}n.length!==0&&A.traverse(a=>{const s=a,o=s.morphTargetDictionary,i=s.morphTargetInfluences;if(!(!o||!i))for(const{morph:r,influence:c}of n){const g=o[r];g!==void 0&&(i[g]=c)}})}function bt(A){let e=null;return A.traverse(t=>{e||(e=gt(t.userData.forward))}),e??[0,0,1]}function AA(A,e){const t=new $;return t.rotation.y=uA(e),t.add(A),t.updateMatrixWorld(!0),t}function ze(A,e){const t=new rA;t.add(A),t.add(new So(16777215,3489874,1.8*Fa));const n=new ye(16777215,2.2);n.position.copy(e.center).addScaledVector(new y(1,1.5,1),e.radius*3),t.add(n);const a=new ye(12572671,.8);a.position.copy(e.center).addScaledVector(new y(-1,.5,-.7),e.radius*2),t.add(a);const s=new ye(16773596,.45);return s.position.copy(e.center).addScaledVector(new y(.3,-1,.4),e.radius*2),t.add(s),t}let ue=null;function sn(){const A=ue;ue=null,A&&(mt(A),A.dispose(),A.forceContextLoss())}function Rc(){if(ue?.getContext().isContextLost()&&sn(),!ue){const A=ce(new ge({antialias:!0,alpha:!0,preserveDrawingBuffer:!0}));ue=A,A.domElement.addEventListener("webglcontextlost",()=>{ue===A&&sn()})}return ue}function CA(A,e={}){let t=!1;if(A.traverse(i=>{le(i,"gaussianSplat")&&(t=!0)}),t)throw new Error("Gaussian-splat capture requires the async project-asset capture path so Spark can sort each view.");const n=j(e.width),a=j(e.height),s=e.background??"neutral",o=xe(A);try{const i=bt(A);e.pose&&xc(o,e.pose);const r=AA(o,i),c=BA(i),g=Ae(r,"perspective"),l=ze(r,g),d=Rc();if(d.setPixelRatio(1),d.outputColorSpace=G,d.toneMapping=Fe,d.toneMappingExposure=1,d.setClearColor(Me,s==="transparent"?0:1),Ze(l,d),e.camera)return Fc(d,l,It(g,n/a,on(e.camera),e.camera.distance),n,a,e.camera,c);const h=new Map;for(const p of Ve)h.set(p,EA(p,Ae(r,p),n/a));const u=It(g,n/a,on({azimuthDegrees:30,elevationDegrees:-60}));return Za(d,l,h,n,a,c,u)}finally{_e(o)}}function kc(A,e,t){const n=Xa(e,t.yawDegrees);if(!n)return A;const a=document.createElement("canvas");a.width=A.width,a.height=A.height;const s=a.getContext("2d");if(!s)return A;s.drawImage(A,0,0);const o=On(n.text,A.width,A.height),i=n.edge==="left"?0:A.width-o.width;return Ee(s,n.text,i,A.height-o.height,A.width,A.height),a}function BA(A){const e=uA(A);return{forward:[A[0],A[1],A[2]],yawDegrees:Math.round(Re.radToDeg(e))}}function xc(A,e){if(!Number.isFinite(e.timeSeconds)||e.timeSeconds<0)throw new Error(`Asset preview pose time must be a finite number of seconds >= 0, got ${e.timeSeconds}.`);const t=A.animations??[],n=t.find(s=>s.name===e.clip);if(!n){const s=t.map(o=>`'${o.name}'`).join(", ");throw new Error(`Asset preview pose clip '${e.clip}' not found on the subject. `+(s?`Its clips are: ${s}.`:"The subject carries no animation clips at all — clips live on the model root (GLB animations, or a builder module’s `root.animations`)."))}const a=new yo(A);a.clipAction(n).play(),a.update(e.timeSeconds),A.updateMatrixWorld(!0)}function on(A){const e=Re.degToRad(A.azimuthDegrees),t=Re.degToRad(A.elevationDegrees);return new y(Math.sin(e)*Math.cos(t),Math.sin(t),Math.cos(e)*Math.cos(t)).normalize()}function Fc(A,e,t,n,a,s,o){A.setSize(n,a,!1),A.render(e,t);const i={view:"perspective",base64:O(A.domElement),mimeType:"image/png"},r=document.createElement("canvas");r.width=n,r.height=a;const c=r.getContext("2d");if(!c)throw new Error("Unable to create the asset preview contact sheet.");c.drawImage(A.domElement,0,0,n,a);const g=`AZ ${Math.round(s.azimuthDegrees)} EL ${Math.round(s.elevationDegrees)}`+(s.distance===void 0?"":` D ${Math.round(s.distance)}`);return Ee(c,g,0,0,n,a),{width:n,height:a,orientation:o,views:[i],contactSheet:{width:n,height:a,base64:O(r),mimeType:"image/png"}}}function Xa(A,e){if(A==="perspective")return null;const t=Re.degToRad(e),n=wt(A).right.applyAxisAngle(new y(0,1,0),-t),a=[["X",new y(1,0,0)],["Y",new y(0,1,0)],["Z",new y(0,0,1)]];for(const[s,o]of a){const i=n.dot(o);if(i>.99)return{text:`+${s}>`,edge:"right"};if(i<-.99)return{text:`<+${s}`,edge:"left"}}return{text:`YAW ${e}`,edge:"left"}}function Za(A,e,t,n,a,s,o){const i=[],r=o?[...Ve,"below"]:[...Ve],c=o?3:2,g=n*c,l=a*2,d=document.createElement("canvas");d.width=g,d.height=l;const h=d.getContext("2d");if(!h)throw new Error("Unable to create the asset preview contact sheet.");A.getClearAlpha()>0&&(h.fillStyle=`#${new J(Me).getHexString()}`,h.fillRect(0,0,g,l)),A.setSize(n,a,!1),r.forEach((p,C)=>{const b=p==="below"?o:t.get(p);if(!b)return;A.render(e,b),i.push({view:p,base64:O(p==="below"?A.domElement:kc(A.domElement,p,s)),mimeType:"image/png"});const I=C%c,B=Math.floor(C/c),f=I*n,E=B*a;h.drawImage(A.domElement,f,E,n,a);const m=p==="perspective"?"3/4":p.toUpperCase();if(Ee(h,m,f,E,n,a),p==="below")return;const Q=Xa(p,s.yawDegrees);if(Q){const w=On(Q.text,n,a),S=Q.edge==="left"?f:f+n-w.width;Ee(h,Q.text,S,E+a-w.height,n,a)}});const u={width:g,height:l,base64:O(d),mimeType:"image/png"};return{width:n,height:a,orientation:s,views:i,contactSheet:u}}function Tc(A,e,t={}){let n=!1;if(A.traverse(c=>{le(c,"gaussianSplat")&&(n=!0)}),n)throw new Error("Gaussian-splat capture requires the async project-asset capture path so Spark can sort each view.");const a=j(t.width),s=j(t.height),o=t.background??"neutral",i=[];let r=null;try{e.traverse(l=>{l.visible&&dA(l)&&(l.visible=!1,i.push(l))});const c=new Map;for(const l of Ve){const d=EA(l,Ae(A,l),a/s);d.layers.enableAll(),d.layers.disable(lA),c.set(l,d)}const g=ce(new ge({antialias:!0,alpha:!0,preserveDrawingBuffer:!0}));return r=g,g.setPixelRatio(1),g.outputColorSpace=G,g.toneMapping=Fe,g.toneMappingExposure=1,g.setClearColor(Me,o==="transparent"?0:1),Za(g,e,c,a,s,BA([0,0,1]))}finally{for(const c of i)c.visible=!0;r?.dispose(),r?.forceContextLoss()}}function Mc(A,e,t){const n=A.pose===void 0?"":` under pose '${A.pose}'`,a=A.view==="bone-zoom"?`bone-zoom on ${A.bones.join(", ")} at yaw ${(A.yaw??0).toFixed(3)}`:`turntable at yaw ${A.yaw.toFixed(3)}`,s=A.view==="bone-zoom"?"Zoom anchors are read from the REST skeleton for every shot, so a pose that MOVES the anchor leaves the crop behind where the joint used to be: re-aim the shot (another joint or yaw), widen its spanFraction, or drop it.":"Check the shot yaw and the pose it renders under.";return{label:A.label,reason:"empty-frame",...A.view==="bone-zoom"?{bones:[...A.bones]}:{},...A.pose===void 0?{}:{pose:A.pose},message:`Asset preview '--shots ${e}' shot ${JSON.stringify(A.label)} (${a}${n}) framed NONE of the subject's ${t} rendered faces: the image is background only and proves nothing about the asset. ${s}`}}function _c(A,e,t){const n=[],a=()=>{for(const s of n)_e(s);n.length=0};try{const s=xe(A);n.push(s);const o=an(s,e),i=bt(A),r=AA(s,i),c=Ae(r,"perspective"),g=ze(r,c),l={subject:r,scene:g,framing:c},d=new Map;for(const f of e.shots){if(f.pose===void 0||d.has(f.pose))continue;const E=e.poses?.[f.pose]??[],m=xe(A);n.push(m);const Q=an(m,e);Dc(m,Q,E),m.updateMatrixWorld(!0);const w=AA(m,i),S=Ae(w,"perspective");d.set(f.pose,{subject:w,scene:ze(w,S),framing:S})}const h=f=>f===void 0?l:d.get(f),u=f=>new y().setFromMatrixPosition(o.get(f).matrixWorld),p=new Map;for(const f of new Set(e.shots.filter(E=>E.view==="turntable").map(E=>E.pose??void 0))){const E=h(f),m=[...new Set(e.shots.filter(Q=>Q.view==="turntable"&&(Q.pose??void 0)===f).map(Q=>Q.yaw))];p.set(f,za(E.subject,E.framing,m,t))}const C=e.shots.map(f=>{const E=h(f.pose);if(f.view==="turntable")return{label:f.label,camera:p.get(f.pose??void 0).get(f.yaw),scene:E.scene,stage:E,basis:tA(f.yaw)};const m=f.bones.find(w=>!o.has(w));if(m!==void 0)throw new Error(`Asset preview '--shots ${e.name}' shot ${JSON.stringify(f.label)} zooms on a joint this GLB's skeleton does not have: ${m}. List it in the definition's requiredBones or fix the rig.`);const Q=tA(f.yaw??0);return{label:f.label,camera:Sc(f.bones.map(u),Q,c.radius,f.spanFraction,t),scene:E.scene,stage:E,basis:Q}}),b=[],I=new Map,B=new Map;C.forEach(({stage:f},E)=>{const m=B.get(f);m?m.push(E):B.set(f,[E])});for(const[f,E]of B){const{framed:m,total:Q}=Cc(f.subject,E.map(w=>{const S=C[w];return{basis:S.basis,window:oc(S.camera,S.basis)}}));E.forEach((w,S)=>{if(m[S]!==0)return;const R=Mc(e.shots[w],e.name,Q);I.set(w,R),b.push(R)})}return{shots:C.map(({label:f,camera:E,scene:m},Q)=>{const w=I.get(Q);return{label:f,camera:E,scene:m,...w?{warning:w}:{}}}),warnings:b,dispose:a}}catch(s){throw a(),s}}function mA(A,e,t={}){const n=j(t.width),a=j(t.height),s=t.background??"neutral",o=_c(A,e,n/a);let i=null;try{const r=ce(new ge({antialias:!0,alpha:!0,preserveDrawingBuffer:!0}));i=r,r.setPixelRatio(1),r.outputColorSpace=G,r.toneMapping=Fe,r.toneMappingExposure=1,r.setClearColor(Me,s==="transparent"?0:1),r.setSize(n,a,!1);for(const b of o.shots)Ze(b.scene,r);const c=[],g=2,l=Math.ceil(o.shots.length/g),d=n*g,h=a*l,u=document.createElement("canvas");u.width=d,u.height=h;const p=u.getContext("2d");if(!p)throw new Error("Unable to create the asset preview contact sheet.");o.shots.forEach(({label:b,camera:I,scene:B,warning:f},E)=>{r.render(B,I),c.push({label:b,base64:O(r.domElement),mimeType:"image/png"});const m=E%g,Q=Math.floor(E/g),w=m*n,S=Q*a;p.drawImage(r.domElement,w,S,n,a),Ee(p,f?`${b.toUpperCase()} - EMPTY`:b.toUpperCase(),w,S,n,a,f?"warning":"normal")});const C={width:d,height:h,base64:O(u),mimeType:"image/png"};return{width:n,height:a,shots:c,warnings:o.warnings,contactSheet:C}}finally{i&&mt(i),i?.dispose(),i?.forceContextLoss(),o.dispose()}}function Lc(A){const e=A.replace(/^\/?public(\/|$)/,"/");if(!e.startsWith("/")||e.startsWith("//")||e.includes("\\")||e.includes("?")||e.includes("#"))throw new Error("Model asset paths must be the served web path (project-root absolute, with public/ stripped): e.g. /models/generated/hero.glb");let t;try{t=decodeURIComponent(e)}catch{throw new Error("Asset Editor model path contains invalid URL encoding.")}if(t.split("/").some(s=>s==="."||s===".."))throw new Error("Asset Editor model paths cannot traverse outside the project root.");const n=globalThis.location?.origin??"http://localhost",a=new URL(e,n);if(a.origin!==n||!a.pathname.toLowerCase().match(/\.(?:glb|gltf|spz)$/))throw new Error("Asset Editor loads bounded, same-origin project .glb, .gltf, or .spz files only.");return a}async function $a(A,e,t=fe){const n=await fetch(A,{signal:e});if(!n.ok)throw new Error(`Unable to load project model (${n.status} ${n.statusText}).`);const a=Number(n.headers.get("content-length"));if(Number.isFinite(a)&&a>t)throw new Error(`Asset Editor project models must be ${fe/1024/1024} MiB or less.`);if(!n.body){const g=await n.arrayBuffer();if(g.byteLength>t)throw new Error(`Asset Editor project models must be ${fe/1024/1024} MiB or less.`);return g}const s=n.body.getReader(),o=[];let i=0;try{for(;;){const{done:g,value:l}=await s.read();if(g)break;if(i+=l.byteLength,i>t)throw await s.cancel(),new Error(`Asset Editor project models must be ${fe/1024/1024} MiB or less.`);o.push(l)}}finally{s.releaseLock()}const r=new Uint8Array(i);let c=0;for(const g of o)r.set(g,c),c+=g.byteLength;return r.buffer}function rn(A,e,t){return new Promise((n,a)=>{let s=!1;const o=r=>s?!1:(s=!0,t.removeEventListener("abort",i),r(),!0),i=()=>o(()=>a(t.reason));if(t.addEventListener("abort",i,{once:!0}),t.aborted){i();return}Te.parse(A,new URL(".",e).href,r=>{r.scene.animations=[...r.animations],o(()=>n(r.scene))||de(r.scene)},r=>o(()=>a(r)))})}function vc(A,e){if(A.includes("\\")||A.includes("?")||A.includes("#"))throw new Error("Asset Editor .gltf dependencies must be plain same-origin project paths.");const t=new URL(A,e);if(t.origin!==e.origin)throw new Error("Asset Editor .gltf dependencies must stay on the project origin.");return t}function Gc(A,e){if(typeof A.mimeType=="string")return A.mimeType;const t=e.pathname.split(".").pop()?.toLowerCase();return t==="png"?"image/png":t==="jpg"||t==="jpeg"?"image/jpeg":t==="webp"?"image/webp":"application/octet-stream"}async function Nc(A,e,t){let n;try{n=JSON.parse(new TextDecoder().decode(A))}catch{throw new Error("Asset Editor could not parse the project .gltf JSON document.")}const a=[...Array.isArray(n.buffers)?n.buffers:[],...Array.isArray(n.images)?n.images:[]];let s=A.byteLength;for(const o of a){if(typeof o.uri!="string"||o.uri.startsWith("data:"))continue;const i=vc(o.uri,e),r=await $a(i,t,fe-s);s+=r.byteLength;const c=new Uint8Array(r);let g="";for(let l=0;l<c.length;l+=32768)g+=String.fromCharCode(...c.subarray(l,l+32768));o.uri=`data:${Gc(o,i)};base64,${btoa(g)}`}return JSON.stringify(n)}function QA(A,e){let t;try{const n=atob(A);t=new Uint8Array(n.length);for(let a=0;a<n.length;a++)t[a]=n.charCodeAt(a)}catch{throw new Error(`${e} is not valid base64.`)}if(t.byteLength===0||t.byteLength>fe)throw new Error(`${e} must be non-empty and at most ${fe/1024/1024} MiB.`);return new Promise((n,a)=>{Te.parse(t.buffer,"",s=>{s.scene.animations=[...s.animations],n(s.scene)},s=>a(s instanceof Error?s:new Error(String(s))))})}async function Uc(A,e={}){const t=await QA(A,"Asset preview GLB bytes");try{return CA(t,e)}finally{de(t)}}async function Oc(A,e,t={}){const n=await QA(A,"Asset preview GLB bytes");try{return mA(n,e,t)}finally{de(n)}}async function Hc(A,e){const t=Lc(A),n=new AbortController,a=()=>n.abort(e?.reason);e?.aborted?a():e?.addEventListener("abort",a,{once:!0});const s=globalThis.setTimeout(()=>n.abort(new Error("Asset Editor project model load timed out after 25 seconds.")),dc);try{const o=await $a(t,n.signal);if(n.signal.throwIfAborted(),t.pathname.toLowerCase().endsWith(".spz"))return{root:await xa(A,new Uint8Array(o)),sourceBytes:null};if(t.pathname.toLowerCase().endsWith(".glb")){const r=new Uint8Array(o.slice(0));return{root:await rn(o,t,n.signal),sourceBytes:r}}const i=await Nc(o,t,n.signal);return{root:await rn(i,t,n.signal),sourceBytes:null}}finally{globalThis.clearTimeout(s),e?.removeEventListener("abort",a)}}async function yt(A,e){return(await Hc(A,e)).root}function de(A){le(A,"gaussianSplat")&&A.dispose(),_e(A),A.traverse(e=>{const t=e;t.isInstancedMesh&&t.morphTexture?.dispose();const n=e;if(n.geometry?.dispose(),!n.material)return;const a=Array.isArray(n.material)?n.material:[n.material];for(const s of a){for(const o of Object.values(s))o instanceof Z&&o.dispose();s.dispose()}})}async function Pc(A,e={}){const t=await yt(A);try{return le(t,"gaussianSplat")?await qc(t,e):CA(t,e)}finally{de(t)}}async function jc(A,e,t={}){const n=await yt(A);try{return Wa(n,e,t)}finally{de(n)}}async function qc(A,e){const t=j(e.width),n=j(e.height),a=e.background??"neutral",s=Ae(A,"perspective"),o=ze(A,s),i=ce(new ge({antialias:!1,alpha:!0,preserveDrawingBuffer:!0}));let r=null;try{const c=await x(()=>import("./spark.module-DMQ9J7rT.js"),__vite__mapDeps([36,12,15]));r=new c.SparkRenderer({renderer:i,autoUpdate:!1,enableLod:!1}),o.add(r),i.setPixelRatio(1),i.outputColorSpace=G,i.toneMapping=Fe,i.toneMappingExposure=1,i.setClearColor(Me,a==="transparent"?0:1),i.setSize(t,n,!1),Ze(o,i);const g=[],l=document.createElement("canvas");l.width=t*2,l.height=n*2;const d=l.getContext("2d");if(!d)throw new Error("Unable to create the asset preview contact sheet.");for(const[h,u]of Ve.entries()){const p=EA(u,Ae(A,u),t/n);await r.update({scene:o,camera:p}),i.render(o,p),g.push({view:u,base64:O(i.domElement),mimeType:"image/png"});const C=h%2*t,b=Math.floor(h/2)*n;d.drawImage(i.domElement,C,b,t,n),Ee(d,u==="perspective"?"3/4":u.toUpperCase(),C,b,t,n)}return{width:t,height:n,orientation:BA([0,0,1]),views:g,contactSheet:{width:t*2,height:n*2,base64:O(l),mimeType:"image/png"}}}finally{r?.removeFromParent(),A.removeFromParent(),r?.dispose(),mt(i),i.dispose(),i.forceContextLoss()}}async function Jc(A,e,t={}){const n=await yt(A);try{return mA(n,e,t)}finally{de(n)}}const cn=0,Kc=16777215,gn=10;function Yc(A){return QA(A,"Compare reference GLB")}function ln(A,e){const t=xe(A),n=new $;n.rotation.y=uA(e),n.add(t);const a=new $;a.add(n),a.updateWorldMatrix(!0,!0);const s=Ae(a,"front"),o=[s.center.x-s.size.x/2,s.center.y-s.size.y/2,s.center.z-s.size.z/2],i=[s.center.x+s.size.x/2,s.center.y+s.size.y/2,s.center.z+s.size.z/2],r=$r(o,i);return a.scale.setScalar(r.scale),a.position.set(...r.position),a.updateWorldMatrix(!0,!0),{wrapper:a,dispose:()=>_e(t)}}function Vc(A,e){const t=Jr,n=t*e,a=new iA(-n,n,t,-t,.01,gn*4),s=A==="front"?new y(0,0,1):new y(1,0,0);return a.position.set(0,$A,0).addScaledVector(s,gn),a.up.set(0,1,0),a.lookAt(0,$A,0),a.updateProjectionMatrix(),a.updateMatrixWorld(!0),a}function zc(A,e,t={}){const n=j(t.width),a=j(t.height),s=n/a,o=[];let i=null;try{const r=ln(A,bt(A));o.push(r.dispose);const c=ln(e,t.refForward??bt(e));o.push(c.dispose);const g=new me({color:Kc});o.push(()=>g.dispose());const l=E=>{const m=new rA;return m.background=new J(cn),m.overrideMaterial=g,m.add(E),m},d=l(r.wrapper),h=l(c.wrapper),u=ce(new ge({antialias:!1,alpha:!1,preserveDrawingBuffer:!0}));i=u,u.setPixelRatio(1),u.toneMapping=In,u.setClearColor(cn,1),u.setSize(n,a,!1);const p=document.createElement("canvas");p.width=n,p.height=a;const C=p.getContext("2d");if(!C)throw new Error("Unable to create the compare readback canvas.");const b=(E,m,Q,w)=>{u.render(E,m),C.clearRect(0,0,n,a),C.drawImage(u.domElement,0,0);const S=C.getImageData(0,0,n,a).data,R=Wr(S,n*a);if(!R.some(T=>T!==0))throw new Error(`Compare ${w} view rendered an empty ${Q} silhouette — nothing to score.`);return{image:{base64:O(p),mimeType:"image/png"},mask:R}},I=document.createElement("canvas");I.width=n,I.height=a;const B=I.getContext("2d");if(!B)throw new Error("Unable to create the compare overlay canvas.");const f=[];for(const E of qr){const m=Vc(E,s),Q=b(d,m,"asset",E),w=b(h,m,"reference",E),S=Xr(Q.mask,w.mask);B.putImageData(new ImageData(Zr(Q.mask,w.mask),n,a),0,0),f.push({view:E,iou:S.iou,overlay:{base64:O(I),mimeType:"image/png"},asset:Q.image,ref:w.image})}return{width:n,height:a,views:f}}finally{i?.dispose(),i?.forceContextLoss();for(const r of o.reverse())r()}}async function Wc(A,e,t={}){const n=await yt(A);try{return await es(n,e,t)}finally{de(n)}}async function es(A,e,t={}){const n=await Yc(e);try{return zc(A,n,t)}finally{de(n)}}async function Xc(A,e){const t=e.assetPath,n=e.entityId,a=e.glbBase64;if(+(typeof t=="string")+ +(typeof n=="string")+ +(typeof a=="string")!==1)return{ok:!1,error:"capture-asset-preview requires exactly one of assetPath, entityId or glbBase64."};const o=e.width,i=e.height,r=e.background,c=e.shots,g=e.shotSet,l=e.forward,d=e.compare,h=e.stage,u=e.camera,p=e.pose;if(o!==void 0&&typeof o!="number"||i!==void 0&&typeof i!="number"||r!==void 0&&r!=="neutral"&&r!=="transparent"||c!==void 0&&c!=="source")return{ok:!1,error:"Invalid asset preview dimensions, background, or shots mode."};if(h!==void 0&&h!=="lab"&&h!=="scene")return{ok:!1,error:`capture-asset-preview stage must be "lab" or "scene", got ${String(h)}.`};if(g!==void 0&&c!==void 0)return{ok:!1,error:"capture-asset-preview cannot combine a shotSet definition with a shots mode."};const C=ys("capture-asset-preview",u);if(typeof C=="string")return{ok:!1,error:C};const b=Ss("capture-asset-preview",p);if(typeof b=="string")return{ok:!1,error:b};if((C||b)&&(c!==void 0||g!==void 0||d!==void 0||h==="scene"))return{ok:!1,error:'capture-asset-preview cannot combine camera/pose with a shots mode, a shotSet definition, compare, or stage "scene" — those legs stage their own cameras and poses.'};let I;if(g!==void 0)try{I=gc(g)}catch(m){return{ok:!1,error:m instanceof Error?m.message:String(m)}}const B=gt(l);if(c==="source"&&B===null)return{ok:!1,error:"capture-asset-preview --shots source requires a non-degenerate forward [x,y,z]."};if(d!==void 0){if(c!==void 0||I!==void 0)return{ok:!1,error:"capture-asset-preview cannot combine compare with shots."};if(typeof d!="object"||d===null||typeof d.glbBase64!="string"||d.forward!==void 0&>(d.forward)===null)return{ok:!1,error:"capture-asset-preview compare requires { glbBase64: string, forward?: [x, y, z] } with a non-degenerate ground-plane forward."}}if(typeof a=="string"){if(c!==void 0||d!==void 0)return{ok:!1,error:"capture-asset-preview cannot combine glbBase64 with a named shots mode or compare."};if(h==="scene")return{ok:!1,error:'capture-asset-preview stage "scene" photographs a live scene entity — glbBase64 bytes stand nowhere in the scene.'}}const f=h==="scene"?A.scene:null;if(h==="scene"){if(typeof n!="string")return{ok:!1,error:'capture-asset-preview stage "scene" photographs a live scene entity — pass entityId, not assetPath.'};if(c!==void 0||I!==void 0||d!==void 0)return{ok:!1,error:'capture-asset-preview cannot combine stage "scene" with a shots mode, a shotSet definition or compare.'};if(!f)return{ok:!1,error:'capture-asset-preview stage "scene" requires a bound viewport scene; none is bound yet.'}}const E=typeof n=="string"?Qt(fn(A.shell),A.objectMap,n):null;if(typeof n=="string"&&!E)return{ok:!1,error:`Entity not found: ${n}`};try{const m={...typeof o=="number"?{width:o}:{},...typeof i=="number"?{height:i}:{},...r?{background:r}:{},...C?{camera:C}:{},...b?{pose:b}:{}};if(d!==void 0){const w=d,S=gt(w.forward),R={...typeof o=="number"?{width:o}:{},...typeof i=="number"?{height:i}:{},...S?{refForward:S}:{}};return{ok:!0,data:{...typeof t=="string"?await Wc(t,w.glbBase64,R):await es(E,w.glbBase64,R)}}}return I!==void 0?{ok:!0,data:{...typeof a=="string"?await Oc(a,I,m):typeof t=="string"?await Jc(t,I,m):mA(E,I,m)}}:c==="source"?{ok:!0,data:{...typeof t=="string"?await jc(t,B,m):Wa(E,B,m)}}:f?{ok:!0,data:{...Tc(E,f,m)}}:typeof a=="string"?{ok:!0,data:{...await Uc(a,m)}}:{ok:!0,data:{...typeof t=="string"?await Pc(t,m):CA(E,m)}}}catch(m){return{ok:!1,error:m instanceof Error?m.message:String(m)}}}function X(){const A=lt();return A?Ma(A):null}function _(A,e,t="none"){return{...e===void 0?{}:{timeoutMs:e},derivedRefresh:t,handle:n=>{const a=$e();return a?A(a,n):{ok:!1,error:`${n.type} needs an editor session; none has opened yet.`}}}}const L={ok:!0},Zc={"focus-entity":_((A,e)=>(X()?.frameIds([e.id])||A.shell.focusOnEntity(e.id),L)),"frame-entity":_((A,e)=>{const t=e.id;if(typeof t!="string"||t.length===0)return{ok:!1,error:'frame-entity requires a string "id" (the entity to frame).'};const n=X();if(n)return n.frameIds([t])?L:{ok:!1,error:`Entity not found: ${t}`,data:{code:"ENTITY_NOT_FOUND"}};const a=fn(A.shell);return a.hierarchy.node(t)!==null&&a.rects||Qt(a,A.objectMap,t)?(A.shell.focusOnEntity(t),L):{ok:!1,error:`Entity not found: ${t}`,data:{code:"ENTITY_NOT_FOUND"}}}),"focus-selection":_(A=>(X()?.frameSelection()||A.shell.focusOnSelection(),L)),"view-preset":_((A,e)=>{const t=e.preset,n=["top","front","right","perspective"];if(typeof t!="string"||!n.includes(t))return{ok:!1,error:`view-preset requires one of ${n.join(", ")}, got ${t===void 0?"nothing":JSON.stringify(t)}.`};const a=t,s=X();return s?s.setViewPreset(a==="perspective"?"isometric":a):A.shell.setViewPreset(a),L}),"set-camera":_((A,e)=>{const t=e.position,n=e.target,a=e.fov;if(!t||!n||typeof t.x!="number"||typeof t.y!="number"||typeof t.z!="number"||typeof n.x!="number"||typeof n.y!="number"||typeof n.z!="number")return{ok:!1,error:"set-camera requires numeric {x,y,z} position and target."};const s=X();return s?s.setCameraPose(t,n,a):A.shell.setCameraPose(t,n,a),L}),"document-orbit":_((A,e)=>dn(e),12e4),"document-turntable":_((A,e)=>dn(e),12e4),"document-frame":_((A,e)=>{const t=X();if(!t)return{ok:!1,error:"document-frame needs an Object3D document open and active. For the Scene viewport use `frame-entity`/`focus-selection`.",data:{code:"NO_ACTIVE_OBJECT3D_DOCUMENT"}};const n=e.fit;return n!==void 0&&(typeof n!="number"||!(n>=.1&&n<=10))?{ok:!1,error:'document-frame: "fit" must be a number in 0.1..10.'}:t.frame(typeof n=="number"?n:1)?{ok:!0,data:{...t.cameraPose()}}:{ok:!1,error:"Nothing to frame: the document subject has no measurable bounds.",data:{code:"EMPTY_FRAME_BOUNDS"}}}),"capture-viewport":_(async(A,e)=>{const t=Rs(e);if("error"in t)return{ok:!1,error:t.error};if(A.hasAdoptedScene)try{const o=await pn().documents.captureActive(t.size);return{ok:!0,data:{base64:o.base64,mimeType:o.mimeType}}}catch(o){return{ok:!1,error:o instanceof Error?o.message:String(o)}}const n=A.captureViewportImage(t.size);if(!n)return{ok:!1,error:`This door photographs the editor's own three.js Scene viewport, and nothing has bound one (no renderer/scene/camera). A canvas-surface world (a first-party canvas root, or a PixiJS/Phaser/Babylon ingest) never binds it — it draws on its own canvas in the Game document. Capture that through \`capture-active-document\` (\`editor.captureActiveDocument()\`) or the running game through \`bridge-screenshot\` (${ks("screenshot")}).`};const a=n.indexOf(",");return{ok:!0,data:{base64:a>=0?n.slice(a+1):n,mimeType:"image/png"}}},void 0,"if-content-changed"),"capture-asset-preview":_((A,e)=>Xc(A,e),3e4,"if-content-changed"),"set-grid":_((A,e)=>{const t=lt();return!t||!Pt(t)?{ok:!1,error:"set-grid: the active document draws no grid."}:(Ds(t,e.enabled),L)}),"set-helpers":_((A,e)=>{const t=st(A.shell);return t.showHelpers!==e.enabled&&t.toggleHelpers(),L}),"set-stats":_((A,e)=>{const t=st(A.shell);return re(t).showStats!==e.enabled&&re(t).toggleStats(),L}),"set-shading-mode":_((A,e)=>{const t=X(),n=e.mode;if(n==="preview"||n==="rendered"){const a=lt(),s=a?Pt(a)?.stageKind:void 0;if(!t||!s||hn(s)?.modes?.[n]?.lighting===void 0)return{ok:!1,error:`Shading mode "${n}" is lit as a stage says, and the active document's stage says nothing for it.`}}return t?t.setMode(e.mode):A.setShadingMode(e.mode),L}),"set-helper-type":_((A,e)=>{const t=st(A.shell),n=e.helperType,a=X();return a&&n==="bounds"?(a.setBounds(e.enabled),L):a&&n==="skeletons"?(a.setSkeleton(e.enabled),L):(t.helperVisibility[n]!==e.enabled&&t.toggleHelperType(n),L)}),"set-transform-mode":_((A,e)=>(A.shell.setTransformMode(e.mode),L)),"set-transform-space":_((A,e)=>(A.shell.setTransformSpace(e.space),L)),"set-snap":_((A,e)=>(A.shell.snapEnabled!==e.enabled&&A.shell.toggleSnap(),L))};async function dn(A){const e=X();if(!e)return{ok:!1,error:`${A.type} needs an Object3D document open and active (a model, a live module, an entity model). Open one with \`editor.openAsset(<path>)\` first.`,data:{code:"NO_ACTIVE_OBJECT3D_DOCUMENT"}};const t=A.type==="document-orbit"?A.duration:A.seconds;return t!==void 0&&(typeof t!="number"||!(t>=0&&t<=60))?{ok:!1,error:`${A.type}: the move's length must be a number of seconds in 0..60.`}:{ok:!0,data:{...A.type==="document-orbit"?await e.orbit({...typeof A.azimuth=="number"?{azimuth:A.azimuth}:{},...typeof A.elevation=="number"?{elevation:A.elevation}:{},...typeof t=="number"?{duration:t}:{}}):await e.turntable({...typeof t=="number"?{seconds:t}:{},...typeof A.revolutions=="number"?{revolutions:A.revolutions}:{}})}}}function $c(){return pn().session.reportFacet(()=>{const A=$e();if(!A)return{};const e=st(A.shell),t=lt(),n=t?Ma(t)?.presentation():void 0,a=re(e).cameraPose;return{showGrid:t?un(t):!0,showHelpers:e.showHelpers,showStats:re(e).showStats,shadingMode:n?.mode??A.shadingMode,helperVisibility:{...e.helperVisibility,...n?{bounds:n.bounds,skeletons:n.skeleton}:{}},transformMode:e.transformMode,transformSpace:A.shell.transformSpace,snapEnabled:A.shell.snapEnabled,...a?{camera:{position:{x:a.position.x,y:a.position.y,z:a.position.z},target:{x:a.target.x,y:a.target.y,z:a.target.z},fov:a.fov}}:{}}})}const eg={save:A=>_s("view",A),saveThumbnail:Ms};let Oe=null;function tg(){if(Oe)return Oe;const A=[xs({Object3DPreview:Oo,Object3DAuthoring:Ho}),Fs("three-viewport",Zc),jo(),Pr(),nr(),$c(),ur(),Dr(),Ur(),ko(),St("hostLive",Os),St("interactive",Mo),St("inspectorPreview",Hs),Ts(e=>re(e).attachStatePersistence(eg))];return jr(Go),Oe=()=>{for(const e of A.reverse())e();Oe=null},Oe}const Ag="workspace.service";function ng(){return tg()}const Rg=Object.freeze(Object.defineProperty({__proto__:null,point:Ag,start:ng},Symbol.toStringTag,{value:"Module"}));export{wg as A,Qg as B,$e as C,Ig as D,lA as E,bg as F,Ma as G,hr as H,re as I,fg as J,dg as K,Hc as L,xe as M,Sg as N,_e as O,pg as P,Pi as Q,Pc as R,CA as S,Rg as T,Xi as a,Zi as b,Dg as c,de as d,Ae as e,nn as f,Ji as g,le as h,te as i,Cg as j,Eg as k,yt as l,$t as m,tg as n,Qt as o,_a as p,Ga as q,wr as r,Ye as s,rr as t,hg as u,yg as v,ug as w,dA as x,Bg as y,mg as z};
|