@liveroom-tech/react-immersive 5.0.0 → 5.0.1

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.
@@ -1,12 +1,12 @@
1
- import{A as da,B as pa,C as gl,D as Hd,E as Wd,F as Xd,a as hl,b as Rd,c as Ld,d as sa,e as Yi,g as kd,i as Id,j as Bd,k as zd,l as $t,m as Hr,n as la,o as ir,p as je,q as Nd,r as jd,s as Ud,t as Fd,u as Vd,v as Qi,w as fl,x as ca,y as Gd,z as ua}from"./chunk-XTLSAYAQ.mjs";import{d as ml,g as $n,h as Dd,o as Od,p as Yn,q as Ki,r as mn,w as qd,x as $d}from"./chunk-BGYK4Y2Y.mjs";import{a as pl}from"./chunk-JR557W27.mjs";var Yd={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1},xb=Object.freeze({minimal:Object.freeze({...Yd}),showcase:Object.freeze({...Yd,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,enableKeyboardNavigation:!0})}),wb=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Kd(e){let t={};for(let r of Object.keys(e))e[r]!==void 0&&(t[r]=e[r]);return t}function Mb({ui:e,tools:t,controls:r,perf:n,tiles:i,xr:o,decoders:a}){let s=e?.download,c=e?.mouseController,l=t?.measure,p=r?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:c===void 0?void 0:c!==!1,mouseControllerPosition:typeof c=="object"?c.position:void 0,mouseControllerOpacity:typeof c=="object"?c.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,highlightOnHover:e?.highlightOnHover,showMeasureTools:l===void 0?void 0:l!==!1,measurementUnit:typeof l=="object"?l.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,texturePositioning:t?.texturePositioning,enableCameraControls:r?.enabled,enableKeyboardNavigation:r?.keyboard,disableZoom:r?.zoom===void 0?void 0:!r.zoom,zoomOnSelected:r?.zoomOnSelect,autoRotate:p===void 0?void 0:p!==!1,autoRotateSpeed:typeof p=="number"?p:void 0,refitOnResize:r?.refitOnResize,cameraLimits:r?.limits,moveSensitivity:r?.moveSensitivity,zoomSensitivity:r?.zoomSensitivity,renderMode:n?.renderMode,maxDpr:n?.maxDpr,performanceProfile:n?.profile,preserveDrawingBuffer:n?.preserveDrawingBuffer,tilesetUrl:i?.url,tilesErrorTarget:i?.errorTarget,tilesCacheSize:i?.cacheSize,enableXR:o?.enabled,usdzUrl:o?.usdzUrl,arScaleMode:o?.scaleMode,mobileHandoffUrl:o?.mobileHandoffUrl,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function Qd(e){let t={...e};for(let r of wb)delete t[r];return{...e.preset?xb[e.preset]:void 0,...Kd(t),...Kd(Mb(e))}}import{useCallback as kt,useRef as Qn,useState as Zd}from"react";import{Vector3 as ep}from"three";var bl=new WeakSet;function Kn(e){bl.add(e)}function Jd(e){let t=bl.has(e);return t&&bl.delete(e),t}function tp(e){return[e.x,e.y,e.z]}function Pr(e,t){let r=new ep,n=new ep;return t.getPosition(r),t.getTarget(n),{position:tp(r),target:tp(n),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function Sb(e,t){return e?e.position[0]===t.position[0]&&e.position[1]===t.position[1]&&e.position[2]===t.position[2]&&e.target[0]===t.target[0]&&e.target[1]===t.target[1]&&e.target[2]===t.target[2]&&e.fov===t.fov&&e.zoom===t.zoom&&e.azimuthAngle===t.azimuthAngle&&e.polarAngle===t.polarAngle:!1}async function Ji(e,t,r=.6){let n=e.smoothTime;e.smoothTime=r;try{return await t()}finally{e.smoothTime=n}}function tS(e={}){let t=Qn(e);t.current=e;let r=Qn(null),[n,i]=Zd(null),[o,a]=Zd(()=>({...e.presets})),s=Qn(o);s.current=o;let c=kt(_=>{i(S=>Sb(S,_)?S:_)},[]),l=kt(_=>{c(_)},[c]),p=Qn(null),d=Qn(null),h=Qn(null),m=kt(_=>{r.current=_;let S=Pr(_.raw.controls.camera,_.raw.controls);c(S),_.raw.scene!==d.current&&(d.current=_.raw.scene,p.current=null,h.current=null),_.homeCameraState&&!p.current&&(p.current=_.homeCameraState);let{initialPosition:A,initialTarget:G,initialTransition:v=!1}=t.current;if((A||G)&&_.raw.scene&&(A||_.homeCameraState)&&h.current!==_.raw.controls){h.current=_.raw.controls,_.homeCameraState||Kn(_.raw.controls);let z=A??S.position,M=G??S.target;_.raw.controls.setLookAt(z[0],z[1],z[2],M[0],M[1],M[2],v).then(()=>{if(r.current?.raw.controls!==_.raw.controls)return;let O=Pr(_.raw.controls.camera,_.raw.controls);p.current={position:O.position,target:O.target},c(O)}).catch(()=>{})}},[c]),f=kt(async()=>{let _=r.current,S=_?.raw.controls;if(!S)return!1;try{let A=p.current;return A?await Ji(S,()=>S.setLookAt(A.position[0],A.position[1],A.position[2],A.target[0],A.target[1],A.target[2],!0)):_?.raw.scene?await Ji(S,()=>S.fitToBox(_.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Ji(S,()=>S.reset(!0)),!0}catch{return!1}},[]),b=kt(async()=>{let _=r.current;if(!_?.raw.controls||!_.raw.scene)return!1;try{return await Ji(_.raw.controls,()=>_.raw.controls.fitToBox(_.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),P=kt(async _=>{let S=r.current;if(!S?.raw.controls)return!1;let A=$n(S.objectBindings,_);if(!A)return!1;let G=S.raw.nodes[A];if(!G)return!1;try{return await Ji(S.raw.controls,()=>S.raw.controls.fitToBox(G,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),C=kt(async(_,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{return r.current?.homeCameraState||Kn(A),await A.setTarget(_[0],_[1],_[2],S),c(Pr(A.camera,A)),!0}catch{return!1}},[c]),k=kt(async(_,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{r.current?.homeCameraState||Kn(A);let G=[A.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],S)];_.azimuthAngle!=null&&_.polarAngle!=null&&G.push(A.rotateTo(_.azimuthAngle,_.polarAngle,S)),await Promise.all(G);let v=A.camera,z=!1;return _.fov!=null&&"fov"in v&&typeof v.fov=="number"&&(v.fov=_.fov,z=!0),_.zoom!=null&&"zoom"in v&&typeof v.zoom=="number"&&(v.zoom=_.zoom,z=!0),z&&"updateProjectionMatrix"in v&&v.updateProjectionMatrix(),c(Pr(v,A)),!0}catch{return!1}},[c]),y=kt((_,S=!0)=>k(_,S),[k]),j=kt((_,S,A=!0)=>k({position:_,target:S},A),[k]),L=kt(async(_,S,A=!0)=>{let G=r.current?.raw.controls;if(!G)return!1;try{return r.current?.homeCameraState||Kn(G),await G.rotateTo(_*Math.PI/180,S*Math.PI/180,A),c(Pr(G.camera,G)),!0}catch{return!1}},[c]),w=kt(async(_,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{return r.current?.homeCameraState||Kn(A),await A.dollyTo(_,S),c(Pr(A.camera,A)),!0}catch{return!1}},[c]),I=kt(_=>{let S=r.current?.raw.controls,A=_.trim();if(!S||!A)return null;let G=Pr(S.camera,S);return s.current={...s.current,[A]:G},a(v=>({...v,[A]:G})),c(G),G},[c]),U=kt((_,S=!0)=>{let A=s.current[_];return A?k(A,S):Promise.resolve(!1)},[k]);return{cameraState:n,cameraPresets:o,resetView:f,focusObject:P,fitScene:b,setCameraTarget:C,setCameraState:y,lookAt:j,orbitTo:L,dollyTo:w,savePreset:I,goToPreset:U,handleCameraChange:l,handleViewerReady:m}}import{useCallback as Jn,useEffect as Cb,useRef as rp,useState as fn}from"react";function iS(){let e=rp(null),[t,r]=fn([]),n=rp(null),[i,o]=fn([]),[a,s]=fn(null),[c,l]=fn(!1),[p,d]=fn(1),[h,m]=fn(0),[f,b]=fn(0);Cb(()=>()=>{n.current?.()},[]);let P=Jn(w=>{n.current?.(),e.current=w,r(w.clips),o(w.clipDetails??w.clips.map(U=>({sourceName:U,duration:0})));let I=w.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(I.currentClip),l(I.isPlaying),d(I.speed),m(I.time),b(I.duration),w.subscribe?n.current=w.subscribe(U=>{s(U.currentClip),l(U.isPlaying),d(U.speed),m(U.time),b(U.duration)}):n.current=null},[]),C=Jn(w=>{e.current?.play(w),s(w),l(!0)},[]),k=Jn(()=>{e.current?.pause(),l(!1)},[]),y=Jn(()=>{e.current?.stop(),s(null),l(!1),m(0)},[]),j=Jn(w=>{e.current?.setSpeed(w),d(w)},[]),L=Jn(w=>{e.current?.seek?.(w),m(w)},[]);return{clips:t,clipDetails:i,currentClip:a,isPlaying:c,speed:p,time:h,duration:f,play:C,pause:k,stop:y,setSpeed:j,seek:L,handleAnimationsReady:P}}import{AlertTriangle as Tb}from"lucide-react";import{jsx as ha,jsxs as np}from"react/jsx-runtime";function ma({title:e,message:t,tone:r="default"}){return np("div",{className:`ri-license-overlay${r==="error"?" ri-license-overlay--error":""}`,children:[np("div",{className:"ri-license-overlay__header",children:[r==="error"?ha(Tb,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):ha("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),ha("span",{className:"ri-license-overlay__title",children:e})]}),ha("p",{className:"ri-license-overlay__message",children:t})]})}import{CanvasTexture as ip,Color as op,ImageLoader as _b,NoColorSpace as ga,RepeatWrapping as fa,SRGBColorSpace as wl,Texture as Pb}from"three";var Zn=new Map,Er={color:"#93c5fd",intensity:.07},eo=new op(Er.color).multiplyScalar(Er.intensity),ap=new op(Er.color),sp=.28,ei=new Map,xl=new Map;function Eb(e){return`${e.name}|${e.size}|${e.lastModified}`}function hS(e){let t=Eb(e),r=e.name.lastIndexOf("."),n=r>0?e.name.slice(0,r):e.name,i=r>0?e.name.slice(r):"",o=`materials/${e.name}`,a=2;for(;;){let s=xl.get(o);if(s===void 0||s===t)return xl.set(o,t),o;o=`materials/${n}-${a}${i}`,a+=1}}function lp(e){return ei.get(e)}function cp(e,t){let r=++e.loadGeneration;e.loaded=!1;let n=()=>{if(e.loadGeneration!==r)return;e.loaded=!0;let i=e.pending;e.pending=[];for(let o of i)o()};new _b().load(t,i=>{e.loadGeneration===r&&(e.texture.image=i,e.texture.needsUpdate=!0,n())},void 0,()=>{e.loadGeneration===r&&(console.warn(`Failed to load texture: ${t}`),n())})}function up(e,t){for(let r of[wl,ga]){let n=Zn.get(Zi(e,r));n&&cp(n,t)}}function mS(e,t){let r=ei.get(e);r&&r!==t&&r.startsWith("blob:")&&URL.revokeObjectURL(r),ei.set(e,t),up(e,t)}function fS(e){let t=ei.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),ei.delete(e),xl.delete(e),up(e,e))}function Zi(e,t){return`${t}|${e}`}function to(e,t=ga,r){let n=Zi(e,t),i=Zn.get(n);if(i)return r&&!i.loaded&&i.pending.push(r),i.texture;let o=ei.get(e)??e,a={texture:new Pb,refCount:0,loaded:!1,pending:r?[r]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Zn.set(n,a),cp(a,o),a.texture}function ba(e,t=ga,r){let n=to(e,t,r);return Zn.get(Zi(e,t)).refCount+=1,n}function gn(e,t=ga){let r=Zn.get(Zi(e,t));r&&(r.refCount-=1,r.refCount<=0&&(r.loadGeneration+=1,r.pending=[],r.texture.dispose(),Zn.delete(Zi(e,t))))}function ya(e,t,r,n,i,o=1,a=0){let s=e.offsetTextures??(e.offsetTextures={}),c=s[t],l=c;if(!l||l.sourcePath!==n||l.base!==r){c?.texture.dispose();let d=r.clone();d.wrapS=fa,d.wrapT=fa,d.center.set(.5,.5),d.needsUpdate=!0,l={texture:d,sourcePath:n,base:r},s[t]=l}let p=o>0?o:1;return l.texture.offset.set(i[0],i[1]),l.texture.repeat.set(1/p,1/p),l.texture.rotation=a,l.texture}function va(e,t){let r=e.offsetTextures,n=r?.[t];n&&(n.texture.dispose(),delete r[t])}function dp(e){let t=e.offsetTextures;if(t){for(let r of Object.values(t))r.texture.dispose();delete e.offsetTextures}}var yl=null;function xa(){if(yl)return yl;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let r=t.getContext("2d"),n=r.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);n.addColorStop(0,"#ffffff"),n.addColorStop(.4,"#b5b5b5"),n.addColorStop(1,"#3a3a3a"),r.fillStyle=n,r.fillRect(0,0,e,e);let i=new ip(t);return i.colorSpace=wl,yl=i,i}var vl=null;function pp(){if(vl)return vl;let e=1024,t=8,r=e/t,n=["#ef4444","#f59e0b","#22c55e","#6366f1"],i=document.createElement("canvas");i.width=e,i.height=e;let o=i.getContext("2d");o.textAlign="center",o.textBaseline="middle";for(let s=0;s<t;s+=1)for(let c=0;c<t;c+=1){let l=c*r,p=s*r,d=(Math.floor(c/2)+Math.floor(s/2))%4;o.fillStyle=n[d],o.fillRect(l,p,r,r),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let k=1;k<4;k+=1){let y=k*r/4;o.beginPath(),o.moveTo(l+y,p),o.lineTo(l+y,p+r),o.moveTo(l,p+y),o.lineTo(l+r,p+y),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(l,p,r,r);let h=l+r*.23,m=p+r*.72,f=l+r*.72,b=p+r*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(h,m),o.lineTo(f,b),o.lineTo(f-r*.2,b),o.moveTo(f,b),o.lineTo(f,b+r*.2),o.stroke();let P=s*t+c+1;o.font=`700 ${Math.round(r*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let C=String(P).padStart(2,"0");o.strokeText(C,l+r/2,p+r*.82),o.fillText(C,l+r/2,p+r*.82)}let a=new ip(i);return a.colorSpace=wl,a.wrapS=fa,a.wrapT=fa,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,vl=a,a}import{useEffect as Db,useState as Ob}from"react";var Ab="ri:license-grant:v1",Rb={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},hp=new Map;function fp(e){let t=atob(e);return Uint8Array.from(t,r=>r.charCodeAt(0)).buffer}function mp(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return fp(t.padEnd(Math.ceil(t.length/4)*4,"="))}function Lb(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function wa(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),r=String.fromCharCode(...new Uint8Array(t));return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Ml(e,t){return`${Ab}:${t}:${e}`}function kb(e,t){let r=hp.get(e);if(r)return r;let n=crypto.subtle.importKey("spki",fp(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return hp.set(e,n),n}async function Sl(e,t,r){if(!globalThis.crypto?.subtle)return null;try{let[n,i,o,a,...s]=e.split("."),c=Rb[i];if(n!=="ri1"||!c||!o||!a||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(mp(o)));if(!Lb(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await kb(i,c),mp(a),new TextEncoder().encode(`${n}.${i}.${o}`)))return null;let d=Math.floor(Date.now()/1e3),h=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==r||l.expiresAt<=d||l.issuedAt>d+300||h<=0||h>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function gp(e,t,r){try{return await Sl(e,await wa(t),r)}catch{return null}}async function bp(e,t,r){try{let n=await wa(t);return await Sl(e,n,r)?(localStorage.setItem(Ml(n,r),e),!0):!1}catch{return!1}}async function yp(e,t){try{let r=await wa(e),n=Ml(r,t),i=localStorage.getItem(n);if(!i)return null;let o=await Sl(i,r,t);return o||localStorage.removeItem(n),o}catch{return null}}async function Cl(e,t){try{let r=await wa(e);localStorage.removeItem(Ml(r,t))}catch{}}var Ib=["localhost","127.0.0.1","0.0.0.0"],Bb=e=>Ib.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),xp="https://react-immersive.liveroom.dev/api/validate-license",zb=()=>typeof window<"u",Nb=300*1e3,jb=5e3,Ub=400,_l=new Map,Tl=new Map,Wr=class extends Error{},wp=async(e,t,r)=>{let n=await yp(e,t);return n?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:n.environment,tier:n.tier,isLocalDomain:r}):null},vp=async(e,t,r)=>{let n=await wp(e,t,r);return n||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:r})},Fb=e=>e instanceof Wr||e instanceof TypeError,Vb=()=>new Promise(e=>setTimeout(e,Ub)),Gb=e=>e==="development"||e==="production",Hb=e=>{if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.valid!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.environment!==void 0&&!Gb(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},Wb=e=>{if(!e||typeof e!="object")return null;let t=e,r=t.reason??t.error;return typeof r=="string"&&r.trim()?r:null},Xb=(e,t,r)=>`${r}::${e}::${t}`,qb=e=>{let t=_l.get(e);return t?Date.now()-t.timestamp>Nb?(_l.delete(e),null):t.result:null},$b=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Yb=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function Kb(e,t,r,n){let i=Xb(e,t,n),o=qb(i);if(o)return o;let a=Tl.get(i);if(a)return a;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await Qb(e,t,r,i,n)}catch(l){if(!Fb(l))throw l;if(c===0){let p=await wp(e,t,r);if(p)return p;await Vb();continue}return vp(e,t,r)}return vp(e,t,r)})().finally(()=>{Tl.delete(i)});return Tl.set(i,s),s}async function Qb(e,t,r,n,i){let o=new AbortController,a=setTimeout(()=>o.abort(),jb),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(p){throw o.signal.aborted?new Wr("License validation timed out"):p}finally{clearTimeout(a)}let c;try{c=await s.json()}catch{throw new Wr(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new Wr(`License server error (${s.status})`);let p=Wb(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await Cl(e,t),Yb(p,r)}if(!Hb(c))throw new Wr("License server returned an unexpected payload");let l=$b(c,r);if(l.status==="valid"&&i!==xp){let p=c.offlineGrant?await gp(c.offlineGrant,e,t):null;if(!p)throw new Wr("License validation endpoint did not return a verifiable signed grant");l={...l,environment:p.environment,tier:p.tier}}return l.status==="valid"?(_l.set(n,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await bp(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Cl(e,t),l}var Mp=(e,t=xp)=>{let[r,n]=Ob({status:"checking",isLocalDomain:!1});return Db(()=>{if(!zb())return;let i=!1,o=p=>{i||n(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),c=Bb(s);return o({status:"checking",isLocalDomain:c}),a?((async()=>{try{o(await Kb(a,s,c,t))}catch(p){let d=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{i=!0})},[e,t]),r};import{createContext as Jb,useContext as Zb}from"react";var ey=Jb({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Ma=()=>Zb(ey);import{Box3 as Sp,Euler as ty,Matrix4 as Cp,Quaternion as ry,Vector3 as Xr}from"three";function Tp(e){e.updateWorldMatrix(!0,!0);let t=new Cp().copy(e.matrixWorld).invert(),r=new Sp,n=new Sp,i=!1;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||(a.geometry.boundingBox||a.geometry.computeBoundingBox(),!a.geometry.boundingBox))return;let s=new Cp().multiplyMatrices(t,o.matrixWorld);n.copy(a.geometry.boundingBox).applyMatrix4(s),r.union(n),i=!0}),i?r.getCenter(new Xr):new Xr}function _p(e,t="XYZ"){return new ry().setFromEuler(new ty(e[0],e[1],e[2],t))}function ny(e,t,r,n,i="XYZ"){let a=new Xr(...n).multiply(new Xr(...r)).applyQuaternion(_p(t,i)).add(new Xr(...e));return[a.x,a.y,a.z]}function TS(e,t,r,n,i,o="XYZ"){let a=new Xr(...ny(e,t,n,i,o)),s=new Xr(...i).multiply(new Xr(...n)).applyQuaternion(_p(r,o)),c=a.sub(s);return[c.x,c.y,c.z]}import{useRef as ue,useState as ce,useEffect as Te,useCallback as Q,useMemo as Mt,Suspense as Gf}from"react";import{GizmoHelper as uM,GizmoViewport as dM}from"@react-three/drei";import{useFrame as Yf,useThree as Kf}from"@react-three/fiber";import{QRCodeSVG as pM}from"qrcode.react";import{Box3 as Ci,PerspectiveCamera as Qf,Raycaster as hM,Sphere as mM,Vector2 as fM,Vector3 as It}from"three";import{Component as iy}from"react";var Sa=class extends iy{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,n){this.props.onLoadError?.(r)}render(){return this.state.hasError?null:this.props.children}};import{PerspectiveCamera as Pl,Vector2 as oy}from"three";var Pp="riEditorGizmo";function Ep(e){return e.userData[Pp]=!0,e}function Ap(e){let t=[];return e.traverse(r=>{r.visible&&r.userData[Pp]&&(r.visible=!1,t.push(r))}),()=>{for(let r of t)r.visible=!0}}function Ca(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:r,scene:n,camera:i,invalidate:o}=e;if(!r.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:a=!1}=t,s=r.getSize(new oy),c=r.getPixelRatio(),l=i instanceof Pl?i.aspect:null,p=n.background,d=t.width??s.x,h=t.height??s.y,m=d!==s.x||h!==s.y,f=Ap(n);return a&&(n.background=null),m&&(r.setPixelRatio(1),r.setSize(d,h,!1),i instanceof Pl&&(i.aspect=d/h,i.updateProjectionMatrix())),o(),new Promise((b,P)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let C,k;try{C=r.domElement.toDataURL("image/png")}catch(y){k=y}f(),a&&(n.background=p),m&&(r.setPixelRatio(c),r.setSize(s.x,s.y,!1),i instanceof Pl&&l!==null&&(i.aspect=l,i.updateProjectionMatrix())),o(),k?P(k):b(C)})})})}var ay={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ"},sy=/\.(glb|gltf|obj|fbx|usdz|zip)$/i;function ly(e,t){let r=e?.response?.status;if(typeof r=="number")return r;let n=/responded with (\d{3})/.exec(t);return n?Number(n[1]):null}function Rp(e,t,r){let n=e instanceof Error?e.message:e==null?"":String(e),i="This model couldn't be loaded",o=n||null,a=ly(e,n);if(a===404||a===410)return{title:i,detail:`Nothing was found at this address (${a}). Check that modelUrl points to the file.`,technical:o};if(a===401||a===403)return{title:i,detail:`The server refused access to the file (${a}). Check that the file is public, or that a signed URL hasn't expired.`,technical:o};if(a!==null)return{title:i,detail:`The server responded with ${a} when the file was requested.`,technical:o};if(/failed to fetch|networkerror|load failed|network error/i.test(n))return{title:i,detail:"The download was blocked or failed. Check that the URL is correct and, if the file is on another domain, that its server allows cross-origin requests (CORS) from this site.",technical:o};if(/<!doctype|<html/i.test(n))return{title:i,detail:"The server sent back a web page instead of a model. There's probably no file at this path: many servers answer a missing file with their index.html.",technical:o};let s=t.split(/[?#]/,1)[0],c=ay[r??kd(t)],l=sy.test(s);return{title:i,detail:l||r?`The file couldn't be read as ${c}. Check that it's a valid ${c} file${r?" and that modelFormat matches it":""}.`:`The file couldn't be read as ${c}. The URL has no file extension, so set modelFormat to the file's format.`,technical:o}}import{Color as cy}from"three";function Lp(e,t,r){let n=t[r]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?$n(t,o)===r||o===n:!1})}function El(e,t){return e.lighting.lights.some(r=>t[r.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(r=>t[r.id]?{...r,...t[r.id]}:r)}}:e}function kp(e){let t=null;if(e?.traverse(i=>{if(t)return;let o=i.material;for(let a of Array.isArray(o)?o:o?[o]:[])if(a.emissive instanceof cy){t=a;return}}),!t)return{color:"#000000",intensity:0,on:!1};let r=`#${t.emissive.getHexString()}`,n=t.emissiveIntensity??1;return{color:r,intensity:n,on:r!=="#000000"&&n>0}}import{HexColorPicker as uy}from"react-colorful";import{Fragment as Dp,jsx as qr,jsxs as ro}from"react/jsx-runtime";function Op({kind:e,color:t,brightness:r,onColorChange:n,onBrightnessChange:i,onClose:o}){return qr("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?ro(Dp,{children:[qr("p",{className:"ri-popoverLabel",children:"Light color"}),qr(uy,{color:t,onChange:n}),ro("div",{className:"ri-inlineRow",children:[qr("span",{className:"ri-colorCode",children:t}),qr("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):ro(Dp,{children:[qr("p",{className:"ri-popoverLabel",children:"Brightness"}),qr("input",{type:"range",min:0,max:200,step:1,value:r,"aria-label":"Brightness",style:{width:"100%"},onChange:a=>i(Number(a.target.value))}),ro("div",{className:"ri-inlineRow",children:[ro("span",{className:"ri-colorCode",children:[r,"%"]}),qr("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}import{useCallback as _a,useEffect as wy,useState as kl}from"react";import{GLTFExporter as dy}from"three-stdlib";function no(e,t){let r=URL.createObjectURL(e),n=document.createElement("a");n.href=r,n.download=t,n.style.display="none";try{document.body.appendChild(n),n.click()}finally{n.remove(),window.setTimeout(()=>{URL.revokeObjectURL(r)},1e3)}}function Ip({scene:e,objectBindings:t,matRefs:r,downloadFilename:n,onComplete:i}){import("three").then(({Group:o,Mesh:a})=>{let s=new o,c=new Map;for(let[d,h]of Object.entries(t))c.set(h.modelObjectId??d,d);let l=d=>{let h=d;for(;h;){let m=h.name||h.uuid,f=c.get(m)??m,b=t[f];if(b?b.visible===!1:h.visible===!1)return!1;h=h.parent}return!0};e.traverse(d=>{let h=d;if(!h.isMesh||!h.geometry||!l(h))return;let m=h.name||h.uuid,f=c.get(m)??m,b=r[f]??h.material;if(!b)return;let P=new a(h.geometry,b);P.name=m,P.applyMatrix4(h.matrixWorld),s.add(P)}),new dy().parse(s,d=>{let h=d instanceof ArrayBuffer?new Blob([d],{type:"model/gltf-binary"}):new Blob([JSON.stringify(d)],{type:"model/gltf+json"}),m=d instanceof ArrayBuffer?".glb":".gltf";no(h,`${n}${m}`),i()},d=>{console.error("GLTFExporter error:",d),i()},{binary:!0})})}import{strToU8 as hy}from"fflate";import{zip as py}from"fflate";function Bp(e,t=6){return new Promise((r,n)=>{py(e,{level:t},(i,o)=>{i?n(i):r(o)})})}var io=2048,zp=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function Np(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function Ll(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function Up(e){return Ll(e,"model")}function Al(e,t){return e.index?Math.round(e.index.getX(t)):t}function my(e,t,r){let n=Al(e,r),i=Al(e,r+1),o=Al(e,r+2);if(n>=t.count||i>=t.count||o>=t.count)return null;let a=[{index:n,u:t.getX(n),v:t.getY(n)},{index:i,u:t.getX(i),v:t.getY(i)},{index:o,u:t.getX(o),v:t.getY(o)}];return a.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?a:null}function jp(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Rl(e,t,r,n){let i,o;n?(i=t.index,o=r.index):(i=jp(t),o=jp(r));let a=i<o?`${i}|${o}`:`${o}|${i}`,s=e.get(a);s?s.count+=1:e.set(a,{count:1,start:t,end:r})}function fy(e,t,r){Rl(e,t[0],t[1],r),Rl(e,t[1],t[2],r),Rl(e,t[2],t[0],r)}function gy(e,t){return Array.isArray(e)?e[t]??null:e}function by(e){let t=new Map,r=0,n=0,i=0;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||!a.material)return;let s=a.geometry,c=s.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;r+=1;let l=a.name||`Mesh ${r}`,p=s.index?.count??c.count,d=s.groups.length>0?s.groups:[{start:0,count:p,materialIndex:0}];for(let h of d){let m=h.materialIndex??0,f=gy(a.material,m);if(!f)continue;let b=t.get(f.uuid);b||(n+=1,b={name:f.name||`Material ${n}`,layers:new Map},t.set(f.uuid,b));let P=b.layers.get(a.uuid);P||(P={name:l,color:zp[i%zp.length],edges:new Map},i+=1,b.layers.set(a.uuid,P));let C=Math.max(0,h.start),k=Math.min(p,C+h.count);for(let y=C;y+2<k;y+=3){let j=my(s,c,y);j&&fy(P.edges,j,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function Ta(e){return(e*io).toFixed(2)}function yy(e){return`M${Ta(e.start.u)} ${Ta(1-e.start.v)}L${Ta(e.end.u)} ${Ta(1-e.end.v)}`}function vy(e){let t=Np(e.name),r=[...e.layers.values()].filter(n=>n.edges.size>0).map((n,i)=>{let o=Np(n.name),a=`${Ll(n.name,"mesh")}-${i+1}`,s=[...n.edges.values()],c=s.filter(d=>d.count===1),p=(c.length>0?c:s).map(yy).join("");return[` <g id="${a}" data-mesh="${o}" fill="none" stroke="${n.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${o}</title>`,` <path d="${p}"/>`," </g>"].join(`
1
+ import{A as da,B as pa,C as bl,D as Wd,E as Xd,F as qd,a as ml,b as Ld,c as kd,d as sa,e as Yi,g as Dd,i as Bd,j as zd,k as Nd,l as $t,m as Wr,n as la,o as ir,p as je,q as jd,r as Ud,s as Fd,t as Vd,u as Gd,v as Qi,w as gl,x as ca,y as Hd,z as ua}from"./chunk-XTLSAYAQ.mjs";import{d as fl,g as $n,h as Od,o as Id,p as Yn,q as Ki,r as fn,w as $d,x as Yd}from"./chunk-BGYK4Y2Y.mjs";import{a as hl}from"./chunk-JR557W27.mjs";var Kd={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1},xb=Object.freeze({minimal:Object.freeze({...Kd}),showcase:Object.freeze({...Kd,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,enableKeyboardNavigation:!0})}),wb=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Qd(e){let t={};for(let r of Object.keys(e))e[r]!==void 0&&(t[r]=e[r]);return t}function Mb({ui:e,tools:t,controls:r,perf:n,tiles:i,xr:o,decoders:a}){let s=e?.download,c=e?.mouseController,l=t?.measure,p=r?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:c===void 0?void 0:c!==!1,mouseControllerPosition:typeof c=="object"?c.position:void 0,mouseControllerOpacity:typeof c=="object"?c.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,highlightOnHover:e?.highlightOnHover,showMeasureTools:l===void 0?void 0:l!==!1,measurementUnit:typeof l=="object"?l.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,texturePositioning:t?.texturePositioning,enableCameraControls:r?.enabled,enableKeyboardNavigation:r?.keyboard,disableZoom:r?.zoom===void 0?void 0:!r.zoom,zoomOnSelected:r?.zoomOnSelect,autoRotate:p===void 0?void 0:p!==!1,autoRotateSpeed:typeof p=="number"?p:void 0,refitOnResize:r?.refitOnResize,cameraLimits:r?.limits,moveSensitivity:r?.moveSensitivity,zoomSensitivity:r?.zoomSensitivity,renderMode:n?.renderMode,maxDpr:n?.maxDpr,performanceProfile:n?.profile,preserveDrawingBuffer:n?.preserveDrawingBuffer,tilesetUrl:i?.url,tilesErrorTarget:i?.errorTarget,tilesCacheSize:i?.cacheSize,enableXR:o?.enabled,usdzUrl:o?.usdzUrl,arScaleMode:o?.scaleMode,mobileHandoffUrl:o?.mobileHandoffUrl,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function Jd(e){let t={...e};for(let r of wb)delete t[r];return{...e.preset?xb[e.preset]:void 0,...Qd(t),...Qd(Mb(e))}}import{useCallback as kt,useRef as Qn,useState as ep}from"react";import{Vector3 as tp}from"three";var yl=new WeakSet;function Kn(e){yl.add(e)}function Zd(e){let t=yl.has(e);return t&&yl.delete(e),t}function rp(e){return[e.x,e.y,e.z]}function Pr(e,t){let r=new tp,n=new tp;return t.getPosition(r),t.getTarget(n),{position:rp(r),target:rp(n),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function Sb(e,t){return e?e.position[0]===t.position[0]&&e.position[1]===t.position[1]&&e.position[2]===t.position[2]&&e.target[0]===t.target[0]&&e.target[1]===t.target[1]&&e.target[2]===t.target[2]&&e.fov===t.fov&&e.zoom===t.zoom&&e.azimuthAngle===t.azimuthAngle&&e.polarAngle===t.polarAngle:!1}async function Ji(e,t,r=.6){let n=e.smoothTime;e.smoothTime=r;try{return await t()}finally{e.smoothTime=n}}function tS(e={}){let t=Qn(e);t.current=e;let r=Qn(null),[n,i]=ep(null),[o,a]=ep(()=>({...e.presets})),s=Qn(o);s.current=o;let c=kt(_=>{i(S=>Sb(S,_)?S:_)},[]),l=kt(_=>{c(_)},[c]),p=Qn(null),d=Qn(null),h=Qn(null),m=kt(_=>{r.current=_;let S=Pr(_.raw.controls.camera,_.raw.controls);c(S),_.raw.scene!==d.current&&(d.current=_.raw.scene,p.current=null,h.current=null),_.homeCameraState&&!p.current&&(p.current=_.homeCameraState);let{initialPosition:A,initialTarget:G,initialTransition:v=!1}=t.current;if((A||G)&&_.raw.scene&&(A||_.homeCameraState)&&h.current!==_.raw.controls){h.current=_.raw.controls,_.homeCameraState||Kn(_.raw.controls);let z=A??S.position,M=G??S.target;_.raw.controls.setLookAt(z[0],z[1],z[2],M[0],M[1],M[2],v).then(()=>{if(r.current?.raw.controls!==_.raw.controls)return;let O=Pr(_.raw.controls.camera,_.raw.controls);p.current={position:O.position,target:O.target},c(O)}).catch(()=>{})}},[c]),f=kt(async()=>{let _=r.current,S=_?.raw.controls;if(!S)return!1;try{let A=p.current;return A?await Ji(S,()=>S.setLookAt(A.position[0],A.position[1],A.position[2],A.target[0],A.target[1],A.target[2],!0)):_?.raw.scene?await Ji(S,()=>S.fitToBox(_.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Ji(S,()=>S.reset(!0)),!0}catch{return!1}},[]),b=kt(async()=>{let _=r.current;if(!_?.raw.controls||!_.raw.scene)return!1;try{return await Ji(_.raw.controls,()=>_.raw.controls.fitToBox(_.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),P=kt(async _=>{let S=r.current;if(!S?.raw.controls)return!1;let A=$n(S.objectBindings,_);if(!A)return!1;let G=S.raw.nodes[A];if(!G)return!1;try{return await Ji(S.raw.controls,()=>S.raw.controls.fitToBox(G,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),C=kt(async(_,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{return r.current?.homeCameraState||Kn(A),await A.setTarget(_[0],_[1],_[2],S),c(Pr(A.camera,A)),!0}catch{return!1}},[c]),k=kt(async(_,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{r.current?.homeCameraState||Kn(A);let G=[A.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],S)];_.azimuthAngle!=null&&_.polarAngle!=null&&G.push(A.rotateTo(_.azimuthAngle,_.polarAngle,S)),await Promise.all(G);let v=A.camera,z=!1;return _.fov!=null&&"fov"in v&&typeof v.fov=="number"&&(v.fov=_.fov,z=!0),_.zoom!=null&&"zoom"in v&&typeof v.zoom=="number"&&(v.zoom=_.zoom,z=!0),z&&"updateProjectionMatrix"in v&&v.updateProjectionMatrix(),c(Pr(v,A)),!0}catch{return!1}},[c]),y=kt((_,S=!0)=>k(_,S),[k]),j=kt((_,S,A=!0)=>k({position:_,target:S},A),[k]),L=kt(async(_,S,A=!0)=>{let G=r.current?.raw.controls;if(!G)return!1;try{return r.current?.homeCameraState||Kn(G),await G.rotateTo(_*Math.PI/180,S*Math.PI/180,A),c(Pr(G.camera,G)),!0}catch{return!1}},[c]),w=kt(async(_,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{return r.current?.homeCameraState||Kn(A),await A.dollyTo(_,S),c(Pr(A.camera,A)),!0}catch{return!1}},[c]),I=kt(_=>{let S=r.current?.raw.controls,A=_.trim();if(!S||!A)return null;let G=Pr(S.camera,S);return s.current={...s.current,[A]:G},a(v=>({...v,[A]:G})),c(G),G},[c]),U=kt((_,S=!0)=>{let A=s.current[_];return A?k(A,S):Promise.resolve(!1)},[k]);return{cameraState:n,cameraPresets:o,resetView:f,focusObject:P,fitScene:b,setCameraTarget:C,setCameraState:y,lookAt:j,orbitTo:L,dollyTo:w,savePreset:I,goToPreset:U,handleCameraChange:l,handleViewerReady:m}}import{useCallback as Jn,useEffect as Cb,useRef as np,useState as gn}from"react";function iS(){let e=np(null),[t,r]=gn([]),n=np(null),[i,o]=gn([]),[a,s]=gn(null),[c,l]=gn(!1),[p,d]=gn(1),[h,m]=gn(0),[f,b]=gn(0);Cb(()=>()=>{n.current?.()},[]);let P=Jn(w=>{n.current?.(),e.current=w,r(w.clips),o(w.clipDetails??w.clips.map(U=>({sourceName:U,duration:0})));let I=w.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(I.currentClip),l(I.isPlaying),d(I.speed),m(I.time),b(I.duration),w.subscribe?n.current=w.subscribe(U=>{s(U.currentClip),l(U.isPlaying),d(U.speed),m(U.time),b(U.duration)}):n.current=null},[]),C=Jn(w=>{e.current?.play(w),s(w),l(!0)},[]),k=Jn(()=>{e.current?.pause(),l(!1)},[]),y=Jn(()=>{e.current?.stop(),s(null),l(!1),m(0)},[]),j=Jn(w=>{e.current?.setSpeed(w),d(w)},[]),L=Jn(w=>{e.current?.seek?.(w),m(w)},[]);return{clips:t,clipDetails:i,currentClip:a,isPlaying:c,speed:p,time:h,duration:f,play:C,pause:k,stop:y,setSpeed:j,seek:L,handleAnimationsReady:P}}import{AlertTriangle as Tb}from"lucide-react";import{jsx as ha,jsxs as ip}from"react/jsx-runtime";function ma({title:e,message:t,tone:r="default"}){return ip("div",{className:`ri-license-overlay${r==="error"?" ri-license-overlay--error":""}`,children:[ip("div",{className:"ri-license-overlay__header",children:[r==="error"?ha(Tb,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):ha("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),ha("span",{className:"ri-license-overlay__title",children:e})]}),ha("p",{className:"ri-license-overlay__message",children:t})]})}import{CanvasTexture as op,Color as ap,ImageLoader as _b,NoColorSpace as ga,RepeatWrapping as fa,SRGBColorSpace as Ml,Texture as Pb}from"three";var Zn=new Map,Er={color:"#93c5fd",intensity:.07},eo=new ap(Er.color).multiplyScalar(Er.intensity),sp=new ap(Er.color),lp=.28,ei=new Map,wl=new Map;function Eb(e){return`${e.name}|${e.size}|${e.lastModified}`}function hS(e){let t=Eb(e),r=e.name.lastIndexOf("."),n=r>0?e.name.slice(0,r):e.name,i=r>0?e.name.slice(r):"",o=`materials/${e.name}`,a=2;for(;;){let s=wl.get(o);if(s===void 0||s===t)return wl.set(o,t),o;o=`materials/${n}-${a}${i}`,a+=1}}function cp(e){return ei.get(e)}function up(e,t){let r=++e.loadGeneration;e.loaded=!1;let n=()=>{if(e.loadGeneration!==r)return;e.loaded=!0;let i=e.pending;e.pending=[];for(let o of i)o()};new _b().load(t,i=>{e.loadGeneration===r&&(e.texture.image=i,e.texture.needsUpdate=!0,n())},void 0,()=>{e.loadGeneration===r&&(console.warn(`Failed to load texture: ${t}`),n())})}function dp(e,t){for(let r of[Ml,ga]){let n=Zn.get(Zi(e,r));n&&up(n,t)}}function mS(e,t){let r=ei.get(e);r&&r!==t&&r.startsWith("blob:")&&URL.revokeObjectURL(r),ei.set(e,t),dp(e,t)}function fS(e){let t=ei.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),ei.delete(e),wl.delete(e),dp(e,e))}function Zi(e,t){return`${t}|${e}`}function to(e,t=ga,r){let n=Zi(e,t),i=Zn.get(n);if(i)return r&&!i.loaded&&i.pending.push(r),i.texture;let o=ei.get(e)??e,a={texture:new Pb,refCount:0,loaded:!1,pending:r?[r]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Zn.set(n,a),up(a,o),a.texture}function ba(e,t=ga,r){let n=to(e,t,r);return Zn.get(Zi(e,t)).refCount+=1,n}function bn(e,t=ga){let r=Zn.get(Zi(e,t));r&&(r.refCount-=1,r.refCount<=0&&(r.loadGeneration+=1,r.pending=[],r.texture.dispose(),Zn.delete(Zi(e,t))))}function ya(e,t,r,n,i,o=1,a=0){let s=e.offsetTextures??(e.offsetTextures={}),c=s[t],l=c;if(!l||l.sourcePath!==n||l.base!==r){c?.texture.dispose();let d=r.clone();d.wrapS=fa,d.wrapT=fa,d.center.set(.5,.5),d.needsUpdate=!0,l={texture:d,sourcePath:n,base:r},s[t]=l}let p=o>0?o:1;return l.texture.offset.set(i[0],i[1]),l.texture.repeat.set(1/p,1/p),l.texture.rotation=a,l.texture}function va(e,t){let r=e.offsetTextures,n=r?.[t];n&&(n.texture.dispose(),delete r[t])}function pp(e){let t=e.offsetTextures;if(t){for(let r of Object.values(t))r.texture.dispose();delete e.offsetTextures}}var vl=null;function xa(){if(vl)return vl;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let r=t.getContext("2d"),n=r.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);n.addColorStop(0,"#ffffff"),n.addColorStop(.4,"#b5b5b5"),n.addColorStop(1,"#3a3a3a"),r.fillStyle=n,r.fillRect(0,0,e,e);let i=new op(t);return i.colorSpace=Ml,vl=i,i}var xl=null;function hp(){if(xl)return xl;let e=1024,t=8,r=e/t,n=["#ef4444","#f59e0b","#22c55e","#6366f1"],i=document.createElement("canvas");i.width=e,i.height=e;let o=i.getContext("2d");o.textAlign="center",o.textBaseline="middle";for(let s=0;s<t;s+=1)for(let c=0;c<t;c+=1){let l=c*r,p=s*r,d=(Math.floor(c/2)+Math.floor(s/2))%4;o.fillStyle=n[d],o.fillRect(l,p,r,r),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let k=1;k<4;k+=1){let y=k*r/4;o.beginPath(),o.moveTo(l+y,p),o.lineTo(l+y,p+r),o.moveTo(l,p+y),o.lineTo(l+r,p+y),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(l,p,r,r);let h=l+r*.23,m=p+r*.72,f=l+r*.72,b=p+r*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(h,m),o.lineTo(f,b),o.lineTo(f-r*.2,b),o.moveTo(f,b),o.lineTo(f,b+r*.2),o.stroke();let P=s*t+c+1;o.font=`700 ${Math.round(r*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let C=String(P).padStart(2,"0");o.strokeText(C,l+r/2,p+r*.82),o.fillText(C,l+r/2,p+r*.82)}let a=new op(i);return a.colorSpace=Ml,a.wrapS=fa,a.wrapT=fa,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,xl=a,a}import{useEffect as Db,useState as Ob}from"react";var Ab="ri:license-grant:v1",Rb={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},mp=new Map;function gp(e){let t=atob(e);return Uint8Array.from(t,r=>r.charCodeAt(0)).buffer}function fp(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return gp(t.padEnd(Math.ceil(t.length/4)*4,"="))}function Lb(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function wa(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),r=String.fromCharCode(...new Uint8Array(t));return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Sl(e,t){return`${Ab}:${t}:${e}`}function kb(e,t){let r=mp.get(e);if(r)return r;let n=crypto.subtle.importKey("spki",gp(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return mp.set(e,n),n}async function Cl(e,t,r){if(!globalThis.crypto?.subtle)return null;try{let[n,i,o,a,...s]=e.split("."),c=Rb[i];if(n!=="ri1"||!c||!o||!a||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(fp(o)));if(!Lb(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await kb(i,c),fp(a),new TextEncoder().encode(`${n}.${i}.${o}`)))return null;let d=Math.floor(Date.now()/1e3),h=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==r||l.expiresAt<=d||l.issuedAt>d+300||h<=0||h>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function bp(e,t,r){try{return await Cl(e,await wa(t),r)}catch{return null}}async function yp(e,t,r){try{let n=await wa(t);return await Cl(e,n,r)?(localStorage.setItem(Sl(n,r),e),!0):!1}catch{return!1}}async function vp(e,t){try{let r=await wa(e),n=Sl(r,t),i=localStorage.getItem(n);if(!i)return null;let o=await Cl(i,r,t);return o||localStorage.removeItem(n),o}catch{return null}}async function Tl(e,t){try{let r=await wa(e);localStorage.removeItem(Sl(r,t))}catch{}}var Ib=["localhost","127.0.0.1","0.0.0.0"],Bb=e=>Ib.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),wp="https://react-immersive.liveroom.dev/api/validate-license",zb=()=>typeof window<"u",Nb=300*1e3,jb=5e3,Ub=400,Pl=new Map,_l=new Map,Xr=class extends Error{},Mp=async(e,t,r)=>{let n=await vp(e,t);return n?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:n.environment,tier:n.tier,isLocalDomain:r}):null},xp=async(e,t,r)=>{let n=await Mp(e,t,r);return n||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:r})},Fb=e=>e instanceof Xr||e instanceof TypeError,Vb=()=>new Promise(e=>setTimeout(e,Ub)),Gb=e=>e==="development"||e==="production",Hb=e=>{if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.valid!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.environment!==void 0&&!Gb(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},Wb=e=>{if(!e||typeof e!="object")return null;let t=e,r=t.reason??t.error;return typeof r=="string"&&r.trim()?r:null},Xb=(e,t,r)=>`${r}::${e}::${t}`,qb=e=>{let t=Pl.get(e);return t?Date.now()-t.timestamp>Nb?(Pl.delete(e),null):t.result:null},$b=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Yb=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function Kb(e,t,r,n){let i=Xb(e,t,n),o=qb(i);if(o)return o;let a=_l.get(i);if(a)return a;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await Qb(e,t,r,i,n)}catch(l){if(!Fb(l))throw l;if(c===0){let p=await Mp(e,t,r);if(p)return p;await Vb();continue}return xp(e,t,r)}return xp(e,t,r)})().finally(()=>{_l.delete(i)});return _l.set(i,s),s}async function Qb(e,t,r,n,i){let o=new AbortController,a=setTimeout(()=>o.abort(),jb),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(p){throw o.signal.aborted?new Xr("License validation timed out"):p}finally{clearTimeout(a)}let c;try{c=await s.json()}catch{throw new Xr(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new Xr(`License server error (${s.status})`);let p=Wb(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await Tl(e,t),Yb(p,r)}if(!Hb(c))throw new Xr("License server returned an unexpected payload");let l=$b(c,r);if(l.status==="valid"&&i!==wp){let p=c.offlineGrant?await bp(c.offlineGrant,e,t):null;if(!p)throw new Xr("License validation endpoint did not return a verifiable signed grant");l={...l,environment:p.environment,tier:p.tier}}return l.status==="valid"?(Pl.set(n,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await yp(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Tl(e,t),l}var Sp=(e,t=wp)=>{let[r,n]=Ob({status:"checking",isLocalDomain:!1});return Db(()=>{if(!zb())return;let i=!1,o=p=>{i||n(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),c=Bb(s);return o({status:"checking",isLocalDomain:c}),a?((async()=>{try{o(await Kb(a,s,c,t))}catch(p){let d=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{i=!0})},[e,t]),r};import{createContext as Jb,useContext as Zb}from"react";var ey=Jb({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Ma=()=>Zb(ey);import{Box3 as Cp,Euler as ty,Matrix4 as Tp,Quaternion as ry,Vector3 as qr}from"three";function _p(e){e.updateWorldMatrix(!0,!0);let t=new Tp().copy(e.matrixWorld).invert(),r=new Cp,n=new Cp,i=!1;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||(a.geometry.boundingBox||a.geometry.computeBoundingBox(),!a.geometry.boundingBox))return;let s=new Tp().multiplyMatrices(t,o.matrixWorld);n.copy(a.geometry.boundingBox).applyMatrix4(s),r.union(n),i=!0}),i?r.getCenter(new qr):new qr}function Pp(e,t="XYZ"){return new ry().setFromEuler(new ty(e[0],e[1],e[2],t))}function ny(e,t,r,n,i="XYZ"){let a=new qr(...n).multiply(new qr(...r)).applyQuaternion(Pp(t,i)).add(new qr(...e));return[a.x,a.y,a.z]}function TS(e,t,r,n,i,o="XYZ"){let a=new qr(...ny(e,t,n,i,o)),s=new qr(...i).multiply(new qr(...n)).applyQuaternion(Pp(r,o)),c=a.sub(s);return[c.x,c.y,c.z]}import{useRef as ue,useState as ce,useEffect as Se,useCallback as Q,useMemo as Mt,Suspense as Hf}from"react";import{GizmoHelper as uM,GizmoViewport as dM}from"@react-three/drei";import{useFrame as Kf,useThree as Qf}from"@react-three/fiber";import{QRCodeSVG as pM}from"qrcode.react";import{Box3 as Ci,PerspectiveCamera as Jf,Raycaster as hM,Sphere as mM,Vector2 as fM,Vector3 as It}from"three";import{Component as iy}from"react";var Sa=class extends iy{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,n){this.props.onLoadError?.(r)}render(){return this.state.hasError?null:this.props.children}};import{PerspectiveCamera as El,Vector2 as oy}from"three";var Ep="riEditorGizmo";function Ap(e){return e.userData[Ep]=!0,e}function Rp(e){let t=[];return e.traverse(r=>{r.visible&&r.userData[Ep]&&(r.visible=!1,t.push(r))}),()=>{for(let r of t)r.visible=!0}}function Ca(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:r,scene:n,camera:i,invalidate:o}=e;if(!r.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:a=!1}=t,s=r.getSize(new oy),c=r.getPixelRatio(),l=i instanceof El?i.aspect:null,p=n.background,d=t.width??s.x,h=t.height??s.y,m=d!==s.x||h!==s.y,f=Rp(n);return a&&(n.background=null),m&&(r.setPixelRatio(1),r.setSize(d,h,!1),i instanceof El&&(i.aspect=d/h,i.updateProjectionMatrix())),o(),new Promise((b,P)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let C,k;try{C=r.domElement.toDataURL("image/png")}catch(y){k=y}f(),a&&(n.background=p),m&&(r.setPixelRatio(c),r.setSize(s.x,s.y,!1),i instanceof El&&l!==null&&(i.aspect=l,i.updateProjectionMatrix())),o(),k?P(k):b(C)})})})}var ay={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ"},sy=/\.(glb|gltf|obj|fbx|usdz|zip)$/i;function ly(e,t){let r=e?.response?.status;if(typeof r=="number")return r;let n=/responded with (\d{3})/.exec(t);return n?Number(n[1]):null}function Lp(e,t,r){let n=e instanceof Error?e.message:e==null?"":String(e),i="This model couldn't be loaded",o=n||null,a=ly(e,n);if(a===404||a===410)return{title:i,detail:`Nothing was found at this address (${a}). Check that modelUrl points to the file.`,technical:o};if(a===401||a===403)return{title:i,detail:`The server refused access to the file (${a}). Check that the file is public, or that a signed URL hasn't expired.`,technical:o};if(a!==null)return{title:i,detail:`The server responded with ${a} when the file was requested.`,technical:o};if(/failed to fetch|networkerror|load failed|network error/i.test(n))return{title:i,detail:"The download was blocked or failed. Check that the URL is correct and, if the file is on another domain, that its server allows cross-origin requests (CORS) from this site.",technical:o};if(/<!doctype|<html/i.test(n))return{title:i,detail:"The server sent back a web page instead of a model. There's probably no file at this path: many servers answer a missing file with their index.html.",technical:o};let s=t.split(/[?#]/,1)[0],c=ay[r??Dd(t)],l=sy.test(s);return{title:i,detail:l||r?`The file couldn't be read as ${c}. Check that it's a valid ${c} file${r?" and that modelFormat matches it":""}.`:`The file couldn't be read as ${c}. The URL has no file extension, so set modelFormat to the file's format.`,technical:o}}import{Color as cy}from"three";function kp(e,t,r){let n=t[r]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?$n(t,o)===r||o===n:!1})}function Al(e,t){return e.lighting.lights.some(r=>t[r.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(r=>t[r.id]?{...r,...t[r.id]}:r)}}:e}function Dp(e){let t=null;if(e?.traverse(i=>{if(t)return;let o=i.material;for(let a of Array.isArray(o)?o:o?[o]:[])if(a.emissive instanceof cy){t=a;return}}),!t)return{color:"#000000",intensity:0,on:!1};let r=`#${t.emissive.getHexString()}`,n=t.emissiveIntensity??1;return{color:r,intensity:n,on:r!=="#000000"&&n>0}}import{HexColorPicker as uy}from"react-colorful";import{Fragment as Op,jsx as $r,jsxs as ro}from"react/jsx-runtime";function Ip({kind:e,color:t,brightness:r,onColorChange:n,onBrightnessChange:i,onClose:o}){return $r("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?ro(Op,{children:[$r("p",{className:"ri-popoverLabel",children:"Light color"}),$r(uy,{color:t,onChange:n}),ro("div",{className:"ri-inlineRow",children:[$r("span",{className:"ri-colorCode",children:t}),$r("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):ro(Op,{children:[$r("p",{className:"ri-popoverLabel",children:"Brightness"}),$r("input",{type:"range",min:0,max:200,step:1,value:r,"aria-label":"Brightness",style:{width:"100%"},onChange:a=>i(Number(a.target.value))}),ro("div",{className:"ri-inlineRow",children:[ro("span",{className:"ri-colorCode",children:[r,"%"]}),$r("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}import{useCallback as _a,useEffect as wy,useState as Dl}from"react";import{GLTFExporter as dy}from"three-stdlib";function no(e,t){let r=URL.createObjectURL(e),n=document.createElement("a");n.href=r,n.download=t,n.style.display="none";try{document.body.appendChild(n),n.click()}finally{n.remove(),window.setTimeout(()=>{URL.revokeObjectURL(r)},1e3)}}function Bp({scene:e,objectBindings:t,matRefs:r,downloadFilename:n,onComplete:i}){import("three").then(({Group:o,Mesh:a})=>{let s=new o,c=new Map;for(let[d,h]of Object.entries(t))c.set(h.modelObjectId??d,d);let l=d=>{let h=d;for(;h;){let m=h.name||h.uuid,f=c.get(m)??m,b=t[f];if(b?b.visible===!1:h.visible===!1)return!1;h=h.parent}return!0};e.traverse(d=>{let h=d;if(!h.isMesh||!h.geometry||!l(h))return;let m=h.name||h.uuid,f=c.get(m)??m,b=r[f]??h.material;if(!b)return;let P=new a(h.geometry,b);P.name=m,P.applyMatrix4(h.matrixWorld),s.add(P)}),new dy().parse(s,d=>{let h=d instanceof ArrayBuffer?new Blob([d],{type:"model/gltf-binary"}):new Blob([JSON.stringify(d)],{type:"model/gltf+json"}),m=d instanceof ArrayBuffer?".glb":".gltf";no(h,`${n}${m}`),i()},d=>{console.error("GLTFExporter error:",d),i()},{binary:!0})})}import{strToU8 as hy}from"fflate";import{zip as py}from"fflate";function zp(e,t=6){return new Promise((r,n)=>{py(e,{level:t},(i,o)=>{i?n(i):r(o)})})}var io=2048,Np=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function jp(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function kl(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function Fp(e){return kl(e,"model")}function Rl(e,t){return e.index?Math.round(e.index.getX(t)):t}function my(e,t,r){let n=Rl(e,r),i=Rl(e,r+1),o=Rl(e,r+2);if(n>=t.count||i>=t.count||o>=t.count)return null;let a=[{index:n,u:t.getX(n),v:t.getY(n)},{index:i,u:t.getX(i),v:t.getY(i)},{index:o,u:t.getX(o),v:t.getY(o)}];return a.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?a:null}function Up(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Ll(e,t,r,n){let i,o;n?(i=t.index,o=r.index):(i=Up(t),o=Up(r));let a=i<o?`${i}|${o}`:`${o}|${i}`,s=e.get(a);s?s.count+=1:e.set(a,{count:1,start:t,end:r})}function fy(e,t,r){Ll(e,t[0],t[1],r),Ll(e,t[1],t[2],r),Ll(e,t[2],t[0],r)}function gy(e,t){return Array.isArray(e)?e[t]??null:e}function by(e){let t=new Map,r=0,n=0,i=0;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||!a.material)return;let s=a.geometry,c=s.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;r+=1;let l=a.name||`Mesh ${r}`,p=s.index?.count??c.count,d=s.groups.length>0?s.groups:[{start:0,count:p,materialIndex:0}];for(let h of d){let m=h.materialIndex??0,f=gy(a.material,m);if(!f)continue;let b=t.get(f.uuid);b||(n+=1,b={name:f.name||`Material ${n}`,layers:new Map},t.set(f.uuid,b));let P=b.layers.get(a.uuid);P||(P={name:l,color:Np[i%Np.length],edges:new Map},i+=1,b.layers.set(a.uuid,P));let C=Math.max(0,h.start),k=Math.min(p,C+h.count);for(let y=C;y+2<k;y+=3){let j=my(s,c,y);j&&fy(P.edges,j,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function Ta(e){return(e*io).toFixed(2)}function yy(e){return`M${Ta(e.start.u)} ${Ta(1-e.start.v)}L${Ta(e.end.u)} ${Ta(1-e.end.v)}`}function vy(e){let t=jp(e.name),r=[...e.layers.values()].filter(n=>n.edges.size>0).map((n,i)=>{let o=jp(n.name),a=`${kl(n.name,"mesh")}-${i+1}`,s=[...n.edges.values()],c=s.filter(d=>d.count===1),p=(c.length>0?c:s).map(yy).join("");return[` <g id="${a}" data-mesh="${o}" fill="none" stroke="${n.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${o}</title>`,` <path d="${p}"/>`," </g>"].join(`
2
2
  `)}).join(`
3
3
  `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${io}" height="${io}" viewBox="0 0 ${io} ${io}">`,` <title>${t} UV layout</title>`," <desc>UV0 island-outline template exported by React Immersive. The SVG canvas maps to the complete 0\u20131 texture area.</desc>",' <rect width="2048" height="2048" fill="none" stroke="#94a3b8" stroke-width="2"/>',r,"</svg>"].join(`
4
- `)}function xy(e,t="model"){let r=by(e),n=Up(t);return r.map((i,o)=>{let a=Ll(i.name,`material-${o+1}`);return{filename:r.length===1?`${n}-uv-layout.svg`:`${n}-uv-${a}-${o+1}.svg`,materialName:i.name,meshCount:[...i.layers.values()].filter(c=>c.edges.size>0).length,svg:vy(i)}})}async function Fp(e,t="model"){let r=xy(e,t);if(r.length===0)return r;if(r.length===1)return no(new Blob([r[0].svg],{type:"image/svg+xml;charset=utf-8"}),r[0].filename),r;let n=Object.fromEntries(r.map(o=>[o.filename,hy(o.svg)])),i=await Bp(n);return no(new Blob([i],{type:"application/zip"}),`${Up(t)}-uv-layouts.zip`),r}function Vp({sceneRef:e,materialRefs:t,rendererCaptureRef:r,objectBindings:n,downloadFilename:i}){let[o,a]=kl(!1),[s,c]=kl(!1),[l,p]=kl(null);wy(()=>{if(!s)return;let b=()=>c(!1);return window.addEventListener("pointerdown",b),()=>window.removeEventListener("pointerdown",b)},[s]);let d=_a(()=>{p(null),c(b=>!b)},[]),h=_a(()=>{let b=e.current;b&&(c(!1),a(!0),Ip({scene:b,objectBindings:n,matRefs:t.current,downloadFilename:i,onComplete:()=>a(!1)}))},[i,t,n,e]),m=_a(()=>{c(!1),Ca(r.current).then(b=>{let P=document.createElement("a");P.href=b,P.download=`${i}.png`,document.body.appendChild(P),P.click(),document.body.removeChild(P)}).catch(b=>{console.error("Screenshot failed:",b)})},[i,r]),f=_a(async()=>{let b=e.current;if(b)try{if((await Fp(b,i)).length===0){p("This model does not contain UV coordinates.");return}p(null),c(!1)}catch(P){console.error("UV layout export failed:",P),p("Could not create the UV layout archive.")}},[i,e]);return{isDownloading:o,downloadMenuOpen:s,uvExportError:l,toggleDownloadMenu:d,handleDownloadMesh:h,handleDownloadScreenshot:m,handleDownloadUvLayout:f}}import{useCallback as ti,useEffect as Dl,useRef as Ol,useState as oo}from"react";import{Box3 as Gp,Raycaster as My,Vector2 as Sy,Vector3 as Il}from"three";function Cy(e){let t=new Gp().setFromObject(e),r=new Il;return t.getSize(r),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[r.x,r.y,r.z]}}function Ty(e){let t=new Gp().setFromObject(e);if(t.isEmpty())return null;let r=t.getCenter(new Il),n=t.getSize(new Il).length()/2;return!Number.isFinite(n)||n<=0?null:{center:[r.x,r.y,r.z],radius:n}}function Hp({canvasAreaRef:e,controlsRef:t,sceneRef:r,modelUrl:n,modelRotation:i,bindingTransformSignature:o,modelLoaded:a}){let[s,c]=oo(!1),[l,p]=oo([]),[d,h]=oo(!1),[m,f]=oo(null),[b,P]=oo(null),C=Ol(!1),k=Ol(0),y=Ol(null);C.current=s;let j=ti(S=>{S.updateMatrixWorld(!0),f(Cy(S)),P(Ty(S))},[]),L=ti(()=>p([]),[]),w=ti(()=>c(S=>!S),[]),I=ti(()=>h(S=>!S),[]),U=ti(S=>{C.current&&(y.current={x:S.clientX,y:S.clientY})},[]),_=ti(S=>{if(!C.current)return;let A=y.current;if(y.current=null,A&&Math.hypot(S.clientX-A.x,S.clientY-A.y)>6||S.target.closest("button, input, textarea, .ri-measureTools"))return;let v=e.current,z=t.current?.camera,M=r.current;if(!v||!z||!M)return;let O=v.getBoundingClientRect(),N=(S.clientX-O.left)/O.width*2-1,$=-((S.clientY-O.top)/O.height)*2+1,Z=new My;Z.setFromCamera(new Sy(N,$),z);let te=Z.intersectObject(M,!0)[0];te&&(k.current+=1,p(ie=>[...ie,{id:k.current,position:[te.point.x,te.point.y,te.point.z]}]))},[e,t,r]);return Dl(()=>{p([]),f(null),P(null)},[n]),Dl(()=>{p([])},[i,o]),Dl(()=>{let S=r.current;!a||!S||j(S)},[o,a,j,r]),{measureMode:s,measureModeRef:C,measurePoints:l,showDimensions:d,measureBox:m,modelBounds:b,refreshBounds:j,clearMeasurements:L,toggleMeasureMode:w,toggleDimensions:I,handleMeasurePointerDown:U,handleMeasureClick:_}}import{createPortal as Py}from"react-dom";import{createXRStore as Ey}from"@react-three/xr";import{MapPin as Ay}from"lucide-react";import{useCallback as bn,useEffect as ri,useMemo as qp,useRef as Ry,useState as $r}from"react";function Bl(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function zl(){if(typeof navigator>"u")return!1;let e=navigator.userAgent;return/iPhone|iPad|iPod/i.test(e)?!0:navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function Wp(){return Bl()||zl()}function _y(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=a=>typeof window.matchMedia=="function"&&window.matchMedia(a).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),r=e("(hover: none)")||e("(any-hover: none)"),n=navigator.maxTouchPoints>0,i=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,o=Bl();return t||o||n&&r||n&&i}function Nl(){if(!_y())return!1;if(Bl())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Xp(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Nl()}}import{Fragment as Ly,jsx as ni,jsxs as jl}from"react/jsx-runtime";var $p={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Yp({enableXR:e,usdzUrl:t,mobileHandoffUrl:r}){let n=Ry(null),i=qp(()=>{if(!e||typeof navigator>"u")return null;let N=navigator.xr;if(!N||typeof N.isSessionSupported!="function"||typeof N.addEventListener!="function")return null;try{return Ey({emulate:!1})}catch{return null}},[e]),[o,a]=$r(!1),[s,c]=$r(!1),[l,p]=$r(!0),[d,h]=$r(null),[m,f]=$r(!1),[b,P]=$r(!1),[C,k]=$r($p),[y,j]=$r(!1),L=qp(()=>e&&!!t?.trim()&&zl(),[e,t]);ri(()=>{p(Wp())},[]);let w=bn(()=>{if(typeof window>"u")return null;try{let N=new URL(r?.trim()||window.location.href,window.location.href);return N.protocol==="http:"||N.protocol==="https:"?N.toString():null}catch{return null}},[r]);ri(()=>{if(!e||l){h(null),f(!1);return}h(w())},[e,l,w]),ri(()=>{if(i)return i.subscribe(N=>P(N.session!=null&&N.mode==="immersive-ar"))},[i]),ri(()=>{j(!1),k($p)},[b]),ri(()=>{if(!e||typeof navigator>"u")return;let N=navigator.xr;if(!N?.isSessionSupported)return;let $=!1;return N.isSessionSupported("immersive-ar").then(Z=>!$&&a(Z)).catch(()=>{}),N.isSessionSupported("immersive-vr").then(Z=>!$&&c(Z)).catch(()=>{}),()=>{$=!0}},[e]);let I=bn(()=>{let N=w();N&&(h(N),f(!0))},[w]),U=bn(()=>f(!1),[]),_=bn(()=>{let N=t?.trim();if(!N)return;let $=document.createElement("a");$.setAttribute("rel","ar"),$.href=N,$.style.display="none";let Z=document.createElement("img");Z.alt="",Z.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",$.appendChild(Z),document.body.appendChild($),$.click(),$.remove()},[t]),S=bn(N=>{k(N),N.isPlacementMode||j(!1)},[]),A=bn(N=>{j(!1),N?n.current?.finishPlacementMode():n.current?.cancelPlacementMode()},[]),G=bn(N=>{N.preventDefault(),j(!0),n.current?.startPlacementMode()},[]);ri(()=>{if(!y)return;let N=()=>A(!0),$=()=>A(!1);return window.addEventListener("pointerup",N),window.addEventListener("pointercancel",$),()=>{window.removeEventListener("pointerup",N),window.removeEventListener("pointercancel",$)}},[A,y]);let v=C.isModelPlaced?C.isPlacementMode?C.canPlace?"Release to place":"Move your device over a flat surface":null:C.canPlace?null:"Move your device over a flat surface",z=C.isModelPlaced&&!C.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,M=i?.getState().domOverlayRoot??null,O=b&&M?Py(jl(Ly,{children:[z&&ni("div",{className:"ri-arHintOverlay",children:ni("div",{className:"ri-arHint",children:z})}),ni("div",{className:"ri-arOverlay",children:jl("div",{className:"ri-arControls",children:[v&&ni("div",{className:"ri-arStatus",children:v}),C.isModelPlaced&&jl("button",{type:"button",className:`ri-arActionButton ${y?"ri-arActionButton--active":""}`,onPointerDown:N=>G(N.nativeEvent),"aria-pressed":y,children:[ni(Ay,{size:14}),"Relocate"]}),!C.isModelPlaced&&C.canPlace&&ni("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>n.current?.placeCurrent(),children:"Tap to place"})]})})]}),M):null;return{xrStore:i,presenterRef:n,arSupported:o,vrSupported:s,quickLookSupported:L,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:m,arOverlay:O,openMobileHandoff:I,closeMobileHandoff:U,openQuickLook:_,handleARStateChange:S}}import{Canvas as A0,useThree as R0}from"@react-three/fiber";import{ContactShadows as L0,Environment as k0}from"@react-three/drei";import{XR as D0}from"@react-three/xr";import{NoToneMapping as O0}from"three";import{Suspense as I0,useEffect as B0,useMemo as Da,useState as z0}from"react";import{useFrame as Fl,useThree as yn}from"@react-three/fiber";import{useXR as Kp}from"@react-three/xr";import{Color as ky,PerspectiveCamera as Dy}from"three";import{useEffect as ii,useLayoutEffect as Oy,useRef as Ul}from"react";function Qp({renderMode:e}){let{scene:t}=yn(),r=yn(a=>a.setFrameloop),n=Kp(a=>a.session!=null),i=Kp(a=>a.mode==="immersive-ar"),o=Ul(void 0);return ii(()=>{r(n?"always":e)},[n,e,r]),ii(()=>{i?(o.current=t.background,t.background=null):o.current!==void 0&&(t.background=o.current,o.current=void 0)},[i,t]),Fl(()=>{i&&t.background!==null&&(t.background=null)}),null}function Jp({onPresentingChange:e}){let t=yn(i=>i.gl),r=Ul(null);ii(()=>{let i=t.xr;if(!i)return;let o=c=>{c?(r.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):r.current!==null&&(t.shadowMap.enabled=r.current,r.current=null),e(c)},a=()=>o(!0),s=()=>o(!1);return i.addEventListener("sessionstart",a),i.addEventListener("sessionend",s),o(i.isPresenting),()=>{i.removeEventListener("sessionstart",a),i.removeEventListener("sessionend",s)}},[t,e]);let n=Ul(0);return Fl(()=>{if(!t.xr.isPresenting)return;let i=performance.now();if(i-n.current<1e3)return;n.current=i;let o=t.xr}),null}function Zp({active:e}){let t=yn(r=>r.invalidate);return ii(()=>{e&&t()},[e,t]),Fl(()=>{e&&t()}),null}function eh({color:e}){let{scene:t}=yn();return ii(()=>{let r=t.background;return t.background=e?new ky(e):null,()=>{t.background=r}},[t,e]),null}function th({rotation:e}){let{scene:t}=yn();return Oy(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),null}function rh({cameraConfig:e}){let{camera:t}=yn();return ii(()=>{if(!(t instanceof Dy))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix())},[t,e]),null}import{useThree as Ra}from"@react-three/fiber";import{Autofocus as Qy,Bloom as Jy,BrightnessContrast as Zy,ChromaticAberration as e0,ColorAverage as t0,DepthOfField as r0,DotScreen as n0,EffectComposer as i0,Glitch as o0,GodRays as a0,Grid as s0,HueSaturation as l0,Noise as c0,Outline as u0,Pixelation as d0,Ramp as p0,Scanline as h0,SelectiveBloom as m0,Sepia as f0,SMAA as g0,SSAO as b0,ToneMapping as y0,Vignette as v0}from"@react-three/postprocessing";import{BlendFunction as ao,KernelSize as x0}from"postprocessing";import{Color as La,Vector2 as so}from"three";import{memo as w0,useCallback as M0,useEffect as ph,useMemo as lo,useRef as hh,useState as mh}from"react";import{forwardRef as Iy,useImperativeHandle as By,useMemo as zy}from"react";import{BlendFunction as Ny,Effect as jy}from"postprocessing";import{Uniform as Uy}from"three";import{jsx as Vy}from"react/jsx-runtime";var Fy=`
4
+ `)}function xy(e,t="model"){let r=by(e),n=Fp(t);return r.map((i,o)=>{let a=kl(i.name,`material-${o+1}`);return{filename:r.length===1?`${n}-uv-layout.svg`:`${n}-uv-${a}-${o+1}.svg`,materialName:i.name,meshCount:[...i.layers.values()].filter(c=>c.edges.size>0).length,svg:vy(i)}})}async function Vp(e,t="model"){let r=xy(e,t);if(r.length===0)return r;if(r.length===1)return no(new Blob([r[0].svg],{type:"image/svg+xml;charset=utf-8"}),r[0].filename),r;let n=Object.fromEntries(r.map(o=>[o.filename,hy(o.svg)])),i=await zp(n);return no(new Blob([i],{type:"application/zip"}),`${Fp(t)}-uv-layouts.zip`),r}function Gp({sceneRef:e,materialRefs:t,rendererCaptureRef:r,objectBindings:n,downloadFilename:i}){let[o,a]=Dl(!1),[s,c]=Dl(!1),[l,p]=Dl(null);wy(()=>{if(!s)return;let b=()=>c(!1);return window.addEventListener("pointerdown",b),()=>window.removeEventListener("pointerdown",b)},[s]);let d=_a(()=>{p(null),c(b=>!b)},[]),h=_a(()=>{let b=e.current;b&&(c(!1),a(!0),Bp({scene:b,objectBindings:n,matRefs:t.current,downloadFilename:i,onComplete:()=>a(!1)}))},[i,t,n,e]),m=_a(()=>{c(!1),Ca(r.current).then(b=>{let P=document.createElement("a");P.href=b,P.download=`${i}.png`,document.body.appendChild(P),P.click(),document.body.removeChild(P)}).catch(b=>{console.error("Screenshot failed:",b)})},[i,r]),f=_a(async()=>{let b=e.current;if(b)try{if((await Vp(b,i)).length===0){p("This model does not contain UV coordinates.");return}p(null),c(!1)}catch(P){console.error("UV layout export failed:",P),p("Could not create the UV layout archive.")}},[i,e]);return{isDownloading:o,downloadMenuOpen:s,uvExportError:l,toggleDownloadMenu:d,handleDownloadMesh:h,handleDownloadScreenshot:m,handleDownloadUvLayout:f}}import{useCallback as ti,useEffect as Ol,useRef as Il,useState as oo}from"react";import{Box3 as Hp,Raycaster as My,Vector2 as Sy,Vector3 as Bl}from"three";function Cy(e){let t=new Hp().setFromObject(e),r=new Bl;return t.getSize(r),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[r.x,r.y,r.z]}}function Ty(e){let t=new Hp().setFromObject(e);if(t.isEmpty())return null;let r=t.getCenter(new Bl),n=t.getSize(new Bl).length()/2;return!Number.isFinite(n)||n<=0?null:{center:[r.x,r.y,r.z],radius:n}}function Wp({canvasAreaRef:e,controlsRef:t,sceneRef:r,modelUrl:n,modelRotation:i,bindingTransformSignature:o,modelLoaded:a}){let[s,c]=oo(!1),[l,p]=oo([]),[d,h]=oo(!1),[m,f]=oo(null),[b,P]=oo(null),C=Il(!1),k=Il(0),y=Il(null);C.current=s;let j=ti(S=>{S.updateMatrixWorld(!0),f(Cy(S)),P(Ty(S))},[]),L=ti(()=>p([]),[]),w=ti(()=>c(S=>!S),[]),I=ti(()=>h(S=>!S),[]),U=ti(S=>{C.current&&(y.current={x:S.clientX,y:S.clientY})},[]),_=ti(S=>{if(!C.current)return;let A=y.current;if(y.current=null,A&&Math.hypot(S.clientX-A.x,S.clientY-A.y)>6||S.target.closest("button, input, textarea, .ri-measureTools"))return;let v=e.current,z=t.current?.camera,M=r.current;if(!v||!z||!M)return;let O=v.getBoundingClientRect(),N=(S.clientX-O.left)/O.width*2-1,$=-((S.clientY-O.top)/O.height)*2+1,Z=new My;Z.setFromCamera(new Sy(N,$),z);let te=Z.intersectObject(M,!0)[0];te&&(k.current+=1,p(ie=>[...ie,{id:k.current,position:[te.point.x,te.point.y,te.point.z]}]))},[e,t,r]);return Ol(()=>{p([]),f(null),P(null)},[n]),Ol(()=>{p([])},[i,o]),Ol(()=>{let S=r.current;!a||!S||j(S)},[o,a,j,r]),{measureMode:s,measureModeRef:C,measurePoints:l,showDimensions:d,measureBox:m,modelBounds:b,refreshBounds:j,clearMeasurements:L,toggleMeasureMode:w,toggleDimensions:I,handleMeasurePointerDown:U,handleMeasureClick:_}}import{createPortal as Py}from"react-dom";import{createXRStore as Ey}from"@react-three/xr";import{MapPin as Ay}from"lucide-react";import{useCallback as yn,useEffect as ri,useMemo as $p,useRef as Ry,useState as Yr}from"react";function zl(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Nl(){if(typeof navigator>"u")return!1;let e=navigator.userAgent;return/iPhone|iPad|iPod/i.test(e)?!0:navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function Xp(){return zl()||Nl()}function _y(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=a=>typeof window.matchMedia=="function"&&window.matchMedia(a).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),r=e("(hover: none)")||e("(any-hover: none)"),n=navigator.maxTouchPoints>0,i=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,o=zl();return t||o||n&&r||n&&i}function jl(){if(!_y())return!1;if(zl())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function qp(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return jl()}}import{Fragment as Ly,jsx as ni,jsxs as Ul}from"react/jsx-runtime";var Yp={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Kp({enableXR:e,usdzUrl:t,mobileHandoffUrl:r}){let n=Ry(null),i=$p(()=>{if(!e||typeof navigator>"u")return null;let N=navigator.xr;if(!N||typeof N.isSessionSupported!="function"||typeof N.addEventListener!="function")return null;try{return Ey({emulate:!1})}catch{return null}},[e]),[o,a]=Yr(!1),[s,c]=Yr(!1),[l,p]=Yr(!0),[d,h]=Yr(null),[m,f]=Yr(!1),[b,P]=Yr(!1),[C,k]=Yr(Yp),[y,j]=Yr(!1),L=$p(()=>e&&!!t?.trim()&&Nl(),[e,t]);ri(()=>{p(Xp())},[]);let w=yn(()=>{if(typeof window>"u")return null;try{let N=new URL(r?.trim()||window.location.href,window.location.href);return N.protocol==="http:"||N.protocol==="https:"?N.toString():null}catch{return null}},[r]);ri(()=>{if(!e||l){h(null),f(!1);return}h(w())},[e,l,w]),ri(()=>{if(i)return i.subscribe(N=>P(N.session!=null&&N.mode==="immersive-ar"))},[i]),ri(()=>{j(!1),k(Yp)},[b]),ri(()=>{if(!e||typeof navigator>"u")return;let N=navigator.xr;if(!N?.isSessionSupported)return;let $=!1;return N.isSessionSupported("immersive-ar").then(Z=>!$&&a(Z)).catch(()=>{}),N.isSessionSupported("immersive-vr").then(Z=>!$&&c(Z)).catch(()=>{}),()=>{$=!0}},[e]);let I=yn(()=>{let N=w();N&&(h(N),f(!0))},[w]),U=yn(()=>f(!1),[]),_=yn(()=>{let N=t?.trim();if(!N)return;let $=document.createElement("a");$.setAttribute("rel","ar"),$.href=N,$.style.display="none";let Z=document.createElement("img");Z.alt="",Z.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",$.appendChild(Z),document.body.appendChild($),$.click(),$.remove()},[t]),S=yn(N=>{k(N),N.isPlacementMode||j(!1)},[]),A=yn(N=>{j(!1),N?n.current?.finishPlacementMode():n.current?.cancelPlacementMode()},[]),G=yn(N=>{N.preventDefault(),j(!0),n.current?.startPlacementMode()},[]);ri(()=>{if(!y)return;let N=()=>A(!0),$=()=>A(!1);return window.addEventListener("pointerup",N),window.addEventListener("pointercancel",$),()=>{window.removeEventListener("pointerup",N),window.removeEventListener("pointercancel",$)}},[A,y]);let v=C.isModelPlaced?C.isPlacementMode?C.canPlace?"Release to place":"Move your device over a flat surface":null:C.canPlace?null:"Move your device over a flat surface",z=C.isModelPlaced&&!C.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,M=i?.getState().domOverlayRoot??null,O=b&&M?Py(Ul(Ly,{children:[z&&ni("div",{className:"ri-arHintOverlay",children:ni("div",{className:"ri-arHint",children:z})}),ni("div",{className:"ri-arOverlay",children:Ul("div",{className:"ri-arControls",children:[v&&ni("div",{className:"ri-arStatus",children:v}),C.isModelPlaced&&Ul("button",{type:"button",className:`ri-arActionButton ${y?"ri-arActionButton--active":""}`,onPointerDown:N=>G(N.nativeEvent),"aria-pressed":y,children:[ni(Ay,{size:14}),"Relocate"]}),!C.isModelPlaced&&C.canPlace&&ni("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>n.current?.placeCurrent(),children:"Tap to place"})]})})]}),M):null;return{xrStore:i,presenterRef:n,arSupported:o,vrSupported:s,quickLookSupported:L,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:m,arOverlay:O,openMobileHandoff:I,closeMobileHandoff:U,openQuickLook:_,handleARStateChange:S}}import{Canvas as A0,useThree as R0}from"@react-three/fiber";import{ContactShadows as L0,Environment as k0}from"@react-three/drei";import{XR as D0}from"@react-three/xr";import{NoToneMapping as O0}from"three";import{Suspense as I0,useEffect as B0,useMemo as Da,useState as z0}from"react";import{useFrame as Vl,useThree as vn}from"@react-three/fiber";import{useXR as Qp}from"@react-three/xr";import{Color as ky,PerspectiveCamera as Dy}from"three";import{useEffect as ii,useLayoutEffect as Oy,useRef as Fl}from"react";function Jp({renderMode:e}){let{scene:t}=vn(),r=vn(a=>a.setFrameloop),n=Qp(a=>a.session!=null),i=Qp(a=>a.mode==="immersive-ar"),o=Fl(void 0);return ii(()=>{r(n?"always":e)},[n,e,r]),ii(()=>{i?(o.current=t.background,t.background=null):o.current!==void 0&&(t.background=o.current,o.current=void 0)},[i,t]),Vl(()=>{i&&t.background!==null&&(t.background=null)}),null}function Zp({onPresentingChange:e}){let t=vn(i=>i.gl),r=Fl(null);ii(()=>{let i=t.xr;if(!i)return;let o=c=>{c?(r.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):r.current!==null&&(t.shadowMap.enabled=r.current,r.current=null),e(c)},a=()=>o(!0),s=()=>o(!1);return i.addEventListener("sessionstart",a),i.addEventListener("sessionend",s),o(i.isPresenting),()=>{i.removeEventListener("sessionstart",a),i.removeEventListener("sessionend",s)}},[t,e]);let n=Fl(0);return Vl(()=>{if(!t.xr.isPresenting)return;let i=performance.now();if(i-n.current<1e3)return;n.current=i;let o=t.xr}),null}function eh({active:e}){let t=vn(r=>r.invalidate);return ii(()=>{e&&t()},[e,t]),Vl(()=>{e&&t()}),null}function th({color:e}){let{scene:t}=vn();return ii(()=>{let r=t.background;return t.background=e?new ky(e):null,()=>{t.background=r}},[t,e]),null}function rh({rotation:e}){let{scene:t}=vn();return Oy(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),null}function nh({cameraConfig:e}){let{camera:t}=vn();return ii(()=>{if(!(t instanceof Dy))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix())},[t,e]),null}import{useThree as Ra}from"@react-three/fiber";import{Autofocus as Qy,Bloom as Jy,BrightnessContrast as Zy,ChromaticAberration as e0,ColorAverage as t0,DepthOfField as r0,DotScreen as n0,EffectComposer as i0,Glitch as o0,GodRays as a0,Grid as s0,HueSaturation as l0,Noise as c0,Outline as u0,Pixelation as d0,Ramp as p0,Scanline as h0,SelectiveBloom as m0,Sepia as f0,SMAA as g0,SSAO as b0,ToneMapping as y0,Vignette as v0}from"@react-three/postprocessing";import{BlendFunction as ao,KernelSize as x0}from"postprocessing";import{Color as La,Vector2 as so}from"three";import{memo as w0,useCallback as M0,useEffect as hh,useMemo as lo,useRef as mh,useState as fh}from"react";import{forwardRef as Iy,useImperativeHandle as By,useMemo as zy}from"react";import{BlendFunction as Ny,Effect as jy}from"postprocessing";import{Uniform as Uy}from"three";import{jsx as Vy}from"react/jsx-runtime";var Fy=`
5
5
  uniform float exposure;
6
6
  void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
7
7
  outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
8
8
  }
9
- `,Vl=class extends jy{constructor(t=1){super("ExposureEffect",Fy,{blendFunction:Ny.NORMAL,uniforms:new Map([["exposure",new Uy(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},nh=Iy(function({exposure:t},r){let n=zy(()=>new Vl(t),[]);return n.exposure=t,By(r,()=>n,[n]),Vy("primitive",{object:n,dispose:null})});import{useFrame as Gy,useThree as Pa}from"@react-three/fiber";import*as sh from"@react-three/postprocessing";import{BlendFunction as Hy}from"postprocessing";import{Color as Wy,MathUtils as Xy,Mesh as qy,Vector2 as ih,Vector3 as oh}from"three";import{useEffect as ah,useMemo as Ea,useRef as Gl}from"react";import{jsx as Yy}from"react/jsx-runtime";var $y=sh.LensFlareEffect;function lh({config:e}){let t=Pa(h=>h.camera),r=Pa(h=>h.raycaster),n=Pa(h=>h.scene),i=Pa(h=>h.viewport),o=Gl(null),a=Gl(new oh),s=Gl(new ih),c=Ea(()=>new oh(...e.lensPosition),[e.lensPosition]),l=Ea(()=>new Wy(e.colorGain??"#141414"),[e.colorGain]),p=Ea(()=>new ih(0,0),[]),d=Ea(()=>new $y({blendFunction:Hy.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:p,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,p]);return ah(()=>(o.current=d,()=>{d.dispose(),o.current=null}),[d]),ah(()=>{let h=d.uniforms.get("screenRes");h&&(h.value.x=i.width,h.value.y=i.height)},[d,i]),Gy((h,m)=>{let f=o.current;if(!f)return;let b=f.uniforms.get("lensPosition"),P=f.uniforms.get("opacity");if(!b||!P)return;let C=1;if(a.current.copy(c).project(t),a.current.z>1)return;b.value.x=a.current.x,b.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,r.setFromCamera(s.current,t);let k=r.intersectObjects(n.children,!0),{object:y}=k[0]||{};y&&(y.userData?.lensflare==="no-occlusion"?C=0:y instanceof qy&&(y.material.uniforms?._transmission?.value>.2||y.material._transmission&&y.material._transmission>.2?C=.2:y.material.transparent&&(C=y.material.opacity))),P.value=Xy.damp(P.value,C,12,m)}),Yy("primitive",{object:d,dispose:null})}import{RampType as Hl}from"@react-three/postprocessing";import{GlitchMode as Wl,KernelSize as oi,ToneMappingMode as Xl}from"postprocessing";import{Color as Ky}from"three";function ch(e){return e==="linear"?Xl.LINEAR:e==="reinhard"?Xl.REINHARD:Xl.ACES_FILMIC}function Aa(e){switch(e){case"verySmall":return oi.VERY_SMALL;case"small":return oi.SMALL;case"medium":return oi.MEDIUM;case"large":return oi.LARGE;case"veryLarge":return oi.VERY_LARGE;case"huge":return oi.HUGE}}function uh(e){switch(e){case"constantMild":return Wl.CONSTANT_MILD;case"constantWild":return Wl.CONSTANT_WILD;default:return Wl.SPORADIC}}function ql(e){let t=new Ky(e);return[t.r,t.g,t.b,1]}function dh(e){return e==="radial"?Hl.Radial:e==="mirroredLinear"?Hl.MirroredLinear:Hl.Linear}import{Fragment as P0,jsx as Le,jsxs as $l}from"react/jsx-runtime";var vn={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new La(Er.color).getHex(),hiddenEdgeColor:new La(Er.color).multiplyScalar(.35).getHex(),kernelSize:x0.VERY_SMALL,blur:!1,xRay:!1};function S0(e){let t=[];return e.traverse(r=>{r.isMesh&&t.push(r)}),t}var Yl=[],C0=w0(function({sceneConfig:t,selectedObjectRef:r,highlightOnHover:n=!1,disabled:i=!1,onOutlineEffect:o}){let a=Ra(L=>L.scene),s=Ra(L=>L.gl),c=hh(null),l=t?.postProcessing,p=r??null,d=l?.outline.enabled===!0,h=d||n,[m,f]=mh(()=>s.xr?.isPresenting??!1);ph(()=>{let L=s.xr;if(!L)return;let w=()=>f(!0),I=()=>f(!1);return L.addEventListener("sessionstart",w),L.addEventListener("sessionend",I),f(L.isPresenting),()=>{L.removeEventListener("sessionstart",w),L.removeEventListener("sessionend",I)}},[s]);let b=a.children.filter(L=>L.isLight),P=lo(()=>new so(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),C=lo(()=>new La(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),k=lo(()=>new La(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),y=lo(()=>ql(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),j=lo(()=>ql(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||m||i?null:$l(P0,{children:[l.godRays.enabled===!0&&$l("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[Le("sphereGeometry",{args:[.1,8,8]}),Le("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),$l(i0,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&Le(g0,{}),l.ssao.enabled===!0&&Le(b0,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&Le(Qy,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&Le(r0,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&Le(Jy,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&Le(m0,{selection:p??void 0,lights:b,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:Aa(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),h&&Le(u0,{ref:o,selection:Yl,selectionLayer:l.outline.selectionLayer,blendFunction:ao.SCREEN,edgeStrength:d?l.outline.edgeStrength:vn.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:vn.pulseSpeed,visibleEdgeColor:d?C:vn.visibleEdgeColor,hiddenEdgeColor:d?k:vn.hiddenEdgeColor,kernelSize:d?Aa(l.outline.kernelSize):vn.kernelSize,blur:d?l.outline.blur:vn.blur,xRay:d?l.outline.xRay:vn.xRay}),l.chromaticAberration.enabled===!0&&Le(e0,{offset:P,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&Le(t0,{}),l.dotScreen.enabled===!0&&Le(n0,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&Le(o0,{mode:uh(l.glitch.mode),delay:new so(l.glitch.delay[0],l.glitch.delay[1]),duration:new so(l.glitch.duration[0],l.glitch.duration[1]),strength:new so(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new so(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&Le(s0,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&Le(lh,{config:l.lensflare}),l.godRays.enabled===!0&&Le(a0,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:Aa(l.godRays.kernelSize)}),l.noise.enabled===!0&&Le(c0,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:ao.ADD}),l.brightnessContrast.enabled===!0&&Le(Zy,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&Le(l0,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&Le(nh,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&Le(v0,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:ao.NORMAL}),l.toneMapping.enabled===!0&&Le(y0,{mode:ch(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&Le(f0,{intensity:l.sepia.intensity,blendFunction:ao.NORMAL}),l.scanline.enabled===!0&&Le(h0,{density:l.scanline.density,blendFunction:ao.OVERLAY}),l.pixelation.enabled===!0&&Le(d0,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&Le(p0,{rampType:dh(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:y,endColor:j,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function T0(e){let t=[e];for(;t.length>0;){let r=t.pop();if(r.visible){if(r.isMesh)return!0;t.push(...r.children)}}return!1}function _0(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function fh({hoveredObjectRef:e,...t}){let r=Ra(c=>c.scene),n=Ra(c=>c.invalidate),[i,o]=mh(null),a=M0(c=>o(c),[]),s=hh({effect:null,objects:Yl});return ph(()=>{if(!i)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?S0(r):e&&T0(e)?[e]:Yl;s.current.effect===i&&_0(s.current.objects,l)||(s.current={effect:i,objects:l},i.selection.set(l),n())}),Le(C0,{...t,onOutlineEffect:a})}import{Component as E0}from"react";var ka=class extends E0{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,n){this.props.onError?.(r)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};import{Fragment as U0,jsx as Ut,jsxs as gh}from"react/jsx-runtime";var N0=1.5;function j0({captureRef:e}){let{gl:t,scene:r,camera:n,invalidate:i}=R0();return B0(()=>{if(e)return e.current={gl:t,scene:r,camera:n,invalidate:i},()=>{e.current=null}},[e,t,r,n,i]),null}function Kl({children:e,camera:t,backgroundColor:r,shadows:n=!0,sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:p,rendererCaptureRef:d,preserveDrawingBuffer:h=!1,reduceGpuLoad:m}){let f=m??Nl(),b=f?Math.min(l,N0):l,P=n&&!f,C=Da(()=>r?{background:r}:i?.background.enabled?i.background.type==="color"?{background:i.background.color}:i.background.type==="image"&&i.background.imageUrl.trim()?{backgroundImage:`url("${i.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[r,i]),k=Da(()=>{if(r)return r;let S=i?.background;if(S?.enabled){if(S.type==="color")return S.color;if(S.type==="image"&&S.imageUrl.trim()||S.type==="environment")return null}return"#1c1c1d"},[r,i]),y=Da(()=>{let S=i?.postProcessing;return S?!!(S.glitch.enabled||S.noise.enabled||S.lensflare.enabled&&S.lensflare.animated):!1},[i?.postProcessing]),[j,L]=z0(!1),w=i?.environment,I=i?.groundShadows,U=Da(()=>{if(!w)return null;if(w.source==="custom"){let S=w.customEnvironmentUrl.trim();return Dd(S)?{files:S}:null}return{preset:w.preset}},[w]),_=gh(U0,{children:[Ut(j0,{captureRef:d}),Ut(rh,{cameraConfig:t}),Ut(Zp,{active:y}),Ut(eh,{color:k}),U?Ut(ka,{onError:S=>console.warn("Failed to load environment map:",S),children:Ut(I0,{fallback:null,children:Ut(k0,{...U,environmentIntensity:w?.intensity??.25,backgroundIntensity:w?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,Ut(th,{rotation:w?.rotation??0}),p&&Ut(Jp,{onPresentingChange:L}),I?.enabled&&I.mode==="shadowCatcher"&&!j&&Ut(L0,{position:[0,I.height,0],scale:I.size,opacity:I.intensity,blur:I.borderFade,far:15,resolution:1024,color:"#000000"}),e,Ut(fh,{sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,disabled:f})]});return Ut(A0,{frameloop:c,dpr:[1,b],shadows:P?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:C,camera:t??{fov:50},gl:{preserveDrawingBuffer:h,toneMapping:O0,toneMappingExposure:1},children:p?gh(D0,{store:p,children:[Ut(Qp,{renderMode:c}),_]}):_})}import{CameraControls as F0,PointerLockControls as V0}from"@react-three/drei";import{Box3 as G0,Vector3 as yh}from"three";import{useEffect as co,useRef as H0}from"react";var Oa=e=>e*Math.PI/180;function bh(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Oa(e?.minPolarAngle??0),maxPolarAngle:Oa(e?.maxPolarAngle??180),minAzimuthAngle:Oa(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Oa(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}import{jsx as vh}from"react/jsx-runtime";function Ql({controlsRef:e,onCameraChange:t,cameraLimits:r,controllerType:n="orbit",onPointerLockExit:i}){let o=n==="orbit",a=H0(null);return co(()=>{if(!o)return a.current?.lock(),()=>{a.current?.unlock()}},[o]),co(()=>{o&&document.pointerLockElement&&document.exitPointerLock()},[o]),co(()=>{if(o)return;let s=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[o,i]),co(()=>{if(!o||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=()=>{t(s.camera,s)};return s.addEventListener("update",c),()=>{s.removeEventListener("update",c)}},[o,e,t]),co(()=>{if(!o||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=bh(r);s.minDistance=c.minDistance,s.maxDistance=c.maxDistance,s.minPolarAngle=c.minPolarAngle,s.maxPolarAngle=c.maxPolarAngle,s.minAzimuthAngle=c.minAzimuthAngle,s.maxAzimuthAngle=c.maxAzimuthAngle,s.boundaryEnclosesCamera=c.boundaryEnclosesCamera,s.boundaryFriction=c.boundaryFriction,s.setBoundary(c.panBoundary?new G0(new yh(...c.panBoundary[0]),new yh(...c.panBoundary[1])):void 0)},[o,e,r?.minDistance,r?.maxDistance,r?.minPolarAngle,r?.maxPolarAngle,r?.minAzimuthAngle,r?.maxAzimuthAngle,r?.boundaryEnclosesCamera,r?.boundaryFriction,r?.panBoundary]),o?vh(F0,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):vh(V0,{ref:a,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}import{useRef as Jl,useMemo as Ia,useEffect as W0}from"react";import{useFrame as X0,useThree as xh}from"@react-three/fiber";import{Vector3 as q0}from"three";import{Fragment as Z0,jsx as xn,jsxs as ev}from"react/jsx-runtime";function Mh(e,t){if(!t)return e;let r=t*Math.PI/180,n=Math.cos(r),i=Math.sin(r);return[e[0]*n+e[2]*i,e[1],-e[0]*i+e[2]*n]}function $0(e,t){let[r,n,i]=e.center,o=e.radius,a=Math.hypot(t[0],t[1],t[2]),s=a>1e-6?[t[0]/a,t[1]/a,t[2]/a]:[0,1,0],c=o*2;return{position:[r+s[0]*c,n+s[1]*c,i+s[2]*c],target:e.center,extent:o,near:Math.max(o/100,.001),far:c+o*2}}function Y0(e,t){let r=t[0]-e.center[0],n=t[1]-e.center[1],i=t[2]-e.center[2],o=Math.hypot(r,n,i);return{near:Math.max(o-e.radius,o*.01,.001),far:o+e.radius*2}}function K0(e,t,r){return t&&r&&!e.attachedToCamera?r.center:[0,0,0]}var Q0={ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},J0={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function wh({light:e,shadows:t,shadowsEnabled:r,environmentRotation:n,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=Jl(null),c=Jl(null),l=Jl(null),p=xh(C=>C.camera),d=xh(C=>C.scene),h=Ia(()=>new q0,[]),m=Ia(()=>e.attachedToCamera||e.attachment?e.position:Mh(e.position,n),[e.position,e.attachedToCamera,e.attachment,n]);X0(()=>{let C=s.current??c.current??l.current;if(!C)return;if(e.attachedToCamera){C.position.copy(p.position);return}let k=e.attachment;if(!k)return;let y=o?$n(o,k.objectId):null,L=(y?o?.[y]:void 0)?.modelObjectId??k.objectId,w=(y?a?.current[y]:void 0)??mn(d,L);w&&(h.fromArray(k.offset),w.localToWorld(h),C.position.copy(h))});let f=r&&t.enabled&&e.castShadow,b=Ia(()=>e.type==="directional"&&f&&i&&!e.attachedToCamera?$0(i,m):null,[e.type,e.attachedToCamera,f,i,m]),P=Ia(()=>e.type==="spot"&&f&&i&&!e.attachedToCamera?Y0(i,m):null,[e.type,e.attachedToCamera,f,i,m]);return W0(()=>{let C=s.current??l.current;if(!C)return;let[k,y,j]=K0(e,f,i);C.target.position.set(k,y,j),C.target.updateMatrixWorld()},[e,f,i]),!e.visible||e.type==="none"?null:e.type==="directional"?xn("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:b?.position??m,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":b?.near??.5,"shadow-camera-far":b?.far??40,"shadow-camera-left":-(b?.extent??8),"shadow-camera-right":b?.extent??8,"shadow-camera-top":b?.extent??8,"shadow-camera-bottom":-(b?.extent??8)}):e.type==="point"?xn("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:m,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?xn("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:m,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":P?.near??.5,"shadow-camera-far":P?.far??40}):e.type==="hemisphere"?xn("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Zl({lightingConfig:e,shadowConfig:t,shadowsEnabled:r=!0,environmentRotation:n=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let c=e??Q0,l=t??J0,p=i?.shadowLight,d=Mh([5,10,5],n);return ev(Z0,{children:[xn("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(h=>xn(wh,{light:h,shadows:l,shadowsEnabled:r,environmentRotation:n,modelBounds:o,objectBindings:a,nodeRefs:s},h.id)),p?.enabled&&xn(wh,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:p.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:p.bias,visible:!0},shadows:l,shadowsEnabled:r,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}import{useState as lv,useEffect as $e,useRef as st,useMemo as vt}from"react";import{useFrame as ec,useThree as cv}from"@react-three/fiber";import{MeshStandardMaterial as uv,MeshBasicMaterial as tc,MeshNormalMaterial as dv,MeshMatcapMaterial as pv,DoubleSide as hv,NormalBlending as mv,AnimationMixer as fv,LoopOnce as gv,LoopRepeat as bv,Box3 as Ha,Vector3 as wn,Matrix4 as yv,MathUtils as Wa}from"three";import{SkeletonUtils as vv}from"three-stdlib";function Sh(e){let t=new Map;return e.map((r,n)=>{let o=r.name.trim()||`Animation ${n+1}`,a=t.get(o)??0;return t.set(o,a+1),{clip:r,sourceName:a===0?o:`${o} (${a+1})`,duration:r.duration}})}import{Color as Ba,FrontSide as tv,NormalBlending as Ch}from"three";function Th(e,t,r,n){let i=ir(t),o=to(r,i),a=Nd(n,t),s=jd(n,t),c=Ud(n,t);return a||s||c?ya(e.userData,t,o,r,a??[0,0],s??1,c??0):(va(e.userData,t),o)}function at(e,t,r,n){if(!r){va(e.userData,t);return}let i=la[t];e[i]=Th(e,t,r,n)}function za(e,t,r){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new Ba(0,0,0)),e.emissiveIntensity=e.userData.baseEmissiveIntensity??e.emissiveIntensity,e.emissiveMap=e.userData.baseEmissiveMap??null,e.opacity=e.userData.baseOpacity??1,e.transparent=e.userData.baseTransparent??!1,e.alphaMap=e.userData.baseAlphaMap??null,e.alphaTest=e.userData.baseAlphaTest??0,e.alphaHash=e.userData.baseAlphaHash??!1,e.dithering=e.userData.baseDithering??!1,e.blending=e.userData.baseBlending??Ch,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??tv,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Qi(e.userData.baseNormalScale)),e.bumpMap=e.userData.baseBumpMap??null,e.bumpScale=e.userData.baseBumpScale??e.bumpScale,e.aoMap=e.userData.baseAoMap??null,e.aoMapIntensity=e.userData.baseAoMapIntensity??e.aoMapIntensity,e.displacementMap=e.userData.baseDisplacementMap??null,e.displacementScale=e.userData.baseDisplacementScale??e.displacementScale,e.displacementBias=e.userData.baseDisplacementBias??e.displacementBias,e.clearcoat=e.userData.baseClearcoat??e.clearcoat,e.clearcoatMap=e.userData.baseClearcoatMap??null,e.clearcoatRoughness=e.userData.baseClearcoatRoughness??e.clearcoatRoughness,e.clearcoatRoughnessMap=e.userData.baseClearcoatRoughnessMap??null,e.clearcoatNormalMap=e.userData.baseClearcoatNormalMap??null,e.clearcoatNormalScale.copy(Qi(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Ba(0,0,0)),e.sheenColorMap=e.userData.baseSheenColorMap??null,e.sheenRoughness=e.userData.baseSheenRoughness??e.sheenRoughness,e.sheenRoughnessMap=e.userData.baseSheenRoughnessMap??null,e.anisotropy=e.userData.baseAnisotropy??e.anisotropy,e.anisotropyRotation=e.userData.baseAnisotropyRotation??e.anisotropyRotation,e.anisotropyMap=e.userData.baseAnisotropyMap??null,e.transmission=e.userData.baseTransmission??e.transmission,e.transmissionMap=e.userData.baseTransmissionMap??null,e.thickness=e.userData.baseThickness??e.thickness,e.thicknessMap=e.userData.baseThicknessMap??null,e.attenuationColor.copy(e.userData.baseAttenuationColor??new Ba("#ffffff")),e.attenuationDistance=e.userData.baseAttenuationDistance??e.attenuationDistance,e.reflectivity=e.userData.baseReflectivity??e.reflectivity,e.specularIntensity=e.userData.baseSpecularIntensity??e.specularIntensity,e.specularIntensityMap=e.userData.baseSpecularIntensityMap??null,e.specularColor.copy(e.userData.baseSpecularColor??new Ba("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let n=je(t,"texture"),i=je(t,"metalnessMap"),o=je(t,"roughnessMap"),a=je(t,"emissiveMap"),s=je(t,"alphaMap"),c=je(t,"normalMap"),l=je(t,"bumpMap"),p=je(t,"aoMap"),d=je(t,"displacementMap"),h=je(t,"clearcoatMap"),m=je(t,"clearcoatRoughnessMap"),f=je(t,"clearcoatNormalMap"),b=je(t,"anisotropyMap"),P=je(t,"transmissionMap"),C=je(t,"thicknessMap"),k=je(t,"sheenColorMap"),y=je(t,"sheenRoughnessMap"),j=je(t,"specularIntensityMap"),L=je(t,"specularColorMap");if(n?(e.map=Th(e,"texture",n,t),e.color.set(r??"#ffffff")):(va(e.userData,"texture"),r&&(e.map=null,e.color.set(r))),at(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),at(e,"roughnessMap",o,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):a&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),at(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),at(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=Vd(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Fd(t.side)),at(e,"normalMap",c,t),c||t?.normalScale!==void 0){let w=t?.normalScale??Math.abs(Qi(e.userData.baseNormalScale).x);e.normalScale.set(w,t?.flipNormalY?-w:w)}if(at(e,"bumpMap",l,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),at(e,"aoMap",p,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),at(e,"displacementMap",d,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),at(e,"clearcoatMap",h,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),at(e,"clearcoatRoughnessMap",m,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),at(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let w=t?.clearcoatNormalScale??Math.abs(Qi(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(w,t?.flipClearcoatNormalY?-w:w)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),at(e,"sheenColorMap",k,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),at(e,"sheenRoughnessMap",y,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),at(e,"anisotropyMap",b,t),t?.transmission!==void 0&&(e.transmission=t.transmission),at(e,"transmissionMap",P,t),t?.thickness!==void 0&&(e.thickness=t.thickness),at(e,"thicknessMap",C,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),at(e,"specularIntensityMap",j,t),t?.specularColor&&e.specularColor.set(t.specularColor),at(e,"specularColorMap",L,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Ch||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function uo(e){return e.material}function yr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Yt(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Na(e,t){return Array.isArray(e)?e[t]:e}import{Matrix4 as rv}from"three";function nv(e){return e.isSkinnedMesh===!0}function ai(e){let t=[];return e.traverse(r=>{nv(r)&&t.push(r)}),t}var po="reactImmersiveSkinFreeze";function _h(e){return!!e.userData[po]}function ja(e,t){let r=e.userData,n=new rv().copy(t).invert(),i=r[po];if(i){i.frozenInverse.copy(n),e.bindMatrixInverse.copy(n);return}let o={frozenInverse:n,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(n),e.onBeforeRender=function(a,s,c,l,p,d){o.previousOnBeforeRender.call(this,a,s,c,l,p,d),e.bindMatrixInverse.copy(o.frozenInverse)},r[po]=o}function si(e){let t=e.userData,r=t[po];r&&(e.onBeforeRender=r.previousOnBeforeRender,delete t[po],e.updateMatrixWorld(!0))}import{useCallback as Ua,useEffect as iv,useRef as Fa}from"react";var ov=500,av=10,sv=5;function Va(e,t){let r=Fa({resolve:e,onContextMenu:t});r.current={resolve:e,onContextMenu:t};let n=Fa(null),i=Fa(!1),o=Fa(null),a=Ua(()=>{let p=n.current;p?.timer&&clearTimeout(p.timer),n.current=null,o.current?.(),o.current=null},[]),s=Ua(()=>{let p=n.current;p&&(a(),p.kind==="touch"&&(i.current=!0,setTimeout(()=>i.current=!1,800)),r.current.onContextMenu?.(p.target,p.pointer))},[a]),c=Ua(p=>{let d=p.nativeEvent,h=d.pointerType!=="touch"&&d.button===2,m=d.pointerType==="touch"&&d.button===0;if(!r.current.onContextMenu||!h&&!m)return;let f=r.current.resolve(p.object);if(f===null)return;a();let b={target:f,kind:h?"right":"touch",pointerId:d.pointerId,pointer:{clientX:d.clientX,clientY:d.clientY,pointerType:d.pointerType},timer:m?setTimeout(s,ov):null};n.current=b;let P=h?sv:av,C=L=>Math.hypot(L.clientX-b.pointer.clientX,L.clientY-b.pointer.clientY)>P,k=L=>{L.pointerId===b.pointerId&&C(L)&&a()},y=L=>{L.pointerId===b.pointerId&&(b.kind==="right"&&!C(L)?s():a())},j=L=>{L.pointerId!==b.pointerId&&a()};window.addEventListener("pointermove",k),window.addEventListener("pointerup",y),window.addEventListener("pointercancel",a),window.addEventListener("pointerdown",j),o.current=()=>{window.removeEventListener("pointermove",k),window.removeEventListener("pointerup",y),window.removeEventListener("pointercancel",a),window.removeEventListener("pointerdown",j)}},[a,s]);iv(()=>a,[a]);let l=Ua(()=>i.current?(i.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:l}}function Ga(e){let t=e.nativeEvent;return{clientX:t.clientX,clientY:t.clientY,pointerType:"pointerType"in t?t.pointerType:"mouse"}}import{jsx as Ph}from"react/jsx-runtime";function Xa(e,t,r){let n=r.get(e);n&&(t?.position?e.position.fromArray(t.position):e.position.copy(n.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],n.rotation.order):e.rotation.copy(n.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(n.scale),e.updateMatrix())}function Ze(e,t=!1){if(!e||typeof e!="object")return"-";let r=e;return[r.channel??0,t?r.format??"":"",r.isVideoTexture?r.colorSpace??"":""].join(":")}function li(e){let t=e,r=Number(t.clearcoat)>0,n=Number(t.sheen)>0,i=Number(t.anisotropy)>0,o=Number(t.transmission)>0,a=t.transparent===!1&&t.blending===mv&&t.alphaToCoverage!==!0;return[Ze(t.map),Ze(t.aoMap),Ze(t.lightMap),Ze(t.bumpMap),Ze(t.normalMap,!0),t.normalMap?t.normalMapType:"",Ze(t.displacementMap),Ze(t.emissiveMap),Ze(t.metalnessMap),Ze(t.roughnessMap),i,Ze(i?t.anisotropyMap:null),r,Ze(r?t.clearcoatMap:null),Ze(r?t.clearcoatNormalMap:null,!0),Ze(r?t.clearcoatRoughnessMap:null),n,Ze(n?t.sheenColorMap:null),Ze(n?t.sheenRoughnessMap:null),Ze(t.specularColorMap),Ze(t.specularIntensityMap),o,Ze(o?t.transmissionMap:null),Ze(o?t.thicknessMap:null),Ze(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,a].join("|")}function rc({url:e,objectBindings:t,selectedItem:r,itemMaterials:n,onItemClick:i,onItemHover:o,onItemDoubleClick:a,onItemContextMenu:s,onModelLoaded:c,onAnimationsReady:l,nodeRefsOut:p,onNodeRefsChange:d,materialRefsOut:h,panelHoveredItem:m,sceneConfig:f,zoomOnSelected:b=!0,highlightOnHover:P=!0,decoderConfig:C,modelFormat:k,onLoadProgress:y,explodeFactor:j=0,suspendBindingTransforms:L=!1}){let w=zd(e,C,k,y),I=cv(E=>E.invalidate),[U,_]=lv(null),S=st(null),{setCanvasCursor:A,restoreCanvasCursor:G}=Hd();$e(()=>{P||(_(null),o?.(null),G())},[P,o,G]);let v=vt(()=>vv.clone(w.scene),[w.scene]),z=vt(()=>Yn(v),[v]),M=z.nodesById;$e(()=>{z.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(z.duplicateNames))},[z]);let O=vt(()=>{let E=new WeakMap;return v.traverse(T=>{E.set(T,{position:T.position.clone(),rotation:T.rotation.clone(),scale:T.scale.clone()})}),E},[v]);$e(()=>{let E=!1,T=null,F=null,H=window,W=Object.entries(M).filter(([,We])=>$t(We)),J=new Ha,Y=[],Ie=0;v.traverse(We=>{$t(We)&&(We.castShadow=!1,We.receiveShadow=!0)});let ke=()=>{if(E)return;let We=new Set,X=J.getSize(new wn),Ne=new wn;for(let{name:it,box:yt}of Y)yt.getSize(Ne),Ne.x>X.x*.7&&Ne.z>X.z*.7&&Ne.y>X.y*.4&&We.add(it);v.traverse(it=>{if(!$t(it))return;let yt=Ki(it);it.castShadow=!yt||!We.has(yt),it.receiveShadow=!0}),I()},Ve=()=>{E||(H.requestIdleCallback?T=H.requestIdleCallback(De,{timeout:100}):F=window.setTimeout(()=>De(),0))},De=We=>{if(T=null,F=null,E)return;let X=performance.now(),Ne=0;for(;Ie<W.length&&!(Ne>0&&!(We?We.didTimeout?Ne<16:We.timeRemaining()>1:performance.now()-X<8));){let[it,yt]=W[Ie];Ie+=1,Ne+=1;let Zt=new Ha().setFromObject(yt);Zt.isEmpty()||(Y.push({name:it,box:Zt}),J.union(Zt))}Ie<W.length?Ve():ke()};return Ve(),()=>{E=!0,T!==null&&H.cancelIdleCallback?.(T),F!==null&&window.clearTimeout(F)}},[I,M,v]),$e(()=>{gl(v)},[v]),$e(()=>{let E=new AbortController;return sa(v,E.signal),()=>{E.abort(),Yi(v)}},[v]);let N=vt(()=>{let E={};for(let[T,F]of Object.entries(t))E[F.modelObjectId??T]=T;return E},[t]),$=vt(()=>Object.entries(t).map(([E,T])=>`${E}${T.modelObjectId??E}`).sort().join(""),[t]),Z=vt(()=>Object.entries(t).map(([E,T])=>JSON.stringify([E,T.modelObjectId??E,T.transform??null])).sort().join(""),[t]),te=st(new Map);$e(()=>{let E=new Map,T=new Map;for(let[W,J]of Object.entries(t)){if(!J.transform)continue;let Y=M[J.modelObjectId??W];Y&&(E.set(Y,J.transform),T.set(Y,ai(Y)))}let F=new Set([...te.current.keys(),...E.keys()]);for(let W of F){Xa(W,void 0,O);for(let J of ai(W))si(J)}v.updateMatrixWorld(!0);let H=new Map;for(let W of T.values())for(let J of W)H.has(J)||H.set(J,J.matrixWorld.clone());for(let[W,J]of E)Xa(W,J,O);te.current=E,v.updateMatrixWorld(!0);for(let[W,J]of H)ja(W,J);I()},[v,M,O,Z,I]),$e(()=>()=>{for(let E of ai(v))si(E)},[v]);let ie=vt(()=>{let E={};for(let[T,F]of Object.entries(t)){let H=F.modelObjectId??T,W=M[H];if(!$t(W))continue;let J=uo(W);J&&(E[T]=yr(J,Y=>{let Ie=ua(Y),ke=da(Ie??new uv);return pa(ke),ke}))}return E},[M,$]);$e(()=>{h&&(h.current=ie)},[ie,h]),$e(()=>()=>{for(let E of Object.values(ie))Yt(E,T=>{dp(T.userData),T.dispose()})},[ie]);let Se=f?.model.shading??"lit",Ue=f?.model.renderer??"pbr",rt=f?.wireframe.enabled??!1,gt=f?.wireframe.color??"#93c5fd",Fe=f?.wireframe.opacity??1,ze=vt(()=>{let E={};if(Se!=="unlit")return E;for(let[T,F]of Object.entries(ie))E[T]=yr(F,H=>{let W=new tc;return W.color.copy(H.color),W.map=H.map,W.alphaMap=H.alphaMap,W.alphaTest=H.alphaTest,W.transparent=H.transparent,W.opacity=H.opacity,W.side=H.side,W});return E},[ie,Se]),nt=vt(()=>{let E={};if(Se!=="normals")return E;for(let[T,F]of Object.entries(ie))E[T]=yr(F,()=>new dv);return E},[ie,Se]),dt=vt(()=>{let E={};if(Se!=="lit"||Ue!=="matcap")return E;let T=xa();for(let[F,H]of Object.entries(ie))E[F]=yr(H,W=>{let J=new pv;return J.matcap=T,J.color.copy(W.color),J.alphaMap=W.alphaMap,J.alphaTest=W.alphaTest,J.side=W.side,J});return E},[ie,Se,Ue]);$e(()=>()=>{for(let E of Object.values(ze))Yt(E,T=>T.dispose());for(let E of Object.values(nt))Yt(E,T=>T.dispose());for(let E of Object.values(dt))Yt(E,T=>T.dispose())},[ze,nt,dt]);let bt=E=>Se==="normals"?nt[E]:Se==="unlit"?ze[E]:Ue==="matcap"?dt[E]:ie[E],pt=st(c);pt.current=c,$e(()=>{pt.current?.(v)},[v]);let At=vt(()=>{let E={};for(let[T,F]of Object.entries(t)){let H=F.modelObjectId??T,W=M[H];W&&(E[T]=W)}return E},[M,$]);$e(()=>(p.current=At,d?.(),()=>{p.current===At&&(p.current={})}),[At,p,d]);let Ge=st({});$e(()=>()=>{for(let E of Object.values(Ge.current))for(let[T,F]of Object.entries(E))F&&gn(F,ir(T));Ge.current={}},[]);let q=vt(()=>{let E=new Map;for(let[T,F]of Object.entries(t)){let H=m===F||m?.id===F.id||m?.modelObjectId===F.modelObjectId,W=P&&(U===T||H),J=W||r===T;(W||J)&&E.set(T,{emissive:W,matcap:J})}return E},[t,P,U,r,m]),Vt=st(q);Vt.current=q,$e(()=>{let E=new Set;for(let[T,F]of Object.entries(t)){E.add(T);let H=F.modelObjectId??T,W=M[H];if(!$t(W))continue;W.visible=F.visible!==!1;let J=ie[T];if(!J)continue;if(Ue!=="uv-checker"){let X=bt(T);X&&(W.material=X)}if(F.visible===!1)continue;let Y=ze[T],Ie=dt[T],ke=n[T]??n[F.modelObjectId??T],Ve=F.style?.material,De=Ge.current[T]??{};for(let X of Hr){let Ne=je(Ve,X),it=De[X];if(it===Ne)continue;let yt=ir(X);it&&gn(it,yt),Ne?(ba(Ne,yt,I),De[X]=Ne):delete De[X]}Object.keys(De).length>0?Ge.current[T]=De:delete Ge.current[T];let We=ke?.hex??Ve?.baseColor;Yt(J,(X,Ne)=>{let it=li(X);za(X,Ve,We);let yt=X.userData.reactImmersiveConfiguredEmissive;yt?.isColor?yt.copy(X.emissive):X.userData.reactImmersiveConfiguredEmissive=X.emissive.clone();let Zt=Vt.current.get(T);Zt?.emissive&&X.emissive.add(eo),it!==li(X)&&(X.needsUpdate=!0);let Rt=Na(Y,Ne);if(Rt){let Cr=li(Rt);Rt.color.copy(X.color),Rt.map=X.map,Rt.alphaMap=X.alphaMap,Rt.alphaTest=X.alphaTest,Rt.transparent=X.transparent,Rt.opacity=X.opacity,Rt.side=X.side,Cr!==li(Rt)&&(Rt.needsUpdate=!0)}let Ct=Na(Ie,Ne);if(Ct){let Cr=li(Ct);Zt?.matcap?Ct.color.set(Er.color):Ct.color.copy(X.color),Ct.map=X.map,Ct.alphaMap=X.alphaMap,Ct.alphaTest=X.alphaTest,Ct.transparent=X.transparent,Ct.opacity=X.opacity,Ct.side=X.side,Cr!==li(Ct)&&(Ct.needsUpdate=!0)}})}for(let T of Object.keys(Ge.current))if(!E.has(T)){for(let[F,H]of Object.entries(Ge.current[T]))H&&gn(H,ir(F));delete Ge.current[T]}I()},[t,M,ie,ze,nt,dt,n,Se,Ue,I]);let ht=st(new Map);$e(()=>{let E=ht.current,T=new Set([...E.keys(),...q.keys()]),F=!1;for(let H of T){let W=E.get(H),J=q.get(H),Y=!!W?.emissive!=!!J?.emissive,Ie=!!W?.matcap!=!!J?.matcap;if(!Y&&!Ie)continue;F=!0;let ke=ie[H],Ve=dt[H];ke&&Yt(ke,(De,We)=>{let X=De.userData.reactImmersiveConfiguredEmissive;Y&&X?.isColor&&(De.emissive.copy(X),J?.emissive&&De.emissive.add(eo));let Ne=Na(Ve,We);Ie&&Ne&&(J?.matcap?Ne.color.set(Er.color):Ne.color.copy(De.color))})}ht.current=q,F&&I()},[q,ie,dt,I]),$e(()=>{if(Ue!=="uv-checker")return;let E=pp(),T=[];return v.traverse(F=>{if(!$t(F))return;let H=F.material,W=Array.isArray(H)?H:[H],J=!!F.geometry.getAttribute("uv"),Y=W.map((ke,Ve)=>{let De=new tc({color:J?"#ffffff":"#ff00ff",map:J?E:null,side:ke.side});return De.name=`${F.name||"mesh"}-uv-checker-${Ve}`,De.toneMapped=!1,De}),Ie=Array.isArray(H)?Y:Y[0];F.material=Ie,T.push({node:F,original:H,diagnostic:Ie})}),I(),()=>{for(let{node:F,original:H,diagnostic:W}of T){F.material=H;let J=Array.isArray(W)?W:[W];for(let Y of J)Y.dispose()}I()}},[v,Ue,I]),$e(()=>{if(!rt)return;let E=[];for(let[T,F]of Object.entries(t)){let H=F.modelObjectId??T,W=M[H];if(!$t(W))continue;let J=new tc({color:gt,wireframe:!0,transparent:!0,opacity:Fe,depthTest:!1,depthWrite:!1,side:hv,toneMapped:!1}),Y=W.clone(!1);Y.name="",Y.position.set(0,0,0),Y.quaternion.identity(),Y.scale.set(1,1,1),Y.matrix.identity(),Y.matrixAutoUpdate=!0,Y.material=J,Y.castShadow=!1,Y.receiveShadow=!1,Y.frustumCulled=!1,Y.renderOrder=1,Y.userData={isWireframeOverlay:!0},Y.raycast=()=>{},W.morphTargetInfluences&&(Y.morphTargetInfluences=W.morphTargetInfluences),W.add(Y),E.push({node:W,overlay:Y})}return I(),()=>{for(let{node:T,overlay:F}of E)T.remove(F),F.material.dispose()}},[rt,gt,Fe,M,t,I]);let _e=vt(()=>Sh(w.animations),[w.animations]),Ye=st(l);Ye.current=l;let He=st(f);He.current=f;let Bt=st(null),Gt=st({}),Pe=st(null),se=st(null),de=st(1),Ke=st(new Set),Ae=st(0),Qe=()=>({currentClip:se.current,isPlaying:Pe.current?.paused===!1,speed:de.current,time:Pe.current?.time??0,duration:Pe.current?.getClip().duration??0}),V=()=>{let E=Qe();Ke.current.forEach(T=>T(E))},re=(E,T)=>{let F=Gd(T);E.setLoop(F==="once"?gv:bv,F==="once"?1:1/0),E.clampWhenFinished=F==="once";let H=fl(T?.speed??de.current);de.current=H,E.setEffectiveTimeScale(H)},oe=()=>{Pe.current?.stop(),Pe.current=null,se.current=null,V(),I()},we=()=>{Pe.current&&(Pe.current.paused=!0,V(),I())},Oe=E=>{let T=fl(E);de.current=T,Pe.current?.setEffectiveTimeScale(T),V()},Ce=E=>{let T=Pe.current;if(!T)return;let F=T.getClip().duration;T.time=Math.min(Math.max(E,0),F),Bt.current?.update(0),V(),I()},Re=E=>{let T=Gt.current[E];if(!T)return;let F=ca(He.current,E);if(!F?.hidden){if(Pe.current===T&&T.paused){re(T,F),T.paused=!1,se.current=E,V(),I();return}Pe.current&&Pe.current!==T&&Pe.current.stop(),re(T,F),T.paused=!1,T.enabled=!0,T.reset().play(),Pe.current=T,se.current=E,V(),I()}};$e(()=>{let E=new fv(v);Bt.current=E;let T={};for(let{clip:Y,sourceName:Ie}of _e)T[Ie]=E.clipAction(Y);Gt.current=T;let F=Y=>{Y.action&&Y.action===Pe.current&&oe()};E.addEventListener("finished",F);let H=()=>{};Ye.current?.({clips:_e.map(({sourceName:Y})=>Y),clipDetails:_e.map(({sourceName:Y,duration:Ie})=>({sourceName:Y,duration:Ie})),play:_e.length?Re:H,pause:_e.length?we:H,stop:_e.length?oe:H,setSpeed:_e.length?Oe:H,seek:_e.length?Ce:H,getState:Qe,subscribe:Y=>(Ke.current.add(Y),Y(Qe()),()=>{Ke.current.delete(Y)})}),de.current=1,V();let W=He.current?.animations.autoplayClip,J=W?ca(He.current,W):void 0;return W&&!J?.hidden&&Re(W),()=>{E.removeEventListener("finished",F),E.stopAllAction(),E.uncacheRoot(v),Bt.current=null,Gt.current={},Pe.current=null,se.current=null,de.current=1,V()}},[v,_e]),$e(()=>{let E=se.current,T=Pe.current;if(!E||!T||!f?.animations)return;let F=ca(f,E);if(F?.hidden){oe();return}F&&(re(T,F),V())},[f?.animations]),ec((E,T)=>{if(Bt.current&&Pe.current?.paused===!1){if(Bt.current.update(T),!L)for(let[F,H]of te.current)Xa(F,H,O);I(),Ae.current+=T,Ae.current>=.066&&(Ae.current=0,V(),gl(v))}});let ee=vt(()=>(f?.model.rotation??[0,0,0]).map(E=>E*Math.PI/180),[f?.model.rotation]);ec((E,T)=>{if(!S.current)return;let F=S.current.rotation;F.x=Wa.lerp(F.x,ee[0],1-Math.exp(-5*T)),F.y=Wa.lerp(F.y,ee[1],1-Math.exp(-5*T)),F.z=Wa.lerp(F.z,ee[2],1-Math.exp(-5*T)),Math.abs(F.x-ee[0])<1e-4&&Math.abs(F.y-ee[1])<1e-4&&Math.abs(F.z-ee[2])<1e-4||I()});let xe=st([]),Me=st(0),ot=st(0),zt=vt(()=>new wn,[]);$e(()=>{let E=new Map;for(let[ke,Ve]of Object.entries(t)){let De=M[Ve.modelObjectId??ke];De&&E.set(De,Ve)}for(let ke of xe.current)Xa(ke.node,E.get(ke.node)?.transform,O);ot.current=0,v.updateWorldMatrix(!0,!0);let T=new Ha().setFromObject(v),F=T.getCenter(new wn),H=T.getSize(new wn).length()*.5;Me.current=Number.isFinite(H)?H:0;let W=[...E.keys()],J=new Set(W),Y=[],Ie=new wn;for(let ke of W){if(!ke.parent)continue;let Ve=ke.parent,De=!1;for(;Ve;){if(J.has(Ve)){De=!0;break}Ve=Ve.parent}if(De)continue;let We=new Ha().setFromObject(ke);if(We.isEmpty())continue;We.getCenter(Ie);let X=Ie.clone().sub(F);X.lengthSq()<1e-8||(X.normalize(),Y.push({node:ke,restLocalPos:ke.position.clone(),restWorldPos:ke.getWorldPosition(new wn),worldDir:X,parentInverse:new yv().copy(ke.parent.matrixWorld).invert()}))}xe.current=Y,I()},[v,M,$,Z,O,I]),$e(()=>{I()},[j,I]),ec((E,T)=>{let F=xe.current;if(F.length===0)return;let H=Math.min(Math.max(j,0),1),W=ot.current;if(Math.abs(W-H)<1e-4){if(W===H)return;ot.current=H}else ot.current=Wa.lerp(W,H,1-Math.exp(-6*T)),I();let J=ot.current*Me.current;for(let Y of F)zt.copy(Y.worldDir).multiplyScalar(J).add(Y.restWorldPos).applyMatrix4(Y.parentInverse),Y.node.position.copy(zt)});let St=E=>{let T=E;for(;T;){let F=Ki(T),H=F?N[F]:void 0;if(H&&t[H])return[H,t[H]];T=T.parent}return null},mt=Va(E=>{let T=St(E);return T&&T[1].selectable!==!1?T[1]:null},s),sn=E=>{if(mt.consumeClick())return;let T=St(E.object);if(!T)return;let[,F]=T;F.selectable!==!1&&(E.stopPropagation(),i(F))},Nt=E=>{let T=St(E.object);if(!T)return;let[,F]=T;if(F.selectable===!1)return;a?.(F,Ga(E))&&E.stopPropagation()},jr=E=>{if(!P)return;let T=St(E.object);if(!T)return;let[F,H]=T;H.hoverable!==!1&&(E.stopPropagation(),A("pointer"),_(F),o?.(H))},Uo=E=>{P&&(E.stopPropagation(),G(),_(null),o?.(null))},ft=vt(()=>!Rd(v),[v]);return Ph("group",{ref:S,children:Ph("primitive",{object:v,...ft?{onClick:sn,onDoubleClick:Nt,...s?{onPointerDown:mt.onPointerDown}:{},...P?{onPointerOver:jr,onPointerOut:Uo}:{}}:{}})})}import{useCallback as tn,useEffect as rn,useMemo as kw,useRef as xt,useState as Hc}from"react";import{useFrame as Dw,useThree as Ow}from"@react-three/fiber";import{Box3 as Bh,BoxGeometry as jv,Group as Oh,Matrix4 as zh,Mesh as Uv,MeshBasicMaterial as Fv,Vector3 as Ar}from"three";import{Euler as xv,Matrix4 as Mn,MeshBasicMaterial as wv,MeshMatcapMaterial as Mv,MeshNormalMaterial as Sv,MeshStandardMaterial as Cv,Quaternion as Tv,Vector3 as ho}from"three";function Rh(e){let t={};for(let[r,n]of Object.entries(e))t[n.modelObjectId??r]=r;return t}function ic(e){let t=e,r=null;for(;t;){let n=t.userData?.ri_name;if(typeof n=="string"&&n)return n;!r&&t.name&&(r=t.name),t=t.parent}return r}function Lh(e,t){return e||(t?t.modelObjectId??t.id:null)}function Ya(e,t){let r=ic(e);if(!r)return null;let n=t.keyByModelObject[r]??r,i=t.objectBindings[n];return i?{key:n,binding:i}:null}var ci=new ho,nc=new ho,_v=new Mn,Eh=new Mn,qa=new Mn,Pv=new Mn,$a=new Mn,Ev=new Mn,Av=new Mn,Rv=new ho,Lv=new ho,Yr=new ho,Ah=new Tv,kv=new xv;function Dv(e,t,r,n,i){let o=!!(r?.position||r?.rotation||r?.scale),a=!!(i&&i.factor>0&&i.radius>0);if(!o&&!a){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}Eh.compose(t.position,Ah.setFromEuler(t.rotation),t.scale);let s=r?.rotation;qa.compose(Rv.fromArray(r?.position??[0,0,0]),Ah.setFromEuler(kv.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),Lv.fromArray(r?.scale??[1,1,1])),qa.premultiply(n).multiply(Pv.copy(n).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??_v;if($a.multiplyMatrices(c,Eh).premultiply(qa),a&&i){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let p=l.userData.ri_center;Array.isArray(p)&&p.length===3?Yr.fromArray(p).applyMatrix4(n).applyMatrix4(qa):Yr.setFromMatrixPosition($a),Yr.sub(i.centre),Yr.lengthSq()>1e-8&&(Yr.normalize().multiplyScalar(i.factor*i.radius),$a.premultiply(Av.makeTranslation(Yr.x,Yr.y,Yr.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(Ev.copy(c).invert(),$a),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function Ka(e,t){if(!$t(e)&&!e.userData.riLogicalObject)return;let r=Ya(e,t);if(!r)return;let n=kh(e);if(n.rest??(n.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){Dv(e,n.rest,r.binding.transform,t.placementFrame,t.explode);return}let i=n.rest,o=r.binding.transform;o?.position?e.position.fromArray(o.position):e.position.copy(i.position),o?.rotation?e.rotation.set(o.rotation[0],o.rotation[1],o.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),o?.scale?e.scale.fromArray(o.scale):e.scale.copy(i.scale);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),nc.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?ci.fromArray(c).applyMatrix4(e.matrixWorld).sub(a.centre):ci.copy(nc).sub(a.centre),ci.lengthSq()>1e-8&&(ci.normalize().multiplyScalar(a.factor*a.radius).add(nc),e.parent&&e.parent.worldToLocal(ci),e.position.copy(ci))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function ui(e,t){e.traverse(r=>Ka(r,t))}function kh(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function Ov(e,t,r,n){return JSON.stringify([e?.style?.material??null,t??null,r.shadingMode,r.rendererMode,n])}function Iv(e){if(e.textures){for(let t of Hr){let r=e.textures[t];r&&gn(r,ir(t))}e.textures=void 0}}function Bv(e,t,r){let n=e.textures??{};for(let i of Hr){let o=je(t,i),a=n[i];if(a===o)continue;let s=ir(i);a&&gn(a,s),o?(ba(o,s,r),n[i]=o):delete n[i]}e.textures=Object.keys(n).length>0?n:void 0}function zv(e,t){if(t.shadingMode==="normals")return yr(e,()=>new Sv);if(t.shadingMode==="unlit")return yr(e,r=>{let n=new wv;return n.color.copy(r.color),n.map=r.map,n.alphaMap=r.alphaMap,n.alphaTest=r.alphaTest,n.transparent=r.transparent,n.opacity=r.opacity,n.side=r.side,n});if(t.rendererMode==="matcap"){let r=xa();return yr(e,n=>{let i=new Mv;return i.matcap=r,i.color.copy(n.color),i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.side=n.side,i})}return e}function Nv(e,t){if(!$t(e))return;let n=kh(e);n.original??(n.original=uo(e));let i=Ya(e,t);if(!i){n.original&&(e.material=n.original),e.visible=!0;return}let{key:o,binding:a}=i;e.visible=a.visible!==!1,Ka(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,c=t.highlightOnHover!==!1&&o===t.hoveredKey,l=Ov(a,s,t,c);if(n.signature===l&&n.display){e.material=n.display;return}let p=a.style?.material;if(Bv(n,p,t.invalidate),!n.physical){let d=n.original??uo(e);if(!d)return;n.physical=yr(d,h=>{let m=ua(h),f=da(m??new Cv);return pa(f),f})}Yt(n.physical,d=>{za(d,p,s??p?.baseColor),c&&(d.emissive.add(eo),d.color.lerp(ap,sp)),d.needsUpdate=!0}),n.display&&n.display!==n.physical&&Yt(n.display,d=>d.dispose()),n.display=zv(n.physical,t),n.signature=l,e.material=n.display}function Dh(e,t){e.traverse(r=>Nv(r,t))}function oc(e){e.traverse(t=>{if(!$t(t))return;let r=t.userData.riVisuals;r&&(r.rest&&(t.matrixAutoUpdate=!0,t.position.copy(r.rest.position),t.rotation.copy(r.rest.rotation),t.scale.copy(r.rest.scale),t.updateMatrix()),r.original&&(t.material=r.original),r.display&&r.display!==r.physical&&Yt(r.display,n=>n.dispose()),r.physical&&Yt(r.physical,n=>n.dispose()),Iv(r),delete t.userData.riVisuals)})}var Nh=new zh().makeRotationX(Math.PI/2),Ih=Nh.clone().invert();function Vv(e){let t=new Ar(e[0],e[1],e[2]),r=new Ar(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new Bh(t.clone().sub(r),t.clone().add(r))}function Gv(e){let t=e.getCenter(new Ar),r=e.getSize(new Ar).multiplyScalar(.5);return[t.x,t.y,t.z,r.x,0,0,0,r.y,0,0,0,r.z]}var Qa=class{constructor(){this.group=new Oh;this.objects=new Map;this.geometry=new jv(1,1,1);this.material=new Fv;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let r of t){let n=new Bh(new Ar(...r.minimum),new Ar(...r.maximum)).applyMatrix4(Ih),i=new Oh;i.name=r.name,i.userData.ri_name=r.name,i.userData.riLogicalObject=!0,i.userData.ri_center=n.getCenter(new Ar).toArray();let o=new Uv(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(n.getCenter(new Ar)),o.scale.copy(n.getSize(new Ar)),i.add(o),this.group.add(i),this.objects.set(r.name,i)}this.signature="",this.lastContext=null}nodesByBinding(t){let r={};for(let[n,i]of this.objects){let o=t.keyByModelObject[n]??n;t.objectBindings[o]&&(r[o]=i)}return r}sync(t,r,n=!1){if(!n&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=n;let i={...t,suspendTransforms:!1},o=r?t.objectBindings[r]:void 0,a=o?this.objects.get(o.modelObjectId??r):void 0;n&&a&&o&&(i={...i,objectBindings:{...t.objectBindings,[r]:{...o,transform:{position:a.position.toArray(),rotation:[a.rotation.x,a.rotation.y,a.rotation.z],scale:a.scale.toArray()}}}});for(let c of this.objects.values())n&&c===a||Ka(c,i);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new zh)||this.transforms.set(c,Nh.clone().multiply(l.matrix).multiply(Ih))}return this.lastEffective=i,i}updateBounds(t){if(!t)return;let r=n=>{if(this.tileVersions.get(n)!==this.version){if(n.boundingVolume.box&&this.tileVersions.get(n)!==this.version){let i=this.originalBounds.get(n);i||(i={box:[...n.boundingVolume.box],error:n.geometricError},this.originalBounds.set(n,i));let o=Vv(i.box),a=o.clone(),s=1;for(let l of n.extras?.featureIds??[]){let p=this.transforms.get(l);p&&(a.union(o.clone().applyMatrix4(p)),s=Math.max(s,p.getMaxScaleOnAxis()))}let c=Gv(a);n.boundingVolume.box=c,n.geometricError=i.error*s,n.engineData?.boundingVolume?.setObbData(c,n.engineData.transform),this.tileVersions.set(n,this.version)}n.children?.forEach(r)}};r(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var ac=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),mo=16,sc=1.25,Hv=1.5,Wv=1.25,Xv=500,qv=3e3,jh=5e3,Uh=2e3,$v=.9;function Fh(e){return e.full&&(e.wanting||e.usage>1)}function Vh(e){return e.loosened?qv:Xv}function Gh(e){let t=e.factor/Wv;return t<=1+1e-6?1:t}function Hh(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<$v&&Gh(e)>e.tooFine}function Wh(e,t){let{now:r}=t,n=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(Fh(t)){if(r-n.changedAt<Vh(n))return n;let i=Math.max(n.tooFine,n.factor);return n.factor>=mo?n.loosened&&n.tooFine===i?n:{...n,loosened:!0,tooFine:i,changedAt:r}:{factor:Math.min(mo,n.factor*Hv),loosened:!0,tooFine:i,raisedAt:r,changedAt:r}}return n.loosened&&!t.wanting?{...n,loosened:!1,changedAt:r}:Hh(n,t)&&r-n.raisedAt>=jh&&r-n.changedAt>=Uh?{...n,factor:Gh(n),changedAt:r}:n}function Xh(e,t){let{now:r}=t;return Fh(t)?e.factor>=mo&&e.loosened?null:Math.max(0,Vh(e)-(r-e.changedAt)):e.loosened&&!t.wanting?0:Hh(e,t)?Math.max(0,jh-(r-e.raisedAt),Uh-(r-e.changedAt)):null}function Kh(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function lc(e){if(!e)return null;let t=e.length,r=e.indexOf("?"),n=e.indexOf("#");r!==-1&&(t=Math.min(t,r)),n!==-1&&(t=Math.min(t,n));let i=e.lastIndexOf(".",t),o=e.lastIndexOf("/",t),a=e.indexOf("://");return a!==-1&&a+2===o||i===-1||i<o?null:e.substring(i+1,t)||null}var Za,fo=(Za=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:r}=this,n,i=()=>{r.delete(n),e()};return n=t?t.requestAnimationFrame(i):requestAnimationFrame(i),r.set(n,e),n}static cancelAnimationFrame(e){let{pending:t,session:r}=this;t.delete(e),r?r.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},pl(Za,"pending",new Map),pl(Za,"session",null),Za),qh=2**30,yo=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,r)=>{let n=e(t),i=e(r);return n<i?-1:+(n>i)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*qh,this.maxBytesSize=.4*qh,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:r,itemSet:n}=this;n.has(e)&&(this.cachedBytes-=r.get(e)||0,r.set(e,t),this.cachedBytes+=t)}add(e,t){let r=this.itemSet;if(r.has(e)||this.isFull())return!1;let n=this.usedSet,i=this.itemList,o=this.callbacks;return i.push(e),n.add(e),r.set(e,Date.now()),o.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,r=this.itemSet,n=this.itemList,i=this.bytesMap,o=this.callbacks,a=this.loadedSet;if(r.has(e)){this.cachedBytes-=i.get(e)||0,i.delete(e),o.get(e)(e);let s=n.indexOf(e);return n.splice(s,1),t.delete(e),r.delete(e),o.delete(e),a.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:r,loadedSet:n}=this;r.has(e)&&(t===!0?n.add(e):n.delete(e))}markUsed(e){let t=this.itemSet,r=this.usedSet;t.has(e)&&!r.has(e)&&(t.set(e,Date.now()),r.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:r,itemList:n,itemSet:i,usedSet:o,loadedSet:a,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:p}=this,d=n.length-o.size,h=n.length-a.size,m=Math.max(Math.min(n.length-t,d),0),f=this.cachedBytes-l,b=this.unloadPriorityCallback||this.defaultPriorityCallback,P=!1,C=m>0&&d>0||h&&n.length>r;if(d&&this.cachedBytes>l||h&&this.cachedBytes>p||C){n.sort((U,_)=>{let S=o.has(U);if(S===o.has(_)){let A=a.has(U);return A===a.has(_)?-b(U,_):A?1:-1}else return S?1:-1});let k=Math.max(t*e,m*e),y=Math.ceil(Math.min(k,d,m)),j=Math.max(e*f,e*l),L=Math.min(j,f),w=0,I=0;for(;this.cachedBytes-I>p||n.length-w>r;){let U=n[w],_=c.get(U)||0;if(o.has(U)&&a.has(U)||this.cachedBytes-I-_<p&&n.length-w<=r)break;I+=_,w++}for(;I<L||w<y;){let U=n[w],_=c.get(U)||0;if(o.has(U)||this.cachedBytes-I-_<l&&w>=y)break;I+=_,w++}n.splice(0,w).forEach(U=>{this.cachedBytes-=c.get(U)||0,s.get(U)(U),c.delete(U),i.delete(U),s.delete(U),a.delete(U),o.delete(U)}),P=w<m||I<f&&w<d,P&&(P=w>0)}P&&(this.unloadingHandle=fo.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){fo.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},Yv=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},vr=class{get running(){return this.items.length!==0||this.currJobs!==0}constructor(){this.maxJobs=6,this.items=[],this.callbacks=new Map,this.currJobs=0,this.scheduled=!1,this.autoUpdate=!0,this.priorityCallback=null,this._schedulingCallback=e=>{fo.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let r={callback:t,reject:null,resolve:null,promise:null};return r.promise=new Promise((n,i)=>{let o=this.items,a=this.callbacks;r.resolve=n,r.reject=i,o.unshift(e),a.set(e,r),this.autoUpdate&&this.scheduleJobRun()}),r.promise}remove(e){let t=this.items,r=this.callbacks,n=t.indexOf(e);if(n!==-1){let i=r.get(e);i.promise.catch(o=>{if(o.name!=="AbortError")throw o}),i.reject(new Yv),t.splice(n,1),r.delete(e)}}removeByFilter(e){let{items:t}=this;for(let r=0;r<t.length;r++){let n=t[r];e(n)&&(this.remove(n),r--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,r=this.maxJobs,n=0,i=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;r>this.currJobs&&e.length>0&&n<r;){this.currJobs++,n++;let o=e.pop(),{callback:a,resolve:s,reject:c}=t.get(o);t.delete(o);let l;try{l=a(o)}catch(p){c(p),i();continue}l instanceof Promise?l.then(s).catch(c).finally(i):(s(l),i())}}flush(e){let{items:t,callbacks:r}=this,n=t.indexOf(e);if(!r.has(e))return;let{callback:i,resolve:o,reject:a}=r.get(e);r.delete(e),t.splice(n,1);let s;try{s=i(e)}catch(c){a(c);return}return s instanceof Promise?s.then(o).catch(a):o(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},ns=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,r,n=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let i=e===null?null:Kh(e),o=this.originQueues.get(i);o||(o=new vr,o.maxJobs=this._maxJobsPerOrigin,o.priorityCallback=this._priorityCallback,this.originQueues.set(i,o));let a=this._itemQueues.get(t);if(a&&a!==o&&a.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,o);let s=o.add(t,r);return n!==null&&(n.aborted?this.remove(t):n.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Tn=6378137,Kv=1/298.257223563,uc=6356752314245179e-9,Ja={inView:!1,error:1/0,distanceFromCamera:1/0};function is(e){return e===4||e===-1}function Rr(e,t){return os(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function os(e){return!!e.traversal}function vo(e){let{children:t}=e,r=t.length===0||os(t[t.length-1]),n=!e.internal.hasUnrenderableContent||is(e.internal.loadingState);return r&&n}function Sn(e){return e.traversal.unconditionallyRefine}function go(e,t){if(os(e)&&(t.ensureChildrenArePreprocessed(e),e.traversal.lastFrameVisited!==t.frameCount&&(e.traversal.wasInFrustum=e.traversal.inFrustum,e.traversal.wasSetActive=e.traversal.active,e.traversal.wasSetVisible=e.traversal.visible,e.traversal.usedLastFrame=e.traversal.used,e.traversal.lastFrameVisited=t.frameCount,e.traversal.used=!1,e.traversal.inFrustum=!1,e.traversal.isLeaf=!1,e.traversal.visible=!1,e.traversal.active=!1,e.traversal.error=1/0,e.traversal.distanceFromCamera=1/0,e.traversal.allChildrenReady=!1,e.traversal.allChildrenLoaded=!1,e.traversal.kicked=!1,e.traversal.allUsedChildrenProcessed=!1,t.calculateTileViewErrorWithPlugin(e,Ja),e.traversal.inFrustum=Ja.inView,e.traversal.error=Ja.error,e.traversal.distanceFromCamera=Ja.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let r=e.parent;for(;r&&r.traversal.unconditionallyRefine;)r=r.parent;r&&r.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function cc(e,t,r=!1){if(go(e,t),r?t.markTileUsed(e):es(e),Sn(e)&&vo(e)){let n=e.children;for(let i=0,o=n.length;i<o;i++)cc(n[i],t,r)}}function Qh(e,t){if(go(e,t),e.traversal.usedLastFrame&&(es(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Sn(e))&&vo(e))){let r=e.children;for(let n=0,i=r.length;n<i;n++)Qh(r[n],t)}}function es(e){e.traversal.used=!0}function Qv(e,t){return!(e.traversal.error<=t.errorTarget&&!Sn(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!vo(e))}function Jh(e,t){let{frameCount:r}=t,{children:n}=e;for(let i=0,o=n.length;i<o;i++){let a=n[i];Rr(a,r)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),Jh(a,t))}}function $h(e){return!Sn(e)&&(!e.internal.hasContent||is(e.internal.loadingState))}function Zh(e,t){if(go(e,t),!e.traversal.inFrustum)return;let r=e.parent;if(r&&r.refine==="ADD"&&e.geometricError>0&&e.traversal.error*(r.geometricError/e.geometricError)<=t.errorTarget)return;if(!Qv(e,t)){es(e);return}let n=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let c=o[a];Zh(c,t),n||(n=Rr(c,t.frameCount)),i||(i=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!i&&o.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let a=0,s=o.length;a<s;a++)cc(o[a],t,!0);return}if(es(e),e.refine==="REPLACE"&&n&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)cc(o[a],t)}function em(e,t){let r=t.frameCount;if(!Rr(e,r))return;let n=e.children,i=!1;for(let a=0,s=n.length;a<s;a++){let c=n[a];i||(i=Rr(c,r))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,c=n.length;s<c;s++)em(n[s],t);let a=!0;for(let s=0,c=n.length;s<c;s++){let l=n[s];if(Rr(l,r)){let p=!Sn(l),d=!l.internal.hasContent||is(l.internal.loadingState);p&&d||l.traversal.allChildrenLoaded||(a=!1)}}e.traversal.allChildrenLoaded=a}let o=!0;for(let a=0,s=n.length;a<s;a++){let c=n[a];Rr(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&vo(e)}function tm(e,t){if(!Rr(e,t.frameCount))return;let r=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Sn(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Sn(e)&&(e.traversal.active=!0,vo(e)&&e.internal.hasContent&&!is(e.internal.loadingState)))for(let i=0,o=r.length;i<o;i++)Qh(r[i],t);return}let n=r.length>0;for(let i=0,o=r.length;i<o;i++){let a=r[i];tm(a,t),Rr(a,t.frameCount)&&!(a.traversal.active&&$h(a))&&!a.traversal.allChildrenReady&&(n=!1)}e.traversal.allChildrenReady=n,e.refine==="REPLACE"&&!n&&e.traversal.wasSetActive&&$h(e)&&(e.traversal.active=!0,Jh(e,t))}function rm(e,t){go(e,t);let r=Rr(e,t.frameCount);if(r&&(e.internal.hasUnrenderableContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.hasRenderableContent&&e.refine==="ADD"&&(e.traversal.active=!0),(e.traversal.active||e.traversal.kicked)&&e.internal.hasContent&&(t.markTileUsed(e),e.traversal.allUsedChildrenProcessed&&t.queueTileForDownload(e),e.internal.loadingState!==4&&(e.traversal.active=!1)),t.loadAncestors&&e.internal.hasContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.virtualChildCount>0&&e.internal.hasContent&&t.markTileUsed(e),e.traversal.visible=e.internal.hasRenderableContent&&e.traversal.active&&e.traversal.inFrustum&&e.internal.loadingState===4,t.stats.used++,e.traversal.inFrustum&&t.stats.inFrustum++),r||os(e)&&e.traversal.usedLastFrame){let n=!1,i=!1;r?(n=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):go(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(n&&t.stats.active++,i&&t.stats.visible++,e.traversal.wasSetActive!==n&&t.invokeOnePlugin(a=>a.setTileActive&&a.setTileActive(e,n)),e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setTileVisible&&a.setTileVisible(e,i))):e.internal.hasRenderableContent||(i=e.traversal.isLeaf,e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setEmptyTileVisible&&a.setEmptyTileVisible(e,i))),e.traversal.visible=i,e.traversal.active=n;let o=e.children;for(let a=0,s=o.length;a<s;a++){let c=o[a];rm(c,t)}}}function Jv(e,t){Zh(e,t),em(e,t),tm(e,t),rm(e,t)}function Zv(e){let t=null;return()=>{t===null&&(t=fo.requestAnimationFrame(()=>{t=null,e()}))}}function ex(e,t=null,r=null){let n=[];for(n.push(e),n.push(null),n.push(0);n.length>0;){let i=n.pop(),o=n.pop(),a=n.pop();if(t&&t(a,o,i)){r&&r(a,o,i);return}let s=a.children;if(s)for(let c=s.length-1;c>=0;c--)n.push(s[c]),n.push(a),n.push(i+1);r&&r(a,o,i)}}var Yh=Symbol("PLUGIN_REGISTERED"),Kr={inView:!0,error:0,distance:1/0},tx=(e,t)=>{let r=e.priority||0,n=t.priority||0;return r===n?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:r>n?1:-1},rx=(e,t)=>e.traversal.used===t.traversal.used?e.traversal.inFrustum===t.traversal.inFrustum?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.internal.hasUnrenderableContent?1:-1:e.traversal.inFrustum?1:-1:e.traversal.used?1:-1,nx=(e,t)=>e.traversal.lastFrameVisited===t.traversal.lastFrameVisited?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?e.internal.loadingState===t.internal.loadingState?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.error===t.traversal.error?0:e.traversal.error>t.traversal.error?-1:1:e.internal.hasUnrenderableContent?-1:1:e.internal.loadingState>t.internal.loadingState?-1:1:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?1:-1:e.traversal.lastFrameVisited>t.traversal.lastFrameVisited?-1:1,di=(e,t)=>{let r=e.priority??1/0,n=t.priority??1/0;if(r!==n)return r>n?1:-1;if(!e.internal||!t.internal)return 0;let i=e.internal.renderer,o=t.internal.renderer,a=!i.loadAncestors,s=!o.loadAncestors;return a&&s?rx(e,t):tx(e,t)},dc=new yo;dc.unloadPriorityCallback=nx;var bo=new ns;bo.maxJobsPerOrigin=25,bo.priorityCallback=di;var ts=new vr;ts.maxJobs=5,ts.priorityCallback=di;var rs=new vr;rs.maxJobs=25,rs.priorityCallback=(e,t)=>{let r=e.parent,n=t.parent;return r===n?0:r?n?di(r,n):-1:1};var pc=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,r=e.queued+e.downloading+e.parsing,n=e.inCacheSinceLoad+ +!!t;return n===0?1:1-r/n}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof vr){console.warn('TilesRenderer: "downloadQueue" is no longer valid as a PriorityQueue. Use a DownloadPriorityQueue, instead.');return}this._downloadQueue=e}constructor(e=null){this.rootLoadingState=0,this.rootTileset=null,this.rootURL=e,this.fetchOptions={},this.plugins=[],this.queuedTiles=[],this.cachedSinceLoadComplete=new Set,this.isLoading=!1,this.processedTiles=new WeakSet,this.visibleTiles=new Set,this.activeTiles=new Set,this.usedSet=new Set,this.loadingTiles=new Set,this.lruCache=dc,this.downloadQueue=bo,this.parseQueue=ts,this.processNodeQueue=rs,this.stats={inCacheSinceLoad:0,inCache:0,queued:0,downloading:0,parsing:0,loaded:0,failed:0,inFrustum:0,used:0,active:0,visible:0,tilesProcessed:0},this.frameCount=0,this._dispatchNeedsUpdateEvent=Zv(()=>{this.dispatchEvent({type:"needs-update"})}),this.errorTarget=16,this.errorFalloff=0,this.errorFalloffDensity=2e-4,this.displayActiveTiles=!1,this.maxDepth=1/0,this.loadSiblings=!0,this.loadAncestors=!0,this.maxTilesProcessed=250}registerPlugin(e){if(e[Yh]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,r=e.priority||0,n=t.length;for(let i=0;i<t.length;i++)if((t[i].priority||0)>r){n=i;break}t.splice(n,0,e),e[Yh]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let r=t.indexOf(e);return t.splice(r,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let r=0;r<t.length;r++){let n=e(t[r]);if(n)return n}return null}invokeAllPlugins(e){let t=[...this.plugins,this],r=[];for(let n=0;n<t.length;n++){let i=e(t[n]);i&&r.push(i)}return r.length===0?null:Promise.all(r)}traverse(e,t,r=!0){this.root&&ex(this.root,(n,...i)=>(r&&this.ensureChildrenArePreprocessed(n,!0),e?e(n,...i):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:r,root:n,downloadQueue:i,parseQueue:o,processNodeQueue:a}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let p=this.rootURL;p!==null&&this.invokeAllPlugins(d=>p=d.preprocessURL?d.preprocessURL(p,null):p),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:p}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:p})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!n)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let p=l.doTilesNeedUpdate();s=s===null?p:!!(s||p)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),r.inFrustum=0,r.used=0,r.active=0,r.visible=0,r.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),Jv(n,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,p=c.length;l<p&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(i.running||o.running||a.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),r.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:r,errorFalloffDensity:n}=this;if(r>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*n;t.error-=r*(1-Math.exp(-s*s))}let i=null,o=0,a=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(Kr.inView=!0,Kr.error=0,Kr.distance=1/0,s.calculateTileViewError(e,Kr)&&(i===null&&(i=!0),i&&(i=Kr.inView),Kr.inView&&(a=Math.min(a,Kr.distance),o=Math.max(o,Kr.error))))}),t.inView&&i!==!1?(t.error=Math.max(t.error,o),t.distanceFromCamera=Math.min(t.distanceFromCamera,a)):i?(t.inView=!0,t.error=o,t.distanceFromCamera=a):t.inView=!1}dispose(){[...this.plugins].forEach(r=>{this.unregisterPlugin(r)});let e=this.lruCache,t=[];this.traverse(r=>(t.push(r),!1),null,!1);for(let r=0,n=t.length;r<n;r++)e.remove(t[r]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,r){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(r=>r.setTileVisible&&r.setTileVisible(e,!1)):this.invokeOnePlugin(r=>r.setEmptyTileVisible&&r.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(r=>r.setTileActive&&r.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,r=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=r,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let n=lc(e.content.uri),i=!!(n&&/json$/.test(n));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=i,e.internal.hasRenderableContent=!i}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;r?(e.internal.depth=r.internal.depth+1,e.internal.depthFromRenderedParent=r.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},r===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||r.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(n=>{n!==this&&n.preprocessNode&&n.preprocessNode(e,t,r)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,r=[];for(let n of t)!e.isUsed(n)&&n.internal.loadingState===1&&r.push(n);for(let n=0;n<r.length;n++)e.remove(r[n])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let r=e.children;if(r.length===0||r[r.length-1].traversal)return;let n=i=>{for(let o=0,a=i.length;o<a;o++){let s=i[o];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),n(r)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,i=>{n(i.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(r=>{r.calculateBytesUsed&&(t+=r.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:r}=this;e===null?t.itemSet.forEach(n=>{r.has(n)&&t.setMemoryUsage(n,this.getBytesUsed(n))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,r=null){let[n,i]=e.asset.version.split(".").map(a=>parseInt(a));console.assert(n<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),n===1&&i>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let o=t.replace(/\/[^/]*$/,"");o=new URL(o,window.location.href).toString(),this.preprocessNode(e.root,o,r)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,r=null,n=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(h=>n=h.preprocessURL?h.preprocessURL(n,e):n);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=lc(n),p=new AbortController,d=p.signal;if(o.add(e,h=>{p.abort(),t?h.children.length=0:this.invokeAllPlugins(m=>{m.disposeTile&&m.disposeTile(h)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),h.internal.loadingState===1?i.queued--:h.internal.loadingState===2?i.downloading--:h.internal.loadingState===3?i.parsing--:h.internal.loadingState===4&&i.loaded--,h.internal.loadingState=0,s.remove(h),a.remove(h),c.delete(h)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,c.add(e),a.add(n,e,h=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let m=this.invokeOnePlugin(f=>f.fetchData&&f.fetchData(n,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:n,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),m}).then(h=>{if(!d.aborted){if(!(h instanceof Response))return h;if(h.ok)return l==="json"?h.json():h.arrayBuffer();throw Error(`Failed to load model with error code ${h.status}`)}}).then(h=>{if(!d.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,m=>d.aborted?Promise.resolve():l==="json"&&h.root?(this.preprocessTileset(h,n,e),e.children.push(h.root),r=h,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(h,m,l,n,d)))}).then(()=>{if(d.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,c.delete(e),o.setLoaded(e,!0);let h=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&h>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,h),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:r,url:n}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:n})}).catch(h=>{d.aborted||(h.name==="AbortError"?o.remove(e):(s.remove(e),a.remove(e),e.internal.loadingState===1?i.queued--:e.internal.loadingState===2?i.downloading--:e.internal.loadingState===3?i.parsing--:e.internal.loadingState===4&&i.loaded--,i.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(h),e.internal.loadingState=-1,c.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:h,url:n})))})}};function Cn(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let r="";for(let n=0;n<4;n++)r+=String.fromCharCode(t.getUint8(n));return r}var ix=new TextDecoder;function nm(e){return ix.decode(e)}function as(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var pi=class{constructor(){this.fetchOptions={},this.workingPath=""}loadAsync(e){return fetch(e,this.fetchOptions).then(t=>{if(!t.ok)throw Error(`Failed to load file "${e}" with status ${t.status} : ${t.statusText}`);return t.arrayBuffer()}).then(t=>(this.workingPath===""&&(this.workingPath=as(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function hc(e,t,r,n,i,o){let a;switch(n){case"SCALAR":a=1;break;case"VEC2":a=2;break;case"VEC3":a=3;break;case"VEC4":a=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${o}".`)}let s,c=r*a;switch(i){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${o}".`)}return s}var xo=class{constructor(e,t,r,n){this.buffer=e,this.binOffset=t+r,this.binLength=n;let i=null;if(r!==0){let o=new Uint8Array(e,t,r);i=JSON.parse(nm(o))}else i={};this.header=i}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,r=null,n=null){let i=this.header;if(!(e in i))return null;let o=i[e];if(!(o instanceof Object)||Array.isArray(o))return o;{let{buffer:a,binOffset:s,binLength:c}=this,l=o.byteOffset||0,p=o.type||n,d=o.componentType||r;if("type"in o&&n&&o.type!==n)throw Error("FeatureTable: Specified type does not match expected type.");let h=s+l,m=hc(a,h,t,p,d,e);if(h+m.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return m}}getBuffer(e,t){let{buffer:r,binOffset:n}=this;return r.slice(n+e,n+e+t)}},ox=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let n of this.classes){let i=n.instances;for(let o in i)n.instances[o]=this._parseProperty(i[o],n.length,o)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let n=this.parentCounts.reduce((i,o)=>i+o,0);this.parentIds=this._parseProperty(t.parentIds,n,"parentIds")}else this.parentIds=null;this.instancesIds=[];let r={};for(let n of this.classIds)r[n]=r[n]??0,this.instancesIds.push(r[n]),r[n]++}_parseProperty(e,t,r){if(Array.isArray(e))return e;{let{buffer:n,binOffset:i}=this.batchTable,o=e.byteOffset,a=e.componentType||"UNSIGNED_SHORT";return hc(n,i+o,t,"SCALAR",a,r)}}getDataFromId(e,t={}){let r=this.parentCounts[e];if(this.parentIds&&r>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<r;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let n=this.classIds[e],i=this.classes[n].instances,o=this.classes[n].name,a=this.instancesIds[e];for(let s in i)t[o]=t[o]||{},t[o][s]=i[s][a];return t}},ss=class extends xo{constructor(e,t,r,n,i){super(e,r,n,i),this.count=t,this.extensions={};let o=this.header.extensions;o&&o["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new ox(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let r of this.getKeys())t[r]=super.getData(r,this.count)[e];for(let r in this.extensions){let n=this.extensions[r];n.getDataFromId instanceof Function&&(t[r]=t[r]||{},n.getDataFromId(e,t[r]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},mc=class extends pi{parse(e){let t=new DataView(e),r=Cn(t);console.assert(r==="b3dm");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new xo(e.slice(28,28+o+a),0,o,a),p=28+o+a,d=new ss(e.slice(p,p+s+c),l.getData("BATCH_LENGTH"),0,s,c),h=p+s+c;return{version:n,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,h,i-h)}}},fc=class extends pi{parse(e){let t=new DataView(e),r=Cn(t);console.assert(r==="i3dm");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),p=new xo(e.slice(32,32+o+a),0,o,a),d=32+o+a,h=new ss(e.slice(d,d+s+c),p.getData("INSTANCES_LENGTH"),0,s,c),m=d+s+c,f=new Uint8Array(e,m,i-m),b=null,P=null,C=null;if(l)b=f,P=Promise.resolve();else{let k=this.resolveExternalURL(nm(f));C=as(k),P=fetch(k,this.fetchOptions).then(y=>{if(!y.ok)throw Error(`I3DMLoaderBase : Failed to load file "${k}" with status ${y.status} : ${y.statusText}`);return y.arrayBuffer()}).then(y=>{b=new Uint8Array(y)})}return P.then(()=>({version:n,featureTable:p,batchTable:h,glbBytes:b,gltfWorkingPath:C}))}},gc=class extends pi{parse(e){let t=new DataView(e),r=Cn(t);console.assert(r==="pnts");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new xo(e.slice(28,28+o+a),0,o,a),p=28+o+a,d=new ss(e.slice(p,p+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:n,featureTable:l,batchTable:d})}},bc=class extends pi{parse(e){let t=new DataView(e),r=Cn(t);console.assert(r==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let n=t.getUint32(4,!0);console.assert(n===1,'CMPTLoader: The version listed in the header is "1".');let i=t.getUint32(8,!0);console.assert(i===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let o=t.getUint32(12,!0),a=[],s=16;for(let c=0;c<o;c++){let l=new DataView(e,s,12),p=Cn(l),d=l.getUint32(4,!0),h=l.getUint32(8,!0),m=new Uint8Array(e,s,h);a.push({type:p,buffer:m,version:d}),s+=h}return{version:n,tiles:a}}};import{Box3 as vm,BufferAttribute as _n,BufferGeometry as ax,Clock as H_,Color as sx,DefaultLoadingManager as bs,Euler as lx,EventDispatcher as ls,Frustum as cx,Group as Pc,InstancedMesh as ux,LoadingManager as dx,MathUtils as xm,Matrix3 as px,Matrix4 as lt,Mesh as W_,OrthographicCamera as X_,PerspectiveCamera as q_,Plane as hx,PlaneGeometry as $_,Points as mx,PointsMaterial as fx,Quaternion as wm,Ray as Ec,Raycaster as Y_,ShaderMaterial as K_,Sphere as Mm,Spherical as gx,TextureUtils as bx,Vector2 as Ac,Vector3 as ve}from"three";import{GLTFLoader as Rc}from"three/addons/loaders/GLTFLoader.js";import{estimateBytesUsed as yx}from"three/addons/utils/BufferGeometryUtils.js";var Lc=class extends mc{constructor(e=bs){super(),this.manager=e,this.adjustmentTransform=new lt}parse(e){let t=super.parse(e),r=t.glbBytes.slice().buffer;return new Promise((n,i)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new Rc(o);a.credentials==="include"&&a.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in a&&s.setWithCredentials(a.credentials==="include"),a.headers&&s.setRequestHeader(a.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(r,c,p=>{let{batchTable:d,featureTable:h}=t,{scene:m}=p,f=h.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(m.position.x+=f[0],m.position.y+=f[1],m.position.z+=f[2]),p.scene.updateMatrix(),p.scene.matrix.multiply(l),p.scene.matrix.decompose(p.scene.position,p.scene.quaternion,p.scene.scale),p.batchTable=d,p.featureTable=h,m.batchTable=d,m.featureTable=h,n(p)},i)})}};function vx(e){let t=e>>11,r=e>>5&63,n=e&31;return[Math.round(t/31*255),Math.round(r/63*255),Math.round(n/31*255)]}var wo=new Ac;function xx(e,t,r=new ve){wo.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),r.set(wo.x,wo.y,1-Math.abs(wo.x)-Math.abs(wo.y));let n=xm.clamp(-r.z,0,1);return r.x>=0?r.setX(r.x-n):r.setX(r.x+n),r.y>=0?r.setY(r.y-n):r.setY(r.y+n),r.normalize(),r}var im={RGB:"color",POSITION:"position"},kc=class extends gc{constructor(e=bs){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:r,batchTable:n}=t,i=new fx,o=r.header.extensions,a=new ve,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:p,byteLength:d,properties:h}=o["3DTILES_draco_point_compression"],m=this.manager.getHandler("draco.drc");if(m==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let C in h)if(C in im&&C in h){let k=im[C];f[k]=h[C]}let b={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},P=r.getBuffer(p,d);s=await m.decodeGeometry(P,b),s.attributes.color&&(i.vertexColors=!0)}else{let p=r.getData("POINTS_LENGTH"),d=r.getData("POSITION",p,"FLOAT","VEC3"),h=r.getData("NORMAL",p,"FLOAT","VEC3"),m=r.getData("NORMAL",p,"UNSIGNED_BYTE","VEC2"),f=r.getData("RGB",p,"UNSIGNED_BYTE","VEC3"),b=r.getData("RGBA",p,"UNSIGNED_BYTE","VEC4"),P=r.getData("RGB565",p,"UNSIGNED_SHORT","SCALAR"),C=r.getData("CONSTANT_RGBA",p,"UNSIGNED_BYTE","VEC4"),k=r.getData("POSITION_QUANTIZED",p,"UNSIGNED_SHORT","VEC3"),y=r.getData("QUANTIZED_VOLUME_SCALE",p,"FLOAT","VEC3"),j=r.getData("QUANTIZED_VOLUME_OFFSET",p,"FLOAT","VEC3");if(s=new ax,k){let L=new Float32Array(p*3);for(let w=0;w<p;w++)for(let I=0;I<3;I++){let U=3*w+I;L[U]=k[U]/65535*y[I]}a.x=j[0],a.y=j[1],a.z=j[2],s.setAttribute("position",new _n(L,3,!1))}else s.setAttribute("position",new _n(d,3,!1));if(h!==null)s.setAttribute("normal",new _n(h,3,!1));else if(m!==null){let L=new Float32Array(p*3),w=new ve;for(let I=0;I<p;I++){let U=m[I*2],_=m[I*2+1],S=xx(U,_,w);L[I*3]=S.x,L[I*3+1]=S.y,L[I*3+2]=S.z}s.setAttribute("normal",new _n(L,3,!1))}if(b!==null)s.setAttribute("color",new _n(b,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(f!==null)s.setAttribute("color",new _n(f,3,!0)),i.vertexColors=!0;else if(P!==null){let L=new Uint8Array(p*3);for(let w=0;w<p;w++){let I=vx(P[w]);for(let U=0;U<3;U++){let _=3*w+U;L[_]=I[U]}}s.setAttribute("color",new _n(L,3,!0)),i.vertexColors=!0}else if(C!==null){i.color=new sx(C[0],C[1],C[2]);let L=C[3]/255;L<1&&(i.opacity=L,i.transparent=!0,i.depthWrite=!1)}}let c=new mx(s,i);c.position.copy(a),t.scene=c,t.scene.featureTable=r,t.scene.batchTable=n;let l=r.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function wx(e){let{x:t,y:r,z:n}=e;e.x=n,e.y=t,e.z=r}function Mx(e){return-e+Math.PI/2}var om=new gx,Qr=new ve,Pt=new ve,yc=new ve,Kt=new lt,xr=new lt,vc=new Mm,Dt=new lx,am=new ve,sm=new ve,lm=new ve,Mo=new ve,cs=new Ec,Sx=1e-12,Cx=.1;var Dc=class{constructor(e=1,t=1,r=1){this.name="",this.radius=new ve(e,t,r)}intersectRay(e,t){return Kt.makeScale(...this.radius).invert(),vc.center.set(0,0,0),vc.radius=1,cs.copy(e).applyMatrix4(Kt),cs.intersectSphere(vc,t)?(Kt.makeScale(...this.radius),t.applyMatrix4(Kt),t):null}getEastNorthUpFrame(e,t,r,n){return r.isMatrix4&&(n=r,r=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,am,sm,lm),this.getCartographicToPosition(e,t,r,Mo),n.makeBasis(am,sm,lm).setPosition(Mo)}getOrientedEastNorthUpFrame(e,t,r,n,i,o,a){return this.getObjectFrame(e,t,r,n,i,o,a,0)}getObjectFrame(e,t,r,n,i,o,a,s=2){return this.getEastNorthUpFrame(e,t,r,Kt),Dt.set(i,o,-n,"ZXY"),a.makeRotationFromEuler(Dt).premultiply(Kt),s===1?(Dt.set(Math.PI/2,0,0,"XYZ"),xr.makeRotationFromEuler(Dt),a.multiply(xr)):s===2&&(Dt.set(-Math.PI/2,0,Math.PI,"XYZ"),xr.makeRotationFromEuler(Dt),a.multiply(xr)),a}getCartographicFromObjectFrame(e,t,r=2){return r===1?(Dt.set(-Math.PI/2,0,0,"XYZ"),xr.makeRotationFromEuler(Dt).premultiply(e)):r===2?(Dt.set(-Math.PI/2,0,Math.PI,"XYZ"),xr.makeRotationFromEuler(Dt).premultiply(e)):xr.copy(e),Mo.setFromMatrixPosition(xr),this.getPositionToCartographic(Mo,t),this.getEastNorthUpFrame(t.lat,t.lon,0,Kt).invert(),xr.premultiply(Kt),Dt.setFromRotationMatrix(xr,"ZXY"),t.azimuth=-Dt.z,t.elevation=Dt.x,t.roll=Dt.y,t}getEastNorthUpAxes(e,t,r,n,i,o=Mo){this.getCartographicToPosition(e,t,0,o),this.getCartographicToNormal(e,t,i),r.set(-o.y,o.x,0).normalize(),n.crossVectors(i,r).normalize()}getCartographicToPosition(e,t,r,n){this.getCartographicToNormal(e,t,Qr);let i=this.radius;Pt.copy(Qr),Pt.x*=i.x**2,Pt.y*=i.y**2,Pt.z*=i.z**2;let o=Math.sqrt(Qr.dot(Pt));return Pt.divideScalar(o),n.copy(Pt).addScaledVector(Qr,r)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,Pt),this.getPositionToNormal(Pt,Qr);let r=yc.subVectors(e,Pt);return t.lon=Math.atan2(Qr.y,Qr.x),t.lat=Math.asin(Qr.z),t.height=Math.sign(r.dot(e))*r.length(),t}getCartographicToNormal(e,t,r){return om.set(1,Mx(e),t),r.setFromSpherical(om).normalize(),wx(r),r}getPositionToNormal(e,t){let r=this.radius;return t.copy(e),t.x/=r.x**2,t.y/=r.y**2,t.z/=r.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let r=this.radius,n=1/r.x**2,i=1/r.y**2,o=1/r.z**2,a=e.x*e.x*n,s=e.y*e.y*i,c=e.z*e.z*o,l=a+s+c,p=Math.sqrt(1/l),d=Pt.copy(e).multiplyScalar(p);if(l<Cx)return isFinite(p)?t.copy(d):null;let h=yc.set(d.x*n*2,d.y*i*2,d.z*o*2),m=(1-p)*e.length()/(.5*h.length()),f=0,b,P,C,k,y,j,L,w,I,U,_;do{m-=f,C=1/(1+m*n),k=1/(1+m*i),y=1/(1+m*o),j=C*C,L=k*k,w=y*y,I=j*C,U=L*k,_=w*y,b=a*j+s*L+c*w-1,P=a*I*n+s*U*i+c*_*o;let S=-2*P;f=b/S}while(Math.abs(b)>Sx);return t.set(e.x*C,e.y*k,e.z*y)}calculateHorizonDistance(e,t){let r=this.calculateEffectiveRadius(e);return Math.sqrt(2*r*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,r=1-this.radius.z**2/t**2,n=e*xm.DEG2RAD,i=Math.sin(n)**2;return t/Math.sqrt(1-r*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,Pt);let t=yc.subVectors(e,Pt);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(Kt.makeScale(...this.radius).invert(),cs.copy(e).applyMatrix4(Kt),Pt.set(0,0,0),cs.closestPointToPoint(Pt,t).normalize(),Kt.makeScale(...this.radius),t.applyMatrix4(Kt))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Po=new Dc(Tn,Tn,uc);Po.name="WGS84 Earth";var us=new ve,hi=new ve,mi=new ve,xc=new ve,ds=new wm,ps=new ve,fi=new lt,cm=new lt,um=new ve,dm=new lt,wc=new wm,Mc={};function pm(e,t,r,n){if(e=e/r*2-1,t=t/r*2-1,n.x=e,n.y=t,n.z=1-Math.abs(e)-Math.abs(t),n.z<0){let i=n.x;n.x=(1-Math.abs(n.y))*(i>=0?1:-1),n.y=(1-Math.abs(i))*(n.y>=0?1:-1)}return n.normalize(),n}var Oc=class extends fc{constructor(e=bs){super(),this.manager=e,this.adjustmentTransform=new lt,this.ellipsoid=Po.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:r,batchTable:n}=t,i=t.glbBytes.slice().buffer;return new Promise((o,a)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new Rc(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let p=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(p)||(p+="/");let d=this.adjustmentTransform;l.parse(i,p,h=>{let m=r.getData("INSTANCES_LENGTH"),f=r.getData("POSITION",m,"FLOAT","VEC3"),b=r.getData("POSITION_QUANTIZED",m,"UNSIGNED_SHORT","VEC3"),P=r.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),C=r.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),k=r.getData("NORMAL_UP",m,"FLOAT","VEC3"),y=r.getData("NORMAL_RIGHT",m,"FLOAT","VEC3"),j=r.getData("NORMAL_UP_OCT32P",m,"UNSIGNED_SHORT","VEC2"),L=r.getData("NORMAL_RIGHT_OCT32P",m,"UNSIGNED_SHORT","VEC2"),w=r.getData("SCALE_NON_UNIFORM",m,"FLOAT","VEC3"),I=r.getData("SCALE",m,"FLOAT","SCALAR"),U=r.getData("RTC_CENTER",1,"FLOAT","VEC3"),_=r.getData("EAST_NORTH_UP");if(!f&&b){f=new Float32Array(m*3);for(let v=0;v<m;v++)f[v*3+0]=P[0]+b[v*3+0]/65535*C[0],f[v*3+1]=P[1]+b[v*3+1]/65535*C[1],f[v*3+2]=P[2]+b[v*3+2]/65535*C[2]}let S=new ve;for(let v=0;v<m;v++)S.x+=f[v*3+0]/m,S.y+=f[v*3+1]/m,S.z+=f[v*3+2]/m;let A=[],G=[];h.scene.updateMatrixWorld(),h.scene.traverse(v=>{if(v.isMesh){G.push(v);let{geometry:z,material:M}=v,O=new ux(z,M,m);O.position.copy(S),U&&(O.position.x+=U[0],O.position.y+=U[1],O.position.z+=U[2]),A.push(O)}});for(let v=0;v<m;v++){xc.set(f[v*3+0]-S.x,f[v*3+1]-S.y,f[v*3+2]-S.z),ds.identity(),k&&y?(hi.set(k[v*3+0],k[v*3+1],k[v*3+2]),mi.set(y[v*3+0],y[v*3+1],y[v*3+2]),us.crossVectors(mi,hi).normalize(),fi.makeBasis(mi,hi,us),ds.setFromRotationMatrix(fi)):j&&L&&(pm(j[v*2+0],j[v*2+1],65535,hi),pm(L[v*2+0],L[v*2+1],65535,mi),us.crossVectors(mi,hi).normalize(),fi.makeBasis(mi,hi,us),ds.setFromRotationMatrix(fi)),ps.set(1,1,1),w&&ps.set(w[v*3+0],w[v*3+1],w[v*3+2]),I&&ps.multiplyScalar(I[v]);for(let z=0,M=A.length;z<M;z++){let O=A[z];wc.copy(ds),_&&(O.updateMatrixWorld(),um.copy(xc).applyMatrix4(O.matrixWorld),this.ellipsoid.getPositionToCartographic(um,Mc),this.ellipsoid.getEastNorthUpFrame(Mc.lat,Mc.lon,dm),wc.setFromRotationMatrix(dm)),fi.compose(xc,wc,ps).multiply(d);let N=G[z];cm.multiplyMatrices(fi,N.matrixWorld),O.setMatrixAt(v,cm)}}h.scene.clear(),h.scene.add(...A),h.batchTable=n,h.featureTable=r,h.scene.batchTable=n,h.scene.featureTable=r,o(h)},a)})})}},Sm=class extends bc{constructor(e=bs){super(),this.manager=e,this.adjustmentTransform=new lt,this.ellipsoid=Po.clone()}parse(e){let t=super.parse(e),{manager:r,ellipsoid:n,adjustmentTransform:i}=this,o=[];for(let a in t.tiles){let{type:s,buffer:c}=t.tiles[a];switch(s){case"b3dm":{let l=c.slice(),p=new Lc(r);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions,p.adjustmentTransform.copy(i);let d=p.parse(l.buffer);o.push(d);break}case"pnts":{let l=c.slice(),p=new kc(r);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions;let d=p.parse(l.buffer);o.push(d);break}case"i3dm":{let l=c.slice(),p=new Oc(r);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions,p.ellipsoid.copy(n),p.adjustmentTransform.copy(i);let d=p.parse(l.buffer);o.push(d);break}}}return Promise.all(o).then(a=>{let s=new Pc;return a.forEach(c=>{s.add(c.scene)}),{tiles:a,scene:s}})}},So=new lt,Tx=class extends Pc{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new lt}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?So.copy(this.matrix):So.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=So.elements,r=this.matrixWorld.elements,n=!1;for(let i=0;i<16;i++){let o=t[i],a=r[i];if(Math.abs(o-a)>2**-52){n=!0;break}}if(n){this.matrixWorld.copy(So),this.matrixWorldInverse.copy(So).invert();let i=this.children;for(let c=0,l=i.length;c<l;c++)i[c].updateMatrixWorld();let{tilesRenderer:o}=this,{activeTiles:a,visibleTiles:s}=o;a.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},_x=new Ec;function Px(e,t,r,n){let{scene:i}=e.engineData;r.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(e,i,t,n))||t.intersectObject(i,!0,n)}function Ex(e){return"traversal"in e}function Cm(e,t,r,n,i=null){if(!Ex(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=_x,i.copy(r.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&Px(t,r,e,n);let c=t.children;for(let l=0,p=c.length;l<p;l++)Cm(e,c[l],r,n,i)}var hs=new ve,ms=new ve,Ot=new ve,fs=new Ec,Tc=class{constructor(e=new vm,t=new lt){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new lt,this.points=Array(8).fill().map(()=>new ve),this.planes=[,,,,,,].fill().map(()=>new hx)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,Ot).distanceTo(e)}containsPoint(e){return Ot.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Ot)}intersectsRay(e){return fs.copy(e).applyMatrix4(this.inverseTransform),fs.intersectsBox(this.box)}intersectRay(e,t){return fs.copy(e).applyMatrix4(this.inverseTransform),fs.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:r,box:n}=this;t.copy(r).invert();let{min:i,max:o}=n,a=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[a].set(s<0?i.x:o.x,c<0?i.y:o.y,l<0?i.z:o.z).applyMatrix4(r),a++;this.updatePlanes()}updatePlanes(){hs.copy(this.box.min).applyMatrix4(this.transform),ms.copy(this.box.max).applyMatrix4(this.transform),Ot.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Ot,hs),this.planes[1].setFromNormalAndCoplanarPoint(Ot,ms).negate(),Ot.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Ot,hs),this.planes[3].setFromNormalAndCoplanarPoint(Ot,ms).negate(),Ot.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Ot,hs),this.planes[5].setFromNormalAndCoplanarPoint(Ot,ms).negate()}intersectsSphere(e){return this.clampPoint(e.center,Ot),Ot.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let r=this.points,n=this.planes;for(let i=0;i<6;i++){let o=e[i],a=-1/0;for(let s=0;s<8;s++){let c=r[s],l=o.distanceToPoint(c);a=a<l?l:a}if(a<0)return!1}for(let i=0;i<6;i++){let o=n[i],a=-1/0;for(let s=0;s<8;s++){let c=t[s],l=o.distanceToPoint(c);a=a<l?l:a}if(a<0)return!1}return!0}},_o=Math.PI,Sc=_o/2,Co=new ve,Pn=new ve,or=new ve,ae=new ve,Et=new lt,Ax=new vm,hm=new lt;function Jr(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function mm(e){return e.x!==e.y}var Tm=class extends Dc{constructor(e=1,t=1,r=1,n=-Sc,i=Sc,o=0,a=2*_o,s=0,c=0){super(e,t,r),this.latStart=n,this.latEnd=i,this.lonStart=o,this.lonEnd=a,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){mm(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:r,latEnd:n,lonStart:i,lonEnd:o,heightStart:a,heightEnd:s}=this,c=(r+n)*.5,l=(i+o)*.5,p=r>0,d=n<0,h;h=p?r:d?n:0;let{min:m,max:f}=e;m.setScalar(1/0),f.setScalar(-1/0),o-i<=_o?(this.getCartographicToNormal(c,l,or),Pn.set(0,0,1),Co.crossVectors(Pn,or).normalize(),Pn.crossVectors(or,Co).normalize(),t.makeBasis(Co,Pn,or),Et.copy(t).invert(),this.getCartographicToPosition(h,i,s,ae).applyMatrix4(Et),f.x=Math.abs(ae.x),m.x=-f.x,this.getCartographicToPosition(n,i,s,ae).applyMatrix4(Et),f.y=ae.y,this.getCartographicToPosition(n,l,s,ae).applyMatrix4(Et),f.y=Math.max(ae.y,f.y),this.getCartographicToPosition(r,i,s,ae).applyMatrix4(Et),m.y=ae.y,this.getCartographicToPosition(r,l,s,ae).applyMatrix4(Et),m.y=Math.min(ae.y,m.y),this.getCartographicToPosition(c,l,s,ae).applyMatrix4(Et),f.z=ae.z,this.getCartographicToPosition(r,i,a,ae).applyMatrix4(Et),m.z=ae.z,this.getCartographicToPosition(n,i,a,ae).applyMatrix4(Et),m.z=Math.min(ae.z,m.z)):(this.getCartographicToPosition(h,l,s,or),or.z=0,or.length()<1e-10?or.set(1,0,0):or.normalize(),Pn.set(0,0,1),Co.crossVectors(or,Pn).normalize(),t.makeBasis(Co,Pn,or),Et.copy(t).invert(),this.getCartographicToPosition(h,l+Sc,s,ae).applyMatrix4(Et),f.x=Math.abs(ae.x),m.x=-f.x,this.getCartographicToPosition(n,0,d?a:s,ae).applyMatrix4(Et),f.y=ae.y,this.getCartographicToPosition(r,0,p?a:s,ae).applyMatrix4(Et),m.y=ae.y,this.getCartographicToPosition(h,l,s,ae).applyMatrix4(Et),f.z=ae.z,this.getCartographicToPosition(h,o,s,ae).applyMatrix4(Et),m.z=ae.z),e.getCenter(ae),e.min.sub(ae).multiplyScalar(1.0000000000001),e.max.sub(ae).multiplyScalar(1.0000000000001),ae.applyMatrix4(t),t.setPosition(ae)}getBoundingSphere(e){mm(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(Ax,hm),e.center.setFromMatrixPosition(hm),e.radius=0;let{latStart:t,latEnd:r,lonStart:n,lonEnd:i,heightStart:o,heightEnd:a}=this,s=(t+r)*.5,c=(n+i)*.5,l=t>0,p=r<0,d;d=l?t:p?r:0,this.getCartographicToPosition(d,n,a,ae),Jr(ae,e),this.getCartographicToPosition(r,n,a,ae),Jr(ae,e),this.getCartographicToPosition(r,c,a,ae),Jr(ae,e),this.getCartographicToPosition(t,n,a,ae),Jr(ae,e),this.getCartographicToPosition(t,c,a,ae),Jr(ae,e),this.getCartographicToPosition(s,c,a,ae),Jr(ae,e),this.getCartographicToPosition(t,n,o,ae),Jr(ae,e),i-n>_o&&(this.getCartographicToPosition(d,c+_o,a,ae),Jr(ae,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},Lr=new ve,kr=new ve,Dr=new ve,fm=new ve,gm=new ve,Rx=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,r=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||r&&!r.intersectsRay(e))}intersectRay(e,t=null){let r=this.sphere,n=this.obb||this.regionObb,i=-1/0,o=-1/0;r&&e.intersectSphere(r,fm)&&(i=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(fm)),n&&n.intersectRay(e,gm)&&(o=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(gm));let a=Math.max(i,o);return a===-1/0?null:(e.at(Math.sqrt(a),t),t)}distanceToPoint(e){let t=this.sphere,r=this.obb||this.regionObb,n=-1/0,i=-1/0;return t&&(n=Math.max(t.distanceToPoint(e),0)),r&&(i=r.distanceToPoint(e)),n>i?n:i}intersectsFrustum(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!e.intersectsSphere(r)||t&&!t.intersectsFrustum(e)?!1:!!(r||t)}intersectsSphere(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!r.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(r||t)}intersectsOBB(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!e.intersectsSphere(r)||t&&!t.intersectsOBB(e)?!1:!!(r||t)}getOBB(e,t){let r=this.obb||this.regionObb;r?(e.copy(r.box),t.copy(r.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let r=new Tc;Lr.set(e[3],e[4],e[5]),kr.set(e[6],e[7],e[8]),Dr.set(e[9],e[10],e[11]);let n=Lr.length(),i=kr.length(),o=Dr.length();Lr.normalize(),kr.normalize(),Dr.normalize(),n===0&&Lr.crossVectors(kr,Dr),i===0&&kr.crossVectors(Lr,Dr),o===0&&Dr.crossVectors(Lr,kr),r.transform.set(Lr.x,kr.x,Dr.x,e[0],Lr.y,kr.y,Dr.y,e[1],Lr.z,kr.z,Dr.z,e[2],0,0,0,1).premultiply(t),r.box.min.set(-n,-i,-o),r.box.max.set(n,i,o),r.update(),this.obb=r}setSphereData(e,t,r,n,i){let o=new Mm;o.center.set(e,t,r),o.radius=n,o.applyMatrix4(i),this.sphere=o}setRegionData(e,t,r,n,i,o,a){let s=new Tm(...e.radius,r,i,t,n,o,a),c=new Tc;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},Lx=new px;function kx(e,t,r,n){let i=Lx.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,r.normal.x,r.normal.y,r.normal.z);return n.set(-e.constant,-t.constant,-r.constant),n.applyMatrix3(i.invert()),n}var Dx=class extends cx{constructor(){super(),this.points=Array(8).fill().map(()=>new ve)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((r,n)=>{kx(r[0],r[1],r[2],t[n])})}};var _c=0;function bm(e,t,r,n){try{return bx.getByteLength(e,t,r,n)}catch{return _c}}function Ox(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??_c;let{format:t,type:r,image:n,mipmaps:i}=e;if(e.isCompressedTexture&&Array.isArray(i)&&i.length>0){let a=0;for(let s of i)s?.data?.byteLength?a+=s.data.byteLength:a+=bm(s.width,s.height,t,r);return a}if(!n)return _c;let o=bm(n.width,n.height,t,r);return o*=e.generateMipmaps?4/3:1,o}function Ix(e){let t=new Set,r=0;return e.traverse(n=>{if(n.geometry&&!t.has(n.geometry)&&(r+=yx(n.geometry),t.add(n.geometry)),n.material){let i=n.material;for(let o in i){let a=i[o];a&&a.isTexture&&!t.has(a)&&(r+=Ox(a),t.add(a))}}}),r}var _m=Symbol("INITIAL_FRUSTUM_CULLED"),gs=new lt,To=new ve,Cc=new Ac,Bx=new ve(1,0,0),zx=new ve(0,1,0),Nx=()=>null;function ym(e,t){e.traverse(r=>{r.frustumCulled=r[_m]&&t})}var Ic=class extends pc{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{ym(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new Tx(this),this.ellipsoid=Po.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new lt,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new dx,this._listeners={}}addEventListener(e,t){ls.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return ls.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){ls.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){ls.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let r=this.root.engineData.boundingVolume;return r?(r.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let r=t.engineData&&t.engineData.scene;r&&e(r,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)Cm(this,this.root,e,t);else{let r=e.firstHitOnly?[]:t;for(let n of this.activeTiles){let{scene:i}=n.engineData;this.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(n,i,e,r))||e.intersectObject(i,!0,r)}e.firstHitOnly&&r.length>0&&(r.sort((n,i)=>n.distance-i.distance),t.push(r[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,r=this.cameraMap;return r.has(e)?!1:(r.set(e,new Ac),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,r){let n=this.cameraMap;if(!n.has(e))return!1;let i=t.isVector2?t.x:t,o=t.isVector2?t.y:r,a=n.get(e);return(a.width!==i||a.height!==o)&&(a.set(i,o),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let r=this.cameraMap.get(e);return r?t.copy(r):null}setResolutionFromRenderer(e,t){return t.getSize(Cc),this.setResolution(e,Cc.x,Cc.y)}deleteCamera(e){let t=this.cameras,r=this.cameraMap;if(r.has(e)){let n=t.indexOf(e);return t.splice(n,1),r.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:r,extensions:n={}}=t;switch((r&&r.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(zx,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(Bx,Math.PI/2);break}if("3DTILES_ellipsoid"in n){let i=n["3DTILES_ellipsoid"],{ellipsoid:o}=this;o.name=i.body,i.radii?o.radius.set(...i.radii):o.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,r=this.cameraMap,n=this.cameraInfo;for(;n.length>t.length;)n.pop();for(;n.length<t.length;)n.push({frustum:new Dx,isOrthographic:!1,sseDenominator:-1,position:new ve,invScale:-1,pixelSize:0});To.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(To.x-To.y,To.x-To.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let i=0,o=n.length;i<o;i++){let a=t[i],s=n[i],c=s.frustum,l=s.position,p=r.get(a);(p.width===0||p.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=a.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let h=2/d[0],m=2/d[5];s.pixelSize=Math.max(m/p.height,h/p.width)}else s.sseDenominator=2/d[5]/p.height;gs.copy(e.matrixWorld),gs.premultiply(a.matrixWorldInverse),gs.premultiply(a.projectionMatrix),c.setFromProjectionMatrix(gs,a.coordinateSystem,a.reversedDepth),l.set(0,0,0),l.applyMatrix4(a.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,r=null){super.preprocessNode(e,t,r);let n=new lt;if(e.transform){let a=e.transform;for(let s=0;s<16;s++)n.elements[s]=a[s]}r&&n.premultiply(r.engineData.transform);let i=new lt().copy(n).invert(),o=new Rx;"sphere"in e.boundingVolume&&o.setSphereData(...e.boundingVolume.sphere,n),"box"in e.boundingVolume&&o.setObbData(e.boundingVolume.box,n),"region"in e.boundingVolume&&o.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=n,e.engineData.transformInverse=i,e.engineData.boundingVolume=o,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=Nx}async parseTile(e,t,r,n,i){let o=t.engineData,a=as(n),s=this.fetchOptions,c=this.manager,l=null,p=o.transform,d=this._upRotationMatrix,h=(Cn(e)||r).toLowerCase();switch(h){case"b3dm":{let y=new Lc(c);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(d),l=y.parse(e);break}case"pnts":{let y=new kc(c);y.workingPath=a,y.fetchOptions=s,l=y.parse(e);break}case"i3dm":{let y=new Oc(c);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(d),y.ellipsoid.copy(this.ellipsoid),l=y.parse(e);break}case"cmpt":{let y=new Sm(c);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(d),y.ellipsoid.copy(this.ellipsoid),l=y.parse(e).then(j=>j.scene);break}case"gltf":case"glb":{let y=c.getHandler("path.gltf")||c.getHandler("path.glb")||new Rc(c);y.setWithCredentials(s.credentials==="include"),y.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&y.setCrossOrigin("use-credentials");let j=y.resourcePath||y.path||a;!/[\\/]$/.test(j)&&j.length&&(j+="/"),l=y.parseAsync(e,j).then(L=>{L.scene=L.scene||new Pc;let{scene:w}=L;return w.updateMatrix(),w.matrix.multiply(d).decompose(w.position,w.quaternion,w.scale),L});break}default:l=this.invokeOnePlugin(y=>y.parseToMesh&&y.parseToMesh(e,t,r,n,i));break}let m=await l;if(m===null)throw Error(`TilesRenderer: Content type "${h}" not supported.`);let f,b;m.isObject3D?(f=m,b=null):(f=m.scene,b=m),f.updateMatrix(),f.matrix.premultiply(p),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(y=>y.processTileModel&&y.processTileModel(f,t)),f.traverse(y=>{y[_m]=y.frustumCulled,y.userData.tile=t}),ym(f,!this.autoDisableRendererCulling);let P=[],C=[],k=[];if(f.traverse(y=>{if(y.geometry&&C.push(y.geometry),y.material){let j=y.material;P.push(y.material);for(let L in j){let w=j[L];w&&w.isTexture&&k.push(w)}}}),i.aborted){for(let y=0,j=k.length;y<j;y++){let L=k[y];L.image instanceof ImageBitmap&&L.image.close(),L.dispose()}return}o.materials=P,o.geometry=C,o.textures=k,o.scene=f,o.metadata=b}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let r=t.materials,n=t.geometry,i=t.textures,o=t.scene.parent;t.scene.traverse(a=>{a.userData.meshFeatures&&a.userData.meshFeatures.dispose(),a.userData.structuralMetadata&&a.userData.structuralMetadata.dispose()});for(let a=0,s=n.length;a<s;a++)n[a].dispose();for(let a=0,s=r.length;a<s;a++)r[a].dispose();for(let a=0,s=i.length;a<s;a++){let c=i[a];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}o&&o.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let r=e.engineData.scene;r&&(t?(r.parent=this.group,r.updateMatrixWorld(!0)):r.parent=null)}setTileVisible(e,t){let r=e.engineData.scene,{activeTiles:n,group:i}=this;r&&(t?i.add(r):(i.remove(r),n.has(e)&&(r.parent=i))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let r=this._bytesUsed;return!r.has(e)&&t&&r.set(e,Ix(t)),r.get(e)??null}calculateTileViewError(e,t){let r=e.engineData,n=this.cameras,i=this.cameraInfo,o=r.boundingVolume,a=!1,s=0,c=1/0,l=0,p=1/0;for(let d=0,h=n.length;d<h;d++){let m=i[d],f,b;if(m.isOrthographic){let C=m.pixelSize;f=e.geometricError/C,b=1/0}else{let C=m.sseDenominator;b=o.distanceToPoint(m.position),f=b===0?1/0:e.geometricError/(b*C)}let P=i[d].frustum;o.intersectsFrustum(P)&&(a=!0,s=Math.max(s,f),c=Math.min(c,b)),l=Math.max(l,f),p=Math.min(p,b)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=p)}dispose(){super.dispose(),this.group.removeFromParent()}};import{BatchedMesh as OP,Box2 as jx,Box3 as IP,Box3Helper as BP,BoxGeometry as zP,BufferAttribute as Nc,BufferGeometry as NP,CanvasTexture as jP,Color as UP,CustomBlending as Ux,DataTexture as Fx,DefaultLoadingManager as FP,DoubleSide as VP,EventDispatcher as GP,FileLoader as Vx,FloatType as HP,Frustum as WP,GreaterDepth as XP,Group as qP,LineBasicMaterial as $P,LineSegments as YP,LinearFilter as Gx,LinearMipMapLinearFilter as KP,MathUtils as jc,Matrix2 as Hx,Matrix3 as Wx,Matrix4 as Xx,Mesh as QP,MeshBasicMaterial as qx,MeshLambertMaterial as JP,MeshStandardMaterial as ZP,OneFactor as $x,PlaneGeometry as eE,Points as tE,PointsMaterial as rE,Quaternion as nE,REVISION as iE,RGFormat as oE,Ray as aE,Raycaster as sE,RedFormat as lE,SRGBColorSpace as cE,ShaderMaterial as Yx,Source as uE,Sphere as dE,SphereGeometry as pE,Texture as hE,TextureUtils as mE,Triangle as fE,UnsignedByteType as gE,Vector2 as ar,Vector3 as Vm,Vector4 as Kx,WebGLArrayRenderTarget as bE,WebGLRenderTarget as Pm,WebGLRenderer as Qx,ZeroFactor as Jx}from"three";import{GLTFLoader as Zx}from"three/addons/loaders/GLTFLoader.js";import{FullScreenQuad as Gm}from"three/addons/postprocessing/Pass.js";var xE=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Em=new vr;Em.maxJobs=10,Em.priorityCallback=(e,t)=>{let r=e.tile,n=t.tile,i=r.internal.renderer,o=n.internal.renderer,a=i.visibleTiles.has(r);return a===o.visibleTiles.has(n)?di(r,n):a?1:-1};var Am=new Vm;function Eo(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let r=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,n=new Nc(new t(e.count*e.itemSize),e.itemSize,!0),i=e.itemSize,o=e.count;for(let a=0;a<o;a++)for(let s=0;s<i;s++){let c=jc.clamp(e.getComponent(a,s),r,1);n.setComponent(a,s,c)}return n}function ew(e,t=Int16Array){let r=e.geometry,n=r.attributes,i=n.position;if(i.isInterleavedBufferAttribute||i.array instanceof t)return i;let o=new Nc(new t(i.count*i.itemSize),i.itemSize,!1),a=i.itemSize,s=i.count;r.computeBoundingBox();let c=r.boundingBox,{min:l,max:p}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,h=-d;for(let m=0;m<s;m++)for(let f=0;f<a;f++){let b=f===0?"x":f===1?"y":"z",P=l[b],C=p[b],k=jc.mapLinear(i.getComponent(m,f),P,C,h,d);o.setComponent(m,f,k)}c.getCenter(Am).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Am),e.scale.x*=.5*(p.x-l.x)/d,e.scale.y*=.5*(p.y-l.y)/d,e.scale.z*=.5*(p.z-l.z)/d,n.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var Uc=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:r,disableMipmaps:n,compressIndex:i,compressUvs:o,compressNormals:a,compressPosition:s,uvType:c,normalType:l,positionType:p}=this._options;e.traverse(d=>{if(d.material&&n){let h=d.material;for(let m in h){let f=h[m];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=Gx)}}if(d.geometry){let h=d.geometry,m=h.attributes;if(o){let{uv:f,uv1:b,uv2:P,uv3:C}=m;f&&(m.uv=Eo(f,c)),b&&(m.uv1=Eo(b,c)),P&&(m.uv2=Eo(P,c)),C&&(m.uv3=Eo(C,c))}if(r&&!m.normals&&h.computeVertexNormals(),a&&m.normals&&(m.normals=Eo(m.normals,l)),s&&ew(d,p),i&&h.index){let f=m.position.count,b=h.index,P=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(b.array instanceof P)){let C=new P(h.index.count);C.set(b.array);let k=new Nc(C,1);h.setIndex(k)}}}})}};function ct(e,t,r){return e&&t in e?e[t]:r}function Hm(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function tw(e){return/^FLOAT/.test(e)}function ko(e){return/^VEC/.test(e)}function Do(e){return/^MAT/.test(e)}function Wm(e,t,r,n=null){return Do(r)||ko(r)?n.fromArray(e,t):e[t]}function Bc(e){let{type:t,componentType:r}=e;switch(t){case"SCALAR":return r==="INT64"?0n:0;case"VEC2":return new ar;case"VEC3":return new Vm;case"VEC4":return new Kx;case"MAT2":return new Hx;case"MAT3":return new Wx;case"MAT4":return new Xx;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function Rm(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function Lo(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function rw(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let r=0,n=t.length;r<n;r++)t[r]=ys(e,t[r])}else t=ys(e,t);return t}function ys(e,t=null){let r=e.default,n=e.type;if(t||(t=Bc(e)),r===null){switch(n){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(Do(n))t.fromArray(r);else if(ko(n))t.fromArray(r);else return r}function nw(e,t){if(e.noData===null)return t;let r=e.noData,n=e.type;if(Array.isArray(t))for(let a=0,s=t.length;a<s;a++)t[a]=i(t[a]);else t=i(t);return t;function i(a){return o(a)&&(a=ys(e,a)),a}function o(a){if(Do(n)){let s=a.elements;for(let c=0,l=r.length;c<l;c++)if(r[c]!==s[c])return!1;return!0}else if(ko(n)){for(let s=0,c=r.length;s<c;s++)if(r[s]!==a.getComponent(s))return!1;return!0}else return r===a}}function iw(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function ow(e,t){let{type:r,componentType:n,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let d=0,h=t.length;d<h;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=Do(r)?l(d):ko(r)?c(d):p(d),d}function c(d){return d.x=p(d.x),d.y=p(d.y),"z"in d&&(d.z=p(d.z)),"w"in d&&(d.w=p(d.w)),d}function l(d){let h=d.elements;for(let m=0,f=h.length;m<f;m++)h[m]=p(h[m]);return d}function p(d){return a&&(d=iw(n,d)),(a||tw(n))&&(d=d*i+o),d}}function Fc(e,t,r=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=r===null?e.count:r;for(let n=0,i=t.length;n<i;n++)Rm(e.type,t[n])||(t[n]=Bc(e))}else Rm(e.type,t)||(t=Bc(e));return t}function vs(e,t){for(let r in t)r in e||delete t[r];for(let r in e){let n=e[r];t[r]=Fc(n,t[r])}}function aw(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var ws=class{constructor(e,t,r=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=ct(t,"scale",1),this.max=ct(t,"max",1/0),this.min=ct(t,"min",-1/0),this.required=t.required||!1,this.noData=ct(t,"noData",null),this.default=ct(t,"default",null),this.semantic=ct(t,"semantic",null),this.enumSet=null,this.accessorProperty=r,r&&(this.offset=ct(r,"offset",this.offset),this.scale=ct(r,"scale",this.scale),this.max=ct(r,"max",this.max),this.min=ct(r,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=ct(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return Fc(this,e,t)}resolveDefaultElement(e){return ys(this,e)}resolveDefault(e){return rw(this,e)}resolveNoData(e){return nw(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let n=0,i=e.length;n<i;n++)e[n]=r(e[n]);else e=r(e);return e;function r(n){let i=t.values.find(o=>o.value===n);return i===null?"":i.name}}adjustValueScaleOffset(e){return Hm(this.type)?ow(this,e):e}},Vc=class{constructor(e,t={},r={},n=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=r,this.data=n,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=ws){let t={};for(let r in this.class.properties)t[r]=new e(this.enums,this.class.properties[r],this.definition.properties[r]);this.properties=t}},sw=class extends ws{constructor(e,t,r=null){super(e,t,r),this.attribute=r?.attribute??null}},lw=class extends Vc{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(sw)}getData(e,t,r={}){let n=this.properties;vs(n,r);for(let i in n)r[i]=this.getPropertyValue(i,e,t,r[i]);return r}getPropertyValue(e,t,r,n=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let i=this.properties[e],o=i.type;if(!i)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);n=i.shapeToProperty(n);let a=r.getAttribute(i.attribute.toLowerCase());if(Do(o)){let s=n.elements;for(let c=s.length;0<c;)s[0]=a.getComponent(t,0)}else if(ko(o))n.fromBufferAttribute(a,t);else if(o==="SCALAR"||o==="ENUM")n=a.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},cw=class extends ws{constructor(e,t,r=null){super(e,t,r),this.values=r?.values??null,this.valueLength=aw(this.type),this.arrayOffsets=ct(r,"arrayOffsets",null),this.stringOffsets=ct(r,"stringOffsets",null),this.arrayOffsetType=ct(r,"arrayOffsetType","UINT32"),this.stringOffsetType=ct(r,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let r=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:n,arrayOffsetType:i}=this,o=new(Lo(i))(e[n]);r=o[t+1]-o[t]}return r}getIndexOffsetFromId(e,t){let r=t;if(this.arrayOffsets){let{arrayOffsets:n,arrayOffsetType:i}=this;r=new(Lo(i))(e[n])[r]}else this.array&&(r*=this.count);return r}},uw=class extends Vc{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(cw)}getData(e,t={}){let r=this.properties;vs(r,t);for(let n in r)t[n]=this.getPropertyValue(n,e,t[n]);return t}_readValueAtIndex(e,t,r,n=null){let i=this.properties[e],{componentType:o,type:a}=i,s=this.data,c=s[i.values],l=new(Lo(o,a))(c),p=i.getIndexOffsetFromId(s,t);if(Hm(a)||a==="ENUM")return Wm(l,(p+r)*i.valueLength,a,n);if(a==="STRING"){let d=p+r,h=0;if(i.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:b}=i,P=new(Lo(b))(s[f]);h=P[d+1]-P[d],d=P[d]}let m=new Uint8Array(l.buffer,d,h);n=new TextDecoder().decode(m)}else if(a==="BOOLEAN"){let d=p+r,h=Math.floor(d/8),m=d%8;n=(l[h]>>m&1)==1}return n}getPropertyValue(e,t,r=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let n=this.properties[e];if(!n)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return n.resolveDefault(r);let i=n.array,o=this.data,a=n.getArrayLengthFromId(o,t);if(r=n.shapeToProperty(r,a),i)for(let s=0,c=r.length;s<c;s++)r[s]=this._readValueAtIndex(e,t,s,r[s]);else r=this._readValueAtIndex(e,t,0,r);return r=n.adjustValueScaleOffset(r),r=n.resolveEnumsToStrings(r),r=n.resolveNoData(r),r}},Ao=new jx,Lm=class{constructor(){this._renderer=new Qx,this._target=new Pm(1,1),this._texTarget=new Pm,this._quad=new Gm(new Yx({blending:Ux,blendDst:Jx,blendSrc:$x,uniforms:{map:{value:null},pixel:{value:new ar}},vertexShader:`
9
+ `,Gl=class extends jy{constructor(t=1){super("ExposureEffect",Fy,{blendFunction:Ny.NORMAL,uniforms:new Map([["exposure",new Uy(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},ih=Iy(function({exposure:t},r){let n=zy(()=>new Gl(t),[]);return n.exposure=t,By(r,()=>n,[n]),Vy("primitive",{object:n,dispose:null})});import{useFrame as Gy,useThree as Pa}from"@react-three/fiber";import*as lh from"@react-three/postprocessing";import{BlendFunction as Hy}from"postprocessing";import{Color as Wy,MathUtils as Xy,Mesh as qy,Vector2 as oh,Vector3 as ah}from"three";import{useEffect as sh,useMemo as Ea,useRef as Hl}from"react";import{jsx as Yy}from"react/jsx-runtime";var $y=lh.LensFlareEffect;function ch({config:e}){let t=Pa(h=>h.camera),r=Pa(h=>h.raycaster),n=Pa(h=>h.scene),i=Pa(h=>h.viewport),o=Hl(null),a=Hl(new ah),s=Hl(new oh),c=Ea(()=>new ah(...e.lensPosition),[e.lensPosition]),l=Ea(()=>new Wy(e.colorGain??"#141414"),[e.colorGain]),p=Ea(()=>new oh(0,0),[]),d=Ea(()=>new $y({blendFunction:Hy.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:p,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,p]);return sh(()=>(o.current=d,()=>{d.dispose(),o.current=null}),[d]),sh(()=>{let h=d.uniforms.get("screenRes");h&&(h.value.x=i.width,h.value.y=i.height)},[d,i]),Gy((h,m)=>{let f=o.current;if(!f)return;let b=f.uniforms.get("lensPosition"),P=f.uniforms.get("opacity");if(!b||!P)return;let C=1;if(a.current.copy(c).project(t),a.current.z>1)return;b.value.x=a.current.x,b.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,r.setFromCamera(s.current,t);let k=r.intersectObjects(n.children,!0),{object:y}=k[0]||{};y&&(y.userData?.lensflare==="no-occlusion"?C=0:y instanceof qy&&(y.material.uniforms?._transmission?.value>.2||y.material._transmission&&y.material._transmission>.2?C=.2:y.material.transparent&&(C=y.material.opacity))),P.value=Xy.damp(P.value,C,12,m)}),Yy("primitive",{object:d,dispose:null})}import{RampType as Wl}from"@react-three/postprocessing";import{GlitchMode as Xl,KernelSize as oi,ToneMappingMode as ql}from"postprocessing";import{Color as Ky}from"three";function uh(e){return e==="linear"?ql.LINEAR:e==="reinhard"?ql.REINHARD:ql.ACES_FILMIC}function Aa(e){switch(e){case"verySmall":return oi.VERY_SMALL;case"small":return oi.SMALL;case"medium":return oi.MEDIUM;case"large":return oi.LARGE;case"veryLarge":return oi.VERY_LARGE;case"huge":return oi.HUGE}}function dh(e){switch(e){case"constantMild":return Xl.CONSTANT_MILD;case"constantWild":return Xl.CONSTANT_WILD;default:return Xl.SPORADIC}}function $l(e){let t=new Ky(e);return[t.r,t.g,t.b,1]}function ph(e){return e==="radial"?Wl.Radial:e==="mirroredLinear"?Wl.MirroredLinear:Wl.Linear}import{Fragment as P0,jsx as Le,jsxs as Yl}from"react/jsx-runtime";var xn={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new La(Er.color).getHex(),hiddenEdgeColor:new La(Er.color).multiplyScalar(.35).getHex(),kernelSize:x0.VERY_SMALL,blur:!1,xRay:!1};function S0(e){let t=[];return e.traverse(r=>{r.isMesh&&t.push(r)}),t}var Kl=[],C0=w0(function({sceneConfig:t,selectedObjectRef:r,highlightOnHover:n=!1,disabled:i=!1,onOutlineEffect:o}){let a=Ra(L=>L.scene),s=Ra(L=>L.gl),c=mh(null),l=t?.postProcessing,p=r??null,d=l?.outline.enabled===!0,h=d||n,[m,f]=fh(()=>s.xr?.isPresenting??!1);hh(()=>{let L=s.xr;if(!L)return;let w=()=>f(!0),I=()=>f(!1);return L.addEventListener("sessionstart",w),L.addEventListener("sessionend",I),f(L.isPresenting),()=>{L.removeEventListener("sessionstart",w),L.removeEventListener("sessionend",I)}},[s]);let b=a.children.filter(L=>L.isLight),P=lo(()=>new so(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),C=lo(()=>new La(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),k=lo(()=>new La(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),y=lo(()=>$l(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),j=lo(()=>$l(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||m||i?null:Yl(P0,{children:[l.godRays.enabled===!0&&Yl("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[Le("sphereGeometry",{args:[.1,8,8]}),Le("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),Yl(i0,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&Le(g0,{}),l.ssao.enabled===!0&&Le(b0,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&Le(Qy,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&Le(r0,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&Le(Jy,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&Le(m0,{selection:p??void 0,lights:b,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:Aa(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),h&&Le(u0,{ref:o,selection:Kl,selectionLayer:l.outline.selectionLayer,blendFunction:ao.SCREEN,edgeStrength:d?l.outline.edgeStrength:xn.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:xn.pulseSpeed,visibleEdgeColor:d?C:xn.visibleEdgeColor,hiddenEdgeColor:d?k:xn.hiddenEdgeColor,kernelSize:d?Aa(l.outline.kernelSize):xn.kernelSize,blur:d?l.outline.blur:xn.blur,xRay:d?l.outline.xRay:xn.xRay}),l.chromaticAberration.enabled===!0&&Le(e0,{offset:P,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&Le(t0,{}),l.dotScreen.enabled===!0&&Le(n0,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&Le(o0,{mode:dh(l.glitch.mode),delay:new so(l.glitch.delay[0],l.glitch.delay[1]),duration:new so(l.glitch.duration[0],l.glitch.duration[1]),strength:new so(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new so(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&Le(s0,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&Le(ch,{config:l.lensflare}),l.godRays.enabled===!0&&Le(a0,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:Aa(l.godRays.kernelSize)}),l.noise.enabled===!0&&Le(c0,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:ao.ADD}),l.brightnessContrast.enabled===!0&&Le(Zy,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&Le(l0,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&Le(ih,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&Le(v0,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:ao.NORMAL}),l.toneMapping.enabled===!0&&Le(y0,{mode:uh(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&Le(f0,{intensity:l.sepia.intensity,blendFunction:ao.NORMAL}),l.scanline.enabled===!0&&Le(h0,{density:l.scanline.density,blendFunction:ao.OVERLAY}),l.pixelation.enabled===!0&&Le(d0,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&Le(p0,{rampType:ph(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:y,endColor:j,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function T0(e){let t=[e];for(;t.length>0;){let r=t.pop();if(r.visible){if(r.isMesh)return!0;t.push(...r.children)}}return!1}function _0(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function gh({hoveredObjectRef:e,...t}){let r=Ra(c=>c.scene),n=Ra(c=>c.invalidate),[i,o]=fh(null),a=M0(c=>o(c),[]),s=mh({effect:null,objects:Kl});return hh(()=>{if(!i)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?S0(r):e&&T0(e)?[e]:Kl;s.current.effect===i&&_0(s.current.objects,l)||(s.current={effect:i,objects:l},i.selection.set(l),n())}),Le(C0,{...t,onOutlineEffect:a})}import{Component as E0}from"react";var ka=class extends E0{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,n){this.props.onError?.(r)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};import{Fragment as U0,jsx as Ut,jsxs as bh}from"react/jsx-runtime";var N0=1.5;function j0({captureRef:e}){let{gl:t,scene:r,camera:n,invalidate:i}=R0();return B0(()=>{if(e)return e.current={gl:t,scene:r,camera:n,invalidate:i},()=>{e.current=null}},[e,t,r,n,i]),null}function Ql({children:e,camera:t,backgroundColor:r,shadows:n=!0,sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:p,rendererCaptureRef:d,preserveDrawingBuffer:h=!1,reduceGpuLoad:m}){let f=m??jl(),b=f?Math.min(l,N0):l,P=n&&!f,C=Da(()=>r?{background:r}:i?.background.enabled?i.background.type==="color"?{background:i.background.color}:i.background.type==="image"&&i.background.imageUrl.trim()?{backgroundImage:`url("${i.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[r,i]),k=Da(()=>{if(r)return r;let S=i?.background;if(S?.enabled){if(S.type==="color")return S.color;if(S.type==="image"&&S.imageUrl.trim()||S.type==="environment")return null}return"#1c1c1d"},[r,i]),y=Da(()=>{let S=i?.postProcessing;return S?!!(S.glitch.enabled||S.noise.enabled||S.lensflare.enabled&&S.lensflare.animated):!1},[i?.postProcessing]),[j,L]=z0(!1),w=i?.environment,I=i?.groundShadows,U=Da(()=>{if(!w)return null;if(w.source==="custom"){let S=w.customEnvironmentUrl.trim();return Od(S)?{files:S}:null}return{preset:w.preset}},[w]),_=bh(U0,{children:[Ut(j0,{captureRef:d}),Ut(nh,{cameraConfig:t}),Ut(eh,{active:y}),Ut(th,{color:k}),U?Ut(ka,{onError:S=>console.warn("Failed to load environment map:",S),children:Ut(I0,{fallback:null,children:Ut(k0,{...U,environmentIntensity:w?.intensity??.25,backgroundIntensity:w?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,Ut(rh,{rotation:w?.rotation??0}),p&&Ut(Zp,{onPresentingChange:L}),I?.enabled&&I.mode==="shadowCatcher"&&!j&&Ut(L0,{position:[0,I.height,0],scale:I.size,opacity:I.intensity,blur:I.borderFade,far:15,resolution:1024,color:"#000000"}),e,Ut(gh,{sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,disabled:f})]});return Ut(A0,{frameloop:c,dpr:[1,b],shadows:P?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:C,camera:t??{fov:50},gl:{preserveDrawingBuffer:h,toneMapping:O0,toneMappingExposure:1},children:p?bh(D0,{store:p,children:[Ut(Jp,{renderMode:c}),_]}):_})}import{CameraControls as F0,PointerLockControls as V0}from"@react-three/drei";import{Box3 as G0,Vector3 as vh}from"three";import{useEffect as co,useRef as H0}from"react";var Oa=e=>e*Math.PI/180;function yh(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Oa(e?.minPolarAngle??0),maxPolarAngle:Oa(e?.maxPolarAngle??180),minAzimuthAngle:Oa(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Oa(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}import{jsx as xh}from"react/jsx-runtime";function Jl({controlsRef:e,onCameraChange:t,cameraLimits:r,controllerType:n="orbit",onPointerLockExit:i}){let o=n==="orbit",a=H0(null);return co(()=>{if(!o)return a.current?.lock(),()=>{a.current?.unlock()}},[o]),co(()=>{o&&document.pointerLockElement&&document.exitPointerLock()},[o]),co(()=>{if(o)return;let s=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[o,i]),co(()=>{if(!o||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=()=>{t(s.camera,s)};return s.addEventListener("update",c),()=>{s.removeEventListener("update",c)}},[o,e,t]),co(()=>{if(!o||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=yh(r);s.minDistance=c.minDistance,s.maxDistance=c.maxDistance,s.minPolarAngle=c.minPolarAngle,s.maxPolarAngle=c.maxPolarAngle,s.minAzimuthAngle=c.minAzimuthAngle,s.maxAzimuthAngle=c.maxAzimuthAngle,s.boundaryEnclosesCamera=c.boundaryEnclosesCamera,s.boundaryFriction=c.boundaryFriction,s.setBoundary(c.panBoundary?new G0(new vh(...c.panBoundary[0]),new vh(...c.panBoundary[1])):void 0)},[o,e,r?.minDistance,r?.maxDistance,r?.minPolarAngle,r?.maxPolarAngle,r?.minAzimuthAngle,r?.maxAzimuthAngle,r?.boundaryEnclosesCamera,r?.boundaryFriction,r?.panBoundary]),o?xh(F0,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):xh(V0,{ref:a,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}import{useRef as Zl,useMemo as Ia,useEffect as W0}from"react";import{useFrame as X0,useThree as wh}from"@react-three/fiber";import{Vector3 as q0}from"three";import{Fragment as Z0,jsx as wn,jsxs as ev}from"react/jsx-runtime";function Sh(e,t){if(!t)return e;let r=t*Math.PI/180,n=Math.cos(r),i=Math.sin(r);return[e[0]*n+e[2]*i,e[1],-e[0]*i+e[2]*n]}function $0(e,t){let[r,n,i]=e.center,o=e.radius,a=Math.hypot(t[0],t[1],t[2]),s=a>1e-6?[t[0]/a,t[1]/a,t[2]/a]:[0,1,0],c=o*2;return{position:[r+s[0]*c,n+s[1]*c,i+s[2]*c],target:e.center,extent:o,near:Math.max(o/100,.001),far:c+o*2}}function Y0(e,t){let r=t[0]-e.center[0],n=t[1]-e.center[1],i=t[2]-e.center[2],o=Math.hypot(r,n,i);return{near:Math.max(o-e.radius,o*.01,.001),far:o+e.radius*2}}function K0(e,t,r){return t&&r&&!e.attachedToCamera?r.center:[0,0,0]}var Q0={ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},J0={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Mh({light:e,shadows:t,shadowsEnabled:r,environmentRotation:n,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=Zl(null),c=Zl(null),l=Zl(null),p=wh(C=>C.camera),d=wh(C=>C.scene),h=Ia(()=>new q0,[]),m=Ia(()=>e.attachedToCamera||e.attachment?e.position:Sh(e.position,n),[e.position,e.attachedToCamera,e.attachment,n]);X0(()=>{let C=s.current??c.current??l.current;if(!C)return;if(e.attachedToCamera){C.position.copy(p.position);return}let k=e.attachment;if(!k)return;let y=o?$n(o,k.objectId):null,L=(y?o?.[y]:void 0)?.modelObjectId??k.objectId,w=(y?a?.current[y]:void 0)??fn(d,L);w&&(h.fromArray(k.offset),w.localToWorld(h),C.position.copy(h))});let f=r&&t.enabled&&e.castShadow,b=Ia(()=>e.type==="directional"&&f&&i&&!e.attachedToCamera?$0(i,m):null,[e.type,e.attachedToCamera,f,i,m]),P=Ia(()=>e.type==="spot"&&f&&i&&!e.attachedToCamera?Y0(i,m):null,[e.type,e.attachedToCamera,f,i,m]);return W0(()=>{let C=s.current??l.current;if(!C)return;let[k,y,j]=K0(e,f,i);C.target.position.set(k,y,j),C.target.updateMatrixWorld()},[e,f,i]),!e.visible||e.type==="none"?null:e.type==="directional"?wn("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:b?.position??m,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":b?.near??.5,"shadow-camera-far":b?.far??40,"shadow-camera-left":-(b?.extent??8),"shadow-camera-right":b?.extent??8,"shadow-camera-top":b?.extent??8,"shadow-camera-bottom":-(b?.extent??8)}):e.type==="point"?wn("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:m,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?wn("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:m,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":P?.near??.5,"shadow-camera-far":P?.far??40}):e.type==="hemisphere"?wn("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function ec({lightingConfig:e,shadowConfig:t,shadowsEnabled:r=!0,environmentRotation:n=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let c=e??Q0,l=t??J0,p=i?.shadowLight,d=Sh([5,10,5],n);return ev(Z0,{children:[wn("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(h=>wn(Mh,{light:h,shadows:l,shadowsEnabled:r,environmentRotation:n,modelBounds:o,objectBindings:a,nodeRefs:s},h.id)),p?.enabled&&wn(Mh,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:p.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:p.bias,visible:!0},shadows:l,shadowsEnabled:r,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}import{useState as lv,useEffect as $e,useRef as st,useMemo as vt}from"react";import{useFrame as tc,useThree as cv}from"@react-three/fiber";import{MeshStandardMaterial as uv,MeshBasicMaterial as rc,MeshNormalMaterial as dv,MeshMatcapMaterial as pv,DoubleSide as hv,NormalBlending as mv,AnimationMixer as fv,LoopOnce as gv,LoopRepeat as bv,Box3 as Ha,Vector3 as Mn,Matrix4 as yv,MathUtils as Wa}from"three";import{SkeletonUtils as vv}from"three-stdlib";function Ch(e){let t=new Map;return e.map((r,n)=>{let o=r.name.trim()||`Animation ${n+1}`,a=t.get(o)??0;return t.set(o,a+1),{clip:r,sourceName:a===0?o:`${o} (${a+1})`,duration:r.duration}})}import{Color as Ba,FrontSide as tv,NormalBlending as Th}from"three";function _h(e,t,r,n){let i=ir(t),o=to(r,i),a=jd(n,t),s=Ud(n,t),c=Fd(n,t);return a||s||c?ya(e.userData,t,o,r,a??[0,0],s??1,c??0):(va(e.userData,t),o)}function at(e,t,r,n){if(!r){va(e.userData,t);return}let i=la[t];e[i]=_h(e,t,r,n)}function za(e,t,r){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new Ba(0,0,0)),e.emissiveIntensity=e.userData.baseEmissiveIntensity??e.emissiveIntensity,e.emissiveMap=e.userData.baseEmissiveMap??null,e.opacity=e.userData.baseOpacity??1,e.transparent=e.userData.baseTransparent??!1,e.alphaMap=e.userData.baseAlphaMap??null,e.alphaTest=e.userData.baseAlphaTest??0,e.alphaHash=e.userData.baseAlphaHash??!1,e.dithering=e.userData.baseDithering??!1,e.blending=e.userData.baseBlending??Th,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??tv,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Qi(e.userData.baseNormalScale)),e.bumpMap=e.userData.baseBumpMap??null,e.bumpScale=e.userData.baseBumpScale??e.bumpScale,e.aoMap=e.userData.baseAoMap??null,e.aoMapIntensity=e.userData.baseAoMapIntensity??e.aoMapIntensity,e.displacementMap=e.userData.baseDisplacementMap??null,e.displacementScale=e.userData.baseDisplacementScale??e.displacementScale,e.displacementBias=e.userData.baseDisplacementBias??e.displacementBias,e.clearcoat=e.userData.baseClearcoat??e.clearcoat,e.clearcoatMap=e.userData.baseClearcoatMap??null,e.clearcoatRoughness=e.userData.baseClearcoatRoughness??e.clearcoatRoughness,e.clearcoatRoughnessMap=e.userData.baseClearcoatRoughnessMap??null,e.clearcoatNormalMap=e.userData.baseClearcoatNormalMap??null,e.clearcoatNormalScale.copy(Qi(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Ba(0,0,0)),e.sheenColorMap=e.userData.baseSheenColorMap??null,e.sheenRoughness=e.userData.baseSheenRoughness??e.sheenRoughness,e.sheenRoughnessMap=e.userData.baseSheenRoughnessMap??null,e.anisotropy=e.userData.baseAnisotropy??e.anisotropy,e.anisotropyRotation=e.userData.baseAnisotropyRotation??e.anisotropyRotation,e.anisotropyMap=e.userData.baseAnisotropyMap??null,e.transmission=e.userData.baseTransmission??e.transmission,e.transmissionMap=e.userData.baseTransmissionMap??null,e.thickness=e.userData.baseThickness??e.thickness,e.thicknessMap=e.userData.baseThicknessMap??null,e.attenuationColor.copy(e.userData.baseAttenuationColor??new Ba("#ffffff")),e.attenuationDistance=e.userData.baseAttenuationDistance??e.attenuationDistance,e.reflectivity=e.userData.baseReflectivity??e.reflectivity,e.specularIntensity=e.userData.baseSpecularIntensity??e.specularIntensity,e.specularIntensityMap=e.userData.baseSpecularIntensityMap??null,e.specularColor.copy(e.userData.baseSpecularColor??new Ba("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let n=je(t,"texture"),i=je(t,"metalnessMap"),o=je(t,"roughnessMap"),a=je(t,"emissiveMap"),s=je(t,"alphaMap"),c=je(t,"normalMap"),l=je(t,"bumpMap"),p=je(t,"aoMap"),d=je(t,"displacementMap"),h=je(t,"clearcoatMap"),m=je(t,"clearcoatRoughnessMap"),f=je(t,"clearcoatNormalMap"),b=je(t,"anisotropyMap"),P=je(t,"transmissionMap"),C=je(t,"thicknessMap"),k=je(t,"sheenColorMap"),y=je(t,"sheenRoughnessMap"),j=je(t,"specularIntensityMap"),L=je(t,"specularColorMap");if(n?(e.map=_h(e,"texture",n,t),e.color.set(r??"#ffffff")):(va(e.userData,"texture"),r&&(e.map=null,e.color.set(r))),at(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),at(e,"roughnessMap",o,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):a&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),at(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),at(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=Gd(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Vd(t.side)),at(e,"normalMap",c,t),c||t?.normalScale!==void 0){let w=t?.normalScale??Math.abs(Qi(e.userData.baseNormalScale).x);e.normalScale.set(w,t?.flipNormalY?-w:w)}if(at(e,"bumpMap",l,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),at(e,"aoMap",p,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),at(e,"displacementMap",d,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),at(e,"clearcoatMap",h,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),at(e,"clearcoatRoughnessMap",m,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),at(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let w=t?.clearcoatNormalScale??Math.abs(Qi(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(w,t?.flipClearcoatNormalY?-w:w)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),at(e,"sheenColorMap",k,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),at(e,"sheenRoughnessMap",y,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),at(e,"anisotropyMap",b,t),t?.transmission!==void 0&&(e.transmission=t.transmission),at(e,"transmissionMap",P,t),t?.thickness!==void 0&&(e.thickness=t.thickness),at(e,"thicknessMap",C,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),at(e,"specularIntensityMap",j,t),t?.specularColor&&e.specularColor.set(t.specularColor),at(e,"specularColorMap",L,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Th||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function uo(e){return e.material}function yr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Yt(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Na(e,t){return Array.isArray(e)?e[t]:e}import{Matrix4 as rv}from"three";function nv(e){return e.isSkinnedMesh===!0}function ai(e){let t=[];return e.traverse(r=>{nv(r)&&t.push(r)}),t}var po="reactImmersiveSkinFreeze";function Ph(e){return!!e.userData[po]}function ja(e,t){let r=e.userData,n=new rv().copy(t).invert(),i=r[po];if(i){i.frozenInverse.copy(n),e.bindMatrixInverse.copy(n);return}let o={frozenInverse:n,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(n),e.onBeforeRender=function(a,s,c,l,p,d){o.previousOnBeforeRender.call(this,a,s,c,l,p,d),e.bindMatrixInverse.copy(o.frozenInverse)},r[po]=o}function si(e){let t=e.userData,r=t[po];r&&(e.onBeforeRender=r.previousOnBeforeRender,delete t[po],e.updateMatrixWorld(!0))}import{useCallback as Ua,useEffect as iv,useRef as Fa}from"react";var ov=500,av=10,sv=5;function Va(e,t){let r=Fa({resolve:e,onContextMenu:t});r.current={resolve:e,onContextMenu:t};let n=Fa(null),i=Fa(!1),o=Fa(null),a=Ua(()=>{let p=n.current;p?.timer&&clearTimeout(p.timer),n.current=null,o.current?.(),o.current=null},[]),s=Ua(()=>{let p=n.current;p&&(a(),p.kind==="touch"&&(i.current=!0,setTimeout(()=>i.current=!1,800)),r.current.onContextMenu?.(p.target,p.pointer))},[a]),c=Ua(p=>{let d=p.nativeEvent,h=d.pointerType!=="touch"&&d.button===2,m=d.pointerType==="touch"&&d.button===0;if(!r.current.onContextMenu||!h&&!m)return;let f=r.current.resolve(p.object);if(f===null)return;a();let b={target:f,kind:h?"right":"touch",pointerId:d.pointerId,pointer:{clientX:d.clientX,clientY:d.clientY,pointerType:d.pointerType},timer:m?setTimeout(s,ov):null};n.current=b;let P=h?sv:av,C=L=>Math.hypot(L.clientX-b.pointer.clientX,L.clientY-b.pointer.clientY)>P,k=L=>{L.pointerId===b.pointerId&&C(L)&&a()},y=L=>{L.pointerId===b.pointerId&&(b.kind==="right"&&!C(L)?s():a())},j=L=>{L.pointerId!==b.pointerId&&a()};window.addEventListener("pointermove",k),window.addEventListener("pointerup",y),window.addEventListener("pointercancel",a),window.addEventListener("pointerdown",j),o.current=()=>{window.removeEventListener("pointermove",k),window.removeEventListener("pointerup",y),window.removeEventListener("pointercancel",a),window.removeEventListener("pointerdown",j)}},[a,s]);iv(()=>a,[a]);let l=Ua(()=>i.current?(i.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:l}}function Ga(e){let t=e.nativeEvent;return{clientX:t.clientX,clientY:t.clientY,pointerType:"pointerType"in t?t.pointerType:"mouse"}}import{jsx as Eh}from"react/jsx-runtime";function Xa(e,t,r){let n=r.get(e);n&&(t?.position?e.position.fromArray(t.position):e.position.copy(n.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],n.rotation.order):e.rotation.copy(n.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(n.scale),e.updateMatrix())}function Ze(e,t=!1){if(!e||typeof e!="object")return"-";let r=e;return[r.channel??0,t?r.format??"":"",r.isVideoTexture?r.colorSpace??"":""].join(":")}function li(e){let t=e,r=Number(t.clearcoat)>0,n=Number(t.sheen)>0,i=Number(t.anisotropy)>0,o=Number(t.transmission)>0,a=t.transparent===!1&&t.blending===mv&&t.alphaToCoverage!==!0;return[Ze(t.map),Ze(t.aoMap),Ze(t.lightMap),Ze(t.bumpMap),Ze(t.normalMap,!0),t.normalMap?t.normalMapType:"",Ze(t.displacementMap),Ze(t.emissiveMap),Ze(t.metalnessMap),Ze(t.roughnessMap),i,Ze(i?t.anisotropyMap:null),r,Ze(r?t.clearcoatMap:null),Ze(r?t.clearcoatNormalMap:null,!0),Ze(r?t.clearcoatRoughnessMap:null),n,Ze(n?t.sheenColorMap:null),Ze(n?t.sheenRoughnessMap:null),Ze(t.specularColorMap),Ze(t.specularIntensityMap),o,Ze(o?t.transmissionMap:null),Ze(o?t.thicknessMap:null),Ze(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,a].join("|")}function nc({url:e,objectBindings:t,selectedItem:r,itemMaterials:n,onItemClick:i,onItemHover:o,onItemDoubleClick:a,onItemContextMenu:s,onModelLoaded:c,onAnimationsReady:l,nodeRefsOut:p,onNodeRefsChange:d,materialRefsOut:h,panelHoveredItem:m,sceneConfig:f,zoomOnSelected:b=!0,highlightOnHover:P=!0,decoderConfig:C,modelFormat:k,onLoadProgress:y,explodeFactor:j=0,suspendBindingTransforms:L=!1}){let w=Nd(e,C,k,y),I=cv(E=>E.invalidate),[U,_]=lv(null),S=st(null),{setCanvasCursor:A,restoreCanvasCursor:G}=Wd();$e(()=>{P||(_(null),o?.(null),G())},[P,o,G]);let v=vt(()=>vv.clone(w.scene),[w.scene]),z=vt(()=>Yn(v),[v]),M=z.nodesById;$e(()=>{z.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(z.duplicateNames))},[z]);let O=vt(()=>{let E=new WeakMap;return v.traverse(T=>{E.set(T,{position:T.position.clone(),rotation:T.rotation.clone(),scale:T.scale.clone()})}),E},[v]);$e(()=>{let E=!1,T=null,F=null,H=window,W=Object.entries(M).filter(([,We])=>$t(We)),J=new Ha,Y=[],Ie=0;v.traverse(We=>{$t(We)&&(We.castShadow=!1,We.receiveShadow=!0)});let ke=()=>{if(E)return;let We=new Set,X=J.getSize(new Mn),Ne=new Mn;for(let{name:it,box:yt}of Y)yt.getSize(Ne),Ne.x>X.x*.7&&Ne.z>X.z*.7&&Ne.y>X.y*.4&&We.add(it);v.traverse(it=>{if(!$t(it))return;let yt=Ki(it);it.castShadow=!yt||!We.has(yt),it.receiveShadow=!0}),I()},Ve=()=>{E||(H.requestIdleCallback?T=H.requestIdleCallback(De,{timeout:100}):F=window.setTimeout(()=>De(),0))},De=We=>{if(T=null,F=null,E)return;let X=performance.now(),Ne=0;for(;Ie<W.length&&!(Ne>0&&!(We?We.didTimeout?Ne<16:We.timeRemaining()>1:performance.now()-X<8));){let[it,yt]=W[Ie];Ie+=1,Ne+=1;let Zt=new Ha().setFromObject(yt);Zt.isEmpty()||(Y.push({name:it,box:Zt}),J.union(Zt))}Ie<W.length?Ve():ke()};return Ve(),()=>{E=!0,T!==null&&H.cancelIdleCallback?.(T),F!==null&&window.clearTimeout(F)}},[I,M,v]),$e(()=>{bl(v)},[v]),$e(()=>{let E=new AbortController;return sa(v,E.signal),()=>{E.abort(),Yi(v)}},[v]);let N=vt(()=>{let E={};for(let[T,F]of Object.entries(t))E[F.modelObjectId??T]=T;return E},[t]),$=vt(()=>Object.entries(t).map(([E,T])=>`${E}${T.modelObjectId??E}`).sort().join(""),[t]),Z=vt(()=>Object.entries(t).map(([E,T])=>JSON.stringify([E,T.modelObjectId??E,T.transform??null])).sort().join(""),[t]),te=st(new Map);$e(()=>{let E=new Map,T=new Map;for(let[W,J]of Object.entries(t)){if(!J.transform)continue;let Y=M[J.modelObjectId??W];Y&&(E.set(Y,J.transform),T.set(Y,ai(Y)))}let F=new Set([...te.current.keys(),...E.keys()]);for(let W of F){Xa(W,void 0,O);for(let J of ai(W))si(J)}v.updateMatrixWorld(!0);let H=new Map;for(let W of T.values())for(let J of W)H.has(J)||H.set(J,J.matrixWorld.clone());for(let[W,J]of E)Xa(W,J,O);te.current=E,v.updateMatrixWorld(!0);for(let[W,J]of H)ja(W,J);I()},[v,M,O,Z,I]),$e(()=>()=>{for(let E of ai(v))si(E)},[v]);let ie=vt(()=>{let E={};for(let[T,F]of Object.entries(t)){let H=F.modelObjectId??T,W=M[H];if(!$t(W))continue;let J=uo(W);J&&(E[T]=yr(J,Y=>{let Ie=ua(Y),ke=da(Ie??new uv);return pa(ke),ke}))}return E},[M,$]);$e(()=>{h&&(h.current=ie)},[ie,h]),$e(()=>()=>{for(let E of Object.values(ie))Yt(E,T=>{pp(T.userData),T.dispose()})},[ie]);let Ce=f?.model.shading??"lit",Ue=f?.model.renderer??"pbr",rt=f?.wireframe.enabled??!1,gt=f?.wireframe.color??"#93c5fd",Fe=f?.wireframe.opacity??1,ze=vt(()=>{let E={};if(Ce!=="unlit")return E;for(let[T,F]of Object.entries(ie))E[T]=yr(F,H=>{let W=new rc;return W.color.copy(H.color),W.map=H.map,W.alphaMap=H.alphaMap,W.alphaTest=H.alphaTest,W.transparent=H.transparent,W.opacity=H.opacity,W.side=H.side,W});return E},[ie,Ce]),nt=vt(()=>{let E={};if(Ce!=="normals")return E;for(let[T,F]of Object.entries(ie))E[T]=yr(F,()=>new dv);return E},[ie,Ce]),dt=vt(()=>{let E={};if(Ce!=="lit"||Ue!=="matcap")return E;let T=xa();for(let[F,H]of Object.entries(ie))E[F]=yr(H,W=>{let J=new pv;return J.matcap=T,J.color.copy(W.color),J.alphaMap=W.alphaMap,J.alphaTest=W.alphaTest,J.side=W.side,J});return E},[ie,Ce,Ue]);$e(()=>()=>{for(let E of Object.values(ze))Yt(E,T=>T.dispose());for(let E of Object.values(nt))Yt(E,T=>T.dispose());for(let E of Object.values(dt))Yt(E,T=>T.dispose())},[ze,nt,dt]);let bt=E=>Ce==="normals"?nt[E]:Ce==="unlit"?ze[E]:Ue==="matcap"?dt[E]:ie[E],pt=st(c);pt.current=c,$e(()=>{pt.current?.(v)},[v]);let At=vt(()=>{let E={};for(let[T,F]of Object.entries(t)){let H=F.modelObjectId??T,W=M[H];W&&(E[T]=W)}return E},[M,$]);$e(()=>(p.current=At,d?.(),()=>{p.current===At&&(p.current={})}),[At,p,d]);let Ge=st({});$e(()=>()=>{for(let E of Object.values(Ge.current))for(let[T,F]of Object.entries(E))F&&bn(F,ir(T));Ge.current={}},[]);let q=vt(()=>{let E=new Map;for(let[T,F]of Object.entries(t)){let H=m===F||m?.id===F.id||m?.modelObjectId===F.modelObjectId,W=P&&(U===T||H),J=W||r===T;(W||J)&&E.set(T,{emissive:W,matcap:J})}return E},[t,P,U,r,m]),Vt=st(q);Vt.current=q,$e(()=>{let E=new Set;for(let[T,F]of Object.entries(t)){E.add(T);let H=F.modelObjectId??T,W=M[H];if(!$t(W))continue;W.visible=F.visible!==!1;let J=ie[T];if(!J)continue;if(Ue!=="uv-checker"){let X=bt(T);X&&(W.material=X)}if(F.visible===!1)continue;let Y=ze[T],Ie=dt[T],ke=n[T]??n[F.modelObjectId??T],Ve=F.style?.material,De=Ge.current[T]??{};for(let X of Wr){let Ne=je(Ve,X),it=De[X];if(it===Ne)continue;let yt=ir(X);it&&bn(it,yt),Ne?(ba(Ne,yt,I),De[X]=Ne):delete De[X]}Object.keys(De).length>0?Ge.current[T]=De:delete Ge.current[T];let We=ke?.hex??Ve?.baseColor;Yt(J,(X,Ne)=>{let it=li(X);za(X,Ve,We);let yt=X.userData.reactImmersiveConfiguredEmissive;yt?.isColor?yt.copy(X.emissive):X.userData.reactImmersiveConfiguredEmissive=X.emissive.clone();let Zt=Vt.current.get(T);Zt?.emissive&&X.emissive.add(eo),it!==li(X)&&(X.needsUpdate=!0);let Rt=Na(Y,Ne);if(Rt){let Cr=li(Rt);Rt.color.copy(X.color),Rt.map=X.map,Rt.alphaMap=X.alphaMap,Rt.alphaTest=X.alphaTest,Rt.transparent=X.transparent,Rt.opacity=X.opacity,Rt.side=X.side,Cr!==li(Rt)&&(Rt.needsUpdate=!0)}let Ct=Na(Ie,Ne);if(Ct){let Cr=li(Ct);Zt?.matcap?Ct.color.set(Er.color):Ct.color.copy(X.color),Ct.map=X.map,Ct.alphaMap=X.alphaMap,Ct.alphaTest=X.alphaTest,Ct.transparent=X.transparent,Ct.opacity=X.opacity,Ct.side=X.side,Cr!==li(Ct)&&(Ct.needsUpdate=!0)}})}for(let T of Object.keys(Ge.current))if(!E.has(T)){for(let[F,H]of Object.entries(Ge.current[T]))H&&bn(H,ir(F));delete Ge.current[T]}I()},[t,M,ie,ze,nt,dt,n,Ce,Ue,I]);let ht=st(new Map);$e(()=>{let E=ht.current,T=new Set([...E.keys(),...q.keys()]),F=!1;for(let H of T){let W=E.get(H),J=q.get(H),Y=!!W?.emissive!=!!J?.emissive,Ie=!!W?.matcap!=!!J?.matcap;if(!Y&&!Ie)continue;F=!0;let ke=ie[H],Ve=dt[H];ke&&Yt(ke,(De,We)=>{let X=De.userData.reactImmersiveConfiguredEmissive;Y&&X?.isColor&&(De.emissive.copy(X),J?.emissive&&De.emissive.add(eo));let Ne=Na(Ve,We);Ie&&Ne&&(J?.matcap?Ne.color.set(Er.color):Ne.color.copy(De.color))})}ht.current=q,F&&I()},[q,ie,dt,I]),$e(()=>{if(Ue!=="uv-checker")return;let E=hp(),T=[];return v.traverse(F=>{if(!$t(F))return;let H=F.material,W=Array.isArray(H)?H:[H],J=!!F.geometry.getAttribute("uv"),Y=W.map((ke,Ve)=>{let De=new rc({color:J?"#ffffff":"#ff00ff",map:J?E:null,side:ke.side});return De.name=`${F.name||"mesh"}-uv-checker-${Ve}`,De.toneMapped=!1,De}),Ie=Array.isArray(H)?Y:Y[0];F.material=Ie,T.push({node:F,original:H,diagnostic:Ie})}),I(),()=>{for(let{node:F,original:H,diagnostic:W}of T){F.material=H;let J=Array.isArray(W)?W:[W];for(let Y of J)Y.dispose()}I()}},[v,Ue,I]),$e(()=>{if(!rt)return;let E=[];for(let[T,F]of Object.entries(t)){let H=F.modelObjectId??T,W=M[H];if(!$t(W))continue;let J=new rc({color:gt,wireframe:!0,transparent:!0,opacity:Fe,depthTest:!1,depthWrite:!1,side:hv,toneMapped:!1}),Y=W.clone(!1);Y.name="",Y.position.set(0,0,0),Y.quaternion.identity(),Y.scale.set(1,1,1),Y.matrix.identity(),Y.matrixAutoUpdate=!0,Y.material=J,Y.castShadow=!1,Y.receiveShadow=!1,Y.frustumCulled=!1,Y.renderOrder=1,Y.userData={isWireframeOverlay:!0},Y.raycast=()=>{},W.morphTargetInfluences&&(Y.morphTargetInfluences=W.morphTargetInfluences),W.add(Y),E.push({node:W,overlay:Y})}return I(),()=>{for(let{node:T,overlay:F}of E)T.remove(F),F.material.dispose()}},[rt,gt,Fe,M,t,I]);let _e=vt(()=>Ch(w.animations),[w.animations]),Ye=st(l);Ye.current=l;let He=st(f);He.current=f;let Bt=st(null),Gt=st({}),Pe=st(null),se=st(null),de=st(1),Ke=st(new Set),Ae=st(0),Qe=()=>({currentClip:se.current,isPlaying:Pe.current?.paused===!1,speed:de.current,time:Pe.current?.time??0,duration:Pe.current?.getClip().duration??0}),V=()=>{let E=Qe();Ke.current.forEach(T=>T(E))},re=(E,T)=>{let F=Hd(T);E.setLoop(F==="once"?gv:bv,F==="once"?1:1/0),E.clampWhenFinished=F==="once";let H=gl(T?.speed??de.current);de.current=H,E.setEffectiveTimeScale(H)},oe=()=>{Pe.current?.stop(),Pe.current=null,se.current=null,V(),I()},we=()=>{Pe.current&&(Pe.current.paused=!0,V(),I())},Oe=E=>{let T=gl(E);de.current=T,Pe.current?.setEffectiveTimeScale(T),V()},Te=E=>{let T=Pe.current;if(!T)return;let F=T.getClip().duration;T.time=Math.min(Math.max(E,0),F),Bt.current?.update(0),V(),I()},Re=E=>{let T=Gt.current[E];if(!T)return;let F=ca(He.current,E);if(!F?.hidden){if(Pe.current===T&&T.paused){re(T,F),T.paused=!1,se.current=E,V(),I();return}Pe.current&&Pe.current!==T&&Pe.current.stop(),re(T,F),T.paused=!1,T.enabled=!0,T.reset().play(),Pe.current=T,se.current=E,V(),I()}};$e(()=>{let E=new fv(v);Bt.current=E;let T={};for(let{clip:Y,sourceName:Ie}of _e)T[Ie]=E.clipAction(Y);Gt.current=T;let F=Y=>{Y.action&&Y.action===Pe.current&&oe()};E.addEventListener("finished",F);let H=()=>{};Ye.current?.({clips:_e.map(({sourceName:Y})=>Y),clipDetails:_e.map(({sourceName:Y,duration:Ie})=>({sourceName:Y,duration:Ie})),play:_e.length?Re:H,pause:_e.length?we:H,stop:_e.length?oe:H,setSpeed:_e.length?Oe:H,seek:_e.length?Te:H,getState:Qe,subscribe:Y=>(Ke.current.add(Y),Y(Qe()),()=>{Ke.current.delete(Y)})}),de.current=1,V();let W=He.current?.animations.autoplayClip,J=W?ca(He.current,W):void 0;return W&&!J?.hidden&&Re(W),()=>{E.removeEventListener("finished",F),E.stopAllAction(),E.uncacheRoot(v),Bt.current=null,Gt.current={},Pe.current=null,se.current=null,de.current=1,V()}},[v,_e]),$e(()=>{let E=se.current,T=Pe.current;if(!E||!T||!f?.animations)return;let F=ca(f,E);if(F?.hidden){oe();return}F&&(re(T,F),V())},[f?.animations]),tc((E,T)=>{if(Bt.current&&Pe.current?.paused===!1){if(Bt.current.update(T),!L)for(let[F,H]of te.current)Xa(F,H,O);I(),Ae.current+=T,Ae.current>=.066&&(Ae.current=0,V(),bl(v))}});let ee=vt(()=>(f?.model.rotation??[0,0,0]).map(E=>E*Math.PI/180),[f?.model.rotation]);tc((E,T)=>{if(!S.current)return;let F=S.current.rotation;F.x=Wa.lerp(F.x,ee[0],1-Math.exp(-5*T)),F.y=Wa.lerp(F.y,ee[1],1-Math.exp(-5*T)),F.z=Wa.lerp(F.z,ee[2],1-Math.exp(-5*T)),Math.abs(F.x-ee[0])<1e-4&&Math.abs(F.y-ee[1])<1e-4&&Math.abs(F.z-ee[2])<1e-4||I()});let xe=st([]),Me=st(0),ot=st(0),zt=vt(()=>new Mn,[]);$e(()=>{let E=new Map;for(let[ke,Ve]of Object.entries(t)){let De=M[Ve.modelObjectId??ke];De&&E.set(De,Ve)}for(let ke of xe.current)Xa(ke.node,E.get(ke.node)?.transform,O);ot.current=0,v.updateWorldMatrix(!0,!0);let T=new Ha().setFromObject(v),F=T.getCenter(new Mn),H=T.getSize(new Mn).length()*.5;Me.current=Number.isFinite(H)?H:0;let W=[...E.keys()],J=new Set(W),Y=[],Ie=new Mn;for(let ke of W){if(!ke.parent)continue;let Ve=ke.parent,De=!1;for(;Ve;){if(J.has(Ve)){De=!0;break}Ve=Ve.parent}if(De)continue;let We=new Ha().setFromObject(ke);if(We.isEmpty())continue;We.getCenter(Ie);let X=Ie.clone().sub(F);X.lengthSq()<1e-8||(X.normalize(),Y.push({node:ke,restLocalPos:ke.position.clone(),restWorldPos:ke.getWorldPosition(new Mn),worldDir:X,parentInverse:new yv().copy(ke.parent.matrixWorld).invert()}))}xe.current=Y,I()},[v,M,$,Z,O,I]),$e(()=>{I()},[j,I]),tc((E,T)=>{let F=xe.current;if(F.length===0)return;let H=Math.min(Math.max(j,0),1),W=ot.current;if(Math.abs(W-H)<1e-4){if(W===H)return;ot.current=H}else ot.current=Wa.lerp(W,H,1-Math.exp(-6*T)),I();let J=ot.current*Me.current;for(let Y of F)zt.copy(Y.worldDir).multiplyScalar(J).add(Y.restWorldPos).applyMatrix4(Y.parentInverse),Y.node.position.copy(zt)});let St=E=>{let T=E;for(;T;){let F=Ki(T),H=F?N[F]:void 0;if(H&&t[H])return[H,t[H]];T=T.parent}return null},mt=Va(E=>{let T=St(E);return T&&T[1].selectable!==!1?T[1]:null},s),ln=E=>{if(mt.consumeClick())return;let T=St(E.object);if(!T)return;let[,F]=T;F.selectable!==!1&&(E.stopPropagation(),i(F))},Nt=E=>{let T=St(E.object);if(!T)return;let[,F]=T;if(F.selectable===!1)return;a?.(F,Ga(E))&&E.stopPropagation()},jr=E=>{if(!P)return;let T=St(E.object);if(!T)return;let[F,H]=T;H.hoverable!==!1&&(E.stopPropagation(),A("pointer"),_(F),o?.(H))},Uo=E=>{P&&(E.stopPropagation(),G(),_(null),o?.(null))},ft=vt(()=>!Ld(v),[v]);return Eh("group",{ref:S,children:Eh("primitive",{object:v,...ft?{onClick:ln,onDoubleClick:Nt,...s?{onPointerDown:mt.onPointerDown}:{},...P?{onPointerOver:jr,onPointerOut:Uo}:{}}:{}})})}import{useCallback as rn,useEffect as nn,useMemo as kw,useRef as xt,useState as Wc}from"react";import{useFrame as Dw,useThree as Ow}from"@react-three/fiber";import{Box3 as zh,BoxGeometry as jv,Group as Ih,Matrix4 as Nh,Mesh as Uv,MeshBasicMaterial as Fv,Vector3 as Ar}from"three";import{Euler as xv,Matrix4 as Sn,MeshBasicMaterial as wv,MeshMatcapMaterial as Mv,MeshNormalMaterial as Sv,MeshStandardMaterial as Cv,Quaternion as Tv,Vector3 as ho}from"three";function Lh(e){let t={};for(let[r,n]of Object.entries(e))t[n.modelObjectId??r]=r;return t}function oc(e){let t=e,r=null;for(;t;){let n=t.userData?.ri_name;if(typeof n=="string"&&n)return n;!r&&t.name&&(r=t.name),t=t.parent}return r}function kh(e,t){return e||(t?t.modelObjectId??t.id:null)}function Ya(e,t){let r=oc(e);if(!r)return null;let n=t.keyByModelObject[r]??r,i=t.objectBindings[n];return i?{key:n,binding:i}:null}var ci=new ho,ic=new ho,_v=new Sn,Ah=new Sn,qa=new Sn,Pv=new Sn,$a=new Sn,Ev=new Sn,Av=new Sn,Rv=new ho,Lv=new ho,Kr=new ho,Rh=new Tv,kv=new xv;function Dv(e,t,r,n,i){let o=!!(r?.position||r?.rotation||r?.scale),a=!!(i&&i.factor>0&&i.radius>0);if(!o&&!a){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}Ah.compose(t.position,Rh.setFromEuler(t.rotation),t.scale);let s=r?.rotation;qa.compose(Rv.fromArray(r?.position??[0,0,0]),Rh.setFromEuler(kv.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),Lv.fromArray(r?.scale??[1,1,1])),qa.premultiply(n).multiply(Pv.copy(n).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??_v;if($a.multiplyMatrices(c,Ah).premultiply(qa),a&&i){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let p=l.userData.ri_center;Array.isArray(p)&&p.length===3?Kr.fromArray(p).applyMatrix4(n).applyMatrix4(qa):Kr.setFromMatrixPosition($a),Kr.sub(i.centre),Kr.lengthSq()>1e-8&&(Kr.normalize().multiplyScalar(i.factor*i.radius),$a.premultiply(Av.makeTranslation(Kr.x,Kr.y,Kr.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(Ev.copy(c).invert(),$a),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function Ka(e,t){if(!$t(e)&&!e.userData.riLogicalObject)return;let r=Ya(e,t);if(!r)return;let n=Dh(e);if(n.rest??(n.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){Dv(e,n.rest,r.binding.transform,t.placementFrame,t.explode);return}let i=n.rest,o=r.binding.transform;o?.position?e.position.fromArray(o.position):e.position.copy(i.position),o?.rotation?e.rotation.set(o.rotation[0],o.rotation[1],o.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),o?.scale?e.scale.fromArray(o.scale):e.scale.copy(i.scale);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),ic.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?ci.fromArray(c).applyMatrix4(e.matrixWorld).sub(a.centre):ci.copy(ic).sub(a.centre),ci.lengthSq()>1e-8&&(ci.normalize().multiplyScalar(a.factor*a.radius).add(ic),e.parent&&e.parent.worldToLocal(ci),e.position.copy(ci))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function ui(e,t){e.traverse(r=>Ka(r,t))}function Dh(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function Ov(e,t,r,n){return JSON.stringify([e?.style?.material??null,t??null,r.shadingMode,r.rendererMode,n])}function Iv(e){if(e.textures){for(let t of Wr){let r=e.textures[t];r&&bn(r,ir(t))}e.textures=void 0}}function Bv(e,t,r){let n=e.textures??{};for(let i of Wr){let o=je(t,i),a=n[i];if(a===o)continue;let s=ir(i);a&&bn(a,s),o?(ba(o,s,r),n[i]=o):delete n[i]}e.textures=Object.keys(n).length>0?n:void 0}function zv(e,t){if(t.shadingMode==="normals")return yr(e,()=>new Sv);if(t.shadingMode==="unlit")return yr(e,r=>{let n=new wv;return n.color.copy(r.color),n.map=r.map,n.alphaMap=r.alphaMap,n.alphaTest=r.alphaTest,n.transparent=r.transparent,n.opacity=r.opacity,n.side=r.side,n});if(t.rendererMode==="matcap"){let r=xa();return yr(e,n=>{let i=new Mv;return i.matcap=r,i.color.copy(n.color),i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.side=n.side,i})}return e}function Nv(e,t){if(!$t(e))return;let n=Dh(e);n.original??(n.original=uo(e));let i=Ya(e,t);if(!i){n.original&&(e.material=n.original),e.visible=!0;return}let{key:o,binding:a}=i;e.visible=a.visible!==!1,Ka(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,c=t.highlightOnHover!==!1&&o===t.hoveredKey,l=Ov(a,s,t,c);if(n.signature===l&&n.display){e.material=n.display;return}let p=a.style?.material;if(Bv(n,p,t.invalidate),!n.physical){let d=n.original??uo(e);if(!d)return;n.physical=yr(d,h=>{let m=ua(h),f=da(m??new Cv);return pa(f),f})}Yt(n.physical,d=>{za(d,p,s??p?.baseColor),c&&(d.emissive.add(eo),d.color.lerp(sp,lp)),d.needsUpdate=!0}),n.display&&n.display!==n.physical&&Yt(n.display,d=>d.dispose()),n.display=zv(n.physical,t),n.signature=l,e.material=n.display}function Oh(e,t){e.traverse(r=>Nv(r,t))}function ac(e){e.traverse(t=>{if(!$t(t))return;let r=t.userData.riVisuals;r&&(r.rest&&(t.matrixAutoUpdate=!0,t.position.copy(r.rest.position),t.rotation.copy(r.rest.rotation),t.scale.copy(r.rest.scale),t.updateMatrix()),r.original&&(t.material=r.original),r.display&&r.display!==r.physical&&Yt(r.display,n=>n.dispose()),r.physical&&Yt(r.physical,n=>n.dispose()),Iv(r),delete t.userData.riVisuals)})}var jh=new Nh().makeRotationX(Math.PI/2),Bh=jh.clone().invert();function Vv(e){let t=new Ar(e[0],e[1],e[2]),r=new Ar(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new zh(t.clone().sub(r),t.clone().add(r))}function Gv(e){let t=e.getCenter(new Ar),r=e.getSize(new Ar).multiplyScalar(.5);return[t.x,t.y,t.z,r.x,0,0,0,r.y,0,0,0,r.z]}var Qa=class{constructor(){this.group=new Ih;this.objects=new Map;this.geometry=new jv(1,1,1);this.material=new Fv;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let r of t){let n=new zh(new Ar(...r.minimum),new Ar(...r.maximum)).applyMatrix4(Bh),i=new Ih;i.name=r.name,i.userData.ri_name=r.name,i.userData.riLogicalObject=!0,i.userData.ri_center=n.getCenter(new Ar).toArray();let o=new Uv(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(n.getCenter(new Ar)),o.scale.copy(n.getSize(new Ar)),i.add(o),this.group.add(i),this.objects.set(r.name,i)}this.signature="",this.lastContext=null}nodesByBinding(t){let r={};for(let[n,i]of this.objects){let o=t.keyByModelObject[n]??n;t.objectBindings[o]&&(r[o]=i)}return r}sync(t,r,n=!1){if(!n&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=n;let i={...t,suspendTransforms:!1},o=r?t.objectBindings[r]:void 0,a=o?this.objects.get(o.modelObjectId??r):void 0;n&&a&&o&&(i={...i,objectBindings:{...t.objectBindings,[r]:{...o,transform:{position:a.position.toArray(),rotation:[a.rotation.x,a.rotation.y,a.rotation.z],scale:a.scale.toArray()}}}});for(let c of this.objects.values())n&&c===a||Ka(c,i);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new Nh)||this.transforms.set(c,jh.clone().multiply(l.matrix).multiply(Bh))}return this.lastEffective=i,i}updateBounds(t){if(!t)return;let r=n=>{if(this.tileVersions.get(n)!==this.version){if(n.boundingVolume.box&&this.tileVersions.get(n)!==this.version){let i=this.originalBounds.get(n);i||(i={box:[...n.boundingVolume.box],error:n.geometricError},this.originalBounds.set(n,i));let o=Vv(i.box),a=o.clone(),s=1;for(let l of n.extras?.featureIds??[]){let p=this.transforms.get(l);p&&(a.union(o.clone().applyMatrix4(p)),s=Math.max(s,p.getMaxScaleOnAxis()))}let c=Gv(a);n.boundingVolume.box=c,n.geometricError=i.error*s,n.engineData?.boundingVolume?.setObbData(c,n.engineData.transform),this.tileVersions.set(n,this.version)}n.children?.forEach(r)}};r(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var sc=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),mo=16,lc=1.25,Hv=1.5,Wv=1.25,Xv=500,qv=3e3,Uh=5e3,Fh=2e3,$v=.9;function Vh(e){return e.full&&(e.wanting||e.usage>1)}function Gh(e){return e.loosened?qv:Xv}function Hh(e){let t=e.factor/Wv;return t<=1+1e-6?1:t}function Wh(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<$v&&Hh(e)>e.tooFine}function Xh(e,t){let{now:r}=t,n=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(Vh(t)){if(r-n.changedAt<Gh(n))return n;let i=Math.max(n.tooFine,n.factor);return n.factor>=mo?n.loosened&&n.tooFine===i?n:{...n,loosened:!0,tooFine:i,changedAt:r}:{factor:Math.min(mo,n.factor*Hv),loosened:!0,tooFine:i,raisedAt:r,changedAt:r}}return n.loosened&&!t.wanting?{...n,loosened:!1,changedAt:r}:Wh(n,t)&&r-n.raisedAt>=Uh&&r-n.changedAt>=Fh?{...n,factor:Hh(n),changedAt:r}:n}function qh(e,t){let{now:r}=t;return Vh(t)?e.factor>=mo&&e.loosened?null:Math.max(0,Gh(e)-(r-e.changedAt)):e.loosened&&!t.wanting?0:Wh(e,t)?Math.max(0,Uh-(r-e.raisedAt),Fh-(r-e.changedAt)):null}function Qh(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function cc(e){if(!e)return null;let t=e.length,r=e.indexOf("?"),n=e.indexOf("#");r!==-1&&(t=Math.min(t,r)),n!==-1&&(t=Math.min(t,n));let i=e.lastIndexOf(".",t),o=e.lastIndexOf("/",t),a=e.indexOf("://");return a!==-1&&a+2===o||i===-1||i<o?null:e.substring(i+1,t)||null}var Za,fo=(Za=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:r}=this,n,i=()=>{r.delete(n),e()};return n=t?t.requestAnimationFrame(i):requestAnimationFrame(i),r.set(n,e),n}static cancelAnimationFrame(e){let{pending:t,session:r}=this;t.delete(e),r?r.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},hl(Za,"pending",new Map),hl(Za,"session",null),Za),$h=2**30,yo=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,r)=>{let n=e(t),i=e(r);return n<i?-1:+(n>i)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*$h,this.maxBytesSize=.4*$h,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:r,itemSet:n}=this;n.has(e)&&(this.cachedBytes-=r.get(e)||0,r.set(e,t),this.cachedBytes+=t)}add(e,t){let r=this.itemSet;if(r.has(e)||this.isFull())return!1;let n=this.usedSet,i=this.itemList,o=this.callbacks;return i.push(e),n.add(e),r.set(e,Date.now()),o.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,r=this.itemSet,n=this.itemList,i=this.bytesMap,o=this.callbacks,a=this.loadedSet;if(r.has(e)){this.cachedBytes-=i.get(e)||0,i.delete(e),o.get(e)(e);let s=n.indexOf(e);return n.splice(s,1),t.delete(e),r.delete(e),o.delete(e),a.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:r,loadedSet:n}=this;r.has(e)&&(t===!0?n.add(e):n.delete(e))}markUsed(e){let t=this.itemSet,r=this.usedSet;t.has(e)&&!r.has(e)&&(t.set(e,Date.now()),r.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:r,itemList:n,itemSet:i,usedSet:o,loadedSet:a,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:p}=this,d=n.length-o.size,h=n.length-a.size,m=Math.max(Math.min(n.length-t,d),0),f=this.cachedBytes-l,b=this.unloadPriorityCallback||this.defaultPriorityCallback,P=!1,C=m>0&&d>0||h&&n.length>r;if(d&&this.cachedBytes>l||h&&this.cachedBytes>p||C){n.sort((U,_)=>{let S=o.has(U);if(S===o.has(_)){let A=a.has(U);return A===a.has(_)?-b(U,_):A?1:-1}else return S?1:-1});let k=Math.max(t*e,m*e),y=Math.ceil(Math.min(k,d,m)),j=Math.max(e*f,e*l),L=Math.min(j,f),w=0,I=0;for(;this.cachedBytes-I>p||n.length-w>r;){let U=n[w],_=c.get(U)||0;if(o.has(U)&&a.has(U)||this.cachedBytes-I-_<p&&n.length-w<=r)break;I+=_,w++}for(;I<L||w<y;){let U=n[w],_=c.get(U)||0;if(o.has(U)||this.cachedBytes-I-_<l&&w>=y)break;I+=_,w++}n.splice(0,w).forEach(U=>{this.cachedBytes-=c.get(U)||0,s.get(U)(U),c.delete(U),i.delete(U),s.delete(U),a.delete(U),o.delete(U)}),P=w<m||I<f&&w<d,P&&(P=w>0)}P&&(this.unloadingHandle=fo.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){fo.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},Yv=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},vr=class{get running(){return this.items.length!==0||this.currJobs!==0}constructor(){this.maxJobs=6,this.items=[],this.callbacks=new Map,this.currJobs=0,this.scheduled=!1,this.autoUpdate=!0,this.priorityCallback=null,this._schedulingCallback=e=>{fo.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let r={callback:t,reject:null,resolve:null,promise:null};return r.promise=new Promise((n,i)=>{let o=this.items,a=this.callbacks;r.resolve=n,r.reject=i,o.unshift(e),a.set(e,r),this.autoUpdate&&this.scheduleJobRun()}),r.promise}remove(e){let t=this.items,r=this.callbacks,n=t.indexOf(e);if(n!==-1){let i=r.get(e);i.promise.catch(o=>{if(o.name!=="AbortError")throw o}),i.reject(new Yv),t.splice(n,1),r.delete(e)}}removeByFilter(e){let{items:t}=this;for(let r=0;r<t.length;r++){let n=t[r];e(n)&&(this.remove(n),r--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,r=this.maxJobs,n=0,i=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;r>this.currJobs&&e.length>0&&n<r;){this.currJobs++,n++;let o=e.pop(),{callback:a,resolve:s,reject:c}=t.get(o);t.delete(o);let l;try{l=a(o)}catch(p){c(p),i();continue}l instanceof Promise?l.then(s).catch(c).finally(i):(s(l),i())}}flush(e){let{items:t,callbacks:r}=this,n=t.indexOf(e);if(!r.has(e))return;let{callback:i,resolve:o,reject:a}=r.get(e);r.delete(e),t.splice(n,1);let s;try{s=i(e)}catch(c){a(c);return}return s instanceof Promise?s.then(o).catch(a):o(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},ns=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,r,n=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let i=e===null?null:Qh(e),o=this.originQueues.get(i);o||(o=new vr,o.maxJobs=this._maxJobsPerOrigin,o.priorityCallback=this._priorityCallback,this.originQueues.set(i,o));let a=this._itemQueues.get(t);if(a&&a!==o&&a.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,o);let s=o.add(t,r);return n!==null&&(n.aborted?this.remove(t):n.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var _n=6378137,Kv=1/298.257223563,dc=6356752314245179e-9,Ja={inView:!1,error:1/0,distanceFromCamera:1/0};function is(e){return e===4||e===-1}function Rr(e,t){return os(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function os(e){return!!e.traversal}function vo(e){let{children:t}=e,r=t.length===0||os(t[t.length-1]),n=!e.internal.hasUnrenderableContent||is(e.internal.loadingState);return r&&n}function Cn(e){return e.traversal.unconditionallyRefine}function go(e,t){if(os(e)&&(t.ensureChildrenArePreprocessed(e),e.traversal.lastFrameVisited!==t.frameCount&&(e.traversal.wasInFrustum=e.traversal.inFrustum,e.traversal.wasSetActive=e.traversal.active,e.traversal.wasSetVisible=e.traversal.visible,e.traversal.usedLastFrame=e.traversal.used,e.traversal.lastFrameVisited=t.frameCount,e.traversal.used=!1,e.traversal.inFrustum=!1,e.traversal.isLeaf=!1,e.traversal.visible=!1,e.traversal.active=!1,e.traversal.error=1/0,e.traversal.distanceFromCamera=1/0,e.traversal.allChildrenReady=!1,e.traversal.allChildrenLoaded=!1,e.traversal.kicked=!1,e.traversal.allUsedChildrenProcessed=!1,t.calculateTileViewErrorWithPlugin(e,Ja),e.traversal.inFrustum=Ja.inView,e.traversal.error=Ja.error,e.traversal.distanceFromCamera=Ja.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let r=e.parent;for(;r&&r.traversal.unconditionallyRefine;)r=r.parent;r&&r.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function uc(e,t,r=!1){if(go(e,t),r?t.markTileUsed(e):es(e),Cn(e)&&vo(e)){let n=e.children;for(let i=0,o=n.length;i<o;i++)uc(n[i],t,r)}}function Jh(e,t){if(go(e,t),e.traversal.usedLastFrame&&(es(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Cn(e))&&vo(e))){let r=e.children;for(let n=0,i=r.length;n<i;n++)Jh(r[n],t)}}function es(e){e.traversal.used=!0}function Qv(e,t){return!(e.traversal.error<=t.errorTarget&&!Cn(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!vo(e))}function Zh(e,t){let{frameCount:r}=t,{children:n}=e;for(let i=0,o=n.length;i<o;i++){let a=n[i];Rr(a,r)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),Zh(a,t))}}function Yh(e){return!Cn(e)&&(!e.internal.hasContent||is(e.internal.loadingState))}function em(e,t){if(go(e,t),!e.traversal.inFrustum)return;let r=e.parent;if(r&&r.refine==="ADD"&&e.geometricError>0&&e.traversal.error*(r.geometricError/e.geometricError)<=t.errorTarget)return;if(!Qv(e,t)){es(e);return}let n=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let c=o[a];em(c,t),n||(n=Rr(c,t.frameCount)),i||(i=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!i&&o.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let a=0,s=o.length;a<s;a++)uc(o[a],t,!0);return}if(es(e),e.refine==="REPLACE"&&n&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)uc(o[a],t)}function tm(e,t){let r=t.frameCount;if(!Rr(e,r))return;let n=e.children,i=!1;for(let a=0,s=n.length;a<s;a++){let c=n[a];i||(i=Rr(c,r))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,c=n.length;s<c;s++)tm(n[s],t);let a=!0;for(let s=0,c=n.length;s<c;s++){let l=n[s];if(Rr(l,r)){let p=!Cn(l),d=!l.internal.hasContent||is(l.internal.loadingState);p&&d||l.traversal.allChildrenLoaded||(a=!1)}}e.traversal.allChildrenLoaded=a}let o=!0;for(let a=0,s=n.length;a<s;a++){let c=n[a];Rr(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&vo(e)}function rm(e,t){if(!Rr(e,t.frameCount))return;let r=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Cn(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Cn(e)&&(e.traversal.active=!0,vo(e)&&e.internal.hasContent&&!is(e.internal.loadingState)))for(let i=0,o=r.length;i<o;i++)Jh(r[i],t);return}let n=r.length>0;for(let i=0,o=r.length;i<o;i++){let a=r[i];rm(a,t),Rr(a,t.frameCount)&&!(a.traversal.active&&Yh(a))&&!a.traversal.allChildrenReady&&(n=!1)}e.traversal.allChildrenReady=n,e.refine==="REPLACE"&&!n&&e.traversal.wasSetActive&&Yh(e)&&(e.traversal.active=!0,Zh(e,t))}function nm(e,t){go(e,t);let r=Rr(e,t.frameCount);if(r&&(e.internal.hasUnrenderableContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.hasRenderableContent&&e.refine==="ADD"&&(e.traversal.active=!0),(e.traversal.active||e.traversal.kicked)&&e.internal.hasContent&&(t.markTileUsed(e),e.traversal.allUsedChildrenProcessed&&t.queueTileForDownload(e),e.internal.loadingState!==4&&(e.traversal.active=!1)),t.loadAncestors&&e.internal.hasContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.virtualChildCount>0&&e.internal.hasContent&&t.markTileUsed(e),e.traversal.visible=e.internal.hasRenderableContent&&e.traversal.active&&e.traversal.inFrustum&&e.internal.loadingState===4,t.stats.used++,e.traversal.inFrustum&&t.stats.inFrustum++),r||os(e)&&e.traversal.usedLastFrame){let n=!1,i=!1;r?(n=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):go(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(n&&t.stats.active++,i&&t.stats.visible++,e.traversal.wasSetActive!==n&&t.invokeOnePlugin(a=>a.setTileActive&&a.setTileActive(e,n)),e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setTileVisible&&a.setTileVisible(e,i))):e.internal.hasRenderableContent||(i=e.traversal.isLeaf,e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setEmptyTileVisible&&a.setEmptyTileVisible(e,i))),e.traversal.visible=i,e.traversal.active=n;let o=e.children;for(let a=0,s=o.length;a<s;a++){let c=o[a];nm(c,t)}}}function Jv(e,t){em(e,t),tm(e,t),rm(e,t),nm(e,t)}function Zv(e){let t=null;return()=>{t===null&&(t=fo.requestAnimationFrame(()=>{t=null,e()}))}}function ex(e,t=null,r=null){let n=[];for(n.push(e),n.push(null),n.push(0);n.length>0;){let i=n.pop(),o=n.pop(),a=n.pop();if(t&&t(a,o,i)){r&&r(a,o,i);return}let s=a.children;if(s)for(let c=s.length-1;c>=0;c--)n.push(s[c]),n.push(a),n.push(i+1);r&&r(a,o,i)}}var Kh=Symbol("PLUGIN_REGISTERED"),Qr={inView:!0,error:0,distance:1/0},tx=(e,t)=>{let r=e.priority||0,n=t.priority||0;return r===n?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:r>n?1:-1},rx=(e,t)=>e.traversal.used===t.traversal.used?e.traversal.inFrustum===t.traversal.inFrustum?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.internal.hasUnrenderableContent?1:-1:e.traversal.inFrustum?1:-1:e.traversal.used?1:-1,nx=(e,t)=>e.traversal.lastFrameVisited===t.traversal.lastFrameVisited?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?e.internal.loadingState===t.internal.loadingState?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.error===t.traversal.error?0:e.traversal.error>t.traversal.error?-1:1:e.internal.hasUnrenderableContent?-1:1:e.internal.loadingState>t.internal.loadingState?-1:1:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?1:-1:e.traversal.lastFrameVisited>t.traversal.lastFrameVisited?-1:1,di=(e,t)=>{let r=e.priority??1/0,n=t.priority??1/0;if(r!==n)return r>n?1:-1;if(!e.internal||!t.internal)return 0;let i=e.internal.renderer,o=t.internal.renderer,a=!i.loadAncestors,s=!o.loadAncestors;return a&&s?rx(e,t):tx(e,t)},pc=new yo;pc.unloadPriorityCallback=nx;var bo=new ns;bo.maxJobsPerOrigin=25,bo.priorityCallback=di;var ts=new vr;ts.maxJobs=5,ts.priorityCallback=di;var rs=new vr;rs.maxJobs=25,rs.priorityCallback=(e,t)=>{let r=e.parent,n=t.parent;return r===n?0:r?n?di(r,n):-1:1};var hc=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,r=e.queued+e.downloading+e.parsing,n=e.inCacheSinceLoad+ +!!t;return n===0?1:1-r/n}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof vr){console.warn('TilesRenderer: "downloadQueue" is no longer valid as a PriorityQueue. Use a DownloadPriorityQueue, instead.');return}this._downloadQueue=e}constructor(e=null){this.rootLoadingState=0,this.rootTileset=null,this.rootURL=e,this.fetchOptions={},this.plugins=[],this.queuedTiles=[],this.cachedSinceLoadComplete=new Set,this.isLoading=!1,this.processedTiles=new WeakSet,this.visibleTiles=new Set,this.activeTiles=new Set,this.usedSet=new Set,this.loadingTiles=new Set,this.lruCache=pc,this.downloadQueue=bo,this.parseQueue=ts,this.processNodeQueue=rs,this.stats={inCacheSinceLoad:0,inCache:0,queued:0,downloading:0,parsing:0,loaded:0,failed:0,inFrustum:0,used:0,active:0,visible:0,tilesProcessed:0},this.frameCount=0,this._dispatchNeedsUpdateEvent=Zv(()=>{this.dispatchEvent({type:"needs-update"})}),this.errorTarget=16,this.errorFalloff=0,this.errorFalloffDensity=2e-4,this.displayActiveTiles=!1,this.maxDepth=1/0,this.loadSiblings=!0,this.loadAncestors=!0,this.maxTilesProcessed=250}registerPlugin(e){if(e[Kh]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,r=e.priority||0,n=t.length;for(let i=0;i<t.length;i++)if((t[i].priority||0)>r){n=i;break}t.splice(n,0,e),e[Kh]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let r=t.indexOf(e);return t.splice(r,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let r=0;r<t.length;r++){let n=e(t[r]);if(n)return n}return null}invokeAllPlugins(e){let t=[...this.plugins,this],r=[];for(let n=0;n<t.length;n++){let i=e(t[n]);i&&r.push(i)}return r.length===0?null:Promise.all(r)}traverse(e,t,r=!0){this.root&&ex(this.root,(n,...i)=>(r&&this.ensureChildrenArePreprocessed(n,!0),e?e(n,...i):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:r,root:n,downloadQueue:i,parseQueue:o,processNodeQueue:a}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let p=this.rootURL;p!==null&&this.invokeAllPlugins(d=>p=d.preprocessURL?d.preprocessURL(p,null):p),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:p}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:p})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!n)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let p=l.doTilesNeedUpdate();s=s===null?p:!!(s||p)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),r.inFrustum=0,r.used=0,r.active=0,r.visible=0,r.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),Jv(n,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,p=c.length;l<p&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(i.running||o.running||a.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),r.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:r,errorFalloffDensity:n}=this;if(r>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*n;t.error-=r*(1-Math.exp(-s*s))}let i=null,o=0,a=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(Qr.inView=!0,Qr.error=0,Qr.distance=1/0,s.calculateTileViewError(e,Qr)&&(i===null&&(i=!0),i&&(i=Qr.inView),Qr.inView&&(a=Math.min(a,Qr.distance),o=Math.max(o,Qr.error))))}),t.inView&&i!==!1?(t.error=Math.max(t.error,o),t.distanceFromCamera=Math.min(t.distanceFromCamera,a)):i?(t.inView=!0,t.error=o,t.distanceFromCamera=a):t.inView=!1}dispose(){[...this.plugins].forEach(r=>{this.unregisterPlugin(r)});let e=this.lruCache,t=[];this.traverse(r=>(t.push(r),!1),null,!1);for(let r=0,n=t.length;r<n;r++)e.remove(t[r]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,r){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(r=>r.setTileVisible&&r.setTileVisible(e,!1)):this.invokeOnePlugin(r=>r.setEmptyTileVisible&&r.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(r=>r.setTileActive&&r.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,r=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=r,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let n=cc(e.content.uri),i=!!(n&&/json$/.test(n));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=i,e.internal.hasRenderableContent=!i}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;r?(e.internal.depth=r.internal.depth+1,e.internal.depthFromRenderedParent=r.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},r===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||r.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(n=>{n!==this&&n.preprocessNode&&n.preprocessNode(e,t,r)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,r=[];for(let n of t)!e.isUsed(n)&&n.internal.loadingState===1&&r.push(n);for(let n=0;n<r.length;n++)e.remove(r[n])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let r=e.children;if(r.length===0||r[r.length-1].traversal)return;let n=i=>{for(let o=0,a=i.length;o<a;o++){let s=i[o];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),n(r)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,i=>{n(i.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(r=>{r.calculateBytesUsed&&(t+=r.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:r}=this;e===null?t.itemSet.forEach(n=>{r.has(n)&&t.setMemoryUsage(n,this.getBytesUsed(n))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,r=null){let[n,i]=e.asset.version.split(".").map(a=>parseInt(a));console.assert(n<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),n===1&&i>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let o=t.replace(/\/[^/]*$/,"");o=new URL(o,window.location.href).toString(),this.preprocessNode(e.root,o,r)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,r=null,n=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(h=>n=h.preprocessURL?h.preprocessURL(n,e):n);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=cc(n),p=new AbortController,d=p.signal;if(o.add(e,h=>{p.abort(),t?h.children.length=0:this.invokeAllPlugins(m=>{m.disposeTile&&m.disposeTile(h)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),h.internal.loadingState===1?i.queued--:h.internal.loadingState===2?i.downloading--:h.internal.loadingState===3?i.parsing--:h.internal.loadingState===4&&i.loaded--,h.internal.loadingState=0,s.remove(h),a.remove(h),c.delete(h)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,c.add(e),a.add(n,e,h=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let m=this.invokeOnePlugin(f=>f.fetchData&&f.fetchData(n,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:n,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),m}).then(h=>{if(!d.aborted){if(!(h instanceof Response))return h;if(h.ok)return l==="json"?h.json():h.arrayBuffer();throw Error(`Failed to load model with error code ${h.status}`)}}).then(h=>{if(!d.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,m=>d.aborted?Promise.resolve():l==="json"&&h.root?(this.preprocessTileset(h,n,e),e.children.push(h.root),r=h,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(h,m,l,n,d)))}).then(()=>{if(d.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,c.delete(e),o.setLoaded(e,!0);let h=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&h>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,h),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:r,url:n}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:n})}).catch(h=>{d.aborted||(h.name==="AbortError"?o.remove(e):(s.remove(e),a.remove(e),e.internal.loadingState===1?i.queued--:e.internal.loadingState===2?i.downloading--:e.internal.loadingState===3?i.parsing--:e.internal.loadingState===4&&i.loaded--,i.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(h),e.internal.loadingState=-1,c.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:h,url:n})))})}};function Tn(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let r="";for(let n=0;n<4;n++)r+=String.fromCharCode(t.getUint8(n));return r}var ix=new TextDecoder;function im(e){return ix.decode(e)}function as(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var pi=class{constructor(){this.fetchOptions={},this.workingPath=""}loadAsync(e){return fetch(e,this.fetchOptions).then(t=>{if(!t.ok)throw Error(`Failed to load file "${e}" with status ${t.status} : ${t.statusText}`);return t.arrayBuffer()}).then(t=>(this.workingPath===""&&(this.workingPath=as(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function mc(e,t,r,n,i,o){let a;switch(n){case"SCALAR":a=1;break;case"VEC2":a=2;break;case"VEC3":a=3;break;case"VEC4":a=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${o}".`)}let s,c=r*a;switch(i){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${o}".`)}return s}var xo=class{constructor(e,t,r,n){this.buffer=e,this.binOffset=t+r,this.binLength=n;let i=null;if(r!==0){let o=new Uint8Array(e,t,r);i=JSON.parse(im(o))}else i={};this.header=i}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,r=null,n=null){let i=this.header;if(!(e in i))return null;let o=i[e];if(!(o instanceof Object)||Array.isArray(o))return o;{let{buffer:a,binOffset:s,binLength:c}=this,l=o.byteOffset||0,p=o.type||n,d=o.componentType||r;if("type"in o&&n&&o.type!==n)throw Error("FeatureTable: Specified type does not match expected type.");let h=s+l,m=mc(a,h,t,p,d,e);if(h+m.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return m}}getBuffer(e,t){let{buffer:r,binOffset:n}=this;return r.slice(n+e,n+e+t)}},ox=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let n of this.classes){let i=n.instances;for(let o in i)n.instances[o]=this._parseProperty(i[o],n.length,o)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let n=this.parentCounts.reduce((i,o)=>i+o,0);this.parentIds=this._parseProperty(t.parentIds,n,"parentIds")}else this.parentIds=null;this.instancesIds=[];let r={};for(let n of this.classIds)r[n]=r[n]??0,this.instancesIds.push(r[n]),r[n]++}_parseProperty(e,t,r){if(Array.isArray(e))return e;{let{buffer:n,binOffset:i}=this.batchTable,o=e.byteOffset,a=e.componentType||"UNSIGNED_SHORT";return mc(n,i+o,t,"SCALAR",a,r)}}getDataFromId(e,t={}){let r=this.parentCounts[e];if(this.parentIds&&r>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<r;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let n=this.classIds[e],i=this.classes[n].instances,o=this.classes[n].name,a=this.instancesIds[e];for(let s in i)t[o]=t[o]||{},t[o][s]=i[s][a];return t}},ss=class extends xo{constructor(e,t,r,n,i){super(e,r,n,i),this.count=t,this.extensions={};let o=this.header.extensions;o&&o["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new ox(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let r of this.getKeys())t[r]=super.getData(r,this.count)[e];for(let r in this.extensions){let n=this.extensions[r];n.getDataFromId instanceof Function&&(t[r]=t[r]||{},n.getDataFromId(e,t[r]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},fc=class extends pi{parse(e){let t=new DataView(e),r=Tn(t);console.assert(r==="b3dm");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new xo(e.slice(28,28+o+a),0,o,a),p=28+o+a,d=new ss(e.slice(p,p+s+c),l.getData("BATCH_LENGTH"),0,s,c),h=p+s+c;return{version:n,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,h,i-h)}}},gc=class extends pi{parse(e){let t=new DataView(e),r=Tn(t);console.assert(r==="i3dm");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),p=new xo(e.slice(32,32+o+a),0,o,a),d=32+o+a,h=new ss(e.slice(d,d+s+c),p.getData("INSTANCES_LENGTH"),0,s,c),m=d+s+c,f=new Uint8Array(e,m,i-m),b=null,P=null,C=null;if(l)b=f,P=Promise.resolve();else{let k=this.resolveExternalURL(im(f));C=as(k),P=fetch(k,this.fetchOptions).then(y=>{if(!y.ok)throw Error(`I3DMLoaderBase : Failed to load file "${k}" with status ${y.status} : ${y.statusText}`);return y.arrayBuffer()}).then(y=>{b=new Uint8Array(y)})}return P.then(()=>({version:n,featureTable:p,batchTable:h,glbBytes:b,gltfWorkingPath:C}))}},bc=class extends pi{parse(e){let t=new DataView(e),r=Tn(t);console.assert(r==="pnts");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new xo(e.slice(28,28+o+a),0,o,a),p=28+o+a,d=new ss(e.slice(p,p+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:n,featureTable:l,batchTable:d})}},yc=class extends pi{parse(e){let t=new DataView(e),r=Tn(t);console.assert(r==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let n=t.getUint32(4,!0);console.assert(n===1,'CMPTLoader: The version listed in the header is "1".');let i=t.getUint32(8,!0);console.assert(i===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let o=t.getUint32(12,!0),a=[],s=16;for(let c=0;c<o;c++){let l=new DataView(e,s,12),p=Tn(l),d=l.getUint32(4,!0),h=l.getUint32(8,!0),m=new Uint8Array(e,s,h);a.push({type:p,buffer:m,version:d}),s+=h}return{version:n,tiles:a}}};import{Box3 as xm,BufferAttribute as Pn,BufferGeometry as ax,Clock as H_,Color as sx,DefaultLoadingManager as bs,Euler as lx,EventDispatcher as ls,Frustum as cx,Group as Ec,InstancedMesh as ux,LoadingManager as dx,MathUtils as wm,Matrix3 as px,Matrix4 as lt,Mesh as W_,OrthographicCamera as X_,PerspectiveCamera as q_,Plane as hx,PlaneGeometry as $_,Points as mx,PointsMaterial as fx,Quaternion as Mm,Ray as Ac,Raycaster as Y_,ShaderMaterial as K_,Sphere as Sm,Spherical as gx,TextureUtils as bx,Vector2 as Rc,Vector3 as ve}from"three";import{GLTFLoader as Lc}from"three/addons/loaders/GLTFLoader.js";import{estimateBytesUsed as yx}from"three/addons/utils/BufferGeometryUtils.js";var kc=class extends fc{constructor(e=bs){super(),this.manager=e,this.adjustmentTransform=new lt}parse(e){let t=super.parse(e),r=t.glbBytes.slice().buffer;return new Promise((n,i)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new Lc(o);a.credentials==="include"&&a.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in a&&s.setWithCredentials(a.credentials==="include"),a.headers&&s.setRequestHeader(a.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(r,c,p=>{let{batchTable:d,featureTable:h}=t,{scene:m}=p,f=h.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(m.position.x+=f[0],m.position.y+=f[1],m.position.z+=f[2]),p.scene.updateMatrix(),p.scene.matrix.multiply(l),p.scene.matrix.decompose(p.scene.position,p.scene.quaternion,p.scene.scale),p.batchTable=d,p.featureTable=h,m.batchTable=d,m.featureTable=h,n(p)},i)})}};function vx(e){let t=e>>11,r=e>>5&63,n=e&31;return[Math.round(t/31*255),Math.round(r/63*255),Math.round(n/31*255)]}var wo=new Rc;function xx(e,t,r=new ve){wo.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),r.set(wo.x,wo.y,1-Math.abs(wo.x)-Math.abs(wo.y));let n=wm.clamp(-r.z,0,1);return r.x>=0?r.setX(r.x-n):r.setX(r.x+n),r.y>=0?r.setY(r.y-n):r.setY(r.y+n),r.normalize(),r}var om={RGB:"color",POSITION:"position"},Dc=class extends bc{constructor(e=bs){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:r,batchTable:n}=t,i=new fx,o=r.header.extensions,a=new ve,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:p,byteLength:d,properties:h}=o["3DTILES_draco_point_compression"],m=this.manager.getHandler("draco.drc");if(m==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let C in h)if(C in om&&C in h){let k=om[C];f[k]=h[C]}let b={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},P=r.getBuffer(p,d);s=await m.decodeGeometry(P,b),s.attributes.color&&(i.vertexColors=!0)}else{let p=r.getData("POINTS_LENGTH"),d=r.getData("POSITION",p,"FLOAT","VEC3"),h=r.getData("NORMAL",p,"FLOAT","VEC3"),m=r.getData("NORMAL",p,"UNSIGNED_BYTE","VEC2"),f=r.getData("RGB",p,"UNSIGNED_BYTE","VEC3"),b=r.getData("RGBA",p,"UNSIGNED_BYTE","VEC4"),P=r.getData("RGB565",p,"UNSIGNED_SHORT","SCALAR"),C=r.getData("CONSTANT_RGBA",p,"UNSIGNED_BYTE","VEC4"),k=r.getData("POSITION_QUANTIZED",p,"UNSIGNED_SHORT","VEC3"),y=r.getData("QUANTIZED_VOLUME_SCALE",p,"FLOAT","VEC3"),j=r.getData("QUANTIZED_VOLUME_OFFSET",p,"FLOAT","VEC3");if(s=new ax,k){let L=new Float32Array(p*3);for(let w=0;w<p;w++)for(let I=0;I<3;I++){let U=3*w+I;L[U]=k[U]/65535*y[I]}a.x=j[0],a.y=j[1],a.z=j[2],s.setAttribute("position",new Pn(L,3,!1))}else s.setAttribute("position",new Pn(d,3,!1));if(h!==null)s.setAttribute("normal",new Pn(h,3,!1));else if(m!==null){let L=new Float32Array(p*3),w=new ve;for(let I=0;I<p;I++){let U=m[I*2],_=m[I*2+1],S=xx(U,_,w);L[I*3]=S.x,L[I*3+1]=S.y,L[I*3+2]=S.z}s.setAttribute("normal",new Pn(L,3,!1))}if(b!==null)s.setAttribute("color",new Pn(b,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(f!==null)s.setAttribute("color",new Pn(f,3,!0)),i.vertexColors=!0;else if(P!==null){let L=new Uint8Array(p*3);for(let w=0;w<p;w++){let I=vx(P[w]);for(let U=0;U<3;U++){let _=3*w+U;L[_]=I[U]}}s.setAttribute("color",new Pn(L,3,!0)),i.vertexColors=!0}else if(C!==null){i.color=new sx(C[0],C[1],C[2]);let L=C[3]/255;L<1&&(i.opacity=L,i.transparent=!0,i.depthWrite=!1)}}let c=new mx(s,i);c.position.copy(a),t.scene=c,t.scene.featureTable=r,t.scene.batchTable=n;let l=r.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function wx(e){let{x:t,y:r,z:n}=e;e.x=n,e.y=t,e.z=r}function Mx(e){return-e+Math.PI/2}var am=new gx,Jr=new ve,Pt=new ve,vc=new ve,Kt=new lt,xr=new lt,xc=new Sm,Dt=new lx,sm=new ve,lm=new ve,cm=new ve,Mo=new ve,cs=new Ac,Sx=1e-12,Cx=.1;var Oc=class{constructor(e=1,t=1,r=1){this.name="",this.radius=new ve(e,t,r)}intersectRay(e,t){return Kt.makeScale(...this.radius).invert(),xc.center.set(0,0,0),xc.radius=1,cs.copy(e).applyMatrix4(Kt),cs.intersectSphere(xc,t)?(Kt.makeScale(...this.radius),t.applyMatrix4(Kt),t):null}getEastNorthUpFrame(e,t,r,n){return r.isMatrix4&&(n=r,r=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,sm,lm,cm),this.getCartographicToPosition(e,t,r,Mo),n.makeBasis(sm,lm,cm).setPosition(Mo)}getOrientedEastNorthUpFrame(e,t,r,n,i,o,a){return this.getObjectFrame(e,t,r,n,i,o,a,0)}getObjectFrame(e,t,r,n,i,o,a,s=2){return this.getEastNorthUpFrame(e,t,r,Kt),Dt.set(i,o,-n,"ZXY"),a.makeRotationFromEuler(Dt).premultiply(Kt),s===1?(Dt.set(Math.PI/2,0,0,"XYZ"),xr.makeRotationFromEuler(Dt),a.multiply(xr)):s===2&&(Dt.set(-Math.PI/2,0,Math.PI,"XYZ"),xr.makeRotationFromEuler(Dt),a.multiply(xr)),a}getCartographicFromObjectFrame(e,t,r=2){return r===1?(Dt.set(-Math.PI/2,0,0,"XYZ"),xr.makeRotationFromEuler(Dt).premultiply(e)):r===2?(Dt.set(-Math.PI/2,0,Math.PI,"XYZ"),xr.makeRotationFromEuler(Dt).premultiply(e)):xr.copy(e),Mo.setFromMatrixPosition(xr),this.getPositionToCartographic(Mo,t),this.getEastNorthUpFrame(t.lat,t.lon,0,Kt).invert(),xr.premultiply(Kt),Dt.setFromRotationMatrix(xr,"ZXY"),t.azimuth=-Dt.z,t.elevation=Dt.x,t.roll=Dt.y,t}getEastNorthUpAxes(e,t,r,n,i,o=Mo){this.getCartographicToPosition(e,t,0,o),this.getCartographicToNormal(e,t,i),r.set(-o.y,o.x,0).normalize(),n.crossVectors(i,r).normalize()}getCartographicToPosition(e,t,r,n){this.getCartographicToNormal(e,t,Jr);let i=this.radius;Pt.copy(Jr),Pt.x*=i.x**2,Pt.y*=i.y**2,Pt.z*=i.z**2;let o=Math.sqrt(Jr.dot(Pt));return Pt.divideScalar(o),n.copy(Pt).addScaledVector(Jr,r)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,Pt),this.getPositionToNormal(Pt,Jr);let r=vc.subVectors(e,Pt);return t.lon=Math.atan2(Jr.y,Jr.x),t.lat=Math.asin(Jr.z),t.height=Math.sign(r.dot(e))*r.length(),t}getCartographicToNormal(e,t,r){return am.set(1,Mx(e),t),r.setFromSpherical(am).normalize(),wx(r),r}getPositionToNormal(e,t){let r=this.radius;return t.copy(e),t.x/=r.x**2,t.y/=r.y**2,t.z/=r.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let r=this.radius,n=1/r.x**2,i=1/r.y**2,o=1/r.z**2,a=e.x*e.x*n,s=e.y*e.y*i,c=e.z*e.z*o,l=a+s+c,p=Math.sqrt(1/l),d=Pt.copy(e).multiplyScalar(p);if(l<Cx)return isFinite(p)?t.copy(d):null;let h=vc.set(d.x*n*2,d.y*i*2,d.z*o*2),m=(1-p)*e.length()/(.5*h.length()),f=0,b,P,C,k,y,j,L,w,I,U,_;do{m-=f,C=1/(1+m*n),k=1/(1+m*i),y=1/(1+m*o),j=C*C,L=k*k,w=y*y,I=j*C,U=L*k,_=w*y,b=a*j+s*L+c*w-1,P=a*I*n+s*U*i+c*_*o;let S=-2*P;f=b/S}while(Math.abs(b)>Sx);return t.set(e.x*C,e.y*k,e.z*y)}calculateHorizonDistance(e,t){let r=this.calculateEffectiveRadius(e);return Math.sqrt(2*r*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,r=1-this.radius.z**2/t**2,n=e*wm.DEG2RAD,i=Math.sin(n)**2;return t/Math.sqrt(1-r*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,Pt);let t=vc.subVectors(e,Pt);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(Kt.makeScale(...this.radius).invert(),cs.copy(e).applyMatrix4(Kt),Pt.set(0,0,0),cs.closestPointToPoint(Pt,t).normalize(),Kt.makeScale(...this.radius),t.applyMatrix4(Kt))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Po=new Oc(_n,_n,dc);Po.name="WGS84 Earth";var us=new ve,hi=new ve,mi=new ve,wc=new ve,ds=new Mm,ps=new ve,fi=new lt,um=new lt,dm=new ve,pm=new lt,Mc=new Mm,Sc={};function hm(e,t,r,n){if(e=e/r*2-1,t=t/r*2-1,n.x=e,n.y=t,n.z=1-Math.abs(e)-Math.abs(t),n.z<0){let i=n.x;n.x=(1-Math.abs(n.y))*(i>=0?1:-1),n.y=(1-Math.abs(i))*(n.y>=0?1:-1)}return n.normalize(),n}var Ic=class extends gc{constructor(e=bs){super(),this.manager=e,this.adjustmentTransform=new lt,this.ellipsoid=Po.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:r,batchTable:n}=t,i=t.glbBytes.slice().buffer;return new Promise((o,a)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new Lc(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let p=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(p)||(p+="/");let d=this.adjustmentTransform;l.parse(i,p,h=>{let m=r.getData("INSTANCES_LENGTH"),f=r.getData("POSITION",m,"FLOAT","VEC3"),b=r.getData("POSITION_QUANTIZED",m,"UNSIGNED_SHORT","VEC3"),P=r.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),C=r.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),k=r.getData("NORMAL_UP",m,"FLOAT","VEC3"),y=r.getData("NORMAL_RIGHT",m,"FLOAT","VEC3"),j=r.getData("NORMAL_UP_OCT32P",m,"UNSIGNED_SHORT","VEC2"),L=r.getData("NORMAL_RIGHT_OCT32P",m,"UNSIGNED_SHORT","VEC2"),w=r.getData("SCALE_NON_UNIFORM",m,"FLOAT","VEC3"),I=r.getData("SCALE",m,"FLOAT","SCALAR"),U=r.getData("RTC_CENTER",1,"FLOAT","VEC3"),_=r.getData("EAST_NORTH_UP");if(!f&&b){f=new Float32Array(m*3);for(let v=0;v<m;v++)f[v*3+0]=P[0]+b[v*3+0]/65535*C[0],f[v*3+1]=P[1]+b[v*3+1]/65535*C[1],f[v*3+2]=P[2]+b[v*3+2]/65535*C[2]}let S=new ve;for(let v=0;v<m;v++)S.x+=f[v*3+0]/m,S.y+=f[v*3+1]/m,S.z+=f[v*3+2]/m;let A=[],G=[];h.scene.updateMatrixWorld(),h.scene.traverse(v=>{if(v.isMesh){G.push(v);let{geometry:z,material:M}=v,O=new ux(z,M,m);O.position.copy(S),U&&(O.position.x+=U[0],O.position.y+=U[1],O.position.z+=U[2]),A.push(O)}});for(let v=0;v<m;v++){wc.set(f[v*3+0]-S.x,f[v*3+1]-S.y,f[v*3+2]-S.z),ds.identity(),k&&y?(hi.set(k[v*3+0],k[v*3+1],k[v*3+2]),mi.set(y[v*3+0],y[v*3+1],y[v*3+2]),us.crossVectors(mi,hi).normalize(),fi.makeBasis(mi,hi,us),ds.setFromRotationMatrix(fi)):j&&L&&(hm(j[v*2+0],j[v*2+1],65535,hi),hm(L[v*2+0],L[v*2+1],65535,mi),us.crossVectors(mi,hi).normalize(),fi.makeBasis(mi,hi,us),ds.setFromRotationMatrix(fi)),ps.set(1,1,1),w&&ps.set(w[v*3+0],w[v*3+1],w[v*3+2]),I&&ps.multiplyScalar(I[v]);for(let z=0,M=A.length;z<M;z++){let O=A[z];Mc.copy(ds),_&&(O.updateMatrixWorld(),dm.copy(wc).applyMatrix4(O.matrixWorld),this.ellipsoid.getPositionToCartographic(dm,Sc),this.ellipsoid.getEastNorthUpFrame(Sc.lat,Sc.lon,pm),Mc.setFromRotationMatrix(pm)),fi.compose(wc,Mc,ps).multiply(d);let N=G[z];um.multiplyMatrices(fi,N.matrixWorld),O.setMatrixAt(v,um)}}h.scene.clear(),h.scene.add(...A),h.batchTable=n,h.featureTable=r,h.scene.batchTable=n,h.scene.featureTable=r,o(h)},a)})})}},Cm=class extends yc{constructor(e=bs){super(),this.manager=e,this.adjustmentTransform=new lt,this.ellipsoid=Po.clone()}parse(e){let t=super.parse(e),{manager:r,ellipsoid:n,adjustmentTransform:i}=this,o=[];for(let a in t.tiles){let{type:s,buffer:c}=t.tiles[a];switch(s){case"b3dm":{let l=c.slice(),p=new kc(r);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions,p.adjustmentTransform.copy(i);let d=p.parse(l.buffer);o.push(d);break}case"pnts":{let l=c.slice(),p=new Dc(r);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions;let d=p.parse(l.buffer);o.push(d);break}case"i3dm":{let l=c.slice(),p=new Ic(r);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions,p.ellipsoid.copy(n),p.adjustmentTransform.copy(i);let d=p.parse(l.buffer);o.push(d);break}}}return Promise.all(o).then(a=>{let s=new Ec;return a.forEach(c=>{s.add(c.scene)}),{tiles:a,scene:s}})}},So=new lt,Tx=class extends Ec{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new lt}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?So.copy(this.matrix):So.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=So.elements,r=this.matrixWorld.elements,n=!1;for(let i=0;i<16;i++){let o=t[i],a=r[i];if(Math.abs(o-a)>2**-52){n=!0;break}}if(n){this.matrixWorld.copy(So),this.matrixWorldInverse.copy(So).invert();let i=this.children;for(let c=0,l=i.length;c<l;c++)i[c].updateMatrixWorld();let{tilesRenderer:o}=this,{activeTiles:a,visibleTiles:s}=o;a.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},_x=new Ac;function Px(e,t,r,n){let{scene:i}=e.engineData;r.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(e,i,t,n))||t.intersectObject(i,!0,n)}function Ex(e){return"traversal"in e}function Tm(e,t,r,n,i=null){if(!Ex(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=_x,i.copy(r.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&Px(t,r,e,n);let c=t.children;for(let l=0,p=c.length;l<p;l++)Tm(e,c[l],r,n,i)}var hs=new ve,ms=new ve,Ot=new ve,fs=new Ac,_c=class{constructor(e=new xm,t=new lt){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new lt,this.points=Array(8).fill().map(()=>new ve),this.planes=[,,,,,,].fill().map(()=>new hx)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,Ot).distanceTo(e)}containsPoint(e){return Ot.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Ot)}intersectsRay(e){return fs.copy(e).applyMatrix4(this.inverseTransform),fs.intersectsBox(this.box)}intersectRay(e,t){return fs.copy(e).applyMatrix4(this.inverseTransform),fs.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:r,box:n}=this;t.copy(r).invert();let{min:i,max:o}=n,a=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[a].set(s<0?i.x:o.x,c<0?i.y:o.y,l<0?i.z:o.z).applyMatrix4(r),a++;this.updatePlanes()}updatePlanes(){hs.copy(this.box.min).applyMatrix4(this.transform),ms.copy(this.box.max).applyMatrix4(this.transform),Ot.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Ot,hs),this.planes[1].setFromNormalAndCoplanarPoint(Ot,ms).negate(),Ot.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Ot,hs),this.planes[3].setFromNormalAndCoplanarPoint(Ot,ms).negate(),Ot.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Ot,hs),this.planes[5].setFromNormalAndCoplanarPoint(Ot,ms).negate()}intersectsSphere(e){return this.clampPoint(e.center,Ot),Ot.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let r=this.points,n=this.planes;for(let i=0;i<6;i++){let o=e[i],a=-1/0;for(let s=0;s<8;s++){let c=r[s],l=o.distanceToPoint(c);a=a<l?l:a}if(a<0)return!1}for(let i=0;i<6;i++){let o=n[i],a=-1/0;for(let s=0;s<8;s++){let c=t[s],l=o.distanceToPoint(c);a=a<l?l:a}if(a<0)return!1}return!0}},_o=Math.PI,Cc=_o/2,Co=new ve,En=new ve,or=new ve,ae=new ve,Et=new lt,Ax=new xm,mm=new lt;function Zr(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function fm(e){return e.x!==e.y}var _m=class extends Oc{constructor(e=1,t=1,r=1,n=-Cc,i=Cc,o=0,a=2*_o,s=0,c=0){super(e,t,r),this.latStart=n,this.latEnd=i,this.lonStart=o,this.lonEnd=a,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){fm(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:r,latEnd:n,lonStart:i,lonEnd:o,heightStart:a,heightEnd:s}=this,c=(r+n)*.5,l=(i+o)*.5,p=r>0,d=n<0,h;h=p?r:d?n:0;let{min:m,max:f}=e;m.setScalar(1/0),f.setScalar(-1/0),o-i<=_o?(this.getCartographicToNormal(c,l,or),En.set(0,0,1),Co.crossVectors(En,or).normalize(),En.crossVectors(or,Co).normalize(),t.makeBasis(Co,En,or),Et.copy(t).invert(),this.getCartographicToPosition(h,i,s,ae).applyMatrix4(Et),f.x=Math.abs(ae.x),m.x=-f.x,this.getCartographicToPosition(n,i,s,ae).applyMatrix4(Et),f.y=ae.y,this.getCartographicToPosition(n,l,s,ae).applyMatrix4(Et),f.y=Math.max(ae.y,f.y),this.getCartographicToPosition(r,i,s,ae).applyMatrix4(Et),m.y=ae.y,this.getCartographicToPosition(r,l,s,ae).applyMatrix4(Et),m.y=Math.min(ae.y,m.y),this.getCartographicToPosition(c,l,s,ae).applyMatrix4(Et),f.z=ae.z,this.getCartographicToPosition(r,i,a,ae).applyMatrix4(Et),m.z=ae.z,this.getCartographicToPosition(n,i,a,ae).applyMatrix4(Et),m.z=Math.min(ae.z,m.z)):(this.getCartographicToPosition(h,l,s,or),or.z=0,or.length()<1e-10?or.set(1,0,0):or.normalize(),En.set(0,0,1),Co.crossVectors(or,En).normalize(),t.makeBasis(Co,En,or),Et.copy(t).invert(),this.getCartographicToPosition(h,l+Cc,s,ae).applyMatrix4(Et),f.x=Math.abs(ae.x),m.x=-f.x,this.getCartographicToPosition(n,0,d?a:s,ae).applyMatrix4(Et),f.y=ae.y,this.getCartographicToPosition(r,0,p?a:s,ae).applyMatrix4(Et),m.y=ae.y,this.getCartographicToPosition(h,l,s,ae).applyMatrix4(Et),f.z=ae.z,this.getCartographicToPosition(h,o,s,ae).applyMatrix4(Et),m.z=ae.z),e.getCenter(ae),e.min.sub(ae).multiplyScalar(1.0000000000001),e.max.sub(ae).multiplyScalar(1.0000000000001),ae.applyMatrix4(t),t.setPosition(ae)}getBoundingSphere(e){fm(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(Ax,mm),e.center.setFromMatrixPosition(mm),e.radius=0;let{latStart:t,latEnd:r,lonStart:n,lonEnd:i,heightStart:o,heightEnd:a}=this,s=(t+r)*.5,c=(n+i)*.5,l=t>0,p=r<0,d;d=l?t:p?r:0,this.getCartographicToPosition(d,n,a,ae),Zr(ae,e),this.getCartographicToPosition(r,n,a,ae),Zr(ae,e),this.getCartographicToPosition(r,c,a,ae),Zr(ae,e),this.getCartographicToPosition(t,n,a,ae),Zr(ae,e),this.getCartographicToPosition(t,c,a,ae),Zr(ae,e),this.getCartographicToPosition(s,c,a,ae),Zr(ae,e),this.getCartographicToPosition(t,n,o,ae),Zr(ae,e),i-n>_o&&(this.getCartographicToPosition(d,c+_o,a,ae),Zr(ae,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},Lr=new ve,kr=new ve,Dr=new ve,gm=new ve,bm=new ve,Rx=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,r=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||r&&!r.intersectsRay(e))}intersectRay(e,t=null){let r=this.sphere,n=this.obb||this.regionObb,i=-1/0,o=-1/0;r&&e.intersectSphere(r,gm)&&(i=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(gm)),n&&n.intersectRay(e,bm)&&(o=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(bm));let a=Math.max(i,o);return a===-1/0?null:(e.at(Math.sqrt(a),t),t)}distanceToPoint(e){let t=this.sphere,r=this.obb||this.regionObb,n=-1/0,i=-1/0;return t&&(n=Math.max(t.distanceToPoint(e),0)),r&&(i=r.distanceToPoint(e)),n>i?n:i}intersectsFrustum(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!e.intersectsSphere(r)||t&&!t.intersectsFrustum(e)?!1:!!(r||t)}intersectsSphere(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!r.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(r||t)}intersectsOBB(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!e.intersectsSphere(r)||t&&!t.intersectsOBB(e)?!1:!!(r||t)}getOBB(e,t){let r=this.obb||this.regionObb;r?(e.copy(r.box),t.copy(r.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let r=new _c;Lr.set(e[3],e[4],e[5]),kr.set(e[6],e[7],e[8]),Dr.set(e[9],e[10],e[11]);let n=Lr.length(),i=kr.length(),o=Dr.length();Lr.normalize(),kr.normalize(),Dr.normalize(),n===0&&Lr.crossVectors(kr,Dr),i===0&&kr.crossVectors(Lr,Dr),o===0&&Dr.crossVectors(Lr,kr),r.transform.set(Lr.x,kr.x,Dr.x,e[0],Lr.y,kr.y,Dr.y,e[1],Lr.z,kr.z,Dr.z,e[2],0,0,0,1).premultiply(t),r.box.min.set(-n,-i,-o),r.box.max.set(n,i,o),r.update(),this.obb=r}setSphereData(e,t,r,n,i){let o=new Sm;o.center.set(e,t,r),o.radius=n,o.applyMatrix4(i),this.sphere=o}setRegionData(e,t,r,n,i,o,a){let s=new _m(...e.radius,r,i,t,n,o,a),c=new _c;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},Lx=new px;function kx(e,t,r,n){let i=Lx.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,r.normal.x,r.normal.y,r.normal.z);return n.set(-e.constant,-t.constant,-r.constant),n.applyMatrix3(i.invert()),n}var Dx=class extends cx{constructor(){super(),this.points=Array(8).fill().map(()=>new ve)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((r,n)=>{kx(r[0],r[1],r[2],t[n])})}};var Pc=0;function ym(e,t,r,n){try{return bx.getByteLength(e,t,r,n)}catch{return Pc}}function Ox(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??Pc;let{format:t,type:r,image:n,mipmaps:i}=e;if(e.isCompressedTexture&&Array.isArray(i)&&i.length>0){let a=0;for(let s of i)s?.data?.byteLength?a+=s.data.byteLength:a+=ym(s.width,s.height,t,r);return a}if(!n)return Pc;let o=ym(n.width,n.height,t,r);return o*=e.generateMipmaps?4/3:1,o}function Ix(e){let t=new Set,r=0;return e.traverse(n=>{if(n.geometry&&!t.has(n.geometry)&&(r+=yx(n.geometry),t.add(n.geometry)),n.material){let i=n.material;for(let o in i){let a=i[o];a&&a.isTexture&&!t.has(a)&&(r+=Ox(a),t.add(a))}}}),r}var Pm=Symbol("INITIAL_FRUSTUM_CULLED"),gs=new lt,To=new ve,Tc=new Rc,Bx=new ve(1,0,0),zx=new ve(0,1,0),Nx=()=>null;function vm(e,t){e.traverse(r=>{r.frustumCulled=r[Pm]&&t})}var Bc=class extends hc{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{vm(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new Tx(this),this.ellipsoid=Po.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new lt,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new dx,this._listeners={}}addEventListener(e,t){ls.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return ls.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){ls.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){ls.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let r=this.root.engineData.boundingVolume;return r?(r.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let r=t.engineData&&t.engineData.scene;r&&e(r,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)Tm(this,this.root,e,t);else{let r=e.firstHitOnly?[]:t;for(let n of this.activeTiles){let{scene:i}=n.engineData;this.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(n,i,e,r))||e.intersectObject(i,!0,r)}e.firstHitOnly&&r.length>0&&(r.sort((n,i)=>n.distance-i.distance),t.push(r[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,r=this.cameraMap;return r.has(e)?!1:(r.set(e,new Rc),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,r){let n=this.cameraMap;if(!n.has(e))return!1;let i=t.isVector2?t.x:t,o=t.isVector2?t.y:r,a=n.get(e);return(a.width!==i||a.height!==o)&&(a.set(i,o),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let r=this.cameraMap.get(e);return r?t.copy(r):null}setResolutionFromRenderer(e,t){return t.getSize(Tc),this.setResolution(e,Tc.x,Tc.y)}deleteCamera(e){let t=this.cameras,r=this.cameraMap;if(r.has(e)){let n=t.indexOf(e);return t.splice(n,1),r.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:r,extensions:n={}}=t;switch((r&&r.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(zx,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(Bx,Math.PI/2);break}if("3DTILES_ellipsoid"in n){let i=n["3DTILES_ellipsoid"],{ellipsoid:o}=this;o.name=i.body,i.radii?o.radius.set(...i.radii):o.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,r=this.cameraMap,n=this.cameraInfo;for(;n.length>t.length;)n.pop();for(;n.length<t.length;)n.push({frustum:new Dx,isOrthographic:!1,sseDenominator:-1,position:new ve,invScale:-1,pixelSize:0});To.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(To.x-To.y,To.x-To.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let i=0,o=n.length;i<o;i++){let a=t[i],s=n[i],c=s.frustum,l=s.position,p=r.get(a);(p.width===0||p.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=a.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let h=2/d[0],m=2/d[5];s.pixelSize=Math.max(m/p.height,h/p.width)}else s.sseDenominator=2/d[5]/p.height;gs.copy(e.matrixWorld),gs.premultiply(a.matrixWorldInverse),gs.premultiply(a.projectionMatrix),c.setFromProjectionMatrix(gs,a.coordinateSystem,a.reversedDepth),l.set(0,0,0),l.applyMatrix4(a.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,r=null){super.preprocessNode(e,t,r);let n=new lt;if(e.transform){let a=e.transform;for(let s=0;s<16;s++)n.elements[s]=a[s]}r&&n.premultiply(r.engineData.transform);let i=new lt().copy(n).invert(),o=new Rx;"sphere"in e.boundingVolume&&o.setSphereData(...e.boundingVolume.sphere,n),"box"in e.boundingVolume&&o.setObbData(e.boundingVolume.box,n),"region"in e.boundingVolume&&o.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=n,e.engineData.transformInverse=i,e.engineData.boundingVolume=o,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=Nx}async parseTile(e,t,r,n,i){let o=t.engineData,a=as(n),s=this.fetchOptions,c=this.manager,l=null,p=o.transform,d=this._upRotationMatrix,h=(Tn(e)||r).toLowerCase();switch(h){case"b3dm":{let y=new kc(c);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(d),l=y.parse(e);break}case"pnts":{let y=new Dc(c);y.workingPath=a,y.fetchOptions=s,l=y.parse(e);break}case"i3dm":{let y=new Ic(c);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(d),y.ellipsoid.copy(this.ellipsoid),l=y.parse(e);break}case"cmpt":{let y=new Cm(c);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(d),y.ellipsoid.copy(this.ellipsoid),l=y.parse(e).then(j=>j.scene);break}case"gltf":case"glb":{let y=c.getHandler("path.gltf")||c.getHandler("path.glb")||new Lc(c);y.setWithCredentials(s.credentials==="include"),y.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&y.setCrossOrigin("use-credentials");let j=y.resourcePath||y.path||a;!/[\\/]$/.test(j)&&j.length&&(j+="/"),l=y.parseAsync(e,j).then(L=>{L.scene=L.scene||new Ec;let{scene:w}=L;return w.updateMatrix(),w.matrix.multiply(d).decompose(w.position,w.quaternion,w.scale),L});break}default:l=this.invokeOnePlugin(y=>y.parseToMesh&&y.parseToMesh(e,t,r,n,i));break}let m=await l;if(m===null)throw Error(`TilesRenderer: Content type "${h}" not supported.`);let f,b;m.isObject3D?(f=m,b=null):(f=m.scene,b=m),f.updateMatrix(),f.matrix.premultiply(p),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(y=>y.processTileModel&&y.processTileModel(f,t)),f.traverse(y=>{y[Pm]=y.frustumCulled,y.userData.tile=t}),vm(f,!this.autoDisableRendererCulling);let P=[],C=[],k=[];if(f.traverse(y=>{if(y.geometry&&C.push(y.geometry),y.material){let j=y.material;P.push(y.material);for(let L in j){let w=j[L];w&&w.isTexture&&k.push(w)}}}),i.aborted){for(let y=0,j=k.length;y<j;y++){let L=k[y];L.image instanceof ImageBitmap&&L.image.close(),L.dispose()}return}o.materials=P,o.geometry=C,o.textures=k,o.scene=f,o.metadata=b}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let r=t.materials,n=t.geometry,i=t.textures,o=t.scene.parent;t.scene.traverse(a=>{a.userData.meshFeatures&&a.userData.meshFeatures.dispose(),a.userData.structuralMetadata&&a.userData.structuralMetadata.dispose()});for(let a=0,s=n.length;a<s;a++)n[a].dispose();for(let a=0,s=r.length;a<s;a++)r[a].dispose();for(let a=0,s=i.length;a<s;a++){let c=i[a];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}o&&o.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let r=e.engineData.scene;r&&(t?(r.parent=this.group,r.updateMatrixWorld(!0)):r.parent=null)}setTileVisible(e,t){let r=e.engineData.scene,{activeTiles:n,group:i}=this;r&&(t?i.add(r):(i.remove(r),n.has(e)&&(r.parent=i))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let r=this._bytesUsed;return!r.has(e)&&t&&r.set(e,Ix(t)),r.get(e)??null}calculateTileViewError(e,t){let r=e.engineData,n=this.cameras,i=this.cameraInfo,o=r.boundingVolume,a=!1,s=0,c=1/0,l=0,p=1/0;for(let d=0,h=n.length;d<h;d++){let m=i[d],f,b;if(m.isOrthographic){let C=m.pixelSize;f=e.geometricError/C,b=1/0}else{let C=m.sseDenominator;b=o.distanceToPoint(m.position),f=b===0?1/0:e.geometricError/(b*C)}let P=i[d].frustum;o.intersectsFrustum(P)&&(a=!0,s=Math.max(s,f),c=Math.min(c,b)),l=Math.max(l,f),p=Math.min(p,b)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=p)}dispose(){super.dispose(),this.group.removeFromParent()}};import{BatchedMesh as OP,Box2 as jx,Box3 as IP,Box3Helper as BP,BoxGeometry as zP,BufferAttribute as jc,BufferGeometry as NP,CanvasTexture as jP,Color as UP,CustomBlending as Ux,DataTexture as Fx,DefaultLoadingManager as FP,DoubleSide as VP,EventDispatcher as GP,FileLoader as Vx,FloatType as HP,Frustum as WP,GreaterDepth as XP,Group as qP,LineBasicMaterial as $P,LineSegments as YP,LinearFilter as Gx,LinearMipMapLinearFilter as KP,MathUtils as Uc,Matrix2 as Hx,Matrix3 as Wx,Matrix4 as Xx,Mesh as QP,MeshBasicMaterial as qx,MeshLambertMaterial as JP,MeshStandardMaterial as ZP,OneFactor as $x,PlaneGeometry as eE,Points as tE,PointsMaterial as rE,Quaternion as nE,REVISION as iE,RGFormat as oE,Ray as aE,Raycaster as sE,RedFormat as lE,SRGBColorSpace as cE,ShaderMaterial as Yx,Source as uE,Sphere as dE,SphereGeometry as pE,Texture as hE,TextureUtils as mE,Triangle as fE,UnsignedByteType as gE,Vector2 as ar,Vector3 as Gm,Vector4 as Kx,WebGLArrayRenderTarget as bE,WebGLRenderTarget as Em,WebGLRenderer as Qx,ZeroFactor as Jx}from"three";import{GLTFLoader as Zx}from"three/addons/loaders/GLTFLoader.js";import{FullScreenQuad as Hm}from"three/addons/postprocessing/Pass.js";var xE=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Am=new vr;Am.maxJobs=10,Am.priorityCallback=(e,t)=>{let r=e.tile,n=t.tile,i=r.internal.renderer,o=n.internal.renderer,a=i.visibleTiles.has(r);return a===o.visibleTiles.has(n)?di(r,n):a?1:-1};var Rm=new Gm;function Eo(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let r=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,n=new jc(new t(e.count*e.itemSize),e.itemSize,!0),i=e.itemSize,o=e.count;for(let a=0;a<o;a++)for(let s=0;s<i;s++){let c=Uc.clamp(e.getComponent(a,s),r,1);n.setComponent(a,s,c)}return n}function ew(e,t=Int16Array){let r=e.geometry,n=r.attributes,i=n.position;if(i.isInterleavedBufferAttribute||i.array instanceof t)return i;let o=new jc(new t(i.count*i.itemSize),i.itemSize,!1),a=i.itemSize,s=i.count;r.computeBoundingBox();let c=r.boundingBox,{min:l,max:p}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,h=-d;for(let m=0;m<s;m++)for(let f=0;f<a;f++){let b=f===0?"x":f===1?"y":"z",P=l[b],C=p[b],k=Uc.mapLinear(i.getComponent(m,f),P,C,h,d);o.setComponent(m,f,k)}c.getCenter(Rm).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Rm),e.scale.x*=.5*(p.x-l.x)/d,e.scale.y*=.5*(p.y-l.y)/d,e.scale.z*=.5*(p.z-l.z)/d,n.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var Fc=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:r,disableMipmaps:n,compressIndex:i,compressUvs:o,compressNormals:a,compressPosition:s,uvType:c,normalType:l,positionType:p}=this._options;e.traverse(d=>{if(d.material&&n){let h=d.material;for(let m in h){let f=h[m];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=Gx)}}if(d.geometry){let h=d.geometry,m=h.attributes;if(o){let{uv:f,uv1:b,uv2:P,uv3:C}=m;f&&(m.uv=Eo(f,c)),b&&(m.uv1=Eo(b,c)),P&&(m.uv2=Eo(P,c)),C&&(m.uv3=Eo(C,c))}if(r&&!m.normals&&h.computeVertexNormals(),a&&m.normals&&(m.normals=Eo(m.normals,l)),s&&ew(d,p),i&&h.index){let f=m.position.count,b=h.index,P=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(b.array instanceof P)){let C=new P(h.index.count);C.set(b.array);let k=new jc(C,1);h.setIndex(k)}}}})}};function ct(e,t,r){return e&&t in e?e[t]:r}function Wm(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function tw(e){return/^FLOAT/.test(e)}function ko(e){return/^VEC/.test(e)}function Do(e){return/^MAT/.test(e)}function Xm(e,t,r,n=null){return Do(r)||ko(r)?n.fromArray(e,t):e[t]}function zc(e){let{type:t,componentType:r}=e;switch(t){case"SCALAR":return r==="INT64"?0n:0;case"VEC2":return new ar;case"VEC3":return new Gm;case"VEC4":return new Kx;case"MAT2":return new Hx;case"MAT3":return new Wx;case"MAT4":return new Xx;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function Lm(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function Lo(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function rw(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let r=0,n=t.length;r<n;r++)t[r]=ys(e,t[r])}else t=ys(e,t);return t}function ys(e,t=null){let r=e.default,n=e.type;if(t||(t=zc(e)),r===null){switch(n){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(Do(n))t.fromArray(r);else if(ko(n))t.fromArray(r);else return r}function nw(e,t){if(e.noData===null)return t;let r=e.noData,n=e.type;if(Array.isArray(t))for(let a=0,s=t.length;a<s;a++)t[a]=i(t[a]);else t=i(t);return t;function i(a){return o(a)&&(a=ys(e,a)),a}function o(a){if(Do(n)){let s=a.elements;for(let c=0,l=r.length;c<l;c++)if(r[c]!==s[c])return!1;return!0}else if(ko(n)){for(let s=0,c=r.length;s<c;s++)if(r[s]!==a.getComponent(s))return!1;return!0}else return r===a}}function iw(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function ow(e,t){let{type:r,componentType:n,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let d=0,h=t.length;d<h;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=Do(r)?l(d):ko(r)?c(d):p(d),d}function c(d){return d.x=p(d.x),d.y=p(d.y),"z"in d&&(d.z=p(d.z)),"w"in d&&(d.w=p(d.w)),d}function l(d){let h=d.elements;for(let m=0,f=h.length;m<f;m++)h[m]=p(h[m]);return d}function p(d){return a&&(d=iw(n,d)),(a||tw(n))&&(d=d*i+o),d}}function Vc(e,t,r=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=r===null?e.count:r;for(let n=0,i=t.length;n<i;n++)Lm(e.type,t[n])||(t[n]=zc(e))}else Lm(e.type,t)||(t=zc(e));return t}function vs(e,t){for(let r in t)r in e||delete t[r];for(let r in e){let n=e[r];t[r]=Vc(n,t[r])}}function aw(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var ws=class{constructor(e,t,r=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=ct(t,"scale",1),this.max=ct(t,"max",1/0),this.min=ct(t,"min",-1/0),this.required=t.required||!1,this.noData=ct(t,"noData",null),this.default=ct(t,"default",null),this.semantic=ct(t,"semantic",null),this.enumSet=null,this.accessorProperty=r,r&&(this.offset=ct(r,"offset",this.offset),this.scale=ct(r,"scale",this.scale),this.max=ct(r,"max",this.max),this.min=ct(r,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=ct(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return Vc(this,e,t)}resolveDefaultElement(e){return ys(this,e)}resolveDefault(e){return rw(this,e)}resolveNoData(e){return nw(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let n=0,i=e.length;n<i;n++)e[n]=r(e[n]);else e=r(e);return e;function r(n){let i=t.values.find(o=>o.value===n);return i===null?"":i.name}}adjustValueScaleOffset(e){return Wm(this.type)?ow(this,e):e}},Gc=class{constructor(e,t={},r={},n=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=r,this.data=n,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=ws){let t={};for(let r in this.class.properties)t[r]=new e(this.enums,this.class.properties[r],this.definition.properties[r]);this.properties=t}},sw=class extends ws{constructor(e,t,r=null){super(e,t,r),this.attribute=r?.attribute??null}},lw=class extends Gc{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(sw)}getData(e,t,r={}){let n=this.properties;vs(n,r);for(let i in n)r[i]=this.getPropertyValue(i,e,t,r[i]);return r}getPropertyValue(e,t,r,n=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let i=this.properties[e],o=i.type;if(!i)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);n=i.shapeToProperty(n);let a=r.getAttribute(i.attribute.toLowerCase());if(Do(o)){let s=n.elements;for(let c=s.length;0<c;)s[0]=a.getComponent(t,0)}else if(ko(o))n.fromBufferAttribute(a,t);else if(o==="SCALAR"||o==="ENUM")n=a.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},cw=class extends ws{constructor(e,t,r=null){super(e,t,r),this.values=r?.values??null,this.valueLength=aw(this.type),this.arrayOffsets=ct(r,"arrayOffsets",null),this.stringOffsets=ct(r,"stringOffsets",null),this.arrayOffsetType=ct(r,"arrayOffsetType","UINT32"),this.stringOffsetType=ct(r,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let r=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:n,arrayOffsetType:i}=this,o=new(Lo(i))(e[n]);r=o[t+1]-o[t]}return r}getIndexOffsetFromId(e,t){let r=t;if(this.arrayOffsets){let{arrayOffsets:n,arrayOffsetType:i}=this;r=new(Lo(i))(e[n])[r]}else this.array&&(r*=this.count);return r}},uw=class extends Gc{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(cw)}getData(e,t={}){let r=this.properties;vs(r,t);for(let n in r)t[n]=this.getPropertyValue(n,e,t[n]);return t}_readValueAtIndex(e,t,r,n=null){let i=this.properties[e],{componentType:o,type:a}=i,s=this.data,c=s[i.values],l=new(Lo(o,a))(c),p=i.getIndexOffsetFromId(s,t);if(Wm(a)||a==="ENUM")return Xm(l,(p+r)*i.valueLength,a,n);if(a==="STRING"){let d=p+r,h=0;if(i.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:b}=i,P=new(Lo(b))(s[f]);h=P[d+1]-P[d],d=P[d]}let m=new Uint8Array(l.buffer,d,h);n=new TextDecoder().decode(m)}else if(a==="BOOLEAN"){let d=p+r,h=Math.floor(d/8),m=d%8;n=(l[h]>>m&1)==1}return n}getPropertyValue(e,t,r=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let n=this.properties[e];if(!n)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return n.resolveDefault(r);let i=n.array,o=this.data,a=n.getArrayLengthFromId(o,t);if(r=n.shapeToProperty(r,a),i)for(let s=0,c=r.length;s<c;s++)r[s]=this._readValueAtIndex(e,t,s,r[s]);else r=this._readValueAtIndex(e,t,0,r);return r=n.adjustValueScaleOffset(r),r=n.resolveEnumsToStrings(r),r=n.resolveNoData(r),r}},Ao=new jx,km=class{constructor(){this._renderer=new Qx,this._target=new Em(1,1),this._texTarget=new Em,this._quad=new Hm(new Yx({blending:Ux,blendDst:Jx,blendSrc:$x,uniforms:{map:{value:null},pixel:{value:new ar}},vertexShader:`
10
10
  void main() {
11
11
 
12
12
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
@@ -21,7 +21,7 @@ import{A as da,B as pa,C as gl,D as Hd,E as Wd,F as Xd,a as hl,b as Rd,c as Ld,d
21
21
  gl_FragColor = texelFetch( map, pixel, 0 );
22
22
 
23
23
  }
24
- `}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:r}=this;return t.readRenderTargetPixelsAsync(r,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:r}=this;t.readRenderTargetPixels(r,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,r){let{_renderer:n,_target:i}=this;Ao.min.copy(t),Ao.max.copy(t),Ao.max.x+=1,Ao.max.y+=1,n.initRenderTarget(i),n.copyTextureToTexture(e,i.texture,Ao,r,0)}},en=new class{constructor(){let e=null;Object.getOwnPropertyNames(Lm.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...r)=>(e||(e=new Lm),e[t](...r)))})}},km=new ar,Dm=new ar,Om=new ar;function dw(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Xm(e,t,r=[,,,]){let n=3*t,i=3*t+1,o=3*t+2;return e.index&&(n=e.index.getX(n),i=e.index.getX(i),o=e.index.getX(o)),r[0]=n,r[1]=i,r[2]=o,r}function qm(e,t,r,n,i){let[o,a,s]=n,c=dw(e,t);km.fromBufferAttribute(c,o),Dm.fromBufferAttribute(c,a),Om.fromBufferAttribute(c,s),i.set(0,0,0).addScaledVector(km,r.x).addScaledVector(Dm,r.y).addScaledVector(Om,r.z)}function $m(e,t,r,n){let i=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(i*t%t),s=Math.floor(o*r%r);return n.set(a,s),n}var Im=new ar,Bm=new ar,zm=new ar,pw=class extends ws{constructor(e,t,r=null){super(e,t,r),this.channels=ct(r,"channels",[0]),this.index=ct(r,"index",null),this.texCoord=ct(r,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,r=null){let n=this.type;if(n==="BOOLEAN"||n==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Wm(e,t*this.valueLength,n,r)}},hw=class extends Vc{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(pw)}getData(e,t,r,n={}){let i=this.properties;vs(i,n);let o=Object.keys(i),a=o.map(s=>n[s]);return this.getPropertyValuesAtTexel(o,e,t,r,a),o.forEach((s,c)=>n[s]=a[c]),n}async getDataAsync(e,t,r,n={}){let i=this.properties;vs(i,n);let o=Object.keys(i),a=o.map(s=>n[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,r,a),o.forEach((s,c)=>n[s]=a[c]),n}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,r,n,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,en.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,c=Xm(n,t);for(let d=0,h=e.length;d<h;d++){let m=e[d];if(!a[m])continue;let f=s[m],b=o[f.index];qm(n,f.texCoord,r,c,Im),$m(Im,b.image.width,b.image.height,Bm),zm.set(d,0),en.renderPixelToTarget(b,Bm,zm)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return en.readDataAsync(l).then(()=>(p.call(this),i));return en.readData(l),p.call(this),i;function p(){for(let d=0,h=e.length;d<h;d++){let m=e[d],f=s[m],b=f.type;if(i[d]=Fc(f,i[d]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[m]){i[d]=f.resolveDefault(i);continue}let P=f.valueLength*(f.count||1),C=f.channels.map(j=>l[4*d+j]),k=f.componentType,y=new(Lo(k,b))(P);if(new Uint8Array(y.buffer).set(C),f.array){let j=i[d];for(let L=0,w=j.length;L<w;L++)j[L]=f.readDataFromBuffer(y,L,j[L])}else i[d]=f.readDataFromBuffer(y,0,i[d]);i[d]=f.adjustValueScaleOffset(i[d]),i[d]=f.resolveEnumsToStrings(i[d]),i[d]=f.resolveNoData(i[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},zc=class{constructor(e,t,r,n=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:p}=o,d=a.map(f=>new uw(f,p,l,r)),h=[],m=[];n&&(n.propertyTextures&&(h=n.propertyTextures.map(f=>new hw(s[f],p,l,t))),n.propertyAttributes&&(m=n.propertyAttributes.map(f=>new lw(c[f],p,l)))),this.schema=o,this.tableAccessors=d,this.textureAccessors=h,this.attributeAccessors=m,this.object=i,this.textures=t,this.nodeMetadata=n}getPropertyTableData(e,t,r=null){if(!Array.isArray(e))r||(r={}),r=this.tableAccessors[e].getData(t,r);else{r||(r=[]);let n=Math.min(e.length,t.length);r.length=n;for(let i=0;i<n;i++){let o=this.tableAccessors[e[i]];r[i]=o.getData(t[i],r[i])}}if(Array.isArray(e)!==Array.isArray(r)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return r}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,r)=>r)),Array.isArray(e))return e.map(t=>{let r=this.tableAccessors[t];return{name:r.name,className:r.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,r=[]){let n=this.textureAccessors;r.length=n.length;for(let i=0;i<n.length;i++)r[i]=n[i].getData(e,t,this.object.geometry,r[i]);return r}async getPropertyTextureDataAsync(e,t,r=[]){let n=this.textureAccessors;r.length=n.length;let i=[];for(let o=0;o<n.length;o++){let a=n[o].getDataAsync(e,t,this.object.geometry,r[o]).then(s=>{r[o]=s});i.push(a)}return await Promise.all(i),r}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let r=this.attributeAccessors;t.length=r.length;for(let n=0;n<r.length;n++)t[n]=r[n].getData(e,this.object.geometry,t[n]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Ro="EXT_structural_metadata";function mw(e,t=[]){let r=e.json.textures?.length||0,n=Array(r).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{index:a}=i[o];n[a]===null&&(n[a]=e.loadTexture(a))}}),Promise.all(n)}function fw(e,t=[]){let r=e.json.bufferViews?.length||0,n=Array(r).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{values:a,arrayOffsets:s,stringOffsets:c}=i[o];n[a]===null&&(n[a]=e.getDependency("bufferView",a)),n[s]===null&&(n[s]=e.getDependency("bufferView",s)),n[c]===null&&(n[c]=e.getDependency("bufferView",c))}}),Promise.all(n)}var Ym=class{constructor(e){this.parser=e,this.name=Ro}async afterRoot({scene:e,parser:t}){let r=t.json.extensionsUsed;if(!r||!r.includes(Ro))return;let n=null,i=t.json.extensions[Ro];if(i.schemaUri){let{manager:c,path:l,requestHeader:p,crossOrigin:d}=t.options,h=new URL(i.schemaUri,l).toString(),m=new Vx(c);m.setCrossOrigin(d),m.setResponseType("json"),m.setRequestHeader(p),n=m.loadAsync(h).then(f=>{i={...i,schema:f}})}let[o,a]=await Promise.all([mw(t,i.propertyTextures),fw(t,i.propertyTables),n]),s=new zc(i,o,a);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:p}=t.associations.get(c),d=t.json.meshes[l]?.primitives[p];if(d&&d.extensions&&d.extensions[Ro]){let h=d.extensions[Ro];c.userData.structuralMetadata=new zc(i,o,a,h,c)}else c.userData.structuralMetadata=s}})}},Nm=new ar,jm=new ar,Um=new ar;function gw(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Km=class{constructor(e,t,r){this.geometry=e,this.textures=t,this.data=r,this._asyncRead=!1,this.featureIds=r.featureIds.map(n=>{let{texture:i,...o}=n,a={label:null,propertyTable:null,nullFeatureId:null,...o};return i&&(a.texture={texCoord:0,channels:[0],...i}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:r,textures:n,featureIds:i}=this,o=Array(i.length).fill(null),a=i.length;en.increaseSizeTo(a);let s=Xm(r,e),c=s[gw(t)];for(let d=0,h=i.length;d<h;d++){let m=i[d],f="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let b=n[m.texture.index];qm(r,m.texture.texCoord,t,s,Nm),$m(Nm,b.image.width,b.image.height,jm),Um.set(d,0),en.renderPixelToTarget(n[m.texture.index],jm,Um)}else if("attribute"in m){let b=r.getAttribute(`_feature_id_${m.attribute}`).getX(c);b!==f&&(o[d]=b)}else{let b=c;b!==f&&(o[d]=b)}}let l=new Uint8Array(a*4);if(this._asyncRead)return en.readDataAsync(l).then(()=>(p(),o));return en.readData(l),p(),o;function p(){let d=new Uint32Array(1);for(let h=0,m=i.length;h<m;h++){let f=i[h],b="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:P}=f.texture,C=P.map(y=>l[4*h+y]);new Uint8Array(d.buffer).set(C);let k=d[0];k!==b&&(o[h]=k)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},xs="EXT_mesh_features";function Fm(e,t,r){e.traverse(n=>{if(t.associations.has(n)){let{meshes:i,primitives:o}=t.associations.get(n),a=t.json.meshes[i]?.primitives[o];a&&a.extensions&&a.extensions[xs]&&r(n,a.extensions[xs])}})}var Qm=class{constructor(e){this.parser=e,this.name=xs}async afterRoot({scene:e,parser:t}){let r=t.json.extensionsUsed;if(!r||!r.includes(xs))return;let n=t.json.textures?.length||0,i=Array(n).fill(null);Fm(e,t,(a,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&i[c.texture.index]===null){let l=c.texture.index;i[l]=t.loadTexture(l)}})});let o=await Promise.all(i);Fm(e,t,(a,s)=>{a.userData.meshFeatures=new Km(a.geometry,o,s)})}},Jm=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},Gc=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new Zx(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new Jm),this.metadata&&(t.register(()=>new Ym),t.register(()=>new Qm)),this.plugins.forEach(r=>t.register(r)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:wE}=jc;var ME=new Gm(new qx),bw=new Fx(new Uint8Array([255,255,255,255]),1,1);bw.needsUpdate=!0;var yw=0,vw=1,xw=2,ww=3,Mw=4,Sw=5,Cw=6,Tw=7,_w=8,Pw=9,Ew=10,Aw=11,SE=Object.freeze({NONE:yw,SCREEN_ERROR:vw,GEOMETRIC_ERROR:xw,DISTANCE:ww,DEPTH:Mw,RELATIVE_DEPTH:Sw,IS_LEAF:Cw,RANDOM_COLOR:Tw,RANDOM_NODE_COLOR:_w,CUSTOM_COLOR:Pw,LOAD_ORDER:Ew,INDEXED_COLOR:Aw});var CE=Math.PI/4,TE=3/5;var Zr={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var _E=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),r=e.join("_"),{_cache:n}=this;return r in n||(t.setHSL(Math.random(),1,.5),n[r]=t.getHex()),t.set(n[r])}};var PE={[Zr.NONE]:16777215,[Zr.NOT_READY]:7829367,[Zr.NO_FIT]:2250239,[Zr.DEPTH]:4473924,[Zr.OCCUPANCY]:65535,[Zr.SPACING]:16776960,[Zr.ANGLE]:16711680,[Zr.FACING]:16711935};var EE=Math.PI/180;var AE=Tn*Math.PI*2;var RE=Tn*Math.PI*2;import{DRACOLoader as Iw}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as Bw}from"three/examples/jsm/loaders/KTX2Loader.js";import{MeshoptDecoder as zw}from"three/examples/jsm/libs/meshopt_decoder.module.js";import{Box3 as Nw,DoubleSide as jw,MathUtils as Uw,Matrix4 as rf,Sphere as Fw,Vector3 as Vw}from"three";import{BufferAttribute as Zm,MathUtils as Rw}from"three";function ef(e){return!!e&&!e.isInterleavedBufferAttribute}function tf(e,t,r,n){for(let i=0;i<e.count;i+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(i,o,Rw.clamp(e.getComponent(i,o),r,n));return t}function Lw(e){for(let t=0;t<e.count;t+=1)for(let r=0;r<e.itemSize;r+=1){let n=e.getComponent(t,r);if(!Number.isFinite(n)||n<0||n>1)return!1}return!0}var Ms=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(r=>{let n=r.geometry;if(!n)return;let i=n.attributes.normal;ef(i)&&!(i.array instanceof Int16Array)&&(n.attributes.normal=tf(i,new Zm(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=n.attributes[o];!ef(a)||a.array instanceof Uint16Array||!Lw(a)||(n.attributes[o]=tf(a,new Zm(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};import{jsx as of,jsxs as $w}from"react/jsx-runtime";var Gw=0,nf=4,Hw=6,Ww=12,Xw=4;function qw(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function Wc({url:e,rotation:t=[0,0,0],errorTarget:r=64,cacheSize:n=800,memoryBudgetMB:i=800,decoderConfig:o,objectBindings:a,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:p,highlightOnHover:d=!0,onItemClick:h,onItemHover:m,onItemDoubleClick:f,onItemContextMenu:b,onObjectCatalog:P,onTilesetBounds:C,onModelLoaded:k,onLoadError:y,nodeRefsOut:j,onNodeRefsChange:L,materialRefsOut:w,explodeFactor:I=0,suspendBindingTransforms:U=!1}){let{camera:_,gl:S,invalidate:A}=Ow(),G=xt(null),[v,z]=Hc(null),M=xt({onItemClick:h,onItemHover:m,onItemDoubleClick:f,onObjectCatalog:P,onTilesetBounds:C,onModelLoaded:k,onLoadError:y,onNodeRefsChange:L});M.current={onItemClick:h,onItemHover:m,onItemDoubleClick:f,onObjectCatalog:P,onTilesetBounds:C,onModelLoaded:k,onLoadError:y,onNodeRefsChange:L};let O=xt(!0),[N,$]=Hc(null),Z=xt(null);Z.current=N;let te=xt([]),ie=xt(!1);rn(()=>{let V=new Qa;return $(V),()=>V.dispose()},[e]);let Se=xt(null),Ue=xt(0),rt=xt(!1),gt=i*1024*1024,Fe=xt(!1),ze=xt(ac),nt=xt(null),dt=xt(null),bt=xt(null);rn(()=>()=>{bt.current!==null&&clearTimeout(bt.current)},[]);let pt=o?.dracoDecoderPath??Id,At=o?.ktx2TranscoderPath??Bd,Ge=o?.meshopt??!0,[q,Vt]=Hc(null);rn(()=>{rt.current=!1,Fe.current=!1;let V=new Ic(e);V.loadAncestors=!0;let re=new ns;re.priorityCallback=V.downloadQueue.priorityCallback,re.maxJobsPerOrigin=Ww;let oe=new vr;oe.priorityCallback=V.parseQueue.priorityCallback,oe.maxJobs=Hw;let we=new vr;we.priorityCallback=V.processNodeQueue.priorityCallback,we.maxJobs=V.processNodeQueue.maxJobs;let Oe=new yo;Oe.unloadPriorityCallback=V.lruCache.unloadPriorityCallback,V.downloadQueue=re,V.parseQueue=oe,V.processNodeQueue=we,V.lruCache=Oe;let Ce=pt?new Iw().setDecoderPath(pt).setWorkerLimit(Xw):null,Re=At?new Bw().setTranscoderPath(At).detectSupport(S):null;return V.registerPlugin(new Gc({dracoLoader:Ce,ktxLoader:Re,meshoptDecoder:Ge?zw:null,autoDispose:!1})),V.registerPlugin(new Uc({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),V.registerPlugin(new Ms),Vt(V),window.__riTiles=V,()=>{V.forEachLoadedModel(ee=>Yi(ee)),V.dispose(),Ce?.dispose(),Re?.dispose(),Vt(ee=>ee===V?null:ee)}},[pt,S,At,Ge,e]),rn(()=>{q&&(ze.current=ac,nt.current=null,q.errorTarget=r,q.lruCache.maxSize=n,q.lruCache.minSize=Math.max(1,Math.floor(n*.75)),q.lruCache.maxBytesSize=gt,q.lruCache.minBytesSize=gt*.75,A())},[n,r,A,gt,q]);let ht=kw(()=>{let V=a??{};return{objectBindings:V,keyByModelObject:Rh(V),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Lh(v,p),highlightOnHover:d,suspendTransforms:U,placementFrame:q?.group.matrixWorld,invalidate:A}},[v,d,A,s,a,p,c,l,U,q]),_e=tn(()=>{if(!q)return;let V=Gt.current,re=ie.current?Z.current?.nodesByBinding(V)??{}:{},oe={};q.group.traverse(Re=>{if(!Re.isMesh)return;let ee=ic(Re);if(!ee)return;let xe=V.keyByModelObject[ee]??ee;if(!V.objectBindings[xe])return;re[xe]||(re[xe]=Re);let Me=Re.material;Me&&(oe[xe]=Me)});let we=j?.current??{},Oe=Object.keys(we),Ce=Oe.length!==Object.keys(re).length||Oe.some(Re=>we[Re]!==re[Re]);j&&(j.current=re),w&&(w.current=oe),(Ce||!j)&&M.current.onNodeRefsChange?.()},[w,j,q]),Ye=tn(V=>Ya(V,ht),[ht]),He=tn(V=>Dh(V,ht),[ht]),Bt=xt(He);Bt.current=He;let Gt=xt(ht);Gt.current=ht;let Pe=tn(()=>{let V=Se.current,re=Ue.current;return!V||re<=0?Gt.current:{...Gt.current,explode:{factor:re,centre:V.centre,radius:V.radius}}},[]);rn(()=>{q&&(He(q.group),O.current=!0,q.forEachLoadedModel(V=>{He(V),ui(V,Pe())}),A())},[He,A,Pe,q]),rn(()=>{let V=qw(e);if(!V)return;let re=!1;return fetch(V).then(oe=>oe.ok?oe.json():null).then(oe=>{re||!oe?.objects||(te.current=oe.objects,ie.current=oe.bindingFrame==="gltf-identity-v2",ie.current&&Z.current?.setCatalog(oe.objects),O.current=!0,M.current.onObjectCatalog?.(oe.objects),A())}).catch(()=>{}),()=>{re=!0}},[e,A,N]),rn(()=>{if(!q)return;let V=!1,re=()=>A(),oe=ee=>{ee.scene&&(ee.scene.traverse(xe=>{let Me=xe.material;for(let ot of Array.isArray(Me)?Me:Me?[Me]:[])ot.transparent&&ot.side===jw&&(ot.forceSinglePass=!0)}),Bt.current(ee.scene),ui(ee.scene,Pe()),sa(ee.scene)),O.current=!0,V||(V=!0,M.current.onModelLoaded?.(q.group)),A()},we=ee=>{M.current.onLoadError?.(ee.error)},Oe=ee=>{ee.scene&&(oc(ee.scene),Yi(ee.scene)),O.current=!0};q.setCamera(_),q.setResolutionFromRenderer(_,S),q.addEventListener("needs-update",re),q.addEventListener("load-model",oe),q.addEventListener("load-error",we),q.addEventListener("dispose-model",Oe);let Ce=()=>{O.current=!0,A()};q.addEventListener("tile-visibility-change",Ce);let Re=()=>{let ee=q.root;ee&&!ee.content?.uri&&ee.refine==="REPLACE"&&(ee.refine="ADD",A())};return q.addEventListener("load-root-tileset",Re),A(),()=>{q.removeEventListener("needs-update",re),q.removeEventListener("load-model",oe),q.removeEventListener("load-error",we),q.removeEventListener("dispose-model",Oe),q.removeEventListener("tile-visibility-change",Ce),q.removeEventListener("load-root-tileset",Re),oc(q.group),q.deleteCamera(_),j&&(j.current={}),w&&(w.current={})}},[_,S,A,w,j,Pe,q]);let se=Va(V=>Ye(V)?.binding??null,b),de=tn(V=>{if(se.consumeClick())return;let re=Ye(V.object);re&&(V.stopPropagation(),M.current.onItemClick?.(re.binding))},[Ye,se,h]),Ke=tn(V=>{let re=Ye(V.object);if(!re)return;M.current.onItemDoubleClick?.(re.binding,Ga(V))&&V.stopPropagation()},[Ye]),Ae=tn(V=>{let re=Ye(V.object),oe=re?.key??null;oe!==G.current&&(G.current=oe,z(oe),M.current.onItemHover?.(re?.binding??null))},[Ye]),Qe=tn(()=>{G.current!==null&&(G.current=null,z(null),M.current.onItemHover?.(null))},[]);return rn(()=>{A()},[A,q]),Dw((V,re)=>{if(!q)return;if(q.setResolutionFromRenderer(_,S),ie.current&&N){let ft=N.sync(Pe(),l,U);N.updateBounds(q.root),U&&q.forEachLoadedModel(E=>ui(E,ft))}if(q.update(),!rt.current){let ft=new Nw;if(q.getBoundingBox(ft)){rt.current=!0,q.group.updateMatrixWorld(),ft.applyMatrix4(q.group.matrixWorld);let E=ft.getBoundingSphere(new Fw);Se.current={centre:E.center.clone(),radius:ft.getSize(new Vw).length()*.5},M.current.onTilesetBounds?.(ft),A()}}O.current&&(O.current=!1,_e());let oe=Math.min(Math.max(I,0),1),we=Ue.current;Math.abs(we-oe)>1e-4?(Ue.current=Uw.lerp(we,oe,1-Math.exp(-6*re)),ui(q.group,Pe()),A()):we!==oe&&(Ue.current=oe,ui(q.group,Pe()),A());let Oe=q,Ce=q.lruCache,Re=Ce.isFull(),ee=ze.current,xe=ee.loosened&&nt.current?nt.current:{bytes:Ce.maxBytesSize,items:Ce.maxSize},Me=0;for(let ft of Ce.usedSet??[])Me+=Ce.bytesMap?.get(ft)??0;let ot=!1,zt=q;for(let ft of zt.usedSet??[]){let E=ft.internal?.loadingState??nf;if(ft.traversal?.used&&ft.internal?.hasContent&&E>=Gw&&E<nf){ot=!0;break}}let St=dt.current??(dt.current={world:new rf,projection:new rf}),mt=!St.world.equals(_.matrixWorld)||!St.projection.equals(_.projectionMatrix);mt&&(St.world.copy(_.matrixWorld),St.projection.copy(_.projectionMatrix));let sn={full:Re,wanting:ot,moved:mt,usage:Math.max(Me/Math.max(1,xe.bytes),(Ce.usedSet?.size??0)/Math.max(1,xe.items)),now:performance.now()},Nt=Wh(ee,sn);Nt!==ee&&(Nt.loosened&&(!ee.loosened||Nt.raisedAt!==ee.raisedAt)?(ee.loosened||(nt.current=xe),Ce.maxBytesSize=Math.max(xe.bytes,Ce.cachedBytes??0)*sc,Ce.maxSize=Math.ceil(Math.max(xe.items,Ce.itemSet?.size??0)*sc)):!Nt.loosened&&ee.loosened&&nt.current&&(Ce.maxBytesSize=nt.current.bytes,Ce.maxSize=nt.current.items,nt.current=null),ze.current=Nt,q.errorTarget=r*Nt.factor,A()),!Fe.current&&Re&&sn.wanting&&Nt.factor>=mo&&(Fe.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let jr=Xh(Nt,sn);jr===0?A():jr!==null&&bt.current===null&&(bt.current=setTimeout(()=>{bt.current=null,A()},jr)),((Oe.stats?.downloading??0)>0||(Oe.stats?.parsing??0)>0||Oe.loadProgress!==void 0&&Oe.loadProgress<1&&!Re)&&A()}),q?$w("group",{rotation:t,children:[N?of("primitive",{object:N.group}):null,of("primitive",{object:q.group,onClick:de,onDoubleClick:Ke,onPointerDown:b?se.onPointerDown:void 0,onPointerMove:Ae,onPointerOut:Qe})]}):null}import{Matrix4 as Xc}from"three";var Yw=new Xc().makeRotationX(Math.PI/2);function af(e){e.updateMatrixWorld(!0);let t=new Xc().copy(e.matrixWorld).invert().premultiply(Yw),r=new Xc,n=[];for(let[i,o]of Object.entries(Yn(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let c=s.boundingBox.clone().applyMatrix4(r.multiplyMatrices(t,o.matrixWorld)),l=s.index?s.index.count:s.getAttribute("position")?.count??0;n.push({name:i,triangles:Math.floor(l/3),minimum:c.min.toArray(),maximum:c.max.toArray()})}return n.sort((i,o)=>i.name.localeCompare(o.name))}import{useMemo as An,useRef as nn,useState as bi,useEffect as En,useCallback as gi}from"react";import{Html as sf}from"@react-three/drei";import{useFrame as lf,useThree as $c}from"@react-three/fiber";import{MathUtils as qc,Vector3 as Oo}from"three";import{jsx as sr,jsxs as Yc}from"react/jsx-runtime";var Kw=.02;function cf(e,t){let r=nn(null),n=$c(l=>l.scene),i=nn(null),o=An(()=>new Oo(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),a=An(()=>new Oo,[]),s=An(()=>new Oo,[]),c=An(()=>new Oo,[]);return En(()=>{i.current=null},[e.anchorNodeName]),lf(({camera:l})=>{let p=r.current,d=p?.parent;if(!p||!d)return;let h=i.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=mn(n,e.anchorNodeName),i.current=h),h?(h.updateWorldMatrix(!0,!1),a.copy(o).applyMatrix4(h.matrixWorld)):(a.copy(o),d.localToWorld(a)),t){let m=t.current.get(e.id);m||(m=new Oo,t.current.set(e.id,m)),m.copy(a)}c.copy(l.position).sub(a),c.lengthSq()>0?(c.normalize(),s.copy(a).addScaledVector(c,Kw)):s.copy(a),d.worldToLocal(s),p.position.copy(s)}),r}function Qw({annotation:e,occluders:t,worldPositionsRef:r,onClick:n,onHover:i,showAnnotationOnHover:o}){let[a,s]=bi(!1),c=cf(e,r),[l,p]=bi(!1),[d,h]=bi(1),m=nn(null),f=nn(null),b=nn(null);En(()=>()=>{m.current&&(clearTimeout(m.current),m.current=null),b.current&&(clearTimeout(b.current),b.current=null)},[]);let P=L=>{L.stopPropagation(),L.preventDefault(),m.current&&(clearTimeout(m.current),m.current=null),m.current=window.setTimeout(()=>{n?.(e),m.current=null},10)},C=L=>{L.stopPropagation(),p(!0),h(100),b.current&&(clearTimeout(b.current),b.current=null),i?.(e),o&&n?.(e)},k=L=>{L.stopPropagation(),p(!1),h(1),b.current&&clearTimeout(b.current),b.current=window.setTimeout(()=>{i?.(null),o&&i?.(null),b.current=null},50)},y=L=>{L.stopPropagation();let w=L.currentTarget;w.dataset.pointerX=String(L.clientX),w.dataset.pointerY=String(L.clientY)},j=L=>{L.stopPropagation();let w=L.currentTarget,I=parseFloat(w.dataset.pointerX||"0"),U=parseFloat(w.dataset.pointerY||"0"),_=L.clientX-I,S=L.clientY-U;Math.sqrt(_*_+S*S)<10&&P(L)};return sr("group",{ref:c,children:sr(sf,{center:!0,occlude:t,onOcclude:s,pointerEvents:a?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:a?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:sr("div",{ref:f,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:a?"none":"flex"},onPointerDown:y,onPointerUp:j,onPointerEnter:C,onPointerLeave:k,onDoubleClick:L=>{L.stopPropagation(),n?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:sr("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function Jw({annotation:e,occluders:t,popupRef:r,onClose:n,hideCloseButton:i=!1}){let[o,a]=bi(!1),s=cf(e),c=Yc("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:o?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[Yc("div",{className:"ri-viewAnnotationHeader",children:[sr("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&sr("button",{onClick:l=>{l.stopPropagation(),n?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&sr("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return sr("group",{ref:s,children:sr(sf,{occlude:t,onOcclude:a,pointerEvents:o?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:o?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function Kc({annotations:e,sceneConfig:t,activeAnnotation:r,popupRef:n,canvasRootRef:i,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:p=!1,showAnnotationOnHover:d=!1}){let h=$c(M=>M.invalidate),m=$c(M=>M.scene),[f,b]=bi(null),[P,C]=bi(!1),k=nn(null),y=nn(null),j=nn(null),L=An(()=>{let M=[];return m.traverse(O=>{let N=O;N.isMesh&&!N.isSkinnedMesh&&M.push({current:O})}),M},[m,e,a]),w=gi(()=>{h();let M=()=>{h(),y.current=window.requestAnimationFrame(()=>{h(),y.current=null})};y.current=window.requestAnimationFrame(M)},[h]);En(()=>{w()},[e,w]),En(()=>{w()},[r,w]),En(()=>()=>{y.current!==null&&window.cancelAnimationFrame(y.current),j.current&&clearTimeout(j.current)},[]);let I=P?f:r||f,U=An(()=>I?e.find(M=>M.id===I.id)??I:null,[I,e]),_=gi(M=>{if(P&&f?.id===M.id){C(!1),b(null),l?.();return}C(!0),b(M),s?.(M)},[P,f,s,l]),S=gi(M=>{c?.(M),d&&!P&&(j.current&&(clearTimeout(j.current),j.current=null),M?b(M):j.current=window.setTimeout(()=>{b(null),l?.(),j.current=null},100))},[P,c,d,l]),A=gi(()=>{C(!1),b(null),l?.()},[l]),G=gi(M=>{let O=M.target;if(O.closest?.(".ri-annotationMarker")||O.closest?.(".ri-viewAnnotationPopup")||O.closest?.(".annotation-html-wrapper"))return;let N=i.current;N&&N.contains(O)&&(C(!1),b(null),l?.())},[i,l]),v=gi(M=>{M.key==="Escape"&&P&&(C(!1),b(null),l?.())},[P,l]);En(()=>{let M=i.current;return M&&(M.addEventListener("click",G),M.addEventListener("pointerdown",G)),document.addEventListener("keydown",v),()=>{M&&(M.removeEventListener("click",G),M.removeEventListener("pointerdown",G)),document.removeEventListener("keydown",v)}},[i,G,v]);let z=An(()=>(t?.model.rotation??[0,0,0]).map(M=>M*Math.PI/180),[t?.model.rotation]);return En(()=>{h()},[h,z]),lf((M,O)=>{if(!k.current)return;k.current.rotation.x=qc.lerp(k.current.rotation.x,z[0],1-Math.exp(-5*O)),k.current.rotation.y=qc.lerp(k.current.rotation.y,z[1],1-Math.exp(-5*O)),k.current.rotation.z=qc.lerp(k.current.rotation.z,z[2],1-Math.exp(-5*O));let{rotation:N}=k.current;Math.abs(N.x-z[0])+Math.abs(N.y-z[1])+Math.abs(N.z-z[2])>1e-4&&h()}),Yc("group",{ref:k,children:[e.map(M=>{let O=`${M.worldPosition.join(",")}-${M.title}-${M.id}`;return sr(Qw,{annotation:M,occluders:L,worldPositionsRef:o,onClick:_,onHover:S,showAnnotationOnHover:d},O)}),U?sr(Jw,{annotation:U,occluders:L,popupRef:n,onClose:A,hideCloseButton:p},`popup-${U.id}`):null]})}import{useEffect as Zw,useMemo as uf}from"react";import{Html as pf,Line as e1}from"@react-three/drei";import{BoxGeometry as t1,EdgesGeometry as r1,Vector3 as df}from"three";import{jsx as Or,jsxs as yi}from"react/jsx-runtime";var n1="#22d3ee",i1="#facc15";function Ss(e,t){let r=e<10?e.toFixed(3):e.toFixed(2);return t?`${r} ${t}`:r}function o1(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Cs({position:e,children:t}){return Or(pf,{center:!0,position:e,zIndexRange:[20,0],children:Or("div",{className:"ri-measureLabel",children:t})})}function a1({box:e,unit:t}){let r=uf(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),n=uf(()=>{let[s,c,l]=e.size;return new r1(new t1(s||1e-4,c||1e-4,l||1e-4))},[e.size]);Zw(()=>()=>{n.dispose()},[n]);let[i,o,a]=e.size;return yi("group",{position:r,children:[Or("lineSegments",{geometry:n,children:Or("lineBasicMaterial",{color:i1})}),yi(Cs,{position:[0,-o/2,a/2],children:["W ",Ss(i,t)]}),yi(Cs,{position:[-i/2,0,a/2],children:["H ",Ss(o,t)]}),yi(Cs,{position:[i/2,-o/2,0],children:["D ",Ss(a,t)]})]})}function Qc({points:e,unit:t,box:r,showDimensions:n}){return yi("group",{children:[e.map(i=>Or(pf,{center:!0,position:i.position,zIndexRange:[15,0],children:Or("div",{className:"ri-measureDot"})},i.id)),e.slice(1).map((i,o)=>{let a=e[o].position,s=i.position,c=new df(...a).distanceTo(new df(...s));return yi("group",{children:[Or(e1,{points:[a,s],color:n1,lineWidth:2}),Or(Cs,{position:o1(a,s),children:Ss(c,t)})]},`${e[o].id}-${i.id}`)}),n&&r?Or(a1,{box:r,unit:t}):null]})}import{forwardRef as s1,useCallback as Io,useEffect as hf,useImperativeHandle as l1,useMemo as mf,useRef as wt}from"react";import{useXR as ff,useXRHitTest as c1,useXRInputSourceEvent as u1}from"@react-three/xr";import{useFrame as d1}from"@react-three/fiber";import{Matrix4 as p1,Vector3 as gf}from"three";import{Fragment as y1,jsx as Bo,jsxs as xf}from"react/jsx-runtime";var h1=1,bf=1,m1=.1,f1=10;function g1(e,t){let[r,n,i]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(r,n,i)||1;return{scale:t==="real-world"?1:h1/s,offset:[-o,-e.min[1],-a]}}function yf(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.hypot(t,r)}function vf(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.atan2(r,t)}var b1=s1(function({box:t,scaleMode:r,children:n,onARStateChange:i},o){let a=wt(null),s=wt(null),c=wt(null),l=ff(O=>O.session!=null),p=ff(O=>O.mode==="immersive-ar"),d=mf(()=>t?g1(t,r):null,[t,r]),h=wt(new gf(0,0,-bf)),m=wt(1),f=wt(0),b=wt(!0),P=wt(!1),C=mf(()=>new p1,[]),k=wt(new gf),y=wt(!1),j=wt(null),L=wt(!1),w=wt(0),I=wt(0),U=wt(1),_=wt(0),S=Io(()=>{if(!i||!p)return;let O={canPlace:y.current,isPlacementMode:b.current,isModelPlaced:P.current},N=j.current;N&&N.canPlace===O.canPlace&&N.isPlacementMode===O.isPlacementMode&&N.isModelPlaced===O.isModelPlaced||(j.current=O,i(O))},[p,i]),A=Io(()=>!p||!y.current?!1:(h.current.copy(k.current),P.current=!0,b.current=!1,S(),!0),[S,p]),G=Io(()=>{p&&(b.current=!0,S())},[S,p]),v=Io(()=>{let O=A();return!O&&p&&(b.current=!1,S()),O},[S,p,A]),z=Io(()=>{p&&(b.current=!1,S())},[S,p]);l1(o,()=>({placeCurrent:A,startPlacementMode:G,finishPlacementMode:v,cancelPlacementMode:z}),[z,v,A,G]),hf(()=>{if(!l){h.current.set(0,0,-bf),m.current=1,f.current=0,y.current=!1,L.current=!1,b.current=!0,P.current=!1,j.current=null;return}p&&(y.current=!1,L.current=!1,b.current=!0,P.current=!1,j.current=null,S())},[S,l,p]),c1((O,N)=>{if(!p||O.length===0){y.current&&(y.current=!1,S());return}N(C,O[0])&&(k.current.setFromMatrixPosition(C),y.current||(y.current=!0,S()))},"viewer"),u1("all","select",()=>{!p||L.current||!b.current||A()},[p,A]),hf(()=>{if(!p)return;let O=Z=>{Z.touches.length===2&&(L.current=!0,w.current=yf(Z.touches),I.current=vf(Z.touches),U.current=m.current,_.current=f.current)},N=Z=>{if(!L.current||Z.touches.length!==2)return;Z.preventDefault();let te=yf(Z.touches);if(w.current>0){let Se=te/w.current;m.current=Math.min(f1,Math.max(m1,U.current*Se))}let ie=vf(Z.touches);f.current=_.current-(ie-I.current)},$=Z=>{Z.touches.length===0&&requestAnimationFrame(()=>{L.current=!1})};return window.addEventListener("touchstart",O),window.addEventListener("touchmove",N,{passive:!1}),window.addEventListener("touchend",$),window.addEventListener("touchcancel",$),()=>{window.removeEventListener("touchstart",O),window.removeEventListener("touchmove",N),window.removeEventListener("touchend",$),window.removeEventListener("touchcancel",$)}},[p]),d1(()=>{let O=a.current,N=s.current;if(!O||!N)return;!l||!d?(O.visible=!0,O.position.set(0,0,0),O.rotation.set(0,0,0),N.scale.setScalar(1)):(O.visible=!p||P.current,O.position.copy(h.current),O.rotation.set(0,f.current,0),N.scale.setScalar(d.scale*m.current));let $=c.current;if($){let Z=p&&b.current&&y.current;$.visible=Z,Z&&$.position.copy(k.current)}});let M=l&&d?d.offset:[0,0,0];return xf(y1,{children:[xf("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[Bo("ringGeometry",{args:[.05,.07,32]}),Bo("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),Bo("group",{ref:a,children:Bo("group",{ref:s,children:Bo("group",{position:M,children:n})})})]})}),wf=b1;import{useEffect as Ts,useMemo as wr,useRef as on}from"react";import{useFrame as v1,useThree as x1}from"@react-three/fiber";import{Box3 as w1,CatmullRomCurve3 as Mf,Sphere as M1,Spherical as S1,Vector3 as an}from"three";var C1=1.2;function Jc({controlsRef:e,sceneRef:t,config:r,playing:n,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s}){let c=x1(z=>z.invalidate),l=wr(()=>r.waypoints??[],[r.waypoints]),p=l.length>=2,d=r.loop??!0,h=wr(()=>{if(l.length<2)return 24;let z=0;for(let M=0;M<l.length-1;M++)z+=l[M].segmentDuration??3.5;return d&&l.length>1&&(z+=l[l.length-1].segmentDuration??3.5),Math.max(z,4)},[l,d]),m=r.duration??h,f=wr(()=>l.map(z=>[...z.position,...z.target,z.azimuthAngle??"",z.polarAngle??"",z.segmentDuration??""].join(",")).join(";"),[l]),b=wr(()=>{let z=[];if(l.length<2)return z;let M=0;for(let O=0;O<l.length-1;O++)M+=l[O].segmentDuration??3.5,z.push(M);return d&&l.length>1&&(M+=l[l.length-1].segmentDuration??3.5,z.push(M)),z},[l,d]),P=wr(()=>z=>{if(l.length<2||b.length===0)return z/m;let M=b[b.length-1],O=d?z%m:Math.min(z,m),N=m>0?O/m*M:0;for(let $=0;$<b.length;$++)if(N<=b[$]){let Z=$===0?0:b[$-1],te=b[$]-Z,ie=te>0?(N-Z)/te:0,Se=d?l.length:l.length-1,Ue=$/Se,rt=1/Se;return Ue+ie*rt}return 1},[l.length,b,m,d]),C=wr(()=>p?{position:new Mf(l.map(z=>new an(...z.position)),d,"catmullrom",.5),target:new Mf(l.map(z=>new an(...z.target)),d,"catmullrom",.5)}:null,[f,p,d]),k=wr(()=>{if(!p||!l.every(M=>Number.isFinite(M.azimuthAngle)&&Number.isFinite(M.polarAngle)))return null;let z=l.map(M=>({azimuth:M.azimuthAngle,polar:M.polarAngle,distance:new an(...M.position).distanceTo(new an(...M.target))}));for(let M=1;M<z.length;M+=1){let O=z[M-1].azimuth,N=z[M].azimuth;z[M].azimuth=N+Math.round((O-N)/(Math.PI*2))*Math.PI*2}return z},[f,p]),y=on(0),j=on(0),L=on(new an),w=on(new an),I=on(!1),U=on(0),_=on(!1),S=on(null),A=wr(()=>new an,[]),G=wr(()=>new an,[]),v=wr(()=>new S1,[]);return Ts(()=>{y.current=0,U.current=0,j.current=0,_.current=!1},[f,d,m]),Ts(()=>{i&&(U.current=0,y.current=0,_.current=!1)},[i]),Ts(()=>{if(!n){I.current=!1,y.current>0&&!i?U.current=y.current:i&&(U.current=0),(y.current>0||_.current)&&s?.();return}y.current>=m&&!d&&(y.current=0,U.current=0,_.current=!1);let z=e.current;if(z&&(z.getPosition(L.current),z.getTarget(w.current)),i||_.current||U.current===0?(y.current=0,U.current=0,_.current=!1):U.current>0&&U.current<m?y.current=U.current:(y.current=0,U.current=0),j.current=0,!p){let M=t.current;if(M){let O=new w1().setFromObject(M).getBoundingSphere(new M1);S.current={center:O.center.clone(),radius:O.radius>0?O.radius:1}}}I.current=!0,c()},[n,p,e,t,c,m,d,f,i,s]),Ts(()=>{if(!n||!a)return;let z=e.current;if(!z)return;let M=()=>{_.current||a()};return z.addEventListener("controlstart",M),()=>z.removeEventListener("controlstart",M)},[n,e,a]),v1((z,M)=>{if(!n||!I.current)return;let O=e.current;if(!O)return;y.current+=M,j.current+=M;let N=P(y.current),$=!d&&y.current>=m;if(N=d?N%1:Math.min(N,1),C)if(C.target.getPoint(N,G),k){let te=d?k.length:k.length-1,ie=Math.min(N,1)*te,Se=Math.min(Math.floor(ie),te-1),Ue=(Se+1)%k.length,rt=N>=1?1:ie-Se,gt=rt*rt*(3-2*rt),Fe=k[Se],ze=k[Ue],nt=ze.azimuth+Math.round((Fe.azimuth-ze.azimuth)/(Math.PI*2))*Math.PI*2,dt=Fe.azimuth+(nt-Fe.azimuth)*gt,bt=Fe.polar+(ze.polar-Fe.polar)*gt,pt=Fe.distance+(ze.distance-Fe.distance)*gt;v.set(Math.max(pt,1e-6),Math.min(Math.max(bt,1e-6),Math.PI-1e-6),dt),A.setFromSpherical(v).add(G)}else C.position.getPoint(N,A);else{let te=S.current;if(!te)return;let ie=N*Math.PI*2,Se=te.radius*2.2;A.set(te.center.x+Math.cos(ie)*Se,te.center.y+te.radius*.6,te.center.z+Math.sin(ie)*Se),G.copy(te.center)}let Z=Math.min(j.current/C1,1);if(Z<1){let te=Z*Z*(3-2*Z);A.lerpVectors(L.current,A,te),G.lerpVectors(w.current,G,te)}if(O.setLookAt(A.x,A.y,A.z,G.x,G.y,G.z,!1),$){I.current=!1,_.current=!0,y.current=0,U.current=0,o?.();return}c()}),null}import{useRef as Rn,useState as T1,useCallback as Mr,useEffect as _1}from"react";import{jsx as Ft,jsxs as Zc}from"react/jsx-runtime";var P1={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},E1={up:"4 16 12 8 20 16",down:"4 8 12 16 20 8",left:"16 4 8 12 16 20",right:"8 4 16 12 8 20"},_s=({direction:e})=>{let t=P1[e],r=E1[e];return Zc("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[Ft("polyline",{points:r,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),Ft("polyline",{points:r,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Ir=16,A1={"bottom-left":{bottom:Ir,left:Ir,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Ir,right:Ir,top:"auto",left:"auto",transform:"none"},"top-left":{top:Ir,left:Ir,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Ir,right:Ir,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:Ir,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},R1=({controlsRef:e,enabled:t=!0,opacity:r=.9,moveSensitivity:n=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=Rn(null),[s,c]=T1({x:0,y:0}),l=Rn(!1),p=Rn({x:0,y:0}),d=Rn(void 0),h=Rn(void 0),m=Rn(null),f=Rn(0),b=()=>e.current,P=(v,z,M)=>{let O=Math.hypot(v,z);if(O>M){let N=M/O;return{x:v*N,y:z*N}}return{x:v,y:z}},C=v=>{let M=Math.abs(v);return M<.12?0:Math.sign(v)*((M-.12)/(1-.12))},k=Mr(()=>{let v=()=>{let{x:z,y:M}=p.current,O=C(z),N=C(M);if(t&&(O!==0||N!==0)){let $=b();$&&$.rotate(-O*i,-N*i,!0)}d.current=requestAnimationFrame(v)};d.current=requestAnimationFrame(v)},[t,i]),y=Mr(()=>{d.current&&cancelAnimationFrame(d.current)},[]),j=Mr((v,z)=>{if(!a.current||!l.current)return;let M=a.current.getBoundingClientRect(),O=M.left+M.width/2,N=M.top+M.height/2,$=M.width/2-18,Z=v-O,te=z-N,ie=P(Z,te,$);c(ie),p.current={x:ie.x/$,y:ie.y/$}},[]),L=Mr(v=>{if(!t)return;v.preventDefault(),v.stopPropagation(),l.current=!0,k();let z="touches"in v?v.touches[0]:v;j(z.clientX,z.clientY)},[t,k,j]),w=Mr(v=>{if(!l.current)return;v.preventDefault();let z="touches"in v?v.touches[0]:v;j(z.clientX,z.clientY)},[j]),I=Mr(()=>{l.current=!1,c({x:0,y:0}),p.current={x:0,y:0},y()},[y]),U=n*10,_=Mr(v=>{t&&b()?.forward(v*U,!0)},[t,U]),S=Mr(v=>{t&&b()?.truck(v*U,0,!0)},[t,U]),A=Mr((v,z,M)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),m.current={control:v,amount:z,action:M},f.current=0,M(z);let O=N=>{if(!m.current)return;if(f.current===0){f.current=N,h.current=requestAnimationFrame(O);return}if(N-f.current>200){let{amount:Z,action:te}=m.current;te(Z),f.current=N}h.current=requestAnimationFrame(O)};h.current=requestAnimationFrame(O)},[t]),G=Mr(v=>{m.current?.control===v&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),m.current=null,f.current=0)},[]);return _1(()=>(window.addEventListener("mousemove",w),window.addEventListener("mouseup",I),window.addEventListener("touchmove",w,{passive:!1}),window.addEventListener("touchend",I),window.addEventListener("touchcancel",I),()=>{window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",I),window.removeEventListener("touchmove",w),window.removeEventListener("touchend",I),window.removeEventListener("touchcancel",I),y(),h.current&&cancelAnimationFrame(h.current)}),[w,I,y]),t?Ft("div",{className:"mc__wrapper",style:{opacity:r,...A1[o]},children:Zc("div",{className:"mc__dpad",children:[Ft("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>A("up",1,_),onMouseUp:()=>G("up"),onMouseLeave:()=>G("up"),onTouchStart:v=>{v.preventDefault(),A("up",1,_)},onTouchEnd:()=>G("up"),onTouchCancel:()=>G("up"),children:Ft(_s,{direction:"up"})}),Zc("div",{className:"mc__middle-row",children:[Ft("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>A("left",-1,S),onMouseUp:()=>G("left"),onMouseLeave:()=>G("left"),onTouchStart:v=>{v.preventDefault(),A("left",-1,S)},onTouchEnd:()=>G("left"),onTouchCancel:()=>G("left"),children:Ft(_s,{direction:"left"})}),Ft("div",{ref:a,className:"mc__joystick",onMouseDown:L,onTouchStart:L,children:Ft("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),Ft("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>A("right",1,S),onMouseUp:()=>G("right"),onMouseLeave:()=>G("right"),onTouchStart:v=>{v.preventDefault(),A("right",1,S)},onTouchEnd:()=>G("right"),onTouchCancel:()=>G("right"),children:Ft(_s,{direction:"right"})})]}),Ft("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>A("down",-1,_),onMouseUp:()=>G("down"),onMouseLeave:()=>G("down"),onTouchStart:v=>{v.preventDefault(),A("down",-1,_)},onTouchEnd:()=>G("down"),onTouchCancel:()=>G("down"),children:Ft(_s,{direction:"down"})})]})}):null},Sf=R1;import{HexColorPicker as L1}from"react-colorful";import{jsx as Ps,jsxs as Cf}from"react/jsx-runtime";var eu=({colorPicker:e,onClose:t,itemMaterials:r,setItemMaterials:n,inline:i=!1})=>Cf("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:o=>o.stopPropagation(),children:[Ps("p",{className:"ri-popoverLabel",children:"Color"}),Ps(L1,{color:r[e.objectId]?.hex??"#ffffff",onChange:o=>n(a=>({...a,[e.objectId]:{...a[e.objectId],hex:o}}))}),Cf("div",{className:"ri-inlineRow",children:[Ps("span",{className:"ri-colorCode",children:r[e.objectId]?.hex??"#ffffff"}),Ps("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});import{jsx as et,jsxs as Br}from"react/jsx-runtime";var tu=({materialPopup:e,textureUrl:t,triggerFileUpload:r,clearTexture:n,inline:i=!1,offset:o,rotationDegrees:a,onOffsetChange:s,onRotationChange:c,isPositioning:l=!1,onEndPositioning:p})=>Br("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:d=>d.stopPropagation(),children:[et("div",{className:"ri-popoverHeader",children:et("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),Br("div",{className:"ri-materialBody",children:[t?et("div",{className:"ri-previewFrame",children:et("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):Br("div",{className:"ri-emptyState",children:[et("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:et("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909M3 21h18M3 3h18"})}),et("span",{style:{fontSize:12},children:"No texture applied"})]}),et("button",{onClick:()=>r(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&et("button",{onClick:()=>n(e.objectId),className:"ri-removeButton",children:"Remove texture"}),et("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}),t&&(s||c)&&Br("div",{className:"ri-texturePosition",children:[et("p",{className:"ri-texturePositionLabel",children:"Texture position"}),Br("div",{className:"ri-texturePositionGrid",children:[Br("label",{className:"ri-texturePositionField",children:[et("span",{children:"Offset X"}),et("input",{type:"number",step:.01,value:o?.[0]??0,onChange:d=>s?.(e.objectId,0,Number(d.target.value))})]}),Br("label",{className:"ri-texturePositionField",children:[et("span",{children:"Offset Y"}),et("input",{type:"number",step:.01,value:o?.[1]??0,onChange:d=>s?.(e.objectId,1,Number(d.target.value))})]})]}),Br("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[et("span",{children:"Rotation"}),Br("div",{className:"ri-texturePositionSliderRow",children:[et("input",{type:"range",min:0,max:360,step:1,value:a??0,onChange:d=>c?.(e.objectId,Number(d.target.value))}),et("input",{type:"number",min:0,max:360,step:1,value:Math.round(a??0),onChange:d=>c?.(e.objectId,Number(d.target.value))})]})]}),l?et("button",{type:"button",className:"ri-uploadButton",onClick:p,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):et("p",{className:"ri-texturePositionHint",children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically."})]})]})]});import{Fragment as k1,useEffect as ru,useRef as D1,useState as nu}from"react";import{Fragment as iu,jsx as ut,jsxs as vi}from"react/jsx-runtime";function Tf({entries:e}){return ut(iu,{children:e.map(([t,r])=>{let n=r!==null&&typeof r=="object",i=n?Object.entries(r):[];return n&&i.length>0?vi("div",{className:"left-panel__data-group",children:[ut("span",{className:"left-panel__data-key",children:t}),ut("div",{className:"left-panel__data-children",children:ut(Tf,{entries:i})})]},t):vi("div",{className:"left-panel__data-row",children:[ut("span",{className:"left-panel__data-key",children:t}),ut("span",{className:`left-panel__data-value left-panel__data-value--${typeof r}`,children:n?Array.isArray(r)?"[]":"{}":String(r)})]},t)})})}function O1({content:e}){let t=e!=null,[r,n]=nu(t),[i,o]=nu(t),a=D1(e);return t&&(a.current=e),ru(()=>{if(t){n(!0);return}if(r){o(!1);let s=setTimeout(()=>n(!1),300);return()=>clearTimeout(s)}},[t,r]),ru(()=>{if(r&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[r,t]),r?ut("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:ut("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function ou({isOpen:e,selectedObject:t,currentAction:r,onClose:n,onAction:i,renderActionExtra:o}){let[a,s]=nu(t);ru(()=>{t&&s(t)},[t]);let c=t??a,l=c?Object.entries(c).filter(([p])=>p!=="actions"):[];return ut("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&vi(iu,{children:[vi("div",{className:"left-panel__header",children:[ut("p",{className:"left-panel__title",children:c.label}),ut("button",{onClick:n,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&ut("div",{className:"left-panel__data",children:ut(Tf,{entries:l})}),ut("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&vi(iu,{children:[ut("div",{className:"left-panel__actions-label",children:"Actions"}),ut("div",{className:"left-panel__actions-list",children:c.actions.map((p,d)=>{let h=r?.action.id===p.id&&(r.binding===c||r.binding?.id===c.id||r.binding?.modelObjectId===c.modelObjectId||r.objectId===c.id||r.objectId===c.modelObjectId),m=o?.(p.id);return vi(k1,{children:[ut("button",{onClick:f=>i({objectId:c.modelObjectId||c.id||"",action:p,binding:c,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${p.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":p.id,"data-label":p.label,children:p.label}),ut(O1,{content:m})]},d)})})]})]})})}import{useMemo as B1,useState as Pf}from"react";import{Boxes as z1}from"lucide-react";import{useState as I1}from"react";import{jsx as zr,jsxs as zo}from"react/jsx-runtime";function _f({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:r,title:n,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:c,onToggle:l,openButtonIcon:p,closeButtonIcon:d,closeButtonAriaLabel:h}){let[m,f]=I1(!1),b=c!==void 0?c:m,P=C=>{c===void 0&&f(C),l?.(C)};return zo("div",{className:`ri-sidepanel-wrap ${b?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!b&&zo("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>P(!0),"aria-label":t,title:"Open panel",children:[p,e?zr("span",{children:e}):null]}),zo("div",{className:`ri-sidepanel ${b?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!b,children:[zo("div",{className:"ri-sidepanel__header",children:[zo("div",{className:"ri-sidepanel__header-top",children:[zr("span",{className:"ri-sidepanel__eyebrow",children:r}),zr("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>P(!1),"aria-label":h,title:"Close",children:d??zr("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:zr("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),zr("p",{className:"ri-sidepanel__title",children:n})]}),zr("div",{className:"ri-sidepanel__search-wrap",children:zr("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:C=>o(C.target.value)})}),zr("div",{className:"ri-sidepanel__list",children:s})]})]})}import{jsx as Ln,jsxs as N1}from"react/jsx-runtime";function au({objectBindings:e,onAction:t,onFocus:r,onHover:n,isOpen:i,onToggle:o}){let[a,s]=Pf(null),[c,l]=Pf(""),p=B1(()=>Object.entries(e).filter(([d,h])=>{let m=c.toLowerCase();return d.toLowerCase().includes(m)||(h.label??"").toLowerCase().includes(m)}),[e,c]);return Ln(_f,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:Ln(z1,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${p.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:i,onToggle:o,closeButtonAriaLabel:"Close scene objects panel",children:p.map(([d,h])=>{let m=h.visible!==!1,f=a===d;return N1("div",{onClick:()=>r(h),onMouseEnter:()=>{s(d),n?.(h)},onMouseLeave:()=>{s(null),n?.(null)},className:`ri-sidepanel__row${f?" ri-sidepanel__row--hovered":""}`,children:[Ln("span",{className:`ri-sidepanel__label${f?" ri-sidepanel__label--hovered":""}`,children:h.label??d}),Ln("button",{type:"button",onClick:b=>{b.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:m?"Hide":"Show",children:Ln("span",{className:`ri-sidepanel__checkbox${m?" ri-sidepanel__checkbox--checked":""}`,children:m&&Ln("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:Ln("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}import{AlertTriangle as Os,Box as Hf,Camera as gM,Download as bM,Eraser as yM,FileImage as vM,RotateCcw as xM,ChevronLeft as wM,Square as Wf,ChevronRight as MM,RectangleGoggles as SM,QrCode as CM,X as gu,Expand as TM,Play as _M,Pause as PM,Smartphone as Xf,PencilRuler as EM,RulerDimensionLine as AM,Grid3X3 as RM,Orbit as LM}from"lucide-react";import{useRef as tt,useEffect as No,useMemo as Qt,useCallback as Es,useSyncExternalStore as V1}from"react";import{useThree as G1,useFrame as H1}from"@react-three/fiber";import{Sphere as W1,PivotControls as X1}from"@react-three/drei";import{Vector3 as lr,Vector2 as q1,AdditiveBlending as su,TextureLoader as $1,Matrix4 as Y1,Quaternion as xi,Euler as As}from"three";var Ef="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N15mFxllfjx76nqTmclewJJSEIWsgBh3xcNi0mqExHUjMO46wwz/lSYcQHFJTqKqCgoKu4CMipBBQzpEAJE9kWQnSydzr7va3d6qTq/P97ukD1Vdd9b997q83mefgKm6r1Huuq+577LecEYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYY00qnk446BhOcRB2AMcaY+NP76EEVnwX+BTgeqAAWocyggltkAiuijdAUyhIAY4wxh6UPch4p7gUGHOIluxD+n0zizlLGZYKxBMAYY8wh6SzejXIP0PFIL0X4mCUByWEJgDHGmIPSGj4M/AY33J+PXWQZK1NYHmJYxpNU1AEYY4yJH63hWuAO8u/8AbqQ5rPhRGR8sxGAGNMahgP/hXIpwgBgO/APhF/LJB6NODxjTJnSmfwvwleKfPsbkuEkrwGZUFgCEFNawxeBbwJVh3jJX2jkk3IFW0sYljGmjKkizOKHwLUBmtkmGXr4ismEx6YAYkhruAn4Lofu/AHeSxXP6GyOK1FYxpgypi9SySz+QLDOH6DeRzwmfJYAxIw+xKXAdXm+fAxZntOZnB1mTMaY8qZz6ch6/gJ8IHBjwqvBIzKlYAlA3GT5WoHv6IfwuM7y8MU1xrQ7Opsu1DMDmOKnQf7qpR0TOlsDECP6ID1JsYnifi854DrJcLPnsIwxZUrn0J1mZgLne2pyG2kGygR2eWrPhMhGAOKkguMoPilLAd/Xmfxc5xa0bccY0w7pg/Skmdn46/wB7rDOPzksAYiTFpoCtyFczW5m6Fy6eojIGFOG9AH6k+Lv4HX9kCLc7rE9EzJLAOKkC4uA3YHbUSaym7/rA/QPHpQxppzoDAZTyZPAOM9Nz5FJLPDcpgmRrQGIGa1hOvB+T80tJstEmUKtp/ZMQukcutPCxcAolBTCcoRHZSJroo7NlI7OYijKo8Aw740Ll8sk/ua9XRMaSwBiRh/iQnI84bHJzcC7JcPTHts0CaE1VAFfA64Buuz31y3A7+nAF+RSNpU8OFNSOpvRZHkEGBhC88vZyTCZSjaEtk1IbAogZmQiTyI847HJXsDDWuNpi49JDJ1BZ2A28GUO7PzB1Xj/GE08qw9xTEmDMyWlNZxKlicIp/MH+Jl1/sljCUA8+d7K1xm4T2fyn57bNXGW5hbgHXm8ciRZ7lG1EcFypLM4F3gM6BvSJRrI8puQ2jYhsgQgjiZyPzDPc6tphNu1hpvsRl/+dAYjgU/k/QbhQmYxObyITBR0JhehzIZQa/PfLVPYGGL7JiSWAMSQCArcElLz1zGL3+mLVIbUvomDCt4LpAt6j/Kv4QRjoqA1TEJ4COgW5mXI8eMQ2zchsgQgvu6C0FZof4T1zNQHQr0xmCjluKDg9wjv9B+IiYLOZCLwV6BTyJeaI5N5I+RrmJBYAhBTkqER5bYQL3EZlTyqs+kX4jVMVIRTinjXMTqDwd5jMSWlM5mIcB/QMfSLCT8K/RomNJYAxFkTtwPbQ7zCmWR5WmsYHuI1TInpI/Sm2NXeKc7xG40ppZJ2/rCQ53moBNcxIbEEIMbkCrZC6KU1RwDP64OcF/J1TKk0cXLR703Z0dJJVeLOH+BWmUauRNcyIbAEIO6auQVoCPkqvUkxWx/i0pCvY0ojSIlXGwFIoAg6/y2kuatE1zIhsQQg5uRy1gG/LsGlupJjptbwvhJcy4RJA4wAKKe3Vg80CRFB5w/wSzv1L/ksAUiG74GHkwKPrAPwJ51VwP5xEz8SaASgilSABMKUVESdfwtpflrC65mQWAKQAJJhJcrvS3S5NMqvtIbPl+h6xiOdSwUwNlAjOVsHkAQRdf4Af5YJrCjxNU0ILAFICuE7uMNbSnM1+L7WcFOJrmd8aWQUwTsESwBiLsLOH7Ctf+XCEoCEkAx1KPeW+LLX6Ux+qtPsc5IYWS/D97YQMMYi7vyflQzPRXBdEwK7sSeJ8C0o8bYb4VOcxe+tdHBCBJv/bzNcH6C/h3aMZzqLCRF2/mBP/2XFEoAEkQxvIcyI4NJXsZ6/6vTQy4qaoMTTAr5KzvLSjvFGZzEB5X6i6/xX0Y+/RnRtEwJLAJJG+CagEVx5Ml2ZpTUcFcG1Tb6CbAHcVyLXAegSOupCxuj88jrnQmt4F8oDRNf5A9wmZ9Ac4fWNZ5YAJIxM5J/AnIgu/w6Ex7QmtHPFTQA6gz7AMX4aS1YCoCvopIu4lSzbSfEWFWzVOqbr4uRPZWgN7wDug0jrM+wkxa8ivL4JgSUASaR8O8Jrn47yhNYwKLIYQqRLOFoXcorWJnCkIxVw+9/ehNNVEW/thW03PwGugT1rVVIo7yfHY7oiuVNXWsM5wAygc7SB8CuZyOZIYzDeWQKQQFLNEyhPRhcAo4GndAYjI4vBM13IGF3E38myhhQvI6zXRXxPlXTUseUtxRiPrfXkIYZ4bC80uoiLET5+iL8eSxMfKWlAnuhDnAzMhMinM5rJcWvEMZgQWAKQXDdGfP0hpHlcazw+dUZE5zOAFI8B79jrf64CvsBivhdRWIVTRntu8TTP7YVD+Pph/145tUSReKOzGEWO2UCvqGNB+T+ZwvKowzD+WQKQUFLNQ8CLEYdxDPD31ieV5Krg/wFHH/TvlP/WxQlZES+eE4Bc/DtOrWUCykVHeFmizjbQGYxEmQuxWL+gpLk56iBMOCwBSDKJfBQAoC85HtOZnBF1IAGccpi/E3Lcmoj5cPU6BQDEPwEgxTfyeNXK0OPwRGcwmDRz8LWYM7gZMpE3ow7ChMMSgCSbyP3AP6IOA+iF8Ig+yHlRB1KkI22rPJfFXFGSSIqkM+gMHOu1UYl3Uqe1TMlzt8Ky0IPxQGsYRJq5EKu1F8mZAjMFswQgwURQ4H+jjqNVd1I8rDVcHHUgRag74iuU72ttjIeS04zC//e5vz4UmyfRfagiSF5P/6DxTwB0Nv2Ah4FhUceyh/KkZHg66jBMeCwBSDjJMAN4Puo4WnUBZuhMLos6kIIoC/J41TBS/GfosRTL//B/m3guBFzEu8l3iiLF0lBjCUhn0Icsj0Jov8PipPlu1CGYcFkCUA6UaVGHsJfOCDN0JpdHHUjehHl5vU75qi6hR8jRFMf3AsA22ZiuAxBuyPOVSof4Hl2rc+hOmlnAiVHHsp95PMesqIMw4bIEoAxINQ9FWhfgQFUI03UWV0YdSF5a8hoBAOhNji+GGkvxwkkAYrgQUOuYDJyZ58vXy7E0hBlPsXQ2XWhiBsRwrYVwo0wr8cFjpuQsASgX+a2GLqUOKNN1Fh+MOpAjkdGsBrbm9WLlWq2NZRXEcIaPJYZTADm+WsCrj7y+IwI6g85kmYlwYdSxHMRy+nJP1EGY8FkCUCZkEo8Cf486jv2kUe7QWXw06kCOSPIeBeiE8LVQYymQTicNjAip+aGtZwzEgtaRQQqoyyAsDjGcouiLVJLmXvYtPBUfwg/s0J/2wRKAciIFPRmVShrltzqT/xd1IIeVK2iv88e1NkYVEI/iOMI8Ja4iRoWelC8X9PpcvEYAdBop1nMXkIk6lkPYTEd+G3UQpjQsASgjMomnUB6JOo6DEITbdCbXRB3IYRSSAKSR2Gy/BBgVaut62EJJJaO1TADOL+hNcRsBOIsfAh+IOoxDEn4s49kZdRimNCwBKDepeA1P70UQbtEaro06kEMotNrZlbooJoWPcqEfynRCyO3nR/hKEe+KzQiAzuJGiHUSXE8LP406CFM6lgCUGZnEsxDb7TsC3KI1XBd1IAfI8UYR77rJexzFGR5y+yeF3P4R6WIuAy4o+I0V8RgB0Bo+h/KlqOM4gl/JFDZGHYQpHUsAypFbJX2k8rZRuiluSYCMYhVa8HnnF2od1aEEVJiwE4CxOi3ie4UW9fRfzxDWeo+lQFrDh4HvRx3HETSSjX2MxjNLAMqQTOYlYEbUcRzBd3QWn406iH0IbxX8HuU7qqRDiKYQYe0AaNOZc6IrUauLuDiPE/8OZnFruezIaA3vAX4DMT9MSvmNTGFV1GGY0rIEoFy5J6Y4F/IQlFtjlgQUc+rZSdRFV+ugdQtg+IfHaKTTAMU8/UPE8/+t52L8CaiIMo48NJOyp//2yBKAMiXVvA7cF3UcR+CSgBo+E3UgrYpZBwDwjcgOCurOYKBD6NfRaErVah1nAuOLenOEOwD0Ic4CHoAYHyD1tt/JpHifl2DCYQlAefsakI06iCMQ4EcxqRNQ7LnnQxD+3Wsk+WoJffi/TTQjAIXu+9/3vZEkAPogJ5JjFtA1iusXqJl0bBazmhKzBKCMSYa3gLuijiMPrk5A1CMBWV4P8O4v62o6e4slf2EvAGxT8hEAXcJo4N0Bmij5FIA+yDBSzAZ6lfraRbpbJrAk6iBMNCwBKHdZvgrxPAxlP24koIZPRxbAKDYC64t8+zHU8ymf8eRFSpYAjNS5IVYbPJgs1xPkHiUs8hfMkels+pFiFjCglNcNIIva0397ZglAmZMprEK4Peo48iTAj6NMAih+HQDAdTqfbt4iyU+ppgAqqA/txMED6CKOBf41QBNNLC/dk60+SE+yPAIcX6prBqb8UapZGHUYJjqWALQHWb4FbIk6jDy5JCC6NQFBpgH6UFHySm+lSgAgVdJpgC8QbHFjnYynxVcwh6Nz6YjwADEomFSAHMp3ow7CRMsSgHZAJrMF+EHUcRSg7eyAKJKAVwK+//O6ojTzv6oIcFwpruUuWJoEQOfRG+HjAZvJ93THQHQ6aRq4O6bH+h7OdJkcaLTLlAFLANqLNLdC9FXRCuCSgFn8R0mvmuLlgC10p5H/9hLLkczhGKBLSa7llOYJt5Jr0YD/v5T5nqI5vK7cAry3JNfyR1FujDoIEz1LANoJmcCumJ1glw9B+bnWlHCL3WbeAnYHbOVaXUQ/H+EcVksJn/4BlDGhX8KtoQg+8iPhjwDoLL4OsalhUYi/ttYJMe2cJQDtSV9+BaVdGe2BALfrTK4qycXOoBmKKAm8r664OeywDS3BNd4mDNEZIW91rOA/gZ6B29FwEwCt4d9RpoV5jZAoOb4TdRAmHiwBaEfkDJoRvhp1HEVII9ylM5lakqtp4HUAAJ/WBQz00M7hhF8CeF8pKsM7eri1mqKf46JbwlvdrjOZDPwsrPZDNqP1rBBjLAFodyZyD5LIG0Aa4fetN99wSeB1AAAdqQj9+NdSJwCQC3ErYIp/w88e+g0yhk0e2jmAzuRsJBH1/Q9O+FbUIZj4SOaH2BRNBNVZ3AA8FHUsReiAMF1rmCwZHgvtKsIrXs6QUz6ptdwkI1npobWDGQICVcdAp8FQ2evtnw69oLL32/+eqgCpgHRrmYJUB0jvtc6uZTtoa9XoltYdo9nd0Lx5358Ox7xf9YatwDpgpYh4OT9eFaHO2xbKUIb/tYaxQA2lXXjpjzJTMvwj6jBMfMT7iEoTGq3hEeCSqOMoUj2QkQyPh9G4vklXqtiGnxGy22REsBMPVbUbMAY4AffUPxQYTMOyC6g6ppJU+GcBHUY9sBRYDixr/XMxbh3FfBFpyqcRrSODMtNLRMJvZDif9NJWK53BQNI8TRSjLn4owtkyyRIA8zZLANopncWZKM+T3M/AdlJcJhN5IYzGdRELwct8926yjJBRRz5rXVUrcDX3x+E6+xOBsbhOJ4m/pxagFnfIUtvPqyJywPy8LuJR4GJP1/2ijPB3vK3OoTtNPI5wsq82I3CfZLgy6iBMvCTxpmI80Rr+TPL2MO9tGzkuCWNRk9YxHeX9fhrjVhl5YG0AVT0GOAM4HTgfOA8iOVCo1LbjKi4+BTzN2ndvZ9eMv3trXblcRvI3L03NpSP1PJzAQj97U1KcKhN5NepATLxYAtCO6SxGobxBsteCbADe2XryoTday5cRvu2pud20MJxRWgFc2vpzAXCsp/YTTpWmecLuJ6F+DjTMhdzmAM0xQkYGPwlQp5OmK/eQ7CQZ4B7J8IGogzDxYwlAO6cz+SkSwSl2fq0nzTtkgr/qb7qISbgFX8VLdYGqc6HzpdD1A+uoGNIP+87lIQeNL0PDI1D/COx+ErQx3zfXM5xuIuSCRqE13A78Z9B2IpYlx0kymXlRB2Lix25G7ZzW0Bc3T9s96lgCWkmai3ydba619EWKOBq4YiB0eQ90uRI6XuRW3ptgcrug4SHY+Veonwm5bYd79YsygjODXlJruA7K4Khc5W6p5kNRh2HiyRIAg87ierQsqoMtR7lIqlnmozFdxFLyWfVdMcR1+l3fDx3PxcprhCkLu5+DnffCzj9Bdt3+L7hDRvCxIFfQWbwf5U8k/xeZRThBJpXmYCSTPEn/gBsfdvAj3PatpBuMMFtne6rDL4fZMpXuBz3+Gwa9BEOWQp9boeP52FcqbGn337nPrTBkJQyYA90+BLJn7eSbQVrXWVyAchfl8Yu80zp/czjl8CE3AclUGhBuiDoOT0aRZY4+6KWe/H4JQBo6XQr9p7vOp/cPoeq0wJcxRZIK9/vodxcMXeP+7HVLpaoWNbKpNQxH+SvQ0XOkUWgm520RqylTNgVggNZKbLN4HoLPn8bEs6S5TCawq9gGdBHjgcfocAJ0+zh0+6B78jdxtxC4E7hDRFbn8wadQR/SPIOf2g9x8HPJ8F9RB2HizRIAs4fO5CIknOp6kVAeQZgsGfJeQr7nraopsksm0/jW/XTOiH1VEqkZuB/4kYg8fagX6XQ60ZVHgXNLFlm4GkkzUiawIupATLzZFIDZQ6p5AuGBqOPwRrgU+KPOzb/Ogap2U9X/AN4gfdwDdK62zj+5KoH3A0+p6ouq+mFVrdz7BTqNFF24m/Lp/EH5hXX+Jh+WAJh95fgi7smpXFxBA79WPXwvrqpDVPVHwCrgF7ja+6Z8nI6bFliiql9SVbft9Sx+iJRVidzd5Phe1EGYZLAEwOxDqlmI6wDLyUeo4daD/cVeHf8C4LNAt5JGFrmWqAMotYHAjcAK3ThnNpW9fJ1AGBc/kSlHPnfCGLCxTXMQ+hC9yFEL9Io6Fs9ukAw3AqjqUOC/gauBqiiDCqYF2NX60wA0tf407vfPOd7u7Fta/31/6dYfcNWh00CH1p+qvf6swi2U79L6kz6gpcTI7oSVv4W6G6HxgJoCSbMTGCYZNkQdiEkGSwDMQZVNJbT99Z5wI2c9NAi4isScgZDDnZ+zrfXPnbhTeHdB4esbQ7B3MtAFV1SyO24wJSG3mJYdsOwnsOQH0Lwp6miKo3xDqpkWdRgmORLy7TSlptPpQFfeAoZHHYsXlb1g2Bdh6LWQivMDfwuwufVnW+vPDg7+xB53Kd5OBrrjBpR6EusRg+atsPgmWPojyO2OOppCbASGS4btUQdiksMSAHNIOpOrEP4v6jgCkUoY8ikYMQ0qe0QdzUHsxnX2m3D38M0ks7PPlwA9gD64ZKAvsTwBuWE51H4VVv0e0KijOTLhf2QSt0QdhkkWSwDMIaki1PAcwllRx1KUflNgzC3QOU6DGC3AemBt60/RdYrKyFHA0a0/fYjVCMG2F2De52HLk1FHcjjLgFHF1Lsw7ZslAOaw9EHOI8VTJOmz0m0cnHA79Dwv6kha7QDW4Dr8DZT3E35QaaAfLhk4BremIGoKq/8I8z8HjWujDuZAwsdkEndEHYZJnuTc1E1ktIa7gX+LOo4jSneCYdfBsC9BqkPEwewCVgMrcUP7pjhHAYNwhzJ2jTaU5q2waBosuw00NkncAjpxooxvf/s5TXCWAJgj0hkMJM0C4vE4dnC9x8MJP4cux0cYxE5gBa7T3xphHOWqNy4ZOBboFF0YW56BN6+GHW9EF8PbrpAM90cdhEkmSwBMXrSGrwLfjDqOA1QdDaO+BwM/FFEAOdyT/mIg8fvIE0Jw0wTDgAFEUs9MW2D5z2DBDa6WQBSUF8hwjkgSVimaOLIEwORF59KRBuYBQ6OOZY8BV8HYn0a0un8HsBRYQjz24rdXHXEjAsNw0wUlVr8IXv0wbH229NeGSyTDY1Fc2JQHSwBM3nQmUxHuiToOKrrD2NsieOpX3FEBC3Hb9ky89AOOxy0eLCHNwpKbofZrkGsq1VVnSYZMqS5mypMlAKYgWsPfgXdEFkDvS2Hc76DjoBJetAVYjuv4d5TwuqY4XYERuFGBEm4p3PEavPoh92e4lBRnyET+GfaFTHmzBMAURGdyCsKLlHqzdqojjJwGx30BpFRzvg3AIqCO8jogsb3oiEsEhuPOMSiB3G6onQZLvh/eTgHlj1LNVeE0btoTSwBMwbSGXwD/UbILdh0Lp97r/iyJRtzTfi2QLdE1TXgqcInAKEqWCGyY5UYD/J8r0EyKsTKRRb4bNu2PJQCmYFpDX1wPGf7qu/7vgXF3uHn/0DXhOv1a7Im/HLUlAqOByvAvt3sFvDwVtj7ns9XbJcOnfDZo2i9LAExRdCb/g/CD0C4gFXD8t1xhn9A1AwtwHb/VUyl/VbjRgBGEPpOVa4QF17nDhYJrIMtImcIqH40ZYwmAKYq+SCXreR13J/Wr40A45R7oeb73pveluMV9r+EO5Um4bD00bnAV61p2tP7sfPufybnXaA5Q989t0q01nqQC0h1B0lDRDSq6QsVRb/9Z2QOq+ro1GYnXCTgJV2UwZKvvhjf+E7KBzn74tmT4iq+QjLEEwBRNZ3IZwsNeG+31TjjlT1DV32uzB9oAvELiKvZlG6BhBTQsg4bV0LTBdfpN66GlhAcLVXSDqn7up0Nf6DgAOg+BToNiftzywfQCTsFVGgzRjlfhn++F+rpi3r0BGBGn4351ESeifBDhdJR1CL+VEVaXIEksATCBaA01wCQvjQ36GJz4C3eEb2h24Z74V4Z4DU9adsGuhbBzIdQvd0fUNq4n1sfTSsolb52GuISg6/HQZYQ7pyHWBFfj6kTc7oGQNG+Gf14Jmx8v9J2fkgy3hxFSobSWsQhfB97HgWUYvyoj+FYEYZkiWAJgAtHZjCbLawRaVSUw8usw4uve4jqQ4rb0vUFs5/kb18OOebBzvuv0G1YS684+X5KCToOh62iXEBx1AlT2jDqqQ6gETsCtDwjp9phrhNc/6aYF8rOAfpwkZ0S7MlXncxwVXA98gsMtnlDOlZF4XflowmEJgAlMa/g+8Pmi3pyqgpN+68r6hmYb8CKwOcRrFCHX7Dr77a/B9tdh1+KoIyqdqv7Q4zTocQZ0G+PWHsRKH+AMoFtI7Sss+ibUfoMjJnnC5TKJv4UUyBHpQoaRYhpwFfmtmrxNRvDZcKMyPlgCYALTB+hGJfOAgQW9sbI3nH4f9LwwnMDIAvNbf2JyfGvLLtj6Amx5Hra/6Z4G27t0JzhqHPQ6xyUEsVlDkMatcR1DaAcOrbkHXvuoKyB0cE9IJprKmzqfAaT5CsInKWSET/mLjOR94UVmfLEEIAF0Hr2p5BPACJQ1pPmDDGNB1HHtTWfxAZQ/5v2GLiPhjIeg87CQItoEvIA7ojdiuUbY+k/Y9ARse9WdJGcOLlXpkoGe50Cvs2Oy26AHcDahHTa0aS788wpo2bb/3yjC+TKJkp401Hq/uQ74NMWcuyx8XYbH8ORQcwBLAGJOF3I2KR5i36I7OeBvKN+TkaW9ORyO1vAocPERX9h1LJw1B6oGhBEFbk//m0T71K+w/Q3Y8AhseRHUCgsVLFUFvc6FvpdAV/+7TQuTBsbiRgRCuG1u/yf8Y6Lb1dGmxCV/9VW60JVPo1xP8UW+NpJljIxio8/YTDgsAYgxXUEnGqnj8MebPYnwXYZRE/W54FrDWNzeukMPF3Y/3T35d+gTQgT1wPMQ5b2neStsfNx1/I3roouj3HQcAH3GQ9/xrh5BZPoDZ1LMg/ER7ZoPL1wKu1eBK0s5VjIUtWewELqEjrTwKYTrgb4BmtoNVNtWwOSwBCDGtI5/RflDni9/A+EmlnOPjI9umbvWcDPwuYP+Zc8L4YwHQ7qBLwNeJrISvjsXwtoHYes/3PGwJhxSCb3Pg/6T3TbDSFThkoAQjh1uWOqSgPq6myXDF/xf4G06lwqO5SqEaSjHBWwui/IBGcmfvQRnSsISgBjTWr6EcGOBb6sDvksjd8oJlOxw8jaHXBDYezyc/jdId/V8xRzwT2CJ53bzoW5uf12NW8VvSqvrKDjmPW43QSS3spHAOLwvEGxal2PnmxdK70ue8duwo4qwiPcjfAv3fyJwk8DHZAR3emjLlJAlADGmdVyJ8pci374O4RY6cZsMoP7IL/dHZ+03ctH/clfa1/vq7nrgWUq+vU9bYMNcWPs3G+aPg06D4ZjLofcFlP6W1hc4hxCKB60DLhMRr5ml1nIOwveBCzw2+3kZEeK5ICY0lgDEmNZShfAirjxZsTai/JQKbpXjSlf3VmfxGMp4+lwGp88IofPfgOv8S7mNTmHzc7DyD9F3/Cnc4XZtu7KFfb/Nbesfs7jnsxbKoqbQYXUaCEe/B3pf6IoPle7CwLmEUEp4A/AOEZkXtCFdwmiy3ARcHjysffyvjOBrnts0JWIJQMzpYsaRZS5Cr4BNbQVuo5kfyRi8H1K+P61hLD0veJUzH6rYc9CMN/Nwq/xL1aO1dvyr/gS715Tmkmnc0fUdcFPOHXBLKytaf4rp31pwCUFz60/jXj/ltEmh07Ew4H2urkDJD2brhgAAIABJREFUbnEp4FTA+7bWVcCFIlLUHJcuoA9pvgp8CvfJ8enHMoJrPLdpSsgSgATQWk5DeATwUT91J/ALKviBDCW03kxVzybX+ASpqg7+Ws3hKvot89fkkWx/E1bcAfUhXjOFG0Hu3PpnJ1yHX0o53BruBtxxCfW4ZCHJugyHwR8t8RbCkcDJeL611gEXicjqfN+gq+lMA59B+TJhFDBQfscIPhH1ziMTjCUACaELOYUUj+BvnLEJuIMWviGjyfvGkg9VHQfMhcCjFntpAp7BjYqWQONaWPlH2BxSmYVOQBdcpdlOxPOb2IRLF3fgkoJE3urFjQQc+6GQtp4ezEBc4aB8qubmbSEuCTjs3JMqKer4IHAToWxTAIS7GcZHROJSXtMUK463HXMIISQB4AaA7/SVCKjqSOAJ4OjAke2xC3gKSnESarYBVv/Frez3WbFPcB1+d1yn77VvKIEcLhnYjksIknbrT3WEAVfA0ZNDPm2yTS/gfDwvDnwVGC8iWw72l1pHNcr3cBWLwqH8hZV8IMqtxsYfSwASRhdxOjAHP9MBe6sHbge+JyNYX0wDqjoQeA4Y5C+szbjOvwSL/ba9DEt/BU0eCwm1dfpHkbxO/1ByuERgKy43S5Kqo2Ho1e5EwtB1wS229zoC/yRud8CeL0TrAr+bgWqfFzqA8DA53i0jS7ry1oTIEoAEah0JmIM7sswvYRfKb0jzHTmOtXnHpNoVd3M6xV8wG3Cdf8gPGy073cr+DY/4aS+NK6Tai9LP5ZdaE7AFl6clZlRA3E6BwR+FCt91KfbXAbgQr7NhMB34ACulJ418nXAW+O3vKXYxUU5OXMpnDsMSgITShYwhxaOEN8/nEoEUN8owjjDvqGngL3jdYrQGt80v5JVoGx+HFXdBy47gbXXCTc50I7TD42Irh6vAvInkJAIdesGQf4cep4d8oQrcdEA/f03Wz36QNRPPIYyHgAM9RwvvktF4+JKYOLEEIMG0lrGtuwPCSQKcHcBtVHKzDOHgc4+qPwY+4++SK3An+YXYk2R3wdJfw+ang7fVBXcbDvthMgmagNUka2qg90Uw9JMhnzyYxiUB/T21p7D+Y7Aj5OJ7yqt05GI5ttTVtkwpWAKQcFrH8SiP4nXe/aB2oPwMuFFGvr0aT1WvBW7xd5llwD8Idcn59tdhyc+gKWA5hC64QnC+yxyUg43AepKzc6CqHwz7TMhbBlO4qoEDj/TC/GgzrJkEDY/6ae9Ab5LlnXayX/myBKAM6BKGkuMxDwd65GMjws2k+BFD9TLgPrwtb1sMvOSnqYPRZre1b+1MAvVMHXCjud09xVWudgHLSc6UgKRh4FQ4+vIQKwl6TgJyW2DludC8wE97b5tHivFHmv4zyWYJQJnQOgajPAYML8kFO4xZw6BXeiAdPJ2LGvKTf9MmWPRD2FVbfBsVuCf+ntg3J1+7gaUkq6hQtxNg+LVQGVaGlwLOw9vMXfNCWHkm5Lxtk11IC+N91wcx8WO3sTKiizgWeBQ/J3wdWqoLDHweOvjaSrUKt+AvpM5/x1tQdws0byu+jZ64ygbtbXGfD424wxqTlAR06A0j/ge6hPVVSuO2CHpaGLjrflh7JR6+Q7W08E7r/NsHSwDKjC6mPzkeBcLb6NzvTuj2YU+NrcNt9QtjnFhh3SxY8XvQInufDsAAbJ4/qHrcSEBS1gSAKxg05OPQ95KQLpAGLsLbQv6N/w3bbg3SwqLWOf9VfgIycWcJQBlqTQIeIdgpggfX/TPQ58eeGluP6/xDeDTMNcGSnxZfyldwW7f7YU/9vmyFRHYt/Sa4mgESRiWnSuCduMIRAWkLrL4Ydj9ZzLuXkeadchxLgwdiksISgDKly+hJMzNx55T60fFsGPAEiI/qNtuBxwjlGLqWHVD7fdg5v7j321N/eFYCAWZiInPUOBjxOUh7WvKyj47AJbjToALKroUVp0G2oHO+rPNvp+zZpkzJELawi8sAP+Xt0n2g/589df67cUUDQ+j8G9fCvK8U3/n3wi2jtM4/HMeQzJLI21+DeV/1WyZ6D4/fh/TR0P//KOA/8nJaGG+df/tkCUAZk5PZhTIZuD9wY31+BhU+Sg204G529R7a2s+Ot+CtL8PuIk45TgNDcB2UfSvCk8ZrQbySaljukoBQjobeDjyNl7UwncZDj8/n88plpHmHjGZJ8IuaJLJbXZmTkTSygvcDdxXdSLePQdf3e4hGgedxk8Gebf0nLPy2q+tfqM64p36r5FcaPXFT30nUtAnmfx12et93jzv7wlMdjF7/C1VnHu4V9uRvbA1Ae6FKmjpuB/69oDdWHgeDXoGUjxPNXgYWeWhnP5ufhcU/Lm6lf29cdVb7JpTWRkh0iZlUFYz4PHQ/OYTGTwTGBG+maR6sPB20Yf+/WYZyiYykLvhFTJLZCEA7IUKW4VwN/CD/d6Wg7+88df7LCKXz3/RkcZ1/CleM7Wis84+Ch0Xvkco1Qu13YcsLITT+Ju4wrIA6jIHeN+7/vy6lhfHW+RuwBKBdEUFlBJ9HuD6vN/T4InR6h4crbyWUEr/rZ8PinxTe+VcCQ0l+J5RkFbjTE5NMW1yBqc3P+G4YdxhWEdNZ++t+DXSe2PZvC8hygc35mzb27NNOaS2fQriNQyWBHcbBoBdAqgJeqQm3EcHz8XAb58KSn1NwZZnOwGCSuRK93KzFHR+cdJKCYddAL387bp3uuO2BAT+sLSth+Sm1NG+yCn9mHxVB3qw1TAI+DJyGq5K+GVfdZSOwEWUdKdaTYyPCRmAtKdaynfUyNVGFQcuOjORnuohdwK854HOQgr4/99D5ty3689z5b3qyuM7/KNywv417xUPQj1dcaA4W3+bWBfQ4zWPD24AXgbODNVMxCIYsfloqulvnb/ZR1AiA1nAUcDcwpcjrZoH1CKtR1gBrUFaTav1TWEuaVVSyXsbTUuQ1TB60jsko97B3FZLun4Y+t3lo/Q1gnod29rLlBTfsWuiwf2/cfL+Jj524pSHlItUBjv+SO0zIq1OBEUEbyQEXiojv+QqTYAUnADqdDnTlUdxJFmHL4UYUXGIAaxFWIawClpFiGR1YKuPZXYJYypYu5GxSPAj0IX0MDH4LUkEnyDcCf8dr8fdtL7sKf1pgTng0LgEw8bILym4TWroTjPoqdAncYe8lBVyKh/On3wBOE5EQKnCZJCo8AajhOuCmEGIJYi2wDGEZOZZB60+aJVSxTMb7WE1T3rSWExBmc/SfB9LlvQFbawYexmuxn/olMO/rkCsg1xNcSV9b7BdP24EVUQcRgopuMOZb0NHTcb+Am7+6FA+LV64Xke8Gj8eUg4ISAH2RStazArdzOkk20ZYUKEtb/3kpaRZRRZ2NIDja8NRH6Hj+HcFbeg6vd/amzTDvBleEJV/W+cdf0msBHE5Vfxj7bajwsYW2zUjglKCNNAAnisji4PGUD51NF5o5DmEoMAShP4qQYhEpZskE1kcdYxgKSwBmcS5KOc4hbUFYDLyF8ibCYrIspgsL2svogap2wW1AHhKspaXAP4IH1CbbAPO/Vlj5VQGOBbr5C8OEYAVuFKBcdRsDo77ijhX25gJcvepAZolIxkMwiaIPM4Asw4DhKMNQhiEMB4Zx+IfaZuBndOL6cntYLCwBqOHDwJ0hxRJX7SI5UNVpwNeDtbILN/Tvad2mZmHhjbD99fzfY51/MuSABXgpfR9rvS+AYZ/B347rjsC78LCFolpEaoLHEx86nQ50ZxjKcHKtHb3r3Nv+uWPASzxFlgkyJYyDTKJRWAIwkw8hAWrKlxcFVqIsQJgHzCPHfLK8JZcna2BTVQcACwl8Bt4TeB3TXfYbV+wnXwIMwk2XmnjbjJdid4kw6Co45j0eGxwCnBW0kfnASSKSuF1Weh896MAoYCzCaGA0rnbycQTc2p6HX0qGq0O+RskUmgCcjfBcWMGUkS0I88gxD2E+wltkmc+LLJVp8XvmUdXfAh8L1soS3J5lTzY96fZWF2IQHhZKm9DlgFq8DRTFn7jtgd0Dz9/v5XzcIpdA/ktEfu4hmFBoDYNIMZoco4GxwChcR+9zdWWhcihjpJqFEcbgTWEJwHTSdGUJbpDVFG43LvOeD8xrTRLms4sFMpWmKAJS1ZNxdXoDLC/eDcwGX/8X6pfBvK+4euv5GoA7Zc7EX7lUACxERVcY+x23ONCLzsAEAj7wrgdGikikKzF0Nv1QxqGchHIS7jSk0cR1Ik/5hlQzLeowfCh8G+AsPoHy6zCCaceacUPwr6O8hvAGwusyKfxd0qr6MHBZsFaeBVb6CAdadsFb10NjAVMJfUnuGfPtzQ5gedRBRKTzELc9MOWrBKKXXQE3isgNHoI5Ip1LRxoZu1dHP671J2m7yh6UTNFF8GKluEqAM/k1wid8B2MOsB3hDXK8TorXyPEGTbwmV7DVR+OqmgFmBmtlFXjbGKJQ+z3YWsDBQT1w5X1N/O3Cdf6xmwQrob6XwdDCTuQ+NAEuBnoFaWQ3MFpEvNZk1FkMBcahnIhwcmuHP5Lw5+hL4QnJ4OOUtMgV98v4B//B2SxA+SbBV1aaQzsK5TyE81Dc970KtIYVuKperwGvk+IN+vCWnEHeFb5UVYBvBgsvC7wSrIm9rZ9dWOffFQ/ToKYktgGrad+dP8CGOXDUiZ4ODlLc7N2lBNhl0BG4AfiPoiKYRoozGUGK08hxGsJpwGnoXhNyHouBxkSiFnkfTqC9KTqbY8nxbZQPBm3LBNYCLER4iRwvkeIlUrwsEw5+Eo+qXg7cH+ySb+FKB3jQsNIN/efyXEdQhdvcYwf7xFsLbs5/W9SBxEhFNzjxZqj0tWjlDNwC+KI1A6NE5LDHBOt00hzFaHKcjjug4LTWP+M5Vx8W5dNSzU+jDsMHL522zuJMcvwA4UIf7Rmv1gAvobyE8BJpnpcJrFfVF4Azi2+2AXgIL0u5tRneugHql+b3+hSu8y+X0+TKUQtuq98m7Kn/YI4aB6NuwM8tuAqYBAQqOPRzEfmvtn/RuVRQz4mkOH2vJ/tx7H1oWPu0iUqGy2XlkdJ6fWrXGqYAt+CKLpi4OvrKzZz6l0ATh+6YX0+ruVb8HtbOyO+1AgzGDf+beMnhTvjbhlvsV35Dv34N/gj0r/bU2Chc/1wk1RZemnwtG2uGoZyFe7pv7539/nLAv0iGP0cdiC9eB1AlwwzgBOAL4GehmgnBsOsCdv6b8Nb571oE6wpYh9gP6/zjIodb2LcBVwF6Pm+X97XO/8hW/hEa13pqrBaXdRVJpIK+mZ+g/A+u3rB1/vuqR/loOXX+EMIMqmRolAw304ERCD8ECtjMbULXdxJ0D1pF7FUvoaAtsOR20DzHiLsCffxc2hShBdfHrMPVfZqP6/jX4xIB6/QLk2uCJb/Az3+4HFBAyeyDOfaT0HGQh1jKjPIIyqlSze+jDsW30JZQyaVskkl8jjQjgV/iloybqA0PuuV3Nd6quKy5DxryPDWwAtvuV2otuOH8tcBiXO3+5bhT/OqxDt+HHW/Cxr97amwVbuFFkVJVcNznPMVSFlYiTJVqLiuXyn/7K9nKfZ3FOJTvAO3uFKrY6H46nBe0XO8cvMzu7F4Nb34BcnnuXBxK4JMKzBE04Z7w61t/2k2p3oilO8NJt3jaFXAMbgS/SC07YO6x0FIWa9yK1YTyc1r4ilweZF4l/kq2iUom8ZpkqG7d0/5kqa5r9jL0fwI2sBI/SzsUlvw8/86/D9b5hyGH6/DX4KaQa3FP+9uxzr+UsvWw3NcZa2twQzRFqugGgwIeC5JsD5JjjFRzTbl3/hDBLmqZxLNSzUWkuIzAk1Ymb1XHwNHvC9CA4vb9e7DpGdg5P7/XdsTK/PrUgpvBWYqbw1+OGzWO5CQKs8fmp2HHPE+NBazNMfQakABHgyTTWyjvkgxTZDKLow6mVCIroyITeYQXOAX4CG5i2YRp8Kcg1SFAAyvwUs0l1wQr/5DfawVX6c9KTAWTA7bgFu4twD3l26K9+Fl+R/4LYg9rPW5rRpE6DYW+vrYnxt5W4Hp2cqpUMyfqYEotFrdWnU0XslyL2z5oB7r6lqqCdy4LeBLZbNzYcECr74VV9+b32j4k75iQOGnAdfzbsGI8SdAC9LoERvk4br4fBClXv+kxeOESD3HEliLcTRNfkMvLp7RvoWJRSFUmsEsyfJsUw4Dv4g6oML4c868BO/81eOn8mzbDmr/l99oOuFP+TOF24Ib4F+MSAOv8k6ERWDkXmn2czrse98svUu+LodtJHuKIIeEZcpwpk/hwe+78ISYJQBuZyGbJcD3CGOBObCmSH4ODPlEs8BIGq+6BXJ5lIY4hZp/OmFPck/4i3Lz+QU+AMLHWDGRzMP8nnhoMuHPt2KLOB4qzNQhX8zwXymQKOHWsfMXyFiuTWCoZPkqa47EaAsF0OR56nB2ggS0Emk9ss3sNbHoiv9cehVX7y1cOt+h7IW6ThpXdSqZm3l6Tse5VaPDxYLoCt5+zSAOuctOHydcA3EgnjpdJ/FKm2ZhYm1gmAG1kAkskw9XAOITp2GBm4QZ9gmBLPTzVv1g1HTSPPE6wVf/52obburcOGytLur0Tt5zCgp95aFRxH5AiVfaCfu/2EEdkFLgXYaxkuEHGszPqgOIm1glAG8nwlkziX0gxDrgXW7+cH6mAgR8M0EA97rEyoIYVsPmZ/F7bGzvl70h2AXW4X411/MmnHPh73DAP6j1891iCG14o0qCPeoghEo8Bp0uGqTKJpVEHE1eJSADayETelAxTUU7GEoEj6zMBqgYEaGAxXgZdVk0nr19VGlv4dzgNuPv5UmyZbDnZe/i/jQLzfBw530ygg7sC30NKbgHCVMlwiWR4Oepg4i5RCUAbqeZ1yTCVFKfiEgFzMIEqeimwLHgMDStgywv5vbYPCf1EhizH2wfwBJjSNTF1qHUbm+ugwcdpgXXFv1XSAUcRS2YjyrV04kSZZH1CvhJ9u5WJvCoZpuKKXz8WdTyxUtkL+k0O0MAavPQ2ax8k76f/gIcUl6UduJX9G7HxrnKU49DTOArU/sbDRbYRaEvgwI94iCE09bit48Olmh/JeJsUK0SiE4A2kuFpyXAJlgi8rf/lAVfweqiG2bwNNj+V32vt6X9fLbjD3ZYTaArXxNyRSjBveM2dFRBYgO9z17HQ9QQPMXiVA35HluMlw/WS8VGopP0pq1vunkRAeVe7P3Co/5UB3tyAqxcb0Lqa/A78saf/fW3FLd72ce6SibcjbdvMKtTd6eFCywm0YvTo93qIwZs5pDhNMnxcprAq6mCSrKwSgDZSzRyp5iKEC4EHo46n5Cq6QZ9LAzSwhMDjzblG2PBIfq/tQZl+EguUw+Vdq7ANr+1BM/n9nlc95eGMgBZcXYAiHR3kgcIT5QWESyXDu2Qir0YdTjko69uuTOIpyTAF3bNYsH3MovadDKmOARoIcKNos+lJd7Z4Puzp3z0JLsGd1Gfah3yLNjU3w8oZHi4YYDdAt5Oh83APMRRlHsJUMpwjk3g0qiDKUVknAG2kmldatw+eBvyFcn++CpStb8VL3f98n/674er+t2fbcVO0trWv/chR2NqOZTUeLroBN71XpEDTikVZivBRdnKSTOJekXbyAFdC7SIBaNOaCLwP9pQYLr8Vo+lO0HdSgAY8PP3XL4NdeS46as9P/4rbbLGCck9Jzf4KLdlcvwV2LQ14UYUgU+alWwewEbieToyRSdwpU60UfFjaVQLQRjLUSYarSXM8yo8pp2ev3pdCukuABjxUH9vwcH6vq6D91vzP4Tr+zVEHYiJxpNX/B7P4Tx4uHCDB73EWVB3jIYZD2knblr4M35XxZXRfjql2mQC0kQkskWquIcuo1kQgwPhYTPS5LMCbt0DQctm5JtiUZ9nf7sEulVgtuPn+PJdImDLTRHEjPhtfI/gypk0Uf5sT6H1JwOsfVBPwS9IMty19pdWuE4A2MoXlUs01pBiO8EOSfJhqoATAw/D/5mchm+d/vqOCXy5xdmPz/e1dsSc2NrfA2qBr4JRAo3yB7i8HaAZ+SZZhkuFqmcB6n42bI7MEYC8ykTUyic+RZSjKN0jamuyOg6DL6AANrA4eQ76H/lQCnYNfLlF24+r4W2Gf9itLsJVHKx7yEESA73mfdxHsdFHAjX/cS5YTJMPVtpc/OpYAHIRMYaNUMw0YCHyEQGdqllCfdwV48y4Cj0m37ILtr+f32vb29N+A6/xtOVP7VuzTf5ttK1yNjUA2UnQWUnW0qwxYHNfxK2Mkw1SZkpD7ahmzBOAwJEOjZLiLFxgNvBt4MeqYDivQ8JyHyn9bngPN88bSnhb/7cadq2Sdf/uWo7jFf/u0obAiaG2zHAQZbS/8PuM6/jQnSIapUs3C4i9ufLIEIA8yjZxkmCEZzoxvdUGB3hcHeP+a4CFsfja/1wntZ/h/N27Bn3X+phE/pcjWPuGjkeLfmn8CoLh75RmSYapMYH7xFzVhsASgQHtVFzwHuI+47ODuOhY69CvyzTlckZAAWnbAjjfze20n2scnr+0o9nh8QkyUlODD/212rAUNupAkQMLf80J3TPChKXA/KU6VDFMkw8vFX8yEqT3chkMh1TwvGa6EPbUEot1C2PPcAG/eQOCaSNteAc3zMTdImYKkyOKG/W3BnwF/T//gpgHWBR0FqKfoip8V3Q59OqDyCMpZkuEKq9cff5YABCQZ6qSaa0jv2TkQ4ODtALqfHeDNHnbfbCsgye8U/HKxlsM9+ft64jPJ5/uzsPZxD40E+N73OGf//6WGFGdLNZdJdczXSpk9LAHwRCawXqqZRiXHAdfhpaReAQ78QhZgY8CLa/6r/wGqAl4u7tbgHrCMAbcOxPc00NY8S20fVoDvfY+zoW2OP8XZkqFaJvKCh6BMCVkC4JlcxjbJ8D12MhS3cyDPlXEBVHSDrmOKfHOOwIMWuxZB87b8XpuivA//2YQ7T8mYNkFX/h9Mc1P+520cUoAEoM+l21FOlgxTrONPLksAQiJTybbuHDgP5R3A/YS1HKz7WUdalHMYWwi8RH3rK/m/tpyf/uuBdVEHYWKliXB2gCiwcnbARhooeqiq4+BuZLS0o5zGO0sASkCqeUIyXEGOkbjDLvJ8XM5TjyDz/0GH/4Edb+T/2nJNAFpwlZTtwFLTRgm35POmAr53h1T091+AMz0EYCJkCUAJyWQWS4brgcEo1+KWigV31KkB3hyw2rE2uymAfFUGu1xsraQcD5c2QTQTbv2HBh+VygM9AJziIQATIUsAIiAZtks1P6IfIxCmAs8FavBQW3LyEvAmsmsx5ArY61bsTEWcbSTJx0eZsIR94FM2BzvrAjYS6Psf5MZjYsASgAjJGTTLJO6VDOe2Vhi8l0KfGVIdoMvIIiNoJPBdameBVT3LLQHYjZddlKbMNFKa6o/rngrYwHYCLE2yBCDhLAGIidYKg1PJMgb4CfmezNNlNEhFkVf1sFx9Z4HVPYsNNY5yuKF/m/c3+yvVcc9b3grYQA7YWeybx6iq9SEJZr+8mJEp1EqGz9DMQISrgcPX1w00/O9hLWKhIwDl9IlbjxX7MQcKY9//oez0cIZH8feBzsBQDwGYiJTT7bisyOXskEn8UjKceNjpgW4RJgBNm/Pf/19udgObow7CxE7YK//317zbw/HAgb7DNg2QYJYAJMCe6QEYhdtG+HbXE+UIQMOyYO9PKgVWY0P/5kC7Ke3nQoFNLwVsJNBU4IkBL24iZAlAgkiGOslwPZ0YCHwEeJ3OI4psTSn6MJA29UXsYiyHTnMzUR/9ZOLI54l/hdgStB5AoAeBYQEvbiJUTkuy2g0Zz27gLlV+j47eiZuLK1A9gZcpNxSRACT9aNxmbNW/ObhSP/232Rm0nEjbvaCoLTpDAl7cRMhGABJNuyMVRXT+4OW0mvoipgCSPgKwjuQnMca/HNEtCK33kZEWfT+wBCDBLAFItgBfvoCVazQHu1cX/r4kV8urx3cRZ1MudhFdctuc347hwyv6fjBYVcVDACYClgAkW3QJQPNm0CJ68wKKBsbO2qgDMLHURLSJbXMWckGPHCz6ftAR6Bfw4iYilgAk2+Di3xowAWjcUNz7kjoCsA1b+GcOpMTjcxG4JHCgKUGbBkgoSwCSLcIEoMh5xyQmAIot/DMH10A81oRsqw3YQKD7gSUACWUJQLL1L/6tAR9bmtpRArAFN8xrzN5aiE8lyJ1LAzYQaAQgwH3IRMm2ASZbr+LfGrBcWXuZAsgR8MRUU5YULxtpvGko8vu4R4BMZutN39Ra/g1hCTnqSDOPHM/LSILOS5iQWQKQbEUmAFkC1wBo3lLc+1pwnWpSxp62kOyFiyYcuynNaX/5agm6EyBAAiAdeyKcA5xDCpccCWgditKIKzW4BliKMg94mSzPyGiK2EZkfLIEINl6F/c2D+PZzQGqCDbh1g7HXQ4I+mBlyk8Lpa33n4/moMMRzRSdmacOcRtSBPdNP7r151SEKwCoAK1FERpwtTXXAHWkeJ0sT9PEs3KCTbyFzRKAZCtyBMDDxGWQJ45GkpEAbCJeT3kmekrg9bOhyPpYjFBkZp4u8jYkCK6KaWdgEHAmOT6AAFWgi2hG2YGwGmEhyssoTzKCp0USN5kYS5YAJFRr8Y2exb3bQ2IdJAHYDXQPHkKocrgEwJi9lfKo30K0+JinKjIBSAVYinR4lQi9gF4oJwJXIkAd6CIaUDYByxFeR3mKNHNkGOvCCqYcWQKQIFrLUSgXIZzH0r6nMnRDkb+/gE8LuaZgR5DGYd/0kdjTv9lfM/Eb+m+T8/FhLfLBoNgRgGA6IQzCjRych3A1OdBFtODWHCxHeIBO3CwDYrVcM1YsAYghreN4clwGnAucgDAIpQdCBXuKbgb51QUcPQu64KiBPQuFYsme/s3+csRz6L+NqqvMKUHuC0WOIkinANf0rgLoA/R+Yh0YAAAgAElEQVRBOY0GvqQLeaccz/NRBxZHlgBESJdyHDkuRjmfHOOAIQg9UdIHdI4H/HuHAFcOOIYZ5Om/7fK7gVjdN/ayEXv6N/vaSbwPslKgaTtUBXkaL/K+IFUBrhkypSMpZqvSSySWkzeRsgSgBHQRxwKXI1xEjpMQBgDdaNmrWy/0aTjSBMDDfONO4pkAZLGnf7OvBpKREGaDzq0VmwAEuReVRHdqmQTMjDqQuLEEwCNV0szjYiqZgHAWMBI3HOX+O/sc9o4yASjmEKD9bQX6Bm/Guw3Ec5GXiUac5/33FzgxL/aDH/sEANKcgSUAB7AEoEhaS18quIIs4xHGkWMwi+hasu9CoAQg4OOMjwSgCbcWMU6jh024HcnGgPuaxHnef38aNAEo8r4Q/xEAaOG1qEOII0sA8qBv0osq/g24GGUcMBChas/3JZIFbQkfAQB3wl6cDhJdR7zneU3ptO33T9LnIfCRwMVOAVTiCgjFduhsJ8fzQNRBxJElAIehtVSR4nGUs2jr4uOycl0qA7w54F0t5ykB2IKbIIlDWeCdQIDihqbM7CIZ8/57C/y9DNCBSwfQGM6VKM1UkbEFgAcXh1tvfKV4FeVs4tPt7yXCz7N4+ti07diNWg5XiNQYcIv+2uX5D0Fuc7HKlnYDdeT4JRX0k8E8GXVAcWUjAIegC7gEZVTUcRySBhnuC9iBB9prvJ+NuHqGUaZY67Hjfo3TSHIW/e1P0gEbKPa+oB7WHxR3WYR6YCXwCvAIWe6TUXZ+Z74sATiUCjKxnv+LMgFIefzYNOOmAiIpJoYb+rdtfwbcZzHJNeOiSgDUxzkER5TFLdGtQ3mJCuZQwcNybCLqisaWJQCHojFf/xsoAQh4o/A5AgDuCfwoSv9pbAFWlfiaJp5acMlgkqWDnrBV5H0h0L3ooBoR1gK1ZHmONA/IcF70fRFjCcChCXcDX2k90jKGymQKAFxuvwoY4rfZw8oBKwhcFdmUgSzJ7/wBKroGbKDYEYCi70UNuL03ixBeQnmcNHPluMROwiSOJQCHIMNZqHX8Ebgq6lgOKtIpgBD2/e7ErQfo47/pg1pNsod7jR854l/mN1+VUSUAh50CUIR6lLXAQuAlKpjLEp6Q8ZZ+R80SgMOQ4fyb1rIQ+GzrsZTxEWjeLeAUQLpLsPcfynpcYaBu4TS/x1pcDQLTvrV1/uWwQUyAdNDa2gGmAJQmhC3ASoQFKC+T40lG8qJIvLYImLdZAnAEMpJvAN9QpYJFnA+8kxRnoBwPHAN0JYo17LltFF+BKOATfEUXtxVQPd85FTcsfyzhJQFrsUV/5u3Ov1y6Ji9bc4u8L1QOfUVGcqqHAEyJWQKQJxFagMdbf/ah6zmanVxIlnMRTgKG4QazuxFWcqDNkNsJqWJ6yqBD+ALprtASQuWctiRgANDDc7ursCd/U36dP0Aq6A4AKP6+IJZSJ5QlAB5IP9YC97b+7KFKikWcjHAhcDopRpFjMG7nexVBk4Pc5iITAA8F+Cu6hZMAwNud9S7cGEvQh5sm3E5h2zBkcsAOymPYf29pH+tyir4v2AkaCWUJQIhay0++3PpzAF3P0WzjLIQzEE4AhqH0B7r///buPEyuomr8+Pd0z54ZErIBSSA7JOyyLwIGgslMgryigiLugguKvqAGccM94E8FUV5xQcE9CopkJkFAVGQPOyGBbIQQCAkJk3XW7vP7o7qTSZjp6e5bt293z/k8Tz8zkL5VlUnPrXNrOYU7LDdzgJDYBBX5LJ33cLOoCHuiHpclcBvuvIAh5BcubcEFE+V2wze5K9fOH6Ay6Px/jADdgQUAJcoCgAilRg7+nnrtRpU4z3MocY4DDgcmAqOB4SiDEWpJbszz2bgS15sGWPpcuVf+1+aiG7difwNu3GQw/ccvirvRv4Y99RunnDt/gKqgOwACjQraFECJsgCgSKVWzj6ZevVKk6feApyTR+m4XjTAToKqEflfm48u3C6B9bim16W+VuAeXrpxc7ptuO195XqjN7lLJ/kph61+fakKukkp0Kjg6wErNxGxAKCUSdX6/C+uIVAAUF3gAKCnTix3v8nOQOj8Aer2DVhAoCyCNgVQouw0wNIWIJFtwL38UQYAxmSjEzfsXy6df6agt/6AgIUHuh+8FLByExELAErb6vwvrQtWc9XIYNcbE6Z2KPLTPHKTIHPa6sFTA1YQKAAIcB8yUbIAoLS9mP+lQUcALAAwRWo75bf4czt9361FoHa/gBXkfT9IZ+4wJcgCgNIWIPIOGADEa6FycLAyjPEpvdK/3NaHtOGe/vvK9VPpIa9H/veDDSJip2qUKAsAStta8s5n5iGff23QeUdjPOnGdf7ldrxMAnaejddXAFDjI2VmnlOCmrSn/xJmAUAJE5Eu3C75PHgIAOoKeX6vMX3ooHwO9dnTdtwge4y+79Z1owJWUkHeuwDW33a4NnOtNhf0MG/jiQUApe+F/C6rxCUbDMBGAEyUFNdB7qB8Vvr3lB76h8wH9e09JWBFAZJ67VhZiXAJwkpt4XZdyHTVCA5HM3mxAKD0Lc3/0oBz+DYCYKKSoDzn+9O62X0hY6aMLcOODVhZgPvAtiXp72LAbJLcyQKWaDOf0Tt8DDOaMFkAUPoW539pwLnDmjEgPk4hMyYHHbgzHsrpNL+eFDel0VNfAUA8BnWjA1YYJADo9fZzEMI1JFirzVyrdzA+/wpMmCwAKH0BAoCAIwCxSpsGMIWTPsa33Nec95bKus8FgD524uRbhvYcAei9YOESEizXFm6z6YHiYwFA6YsuAABoCDr/aEwWunBP/V1RNyRknbwxQ3emBYANPqbh8rwPtL8E3ZuzeWcMeFtqemCpNvMZnRd0AZLxwQKAEicir+DOvctDA4E/AvUHBbvemEzSw+EDIZ9/kt6zF1ZmuGb4UQErrSHvkwC35vXscSDCNdTzgrYwVxcSNIORCcACgPLwbH6XxQg8ClBvIwAmJAPlqT9tC70HOZkCgJGnBqx07/wv7X3+P1sjgTkkWaULuFkXckiQwkx+LAAoD8/kf+nwYDVXDYWqgGUY01OCXU/95bi3vzeZ/q59LQCsqYOKgGd6BPn9DxYApFWjvI8kT2szd2oLZ9k6gcKxAKA8PJz/pcOC194Q9CASY1LaGVhP/eC2+/W1nTFO33fpvXzM/wcIAFof8lD/ToIwHfg7C3hCF3CRrRMInwUA5WD9X5blf7GHp/fBRwYvwwxs6eH+cjvEpz9dZP47Zxr+H3FSwMpj5D0F0L0ZtgdIQZLZ4Sg3UM8L2syVeruPm5TpjQUAJUzvYKS2MJdHz72Tro15llJL4KOBBx8JNmpn8tFzuL9c9/X3pZs37vffU18BgAD7nRawAXuTOcVgBq0PgYY+PzMS4WvEeVGb+akuwFYce2YBQAnS2zlAW7ieBC8Cc0DraH0kQIkBA+yKBhg0IVgZZmBR3H73gTbcn5Y+uTDTzgah7wBg0FCI5Zm/f6cgw/8PBqw7J7UIH0N5Vlu4XecTdOjDpFgAUEJ2PvHHeQ74BD3372wOMh9n0wCmQBQ3z7+ZN+53HyiS9L3iv6dMw//DjvDQkJIJANJcuuEY92kL/7UFg8FZAFACtIUR2sJcErwAzKG3o7sC/ULuG+DalMFB9yObsqa4Dn8zbs673Pf09yWd1yCb0fOqDH82pilgQ2K4nXj5UGgNsO7Yj5NxCwaf1AVcoIsyhkumDxYAFDG9neHawlzY2fH3vSq29UHQfCdRB+GSAgVQP8ltCTSmp55P/OV6al8utrPrhL/+9NWlVdfCoKA7AIaT+YShDLY/R/5rjrw7DOU3rGeZHUCUOwsAipDexTBt5krirMB1/P2v0utqhS2PBag16CiAwN4nBizDlA3FPemnV/YP9I4f3JN/tqcXVtH3utphPnLmBPh9f+0uD/V7N3a3A4gsw2BWLAAoIrqQodrMlXSyAuFr5HpQ92t3Bqjdw+/LUAsABrwErsPfjHvyHyiJfPqzndyOLu4rO68AY98evD1Bft8D3WdC5w4gSmcYvJ3JUTeomFkAUAT0Nhq0hTkkd3b8+eXnDfSLOYK8hwTT6idD1YhgZZjS1I3r5LbgOn574t9lO7kteIzR969idR00BO3Tasn12WIn7YZN/w5Yf0G4DINxlmoLt2szx0TdoGJkAUCE9B7qtZkvU8lqYC4wJFCBrfdDor+NxX2J4YKAIASGnhCwDFMy0gv7tuC2tOXyhDtQbCP33Q6Zhv9H+lhsG+Dpv/WhbE8ALBZu54DwsLbQrAuwYcoeLACIgC6iUhdwEW08j/BNAp3I0UOyEzbdG6CAMcHbUHdwbgudTOlJ4Bb0pRf2DbQEPtlIr/bPJyjqa3u/AGPflXeTdgnwe76xKOf/syFAE8r96S2EUTeoGFgAUEB6JTFdwLtYzxKUG/Ay8b6HQNMAo8k7M1jasKOBGvdEaE+F5aPn0/6W1Pc2zN87Jfc5/7RK+r4r1w2F2qC3jGry3/5Hsc//Z+tk4O+6gPsGei4BCwAKRBcyneN4FGUeMDG0ijYsCHBxJbBP8Dbse7z7mp4XbsUWhJUixWXp24Y97WcrneEv38C3r8V/APvPzLPQnsaQd9rurk3FsP/fH+Uk4O+08Lgu4F0DMRCwACBk2sJp2sL9JLkTCD9d3valsO3ZAAXsH7wNEy/Y/R6T3hK2GdeZdGFPj8VKcZ1XutO3f6/spTv/fKe/YvS9978iDvv7GLUO8Pu9/u+gZZi3WTgCZR4LeEpbeL/OCzoMWjosAAiJzudQbWEe8C8o8MKTdbcEuHgUgacBKgfD4D7mGXs+UW7HOpdi0LPTb8X+XfLRjZsaCTJCUkPfD+fDDwMJ2i/VECj9b6D7Skk4FLiJQTyjzbxP7wm6Lar4WQDgmS5gnLZwAzGeBHys2Mndq7cGuLgCL6mBJ5yX+c/3fNLcgbuJWqdTGAnctMxWdu/0Te66cD/HoFNcmfb+T3pfwMIh0PB/YluxJgDyT5iCcDNtqeyC9/S5LLPkWQDgiTazrzbzU5TngYuI8me75QnYsSJAAeODt2H48VBbn9170wvMtrJrZKATWzPgUwL3M06vyUhn6LPdGsGkg6iggWump/+GfaHOw9Qc4/K/dP18SLZ7aENJGYdwDW08py18qhwDAQsAAtI7GKQtfBVhGcLHyHyGV+EEGgXYl2yyD/frgMbcr0mPDGzHBQOtuFGCdmyEIBfduJ9Zzw5/B+5naz9DP7bhfqY+ZOpaJvt4+h9CoN3G5T/8n8kBwHW0sVpbmFNOgYAFAHnauaUvwWLg60CWj7sFsi5IACAEelpIG/sOqAgYD6VXorexa7g63ZlZUOAkcB37DtzPphX3s2rDOvwwJHHBqa8trtVk2Po3GIYd66GSCflfmmiDDQs9tKHkjQTmpkYELiyHEwgtAMjDHlv6gh7LFY7WhzxMAwTdFROD0acGLKMX6eHsnkFBesV6W+rPyjEwSHf06Sf7dGe/hV3pZhOU39+7mHTiPmu+tkMKmc74hAnneKgkjnuIzdP62wJkGC1LBwA/Yz3LdAEXlfJiQQsAcqDzmaotzCvYlr5AFNbeFOD6OrzkBJj0QYgX4GOWxI0UtOOehNOBQc8Ocgeuk+xiV0dZLJ2l4v4O3ezq5NN/j83A6+z6e6Sf7K2zLxzF/Xtsw+/PPNPTf3UtjPKx939/As1MBrqPlLWxKDewg+d1AReV4vbBAZf4IB+6kP1QvoHyIQLvkSugmjHwlhcCbB9aC9wfvB1LroU19wUvJwzp34BY6vv0154v9vi+t/9O6xlUCLs6dnp8Tf8/3eN7U5wS+FnlvyfBHfvVVwAw5d1wgI8RgNOBYfld2r4W/jUW1DJAZWEJMJdt/E7OLY2UWTYCkIHeTl3qlL6lKB+llDp/gPaXYNM9AQoYhZelDQd+DOJF+qNLd8IJdj19d+CewNtwT307cE/e23q8trIrLW7P19Y93rOtRxntqVd6FKIbe4ovdukh/zB2pNSS+en/AB/H/g4l784fYO3N1vlnbypwE/U8pi38TylkFrQAoBc6j7g281HiLMed0pfn2ZlF4KVfB7hYgEnB2xCvgTEhrAUwJizprH5hTX3HyJz2d9K5+BmgPSjY5Wtv9tCGAedw4K8s4MliTzFsAcAedCHHUc99CD8njMN6Cu3VW6GrNUABE3DnkwY0+UKoLNm1MmYg6cCtHQkzMVIdfffvtfUwuslDJYNwB3zl6fX7XWpxk6/DUimGH9AW3hp1Y3pjAUCK3s5obeF3JHkQOD7q9niTaIN1fwpQQJxAW4jSYhUw1seCJmNCkmDXQsswVZA5pj7wA/h5+j8wWDlrf+2hDQbXn9yROn3w5Kgb09OADwB0EZXazGeIswQ4n3JcGPnCdQSbaJ6Ml+UPE97n5jaNKTbpw6oKkRkxU46thpGwz2keKqkiUC6Prtfh5d97aIfZyZ0+eK+28Edd6GNuNbgBHQDoQqaznicRrgEaom5PaLYtho3/DFBADYH2Ee8kMPUjHsoxxpNO3HB/W4Hqq4E+d43HgMM+66miSRkqysKaGyAR9lDIgCTAeSR5Vlu4QZt9HLySvwEZAOjtTNZm5qf280+Nuj0F8cK1AQs4GC8fl5Gnwl6lv7TClLhudi3yK9SZEzEyJ/3Z5wio9/FgWIkbtcuTdsPq6z20w2RQCVyEsFxbmKst0Sw0H1ABgN5GgzZzNXGeQZgVdXsKav182P5cgALq8JIeGODQS8txosWUgiSu099C4U8/zLTwryIOU309/R9EoIW7626B9jWe2mL6MQiYA6zQFuZoS8a9Id4NiABAFdEFvItKFiN8Hi/L2kuNeojqD8bLWoD6sbDfccHLMSZb6Ux+PnP456KKzHediW+HikGeKgo4ihB4tNDkYThuy/kz2sy5hdo6WPbPYTqfo4lxHXBi1G2JXEUDTFsDFYMDFPIEsCx4W5Ld8J8PQ+eAO2LUFFo6AVNUx0vHcBn/+jzudxic+H+eKjucQHv/Nz8K9x/jqS0mgEXAHGkiyOKtfpXtCIDOZ29t5ifEeAjr/J3urbDmZwELmYKXUYBYBRx2yQAIQU1k0gv8dhBd5w+Zh/5jAofN8VRRNTAxWBErr/LSEhPYMcDd2syd2sKbwqqkLAMAXcDbiLEU4ZOUWvresK28OuDJXjW4/cUeDDsGhgfMVGbMnjrYdTpklB0/uD4509D/2DOgfpynyg4h0Mr/bc/Cq7d4aovxQpgOLNIWfq0tjPFdfNkFANrChSh/w53dbPbU+dpa1t22PFghU8m8mTkHh18BlSV/rLaJmuKG+VtxiXyKIX19nMy/JnUNLkOmF3sROGHX8m+CRh0xmV7EgA8Az2kL39A78LFYBCizAVhdyBEkeYRAZ1+WlY0ojwOLiPEw3TwsZ7FWVfcFVhCoF18NPOynlRvuhyeusUNxTO7SHX87xfX5EVyf3Nf4Y0zghG9BfYDters5lUDHd2vXMu5q+BxdHUchHIwbTjjYU+OMX68gXMlWfhn01MHyCgBa+AvwjqjbEZFXgMdRHiPGYyR5TGaxuq83q+o1wGeCVXkP8FqwItKe+hase8pPWab8JdnV8Rejevoe+hdg4lkuM6YXo4GTghZygYj8ruf/0L8yhBoOJcnRxDga5WjcIqCyGzkuUc8ifF4aacm3gLIJAHQeVdTzOt7GpovaK8CjKI8iPEqSxTKblbkUoKr74UYBAuTmfR24Gy+PXpqEez8C7ZZ9zGTQhZvjj2IrX7ZqyHwXGrIfHOdrq10MmEHAY7uXA1NFpN9EyHong+niSOBNwGG4bQcHMzDuu8XqduJcLDPIOXlD+QQALUzEfZDLSRewFHgaeArlMap5TKaz0UfhqnotcEmwUh6GvgcacrN9FTxwOSSLaSzXRC6J+01opzjm9jOpIPPh4RUV8OafQNXeniqcguuHA3mfiPw234t1HnFqmUCMw4HDEA4FjsAtSrDRgsJoBWZLE/flclH5BADzmUCMFVG3I4C1CE+jPAU8hfA0W1kq54b3rKOqQ3Gb+ofmX0onsBD3WObBC3+EZbcW13yuiUY3u572S+HzEMN1/n11eQIceQmMeLOnCgcBbyXQyn+X2ONoEfG++k9vp44KDgEORzmUXSMGI3zXZQDYjHJEpqnfPZVPAFA6UwDbURYT4yngaRI8TQVPykw2RdEYVf08cHWwUjwuCAR49Euw0UOyIVN6krgOP8rEPfkQ3HFimfricafDgR/3WGnAhX/OdBG520Njsqa3sQ/VHEaCw4kxFWUqbihjWCHbUab+KE28J9s3l00AAKAt3Aq8Pep2pGwClqAsRVia+rqEh1klVxbPrU1Vq4BnCZxB5D7gZQ8twmUJvO9j0LbVT3mm+HX2eJWiTIv+APYeDcf+AH+33PG4XDGB3CYi/+OhMV5oCyOAgxGmpIKCdGDg4yjSgaKLLobJ2WR18yy3AOAEXE9UqHmnJMpqYjyH60SfI+k6emliQ4HaEJiqngf8MVgpO4A78Hagets6eOB/oTvDpG8Hbmi4mjL7JA8AipvX70x9LYUh/r7U4Rb+9aW6Gk7+qadc/6Qqm0HAI026gSNE5FkvTQqR3kM92zmIeGq0QJmCMBV36IFt+d6TcIo08t/s3lpmtIVvA1d4LvZlYCVu1fxK4DmU59jOc3JuwU4SD42qCnAvcHKwkpbhphQ9ySY/wDZcJ1KFCwTsdlC80p1+B677KeVOP62WzPto4jE4/jtQHzBJz25OhOBJ4X4kIgG3AUdLF1HJRibSzUEIk3ABweTU1/0ZuAsQm6SJBdm8sfwCAEVo4WsIXyL71THtuI59JZr6KqkOv5aVMq1odxt7o6onAf8l0GdCgf8A6/00CmDl72H53zJXuZ1dQ8cxXBBQTcC1UcaLBK6zTz/tl5NqyJiTTYAjPgkj3+Kx0jF4ONqkFZgsIp6SeBSf1LG6E1Em7wwOlEmp7w+gnIODGEfLTB7L5q1lFwCk6XymInwc4c24Ve6duCf51SgvEGMVwkq6WMlsXhYpi+eRQFT1RuBDwUppA/6B17v94v8Ha/tZZLiFN84+pIOBKlwwULaf9iKiuH+HztTXYt+2l6/+On+Ag86Bse/2WGkdcCbBTzNPflIk7uv4wZKjLVSTZAJxJpPcGRRMBMamXpkmdIpdKyMZKcfQlc2b7ZZodkptC1xC4HMU1gL3e2hRD4vmwKZVff95EthK3x2O4IKB9Kt84//C62b3Tr/cVdF/3p0xx8PBl3msVIDTCLyDruNheOmkm1iT+KhMGxD/WjnTZvYlHQwIB6S+H8euACFTpodoCT+QRrL+4FkAYHajqh8Afh28pEVAhg47V9oN918M21/P8B5cEJDNbS2Gu5FXYqMDuUiya1g//RpIY2fZdP7DJ8BR38Xvhyqdnj8A7Ya1x0LHE6DMZxDnySh2eGneAKLz2RthLDEOAMaRTAUHLlgYjXuAiuIU2hdJcqTMJsNNcnd22zNvoKp3AWcEK6UbuAuy242SncQOuP/TmbcHKm5hYFYDYD3EU6+KHi/jOvsE7ufZRWntzfetGjcKn+muOXgfOO4aEJ/3/6HANAIPW7VeBRsv3/XfwkN0Mkum+sksahydR5y9GAnsR4JRwL5I6qsLEPbBLeYYib9lyy8T460yk8W5XGQBgHkDVZ0MPEXgubDNuLMCPE4Ed22G+y+BjgybL/INAnqKpV7pYCCe+u9y/I1RXMeeZNe8fSL13wPp6T6TbOb8G4bB8T+CmM+tKFXA9Cwq70f3alhzCCTfcNbGsygzZDIvBavA5EoV4e+MpKpHQJBkDMJIYATCPijDcfM+w+n9sWQrym8Qrsxn63k53s5MQKrE2fyzRQy+8Mjgpb0IPBS8mJ46NsIDn4XODOmH99wd4IOkXhXsCg5iPV7FLt3JJ9h9KF+xjj6T/g73ARg0GE78EcQCnK31BgK8GffgGNArs2BHn4fGrUY4UyZi6TeLmN7FMBKMIMlwhBq6eZ0Yz0hT/nnYLQAwu1Elzkp+DRUXMPp+qD7WQ6mP4/2cprZX4MHPQ1c/PfwOCndkbAw3UiDsHhhIj/+X/j6odIedfkpPv5J7/L90R28dfH76S/IDUNvgOn9viX7SDsMlwgto642w/iP9vWsdMWbIBOxM7gHEAgCzky6ikiH8ETgHgKqpMOZRkKBPNUlcfgDPyRHb18NDn4OOfnr4dii6pU7S46vgOuhMowjpzjz9vQmX4Ebd+9txV7cXnPBDqGjw3IBRBM7LBdC1Cl46EpJbsnn3RoRGmcgjwSs2paAUBi5NAehiqhjCPNKdP0DnEtj4RQ+lx4AT8L69tmYkHP9DqOonQKnBrdwupnB3zyf09Px7X68ENlRfKOmDffrr/BuGwknXhdD5NwDHeSgnCRs+lG3nDzAM5Z+6gukeKjclwAIAgy6jmmr+CrzxYJDNP4IdWWWV7EcNbj7T8/L6mmFw8nVQ189NuAp3X7VPvMmkAhhM/x/TIfvC8dd5nvMH90E9GS+Lw1+fC23/zvWqepT5uryXe4EpO8X0TGQioIupopo/A2/r800Vo2D/pyE21EONr+DOa/L8KJvYAQ9dCtv6OVU5iVscGGSHgClP2az0Bxg2Ho76juetfuCi01MInIcLoONxWHsCaN6rYLtQLpDJzAveGFOs7HloANPFVFHDX8jU+QN0vwwbLvZU637AEZ7K6iFeByf+BPYel/l9MdxIQCkn+zT+1dF/5y/AqCPh6LkhdP7gjvf10PlrG6y/IEjnD1CJ8HtdxkeDN8gUKwsABihdRCXV/AnlrKwu2PZH2HKDp9onp16eSRyOvRrGnNT/e+voP6ObKX8xXGLX/gJCASbNhkOvIJyB08NwWWY92PAp6PRyym8c4We6PPvUsqa02BTAAKRKnBX8DjgvpwulGkbf62lroAIP4M4NCMHqP8Hzt/Q/05DEJQ2yrOgDTxXuqb+/u6/E06cAACAASURBVGBc4JALYd+w1sZNAI72U9SWX8CGC/2U1ZNwpUzk6/4LNlGyAGCASXX+vwXyO6as4gC3NTA+3ENrkrj1AOs8lNWLDffB0z+G7iwyEbbhtgvaKvvyJ7gRoOos3ltVA0d/BRpCGLECXAK4E/ByK+58El460U0BhON7MokvhFW4KTwLAAYQVeIs52aE8wMVVHsGjLoDP+ddJIB78Z4jIK19PSy6AnZksRWqGzcaMJDz3Ze7CtxTfzYf3SH7usV+FWHNFY0CTsTLTGzydXjpGOhaGbysTITrmcCn7Pj08mBrAAaIVOd/U+DOH6Dtbnj9Wx5aBe5OfDLuwJMQ1IyEk2+AkQf3/94KYAi2QLAcpRP77EX/nb8A+58Ix10bYuc/Evfk7+MWrLD+w+F3/q6qT7KC/1O1vqMc2AjAAJAa9v8N8B5/pcZgv/lQ1+ipvC7gX0Crp/J6sfpP8PytoFk8vCRw2wVtbUDpqwJqye6pvzIOB38c9jktxAYNA07FX06M5LdZHn8SYS5uQUEh/JyJfFzExstKmQUAZU6VGCu5CeUC74XHGmD0f6HqcE8FtuNSBm/2VF4vtr0Aj38D2rZl9/5OXBphu82Vnhhurr+/jH5pew2HN30dqkeE2KhhuL3+3k4M/AtwnogkUzk9Pgh8HS8nCPVD+T2TeL+Iz+M+TSFZAFDGVBFW8H/Ax0KrpGI0jH4QKsZ4KrAT+C+EekR5Ehb/AF5+OLtFf0ncIsG8z9wyBSW4BX79neCXFgPGTYdJFxLuLXEEnrNhLgJOE5HdTrrQxdRTzWeBy3CTWmH6DRP5kAUBpckCgDKmy7ka+HzoFVUfBaP/m0RqPc0LduN2B6z3U1xfNtwHz1wPXVmmBUzgAgGfRwwbv6pwHX+2n8TaQXDE5bDXQSE2ClwCrBPxs3AWgBeAE0Tk1b7eoEtpoJJPolxOuIHAPFq5QI6x/JqlxgKAMqXL+Sbw5QJU9TrCVUzYshQabsHbHS6BCwL6vL95qqYdnvkerH86+y2AXbhpAXvmKR4VuI4/24drERhzAkz5NIjn8yneYH/c4T7e1s1tAU4WkWeyeXNBAgHhdpK8SybbOFkpsQCgDOkKPovyw5Cr6QZuRPmyTHZ7+FT1UuD7/qpIAg8SWrKgnl57GJ75MXT2c7RwT524ZQu2UDA6lbhdG7lMqQ8aDEfMgfpJITWqpwnAUXi81XYBTSJyV64X6hqG0sGlwCW4hNi+3UYH58ohNkZWKiwAKDO6nE8B14VcTQtxLpPxLH1D/arXAJ/xW91iwEtq08w0AUuug7UPZLdTIK0bNyJggUDhVOBW9ufS8cdjMH4WTLiAwtz6DgYO8VlgEvigiPwmSCG6hqG0cwnCZ3FnH/q0AOXtNhJQGiwAKCO6nPcDvyK8/A6LEebIRJr7bIOqAD8FLvJb9UrgMQqSqm/HS/D092HL2tyq68KNCNhMaHiqU69cRu0FGH4gHPo5qAx7TRy4X79jgQN8F3ypiHgb2dMlDKOCT4cQCLSgnGNBQPGzAKBM6ArOQfkTHpcY97AG+BYT+WU2q31VNQb8Fq95B8ClDH6Agj1qb7gflvwc2rfndl0SFwh0YtsHfUiv6q8ht9BWgLq94dDPwOAsEkF5UQWchFvx79UXRWSu70IB9DmGE+NzCJ/E39TAX2nlPFsYWNwsACgDuowZCLeRXXbzXLgFfjGulfHkMDkOqloJ3AJZnjaYQ5Pc4sDQ8p3vQWHV72FVM3TnGHgoLgjowKYH8lGJ+0RXkvudqqYWJp8P+83w364+NeC2+XnOHrjqh6+x6dJRYXemuoy9iPEJlM/jEhYEdSutvNuCgOJlAUCJ0xVMR7kdvwlsO4DrqOQ7MpbX8y1EVauA24CZ3loGuOY9SOjbBHvSJKz8DbywEBJ5LP9P4JptowKZxdg1zJ/PRFZVFYxtgnHvBilkttr9gOPxmODHWf1jePbToFwms/iB38J7l8oj8HHgUtxfLH/C9TKRi700zHhnAUAJ05UcR5K78ffIoQh/IcHlciBeEour6iDgDlzCf48UeAbeuA4xXMlOWP4rWPOv/AIBcKMBHbi1AhYMuI2jlbjR83wnsCorYeyZMP79Be74AaYAh+L9drrmF/DMRaQWomwlwVQ5qxBbYhxdRQ3dfBjh88C4fItBOF4m8ojHphlPLAAoUbqMQxD+jZ+hOoC7Ub4gk3nMU3k7qeogurf8g4q9TvJdtluesIiCj7Enu9zUwJo7oTPArqdu3KhANwNrmqCCXR1+kFUrVTVwwFth/HtAvCXZybZy3FN/CFl3X/wpPHuxG3na5ffSxHv9V5aZLqKSIbwXuBzIPWOScoVM5rveG2YCswCgBOly9sfly/WxzPhplG/KZP7soaw+6T/q5nP472axz/+EUPpm3OLArSGUnYWXmmHVX6EtiyOHM0myezBQTqMDMdxTfkXqa5CHdAHqhsD4c2CU59mlrA3FZfbLNt9wDlZeBc9d3vufJTldZnOP/0r7p0qM5cxC+Apum0O2viCT+F5Y7TL5swCgxOgyRiDcSz6R+O6WoHyNSfwl7LO9tYXTgH8hFXDYjTD6fSHUkgCeBpaFUHaWNi6CVX+C11/MLY9AX5LsCga6KJ3Mg4Lr4NOdfQV+NqbGBIZOgskfgIYDPRSYDwEmAYcTym7bTJ2/s5iRvCnKhXWpM0ZmAl8A3pLFJcfIJB4Nt1UmHxYAlJDUaV8P4FKL5UdYhXIlE/ldIQ7wUEVYwMPAMa7+OBx6A4z5SEg1rgMegdw2LfjVtd1ND7xyH3Ts6P/92VJcEJBMfU0Q7UhBuqOP9/hagcd09yk1dTDqVBh/PsR9rnXNVR0upW8YpwUqLLkMXshim79wqTSGnukzK/o8xxPjC8D/0FtEpPxKJvPhgjfMZMUCgBKiy/giwnfyvPwVlG/Tyc8LmapTF3AByh6ZywQOvhbGfjqkWjtwQcArIZWfg9an4IVbYdNz0B1ivJXs8Ur0+F7ZlcxIyS5YEHZ17vT4Pv0S/D3V96WyAoZOhYnvhvrJIVaUrTHA0WR/tnAONOEW+710Y7ZXbKWCKfJWXvbfmPzoCg5E+Rzwbtx+yFaEa5jAt+ykwOJlAUAJ0RU8iHJ8bhexCbiOBN+XKYWdJNd7qKGNpcDYXt8w7jMw5QchrtpegZsWKIZtyArr74OX7oDXl+e/g6CcVVTAkPFwwCwYHsJ60bxUA0cSQlY/J7Ednjgf1v89t+uU38oswphLC0TvoYJJ7CX7synqtpj+WQBQQnQ5TwGHZfn2bcA1xPm+jKc1xGb1SVuYA2TOXrbPOXDEbyAewmIqwE0FPA68FFL5+VB49T/wyj3QuhK62guS4bjoCFA9yD3pjzoThr4p6hbtYQxuts13fq2Ujlfg0bNgc57T48I0aeRfXttkBhQLAEqILuenwMf6edsO4Cco30uf0hcFXchQkizDLZfObMjxcNRtUL1PiC16GXeWQKEyCOag7RVYuwA2PA47NkCinJb/9yBAvBIa9oXhR8OoGVDtaxerT4Nww/0hfh63Pg2Pzoa2F4OU8jS1HCXTBtQGUuORBQAlRFcyliSPA3v38sdtCD9FuEom8Gqh27YnbeFHQPaT/LXj4Zj5UB9mzvZO3JTAKor6kXv7Knj1v7DxGdj+SumOEAhQWQ2D9oEhh8Co02FQ77NBxSEGTMad4BdiToHX/gGPvwu6A24bBRAulkauD16QGYgsACgx+jxHEuNGID1euhm4iQrmyrhiWPUGOp8JxFhCriumKofAm/4Cw84Ip2E7tQJPQHQDJLlJtMOmx2HjE7D1BWh/DTq2Q7JIRgoEt0Wvsg7qRkDDeNj7UBh2bMSr9nOxD26uf69wq1n9E1jyGbfwz4/XqWKyTGejrwLNwGEBQAlSRVjJJJLU8xJPF9sQoLbwF+AdeV0scZj0FZj4lQKkdH0ZFwjkeNpfsWjfAJuXwNaV0LYO2jdCx2boboNElwsQfI0cxOMQr4KqWqjcC2qHQd1oaJgEQ6ZCpe9j5QulATiCoCnv+5Vsdzn91/wijNKvkyYuCaNgU94sADBe6QJORLmPoJ+tkbPh8JuhsrfZDp8SwPO4MwWKKo7yI9EG7etcsNDd4Tqi7jZIdrsV6JqEijqIpRa6xWsgXgtVDVA93L1K5ik+F1W4of6JhH4bbFvthvw3h5YOvxvlKJnF02FVYMqTBQDGK13AP1GmeSmsbhIcdQs0HO6luMw6cVkEn6csAwGTUoHL5DcF7yf39Wb9fHjq/dCV96Ga2bpbmpgediWmvFgAYLzRBTShNHstNFYDB18H+3/Ua7F968AFAcsondy7pn/pjv8gQknmsydNwIpvwfJv7HmgT3iEs6WRHBMKmIHMAgDjRSrl76PsWpzo15gPw9RroKIhlOLfqA03LbAKCwRKWSVumL9AHT+4If+n3g+b/lOY+nZZARwiTXQUumJTmiwAMF5oM+cj/C7USmrHweE3wdBTQ61mdx24IGA5RZlDwPShBpiA29ZXoI4fYN2f4ZmPFWLIvy9zpImro6rclBYLAExguohK1vMsbow1XBJzZwgcdDXECnhjJwmswY0KeNi/bUIyBDgQ2J9wDyvYQ1crPPspeDncGDgLW4lxkMwsji3BprhZAGAC0wV8EuUnBa204TA44rcFWiDYk+JOHFyJO2yoFDP0lJsYMBr3xD+y8NVvvAue+hC0F0266RulibCO2zRlxAIAE4jOo5Z6luHuwIUVr4XJ34Jxl4BUFLx6d87AC7gpgm0R1D/QNQDjgPGElq8/k+4t8PwVsPp6iiwQTCKcII2Etu/QlAcLAEwg2sIVwLcjbUTDEXDoDe5MgUgosB4XDLyMbSMMUyXukJ5xwPDomrF+Piz+JLSvia4NmT1AIyeLFFdkYoqLBQAmbzqfvYmxgt7PJigsicGYj8KU70FFyOlcM0oAr+JOH1yLBQM+xHFD++OAURR0bn9P7WtdKt91t0TXhmwJ50sjf4i6GaZ4WQBg8qbNXI3w+ajbsZvq/eCgq2B0MRyV3o0bEXgJFxRYMJC9KmBf3NP+voR6OE82tBtevB6e/zJ0b422LdlbQ4IpchY7om6IKU4WAJi86D8YRTfLgLqo29KrEbPcaED91KhbkqK4Q4hexi0ejGybWJES3Ar+fXBP+yOI9Em/p413wZLLYOtTUbckd8rXZRZXRt0MU5wsADB50RZuAC6Kuh0ZSYVLIDT5G1Ad4tnueWnD7SZ4LfUaiIsI98LN44/AdfwRLOTLZPtz8PxX3N7+0tVGnINkBkW7WMFExwIAkzNt5kCExbj8qsUvXg8TPgfjv+B2DhSldmAjLhjYiBshKJLjfr2I45aKDE+9hlHQBD256NoIy7/pju7Vspi2sW2BplcWAJicaQvzgHdF3Y6c1Y6FA78N+72nAEcNB6XADmAzLhjY0uNV7Gpwnf1g3FP+3rgte8V+u9E2Vl2TYPmV9XSXws85a0liHCszeSzqhpjiUuy/kabI6HyOJsYjlPJnp24CTJjjpgciyR8QRBewHRccbN/j1Q6hp4EX3JN7LTBoj1cdUE/kC/Zytx34JTCXZhlGjH8DQyNuk2//lCbOiLoRpriU7k3cREJbaAaaom6HF7XjYeLlsP9HkxAr9iGBHHTgjjfu7PF9Ehc8aOqVHtpOsmuxXQXulhBLfR/HdfZVuPn59PdlYxtwI/BdEVmX/p+6kONIchdu2KJ8KI0yi4VRN8MUDwsATNZ0AceiPEQ5fW6Ehczc8FkYPge4gIIcEm8ithm4DrhGRDb29gZt4XSgGTefUS6WUMvhMs32oxqnjJ56TOiSfIdy6vzhGSp4t8iI50Tkw8ABwNdxK/FM+VkJXA6MF5Gv9NX5A0gT/0Q4j/JK3jCVNj4UdSNM8Sinm7kJkS7gzSj3Rt0Oj14mzgm9bY9S1WrgPOAyoNCnDRn/7gOuBW4VkUQuF+oCLkC5ifJ5WFpPF5PkbEomm5EJT7l8qE3YlG9G3QSPthKjqa+90SLSISI3i8gRwHTg75TXk2D5S26DLb+ANYfDC/JREflzrp0/gDTyW5RLwmhiREZSyeeiboQpDjYCYPqlC5lOkjujbocnXcBsaeIfuVykqvsC55Hc9FliQ8eF0jITXMejsOVnsO0PkEw95Crvk8n8NkixuoCvoWWTUc+SAxnARgBMNhJ8NeomeKIIF+Xa+QOIyDoRuZaVw25izaHQehUkbKlAUehe6/49XpwMLx3jAoBkjxFu4digVUgjXwe+H7ScIlFLomyCGROAjQCYjLSFRqAl6nZ44SEvuq7gzyjvBEBqoG4W1L/DfY1FeQrhANP9Mmz/K2y/Bdr+TT9ZEx+QSZwUtEpVhAX8Avhw0LKKQIIYR8tMnoy6ISY6FgCYjLSZhxCOi7odgSl/oIn3Bj0fXZexBGHKG/5AqqHmFBh0FtSfB/FiO3ugDHS/CNv/Btv+DO33k0Oq5HZa2UuOoStoE/RKYhzHzcB7g5YVOeEeaeT0qJthomMBgOmTNnM2wt+ibocHd7ONJjmXziCF6DKqEbbR3xkIUgE1p7lRgbrpUHVYkGoHLu2Gjodgx52w43boCJDJNsmb5ECe8NKsecSp53e4nSKlrkmaWBB1I0w0LAAwvUoNdz4GHBl1WwJ6mg5OlbfTGrQgXcnhJPMYMo2PhNrToHY61DVCxf5Bm1LOVgJ3seW6LjZ+9WKSgf/ZHOEjMpEb/RQGOo8q6rkFmO2rzIg8wzaOlHPJeYeEKX2llgjdFMpC3kmpd/7KKuLM8NH5p8o7JK/rEuvdsPW21LGyVYdAzZthr4v/Q/VhI4ApDMxgvAt4AngQeAj4j4isAVAlzgbeCkz2UpNyhJdyUuRcOnUe76Cev1LaqbEPZRDvB34VdUNM4Q3Em47pR2qe8wmglMeuX0N4szTynK8CdRlfR7ztiHiJVibIMXSp6hDgBOD41OtQoNyGCRK4p/sncR3+g8BjItLW1wW6gg+j/NJT/ffKJE71VNZOOo9a6mkB3uK77AJayzYmy7n0+W9hypMFAOYNtJnzEX4XdTsC2IEwXRp5wGehupw/Aef6KYzLZDI/6POPVQcDB+OCgYOBQ4CpwGiK+/e2C1gNLAae7fF1iYi051KQLqKSISwFJnho1xYmMiToItDe6B0MopsFCKf4LrtglMtkVt+fR1OeivlGYiKg84gziGd6XeleGrqAs8NY2KTLeALxMpS8BeEAmcjmnNugWoUbHRiLO7tgXOr70cAIOl45hIqGSuL1Hpq5h65W6NoEXRuhcwO0r4G21aCxf3LQt76K6/hfySfjXl90ORcCP/NTGJNkMiu8lLVn0XcymC7uAo4Jo/wCeJ0kE2U2r0fdEFM4tgbA7K6e90LJdv6KcKE0htD5K8IKT/PRcEM+nT+AiHQCK1KvN9AWbgXeTqwKKoemXntDrNa9oaLB7VIQgYohqYsS0L3FfZ9sh0RqJDixtUenv8m9r9dKuUumfPu+fP4+/Wrl1wzhClygE0yMI+nj5xaUnMlm/StnUs0/gTeFUUfI9ka4FPhK1A0xhWMBgNlJ5xEHroi6HQF8URq5KZSSV7I/UOehpC7cUbRhWQK8nWQndKxzr7DFeCGsouUYunQZ30L4ReDClCOBW4K3qnfydlq1hRnAv3DTNqVF+F9t5icyiwJ8aEwxsFTAZpcGzgUOiroZeVGulyauCq38pLdRkd/LpFBzsHtb9Ji1BKtDLX8Sv8bH30vD39UiTWygi9OJ4t8huEHYCMCAYgGAAVJD3MoXo25Hnv7EI3w61BrES2CkKN/zUE7fYiwNtfzeaLgBgAgJxMNplFKYba1yNq8S50wIb2QkNMKFupBJUTfDFIYFAMZp4RxKc9vfv4APyJXZ54XNi58A4G8ymcUeyulbkqXgf6V7Bh08yiuh1zKBPwBPBSxljC5npI/m9EdmsIYYZwIvF6I+jypJ8I2oG2EKwwIA457+YyX59P80HbxdmugIvSb1EACE/fQPSBNboIDHvCqrQg++ABGSiIeOKeY3IVAmMpPlJHgLsLZQdXohvFsXclTUzTDhswDAwELOQjk66mbkRFlFzGOWv/4FXQNwt0z2m5egT8rTBanHCWVVfa8mcCvKw4HKSBY2u6WcxTISTKO0ggAhyXeiboQJnwUABpQvR92EHG0AZsrMAgw9A/okg3D77PMnfNdPa7Kq65kC1rW8YFUJSoyvByuEwz01J/sqdwUBpTQdMENb7KTAcmcBwACnLTQCx0bdjhxsIUmjzOL5gtVYx4EES5r1iEzkbl/NyUJ5jgAAMpEWhP/kXUC+5zkEJGexDC25IGCuqiWLK2cWAJhS2vffBrxNZvNoQWsVDgx4/VxPLcm2vsIFAFLYACBVZ5ARq6mqxL21JQcyi+dLLAg4loW8PepGmPBYADCA6QLOAN4cdTuylEC4QJr4d8FrViYGuHYpE/ibx9b0bytLcQmHwpcs3BRAmkzgXuCfeV5ew8oA/54BlVwQoHxX77GEceXKAoCBTEsm6YeiXCiN3BpJ7cL4ANfOFQl/lfxuVZ5LJ7CsAFUlkZCTAPUtyGf3UG+tyIPM4nninAElkXHvQHbwvqgbYcJhAcAApfM5CTgt6nZkRbhMZkV6Xnm+T4xr6OAPXluSvUJMA7xYkC2YvZBJ3A/8Pa+LI1oH0JPMYCnCWyiFkQDhazqPqqibYfyzAGCgkoCrqQvnq9LIDyNuQ77H0X5PDqHTa0uyV4gAoPDz/z3FmQN053Fl5AEAgDTyHMLpFH8QMJYGPhh1I4x/FgAMQNrCCQjTo25HFn4sTR5SwAagi6gExuRx6TqqPRxgky8twFZALfz8f08ynqUoN+dxaaRTAD31CAIKsqU1b8qXtIXqqJth/LIAYGAqhbn/m2jkkqgbwd6MgzxWjQtzZX/avLcnW4VIBhSLeAQAIMlXgR05XnWgLi6eIe1UEDCN4g4CDkD4SNSNMH5ZADDA6EKOABqjbkc//k4tHxUpaE773uW3A+BVavm597bkYhargK0h1xJ5ACAHsRbN+XjlSqoDbu30rCSCAOXLOo/aqJth/LEAYKBJcjnBktqES7iHWs6TaXnN7fqnecz/K1fLqJyfSr1KBU/hHjwURQ6A3lQwF9iY41VFsQ6gJ2nkOWA6xRsE7McgLoq6EcYfCwAGEL2D8cA7o25HBo/QydkyjfaoG7KT5BwAvEYnPwulLbkLenpeJkm6CrLVsF8ynlbgqhwvK7oAAECaeJY4J6OsirotvRIu19upi7oZxg8LAAaSbj4HRZvU43nizJazQx+2zlWuAcDVcgjbQmlJrpTHQyx7tZwV7SjHbuJcR26nIBbt0dcyg1XANIpgiqUX+xLnE1E3wvhhAcAAoXcwEinSrTzKKhKcLjNYH3VT3iC3KYCNdPPT0NqSqziPhVa2sDS0svMg42lH+FrWF2jg0x1DJbNYTZxpFCahU64u19toiLoRJjgLAAaKBJdAUQ7dvYQyXc4q0uNSc5kCEP6fTCmiEYxqniKslMDCklDKDWICN6E8mdV7hYmpLZ5FS2awhi5OgQKe7pid4VTyyagbYYKzAGAA0DsYBHw86nb0Yj1J3iqzWRl1Q3qjSxgGWT/pbKSLn4TZnlyl1lKE86SeLL4AIJVyOdstrpUMi+5MgGzJ2bxKnDOyDmwK5/Pawl5RN8IEYwHAQNDNx4BhUTdjD6+R5AyZXXwdyU4VjM36vcoPiurpf5dwpgFixTUFkCaTuR2yPDAqUdzTAGkyg/Uo01AejrotPQxDiyBPhwnEAoAyp4uoRPhM1O3Yw2aURplddEObuxMOyOp9yibgx+E2Jk9hLQTsLs4AAIAkn4UsDmASDgq/MX7IbF6nircCD0Tdlp2Ey3Q+e0fdDJM/CwDK3atcAFl2ZIWxnRhnySwWRd2QfknWIwDfl8lsCbUt+QpnIeAGOYvXQijXCzmQJ4Df9fvGZOkEAAByJpuJcyb5H4Xs25AifLgwObAAoIypIgiXRd2OHtoQZstM7o26IVnKJgB4jUTOmegKp5rHyeZpODfFO22zy5egn1TMMYYXpin+yAy2E+dtwN1RtwUA4bO6kKFRN8PkxwKActbC2yiehCedCO+URv4VdUOylsxq5GRukc79AyDT2IbvrWRa/AGATGIN8IOMb1JaC9Mav2QG24FZ5Hscsl+DUT4ddSNMfiwAKGcxvhB1E1K6EN4ljbRE3ZCcCIP7eccr1PF/BWlLMH7XARRZDoA+dXMVZNxe+odCNcU3aaKDbbwL+GvUbUG5xPIClCYLAMqUNnMqyklRtwNIIHxAGoviaSVX/c1zfzfqnP9Z8h0AFP0IAIBMYSsxzkHY3ssff08msaDgjfJIzqWTkZwH/DHipgylqii3GZt+WABQroQ5UTcBUJSPS2OJPmkJv83wZ6vQosn5n1nM80LA7tIIAABkAg+TZArw/4Bm4Oco02RS0YyOBSLH0EUj5wPXRtoQ5TI7KbD0FO+pcCZvOp9DifEU0f77KsInpJEbImxDYLqcq4HP7/4/2YTSJAfyUDStyo0uZChJXsPP52EbjexVFEc1m91oC3OAuZE1QLhYGrk+svpNzmwEoBzF+F+iDu6EOaXe+QOknhRPBq4D/ojwNZIcVCqdP4DMZBP+DpZ52jr/4iRNXJXalhfNv49yuc6jKpK6TV6K9WQ4kydtYQRwfsTNmCONfC/iNngjk7gfuD/qdgSiPIgwyUNJxZaS1vQgjfxIW2gFfknh7+/708D5wK8LXK/Jk40AlJ9PADUR1v9laeLqCOs3vXvQUzlPeSrHhESauBnlnUB7wStXvqTziBe8XpMXCwDKSGr4LcrVuF+SJr4dYf2mL+opAEjaCEApkFncRpImKHiOikkM4h0FrtPkyQKAclLPu4H9Iqr9S9LEdyKq2/RnX56CwFsWlViRn99gdpLZ3INwBrCxwFVfoWoLzEuBBQDl5VMR1WudhvXiewAABXBJREFUf5GTY+hCeTRgMSulqUjPPDC9kkYeAU4lc0Ikz5VyBHfQVLD6TN4sACgT2sypwLERVG2df+kIOg1g8/8lSJp4ljinAMsLVmmSrxSsLpM3CwDKRxSnclnnX0piAQMAsfn/UiUzWIVyCoUL4o7X+UwrUF0mTxYAlAFtZizC2YWtlCus8y8xEvAsebUAoJTJLNaR5C0Q8HOQrRhfKkg9Jm8WAJSDGJdAAbfeKFfILL5bsPqMFzKTV4AX8y4gaVMApU5m8zq1vBX4RwGqO0NbOKEA9Zg8WQBQ4vQ2GlA+UrgKrfMvaZL3NMBWZrHKa1tMJGQa2xjJbODmAlR3RQHqMHmyAKDUVfEh6PfYWj+s8y99ybxTGD9lKYDLR+oQoQ+ifD3kqmbrQg4JuQ6TJwsASpgqgvLJwlRmnX9ZiOU5/2vz/2VHBJVZXAl8BOgOqxqSXBZS2SYgCwBK2QJmAweFXIsiXGqdf5mo4XHySRHr+0hhUzSkiRtTqYODJorqywV6B/uHVLYJwAKA0vbZkMtX4DPSyA9DrscUiEyjHbgrx8uSKHeE0R5THGQWt6GcDmwIofhKuvl0COWagCwAKFHazGEQ6j7bbpQPSBPXhViHiYJwTY5X/FmaeCmUtpiiIbN4CDiRMBIGCR/TvzLEe7kmEAsASpXwaQgt33Yn8B6ZxW9CKt9ESBq5G/hZlm9/GQ19pMkUCWliBcopSOC00Xvai2ou8lymCcgCgBKUiqTPD6n4DpRzpYm/hFS+KQa1XAxcBxlX9j9DjNNkFusK1CpTBGQW66jhLcACz0X/r94T6VHlZg8WAJSiaj4IDAqh5O3EmC2zuC2Esk0RkWl0SxOXoBwH/ApYCbQBrwJ3Ah9hJEfJzALmjzdFI5Ur4Gz85grYl3bO81ieCciObCwxqggLWIL/1f+tCE3SWKA0ocaYoqeKsJBvo3zRS4HCPdLI6V7KMoFZAFBidAEzUBZ6LnYTwszU0aHGGLMbbeHDwA1ARcCi2tlGvZxLwkOzTEA2BVBqlIs9l7iOJKdZ52+M6Ys0cSNwDrA9YFE1VNLgoUnGAxsBKCF6OwcQZyX+Dv5ZTYzpNs9rjMmGLuQoktwOjMqziA5G0iDH0OWzXSY/NgJQSmJ8An+d//PEOcU6f2NMtmQmjxHnBMj7ZMhHrPMvHhYAlAhVBOG9nop7lgqmyQzWeCrPGDNApO4bpyB5rEUSrvffIpMvCwBKxUIOBC/5tB8hxinyVl72UJYxZgCSJrZQw1nAT7O/iIXM5I/htcrkygKAUpHIe86tp7vp4gyZySYPZRljBrBULolPAJ+j/9ME/4Vynh0pXVwsACgVwtZA1yu3ArPk7IDlGGNMD9LE94FTgH/38scvI1xKLWdKE1sK3DTTD9sFUCK0hWpgE1CX88XCL9jKx23vrTEmTNrCGJQjiVGFsoqHeVKuJBl1u0zvLAAoIdrCz4ALc7zsKhr5og29GWOM6cmmAEpJF18B1mf5bkX4gjRxuXX+xhhj9mQBQAmRs3kVZRb9BwEdKB+RRr5XiHYZY4wpPRYAlBiZxSLgaOCP0MucvnA/yptlFr8qdNuMMcaUDlsDUMK0mX0RTkMYRZJWlAdlNkuibpcxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMaZo/X/BUewfDO2dLgAAAABJRU5ErkJggg==";var Af="data:image/png;base64,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";var Rf="data:image/png;base64,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";import{Fragment as oM,jsx as Be,jsxs as Jt}from"react/jsx-runtime";var lu=-100,cu=100,jf=.03,K1=.03,Q1=.03,Lf=.5,J1=Ef,Z1=Af,eM=Rf,tM=Math.PI/4,kf=.4,wi=64,Df=jf*3,uu="#4d7dff",Of="#ffcc00",If=.02,rM=new lr(0,1,0),Rs=32,Bf="#ff9d3d",Ls=4;function du(e){let t=new Float32Array((wi+1)*3);for(let r=0;r<=wi;r++){let n=r/wi*Math.PI*2,i=Math.cos(n)*kf,o=Math.sin(n)*kf,a=0,s=0,c=0;e==="x"?(s=i,c=o):e==="y"?(a=i,c=o):(a=i,s=o),t[r*3]=a,t[r*3+1]=s,t[r*3+2]=c}return t}function nM(e){let t=Math.abs(e.y)<.99?new lr(0,1,0):new lr(1,0,0),r=new lr().crossVectors(e,t).normalize(),n=new lr().crossVectors(e,r).normalize();return[r,n]}function zf(e,t,r=1e-5){return Math.abs(e[0]-t[0])<r&&Math.abs(e[1]-t[1])<r&&Math.abs(e[2]-t[2])<r}var Mi=null,hu=new Set;function pu(e){Mi!==e&&(Mi=e,hu.forEach(t=>t()))}function iM(e){return hu.add(e),()=>hu.delete(e)}function Nf(){return Mi}function Uf({light:e,position:t,rotation:r=[0,0,0],color:n,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:p,setActiveTab:d,setActiveSubTab:h}=Ma(),{camera:m,gl:f,raycaster:b,invalidate:P}=G1(),C=tt(null),k=tt(null),y=tt(null),j=tt(null),L=tt(null),w=tt(null),I=tt(null),U=tt(null),_=tt(null),S=tt(null),A=tt(null),G=Qt(()=>new Y1,[]),v=Qt(()=>new xi,[]),z=Qt(()=>new lr(1,1,1),[]),M=tt([0,0,0]),O=tt([0,0,0]),N=tt(!1),$=tt(null),Z=tt(null),te=tt(null),ie=tt(c);No(()=>{ie.current=c},[c]);let Se=Qt(()=>new lr(t[0],t[1],t[2]),[t]),Ue=Qt(()=>new As(r[0],r[1],r[2]),[r]),rt=Qt(()=>new Float32Array(6),[]),gt=Qt(()=>du("x"),[]),Fe=Qt(()=>du("y"),[]),ze=Qt(()=>du("z"),[]),nt=Qt(()=>new Float32Array((Rs+1)*3),[]),dt=Qt(()=>new Float32Array(Ls*2*3),[]),bt=e?.type==="point",pt=e?.type==="spot",At=bt?Z1:pt?eM:J1,Ge=bt?K1:pt?Q1:jf,q=Qt(()=>new $1().load(At),[At]),Vt=V1(iM,Nf,Nf),ht=!!e&&Vt===e.id,_e=tt(new lr),Ye=tt(new As);No(()=>{N.current||(_e.current.copy(Se),Ye.current.copy(Ue),P())},[Se,Ue,P]),No(()=>{e&&Mi===e.id&&!o&&pu(null)},[e?.id,o]),No(()=>()=>{e&&Mi===e.id&&pu(null),te.current!==null&&(cancelAnimationFrame(te.current),te.current=null)},[e?.id]);let He=Es(()=>{if(N.current||!ht)return;let se=_e.current,de=new xi().setFromEuler(Ye.current);G.compose(se,de,z)},[G,z,ht]);H1(()=>{if(C.current&&C.current.position.copy(_e.current),He(),y.current){y.current.lookAt(m.position);let se=m,de;se.isOrthographicCamera?de=Ge/se.zoom:de=m.position.distanceTo(_e.current)*Ge,y.current.scale.setScalar(de)}if(I.current){let se=m,de;se.isOrthographicCamera?de=Df/se.zoom:de=m.position.distanceTo(_e.current)*Df,I.current.scale.setScalar(de)}if(L.current){let se=L.current.getAttribute("position"),de=se.array;de[0]=0,de[1]=0,de[2]=0,de[3]=_e.current.x,de[4]=_e.current.y,de[5]=_e.current.z,se.needsUpdate=!0,L.current.computeBoundingSphere()}if(w.current){let se=_e.current,de=se.length();w.current.visible=de>Lf,de>1e-6&&(w.current.position.copy(se).multiplyScalar(.5),w.current.scale.set(1,de,1),w.current.quaternion.setFromUnitVectors(rM,se.clone().normalize()))}if(j.current&&(j.current.visible=_e.current.length()>Lf),pt&&U.current&&_.current&&S.current){let se=_e.current,de=se.length();if(de>1e-6){U.current.visible=!0;let Ke=se.clone().negate().normalize(),Ae=de,Qe=e?.angle??Math.PI/6,V=Ae*Math.tan(Qe),re=se.clone().add(Ke.clone().multiplyScalar(Ae)),[oe,we]=nM(Ke),Oe=_.current.getAttribute("position"),Ce=Oe.array;for(let xe=0;xe<=Rs;xe++){let Me=xe/Rs*Math.PI*2,ot=re.x+(oe.x*Math.cos(Me)+we.x*Math.sin(Me))*V,zt=re.y+(oe.y*Math.cos(Me)+we.y*Math.sin(Me))*V,St=re.z+(oe.z*Math.cos(Me)+we.z*Math.sin(Me))*V;Ce[xe*3]=ot,Ce[xe*3+1]=zt,Ce[xe*3+2]=St}Oe.needsUpdate=!0,_.current.computeBoundingSphere();let Re=S.current.getAttribute("position"),ee=Re.array;for(let xe=0;xe<Ls;xe++){let Me=xe/Ls*Math.PI*2,ot=re.x+(oe.x*Math.cos(Me)+we.x*Math.sin(Me))*V,zt=re.y+(oe.y*Math.cos(Me)+we.y*Math.sin(Me))*V,St=re.z+(oe.z*Math.cos(Me)+we.z*Math.sin(Me))*V,mt=xe*6;ee[mt]=se.x,ee[mt+1]=se.y,ee[mt+2]=se.z,ee[mt+3]=ot,ee[mt+4]=zt,ee[mt+5]=St}Re.needsUpdate=!0,S.current.computeBoundingSphere()}else U.current.visible=!1}});let Bt=Es(()=>{te.current!==null&&(cancelAnimationFrame(te.current),te.current=null),M.current=t,O.current=[r[0],r[1],r[2]],N.current=!0,$.current=null,Z.current=null,ie.current?.(!0)},[t,r]),Gt=Es((se,de,Ke,Ae)=>{let Qe=new lr(M.current[0],M.current[1],M.current[2]),V=new lr,re=new xi,oe=new lr;Ae.decompose(V,re,oe);let we=Qe.clone().applyMatrix4(Ae),Oe=[Math.min(Math.max(we.x,lu),cu),Math.min(Math.max(we.y,lu),cu),Math.min(Math.max(we.z,lu),cu)],Ce=new xi().setFromEuler(new As(O.current[0],O.current[1],O.current[2],"XYZ")),Re=new xi().copy(re).multiply(Ce),ee=new As().setFromQuaternion(Re,"XYZ"),xe=[ee.x,ee.y,ee.z];_e.current.set(Oe[0],Oe[1],Oe[2]),Ye.current.set(xe[0],xe[1],xe[2]),$.current=Oe,Z.current=xe;let Me=new xi().setFromEuler(Ye.current);G.compose(_e.current,Me,z),P()},[G,z,P]),Pe=Es(()=>{N.current=!1;let se=$.current,de=Z.current;$.current=null,Z.current=null;let Ke=se&&!zf(se,M.current),Ae=de&&!zf(de,O.current);Ke&&a&&a(se),Ae&&s&&s(de),Ke||Ae?te.current=requestAnimationFrame(()=>{te.current=null,ie.current?.(!1)}):ie.current?.(!1)},[a,s]);return No(()=>{let se=Ae=>{let Qe=f.domElement.getBoundingClientRect();return new q1((Ae.clientX-Qe.left)/Qe.width*2-1,-((Ae.clientY-Qe.top)/Qe.height)*2+1)},de=Ae=>!!Ae.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Ke=Ae=>{if(de(Ae))return;let Qe=se(Ae);b.setFromCamera(Qe,m);let V=[];if(k.current&&V.push(k.current),y.current&&V.push(y.current),V.length===0)return;if(b.intersectObjects(V,!1).length>0){let oe=e?.id??null;Mi!==oe&&(pu(oe),d?.("scene"),h?.("Lighting")),Ae.preventDefault(),Ae.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Ke),()=>{f.domElement.removeEventListener("pointerdown",Ke)}},[m,b,f,e,d,h]),l!=="scene"||p!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:Jt("group",{ref:se=>{se&&Ep(se)},children:[Jt("group",{ref:C,children:[Be("sprite",{ref:y,children:Be("spriteMaterial",{map:q,transparent:!0,opacity:.9,blending:su,depthWrite:!1,rotation:pt?tM:0},At)}),Be(W1,{ref:k,args:[.25,16,16],children:Be("meshBasicMaterial",{transparent:!0,opacity:.01})}),bt&&Jt("group",{ref:I,children:[Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{children:Be("bufferAttribute",{attach:"attributes-position",args:[gt,3],count:wi+1})}),Be("lineBasicMaterial",{color:uu,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{children:Be("bufferAttribute",{attach:"attributes-position",args:[Fe,3],count:wi+1})}),Be("lineBasicMaterial",{color:uu,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{children:Be("bufferAttribute",{attach:"attributes-position",args:[ze,3],count:wi+1})}),Be("lineBasicMaterial",{color:uu,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!bt&&!pt&&Jt(oM,{children:[Jt("mesh",{ref:w,children:[Be("cylinderGeometry",{args:[If,If,1,8,1,!0]}),Be("meshBasicMaterial",{color:Of,transparent:!0,opacity:.05,blending:su,depthWrite:!1,depthTest:!1})]}),Jt("line",{ref:j,children:[Be("bufferGeometry",{ref:L,children:Be("bufferAttribute",{attach:"attributes-position",args:[rt,3],count:2})}),Be("lineBasicMaterial",{color:Of,transparent:!0,opacity:.7,blending:su})]})]}),pt&&Jt("group",{ref:U,children:[Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{ref:_,children:Be("bufferAttribute",{attach:"attributes-position",args:[nt,3],count:Rs+1})}),Be("lineBasicMaterial",{color:Bf,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),Jt("lineSegments",{renderOrder:999,children:[Be("bufferGeometry",{ref:S,children:Be("bufferAttribute",{attach:"attributes-position",args:[dt,3],count:Ls*2})}),Be("lineBasicMaterial",{color:Bf,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),ht&&a&&Be(X1,{ref:A,matrix:G,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Bt,onDrag:Gt,onDragEnd:Pe})]})}import{useCallback as mu,useLayoutEffect as aM,useMemo as Sr,useRef as Nr}from"react";import{PivotControls as sM}from"@react-three/drei";import{useFrame as lM,useThree as cM}from"@react-three/fiber";import{Euler as Ff,Matrix4 as ks,Quaternion as Ds,Vector3 as jo}from"three";import{jsx as Vf}from"react/jsx-runtime";function fu({node:e,space:t,onTransformChange:r,onDraggingChange:n}){let i=cM(A=>A.invalidate),o=Sr(()=>Tp(e),[e]),a=Sr(()=>new ks,[]),s=Nr(!1),c=Nr(new ks),l=Nr(new ks),p=Nr(null),d=Nr(0),h=Nr([]),m=Nr(null),f=Nr(n);f.current=n;let b=Sr(()=>new jo,[]),P=Sr(()=>new Ds,[]),C=Sr(()=>new jo,[]),k=Sr(()=>new Ds,[]),y=Sr(()=>new jo(1,1,1),[]),j=Sr(()=>new Ds,[]),L=Sr(()=>new jo,[]),w=Sr(()=>new jo,[]),I=Nr([0,0,0]),U=mu(()=>{s.current||(e.updateWorldMatrix(!0,!1),b.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),k.copy(P),t==="world"&&k.identity(),a.compose(b,k,y))},[b,a,k,y,e,o,t,P]);aM(()=>(U(),()=>{let A=m.current!==null;A&&(cancelAnimationFrame(m.current),m.current=null),(s.current||A)&&(s.current=!1,f.current(!1));for(let G of h.current)si(G);h.current=[]}),[U]),lM(()=>U());let _=mu(()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let A of ai(e))_h(A)||(ja(A,A.matrixWorld),h.current.push(A));e.updateWorldMatrix(!0,!1),b.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),e.getWorldScale(C),c.current.compose(b,P,C),l.current.copy(a),I.current=[e.rotation.x,e.rotation.y,e.rotation.z],p.current=null,s.current=!0,n(!0)},[b,a,e,n,o,P,C]),S=mu((A,G)=>{let v=c.current.clone().premultiply(G),z=l.current.clone().premultiply(G);v.decompose(L,P,w);let M=L.clone();z.decompose(b,k,y),t==="world"&&k.identity(),a.compose(b,k,y),A.decompose(L,j,w);let O=new Ff().setFromQuaternion(j,e.rotation.order),[N,$,Z]=I.current,te=[N+O.x,$+O.y,Z+O.z],ie=new Ds().setFromEuler(new Ff(te[0],te[1],te[2],e.rotation.order)),Ue=(e.parent?.matrixWorld||new ks).clone().invert(),rt=M.clone().applyMatrix4(Ue),gt=o.clone().multiply(e.scale).applyQuaternion(ie),Fe=rt.clone().sub(gt),ze=[Fe.x,Fe.y,Fe.z];e.position.set(ze[0],ze[1],ze[2]),e.rotation.set(te[0],te[1],te[2],e.rotation.order),e.updateMatrixWorld(!0),i(),p.current={position:ze,rotation:te}},[b,j,a,k,y,i,e,o,L,w,t,P]);return Vf("group",{children:Vf(sM,{matrix:a,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:_,onDrag:(A,G,v,z)=>S(G,z),onDragEnd:()=>{s.current=!1;let A=p.current;if(p.current=null,A)r(A),m.current=requestAnimationFrame(()=>{m.current=null,n(!1)});else if(h.current.length>0){for(let G of h.current)si(G);e.updateMatrixWorld(!0),i(),n(!1)}else n(!1);h.current=[]}})})}import{Fragment as Si,jsx as B,jsxs as he}from"react/jsx-runtime";function kM(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let r=t.geometry,n=r.getAttribute("skinIndex"),i=r.getAttribute("skinWeight"),o=r.getAttribute("position");if(!n||!i||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new It,l=s[0],p=1/0;for(let m of s){c.fromBufferAttribute(o,m);let f=c.distanceToSquared(a);f<p&&(p=f,l=m)}let d=n.getComponent(l,0),h=i.getComponent(l,0);for(let m=1;m<4;m++){let f=i.getComponent(l,m);f>h&&(h=f,d=n.getComponent(l,m))}return t.skeleton.bones[d]??null}function DM(e){let t=kM(e)??e.object,r=Ki(t);if(!r)return null;t.updateWorldMatrix(!0,!1);let n=t.worldToLocal(e.point.clone());return{anchorNodeName:r,anchorLocalPosition:[n.x,n.y,n.z]}}function OM(e,t,r){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let n=mn(t,e.anchorNodeName);return n?(n.updateWorldMatrix(!0,!1),r.set(...e.anchorLocalPosition).applyMatrix4(n.matrixWorld),!0):!1}function IM({annotation:e,enabled:t,controlsRef:r,offsetRef:n}){let i=Kf(h=>h.scene),o=ue(null),a=ue(!1),s=Mt(()=>new It,[]),c=Mt(()=>new It,[]),l=Mt(()=>new It,[]),p=e?.anchorNodeName,d=e?.anchorLocalPosition;return Te(()=>{o.current=null,a.current=!1},[p,e?.id]),Yf(()=>{let h=r.current,m=n.current;if(!t||!h||!m||!p||!d){a.current=!1;return}let f=o.current;if((!f||!f.parent)&&(f=mn(i,p),o.current=f),!f){a.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(f.matrixWorld),!(a.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),a.current=!0,l.copy(s).add(m),h.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function BM(e){let t={total:0,missing:0};return e.traverse(r=>{let n=r;!n.isMesh||!n.geometry||(t.total+=1,n.geometry.getAttribute("uv")||(t.missing+=1))}),t}var zM=.2,qf=Object.freeze({});function NM({enabled:e,speed:t,controlsRef:r}){let n=Kf(i=>i.invalidate);return Yf((i,o)=>{!e||!r.current||(r.current.rotate(o*zM*t,0,!1),n())}),null}function jM(e,t,r){let n=t?.camera;if(!(n instanceof Qf))return null;let o=(e instanceof Ci?e:new Ci().setFromObject(e)).getSize(new It).length();return!Number.isFinite(o)||o<=0?null:(n.near=o/100,n.far=o*100,n.updateProjectionMatrix(),t&&r===void 0&&(t.maxDistance=o*10),o)}function UM(e,t){let r=e.camera;if(!(r instanceof Qf)||!(t>0))return;let n=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(n-r.near)<=r.near*.01||(r.near=n,r.updateProjectionMatrix())}async function $f(e,t,r=.6){let n=e.smoothTime;e.smoothTime=r;try{return await t()}finally{e.smoothTime=n}}function FM(e){return B(VM,{...Qd(e)})}function VM({modelUrl:e,tilesetUrl:t,tilesErrorTarget:r=8,tilesCacheSize:n=800,onObjectCatalog:i,modelFormat:o,licenseKey:a,licenseValidationUrl:s,objectBindings:c="auto",selectedObject:l,panelHoveredObject:p,onObjectBindingsChange:d,onObjectSelect:h,onObjectHover:m,onObjectDoubleClick:f,onObjectContextMenu:b,onObjectEditLeaseChange:P,onSceneLoaded:C,onModelLoaded:k,onLoadError:y,onProgress:j,onCameraControllerChange:L,cameraControllerType:w,onAction:I,onHiddenObjectsChange:U,onCameraChange:_,onViewerReady:S,onTextureUpload:A,onAnimationsReady:G,onAnnotationsChange:v,activeAnnotation:z,onActiveAnnotationChange:M,camera:O,cameraLimits:N,backgroundColor:$,shadows:Z=!0,showObjectBindingDataPanel:te=!0,customObjectBindingDataPanel:ie,customSceneObjectsPanel:Se,showSceneObjectsPanel:Ue=!0,showDownloadButton:rt=!0,downloadFilename:gt="model",showResetButton:Fe=!0,showLoadingOverlay:ze=!0,showMouseController:nt=!1,mouseControllerPosition:dt="center-bottom",mouseControllerOpacity:bt=1,moveSensitivity:pt=.08,zoomSensitivity:At=1,sceneConfig:Ge,onSceneConfigChange:q,disableZoom:Vt=!1,zoomOnSelected:ht=!0,highlightOnHover:_e=!0,enableCameraControls:Ye=!0,onAutoFit:He,refitOnResize:Bt=!0,renderMode:Gt="demand",maxDpr:Pe=2,preserveDrawingBuffer:se=!1,performanceProfile:de="auto",dracoDecoderPath:Ke,ktx2TranscoderPath:Ae,meshopt:Qe=!0,showMeasureTools:V=!1,showUvCheckerButton:re=!1,showExplodeControls:oe=!1,cinematic:we,measurementUnit:Oe="m",enableXR:Ce=!1,usdzUrl:Re,arScaleMode:ee="normalized",mobileHandoffUrl:xe,showAnnotationNavigation:Me=!0,showAnnotationOnHover:ot=!1,moveModeEnabled:zt=!1,objectTransformSpace:St="world",enableKeyboardNavigation:mt=!1,showViewGizmo:sn=!1,overlay:Nt,unsafe_sceneChildren:jr,autoRotate:Uo,autoRotateSpeed:ft,onTexturePositioningChange:E,endTexturePositioningRef:T,texturePositioning:F}){let H=c==="auto",W=H?qf:c,{isInsideEditor:J,activeTab:Y,activeSubTab:Ie}=Ma(),ke=J&&Y==="scene"&&Ie==="Lighting",Ve=Mp(a,s),[De,We]=ce({}),X=Mt(()=>El(Ge??Od,De),[Ge,De]),Ne=ue(X);Ne.current=X;let it=Q(u=>{if(q){q(El(Ne.current,u));return}We(g=>{let x={...g};for(let[R,D]of Object.entries(u))x[R]={...g[R],...D};return x})},[q]),[yt,Zt]=ce(null),[Rt,Ct]=ce(null),Cr=X.model.renderer==="uv-checker",kn=re?Rt??Cr:Cr,Ti=Mt(()=>{let u=kn?"uv-checker":Cr?"pbr":X.model.renderer;return u===X.model.renderer?X:{...X,model:{...X.model,renderer:u}}},[Cr,X,kn]);Te(()=>{Ct(null)},[e,X.model.renderer,re,t]);let Jf=Mt(()=>{if($)return $;let u=X.background;return u.enabled&&u.type==="color"?u.color:"#1c1c1d"},[$,X]),bu=Mt(()=>({dracoDecoderPath:Ke,ktx2TranscoderPath:Ae,meshopt:Qe}),[Ke,Ae,Qe]),Zf=Mt(()=>Xp(de),[de]),Ee=ue(null),[eg,tg]=ce("orbit"),[rg,yu]=ce(!1),Ur=w!==void 0?w:eg,_i=Q(u=>{yu(!1),u!==Ur&&(tg(u),L?.(u))},[Ur,L]),[Fo,vu]=ce(!1),[pe,Pi]=ce(null),Ei=!!(F||E||T),xu=ue(E);xu.current=E,Te(()=>{xu.current?.(pe)},[pe]),Te(()=>{if(T)return T.current=()=>Pi(null),()=>{T.current=null}},[]),Te(()=>{Ee.current&&(Ee.current.dollySpeed=Math.max(At,0))},[At]),Te(()=>{Ee.current&&(Ee.current.enabled=Ye&&!Fo&&!pe)},[Ye,Fo,pe]);let Is=ue(null),wu=ue(new Map),Mu=ue(null),Su=ue(null),er=ue(null),Dn=ue({});Te(()=>()=>{for(let u of Object.values(Dn.current))URL.revokeObjectURL(u)},[]);let cr=ue({}),[,ng]=ce(0),Cu=Q(()=>{ng(u=>u+1)},[]),Vo=ue({}),Tu=ue(null),ur=ue(null),[On,ig]=ce(null),og=Q(u=>{ur.current=u,ig(u)},[]),Go=ue(new Set),ln=ue(null);Te(()=>{let u=On;if(!u||!mt||!Ye||zt)return;let g=new Set(["w","a","s","d"," ","c"]),x=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),R=0,D=ne=>ne.code==="Space"?" ":ne.key.toLowerCase(),K=()=>{Go.current.clear(),R=0,ln.current!==null&&(cancelAnimationFrame(ln.current),ln.current=null)},le=ne=>{let be=Ee.current,ye=Go.current;if(!be||ye.size===0){ln.current=null,R=0;return}let qe=R?Math.min((ne-R)/1e3,.05):1/60;R=ne;let Je=Math.max(be.distance*.75,.01)*qe;ye.has("w")&&be.forward(Je,!1),ye.has("s")&&be.forward(-Je,!1),ye.has("a")&&be.truck(-Je,0,!1),ye.has("d")&&be.truck(Je,0,!1),ye.has(" ")&&be.truck(0,Je,!1),ye.has("c")&&be.truck(0,-Je,!1),ln.current=requestAnimationFrame(le)},ge=ne=>{if(ne.target!==u){K();return}if(x.has(ne.key)){let ye=Ee.current;if(!ye)return;ne.preventDefault();let qe=Math.PI/90,Je=Math.max(ye.distance*.05,.01);ne.key==="ArrowUp"?ne.shiftKey?ye.forward(Je,!0):ye.rotate(0,-qe,!0):ne.key==="ArrowDown"?ne.shiftKey?ye.forward(-Je,!0):ye.rotate(0,qe,!0):ne.key==="ArrowLeft"?ye.rotate(-qe,0,!0):ye.rotate(qe,0,!0);return}let be=D(ne);g.has(be)&&(ne.preventDefault(),Go.current.add(be),ln.current===null&&(ln.current=requestAnimationFrame(le)))},me=ne=>{Go.current.delete(D(ne))};return u.addEventListener("keydown",ge),u.addEventListener("keyup",me),u.addEventListener("blur",K),()=>{u.removeEventListener("keydown",ge),u.removeEventListener("keyup",me),u.removeEventListener("blur",K),K()}},[On,Ye,mt,zt]);let Bs=ue(null),[ag,_u]=ce(W),[In,Ho]=ce({}),[Pu,zs]=ce(null),[Ns,Eu]=ce(null),[sg,lg]=ce(null),[cg,ug]=ce(null),[tr,Au]=ce(null),[dg,Ru]=ce({}),Tt=ue(null),Wo=ue(null),js=ue(0),Lu=ue(null),[pg,hg]=ce(0),Fr=ue(!1),Ai=ue(!1),Us=ue(!!O);Us.current=!!O;let Tr=ue(null),[ku,Ri]=ce(!!e),[Fs,Li]=ce(!e||!!He||!!O),[cn,Du]=ce(!1),[Ou,Vs]=ce(!1),[mg,Gs]=ce(null),[Iu,ki]=ce(!1),[Bu,fg]=ce(0),Hs=ue(""),zu=ue(""),[Nu,ju]=ce(!1),[Uu,gg]=ce(null),[bg,Fu]=ce(!1),[Di,Vu]=ce({total:0,missing:0}),[yg,Gu]=ce("Loading model..."),[vg,Ws]=ce(null),Ht=ue({}),Oi=Q(()=>{let u=Ee.current;if(!u||Tr.current)return;let g=u.getPosition(new It),x=u.getTarget(new It);Tr.current={position:[g.x,g.y,g.z],target:[x.x,x.y,x.z]}},[]),[Ii,Xo]=ce(!1),[qo,Hu]=ce(0),[Xs,Wu]=ce(!1);Te(()=>{Hu(0),Wu(!1)},[e,t]);let Bi=Mt(()=>{let u=X.cinematic,g=u?.enabled?{waypoints:u.waypoints,duration:u.duration,loop:u.loop,autoPlay:u.autoPlay}:null;return we===void 0?g&&(g.waypoints?.length??0)>=2?g:null:we===!1?null:we===!0?g??{}:{...g??{},...we}},[we,X]),[un,dr]=ce(!1),[xg,Bn]=ce(!1),qs=ue(!1);Te(()=>{dr(!1),Bn(!1),qs.current=!1},[e,t]),Te(()=>{!Bi?.autoPlay||qs.current||cn&&Fs&&!ku&&(qs.current=!0,dr(!0),Bn(!1))},[Bi,cn,Fs,ku]);let{xrStore:dn,presenterRef:wg,arSupported:$s,vrSupported:Xu,quickLookSupported:qu,resolvedMobileHandoffUrl:$o,isMobileHandoffOpen:$u,arOverlay:Mg,openMobileHandoff:Sg,closeMobileHandoff:Yu,openQuickLook:Cg,handleARStateChange:Tg}=Yp({enableXR:Ce,usdzUrl:Re,mobileHandoffUrl:xe}),[pr,Ku]=ce(()=>Ge?.annotations??[]);Te(()=>{if(pr.length>0){let u=pr.reduce((g,x)=>Math.max(g,x.id),0);Qo.current=u}else Qo.current=0},[pr]);let[Lt,Yo]=ce(null),[Vr,Ko]=ce({title:"",description:""}),Qo=ue(0),[_g,Qu]=ce(null),[Wt,zn]=ce(-1),[Ju,Jo]=ce(!1),Nn=ue(null),Xe=Mt(()=>[...pr].sort((u,g)=>u.id-g.id),[pr]),Zo=Mt(()=>Wt<0||Wt>=Xe.length?null:Xe[Wt],[Wt,Xe]),hr=Q(u=>{if(z!==void 0){M?.(u);return}Qu(u?{annotation:u}:null)},[z,M]),jn=Q(u=>{let g=Ee.current,x=Tt.current;if(!g)return;let R=new It,D=wu.current.get(u.id);D?R.copy(D):x&&OM(u,x,R)||R.set(u.worldPosition[0],u.worldPosition[1],u.worldPosition[2]),Is.current=null;let K=g.smoothTime;g.smoothTime=.6;let le=u.worldNormal;if(x){let ge=new Ci().setFromObject(x),me=new It;ge.getCenter(me);let ne=new It;ge.getSize(ne);let be=ne.length()*.2,ye;le?ye=new It(le[0],le[1],le[2]):ye=R.clone().sub(me),ye.lengthSq()<1e-6&&ye.set(0,0,1),ye.normalize();let qe=Math.max(be*.6,.3),Je=R.clone().add(ye.multiplyScalar(qe));g.setPosition(Je.x,Je.y,Je.z,!0),u.anchorNodeName&&u.anchorLocalPosition&&(Is.current=Je.clone().sub(R))}g.setTarget(R.x,R.y,R.z,!0),Nn.current&&clearTimeout(Nn.current),Nn.current=setTimeout(()=>{g.smoothTime=K,Nn.current=null},800),hr(u)},[hr]),Pg=Q(()=>{Xe.length!==0&&(Xo(!0),zn(0),jn(Xe[0]))},[Xe,jn]),Eg=Q(()=>{if(Xe.length===0||Wt<0)return;Jo(!0);let u=(Wt-1+Xe.length)%Xe.length;zn(u),jn(Xe[u]),setTimeout(()=>Jo(!1),500)},[Wt,Xe,jn]),Ag=Q(()=>{if(Xe.length===0||Wt<0)return;if(Wt===Xe.length-1){if(Xo(!1),zn(-1),hr(null),Ee.current&&Tr.current){let g=Tr.current;Ee.current.setLookAt(g.position[0],g.position[1],g.position[2],g.target[0],g.target[1],g.target[2],!0)}return}Jo(!0);let u=Wt+1;zn(u),jn(Xe[u]),setTimeout(()=>Jo(!1),500)},[Wt,Xe,jn,hr]),Rg=Q(()=>{if(Xo(!1),zn(-1),hr(null),Ee.current&&Tr.current){let u=Tr.current;Ee.current.setLookAt(u.position[0],u.position[1],u.position[2],u.target[0],u.target[1],u.target[2],!0)}},[hr]);Te(()=>{zn(-1),Xo(!1)},[Xe.length]),Te(()=>()=>{Nn.current&&clearTimeout(Nn.current)},[]),Te(()=>{Zo&&Ii&&hr(Zo)},[Zo,hr,Ii]),Te(()=>{if(Ge?.annotations===void 0)return;let u=Ge.annotations.map(g=>({...g,localPosition:g.localPosition??g.worldPosition}));Ku(u)},[Ge?.annotations]);let zi=Q(()=>{if(z!==void 0){M?.(null);return}Qu(null)},[z,M]),Ni=z!==void 0?z:_g?.annotation??null,ji=Mt(()=>Ni?pr.find(g=>g.id===Ni.id)??null:null,[Ni,pr]);Te(()=>{Ni&&!ji&&zi()},[Ni,ji,zi]);let Ui=!H&&d!==void 0,fe=Ui?W:ag;Ht.current=fe,Te(()=>{if(!pe)return;let u=fe[pe.objectKey]?.style?.material?.[pe.textureKey]?.path;(!Ei||!u)&&Pi(null)},[fe,Ei,pe]);let Ys=ue({}),[ea,Lg]=ce({});Te(()=>{let u={...ea},g=!1,x=new Set;for(let[R,D]of Object.entries(fe)){x.add(R);let K=D.style?.material,le=Ys.current[R]??{},ge={};for(let ne of Hr){let be=K?.[ne]?.path;be&&(ge[ne]=be,be!==le[ne]&&(u[R]!==ne&&(g=!0),u[R]=ne))}let me=u[R];if(me&&!ge[me]){let ne=Hr.find(be=>!!ge[be]);ne?u[R]=ne:delete u[R],g=!0}Ys.current[R]=ge}for(let R of Object.keys(u))x.has(R)||(delete u[R],delete Ys.current[R],g=!0);g&&Lg(u)},[fe]);let kg=Mt(()=>Object.entries(fe).map(([u,g])=>JSON.stringify([u,g.modelObjectId,g.transform??null])).sort().join(""),[fe]),{measureMode:Fi,measureModeRef:Dg,measurePoints:Zu,showDimensions:Ks,measureBox:ed,modelBounds:Og,refreshBounds:td,clearMeasurements:Ig,toggleMeasureMode:Bg,toggleDimensions:zg,handleMeasurePointerDown:Ng,handleMeasureClick:jg}=Hp({canvasAreaRef:ur,controlsRef:Ee,sceneRef:Tt,modelUrl:e,modelRotation:X.model.rotation,bindingTransformSignature:kg,modelLoaded:cn}),{isDownloading:Qs,downloadMenuOpen:Ug,uvExportError:rd,toggleDownloadMenu:Fg,handleDownloadMesh:Vg,handleDownloadScreenshot:Gg,handleDownloadUvLayout:Hg}=Vp({sceneRef:Tt,materialRefs:Vo,rendererCaptureRef:er,objectBindings:fe,downloadFilename:gt}),nd=Mt(()=>Object.fromEntries(Object.entries(fe).filter(([,u])=>u.visible===!1).map(([u])=>[u,!0])),[fe]),_r=Mt(()=>{let u=new WeakMap,g=new Map,x=new Map;for(let[R,D]of Object.entries(fe))u.set(D,R),g.has(D.id)||g.set(D.id,R),x.has(D.modelObjectId)||x.set(D.modelObjectId,R);return{byReference:u,byId:g,byModelObjectId:x}},[fe]),mr=Q(u=>u?_r.byReference.get(u)??_r.byModelObjectId.get(u.modelObjectId)??_r.byId.get(u.id)??null:null,[_r]),Js=l!==void 0,Vi=Js?l??null:cg,jt=mr(Vi),Zs=jt?cr.current[jt]??null:null,Wg=jt?ea[jt]:void 0,id=mr(_e?p??Ns??sg:null),Xg=id?cr.current[id]??null:null,od=Q(u=>{lg(u),m?.(u)},[m]),ad=te&&Vi!==null&&jt!==null,Gi=(jt?fe[jt]:null)??Vi,el=Gi&&(Gi.modelObjectId||Gi.id)||null,Un=el?dg[el]??null:null;Te(()=>{Ui||_u(W)},[Ui,W]),Te(()=>{U?.(nd)},[nd,U]);let Fn=Q(u=>{if(Ur==="pointerLock"){_i("orbit");return}Js||ug(u),h?.(u)},[Ur,_i,Js,h]),fr=Q(u=>{Ui||_u(u),d?.(u)},[Ui,d]),sd=ue(null),ta=Q(u=>{if(!H)return;let g=`${e}
25
- ${t??""}`,x=sd.current===g?Ht.current:qf;sd.current=g;let R=qd(u);for(let D of Object.keys(R))x[D]&&(R[D]=x[D]);fr(R)},[H,e,t,fr]),ra=ue({}),Vn=Q(u=>{let g=kp(cr.current[u]),x=Ht.current[u]?.style?.material,R=x?.emissive??g.color,D=x?.emissiveIntensity??g.intensity;return{color:R,intensity:D,on:R!=="#000000"&&D>0}},[]),Hi=Q((u,g)=>{let x=Ht.current,R=x[u];R&&fr({...x,[u]:{...R,style:{...R.style,material:{...R.style?.material,...g}}}})},[fr]),tl=u=>u==="#000000"?"#ffffff":u,qg=Q(u=>{let g=jt;if(!g||!u)return;let x=Ht.current[g];x&&fr({...Ht.current,[g]:{...x,transform:{...x.transform,...u}}})},[fr,jt]),gr=Q((u,g)=>fe[u]?u:g?mr(g):_r.byId.get(u)??_r.byModelObjectId.get(u)??null,[fe,mr,_r]),_t=Q((u,g)=>{let x=gr(u),R=x?fe[x]:void 0;!x||!R||fr({...fe,[x]:{...R,style:g(R.style)}})},[gr,fe,fr]),Xt=Q(()=>{if(tr){let u=In[tr.objectId]?.hex;u!==void 0&&(_t(tr.objectId,g=>({...g,material:{...g?.material,baseColor:u}})),Ho(g=>({...g,[tr.objectId]:{}})))}Au(null)},[tr,In,_t]),ld=Q(()=>{Fn(null),zs(null),Xt()},[Fn,Xt]),rl=Q((u,g,x,R,D)=>{let K=Tu.current,le=ur.current,ge=Ee.current?.camera;if(!K)return{objectId:u,x:24,y:24};let me=K.getBoundingClientRect(),ne=12,be=me.width-g-ne,ye=me.height-x-ne,qe=Math.max(ne,(me.width-g)/2),Je=Math.max(ne,(me.height-x)/2),Xn=gr(u,R),$i=Xn?cr.current[Xn]:null,br=(qn,hn)=>hn<=ne?ne:Math.min(Math.max(qn,ne),hn);if(le&&ge&&$i){let qn=le.getBoundingClientRect(),hn=new It;new Ci().setFromObject($i).getCenter(hn),hn.project(ge);let yb=(hn.x+1)/2*qn.width+(qn.left-me.left),vb=(1-hn.y)/2*qn.height+(qn.top-me.top);return{objectId:u,x:br(yb+24,be),y:br(vb-x/2,ye)}}let ul=typeof D?.screenX=="number"?D.screenX-me.left:qe,dl=typeof D?.screenY=="number"?D.screenY-me.top:Je;return{objectId:u,x:br(ul,be),y:br(dl,ye)}},[gr]),na=Q(u=>{let{objectId:g,action:x,binding:R}=u;switch(zs(u),x.id){case"toggle-visibility":{let D=g;R?.modelObjectId&&(D=_r.byModelObjectId.get(R.modelObjectId)??D);let K=fe[D],le=K?.visible===!1;K&&fr({...fe,[D]:{...K,visible:le}});break}case"change-color":Xt(),Ru(D=>{if(!(g in D))return D;let K={...D};return delete K[g],K}),Ho(D=>{let K=gr(g,R)??g,le=D[g]?.hex,ge=fe[K]?.style?.material?.baseColor;return{...D,[g]:{...D[g],hex:le??ge??"#ffffff"}}}),Au(rl(g,225,250,R,u));break;case"change-material":Xt(),Ru(D=>{if(g in D){let K={...D};return delete K[g],K}return{...D,[g]:rl(g,300,320,R,u)}});break;case"toggle-light":case"change-light-color":case"set-brightness":{let D=gr(g,R);if(!D)break;let K=Lp(Ne.current,fe,D);if(x.id==="toggle-light"){if(K.length>0){let ne=!K.some(be=>be.visible);it(Object.fromEntries(K.map(be=>[be.id,{visible:ne}])));break}let me=Vn(D);me.on?(ra.current[D]=me.intensity,Hi(D,{emissiveIntensity:0})):Hi(D,{emissive:tl(me.color),emissiveIntensity:ra.current[D]??1});break}let le=x.id,ge=K.length>0?null:Vn(D);Zt(me=>me?.objectId===g&&me.kind===le?null:{objectId:g,kind:le,target:ge?{type:"glow",objectKey:D,baseIntensity:ge.on?ge.intensity:ra.current[D]??1}:{type:"lights",lightIds:K.map(ne=>ne.id),baseIntensity:Object.fromEntries(K.map(ne=>[ne.id,ne.intensity]))},percent:ge&&!ge.on?0:100});break}default:break}I?.(u)},[fr,Hi,it,Vn,fe,rl,I,Xt,gr,_r]);Te(()=>{if(tr)return window.addEventListener("pointerdown",Xt),()=>window.removeEventListener("pointerdown",Xt)},[tr,Xt]),Te(()=>{if(!ji)return;let u=g=>{if(Bs.current&&!Bs.current.contains(g.target)){if(g.target.closest?.(".ri-annotationMarker"))return;zi()}};return document.addEventListener("mousedown",u),document.addEventListener("touchstart",u),()=>{document.removeEventListener("mousedown",u),document.removeEventListener("touchstart",u)}},[ji,zi]),Te(()=>{if(!Lt)return;let u=g=>{let x=g.target;if(x.closest?.(".ri-annotationPopup")||x.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let R=ur.current;!R||!R.contains(x)||(Yo(null),Ko({title:"",description:""}))};return document.addEventListener("mousedown",u,!0),document.addEventListener("touchstart",u,!0),()=>{document.removeEventListener("mousedown",u,!0),document.removeEventListener("touchstart",u,!0)}},[Lt]);let cd=Q((u,g)=>{let x=Dn.current[u];x&&URL.revokeObjectURL(x),g.startsWith("blob:")?Dn.current[u]=g:delete Dn.current[u],_t(u,R=>({...R,material:{...R?.material,texture:{path:g}}}))},[_t]),$g=u=>{let g=u.target.files?.[0],x=Su.current;if(!g||!x)return;let R=gr(x);R&&(A?A(g,R).then(D=>cd(R,D),D=>console.error("onTextureUpload failed:",D)):cd(R,URL.createObjectURL(g)),u.target.value="")},ud=u=>{Su.current=u,Mu.current?.click()},dd=u=>{let g=gr(u);if(!g)return;_t(g,R=>R?.material?.texture?{...R,material:{...R.material,texture:void 0}}:R);let x=Dn.current[g];x&&(URL.revokeObjectURL(x),delete Dn.current[g])},Gn=!!F,rr=typeof F=="object"?F:void 0,Yg=Q((u,g,x)=>{if(rr?.onOffsetChange){rr.onOffsetChange(u,g,x);return}_t(u,R=>{let D=R?.material?.texture;if(!D?.path)return R;let K=D.offset??[0,0],le=[K[0],K[1]];return le[g]=x,{...R,material:{...R?.material,texture:{...D,offset:le}}}})},[_t,rr]),Kg=Q((u,g)=>{if(rr?.onRotationChange){rr.onRotationChange(u,g);return}_t(u,x=>{let R=x?.material?.texture;if(!R?.path)return x;let D=(g%360+360)%360;return{...x,material:{...x?.material,texture:{...R,rotation:D*Math.PI/180}}}})},[_t,rr]),Qg=Q(()=>{Pi(null),rr?.onEndPositioning?.()},[rr]),nl=ue(S);nl.current=S;let nr=Q(()=>{let u=Ee.current;!u||!nl.current||nl.current({objectBindings:Ht.current,homeCameraState:Tr.current,captureImage:g=>Ca(er.current,g),invalidate:()=>er.current?.invalidate(),raw:{controls:u,scene:Tt.current,nodes:cr.current}})},[]),Hn=Q(async(u=!1)=>{let g=Ee.current,x=Wo.current??Tt.current;if(!g||!x)return!1;try{if(u){let R=(x instanceof Ci?x:new Ci().setFromObject(x)).getBoundingSphere(new mM),D=R.center.clone(),le=g.getPosition(new It).clone().sub(g.getTarget(new It));le.lengthSq()<1e-6&&le.set(0,0,1),le.normalize();let ge=Math.max(R.radius*10,20),me=D.clone().add(le.multiplyScalar(ge));await g.setLookAt(me.x,me.y,me.z,D.x,D.y,D.z,!1)}return Li(!0),await $f(g,()=>g.fitToBox(x,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(R=>{let D=performance.now(),K=()=>{g.active===!1||performance.now()-D>8e3?(g.dispatchEvent({type:"update"}),er.current?.invalidate(),R()):(er.current?.invalidate(),setTimeout(K,100))};setTimeout(K,100)}),Fr.current=!0,Oi(),nr(),!0}catch(R){return console.error("Fit scene error:",R),!1}},[Oi,nr]);Te(()=>{if(Fr.current=!1,Ai.current=!1,Tr.current=null,Tt.current=null,Wo.current=null,Du(!1),Vs(!1),Gs(null),ki(!1),Hs.current="",Vu({total:0,missing:0}),Gu("Loading model..."),Ws(null),!e){Ri(!1),Li(!0);return}Ri(!0),Li(!!He||Us.current);let u=!1,g=null,x=D=>{g=setTimeout(R,D)},R=()=>{if(u||Fr.current||Ai.current)return;let D=Wo.current??Tt.current;if(!Ee.current||!D){x(100);return}if(js.current=jM(D,Ee.current,N?.maxDistance)??js.current,Jd(Ee.current)){Fr.current=!0,Oi(),nr(),Ri(!1),Li(!0),er.current?.invalidate();return}Ai.current=!0,(He?He():Us.current?Promise.resolve(!0):Hn(!0)).then(le=>{Fr.current=le!==!1,Fr.current?(Oi(),nr(),Ri(!1)):u||x(100)}).catch(()=>{Fr.current=!1,u||x(100)}).finally(()=>{Ai.current=!1})};return x(50),()=>{u=!0,g&&clearTimeout(g)}},[Oi,N?.maxDistance,Hn,e,nr,He,t]),Te(()=>{if(!Bt)return;let u=On;if(!u)return;let g=null,x=new ResizeObserver(()=>{!Fr.current||Ai.current||(g&&clearTimeout(g),g=setTimeout(()=>{Hn()},150))});return x.observe(u),()=>{x.disconnect(),g&&clearTimeout(g)}},[On,Hn,Bt]);let pd=Q(u=>{if(Dg.current||(dr(!1),Xt(),zs(null),Fn(u),Vt||!ht))return;let g=Ee.current,x=mr(u),R=x?cr.current[x]:null;g&&u.cameraState?.position&&u.cameraState?.target?(g.setPosition(u.cameraState.position[0],u.cameraState.position[1],u.cameraState.position[2],!0),g.setTarget(u.cameraState.target[0],u.cameraState.target[1],u.cameraState.target[2],!0)):g&&R&&g.fitToBox(R,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Fn,Xt,mr,Vt,ht]),hd=Q(u=>{if(!Ei)return!1;let g=mr(u);if(!g)return!1;let x=ea[g];return x?(Wn.current=!1,pn.current=null,Pi({objectKey:g,textureKey:x}),!0):!1},[Ei,mr,ea]),il=ue(!1),md=Q((u,g)=>f?.({binding:u,...g})===!0?(il.current=!0,!0):hd(u),[f,hd]),fd=Mt(()=>b?(u,g)=>b({binding:u,...g}):void 0,[b]),gd=Q(u=>{if(Fn(u),Vt)return;let g=Ee.current,x=mr(u),R=x?cr.current[x]:null;if(!g||!R)return;let D=u.cameraState;D?.position&&D?.target?(g.setPosition(D.position[0],D.position[1],D.position[2],!0),g.setTarget(D.target[0],D.target[1],D.target[2],!0)):g.fitToBox(R,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Fn,mr,Vt]);Te(()=>{nr()},[nr,fe]);let bd=Q((u,g)=>{UM(g,js.current),_?.(Pr(u,g)),nr()},[nr,_]),Jg=Q(u=>{Lu.current=new Set(u.map(g=>g.name)),hg(g=>g+1),ta(u.map(g=>g.name)),i?.(u)},[ta,i]),Zg=Q(u=>{Wo.current=u,er.current?.invalidate()},[]),yd=Q(u=>{Tt.current=u,td(u),Vu(BM(u));let g=Ld(u);gg(g>hl?g:null),Fu(!1),Ws(null),g>hl&&Gu(`Preparing large model (${Math.round(g/1e6)}M triangles) \u2014 the first display can take a while on this device...`),Du(!0),Vs(!1),Gs(null),ju(!1),t||(i&&i(af(u)),ta($d(u))),C?.(u),k?.(Wd(u)),nr()},[ta,nr,k,i,C,td,t]),vd=Q(u=>{Ri(!1),Li(!0),Vs(!0),Gs(u),y?.(u)},[y]),eb=Q(u=>{u.lengthComputable&&u.total>0&&Ws(u.loaded/u.total*100),j?.(u)},[j]),xd=Q((u,g,x)=>{if(!q)return;let R={...X,lighting:{...X.lighting,lights:X.lighting.lights.map(D=>D.id===u?{...D,position:g,...x?{rotation:x}:{}}:D)}};q(R)},[X,q]);Te(()=>{let u=Tt.current;if(!cn||!u){ki(!1);return}let g=Object.entries(fe);if(g.length===0){ki(!1);return}let x=t?Lu.current:new Set(Object.keys(Yn(u).nodesById));if(!x||x.size===0){ki(!1);return}let R=g.map(([K,le])=>le.modelObjectId??K).filter(K=>!x.has(K));ki(R.length>0),fg(R.length);let D=R.join(`
26
- `);if(R.length>0&&D!==Hs.current){let K=R.slice(0,10).map(ge=>`"${ge}"`).join(", "),le=R.length>10?` and ${R.length-10} more`:"";console.warn(`[react-immersive] ${R.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${K}${le}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}Hs.current=D},[cn,fe,pg,t]),Te(()=>{if(I||J)return;let u=[];for(let[x,R]of Object.entries(fe))for(let D of R.actions??[])ml.includes(D.id)||u.push(`"${D.id}" on "${R.label??x}"`);let g=u.join(`
27
- `);if(u.length>0&&g!==zu.current){let x=u.slice(0,10).join(", "),R=u.length>10?` and ${u.length-10} more`:"";console.warn(`[react-immersive] ${u.length} action button(s) do nothing because ModelViewer has no onAction handler: ${x}${R}. ModelViewer itself handles ${ml.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}zu.current=g},[fe,J,I]);let ol=Q(async()=>{if(He){await He();return}let u=Ee.current;if(!u)return;let g=Tr.current;try{g?await $f(u,()=>u.setLookAt(g.position[0],g.position[1],g.position[2],g.target[0],g.target[1],g.target[2],!0)):await Hn()}catch(x){console.error("Reset camera error:",x)}},[He,Hn]),WM=Q(()=>{Bn(!1),dr(!0)},[]),XM=Q(()=>{dr(!1)},[]),tb=Q(()=>{dr(!1),Bn(!0),setTimeout(()=>{ol()},100)},[ol]),rb=Q((u,g)=>{bd(u,g)},[bd]),wd=1,nb=4,ib=.0015,ob=.1,ab=8,pn=ue(null),Wn=ue(!1),al=ue([0,0]),ia=ue([0,0]),oa=ue(1),qt=ue(null),aa=Q((u,g)=>{let x=pe;if(!x)return;let R=Ht.current[x.objectKey]?.style?.material?.[x.textureKey],D=R?.path;if(!D)return;let K=R?.rotation??0,le=ir(x.textureKey),ge=to(D,le),me=Vo.current[x.objectKey],ne=Array.isArray(me)?me:me?[me]:[],be=la[x.textureKey];for(let ye of ne){let qe=ye;be in qe&&(qe[be]=ya(qe.userData,x.textureKey,ge,D,u,g,K))}er.current?.invalidate()},[pe]),sb=Q(u=>{if(!pe)return;u.currentTarget.setPointerCapture?.(u.pointerId),pn.current={x:u.clientX,y:u.clientY},Wn.current=!1;let g=Ht.current[pe.objectKey]?.style?.material?.[pe.textureKey];if(al.current=g?.offset??[0,0],ia.current=al.current,oa.current=g?.scale??1,qt.current===null){let x=()=>{er.current?.invalidate(),qt.current=requestAnimationFrame(x)};qt.current=requestAnimationFrame(x)}},[pe]),sl=Q(u=>{if(!pe||!pn.current)return;let g=ur.current,x=g?.clientWidth||1,R=g?.clientHeight||1,D=u.clientX-pn.current.x,K=u.clientY-pn.current.y;if(!Wn.current&&Math.hypot(D,K)<nb)return;Wn.current=!0;let le=-(D/x)*wd,ge=K/R*wd,[me,ne]=al.current,be=[me+le,ne+ge];ia.current=be,aa(be,oa.current),_t(pe.objectKey,ye=>({...ye,material:{...ye?.material,[pe.textureKey]:{...ye?.material?.[pe.textureKey],path:Ht.current[pe.objectKey]?.style?.material?.[pe.textureKey]?.path,offset:be}}}))},[pe,aa,_t]),Wi=Q(u=>{if(!pe)return;u.target?.releasePointerCapture?.(u.pointerId),qt.current!==null&&(cancelAnimationFrame(qt.current),qt.current=null);let g=Wn.current,x=pe;if(g){_t(x.objectKey,R=>({...R,material:{...R?.material,[x.textureKey]:{...R?.material?.[x.textureKey],path:Ht.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:ia.current}}})),pn.current=null,Wn.current=!1;return}pn.current=null,Pi(null)},[pe,_t]);Te(()=>{if(!pe)return qt.current!==null&&(cancelAnimationFrame(qt.current),qt.current=null),()=>{qt.current!==null&&(cancelAnimationFrame(qt.current),qt.current=null)}},[pe]),Te(()=>{let u=On;if(!(!u||!pe))return u.addEventListener("pointermove",sl),u.addEventListener("pointerup",Wi),u.addEventListener("pointercancel",Wi),()=>{u.removeEventListener("pointermove",sl),u.removeEventListener("pointerup",Wi),u.removeEventListener("pointercancel",Wi)}},[On,pe,sl,Wi]);let lb=Q(u=>{if(!pe)return;u.preventDefault();let g=pe,x=Math.exp(-u.deltaY*ib),R=Math.min(ab,Math.max(ob,oa.current*x));oa.current=R,aa(ia.current,R),_t(g.objectKey,D=>({...D,material:{...D?.material,[g.textureKey]:{...D?.material?.[g.textureKey],path:Ht.current[g.objectKey]?.style?.material?.[g.textureKey]?.path,scale:R}}}))},[pe,aa,_t]),cb=Q(u=>{if(il.current){il.current=!1;return}let g=Y==="scene"&&Ie==="Annotations";if(u.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let R=ur.current,D=Ee.current,K=D?.camera,le=Tt.current;if(!R||!D||!K||!le||!g&&!D.enabled)return;let ge=R.getBoundingClientRect(),me=(u.clientX-ge.left)/ge.width*2-1,ne=-((u.clientY-ge.top)/ge.height)*2+1,be=new hM;be.setFromCamera(new fM(me,ne),K);let ye=be.intersectObject(le,!0);if(ye.length===0)return;if(!g){let{x:br,y:ul,z:dl}=ye[0].point;D.setOrbitPoint(br,ul,dl);return}let qe=ye[0],Je=qe.point,Xn=le.worldToLocal(qe.point.clone()),$i=[0,0,1];if(qe.face){let br=qe.face.normal.clone().transformDirection(qe.object.matrixWorld).normalize();$i=[br.x,br.y,br.z]}Yo({worldPosition:[Je.x,Je.y,Je.z],localPosition:[Xn.x,Xn.y,Xn.z],worldNormal:$i,anchor:DM(qe),screenX:u.clientX-ge.left,screenY:u.clientY-ge.top}),Ko({title:"",description:""})},[Y,Ie]),Md=Q(()=>{if(!Lt||!Vr.title.trim())return;Qo.current+=1;let g={id:Qo.current,worldPosition:Lt.worldPosition,localPosition:Lt.localPosition,worldNormal:Lt.worldNormal,anchorNodeName:Lt.anchor?.anchorNodeName,anchorLocalPosition:Lt.anchor?.anchorLocalPosition,title:Vr.title.trim(),description:Vr.description},x=[...pr,g];Ku(x),v?.(x),Yo(null)},[Lt,Vr,pr,v]),ll=Q(()=>Yo(null),[]),ub=Q(u=>{hr(u)},[hr]);if(Ve.status==="checking")return B("div",{className:"ri-viewer ri-viewer--license-checking",children:B(ma,{title:"Verifying License",message:"Checking your license key..."})});if(Ve.status==="invalid")return B("div",{className:"ri-viewer ri-viewer--license-invalid",children:B(ma,{tone:"error",title:"Invalid License",message:Ve.isLocalDomain?Ve.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Gr=Un?gr(Un.objectId):null,cl=Gr?fe[Gr]?.style?.material?.texture?.path:void 0,Sd=cl?lp(cl)??cl:void 0,Cd=Gn?rr?.offset??(Gr?fe[Gr]?.style?.material?.texture?.offset:void 0):void 0,Td=Gn?rr?.rotationDegrees??(Gr?((fe[Gr]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,_d=Gn?rr?.isPositioning??!!(Gr&&pe?.objectKey===Gr&&pe?.textureKey==="texture"):!1,Pd=Gn?Yg:void 0,Ed=Gn?Kg:void 0,Ad=Gn?Qg:void 0,db=ur.current?.offsetWidth??600,pb=ur.current?.offsetHeight??400,hb=350,mb=290,fb=Lt?Math.min(Lt.screenX+12,db-hb-8):0,gb=Lt?Math.min(Lt.screenY,pb-mb-8):0,bb=ze&&!!e&&!Ou&&!cn,Xi=Ce&&(dn&&($s||Xu)||qu||!!$o),qi=u=>16+u*42;return he("div",{className:"ri-viewer",style:{background:Jf},children:[he("div",{className:"ri-viewerLeft",ref:Tu,children:[ie?ie({isOpen:ad,selectedObject:Gi,currentAction:Pu,onClose:ld,onAction:na}):B(ou,{isOpen:ad,selectedObject:Gi,currentAction:Pu,onClose:ld,onAction:na,renderActionExtra:u=>{if(u==="change-color"&&tr)return B(eu,{inline:!0,colorPicker:tr,onClose:Xt,itemMaterials:In,setItemMaterials:Ho});if((u==="change-light-color"||u==="set-brightness")&&yt?.kind===u&&yt.objectId===el){let g=yt,x=g.target,R=x.type==="lights"?X.lighting.lights.find(D=>D.id===x.lightIds[0])?.color??"#ffffff":tl(Vn(x.objectKey).color);return B(Op,{kind:g.kind,color:R,brightness:g.percent,onColorChange:D=>{if(x.type==="lights"){it(Object.fromEntries(x.lightIds.map(le=>[le,{color:D}])));return}let K=Vn(x.objectKey);Hi(x.objectKey,{emissive:D,emissiveIntensity:K.intensity>0?K.intensity:ra.current[x.objectKey]??1})},onBrightnessChange:D=>{if(Zt({...g,percent:D}),x.type==="lights"){it(Object.fromEntries(x.lightIds.map(K=>[K,{intensity:(x.baseIntensity[K]??0)*(D/100)}])));return}Hi(x.objectKey,{emissive:tl(Vn(x.objectKey).color),emissiveIntensity:x.baseIntensity*(D/100)})},onClose:()=>Zt(null)})}return u==="change-material"&&Un?B(tu,{inline:!0,triggerFileUpload:ud,materialPopup:Un,textureUrl:Sd,clearTexture:dd,offset:Cd,rotationDegrees:Td,onOffsetChange:Pd,onRotationChange:Ed,isPositioning:_d,onEndPositioning:Ad}):null}}),he("div",{className:`ri-canvasArea ${Fi?"ri-canvasArea--measuring":""} ${Fs?"":"ri-canvasArea--positioning"} ${zt?"ri-canvasArea--moveMode":""}`,ref:og,tabIndex:mt?0:void 0,onDoubleClick:cb,onPointerDown:u=>{if(mt&&ur.current?.focus({preventScroll:!0}),pe){sb(u);return}Ng(u)},onWheel:pe?lb:void 0,onClick:pe?void 0:jg,children:[Ei&&!t&&(pe||Wg)&&B("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:pe?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:pe?"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish":"Double-click to move or zoom"}),Iu&&!Nu&&he("div",{className:"ri-bindingsMismatchBanner",children:[B(Os,{size:14,className:"ri-bindingsMismatchBanner__icon"}),B("span",{children:Bu===1?"1 object binding doesn't match this model":`${Bu} object bindings don't match this model`}),B("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:u=>{u.stopPropagation(),ju(!0)},"aria-label":"Dismiss",children:B(gu,{size:12})})]}),Uu!==null&&!bg&&he("div",{className:`ri-largeModelBanner ${Iu&&!Nu?"ri-largeModelBanner--offset":""}`,children:[B(Os,{size:14,className:"ri-largeModelBanner__icon"}),he("span",{children:["Very large model (",Math.round(Uu/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),B("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:u=>{u.stopPropagation(),Fu(!0)},"aria-label":"Dismiss",children:B(gu,{size:12})})]}),Ti.model.renderer==="uv-checker"&&Di.missing>0&&he("div",{className:"ri-uvCheckerBanner",role:"status",children:[B(Os,{size:14,className:"ri-uvCheckerBanner__icon"}),he("span",{children:[Di.missing===Di.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Di.missing} of ${Di.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),B("input",{ref:Mu,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:$g}),he(Kl,{camera:O,backgroundColor:$,shadows:Z&&X.shadows.enabled,sceneConfig:Ti,selectedObjectRef:Zs,hoveredObjectRef:Xg,highlightOnHover:_e,renderMode:Gt,maxDpr:Pe,reduceGpuLoad:Zf,xrStore:dn,rendererCaptureRef:er,preserveDrawingBuffer:se,children:[B(Zl,{lightingConfig:X.lighting,shadowConfig:X.shadows,shadowsEnabled:Z,environmentRotation:X.environment.rotation,environmentConfig:X.environment,modelBounds:Og,objectBindings:fe,nodeRefs:cr}),ke&&X.lighting.lights.map(u=>!u.visible||u.type==="none"||u.type==="hemisphere"||u.attachment?null:B(Uf,{light:u,position:u.position,rotation:u.rotation,color:u.color,intensity:u.intensity,visible:u.visible,onPositionChange:g=>xd(u.id,g,u.rotation),onRotationChange:g=>xd(u.id,u.position,g),onDraggingChange:vu},u.id)),B(Ql,{controlsRef:Ee,onCameraChange:rb,cameraLimits:N,controllerType:Ur,onPointerLockExit:()=>_i("orbit")}),B(NM,{enabled:Ur==="pointerLock"?!1:Uo??X.model.autoRotate??!1,speed:ft??X.model.autoRotateSpeed??1,controlsRef:Ee}),sn&&B(uM,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Ee.current?.update(0),er.current?.invalidate()},children:B(dM,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),zt&&Zs&&jt&&B(fu,{node:Zs,space:St,onTransformChange:qg,onDraggingChange:u=>{vu(u),Vi&&P?.(Vi,u)}},jt),B(Sa,{onLoadError:vd,children:B(Gf,{fallback:null,children:(()=>{let u=he(Si,{children:[t?B(Wc,{url:t,rotation:Ti.model.rotation,errorTarget:r,cacheSize:n,decoderConfig:bu,objectBindings:fe,itemMaterials:In,sceneConfig:Ti,selectedItem:jt,panelHoveredItem:p??Ns,highlightOnHover:_e,onItemClick:pd,onItemHover:od,onItemDoubleClick:md,onItemContextMenu:fd,onObjectCatalog:Jg,onTilesetBounds:Zg,onModelLoaded:yd,onLoadError:vd,nodeRefsOut:cr,onNodeRefsChange:Cu,materialRefsOut:Vo,explodeFactor:qo,suspendBindingTransforms:Fo}):B(rc,{url:e,modelFormat:o,objectBindings:fe,selectedItem:jt,itemMaterials:In,onItemClick:pd,onItemDoubleClick:md,onItemContextMenu:fd,onItemHover:od,onModelLoaded:yd,onAnimationsReady:G,nodeRefsOut:cr,onNodeRefsChange:Cu,materialRefsOut:Vo,panelHoveredItem:p??Ns,sceneConfig:Ti,zoomOnSelected:ht,highlightOnHover:_e,decoderConfig:bu,onLoadProgress:eb,explodeFactor:qo,suspendBindingTransforms:Fo}),B(Kc,{annotations:pr,sceneConfig:X,activeAnnotation:ji,popupRef:Bs,canvasRootRef:ur,worldPositionsRef:wu,modelLoaded:cn,onAnnotationClick:ub,onCloseAnnotation:zi,hideCloseButton:Ii,showAnnotationOnHover:ot}),B(IM,{annotation:Zo,enabled:Ii,controlsRef:Ee,offsetRef:Is}),Bi&&B(Jc,{controlsRef:Ee,sceneRef:Tt,config:Bi,playing:un,resetOnPlay:xg,onFinished:()=>{dr(!1),Bn(!1)},onUserInteract:()=>{dr(!1)}}),V&&B(Qc,{points:Zu,unit:Oe,box:ed,showDimensions:Ks})]});return dn?B(wf,{ref:wg,box:ed,scaleMode:ee,onARStateChange:Tg,children:u}):u})()})},t??e),jr&&B(Gf,{fallback:null,children:jr})]}),Nt&&B("div",{className:"ri-overlay",children:Nt}),ze&&e&&Ou&&(()=>{let u=Rp(mg,t||e,t?void 0:o);return B("div",{className:"ri-loadError",role:"alert",children:he("div",{className:"ri-loadError__card",children:[he("div",{className:"ri-loadError__header",children:[B(Os,{size:16,"aria-hidden":"true"}),B("span",{className:"ri-loadError__title",children:u.title})]}),B("p",{className:"ri-loadError__detail",children:u.detail}),B("p",{className:"ri-loadError__source",children:t||e}),u.technical&&B("p",{className:"ri-loadError__technical",children:u.technical})]})})})(),B(Xd,{visible:bb,message:yg,progress:vg??void 0}),Xi&&he("div",{className:"ri-xrTools",style:{top:`${qi(0)}px`},children:[!$s&&qu&&he("button",{type:"button",className:"ri-xrButton",onClick:Cg,title:"View this model in AR with Apple Quick Look",children:[B(Hf,{size:16}),"View in AR"]}),$o&&he("button",{type:"button",className:"ri-xrButton",onClick:Sg,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":$u,children:[B(CM,{size:16}),B("span",{children:"Open on phone"})]}),dn&&$s&&he("button",{type:"button",className:"ri-xrButton",onClick:()=>dn.enterAR().catch(u=>{console.error("Failed to enter AR session:",u)}),title:"View this model in your space",children:[B(Xf,{size:16}),B("span",{className:"ri-xrButtonPrefix",children:"Enter"}),B("span",{children:"AR"})]}),dn&&Xu&&he("button",{type:"button",className:"ri-xrButton",onClick:()=>dn.enterVR().catch(u=>{console.error("Failed to enter VR session:",u)}),title:"View this model in VR",children:[B(SM,{size:16}),B("span",{className:"ri-xrButtonPrefix",children:"Enter"}),B("span",{children:"VR"})]})]}),Mg,$u&&$o&&B("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:u=>{u.target===u.currentTarget&&Yu()},children:he("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[B("button",{type:"button",className:"ri-mobileHandoffClose",onClick:Yu,"aria-label":"Close phone handoff",children:B(gu,{size:18})}),B(Xf,{size:22,"aria-hidden":"true"}),B("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),B("p",{children:"Scan the code and choose AR."}),B("div",{className:"ri-mobileHandoffQr",children:B(pM,{value:$o,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),re&&B("div",{className:"ri-uvCheckerTools",style:{top:`${qi(Xi?1:0)}px`},children:B("button",{type:"button",className:`ri-measureButton ${kn?"ri-measureButton--active":""}`,onClick:()=>Ct(u=>!(u??Cr)),title:kn?"Disable UV checker":"Enable UV checker","aria-label":kn?"Disable UV checker":"Enable UV checker","aria-pressed":kn,children:B(RM,{size:16})})}),V&&he("div",{className:"ri-measureTools",style:{top:`${qi((Xi?1:0)+(re?1:0))}px`},children:[B("button",{type:"button",className:`ri-measureButton ${Fi?"ri-measureButton--active":""}`,onClick:Bg,title:Fi?"Stop measuring":"Measure distance","aria-pressed":Fi,children:B(EM,{size:16})}),B("button",{type:"button",className:`ri-measureButton ${Ks?"ri-measureButton--active":""}`,onClick:zg,title:"Toggle bounding dimensions","aria-pressed":Ks,children:B(AM,{size:16})}),Zu.length>0&&B("button",{type:"button",className:"ri-measureButton",onClick:Ig,title:"Clear measurements",children:B(yM,{size:16})}),Fi&&B("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),oe&&he("div",{className:"ri-explodeTools",style:{top:`${qi((Xi?1:0)+(re?1:0)+(V?1:0))}px`},children:[B("button",{type:"button",className:`ri-measureButton ${Xs||qo>0?"ri-measureButton--active":""}`,onClick:()=>Wu(u=>!u),title:"Exploded view","aria-pressed":Xs,children:B(TM,{size:16})}),Xs&&B("div",{className:"ri-explodeSlider",onPointerDown:u=>u.stopPropagation(),children:B("input",{type:"range",min:0,max:100,value:Math.round(qo*100),onChange:u=>Hu(Number(u.target.value)/100),"aria-label":"Explode amount"})})]}),Bi&&he("div",{className:"ri-cinematicTools",style:{top:`${qi((Xi?1:0)+(re?1:0)+(V?1:0)+(oe?1:0))}px`},children:[B("button",{type:"button",className:`ri-measureButton ${un?"ri-measureButton--active":""}`,onClick:()=>{un?dr(!1):(Bn(!1),dr(!0))},title:un?"Pause cinematic":"Play cinematic","aria-pressed":un,children:un?B(PM,{size:16}):B(_M,{size:16})}),un&&B("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:tb,title:"Stop cinematic and reset camera",children:B(Wf,{size:16})})]}),(Fe||rt||Me&&Xe.length>0)&&he("div",{className:"ri-buttonContainer",children:[B("div",{className:"ri-tourControls",children:Me&&Xe.length>0&&B(Si,{children:Ii?he(Si,{children:[he("button",{className:"ri-tourButton",onClick:Eg,disabled:Ju||Xe.length===0||Wt<=0,title:"Previous annotation",children:[B(wM,{size:16}),B("span",{children:"Prev"})]}),B("button",{className:"ri-tourButton ri-tourButton--stop",onClick:Rg,title:"Stop guided tour",children:B(Wf,{size:16})}),he("button",{className:"ri-tourButton ri-tourButton--next",onClick:Ag,disabled:Ju||Xe.length===0,title:"Next annotation",children:[B("span",{children:"Next"}),B(MM,{size:16})]})]}):B("button",{className:"ri-navButtonSingle",onClick:Pg,disabled:Xe.length===0,title:"Start guided tour",children:"Guided Tour"})})}),he("div",{className:"mv-rightControls",children:[Fe&&B("button",{className:"mv-resetButton",onClick:ol,title:"Reset camera view",children:B(xM,{})}),he("div",{className:"mv-controllersWrapper",onPointerDown:u=>u.stopPropagation(),children:[rg&&he("div",{className:"mv-controllersMenu",children:[B("button",{type:"button",className:`mv-controllersMenuItem ${Ur==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>_i("orbit"),children:"Orbit Control"}),B("button",{type:"button",className:`mv-controllersMenuItem ${Ur==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>_i("pointerLock"),children:"Point Lock"})]}),B("button",{className:"mv-controllersButton",onClick:()=>yu(u=>!u),title:"Camera controller","aria-label":"Camera controller settings",children:B(LM,{size:15})})]}),rt&&he("div",{className:"mv-downloadWrapper",onPointerDown:u=>u.stopPropagation(),children:[Ug&&he("div",{className:"mv-downloadMenu",children:[he("button",{className:"mv-downloadMenuItem",onClick:Vg,disabled:Qs||!Tt.current,children:[B(Hf,{size:14}),"Download GLB"]}),B("div",{className:"mv-downloadMenuDivider"}),se&&he(Si,{children:[he("button",{className:"mv-downloadMenuItem",onClick:Gg,disabled:!Tt.current,children:[B(gM,{size:14}),"Download PNG"]}),B("div",{className:"mv-downloadMenuDivider"})]}),he("button",{className:"mv-downloadMenuItem",onClick:Hg,disabled:!Tt.current,children:[B(vM,{size:14}),"Download UV Layout"]}),rd&&B("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:rd})]}),B("button",{className:"mv-downloadButton",onClick:Fg,disabled:Qs||!Tt.current,title:"Download options",children:Qs?he(Si,{children:[B("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):he(Si,{children:[B(bM,{size:15}),"Download"]})})]})]})]}),Lt&&he("div",{className:"ri-annotationPopup",style:{left:fb,top:gb},onPointerDown:u=>u.stopPropagation(),onClick:u=>u.stopPropagation(),children:[B("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Vr.title,onChange:u=>Ko(g=>({...g,title:u.target.value})),onKeyDown:u=>{u.key==="Enter"&&Md(),u.key==="Escape"&&ll()}}),B("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Vr.description,onChange:u=>Ko(g=>({...g,description:u.target.value})),onKeyDown:u=>{u.key==="Escape"&&ll()},rows:5}),he("div",{className:"ri-annotationActions",children:[B("button",{onClick:Md,className:`ri-annotationOkBtn ${Vr.title.trim()?"":"disabled"}`,disabled:!Vr.title.trim(),children:"OK"}),B("button",{onClick:ll,className:"ri-annotationCancelBtn",children:"Cancel"}),B("div",{className:"ri-annotationIcons"})]})]})]}),ie&&tr&&B(eu,{colorPicker:tr,onClose:Xt,itemMaterials:In,setItemMaterials:Ho}),ie&&Un&&B(tu,{triggerFileUpload:ud,materialPopup:Un,textureUrl:Sd,clearTexture:dd,offset:Cd,rotationDegrees:Td,onOffsetChange:Pd,onRotationChange:Ed,isPositioning:_d,onEndPositioning:Ad})]}),Ue&&B("div",{className:"ri-viewerRight",children:Se?Se({objectBindings:fe,onAction:na,onFocus:gd,onHover:Eu}):B(au,{objectBindings:fe,onAction:na,onFocus:gd,onHover:Eu})}),nt&&B(Sf,{controlsRef:Ee,enabled:!0,opacity:bt,moveSensitivity:pt,position:dt})]})}export{ma as a,xb as b,no as c,Bp as d,hS as e,lp as f,mS as g,fS as h,Mp as i,tS as j,ey as k,Ma as l,pu as m,iM as n,Nf as o,Tp as p,TS as q,FM as r,iS as s};
24
+ `}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:r}=this;return t.readRenderTargetPixelsAsync(r,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:r}=this;t.readRenderTargetPixels(r,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,r){let{_renderer:n,_target:i}=this;Ao.min.copy(t),Ao.max.copy(t),Ao.max.x+=1,Ao.max.y+=1,n.initRenderTarget(i),n.copyTextureToTexture(e,i.texture,Ao,r,0)}},tn=new class{constructor(){let e=null;Object.getOwnPropertyNames(km.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...r)=>(e||(e=new km),e[t](...r)))})}},Dm=new ar,Om=new ar,Im=new ar;function dw(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function qm(e,t,r=[,,,]){let n=3*t,i=3*t+1,o=3*t+2;return e.index&&(n=e.index.getX(n),i=e.index.getX(i),o=e.index.getX(o)),r[0]=n,r[1]=i,r[2]=o,r}function $m(e,t,r,n,i){let[o,a,s]=n,c=dw(e,t);Dm.fromBufferAttribute(c,o),Om.fromBufferAttribute(c,a),Im.fromBufferAttribute(c,s),i.set(0,0,0).addScaledVector(Dm,r.x).addScaledVector(Om,r.y).addScaledVector(Im,r.z)}function Ym(e,t,r,n){let i=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(i*t%t),s=Math.floor(o*r%r);return n.set(a,s),n}var Bm=new ar,zm=new ar,Nm=new ar,pw=class extends ws{constructor(e,t,r=null){super(e,t,r),this.channels=ct(r,"channels",[0]),this.index=ct(r,"index",null),this.texCoord=ct(r,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,r=null){let n=this.type;if(n==="BOOLEAN"||n==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Xm(e,t*this.valueLength,n,r)}},hw=class extends Gc{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(pw)}getData(e,t,r,n={}){let i=this.properties;vs(i,n);let o=Object.keys(i),a=o.map(s=>n[s]);return this.getPropertyValuesAtTexel(o,e,t,r,a),o.forEach((s,c)=>n[s]=a[c]),n}async getDataAsync(e,t,r,n={}){let i=this.properties;vs(i,n);let o=Object.keys(i),a=o.map(s=>n[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,r,a),o.forEach((s,c)=>n[s]=a[c]),n}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,r,n,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,tn.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,c=qm(n,t);for(let d=0,h=e.length;d<h;d++){let m=e[d];if(!a[m])continue;let f=s[m],b=o[f.index];$m(n,f.texCoord,r,c,Bm),Ym(Bm,b.image.width,b.image.height,zm),Nm.set(d,0),tn.renderPixelToTarget(b,zm,Nm)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return tn.readDataAsync(l).then(()=>(p.call(this),i));return tn.readData(l),p.call(this),i;function p(){for(let d=0,h=e.length;d<h;d++){let m=e[d],f=s[m],b=f.type;if(i[d]=Vc(f,i[d]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[m]){i[d]=f.resolveDefault(i);continue}let P=f.valueLength*(f.count||1),C=f.channels.map(j=>l[4*d+j]),k=f.componentType,y=new(Lo(k,b))(P);if(new Uint8Array(y.buffer).set(C),f.array){let j=i[d];for(let L=0,w=j.length;L<w;L++)j[L]=f.readDataFromBuffer(y,L,j[L])}else i[d]=f.readDataFromBuffer(y,0,i[d]);i[d]=f.adjustValueScaleOffset(i[d]),i[d]=f.resolveEnumsToStrings(i[d]),i[d]=f.resolveNoData(i[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Nc=class{constructor(e,t,r,n=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:p}=o,d=a.map(f=>new uw(f,p,l,r)),h=[],m=[];n&&(n.propertyTextures&&(h=n.propertyTextures.map(f=>new hw(s[f],p,l,t))),n.propertyAttributes&&(m=n.propertyAttributes.map(f=>new lw(c[f],p,l)))),this.schema=o,this.tableAccessors=d,this.textureAccessors=h,this.attributeAccessors=m,this.object=i,this.textures=t,this.nodeMetadata=n}getPropertyTableData(e,t,r=null){if(!Array.isArray(e))r||(r={}),r=this.tableAccessors[e].getData(t,r);else{r||(r=[]);let n=Math.min(e.length,t.length);r.length=n;for(let i=0;i<n;i++){let o=this.tableAccessors[e[i]];r[i]=o.getData(t[i],r[i])}}if(Array.isArray(e)!==Array.isArray(r)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return r}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,r)=>r)),Array.isArray(e))return e.map(t=>{let r=this.tableAccessors[t];return{name:r.name,className:r.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,r=[]){let n=this.textureAccessors;r.length=n.length;for(let i=0;i<n.length;i++)r[i]=n[i].getData(e,t,this.object.geometry,r[i]);return r}async getPropertyTextureDataAsync(e,t,r=[]){let n=this.textureAccessors;r.length=n.length;let i=[];for(let o=0;o<n.length;o++){let a=n[o].getDataAsync(e,t,this.object.geometry,r[o]).then(s=>{r[o]=s});i.push(a)}return await Promise.all(i),r}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let r=this.attributeAccessors;t.length=r.length;for(let n=0;n<r.length;n++)t[n]=r[n].getData(e,this.object.geometry,t[n]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Ro="EXT_structural_metadata";function mw(e,t=[]){let r=e.json.textures?.length||0,n=Array(r).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{index:a}=i[o];n[a]===null&&(n[a]=e.loadTexture(a))}}),Promise.all(n)}function fw(e,t=[]){let r=e.json.bufferViews?.length||0,n=Array(r).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{values:a,arrayOffsets:s,stringOffsets:c}=i[o];n[a]===null&&(n[a]=e.getDependency("bufferView",a)),n[s]===null&&(n[s]=e.getDependency("bufferView",s)),n[c]===null&&(n[c]=e.getDependency("bufferView",c))}}),Promise.all(n)}var Km=class{constructor(e){this.parser=e,this.name=Ro}async afterRoot({scene:e,parser:t}){let r=t.json.extensionsUsed;if(!r||!r.includes(Ro))return;let n=null,i=t.json.extensions[Ro];if(i.schemaUri){let{manager:c,path:l,requestHeader:p,crossOrigin:d}=t.options,h=new URL(i.schemaUri,l).toString(),m=new Vx(c);m.setCrossOrigin(d),m.setResponseType("json"),m.setRequestHeader(p),n=m.loadAsync(h).then(f=>{i={...i,schema:f}})}let[o,a]=await Promise.all([mw(t,i.propertyTextures),fw(t,i.propertyTables),n]),s=new Nc(i,o,a);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:p}=t.associations.get(c),d=t.json.meshes[l]?.primitives[p];if(d&&d.extensions&&d.extensions[Ro]){let h=d.extensions[Ro];c.userData.structuralMetadata=new Nc(i,o,a,h,c)}else c.userData.structuralMetadata=s}})}},jm=new ar,Um=new ar,Fm=new ar;function gw(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Qm=class{constructor(e,t,r){this.geometry=e,this.textures=t,this.data=r,this._asyncRead=!1,this.featureIds=r.featureIds.map(n=>{let{texture:i,...o}=n,a={label:null,propertyTable:null,nullFeatureId:null,...o};return i&&(a.texture={texCoord:0,channels:[0],...i}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:r,textures:n,featureIds:i}=this,o=Array(i.length).fill(null),a=i.length;tn.increaseSizeTo(a);let s=qm(r,e),c=s[gw(t)];for(let d=0,h=i.length;d<h;d++){let m=i[d],f="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let b=n[m.texture.index];$m(r,m.texture.texCoord,t,s,jm),Ym(jm,b.image.width,b.image.height,Um),Fm.set(d,0),tn.renderPixelToTarget(n[m.texture.index],Um,Fm)}else if("attribute"in m){let b=r.getAttribute(`_feature_id_${m.attribute}`).getX(c);b!==f&&(o[d]=b)}else{let b=c;b!==f&&(o[d]=b)}}let l=new Uint8Array(a*4);if(this._asyncRead)return tn.readDataAsync(l).then(()=>(p(),o));return tn.readData(l),p(),o;function p(){let d=new Uint32Array(1);for(let h=0,m=i.length;h<m;h++){let f=i[h],b="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:P}=f.texture,C=P.map(y=>l[4*h+y]);new Uint8Array(d.buffer).set(C);let k=d[0];k!==b&&(o[h]=k)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},xs="EXT_mesh_features";function Vm(e,t,r){e.traverse(n=>{if(t.associations.has(n)){let{meshes:i,primitives:o}=t.associations.get(n),a=t.json.meshes[i]?.primitives[o];a&&a.extensions&&a.extensions[xs]&&r(n,a.extensions[xs])}})}var Jm=class{constructor(e){this.parser=e,this.name=xs}async afterRoot({scene:e,parser:t}){let r=t.json.extensionsUsed;if(!r||!r.includes(xs))return;let n=t.json.textures?.length||0,i=Array(n).fill(null);Vm(e,t,(a,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&i[c.texture.index]===null){let l=c.texture.index;i[l]=t.loadTexture(l)}})});let o=await Promise.all(i);Vm(e,t,(a,s)=>{a.userData.meshFeatures=new Qm(a.geometry,o,s)})}},Zm=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},Hc=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new Zx(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new Zm),this.metadata&&(t.register(()=>new Km),t.register(()=>new Jm)),this.plugins.forEach(r=>t.register(r)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:wE}=Uc;var ME=new Hm(new qx),bw=new Fx(new Uint8Array([255,255,255,255]),1,1);bw.needsUpdate=!0;var yw=0,vw=1,xw=2,ww=3,Mw=4,Sw=5,Cw=6,Tw=7,_w=8,Pw=9,Ew=10,Aw=11,SE=Object.freeze({NONE:yw,SCREEN_ERROR:vw,GEOMETRIC_ERROR:xw,DISTANCE:ww,DEPTH:Mw,RELATIVE_DEPTH:Sw,IS_LEAF:Cw,RANDOM_COLOR:Tw,RANDOM_NODE_COLOR:_w,CUSTOM_COLOR:Pw,LOAD_ORDER:Ew,INDEXED_COLOR:Aw});var CE=Math.PI/4,TE=3/5;var en={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var _E=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),r=e.join("_"),{_cache:n}=this;return r in n||(t.setHSL(Math.random(),1,.5),n[r]=t.getHex()),t.set(n[r])}};var PE={[en.NONE]:16777215,[en.NOT_READY]:7829367,[en.NO_FIT]:2250239,[en.DEPTH]:4473924,[en.OCCUPANCY]:65535,[en.SPACING]:16776960,[en.ANGLE]:16711680,[en.FACING]:16711935};var EE=Math.PI/180;var AE=_n*Math.PI*2;var RE=_n*Math.PI*2;import{DRACOLoader as Iw}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as Bw}from"three/examples/jsm/loaders/KTX2Loader.js";import{MeshoptDecoder as zw}from"three/examples/jsm/libs/meshopt_decoder.module.js";import{Box3 as Nw,DoubleSide as jw,MathUtils as Uw,Matrix4 as nf,Sphere as Fw,Vector3 as Vw}from"three";import{BufferAttribute as ef,MathUtils as Rw}from"three";function tf(e){return!!e&&!e.isInterleavedBufferAttribute}function rf(e,t,r,n){for(let i=0;i<e.count;i+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(i,o,Rw.clamp(e.getComponent(i,o),r,n));return t}function Lw(e){for(let t=0;t<e.count;t+=1)for(let r=0;r<e.itemSize;r+=1){let n=e.getComponent(t,r);if(!Number.isFinite(n)||n<0||n>1)return!1}return!0}var Ms=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(r=>{let n=r.geometry;if(!n)return;let i=n.attributes.normal;tf(i)&&!(i.array instanceof Int16Array)&&(n.attributes.normal=rf(i,new ef(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=n.attributes[o];!tf(a)||a.array instanceof Uint16Array||!Lw(a)||(n.attributes[o]=rf(a,new ef(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};import{jsx as af,jsxs as $w}from"react/jsx-runtime";var Gw=0,of=4,Hw=6,Ww=12,Xw=4;function qw(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function Xc({url:e,rotation:t=[0,0,0],errorTarget:r=64,cacheSize:n=800,memoryBudgetMB:i=800,decoderConfig:o,objectBindings:a,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:p,highlightOnHover:d=!0,onItemClick:h,onItemHover:m,onItemDoubleClick:f,onItemContextMenu:b,onObjectCatalog:P,onTilesetBounds:C,onModelLoaded:k,onLoadError:y,nodeRefsOut:j,onNodeRefsChange:L,materialRefsOut:w,explodeFactor:I=0,suspendBindingTransforms:U=!1}){let{camera:_,gl:S,invalidate:A}=Ow(),G=xt(null),[v,z]=Wc(null),M=xt({onItemClick:h,onItemHover:m,onItemDoubleClick:f,onObjectCatalog:P,onTilesetBounds:C,onModelLoaded:k,onLoadError:y,onNodeRefsChange:L});M.current={onItemClick:h,onItemHover:m,onItemDoubleClick:f,onObjectCatalog:P,onTilesetBounds:C,onModelLoaded:k,onLoadError:y,onNodeRefsChange:L};let O=xt(!0),[N,$]=Wc(null),Z=xt(null);Z.current=N;let te=xt([]),ie=xt(!1);nn(()=>{let V=new Qa;return $(V),()=>V.dispose()},[e]);let Ce=xt(null),Ue=xt(0),rt=xt(!1),gt=i*1024*1024,Fe=xt(!1),ze=xt(sc),nt=xt(null),dt=xt(null),bt=xt(null);nn(()=>()=>{bt.current!==null&&clearTimeout(bt.current)},[]);let pt=o?.dracoDecoderPath??Bd,At=o?.ktx2TranscoderPath??zd,Ge=o?.meshopt??!0,[q,Vt]=Wc(null);nn(()=>{rt.current=!1,Fe.current=!1;let V=new Bc(e);V.loadAncestors=!0;let re=new ns;re.priorityCallback=V.downloadQueue.priorityCallback,re.maxJobsPerOrigin=Ww;let oe=new vr;oe.priorityCallback=V.parseQueue.priorityCallback,oe.maxJobs=Hw;let we=new vr;we.priorityCallback=V.processNodeQueue.priorityCallback,we.maxJobs=V.processNodeQueue.maxJobs;let Oe=new yo;Oe.unloadPriorityCallback=V.lruCache.unloadPriorityCallback,V.downloadQueue=re,V.parseQueue=oe,V.processNodeQueue=we,V.lruCache=Oe;let Te=pt?new Iw().setDecoderPath(pt).setWorkerLimit(Xw):null,Re=At?new Bw().setTranscoderPath(At).detectSupport(S):null;return V.registerPlugin(new Hc({dracoLoader:Te,ktxLoader:Re,meshoptDecoder:Ge?zw:null,autoDispose:!1})),V.registerPlugin(new Fc({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),V.registerPlugin(new Ms),Vt(V),window.__riTiles=V,()=>{V.forEachLoadedModel(ee=>Yi(ee)),V.dispose(),Te?.dispose(),Re?.dispose(),Vt(ee=>ee===V?null:ee)}},[pt,S,At,Ge,e]),nn(()=>{q&&(ze.current=sc,nt.current=null,q.errorTarget=r,q.lruCache.maxSize=n,q.lruCache.minSize=Math.max(1,Math.floor(n*.75)),q.lruCache.maxBytesSize=gt,q.lruCache.minBytesSize=gt*.75,A())},[n,r,A,gt,q]);let ht=kw(()=>{let V=a??{};return{objectBindings:V,keyByModelObject:Lh(V),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:kh(v,p),highlightOnHover:d,suspendTransforms:U,placementFrame:q?.group.matrixWorld,invalidate:A}},[v,d,A,s,a,p,c,l,U,q]),_e=rn(()=>{if(!q)return;let V=Gt.current,re=ie.current?Z.current?.nodesByBinding(V)??{}:{},oe={};q.group.traverse(Re=>{if(!Re.isMesh)return;let ee=oc(Re);if(!ee)return;let xe=V.keyByModelObject[ee]??ee;if(!V.objectBindings[xe])return;re[xe]||(re[xe]=Re);let Me=Re.material;Me&&(oe[xe]=Me)});let we=j?.current??{},Oe=Object.keys(we),Te=Oe.length!==Object.keys(re).length||Oe.some(Re=>we[Re]!==re[Re]);j&&(j.current=re),w&&(w.current=oe),(Te||!j)&&M.current.onNodeRefsChange?.()},[w,j,q]),Ye=rn(V=>Ya(V,ht),[ht]),He=rn(V=>Oh(V,ht),[ht]),Bt=xt(He);Bt.current=He;let Gt=xt(ht);Gt.current=ht;let Pe=rn(()=>{let V=Ce.current,re=Ue.current;return!V||re<=0?Gt.current:{...Gt.current,explode:{factor:re,centre:V.centre,radius:V.radius}}},[]);nn(()=>{q&&(He(q.group),O.current=!0,q.forEachLoadedModel(V=>{He(V),ui(V,Pe())}),A())},[He,A,Pe,q]),nn(()=>{let V=qw(e);if(!V)return;let re=!1;return fetch(V).then(oe=>oe.ok?oe.json():null).then(oe=>{re||!oe?.objects||(te.current=oe.objects,ie.current=oe.bindingFrame==="gltf-identity-v2",ie.current&&Z.current?.setCatalog(oe.objects),O.current=!0,M.current.onObjectCatalog?.(oe.objects),A())}).catch(()=>{}),()=>{re=!0}},[e,A,N]),nn(()=>{if(!q)return;let V=!1,re=()=>A(),oe=ee=>{ee.scene&&(ee.scene.traverse(xe=>{let Me=xe.material;for(let ot of Array.isArray(Me)?Me:Me?[Me]:[])ot.transparent&&ot.side===jw&&(ot.forceSinglePass=!0)}),Bt.current(ee.scene),ui(ee.scene,Pe()),sa(ee.scene)),O.current=!0,V||(V=!0,M.current.onModelLoaded?.(q.group)),A()},we=ee=>{M.current.onLoadError?.(ee.error)},Oe=ee=>{ee.scene&&(ac(ee.scene),Yi(ee.scene)),O.current=!0};q.setCamera(_),q.setResolutionFromRenderer(_,S),q.addEventListener("needs-update",re),q.addEventListener("load-model",oe),q.addEventListener("load-error",we),q.addEventListener("dispose-model",Oe);let Te=()=>{O.current=!0,A()};q.addEventListener("tile-visibility-change",Te);let Re=()=>{let ee=q.root;ee&&!ee.content?.uri&&ee.refine==="REPLACE"&&(ee.refine="ADD",A())};return q.addEventListener("load-root-tileset",Re),A(),()=>{q.removeEventListener("needs-update",re),q.removeEventListener("load-model",oe),q.removeEventListener("load-error",we),q.removeEventListener("dispose-model",Oe),q.removeEventListener("tile-visibility-change",Te),q.removeEventListener("load-root-tileset",Re),ac(q.group),q.deleteCamera(_),j&&(j.current={}),w&&(w.current={})}},[_,S,A,w,j,Pe,q]);let se=Va(V=>Ye(V)?.binding??null,b),de=rn(V=>{if(se.consumeClick())return;let re=Ye(V.object);re&&(V.stopPropagation(),M.current.onItemClick?.(re.binding))},[Ye,se,h]),Ke=rn(V=>{let re=Ye(V.object);if(!re)return;M.current.onItemDoubleClick?.(re.binding,Ga(V))&&V.stopPropagation()},[Ye]),Ae=rn(V=>{let re=Ye(V.object),oe=re?.key??null;oe!==G.current&&(G.current=oe,z(oe),M.current.onItemHover?.(re?.binding??null))},[Ye]),Qe=rn(()=>{G.current!==null&&(G.current=null,z(null),M.current.onItemHover?.(null))},[]);return nn(()=>{A()},[A,q]),Dw((V,re)=>{if(!q)return;if(q.setResolutionFromRenderer(_,S),ie.current&&N){let ft=N.sync(Pe(),l,U);N.updateBounds(q.root),U&&q.forEachLoadedModel(E=>ui(E,ft))}if(q.update(),!rt.current){let ft=new Nw;if(q.getBoundingBox(ft)){rt.current=!0,q.group.updateMatrixWorld(),ft.applyMatrix4(q.group.matrixWorld);let E=ft.getBoundingSphere(new Fw);Ce.current={centre:E.center.clone(),radius:ft.getSize(new Vw).length()*.5},M.current.onTilesetBounds?.(ft),A()}}O.current&&(O.current=!1,_e());let oe=Math.min(Math.max(I,0),1),we=Ue.current;Math.abs(we-oe)>1e-4?(Ue.current=Uw.lerp(we,oe,1-Math.exp(-6*re)),ui(q.group,Pe()),A()):we!==oe&&(Ue.current=oe,ui(q.group,Pe()),A());let Oe=q,Te=q.lruCache,Re=Te.isFull(),ee=ze.current,xe=ee.loosened&&nt.current?nt.current:{bytes:Te.maxBytesSize,items:Te.maxSize},Me=0;for(let ft of Te.usedSet??[])Me+=Te.bytesMap?.get(ft)??0;let ot=!1,zt=q;for(let ft of zt.usedSet??[]){let E=ft.internal?.loadingState??of;if(ft.traversal?.used&&ft.internal?.hasContent&&E>=Gw&&E<of){ot=!0;break}}let St=dt.current??(dt.current={world:new nf,projection:new nf}),mt=!St.world.equals(_.matrixWorld)||!St.projection.equals(_.projectionMatrix);mt&&(St.world.copy(_.matrixWorld),St.projection.copy(_.projectionMatrix));let ln={full:Re,wanting:ot,moved:mt,usage:Math.max(Me/Math.max(1,xe.bytes),(Te.usedSet?.size??0)/Math.max(1,xe.items)),now:performance.now()},Nt=Xh(ee,ln);Nt!==ee&&(Nt.loosened&&(!ee.loosened||Nt.raisedAt!==ee.raisedAt)?(ee.loosened||(nt.current=xe),Te.maxBytesSize=Math.max(xe.bytes,Te.cachedBytes??0)*lc,Te.maxSize=Math.ceil(Math.max(xe.items,Te.itemSet?.size??0)*lc)):!Nt.loosened&&ee.loosened&&nt.current&&(Te.maxBytesSize=nt.current.bytes,Te.maxSize=nt.current.items,nt.current=null),ze.current=Nt,q.errorTarget=r*Nt.factor,A()),!Fe.current&&Re&&ln.wanting&&Nt.factor>=mo&&(Fe.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let jr=qh(Nt,ln);jr===0?A():jr!==null&&bt.current===null&&(bt.current=setTimeout(()=>{bt.current=null,A()},jr)),((Oe.stats?.downloading??0)>0||(Oe.stats?.parsing??0)>0||Oe.loadProgress!==void 0&&Oe.loadProgress<1&&!Re)&&A()}),q?$w("group",{rotation:t,children:[N?af("primitive",{object:N.group}):null,af("primitive",{object:q.group,onClick:de,onDoubleClick:Ke,onPointerDown:b?se.onPointerDown:void 0,onPointerMove:Ae,onPointerOut:Qe})]}):null}import{Matrix4 as qc}from"three";var Yw=new qc().makeRotationX(Math.PI/2);function sf(e){e.updateMatrixWorld(!0);let t=new qc().copy(e.matrixWorld).invert().premultiply(Yw),r=new qc,n=[];for(let[i,o]of Object.entries(Yn(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let c=s.boundingBox.clone().applyMatrix4(r.multiplyMatrices(t,o.matrixWorld)),l=s.index?s.index.count:s.getAttribute("position")?.count??0;n.push({name:i,triangles:Math.floor(l/3),minimum:c.min.toArray(),maximum:c.max.toArray()})}return n.sort((i,o)=>i.name.localeCompare(o.name))}import{useMemo as Rn,useRef as on,useState as bi,useEffect as An,useCallback as gi}from"react";import{Html as lf}from"@react-three/drei";import{useFrame as cf,useThree as Yc}from"@react-three/fiber";import{MathUtils as $c,Vector3 as Oo}from"three";import{jsx as sr,jsxs as Kc}from"react/jsx-runtime";var Kw=.02;function uf(e,t){let r=on(null),n=Yc(l=>l.scene),i=on(null),o=Rn(()=>new Oo(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),a=Rn(()=>new Oo,[]),s=Rn(()=>new Oo,[]),c=Rn(()=>new Oo,[]);return An(()=>{i.current=null},[e.anchorNodeName]),cf(({camera:l})=>{let p=r.current,d=p?.parent;if(!p||!d)return;let h=i.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=fn(n,e.anchorNodeName),i.current=h),h?(h.updateWorldMatrix(!0,!1),a.copy(o).applyMatrix4(h.matrixWorld)):(a.copy(o),d.localToWorld(a)),t){let m=t.current.get(e.id);m||(m=new Oo,t.current.set(e.id,m)),m.copy(a)}c.copy(l.position).sub(a),c.lengthSq()>0?(c.normalize(),s.copy(a).addScaledVector(c,Kw)):s.copy(a),d.worldToLocal(s),p.position.copy(s)}),r}function Qw({annotation:e,occluders:t,worldPositionsRef:r,onClick:n,onHover:i,showAnnotationOnHover:o}){let[a,s]=bi(!1),c=uf(e,r),[l,p]=bi(!1),[d,h]=bi(1),m=on(null),f=on(null),b=on(null);An(()=>()=>{m.current&&(clearTimeout(m.current),m.current=null),b.current&&(clearTimeout(b.current),b.current=null)},[]);let P=L=>{L.stopPropagation(),L.preventDefault(),m.current&&(clearTimeout(m.current),m.current=null),m.current=window.setTimeout(()=>{n?.(e),m.current=null},10)},C=L=>{L.stopPropagation(),p(!0),h(100),b.current&&(clearTimeout(b.current),b.current=null),i?.(e),o&&n?.(e)},k=L=>{L.stopPropagation(),p(!1),h(1),b.current&&clearTimeout(b.current),b.current=window.setTimeout(()=>{i?.(null),o&&i?.(null),b.current=null},50)},y=L=>{L.stopPropagation();let w=L.currentTarget;w.dataset.pointerX=String(L.clientX),w.dataset.pointerY=String(L.clientY)},j=L=>{L.stopPropagation();let w=L.currentTarget,I=parseFloat(w.dataset.pointerX||"0"),U=parseFloat(w.dataset.pointerY||"0"),_=L.clientX-I,S=L.clientY-U;Math.sqrt(_*_+S*S)<10&&P(L)};return sr("group",{ref:c,children:sr(lf,{center:!0,occlude:t,onOcclude:s,pointerEvents:a?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:a?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:sr("div",{ref:f,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:a?"none":"flex"},onPointerDown:y,onPointerUp:j,onPointerEnter:C,onPointerLeave:k,onDoubleClick:L=>{L.stopPropagation(),n?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:sr("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function Jw({annotation:e,occluders:t,popupRef:r,onClose:n,hideCloseButton:i=!1}){let[o,a]=bi(!1),s=uf(e),c=Kc("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:o?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[Kc("div",{className:"ri-viewAnnotationHeader",children:[sr("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&sr("button",{onClick:l=>{l.stopPropagation(),n?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&sr("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return sr("group",{ref:s,children:sr(lf,{occlude:t,onOcclude:a,pointerEvents:o?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:o?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function Qc({annotations:e,sceneConfig:t,activeAnnotation:r,popupRef:n,canvasRootRef:i,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:p=!1,showAnnotationOnHover:d=!1}){let h=Yc(M=>M.invalidate),m=Yc(M=>M.scene),[f,b]=bi(null),[P,C]=bi(!1),k=on(null),y=on(null),j=on(null),L=Rn(()=>{let M=[];return m.traverse(O=>{let N=O;N.isMesh&&!N.isSkinnedMesh&&M.push({current:O})}),M},[m,e,a]),w=gi(()=>{h();let M=()=>{h(),y.current=window.requestAnimationFrame(()=>{h(),y.current=null})};y.current=window.requestAnimationFrame(M)},[h]);An(()=>{w()},[e,w]),An(()=>{w()},[r,w]),An(()=>()=>{y.current!==null&&window.cancelAnimationFrame(y.current),j.current&&clearTimeout(j.current)},[]);let I=P?f:r||f,U=Rn(()=>I?e.find(M=>M.id===I.id)??I:null,[I,e]),_=gi(M=>{if(P&&f?.id===M.id){C(!1),b(null),l?.();return}C(!0),b(M),s?.(M)},[P,f,s,l]),S=gi(M=>{c?.(M),d&&!P&&(j.current&&(clearTimeout(j.current),j.current=null),M?b(M):j.current=window.setTimeout(()=>{b(null),l?.(),j.current=null},100))},[P,c,d,l]),A=gi(()=>{C(!1),b(null),l?.()},[l]),G=gi(M=>{let O=M.target;if(O.closest?.(".ri-annotationMarker")||O.closest?.(".ri-viewAnnotationPopup")||O.closest?.(".annotation-html-wrapper"))return;let N=i.current;N&&N.contains(O)&&(C(!1),b(null),l?.())},[i,l]),v=gi(M=>{M.key==="Escape"&&P&&(C(!1),b(null),l?.())},[P,l]);An(()=>{let M=i.current;return M&&(M.addEventListener("click",G),M.addEventListener("pointerdown",G)),document.addEventListener("keydown",v),()=>{M&&(M.removeEventListener("click",G),M.removeEventListener("pointerdown",G)),document.removeEventListener("keydown",v)}},[i,G,v]);let z=Rn(()=>(t?.model.rotation??[0,0,0]).map(M=>M*Math.PI/180),[t?.model.rotation]);return An(()=>{h()},[h,z]),cf((M,O)=>{if(!k.current)return;k.current.rotation.x=$c.lerp(k.current.rotation.x,z[0],1-Math.exp(-5*O)),k.current.rotation.y=$c.lerp(k.current.rotation.y,z[1],1-Math.exp(-5*O)),k.current.rotation.z=$c.lerp(k.current.rotation.z,z[2],1-Math.exp(-5*O));let{rotation:N}=k.current;Math.abs(N.x-z[0])+Math.abs(N.y-z[1])+Math.abs(N.z-z[2])>1e-4&&h()}),Kc("group",{ref:k,children:[e.map(M=>{let O=`${M.worldPosition.join(",")}-${M.title}-${M.id}`;return sr(Qw,{annotation:M,occluders:L,worldPositionsRef:o,onClick:_,onHover:S,showAnnotationOnHover:d},O)}),U?sr(Jw,{annotation:U,occluders:L,popupRef:n,onClose:A,hideCloseButton:p},`popup-${U.id}`):null]})}import{useEffect as Zw,useMemo as df}from"react";import{Html as hf,Line as e1}from"@react-three/drei";import{BoxGeometry as t1,EdgesGeometry as r1,Vector3 as pf}from"three";import{jsx as Or,jsxs as yi}from"react/jsx-runtime";var n1="#22d3ee",i1="#facc15";function Ss(e,t){let r=e<10?e.toFixed(3):e.toFixed(2);return t?`${r} ${t}`:r}function o1(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Cs({position:e,children:t}){return Or(hf,{center:!0,position:e,zIndexRange:[20,0],children:Or("div",{className:"ri-measureLabel",children:t})})}function a1({box:e,unit:t}){let r=df(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),n=df(()=>{let[s,c,l]=e.size;return new r1(new t1(s||1e-4,c||1e-4,l||1e-4))},[e.size]);Zw(()=>()=>{n.dispose()},[n]);let[i,o,a]=e.size;return yi("group",{position:r,children:[Or("lineSegments",{geometry:n,children:Or("lineBasicMaterial",{color:i1})}),yi(Cs,{position:[0,-o/2,a/2],children:["W ",Ss(i,t)]}),yi(Cs,{position:[-i/2,0,a/2],children:["H ",Ss(o,t)]}),yi(Cs,{position:[i/2,-o/2,0],children:["D ",Ss(a,t)]})]})}function Jc({points:e,unit:t,box:r,showDimensions:n}){return yi("group",{children:[e.map(i=>Or(hf,{center:!0,position:i.position,zIndexRange:[15,0],children:Or("div",{className:"ri-measureDot"})},i.id)),e.slice(1).map((i,o)=>{let a=e[o].position,s=i.position,c=new pf(...a).distanceTo(new pf(...s));return yi("group",{children:[Or(e1,{points:[a,s],color:n1,lineWidth:2}),Or(Cs,{position:o1(a,s),children:Ss(c,t)})]},`${e[o].id}-${i.id}`)}),n&&r?Or(a1,{box:r,unit:t}):null]})}import{forwardRef as s1,useCallback as Io,useEffect as mf,useImperativeHandle as l1,useMemo as ff,useRef as wt}from"react";import{useXR as gf,useXRHitTest as c1,useXRInputSourceEvent as u1}from"@react-three/xr";import{useFrame as d1}from"@react-three/fiber";import{Matrix4 as p1,Vector3 as bf}from"three";import{Fragment as y1,jsx as Bo,jsxs as wf}from"react/jsx-runtime";var h1=1,yf=1,m1=.1,f1=10;function g1(e,t){let[r,n,i]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(r,n,i)||1;return{scale:t==="real-world"?1:h1/s,offset:[-o,-e.min[1],-a]}}function vf(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.hypot(t,r)}function xf(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.atan2(r,t)}var b1=s1(function({box:t,scaleMode:r,children:n,onARStateChange:i},o){let a=wt(null),s=wt(null),c=wt(null),l=gf(O=>O.session!=null),p=gf(O=>O.mode==="immersive-ar"),d=ff(()=>t?g1(t,r):null,[t,r]),h=wt(new bf(0,0,-yf)),m=wt(1),f=wt(0),b=wt(!0),P=wt(!1),C=ff(()=>new p1,[]),k=wt(new bf),y=wt(!1),j=wt(null),L=wt(!1),w=wt(0),I=wt(0),U=wt(1),_=wt(0),S=Io(()=>{if(!i||!p)return;let O={canPlace:y.current,isPlacementMode:b.current,isModelPlaced:P.current},N=j.current;N&&N.canPlace===O.canPlace&&N.isPlacementMode===O.isPlacementMode&&N.isModelPlaced===O.isModelPlaced||(j.current=O,i(O))},[p,i]),A=Io(()=>!p||!y.current?!1:(h.current.copy(k.current),P.current=!0,b.current=!1,S(),!0),[S,p]),G=Io(()=>{p&&(b.current=!0,S())},[S,p]),v=Io(()=>{let O=A();return!O&&p&&(b.current=!1,S()),O},[S,p,A]),z=Io(()=>{p&&(b.current=!1,S())},[S,p]);l1(o,()=>({placeCurrent:A,startPlacementMode:G,finishPlacementMode:v,cancelPlacementMode:z}),[z,v,A,G]),mf(()=>{if(!l){h.current.set(0,0,-yf),m.current=1,f.current=0,y.current=!1,L.current=!1,b.current=!0,P.current=!1,j.current=null;return}p&&(y.current=!1,L.current=!1,b.current=!0,P.current=!1,j.current=null,S())},[S,l,p]),c1((O,N)=>{if(!p||O.length===0){y.current&&(y.current=!1,S());return}N(C,O[0])&&(k.current.setFromMatrixPosition(C),y.current||(y.current=!0,S()))},"viewer"),u1("all","select",()=>{!p||L.current||!b.current||A()},[p,A]),mf(()=>{if(!p)return;let O=Z=>{Z.touches.length===2&&(L.current=!0,w.current=vf(Z.touches),I.current=xf(Z.touches),U.current=m.current,_.current=f.current)},N=Z=>{if(!L.current||Z.touches.length!==2)return;Z.preventDefault();let te=vf(Z.touches);if(w.current>0){let Ce=te/w.current;m.current=Math.min(f1,Math.max(m1,U.current*Ce))}let ie=xf(Z.touches);f.current=_.current-(ie-I.current)},$=Z=>{Z.touches.length===0&&requestAnimationFrame(()=>{L.current=!1})};return window.addEventListener("touchstart",O),window.addEventListener("touchmove",N,{passive:!1}),window.addEventListener("touchend",$),window.addEventListener("touchcancel",$),()=>{window.removeEventListener("touchstart",O),window.removeEventListener("touchmove",N),window.removeEventListener("touchend",$),window.removeEventListener("touchcancel",$)}},[p]),d1(()=>{let O=a.current,N=s.current;if(!O||!N)return;!l||!d?(O.visible=!0,O.position.set(0,0,0),O.rotation.set(0,0,0),N.scale.setScalar(1)):(O.visible=!p||P.current,O.position.copy(h.current),O.rotation.set(0,f.current,0),N.scale.setScalar(d.scale*m.current));let $=c.current;if($){let Z=p&&b.current&&y.current;$.visible=Z,Z&&$.position.copy(k.current)}});let M=l&&d?d.offset:[0,0,0];return wf(y1,{children:[wf("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[Bo("ringGeometry",{args:[.05,.07,32]}),Bo("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),Bo("group",{ref:a,children:Bo("group",{ref:s,children:Bo("group",{position:M,children:n})})})]})}),Mf=b1;import{useEffect as Ts,useMemo as wr,useRef as an}from"react";import{useFrame as v1,useThree as x1}from"@react-three/fiber";import{Box3 as w1,CatmullRomCurve3 as Sf,Sphere as M1,Spherical as S1,Vector3 as sn}from"three";var C1=1.2;function Zc({controlsRef:e,sceneRef:t,config:r,playing:n,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s}){let c=x1(z=>z.invalidate),l=wr(()=>r.waypoints??[],[r.waypoints]),p=l.length>=2,d=r.loop??!0,h=wr(()=>{if(l.length<2)return 24;let z=0;for(let M=0;M<l.length-1;M++)z+=l[M].segmentDuration??3.5;return d&&l.length>1&&(z+=l[l.length-1].segmentDuration??3.5),Math.max(z,4)},[l,d]),m=r.duration??h,f=wr(()=>l.map(z=>[...z.position,...z.target,z.azimuthAngle??"",z.polarAngle??"",z.segmentDuration??""].join(",")).join(";"),[l]),b=wr(()=>{let z=[];if(l.length<2)return z;let M=0;for(let O=0;O<l.length-1;O++)M+=l[O].segmentDuration??3.5,z.push(M);return d&&l.length>1&&(M+=l[l.length-1].segmentDuration??3.5,z.push(M)),z},[l,d]),P=wr(()=>z=>{if(l.length<2||b.length===0)return z/m;let M=b[b.length-1],O=d?z%m:Math.min(z,m),N=m>0?O/m*M:0;for(let $=0;$<b.length;$++)if(N<=b[$]){let Z=$===0?0:b[$-1],te=b[$]-Z,ie=te>0?(N-Z)/te:0,Ce=d?l.length:l.length-1,Ue=$/Ce,rt=1/Ce;return Ue+ie*rt}return 1},[l.length,b,m,d]),C=wr(()=>p?{position:new Sf(l.map(z=>new sn(...z.position)),d,"catmullrom",.5),target:new Sf(l.map(z=>new sn(...z.target)),d,"catmullrom",.5)}:null,[f,p,d]),k=wr(()=>{if(!p||!l.every(M=>Number.isFinite(M.azimuthAngle)&&Number.isFinite(M.polarAngle)))return null;let z=l.map(M=>({azimuth:M.azimuthAngle,polar:M.polarAngle,distance:new sn(...M.position).distanceTo(new sn(...M.target))}));for(let M=1;M<z.length;M+=1){let O=z[M-1].azimuth,N=z[M].azimuth;z[M].azimuth=N+Math.round((O-N)/(Math.PI*2))*Math.PI*2}return z},[f,p]),y=an(0),j=an(0),L=an(new sn),w=an(new sn),I=an(!1),U=an(0),_=an(!1),S=an(null),A=wr(()=>new sn,[]),G=wr(()=>new sn,[]),v=wr(()=>new S1,[]);return Ts(()=>{y.current=0,U.current=0,j.current=0,_.current=!1},[f,d,m]),Ts(()=>{i&&(U.current=0,y.current=0,_.current=!1)},[i]),Ts(()=>{if(!n){I.current=!1,y.current>0&&!i?U.current=y.current:i&&(U.current=0),(y.current>0||_.current)&&s?.();return}y.current>=m&&!d&&(y.current=0,U.current=0,_.current=!1);let z=e.current;if(z&&(z.getPosition(L.current),z.getTarget(w.current)),i||_.current||U.current===0?(y.current=0,U.current=0,_.current=!1):U.current>0&&U.current<m?y.current=U.current:(y.current=0,U.current=0),j.current=0,!p){let M=t.current;if(M){let O=new w1().setFromObject(M).getBoundingSphere(new M1);S.current={center:O.center.clone(),radius:O.radius>0?O.radius:1}}}I.current=!0,c()},[n,p,e,t,c,m,d,f,i,s]),Ts(()=>{if(!n||!a)return;let z=e.current;if(!z)return;let M=()=>{_.current||a()};return z.addEventListener("controlstart",M),()=>z.removeEventListener("controlstart",M)},[n,e,a]),v1((z,M)=>{if(!n||!I.current)return;let O=e.current;if(!O)return;y.current+=M,j.current+=M;let N=P(y.current),$=!d&&y.current>=m;if(N=d?N%1:Math.min(N,1),C)if(C.target.getPoint(N,G),k){let te=d?k.length:k.length-1,ie=Math.min(N,1)*te,Ce=Math.min(Math.floor(ie),te-1),Ue=(Ce+1)%k.length,rt=N>=1?1:ie-Ce,gt=rt*rt*(3-2*rt),Fe=k[Ce],ze=k[Ue],nt=ze.azimuth+Math.round((Fe.azimuth-ze.azimuth)/(Math.PI*2))*Math.PI*2,dt=Fe.azimuth+(nt-Fe.azimuth)*gt,bt=Fe.polar+(ze.polar-Fe.polar)*gt,pt=Fe.distance+(ze.distance-Fe.distance)*gt;v.set(Math.max(pt,1e-6),Math.min(Math.max(bt,1e-6),Math.PI-1e-6),dt),A.setFromSpherical(v).add(G)}else C.position.getPoint(N,A);else{let te=S.current;if(!te)return;let ie=N*Math.PI*2,Ce=te.radius*2.2;A.set(te.center.x+Math.cos(ie)*Ce,te.center.y+te.radius*.6,te.center.z+Math.sin(ie)*Ce),G.copy(te.center)}let Z=Math.min(j.current/C1,1);if(Z<1){let te=Z*Z*(3-2*Z);A.lerpVectors(L.current,A,te),G.lerpVectors(w.current,G,te)}if(O.setLookAt(A.x,A.y,A.z,G.x,G.y,G.z,!1),$){I.current=!1,_.current=!0,y.current=0,U.current=0,o?.();return}c()}),null}import{useRef as Ln,useState as T1,useCallback as Mr,useEffect as _1}from"react";import{jsx as Ft,jsxs as eu}from"react/jsx-runtime";var P1={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},E1={up:"4 16 12 8 20 16",down:"4 8 12 16 20 8",left:"16 4 8 12 16 20",right:"8 4 16 12 8 20"},_s=({direction:e})=>{let t=P1[e],r=E1[e];return eu("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[Ft("polyline",{points:r,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),Ft("polyline",{points:r,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Ir=16,A1={"bottom-left":{bottom:Ir,left:Ir,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Ir,right:Ir,top:"auto",left:"auto",transform:"none"},"top-left":{top:Ir,left:Ir,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Ir,right:Ir,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:Ir,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},R1=({controlsRef:e,enabled:t=!0,opacity:r=.9,moveSensitivity:n=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=Ln(null),[s,c]=T1({x:0,y:0}),l=Ln(!1),p=Ln({x:0,y:0}),d=Ln(void 0),h=Ln(void 0),m=Ln(null),f=Ln(0),b=()=>e.current,P=(v,z,M)=>{let O=Math.hypot(v,z);if(O>M){let N=M/O;return{x:v*N,y:z*N}}return{x:v,y:z}},C=v=>{let M=Math.abs(v);return M<.12?0:Math.sign(v)*((M-.12)/(1-.12))},k=Mr(()=>{let v=()=>{let{x:z,y:M}=p.current,O=C(z),N=C(M);if(t&&(O!==0||N!==0)){let $=b();$&&$.rotate(-O*i,-N*i,!0)}d.current=requestAnimationFrame(v)};d.current=requestAnimationFrame(v)},[t,i]),y=Mr(()=>{d.current&&cancelAnimationFrame(d.current)},[]),j=Mr((v,z)=>{if(!a.current||!l.current)return;let M=a.current.getBoundingClientRect(),O=M.left+M.width/2,N=M.top+M.height/2,$=M.width/2-18,Z=v-O,te=z-N,ie=P(Z,te,$);c(ie),p.current={x:ie.x/$,y:ie.y/$}},[]),L=Mr(v=>{if(!t)return;v.preventDefault(),v.stopPropagation(),l.current=!0,k();let z="touches"in v?v.touches[0]:v;j(z.clientX,z.clientY)},[t,k,j]),w=Mr(v=>{if(!l.current)return;v.preventDefault();let z="touches"in v?v.touches[0]:v;j(z.clientX,z.clientY)},[j]),I=Mr(()=>{l.current=!1,c({x:0,y:0}),p.current={x:0,y:0},y()},[y]),U=n*10,_=Mr(v=>{t&&b()?.forward(v*U,!0)},[t,U]),S=Mr(v=>{t&&b()?.truck(v*U,0,!0)},[t,U]),A=Mr((v,z,M)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),m.current={control:v,amount:z,action:M},f.current=0,M(z);let O=N=>{if(!m.current)return;if(f.current===0){f.current=N,h.current=requestAnimationFrame(O);return}if(N-f.current>200){let{amount:Z,action:te}=m.current;te(Z),f.current=N}h.current=requestAnimationFrame(O)};h.current=requestAnimationFrame(O)},[t]),G=Mr(v=>{m.current?.control===v&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),m.current=null,f.current=0)},[]);return _1(()=>(window.addEventListener("mousemove",w),window.addEventListener("mouseup",I),window.addEventListener("touchmove",w,{passive:!1}),window.addEventListener("touchend",I),window.addEventListener("touchcancel",I),()=>{window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",I),window.removeEventListener("touchmove",w),window.removeEventListener("touchend",I),window.removeEventListener("touchcancel",I),y(),h.current&&cancelAnimationFrame(h.current)}),[w,I,y]),t?Ft("div",{className:"mc__wrapper",style:{opacity:r,...A1[o]},children:eu("div",{className:"mc__dpad",children:[Ft("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>A("up",1,_),onMouseUp:()=>G("up"),onMouseLeave:()=>G("up"),onTouchStart:v=>{v.preventDefault(),A("up",1,_)},onTouchEnd:()=>G("up"),onTouchCancel:()=>G("up"),children:Ft(_s,{direction:"up"})}),eu("div",{className:"mc__middle-row",children:[Ft("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>A("left",-1,S),onMouseUp:()=>G("left"),onMouseLeave:()=>G("left"),onTouchStart:v=>{v.preventDefault(),A("left",-1,S)},onTouchEnd:()=>G("left"),onTouchCancel:()=>G("left"),children:Ft(_s,{direction:"left"})}),Ft("div",{ref:a,className:"mc__joystick",onMouseDown:L,onTouchStart:L,children:Ft("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),Ft("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>A("right",1,S),onMouseUp:()=>G("right"),onMouseLeave:()=>G("right"),onTouchStart:v=>{v.preventDefault(),A("right",1,S)},onTouchEnd:()=>G("right"),onTouchCancel:()=>G("right"),children:Ft(_s,{direction:"right"})})]}),Ft("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>A("down",-1,_),onMouseUp:()=>G("down"),onMouseLeave:()=>G("down"),onTouchStart:v=>{v.preventDefault(),A("down",-1,_)},onTouchEnd:()=>G("down"),onTouchCancel:()=>G("down"),children:Ft(_s,{direction:"down"})})]})}):null},Cf=R1;import{HexColorPicker as L1}from"react-colorful";import{jsx as Ps,jsxs as Tf}from"react/jsx-runtime";var tu=({colorPicker:e,onClose:t,itemMaterials:r,setItemMaterials:n,inline:i=!1})=>Tf("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:o=>o.stopPropagation(),children:[Ps("p",{className:"ri-popoverLabel",children:"Color"}),Ps(L1,{color:r[e.objectId]?.hex??"#ffffff",onChange:o=>n(a=>({...a,[e.objectId]:{...a[e.objectId],hex:o}}))}),Tf("div",{className:"ri-inlineRow",children:[Ps("span",{className:"ri-colorCode",children:r[e.objectId]?.hex??"#ffffff"}),Ps("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});import{jsx as et,jsxs as Br}from"react/jsx-runtime";var ru=({materialPopup:e,textureUrl:t,triggerFileUpload:r,clearTexture:n,inline:i=!1,offset:o,rotationDegrees:a,onOffsetChange:s,onRotationChange:c,isPositioning:l=!1,onEndPositioning:p})=>Br("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:d=>d.stopPropagation(),children:[et("div",{className:"ri-popoverHeader",children:et("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),Br("div",{className:"ri-materialBody",children:[t?et("div",{className:"ri-previewFrame",children:et("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):Br("div",{className:"ri-emptyState",children:[et("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:et("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909M3 21h18M3 3h18"})}),et("span",{style:{fontSize:12},children:"No texture applied"})]}),et("button",{onClick:()=>r(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&et("button",{onClick:()=>n(e.objectId),className:"ri-removeButton",children:"Remove texture"}),et("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}),t&&(s||c)&&Br("div",{className:"ri-texturePosition",children:[et("p",{className:"ri-texturePositionLabel",children:"Texture position"}),Br("div",{className:"ri-texturePositionGrid",children:[Br("label",{className:"ri-texturePositionField",children:[et("span",{children:"Offset X"}),et("input",{type:"number",step:.01,value:o?.[0]??0,onChange:d=>s?.(e.objectId,0,Number(d.target.value))})]}),Br("label",{className:"ri-texturePositionField",children:[et("span",{children:"Offset Y"}),et("input",{type:"number",step:.01,value:o?.[1]??0,onChange:d=>s?.(e.objectId,1,Number(d.target.value))})]})]}),Br("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[et("span",{children:"Rotation"}),Br("div",{className:"ri-texturePositionSliderRow",children:[et("input",{type:"range",min:0,max:360,step:1,value:a??0,onChange:d=>c?.(e.objectId,Number(d.target.value))}),et("input",{type:"number",min:0,max:360,step:1,value:Math.round(a??0),onChange:d=>c?.(e.objectId,Number(d.target.value))})]})]}),l?et("button",{type:"button",className:"ri-uploadButton",onClick:p,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):et("p",{className:"ri-texturePositionHint",children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically."})]})]})]});import{Fragment as k1,useEffect as nu,useRef as D1,useState as iu}from"react";import{Fragment as ou,jsx as ut,jsxs as vi}from"react/jsx-runtime";function _f({entries:e}){return ut(ou,{children:e.map(([t,r])=>{let n=r!==null&&typeof r=="object",i=n?Object.entries(r):[];return n&&i.length>0?vi("div",{className:"left-panel__data-group",children:[ut("span",{className:"left-panel__data-key",children:t}),ut("div",{className:"left-panel__data-children",children:ut(_f,{entries:i})})]},t):vi("div",{className:"left-panel__data-row",children:[ut("span",{className:"left-panel__data-key",children:t}),ut("span",{className:`left-panel__data-value left-panel__data-value--${typeof r}`,children:n?Array.isArray(r)?"[]":"{}":String(r)})]},t)})})}function O1({content:e}){let t=e!=null,[r,n]=iu(t),[i,o]=iu(t),a=D1(e);return t&&(a.current=e),nu(()=>{if(t){n(!0);return}if(r){o(!1);let s=setTimeout(()=>n(!1),300);return()=>clearTimeout(s)}},[t,r]),nu(()=>{if(r&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[r,t]),r?ut("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:ut("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function au({isOpen:e,selectedObject:t,currentAction:r,onClose:n,onAction:i,renderActionExtra:o}){let[a,s]=iu(t);nu(()=>{t&&s(t)},[t]);let c=t??a,l=c?Object.entries(c).filter(([p])=>p!=="actions"):[];return ut("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&vi(ou,{children:[vi("div",{className:"left-panel__header",children:[ut("p",{className:"left-panel__title",children:c.label}),ut("button",{onClick:n,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&ut("div",{className:"left-panel__data",children:ut(_f,{entries:l})}),ut("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&vi(ou,{children:[ut("div",{className:"left-panel__actions-label",children:"Actions"}),ut("div",{className:"left-panel__actions-list",children:c.actions.map((p,d)=>{let h=r?.action.id===p.id&&(r.binding===c||r.binding?.id===c.id||r.binding?.modelObjectId===c.modelObjectId||r.objectId===c.id||r.objectId===c.modelObjectId),m=o?.(p.id);return vi(k1,{children:[ut("button",{onClick:f=>i({objectId:c.modelObjectId||c.id||"",action:p,binding:c,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${p.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":p.id,"data-label":p.label,children:p.label}),ut(O1,{content:m})]},d)})})]})]})})}import{useMemo as B1,useState as Ef}from"react";import{Boxes as z1}from"lucide-react";import{useState as I1}from"react";import{jsx as zr,jsxs as zo}from"react/jsx-runtime";function Pf({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:r,title:n,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:c,onToggle:l,openButtonIcon:p,closeButtonIcon:d,closeButtonAriaLabel:h}){let[m,f]=I1(!1),b=c!==void 0?c:m,P=C=>{c===void 0&&f(C),l?.(C)};return zo("div",{className:`ri-sidepanel-wrap ${b?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!b&&zo("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>P(!0),"aria-label":t,title:"Open panel",children:[p,e?zr("span",{children:e}):null]}),zo("div",{className:`ri-sidepanel ${b?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!b,children:[zo("div",{className:"ri-sidepanel__header",children:[zo("div",{className:"ri-sidepanel__header-top",children:[zr("span",{className:"ri-sidepanel__eyebrow",children:r}),zr("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>P(!1),"aria-label":h,title:"Close",children:d??zr("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:zr("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),zr("p",{className:"ri-sidepanel__title",children:n})]}),zr("div",{className:"ri-sidepanel__search-wrap",children:zr("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:C=>o(C.target.value)})}),zr("div",{className:"ri-sidepanel__list",children:s})]})]})}import{jsx as kn,jsxs as N1}from"react/jsx-runtime";function su({objectBindings:e,onAction:t,onFocus:r,onHover:n,isOpen:i,onToggle:o}){let[a,s]=Ef(null),[c,l]=Ef(""),p=B1(()=>Object.entries(e).filter(([d,h])=>{let m=c.toLowerCase();return d.toLowerCase().includes(m)||(h.label??"").toLowerCase().includes(m)}),[e,c]);return kn(Pf,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:kn(z1,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${p.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:i,onToggle:o,closeButtonAriaLabel:"Close scene objects panel",children:p.map(([d,h])=>{let m=h.visible!==!1,f=a===d;return N1("div",{onClick:()=>r(h),onMouseEnter:()=>{s(d),n?.(h)},onMouseLeave:()=>{s(null),n?.(null)},className:`ri-sidepanel__row${f?" ri-sidepanel__row--hovered":""}`,children:[kn("span",{className:`ri-sidepanel__label${f?" ri-sidepanel__label--hovered":""}`,children:h.label??d}),kn("button",{type:"button",onClick:b=>{b.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:m?"Hide":"Show",children:kn("span",{className:`ri-sidepanel__checkbox${m?" ri-sidepanel__checkbox--checked":""}`,children:m&&kn("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:kn("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}import{AlertTriangle as Os,Box as Wf,Camera as gM,Download as bM,Eraser as yM,FileImage as vM,RotateCcw as xM,ChevronLeft as wM,Square as Xf,ChevronRight as MM,RectangleGoggles as SM,QrCode as CM,X as bu,Expand as TM,Play as _M,Pause as PM,Smartphone as qf,PencilRuler as EM,RulerDimensionLine as AM,Grid3X3 as RM,Orbit as LM}from"lucide-react";import{useRef as tt,useEffect as No,useMemo as Qt,useCallback as Es,useSyncExternalStore as V1}from"react";import{useThree as G1,useFrame as H1}from"@react-three/fiber";import{Sphere as W1,PivotControls as X1}from"@react-three/drei";import{Vector3 as lr,Vector2 as q1,AdditiveBlending as lu,TextureLoader as $1,Matrix4 as Y1,Quaternion as xi,Euler as As}from"three";var Af="data:image/png;base64,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";var Rf="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAC4gAAAuIAHVHB4bAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzt3Xd4HOXVBfBzZ1eSe6djYqoNwloZDJgaJ0AgIZ2IAJINIcS00D5CCASCCaQBAULHAWIsyQYEhEAILQ6mmRI3ych0MGCae5VVdud+f0gQbFyk3Zm5U87veXgSZM3MAaSZszPzvq+AiBJD761IYVjxN+DK4RDZFnBbAXkb6jwk5ZNmW+cjouCIdQAiCobWj9kPcO8ApHQj3/IYnOw4GX73B4EGIyITLABECaD1Y74O6CMAum3mWxchp6Nlr9p5QeQiIjssAEQxp40VA5AteQPAwE5u8jbWtAyXA+rW+pmLiGw51gGIyGe5bmej8xd/ANgZPYpP9ysOEYUDCwBR3Kn+sMvbiHOcD0mIKERYAIhiTBUCYGgeW5Z2bEtEMcUCQBRnDWN6ACjKY8tuHdsSUUyxABDFWbo5/0/xhWxLRKHHAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAmUtg5A9rSxohjZ4uMAORaCDFRKIPo2VP8NOH+VTPW71hmJqGu04fidoHIyRA6Dys4QbYFiDoC7kW65W0rrWq0zki2xDkC2dO6xg6Hp+6HYZyPf0gLgtyir+YMINMhsVDhtrOiFbMmqvDZOt/SW0rrVHkcin6lCUF91MQS/BlCy4e+SlwH3aMnULgg0HIUKHwEkmDZWDICbfnITF3+g/QTyOzRU3hxULiIqQH3VrRD8Fhu9+AOA7gvIE9pwfP/AclHosAAkWVvJ1QCGdu6b5VSdU3mSr3mIqCA6p/IkCMZ18tt3hzpX+hqIQo0FIKG0vnJ7CMZ2aSNxrtJXxw70KRIRFUAbju8PkT91cbOTdO6xg30JRKHHApBYcjSAVNe20QFo1Yt9iUNEhdHUbwAM6uJWDnKp7/sRh8KPBSC5hue3mZ6h9VWdfGxAREFo/53UM/La2JFSj+NQRLAAJJYW57lhEQR/9jQKERWm/XeyKK9tXeR7LqCIYwFIKpH5eW+rOErrq470LgwR5UvrKw+F4qgC9jDfszAUKSwASaV4ssAdXK1PjeZEUkSGOn4H/1LYTjDVmzQUNSwACSWZmmcBmVnAHkoxcPAp3iUioi4bOPgUoJBn+DJTRtQ+710gihIWgCRz3bOBAmb3U72cwwKJbGjD8f2hOr6gnQjO8yYNRRELQILJiNrnIagrYBf9OSyQyIg6l6Lrw/6+QO6RsuqnPctDkcMCkHSq5wFYU8AOfq5zTuAwIqIAdQzFPb2AXaxFLneBV3komlgAEq5jMZCrC9hFGk6uq7OPEVFhrkG+w/7aXSl7TX7PqzAUTSwABKxp+ROA/E8GHBZIFBitrzwUwLcK2MUCQK7yKg9FFwsAQQ6oWwvgwgJ3c43OGFfIJxIi2gy9tyIFyHWF7UXOl0x1AY/9KC5YAAgAIJmaKQCeKWAXu6N4bWdXISOifAwrOQ3Annlvr5iOsup7vAtEUcYCQP+jzjkAcvlvz2GBRH5pH/aHSwvYhYuUnC1SwNBfihUWAPqclE+aDeBvBeyCwwKJ/FL4sL87ZHj1DM/yUOSxANB65NcAVuS/PYcFhsrCRc0A3Dy2zHVsSyGgDccNQ2HD/lYhnfqNV3koHlgAaB2SqV4I1csL2AWHBYaIfG1aFsBHeWz6Xse2FAaayn+1PwBQjJfSiZ94F4jigAWAvizb83oAr+e9PYcFhs3jeWzzsOcpKC8FD/tTvIWe/W/yLhHFBQsAfYmMnNAGt+A5wjksMDyuAtCVT/NrkXau8SsMdZ4nw/4cOVt2vaHFo0gUIywAtEEyouYRAI8WsAsOCwwJydS8DnT67XGF6jgpnfS+n5mokwof9veklFX/y7tAFCcsALRxaZwFoDXv7TksMDQkU/N7iFwAoG0T37YMqkdLeW1NULlo4zwY9tcGwZmeBaLYYQGgjZLSmregKOTZIYcFhoiUVV8J1y0F9HoI5qF9EajFAF4E5CKIu7OU1/7dOCZ9ptBhf4IbOu7+EG2QWAegcNMXK/ugu7wOYOs8d5GFpsql/K5GL3MRxZk2HDcMmmpA/m/+L4SbHiojJi73MhfFC+8A0CbJqNqVECnkNiSHBRJ1VaHD/kQv5sWfNocFgDZv+M63A8h/BjEOCyTqNA9W+5uD11rv9CoPxRcLAG2WyHgXrp4DFDSHOIcFEm2GPjU6XfCwP5Fz5Ji6/Nf0oMRgAaBOkRG1z0NQV8Audkdx0ymeBSKKo/7bFTbsD3KPlFU/7VkeijUWAOo81fPQ/uZ4ntvjtxwWSLRh2nB8f4gUMl//WuRyF3gWiGKPBYA6TTK1CwBcXcAuOCyQaGMKXu0PV8pek9/zKg7FHwsAdc2alj8BKOAkw9UCidbnwWp/CwC5yqs8lAwsANQlckDdWgAXFrALDgskWl+hw/4g50umOv/Hc5RInAiI8qL1VU8DOKSAXXxTMjWPeZWHKKrah/3Jv/PfAaYjU3OQSEGjdCiBeAeA8qPOOQAKGWrEYYGUeB4M+3ORkrN58ad8sABQXqR80mwAfytgFxwWSFT4sL87ZHh1/pN0UaKxAFAB5NcAVuS9OYcFUoJ5MOxvFdKpQranhGMBoLxJpnohgCsK2EV/tLqXeJWHKFJUxqOQYX+ql0npxE88y0OJwwJAhUm3XA+gkCVHz+CwQEqa9mF/clr+O8Bb6DngRg8jUQKxAFBBpLSuFS7OK2AXHBZIyVPosD9HzpZdb2jxLhAlEYcBkie0vupfAL6Z9w7EOVzKJuU/FIooInRu1eFw8UQBu3hUMjWFrBZIBIB3AMgrkvs/AG15b6/upd6FIQoxVy8rYOu2jt81ooLxDgB5RudUXQPBuflujnR6W77UlB+dUdEX3Uu2QFYGQjAQLgZC3IFQDIRICRR9AQCCEgA9OjbrjfbS1tzx9yugcCHIQbES0CY4zhIolsDRJci6i5B2l6ClzxIZOaEp+H/K6NNZx26LVPrDvHcguEbKagp55Eb0ubR1AIoRTf8Wkq0CsEUeWwvaWncHwAKwAfpiZR+UYChSzhCoDgEwBMCOX/jfbsgCgAKKjmov/6v4na3663y/ANoxv4wLwHEA1wGKmqD1VcsAzIdgPlzMh8h8AO8CeBfp5jektK61gH/c+EoX7wF18916EXLpy72MQ8nGAkCekRETl2vDmIuhelt+OxA+ksJnnxKL9gZ0bwB7QFAKxTAAzucXZHv9AfSHYkR7WfhCrmxJVuur3gdkHqAzIdII15mHzF3zEj9jnZtzIHneeBW5WEZMXO5tIEoyFgDy1mvNd2BoyWkAyvPYupDhhJGkr44diJbc/nCcA6F6IIC9AfRY54IavUtmGsBOgO4E4NtQBSQHNFQt03q8AOh0uPI8cj1eTtyjBFdfRyqvAjAHrzXf4XUcSja+A0Ce04bjD4E6T3dxs5ckUzPKl0AhonOP2wpu6ggABwM4EMAwJPf3MAvBbCimQ/VpNGOqjKpdaR3Kb9pQ9TIU+3RpI3G/KmWTn/EpEiVUUk885DOtr5oI4ITOfjugh0umdqqPkUzovRUpDCsqB5zDoPgOgP3B0TcbkwNkDqD/hLgPY/jkWXF8ZJDHMMC7JFNzol95KLlYAMgXWj+mJ6AvolMLnchFkqn+g++hAqKNFb2QLfkOgB8AOAztz8up6z4C8ChEHkBr9ydl5IT8h5mGTMe7Mp15oa8BkAMkU73G91CUOCwA5BttOL4/1KkBsJFJS2QpgDMkU313kLn8oO+e2A0rc4cDbgUgPwDQyzpTzCwH9GHAqUNb98fiUAa0vuo4QG4EdMAGv0HwCHLpKr74R35hASBfqUJQX3k4HDkVigyAAYC8DXWnQpw/dywoFEl6b0UKQ7t9C9DjAXwHQE/rTAmxGIoHIKiRTM2z1mEKofVjtgT0fABfB7ATgKUQ1ENwC/as+XccH4FQeLAAEHWRzhm7HRy3CorTAHzFOk/CvQHBnVD5W5TLJJEFFgCiTmh/ma/716DuOLQ/2+cQ2nBpBeQJCCbhteYH5Ji6nHUgorBjASDaBG2sGIBst1MgeiYU21jnoU5QvAXRa9HWc2Li5hkg6gIWAKIN0PoxOwLuOYD8FHy2H1UrAL0LwFWSqV1gHYYobFgAiL5A6ytHAfILAN8HkLLOQ55ogUgtsu6fZa/aedZhiMKCBYAIgM4dWwbXvRhAhXUW8o0L4H4Al0imJnHTThOtjwWAEk3rx+wJ6G8A/Aj8fUiK9iLgur+WEZPftA5DZIUnPEoknTtmd7h6GXjhT7I2AHch7VwupZPetw5DFDSe+ChR2mcnlPGAnA4O5aN2rYDeipKSi2XYnauswxAFhQWAEkGfGp3GwMEnQfUKAFtY56FQ+ggil2H4zreLjHetwxD5jQWAYk/rKw8F5FoAw62zUBTITKicI+WTnrNOQuQnFgCKLZ0zdjvAvRGC71tnochRqN6FotbzpLRuqXUYIj+wAFDsqELQUDWm/VP/RlZaI+qchQDOl0zNJOsgRF5jAaBY0bkn7Aw3NwHtq6sReeVfSDuncbQAxQkLAMWCPjU6jQHbXQDIxQC6WeehWFoFwUUYXnMTl+mlOGABoMjT2ScOgZOtBnCQdZZQSfcGUr06/uoGON3bv+4UAVLc/v+1FWj5BGh6B+A1rbOmQp0TpHzSh9ZBiArBAkCRpg1jKqA6AUA/6yyBcoqBkm2A4i2A4i2gRYOAokFA8ZZAug+Q7oUu/XpnV0AWPQIseQJQjoDrhOWAnCaZ6rutgxDliwWAIklnVPRFuuQmCCqts/gu3RfosRPQbQdoyfZA98FA8daAON4fa/U8yHvXAW6z9/uOJa1GuvV0Ka1bbZ2EqKtYAChytL7qYEBqAR1sncV7AnTbDui5G7T7rkDPXds/1Qdp5WzIe9cGe8xoewPAcZKpmWUdhKgrWAAoUrRhzDio3gigyDqLZ9K9gV7Dob2GA73L2v/emLx/PbBihnWMKGkB8HPJ1NxuHYSos1gAKBJ0ekV39Ci+GSInWmfxRMnWQN/9oL3L22/vh+1XcVU9ZP6frVNEkFZjTespckDdWuskRJsTsrMO0ZdpY9UuyOIBRH0q3+ItgH6joH32Bbp/xTrNpuWaIPNOtU4RVbPgpo+WERPnWwch2hQWAAo1nVP5bYjUAOhrnSUvTkn7Rb//V4Eeu1in6RJ55SeA5qxjRNUiuDhGRtRMsw5CtDEsABRaHc/7b0IUl+3tPgTafzTQb38g1d06TdfxDoAXslD8XMprbrMOQrQhLAAUOh1z+V8K4FLrLF0iDtB3H+jAI4EeO1unKQxHAnhIr0dZ7TmcPZDChgWAQkXrx/QE3FpAvmedpdOcbsCAQ6ADj2h/zh8DMv/PwKp66xhxUoc+6bGy40ROsEChwQJAoaGNJ26NXPYhKPaxztIpqR7tF/1B3wBSPa3TeGf5S5APbrJOEUdPI93yQy4vTGHBAkChoI1jd0CbOxWC8L8p53QDBn0DOujI9nn242Tl7PaLv9tqnSSuXoU6h3MdAQoDFgAyp/VjdgR0KoAdrbNskqSBQYdDB307FJP1eKp1IWTRw8DSZ8BFgXz3LsQ9TMomv2MdhJKNBYBM6dwxu8PVfwPY1jrLJvXZG7rNccFPy5sPtxVoWwJkVwG51UB2NZBbBcmtaf9zzQJuS/v/z64AWhcCzQvs8ibT+3Ddw2TE5Detg1BysQCQGa2v2gvA4wAGWWfZqG6DodscD/QqtU6yLs21L+Pb/AGk5QOgdVHHX4vbL+oUBZ/Ccb4hwyc1WAehZGIBIBNaXzkKkMcQ1gl+nG7QrX4EDDzMn1X3uqp1IbDmDUjTm8Dad9s/sWvWOhUVbknHOwGzrYNQ8rAAUOD0laoMcvIfQAdYZ9mg3hnoticAxYY3JtqWAqsaIKtfAZreANqW22Uhvy2GpkZL+V2N1kEoWVgAKFBaXzUUwNMAtrLO8iXp3tCtjwf6H2hwcAWa3oasnNU+/r75A4MMZGghgEMkU/O6dRBKDhYACkzHoj5PI4wv/PUZAd3up0C6T7DHXfsuZMVLwPKX2l/cowSTD+CmDuEiQhSUyBQAnXvcVlDpiVzxUhkxkfdDI0bnHjsYbuoZQIYYR1mXUwzd+jhg4NcR2K9DdiWw7FnIsqfbX+Qj+oziLbjZr8ped39kHYW6RuvHbAnJ9UJr2xIZWReJN3FDXQD0xco+6I5fATIWwHYdX3YBNEDkFnTvd5fsekOLYUTqBJ1x3CAUpaYD2NU6yzq6fwU6+DSgJIgbEgqsngdZNg1YMZMv8NGmvIK2loOichFJMn3zzBKsXfYzqJwB6LAv/NFciNyGJR/cJl+bFtpf9tAWAJ1VuQdSzmOADt7Et70NwS+krObBwIJRl+i7J3bDiuxUCA6wzrKOgV+HblPVPrmPnzQLLH8RsvhRPtenzhNMQ/f+R/IDTnhpQ9X3obgawKZW/pqBNnxXRtZ8HFSurghlAdBXxw5EmzsXim06uclUiJ4rZbVzfQ1GXdK+qt+YGkCPt87yOSlqf8N/wCH+HsdtBpZMhSx5Amhb5u+xKK6moKymkqsIhos2VA6HyrUADu3kJq9jre4ro2pX+pkrH+EsAPVjJgD6sy5ulgXwVxQ7l8juk/g2VQhofdWVAM63zvG5ooHQHX7u71K9mm1/vv/pA5yQh7wwXjI1l1mHoI4Ppq3u5QB+BqCrtw5vlkzNGT7EKkjoCoA2nrg1stn3ABTnuYtlAC5DW4+bZeSENg+jURdofdXJAP5qneNzPYdBdzjTvzn8NQssndY+nz4/8ZN3FNCfSKb2LusgSaUzxhWhqOl0AJcC6J/nblZhTctWckDdWg+jFSwEU5ytp63tMOR/8Qfa/wNdh6KmV3RO5bc9SkVdoHOrDgdwi3WOz/XdF7rj+f5d/Fc3Qt66BPLRJF78yWsCyAStrzrYOkgSacPYw1DUNAvAdcj/4g8AvdG9eC+PYnkmfAXAkd082tNuEHlYG6r+2TH5DAVAG8fuABeT0fVbZP4YdAR0hzMAKfJ+3y2fQN67FvLun4Bmru5KvikGUKdzxm632e8kT2h91VBtqPon1H0SwJ6e7DQlQzzZj4fCVwDU44nXFUcBmKtzqq7R2Sf283TftA5998RuyLr3IwyL+0gKut3J0G0q4fmTLm2DfHof5M0LgZWcwp0CsRXEvU/fPLPEOkic6ewT++mcqmsAzO24dsRa+AoA9A0fdloEwblwsm/onKpT9N6KlA/HoFW5mwCMtI4BSUMHn+HPm/5Nb0LevARY+FD7inxEwRmFpmXXWIeII723IqVzqk6Bk30DgnMBeH/L0HVDt/Rz+ApAsfMIAL/Gvm4Bwa0YWjJX66uO9OkYiaT1ladD9STrHHCKoV85B+jrcQ9xWyEfTYK8fQXQwknayMzpOqfS/vcsRnR21WjsVjITglsBbOHTYRbgjbaZPu07b6EbBQAAOqfqmo4W5jP5JyR3tpRNfsf/Y8WXzjl+X4jzLAp7ebNwTkn7xb9Xqbf7bV4A+eAWTuRDYbEWKewve9bUWweJso7pyX8HyBj/D6Y/lfLaO30/TheFswDMGNcDRU2PAzgogMM1A3ot0q2/l9K61QEcL1a0fkxPQGcB8Orlzfw43aA7/hLosYuHO1Vg0b8gn97PqXspXATz0NpjHxk5ock6StRoY0UvZIsvAuRcAN0COOTtKKsZF8YJncL3CACAjJzQhHTLNwH5K+D7v7RugFyIXMkbWl95gur4UP47CS3VG2B+8S+GDvk/by/+udWQ+VdDPrmHF38KH8UeSK+50jpGlKiOd7S+8gTkSt4A5EL4f/FfDdWzwnrxB0J6B+CLdHblPnDwF0D2D+aIMhMq50j5pOeCOV506ZwxP4To/aYhJA3d4SygT7l3+1z7HuT964HWRd7tk8h7CuD7kql5yDpI2Onsyn0gcl1Aa5IogPuQdn4hpZPeD+B4eQt9AQA+m1O+agyAPwHYOpijyj/hps7k2twbpnPGbgdx6wEMNAshDnTw6UDffb3b5/LpkA/vBNxW7/ZJ5J9FaEMmrIvNWGs/T+X+AEgVgrnezYI6Z0flA2QkCsBnOp43nw/gVwCCGA/bBMUNKGq5gu8H/I/qeAcNbz0J4OumObY72cOhfgr55F5g0SMe7Y8oMI+hrOZbYb3NbEGnV3RHr5KzoPg1AJ+mAF3HEgCX4/WWG+WYusiMD45UAfiMNlbtgix+D6AioEN+COAilNVU85cM0IYxZ0D1RtMQW30fuuUPvdmXZiELbgeWT/dmf0SBk5MlU32HdYow0Pox3wHc6wEZEsDh2gC9BW2tv5GRdZFb/SuSBeAzWl95KCDXwaupGjdLXobIOVI26YVgjhc+OuvYbZFKzwPQ1yxEv1HQwafBkx/f3GrIe9cDa14rfF9EdlZAnVIpn5TYOam1vmovtM/ZH9S6CVMBOUcy1a8EdDzPRboAAIA+NTqNgYNPgurvEMwUtApoDdJFv5TSiZ8EcLxQ0fqqfwD4rlmAnkOhO14AiAdLDWRXdMzjv6DwfRHZu18yNT+yDhE0nXHcIBQ5lwByBoAgZnl9GyIXSll1XQDH8lXkC8BntLFiALLFlwb4Q7AGwNXok/6j7DixOYDjmdOGyuOhUmsWoGggdJfferOqX9uS9ot/S+I6HMWZytFSXv2AdYwgfL5Mr+C3UPQJ4JBNAK6K0zk/NgXgMzp3zO5w3WsBOSKgQ74P4BLJ1EwK6Hgm9NWxA9HqzgOwpUkAKYLufDHQfcfC99W6GPLuH4HWhYXviyhcPoG4e0jZ5FivS93+nF+vBbBzEIdDRIb1dVXsCsBnOn5A/gLAgytGZ8hTcOQcGT6pIZjjBUvrqyYCOMHs+Nv/DOjvwaO91oWQd34HtMX6/EhJJrhNympOtY7hB204bhg0dQ2AbwZ0yEgN6+uq2BYAANDGimJkS04DcDmCGQriAloLOL+QTHVsPl5qw/F7Q52XYTVz5MBDodt60D3alkHeuYIT/FDcuRB3XymbHLrFZ/L1hUe8pwPw4AWgzYrksL6uinUB+IzWV24POH8C9DgE88+8DILfYHjNTVEfNtgxCdOzAA40CdD9K9CdLy38pb/sCsg7vwdaOF8KJcLzKKs5OPrnn/EO6t88AyKXAegfwCHbILgBrS2/jeKwvq5KRAH4jM6tOgAu/oKg1qxXPIie/Y+VXW/wa3lj3+mcMWMgavN+g1Pc/tJfybaF7Se3tv22f3OsHt8RbZrIMVF+U11nVPRFUcn9AA4N6IiPQ9xzpGxKYsYEJ2rhGxleMx1lu+wH1Z8C8P/1b8H3sWZZZCfn0BnjekD0CrPjb31c4Rd/zUE+uJEXf0oexZ91xrge1jHyoU+NTqOo5CEEcfFXvAXIdyVTe2SSLv5AwgoAAIiMd6W89k6s1aEArgLg76TvgkqdXXWUr8fwS3rNhQB2MDl27wwwsPCZhuXjGmDVXA8CEUWNDkbx2v+zTpGXAdufAcCreb43ZjVUL0TP/ntKpvphn48VSol6BLAhAU0r/B/J1AR0G8sbHTP+vQWge+AHT/eG7vrHwsf7L/pn+/z+RMm1GpCdo/RScsd7R28B2MmvQyCmw/q6KnF3ANYnpTVvSabmGEAPA+DXlI6jtbGil0/79oeTuggWF38Auk1l4Rf/1a9APr3Pm0BE0dULohdYh+iSOcfvAv8u/rOgziGSqTkm6Rd/gAXgc5KpnYq2HnsBOAeA14PEHWS7DfF4n77RxrE7QORkk4P3zgD9Clyyu3Ux5P2bAXW9yUQUZYrT20dCRYSTGuzDXj8F5GSU7bJPXMf054MF4Atk5IQ2ydT8BW253SC4DYB34z/Vic5wnKz7GwSz3PK6nBLotmML24e2Qd6/Hshx9WaiDt2g+JV1iE5z1MtpdtsguAZtLUMlU32HyHh+KviCxL8DsCkeTivchj7pPlGYP7rjnYh5AIoCP/Y2VcCgbxS0D1nwV2DZsx4lIoqNNkCGSqb6Xesgm6OvndQbLa3LUPiaLlOhqbOl/K5GL3LFEe8AbIIMr35VMrVHAvJdAIX84jwWhYs/ACCHS2Fw8Ue37YCBBb4nueK/vPgTbVgRoBdZh+gMGXbnKgBP5r0DxVsQOUYyNYfx4r9pLACdIJnqh7GmpRQil6B9FcCuaIW6ZmPpu0LnnrAzFMeZHHubSkAKKPxtSyEf/s27QETxc6I2jrUZ1ttV4v4B6PIshv8b1hfhCZCCxALQSXJA3Vopq74C0GGATEZnfzgVZ0n55Jf9TeeRXPZcBLOU8rr6jgR67VnADhSyYAKf+xNtWhpt7jnWITpDyiY/A8G1nfx2BbQauexQKa/9Y5RnXg0a3wHIUyemFV4FkZ9GpYm2L7ZR8j6AnoEeWNLQ3f4IFBewyvDixyAfT/YuE1F8rYKb3kFGTFxuHWRzVCGorzoXgj9h4wsAzYA4Z0nZpBeCzBYXQayqFEsyvGa6KvZFQ9VBUFRBkEH7uPn3AEyFuJMitSZ3rtvpgAZ78QfaX/or5OLfuhjy6f3e5SGKt95IZU8B8CfrIJvTvpBRzTVaX3kvICcDOgoig6FYDKAR6kxGZtLzUV/wyBLvABD0zTNLsHbZu1BsE+iBnW7QoVcD6T5570LmX8Wpfom65iOkW3aU0jp/p0Gn0OM7AAQ0LRsT+MUfAAYdUdDFH8ue48WfqOu2RbbY5GVfChcWAAKAMwM/YqoHdFAB0yu4zZBP7vEuD1GiyNnWCcgeC0DCaX3lKABlgR934BFAKv/lEWThg0B2hYeJiBJlhDYcv7d1CLLFApB04vws8GM63dpv/+erdSGw+Anv8hAlksHvPoUKC0CC6Wsn9YZm1+SxAAAgAElEQVSqn8sgb9iA0UCqR96by8eTAc16l4coiRSV+tpJBS67SVHGApBkzW2VAII9AYgDHXhY/ts3vQmsnOVdHqLk6oWWtmOsQ5AdFoAkEw3+FmDffQsa988x/0ReMjgHUGiwACSUzj6+HMBegR934JH5b7x6XvtfROSV/bR+TCHzcFOEsQAklUjw44C77wj02CnvzWXhgx6GISIAgLo/to5ANlgAkkrk6KAPqQNG57/x6nnAmtc8y0JEHSw+DFAosAAkkNaP2Q/AzoEe1OkG9B2V9+ay5DEPwxDRF+ys9VWBPw4keywASaQa/C2/fvsDqe75bdvyMbCy3ts8RPQ/FucEMscCkDCqEAiCv/3f/5C8t5XFjwFc8IvIPyLHqnJxuKRhAUiaOZUHANgh0GMWbwn0yPOJQ241sPx5b/MQ0fp2QMOYfa1DULBYAJJG5DuBH7Pf/vlvu+x5wOWqpUS+U/fb1hEoWCwASSP4ZtCH1L75f7CQZU97mISINkqcwM8NZIsFIEF0RtU2AIYHetCSbYBug/PbtulNoHmBt3mIaCN0r45zBCUEC0CSFMm3gIBf9Om3X96byrJnPAxCRJshKMLh1iEoOCwAiaLB3/7vVZ7nhjlgxUxvwxDR5vAxQIKwACSEPjU6DeDQQA+a7g302DG/bVc1tI8AIKIgHaH3VqSsQ1AwWACSYtD2+wLoF+gxe5ch3ycOsvJlb7MQUWf0x25Fe1uHoGCwACSF4uDAD9krz/cNNQusnO1tGCLqJOcg6wQUDBaApFAcGOwBBci3AKx+Fcg1eRuHiDpHNOBzBVlhAUiAjik+81+JJx/dtm9/ByAPsnqux2GIqPOEdwASggUgCeYeNxTAFoEes+du+W+7igv/EBnaUhurdrEOQf5jAUgCTQd+S0977Jrfhq2L2lf/IyI7Od4FSAIWgCQQHBD4MfMtAKt4+5/InPI9gCRgAUgC1X0CPV5Rf6A4vycOsvZNj8MQUR5GWgcg/7EAxJw2VhQDGBroQbvnOfkPAKxhASAKgd11xrgi6xDkLxaAuNOS3QEUB3rM7l/Jb7vsCqB1obdZiCgfJUi3FPAmL0UBC0DcZaUs6ENqyXb5bbjmDW+DEFH+JBf4uYOCxQIQd6LB/xJ32yGvzaR5vrc5iKgAGuzS4RQ4FoC4EwRbAJxioHjL/LZd+763WYgofxL83UMKFgtA3Cn2DPR4JdsBkuePVfMCb7MQUf6UBSDuWABiTOvH9ASwbaAHzXP4H3KrgbYl3mYhogLo9vruid2sU5B/WADiTJ0hgR+zeFB+2zV/6G0OIiqUYIWb3ws9FAksALGWLWBAfn60KM8CwOF/RCGkgZ9DKDgsAHHmyJDAj5nvI4DWRd7mICIvsADEGAtAnKkMCfyYed4BED7/JwohlwUgxlgAYs3gl7eoX37b8Q4AUfiIsADEGAtArDl5zsmbJ3GAVI/8tm1b6m0WIiqcYIh1BPIPC0Cs6VaBHi7VE4Dkt212padRiMgDijxn9aIoYAGIt4GBHi3VO7/tNAu4Ld5mISIvBHsOoUCxAMSUzhjXA0D3QA+a7pXfdtnVANTTKETkiV6cDCi+WADiqntzngPyC5Dv8//cam9zEJF3Vri8CxBTLABx1WZw606K8tvObfY2BxF5J8XHAHHFAhBXKTf4OwCSzm87t83bHETkHVeDP5dQIFgA4iqH/oEfM98CoFlvcxCRh9wB1gnIHywAcSUa7AuAAAsAURwp+BJgTLEAxJU4JcEfM5XfdiwAROFlcS6hQLAAxJYWB37IfF/my67yNgcRechlAYgpFoC4chF8AWj5JK/NpPUjj4MQkYeCP5dQIFgA4kok+Na+9h2gbVnXttEcsGKmP3mIqHAW5xIKBAtAbBk8AlAXsugfXdtm8eMAlwImCi9XWQBiigUgtvKdladAS54Clr/Yue9d/Qrk0/v8zUNEhRGHjwBiKs9xWxR+Vq/WK2TBrdDWT4Etjtrw0EDNAosfg3x6f/sjACIKMeVMXTHFAhBfrWZHVrf94r50GtBvFLTbkPaFgrKrIGvfAVa8DLQtNYtHRF2gyqU6Y4oFIK5UWyBim6FtCbDoERinIKJCOA4LQEzxHYD4srsDQETxoS4LQEyxAMQVWzsReYLnkrhiAYgrVa6xS0SFE55L4ooFIK5U+ZYdERXOlcXWEcgfLABxJeAvLREVTnSRdQTyBwtAXDlp/tISUeGcLM8lMcUCEFctTbwDQESFW5XjuSSmOEQ7xrS+qhkA5/EmonytlkxNb+sQ5A/eAYi3T60DEFGkfWwdgPzDAhBngnesIxBRpL1tHYD8wwIQa8ICQET5U7xlHYH8wwIQZ6ps70SUP+E5JM5YAGKNdwCIqAC8AxBrLABx5vCXl4gK4Lg8h8QYC0CcrWpuBJC1jkFEkdSE17JvWocg/7AAxJgcULcWwGvWOYgoghRz5Ji6nHUM8g8LQPzNsg5ARBHkyEzrCOQvFoDY09nWCYgoglyeO+KOBSDuRHkHgIi6Ls27h3HHAhB3rb1mAGixjkFEkbIc81pesQ5B/mIBiDkZOaEJwH+tcxBRhCim8QXA+GMBSALVadYRiChCRJ6yjkD+YwFIAsE06whEFCn/sQ5A/mMBSII1rdPB9wCIqHMWoqy60ToE+Y8FIAHaJwTiYwAi6gSRf4pArWOQ/1gAEkP+YZ2AiCJA8aB1BApGenPfoLNP7Adky5GSLYII5DlVF8BCQGZJpnqNdRwzuew/kErfBECsoxBRaK3GmuZ/W4ewpDOqtkFah8Nx+lpnyY+2QeVjLP1gpnxt2ibXgtnoxUDnjN0N4v4OwPcAFHkd0UAzFPcjlbpUht+VyDWutaHqZSj2sc5BRKF1n2RqKqxDWNA5Yw/quOYdjHh8UFoByO1IN/9eSuuWbugbNvgIQOeMOQLizgDwI8Tj4g8A3SCohJubrXMqv20dxgRv7RHRpoj+3TqCBZ1TeSbEnQbgEMTj4g8AfQE9D9mSWTp3bNmGvuFLBUDnjtkdovcB6O17PBu9IVKn9WP2sw4SODc9GeDLPUS0QauRan3IOkTQtL7quxD5C4CUdRaffAWu+6jOOnbb9f/gy3cAXFwJoFcQqQx1A/RW1fGJeglSRkycD+A56xxEFEIi90pp3WrrGEHSGeOKAFyL+Hzq35htkUr9cf0vrnMB1PoxWwL6reAymSrHK2+Nsg4RONFq6whEFEa5u6wTBK6kaTSAnaxjBEOO1caKAV/8yvqfgPfbwNfiK6eHWEcIXBPuAbDWOgYRhYnOx/DJz1qnCFwOSfoQWIRc8TqPvte92KsOCjSONXG2so4QNBlVuxKQRL7oQ0QbIc4diZz8RzDQOkKw1r3mrVsAHCwLNIs5d7F1AhOO3mQdgYhCowWS/at1CCPJuuYplnzxb9ctANnsy0jSW+Kq060jWJDhNdMBzLDOQUShcLcMn/KpdQgTbqLOgzkAL33xC+sUANnr7o8AmRZkIkNvYNlHyXvm9RnVW6wjEFEIuAm+I9gvPRWCj61jBELwkGSqF37xS19+4c/BLwG0BpXJSA7inLG5aRJjral1CrDu7SAiShp9QUbU/tc6hRXZcWIzXLnAOkcAlgHuL9b/4pcKgAyvngHRnyC+JaAVIidL2aREz3ctB9SthUhymz8RAZAvjQ1PGimvrgbkd9Y5fLQEwPekbPI76//BBof8SVntZKh7MIDn/U4WsKkQ9wApq55oHSQUUs1/AZCoiT+I6DPaiLJd/mmdIgwkU30xVH8I4A3rLB7KQVGLtLOXZGo2+Lh7s7Mf6dwTdobmRgGyJaDF3mf0maIZqp8glZsuw+/+wDpO2OicqmsgONc6BxEFTPVYKa+9xzpGmKhC0FA1AsCeALaERHJ64DWA+wFSbc9ubBGgz8R9+kPaDJ0zdjuI+zaAEussRBQQxVt4o2WYHFOXs45CdpIz6x9tkJRP+hDQv1nnIKIg6WW8+BMLAAG53OUAmqxjEFEg5iKz62TrEGSPBYA65n/AzdY5iCgAqheJjHetY5A9FgBqV+z8EYKV1jGIyFcvIVP7iHUICgcWAAIAyO6TlsDF1dY5iMg3CnV+kchFf2iDWADof5pargbwvnUMIvKDTJHySc9Zp6DwYAGgz8kBdWuh+mvrHETkudVQ+aV1CAoXFgBaV6a2FvGbAZIo2QRXtA/5JfofFgBahwi0Y0EoPickioc3kGq51joEhQ8LAH2JDK+ZDqDaOgcReUDkXCmti+viblQAFgDaCDkfwDLrFERUCP2HlFX/yzoFhRMLAG2QZKoXQuQS6xxElLcWuHq+dQgKLxYA2rjXmm8FMMM6BhHlQXCljJj8pnUMCi8WANqojsVCTgGQtc5CRF3yOnqnf28dgsKNBYA2STI1swC9yjoHEXWaC+BnsuPEZusgFG4sALR5PQZcBsE86xhE1AmKmyVT86x1DAo/FgDaLNn1hhao/hQA1w8nCrf30K34IusQFA0sANQpkql9EcCN1jmIaBNUTpFhd66yjkHRwAJAndfW4yIAb1vHIKINUPxNyqsft45B0cECQJ0mIyc0Qd2fgdMEE4XNJ3Dc86xDULSwAFCXSPnkpwC53ToHEX2ByhlSNpkzd1KXsABQ17U1nw/IB9YxiAiA4F4pr37AOgZFDwsAdZmMrFsBuD8BHwUQWVsElTOtQ1A0sQBQXiRTOxXQG6xzECWayqmSqV5oHYOiiQWA8ten6AJAG61jECVS+1v/vPVPeWMBoLy1TzUqYwG0WWchSpgP+dY/FYoFgArSvlYAuOgIUXAUwMl8658KxQJAhVu64ApAXraOQZQIqjdLpuYx6xgUfSwAVDD52rQsJHsCgLXWWYhi7l0Utf7KOgTFAwsAeULKprwG4ELrHEQx5kKdsVJat9o6CMUDCwB5p6zmeiietI5BFEuKq6R80nPWMSg+WADIMyJQaHocAK5GRuQpbUTf9HjrFBQvLADkKRkxcT6AC6xzEMVIC5zU8e3Dbom8wwJA3iuruRVQLktK5I2LZfikBusQFD8sAOS59kcBqZ8CWG6dhSjinsPrLddah6B4YgEgX0j5pA8h+kvrHESRJVgJNz1GjqnLWUeheGIBIN9IWe1fATxqnYMoklTP6ninhsgXLADkL3V+BoBTlhJ1if5DMrV3WaegeGMBIF9J+aQPofoL6xxEEbIIjnuKdQiKPxYA8p2U194JxYPWOYgiQfUkGT7lU+sYFH8sABQQ5+fgowCizblDymv/aR2CkoEFgALR/igAXL+caOM+hJvm4zIKjFgHoGTRhqrHofiGdQ6iEPoml/mlIPEOAAUr644DwNXMiNZ1By/+FDQWAAqU7DX5PUAvsc5BFCIfQdzzrUNQ8rAAUPDKdr0ewPPWMYhCQfRkKZvMF2QpcCwAFDiR8S5yOg5Aq3UWIltaLWW1nC2TTLAAkAnZq3YeIFdZ5yAytARw+NY/mWEBIDs9+l0O4HXrGEQ29DzJVC+0TkHJxWGAZErnVH4DIo9b5yAK2NMoq/maCNQ6CCUX7wCQKSmvfQLAFOscRAFqgeRO5cWfrLEAkD0ndy44TTAlhl4uZVNes05BxAJA5joWPvm1dQ6iALyOdCtffqVQYAGgcCjb5TYI/msdg8hXoudKaR2Hv1IosABQKIiMdyE4B+BzUYorfYBj/ilMWAAoNGR4zXQoJlvnIPLBWo75p7BhAaBwKUr/AoKV1jGIPKX4g2Sq37WOQfRFLAAUKlI68ROo/NE6B5GH3kHfNF/8o9BhAaDw6dHvGijeso5B5AnBebLjxGbrGETrYwGg0JFdb2iB4FfWOYg88KyU1TxoHYJoQ1gAKJQkU3M/uGQwRZvCYZGl8GIBoBDTX4DDAimy5F4ZXjPdOgXRxrAAUGhJpvZFKP5hnYMoD61I68XWIYg2hQWAwq39XYA26xhEXaK4SUpr+CIrhRoLAIWaZGpeB/QO6xxEXbAcJc7vrEMQbQ4LAIVfuugyAGusYxB1iuIa2X3SEusYRJvDAkChJ6UTPwFwi3UOok5YDk3fYB2CqDNYACga2nJ/ArDaOgbRZlwlIyYutw5B1BksABQJMnLKYvAuAIXbEpQU89M/RQYLAEVHW+5KAKusYxBtkOrVMuxO/nxSZLAAUGTIyCmLocq7ABRGi9Gt5CbrEERdwQJA0eIWXw2+C0BhI3IVP/1T1LAAUKTIXn9bBL4LQOGyAk3urdYhiLqKBYCiJ5e9DkCrdQwiAIDiVhlVu9I6BlFXsQBQ5Mhed38EYIp1DiIAbRC90ToEUT5YACii5GpwpUCyplormdoF1jGI8sECQJEkmepXADxmnYMSLi3XWUcgyhcLAEWYXG2dgBLtUdmzpt46BFG+WAAosiRT/R8As6xzUFKxgFK0sQBQ1PEkTBYaOgooUWSxAFC0tfW4D8BH1jEocTjunyKPBYAiTUZOaAMw0ToHJcpqrNVa6xBEhWIBoOhLO7cByFnHoKTQGk78Q3HAAkCRJ6WT3odwSCAFRf5qnYDICywAFA+u8pksBUBfkEwNR55QLLAAUDxkdv0XoPOtY1DcCYsmxQYLAMWCyHgX4txhnYNibXnHqBOiWGABoPhIpW4HkLWOQTGlqJGRE5qsYxB5hQWAYkNKJ34C4AnrHBRTIjXWEYi8xAJA8SIcn00+ULyFsuqXrWMQeYkFgOKlteeDAFZZx6CYEdSIcPlpihcWAIqVjme0D1jnoJhRZ4p1BCKvsQBQ/DjgYwDykL4g5ZPesE5B5DUWAIqfPXeZCmCBdQyKCXFYKCmWWAAodkTGuwDuts5BsdCG1uw91iGI/MACQPGUAodskReelJFTFluHIPIDCwDFkuxZUw/gdescFHXCF0optlgAKL5U/2EdgSLNRTr1iHUIIr+wAFB8OakHrSNQpD3fMbskUSyxAFB8Dd/pJQg+to5BEcU7SBRzLAAUWx2jAR6yzkERpcqfHYo1FgCKOX6Ko7zMlRGT37QOQeQnFgCKt+4D/gPBSusYFDECvj9CsccCQLEmu97QApVHrXNQ1Li8c0SxxwJAScBPc9QVH2H45FnWIYj8xgJA8Se5xwHkrGNQZDzJpX8pCVgAKPakbPIyALOtc1BEqEy1jkAUBBYASgh90joBRYX8xzoBURBYACgZlAWAOkMbpXzSh9YpiILAAkDJUNT2PIA11jEo7BwWRUoMFgBKBCmtawXwrHUOCjl1+fyfEoMFgJJD9d/WESjUsmjGM9YhiILCAkDJkUrx9i5tyosyqpazRlJisABQcuw5aS4ALu9KG8Pb/5QoLACUGB2TuzxlnYPCSnj7nxKFBYCSRTDdOgKFUg7p5petQxAFiQWAEsZ9wToBhVKDlNattg5BFCQWAEqWJR/VA+CJntbHYkiJwwJAiSJfm5YFMNM6B4WMKgsAJQ4LACWQ8j0AWlcqzQJAicMCQAnk8GRPX7RQht/1tnUIoqCxAFDytGVfALjeO32Gt/8pmVgAKHFk5JTFAN6yzkEhIcICQInEAkBJxZM+deDQUEomFgBKqhetA1AouEi1zbIOQWSBBYCSSZw51hEoFN7mBECUVCwAlEyqDQBc6xhkrt46AJEVFgBKJMlUr4HiHescZEx1rnUEIissAJRcwk9/iedIg3UEIissAJRc7Y8BKMlUWAIpsVgAKLkc5ck/2VahrHq+dQgiKywAlFy5YhaAZGsQ4YyQlFwsAJRc5RPfA7DcOgaZ4SMgSjQWAEqsjk9/r1jnICPKFwAp2VgAKNmU7wEkVoovgVKysQBQwgnHgSdVNj3POgKRJRYASjaRN60jkIlFMmIi3/+gRGMBoGRLC5cFTiTlf3dKPBYASrY9dloAYK11DAocCwAlHgsAJZrIeBeCd61zUNDkbesERNZYAIhU+R5A0gjvABCxABDB4cUgaVyXpY8SjwWASPlpMHGK2vjfnBKPBYBI+GkwYZZJad1S6xBE1lgAiHIcEpYsnPuBCGABIAJG7PYBOBQwSVj4iMACQMShgEkjyiGARGABIPoMC0BSqLxnHYEoDNLWAYiCUlFRkZq/0h0GV7ZOOSpf/LNH/pvFln1lY5tSjDz3mrvFqCOOPuyLX3PVdVWcT4f0cV6rq6vLWWUjChLPeBR7Bx11VP+2tuILIfITKAZZ56FQWwjVW9dKrysbnqheYx2GyE8sABRr+x7xg4yoPAxgsHUWig4BXtEUvvnSow8ssM5C5BcWAIqtA771w6/ksngZwJbWWSiKZI6zyjnghRfqOEKEYokvAVJs5bJyC3jxp7xpudvbPds6BZFfWAAolkZ+4wd7AvpN6xwUdXoWeKeUYooFgGIpLTjKOgPFwjb7H/a9Pa1DEPmBBYDiyXWGWEegeMilUjtYZyDyAwsAxZRmrRNQPIjrtFlnIPIDCwDFkuvI69YZKB5S6SynDqZYYgGgWBJHHwTAT25UqMbpjz7IAkCxxAJAsdQxgctN1jko2kTkt9YZiPzCAkCxNSC19lcKPG2dg6JJBbe/+Pj991rnIPILCwDF1qOPPtrSo7XPkRC5CQBfCqTOahXgspf3LzvFOgiRnzjBBSXCfocfvSscHAfV/QBsCciXf/YdZ0sRh2sGxFku+4oCLV/+A1UACwUyHU6u9sXHHpwfdDSioLEAEHU4+MfjzoHKtdY5yD850V2m3zOBL/URgY8AiIiIEokFgIiIKIFYAIiIiBKIBYCIiCiBWACIiIgSiAWAiIgogVgAiIiIEogFgIiIKIFYAIiIiBKIBYCIiCiBOBUwJcb+R1TsklP3QKhu5Tj6pZ99KSo5yEkVfdsiGwUj29J0lai7ZP2vu64oHP0Emn725Sfq3rXIRhQ0FgCKvX0PP3qkiP4ZwCHWWSgCBI/nJHX2jMfqXreOQuQnFgCKtf0OP7pKRW8XoMQ6C0XKCkf1ey88+fenrYMQ+YUFgGJrn8N/dKgj7mMA0tZZKJKWuMiN+O8T//jAOgiRH/gSIMXS3nuPK3LEvRW8+FP+BjpIXWEdgsgvLAAUS6mBi44AsIt1Doo2BX584He/29s6B5EfWAAolhyRg60zUPQJUNLanB5hnYPIDywAFE+KgdYRKB4c0f7WGYj8wAJA8ST41DoCxYOjqUXWGYj8wAJAsSTQZ60zUCysbS1pmWMdgsgPLAAUS62Lt5iqwNvWOSjiFPfNfPjhJusYRH5gAaBYmjlzQpuonAXAtc5CUaUrVVKXWqcg8kvKOgCRXz5859U3B+88bDkgR4CTXlEXKNDiwDnupSfue8k6C5FfWAAo1ha8/dpLg3ce+l9A9gU4MoA6Q+bC0R+99PgDU62TEPmJn4ooEUaPHp1eUzToqyLuQY7K1ir6pcdfTio9HKn0/hb5KBhutvVuuO7K9b8uKq46+FhEnhncW56tq6vLWeQjChILAFGHg3887hyoXGudg/yTE91l+j0T+HIoEfgSIBERUSKxABARESUQCwAREVECsQAQERElEAsAERFRArEAEBERJRALABERUQKxABARESUQCwAREVECsQAQERElEKcCpkQ46Kij+re2dfsuoPs5IoM29D2SSu0KJ1UedDYKjra1PQro6g39mau6WFSmI9300EuPPvql9QKI4oYFgOJORh3xg1+q4iJA+liHoUhYAsgvX3ri/jutgxD5icsBU3yNH+/sVzxgCiDnAFJiHYcioweA72238+748O1Xn7YOQ+QXFgCKrf2KBlwMwZnWOSiaBPjq9jsPm/7h26+9Y52FyA98CZBiae/R3xkEwa+sc1CkCSCXW4cg8gsLAMVSUVHR99F+K5eoEPvu980fbm8dgsgPLAAUSyoy3DoDxYKIK8OsQxD5gQWA4qq7dQCKCeXPEsUTCwDFkkDft85AMSH6oXUEIj+wAFAsKdxHrTNQDAgWD+6TqreOQeQHFgCKpZeeeHAmBI9b56Cokxvq6upy1imI/MACQLGlmjoNwKfWOSiaVDA7W9x6tXUOIr+wAFBsvfxE3bvi6tcAvGadhSLnBU2lvjXz4YebrIMQ+YUFgGLtxX///dUBqbXlUP05gJcAuNaZKLRcBaYrcPIOfVMH//dfdZ9YByLyExcDokSpqKhIvbMyt6WTk40O7Srq02+848iYIHORv9xc20ltq1ZvdF5/N6Vrd+qTWsjn/ZQkLABE6znkx6f8UBX3W+cgz7S5zW0Dn3/ozlXWQYjChI8AiNbTrbjpcQAbXDOeIulJXvyJvowFgGg9T1RXr4Ho361zkDcUqLHOQBRGLABEG+C4Um2dgTyxpkdJ00PWIYjCiAWAaAOeLt1mKoAPrHNQoeS+J6qr11inIAojFgCiDRk/3hXRSdYxqDDqYKJ1BqKwYgEg2gjHwXUA+Okxul5+7u5bp1mHIAorFgCijZg2ZcJigdxhnYPyo8AV1hmIwowFgGgTnGz2KgCt1jmoixSNz+2xzSPWMYjCLGUdgCjM5r86a+WQPUcOBrC3dRbqPAHOeu/mP79inYMozHgHgGgzWpzcbwAst85BnaQy/Zm62+61jkEUdiwARJvx0pTbP4XgN9Y5qFNyksLPAah1EKKwYwEg6oSt3aU3QzHbOgdt1s3P3H0r/zsRdQILAFEn1NXV5VzHOR1cTji0FPg01drCOzVEncSXAIk66YPGGQuG7Ll3MSCHWGehL1FHncqnH7i93joIUVTwDgBRFzyz+7a/AfAf6xy0HsHVz9Tdwjn/ibqABYCoK8aPd7MqYwEsto5Cn5H/LnWXXmydgihqWACIuuiFuls/VMUYADnrLIQlKQfHNNbVcbImoi7iOwBEeXh/3sy3dthj5Cci+I51lgRbq6pHPXPvbQ3WQYiiiAWAKE/vz5s5c4fSvSGQ0dZZEiinKsc+V3fbE9ZBiKKKBYCoAO83znx6SOk+AwDsZ50lQVQU456tu22ydRCiKOM7AEQF2kqX/J8KuGpgMFQU5z5Tdxv/fRMVSKwDEMWEHHLMqZcq9FLrIDGWVcgpz9176wgWYhIAAAIFSURBVJ3WQYjigI8AiDzyXuOMaV/Zc+RSAEeA5dprTQL88Nl7ucgPkVdYAIg89H7jzJeH7DHydQiOBFBsnScmFqijRz17z4Rp1kGI4oSfUoh8cGDFaUMd5O6FSJl1lkhTTG1N5ypfmnL7p9ZRiOKGdwCIfPDBvBlLdtp3+ES0FfUBRwjkIyeQy58t3ebkD2+8ZrV1GKI44h0AIp8d9ONxFaK4DpBtrbNExFxx3FOfufuv062DEMUZ7wAQ+ez9xpnzhu21x225XFEKwChw+O3GNAnk90t16ZgZ91bPtw5DFHe8A0AUoAMqflaeEucGAAdZZwkRFch9cJzznrn75g+swxAlBQsAkYGDKsYdJJALIPi2dRZDLhT/gqOXPnvPhFnWYYiShgWAyNDBx5x6IKAXATgSyXk00ALI3a7KH56vu+V16zBEScUCQBQC+1ecul0R9Ecq+AmAjHUen8wURbWT1tppUyYstg5DlHQsAEQhc3DFqfvC0R9BcSiAckT3zkALIC+q4sk0nHum1d38lnUgIvofFgCiEDv0B2cMbC3KjRbo11WxNwRDAfSzzrURHyvwGkReSrn6n9XN+vzMhyc0WYciog1jASCKmAN+cOqWqXRud4Uz1IEOgEg/AL1VtLeo083fo7urAGc1xF3lqqxyRBYIcm80p7u9/lLtDSv9PTYReen/AbeNKKToOb16AAAAAElFTkSuQmCC";var Lf="data:image/png;base64,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";import{Fragment as oM,jsx as Be,jsxs as Jt}from"react/jsx-runtime";var cu=-100,uu=100,Uf=.03,K1=.03,Q1=.03,kf=.5,J1=Af,Z1=Rf,eM=Lf,tM=Math.PI/4,Df=.4,wi=64,Of=Uf*3,du="#4d7dff",If="#ffcc00",Bf=.02,rM=new lr(0,1,0),Rs=32,zf="#ff9d3d",Ls=4;function pu(e){let t=new Float32Array((wi+1)*3);for(let r=0;r<=wi;r++){let n=r/wi*Math.PI*2,i=Math.cos(n)*Df,o=Math.sin(n)*Df,a=0,s=0,c=0;e==="x"?(s=i,c=o):e==="y"?(a=i,c=o):(a=i,s=o),t[r*3]=a,t[r*3+1]=s,t[r*3+2]=c}return t}function nM(e){let t=Math.abs(e.y)<.99?new lr(0,1,0):new lr(1,0,0),r=new lr().crossVectors(e,t).normalize(),n=new lr().crossVectors(e,r).normalize();return[r,n]}function Nf(e,t,r=1e-5){return Math.abs(e[0]-t[0])<r&&Math.abs(e[1]-t[1])<r&&Math.abs(e[2]-t[2])<r}var Mi=null,mu=new Set;function hu(e){Mi!==e&&(Mi=e,mu.forEach(t=>t()))}function iM(e){return mu.add(e),()=>mu.delete(e)}function jf(){return Mi}function Ff({light:e,position:t,rotation:r=[0,0,0],color:n,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:p,setActiveTab:d,setActiveSubTab:h}=Ma(),{camera:m,gl:f,raycaster:b,invalidate:P}=G1(),C=tt(null),k=tt(null),y=tt(null),j=tt(null),L=tt(null),w=tt(null),I=tt(null),U=tt(null),_=tt(null),S=tt(null),A=tt(null),G=Qt(()=>new Y1,[]),v=Qt(()=>new xi,[]),z=Qt(()=>new lr(1,1,1),[]),M=tt([0,0,0]),O=tt([0,0,0]),N=tt(!1),$=tt(null),Z=tt(null),te=tt(null),ie=tt(c);No(()=>{ie.current=c},[c]);let Ce=Qt(()=>new lr(t[0],t[1],t[2]),[t]),Ue=Qt(()=>new As(r[0],r[1],r[2]),[r]),rt=Qt(()=>new Float32Array(6),[]),gt=Qt(()=>pu("x"),[]),Fe=Qt(()=>pu("y"),[]),ze=Qt(()=>pu("z"),[]),nt=Qt(()=>new Float32Array((Rs+1)*3),[]),dt=Qt(()=>new Float32Array(Ls*2*3),[]),bt=e?.type==="point",pt=e?.type==="spot",At=bt?Z1:pt?eM:J1,Ge=bt?K1:pt?Q1:Uf,q=Qt(()=>new $1().load(At),[At]),Vt=V1(iM,jf,jf),ht=!!e&&Vt===e.id,_e=tt(new lr),Ye=tt(new As);No(()=>{N.current||(_e.current.copy(Ce),Ye.current.copy(Ue),P())},[Ce,Ue,P]),No(()=>{e&&Mi===e.id&&!o&&hu(null)},[e?.id,o]),No(()=>()=>{e&&Mi===e.id&&hu(null),te.current!==null&&(cancelAnimationFrame(te.current),te.current=null)},[e?.id]);let He=Es(()=>{if(N.current||!ht)return;let se=_e.current,de=new xi().setFromEuler(Ye.current);G.compose(se,de,z)},[G,z,ht]);H1(()=>{if(C.current&&C.current.position.copy(_e.current),He(),y.current){y.current.lookAt(m.position);let se=m,de;se.isOrthographicCamera?de=Ge/se.zoom:de=m.position.distanceTo(_e.current)*Ge,y.current.scale.setScalar(de)}if(I.current){let se=m,de;se.isOrthographicCamera?de=Of/se.zoom:de=m.position.distanceTo(_e.current)*Of,I.current.scale.setScalar(de)}if(L.current){let se=L.current.getAttribute("position"),de=se.array;de[0]=0,de[1]=0,de[2]=0,de[3]=_e.current.x,de[4]=_e.current.y,de[5]=_e.current.z,se.needsUpdate=!0,L.current.computeBoundingSphere()}if(w.current){let se=_e.current,de=se.length();w.current.visible=de>kf,de>1e-6&&(w.current.position.copy(se).multiplyScalar(.5),w.current.scale.set(1,de,1),w.current.quaternion.setFromUnitVectors(rM,se.clone().normalize()))}if(j.current&&(j.current.visible=_e.current.length()>kf),pt&&U.current&&_.current&&S.current){let se=_e.current,de=se.length();if(de>1e-6){U.current.visible=!0;let Ke=se.clone().negate().normalize(),Ae=de,Qe=e?.angle??Math.PI/6,V=Ae*Math.tan(Qe),re=se.clone().add(Ke.clone().multiplyScalar(Ae)),[oe,we]=nM(Ke),Oe=_.current.getAttribute("position"),Te=Oe.array;for(let xe=0;xe<=Rs;xe++){let Me=xe/Rs*Math.PI*2,ot=re.x+(oe.x*Math.cos(Me)+we.x*Math.sin(Me))*V,zt=re.y+(oe.y*Math.cos(Me)+we.y*Math.sin(Me))*V,St=re.z+(oe.z*Math.cos(Me)+we.z*Math.sin(Me))*V;Te[xe*3]=ot,Te[xe*3+1]=zt,Te[xe*3+2]=St}Oe.needsUpdate=!0,_.current.computeBoundingSphere();let Re=S.current.getAttribute("position"),ee=Re.array;for(let xe=0;xe<Ls;xe++){let Me=xe/Ls*Math.PI*2,ot=re.x+(oe.x*Math.cos(Me)+we.x*Math.sin(Me))*V,zt=re.y+(oe.y*Math.cos(Me)+we.y*Math.sin(Me))*V,St=re.z+(oe.z*Math.cos(Me)+we.z*Math.sin(Me))*V,mt=xe*6;ee[mt]=se.x,ee[mt+1]=se.y,ee[mt+2]=se.z,ee[mt+3]=ot,ee[mt+4]=zt,ee[mt+5]=St}Re.needsUpdate=!0,S.current.computeBoundingSphere()}else U.current.visible=!1}});let Bt=Es(()=>{te.current!==null&&(cancelAnimationFrame(te.current),te.current=null),M.current=t,O.current=[r[0],r[1],r[2]],N.current=!0,$.current=null,Z.current=null,ie.current?.(!0)},[t,r]),Gt=Es((se,de,Ke,Ae)=>{let Qe=new lr(M.current[0],M.current[1],M.current[2]),V=new lr,re=new xi,oe=new lr;Ae.decompose(V,re,oe);let we=Qe.clone().applyMatrix4(Ae),Oe=[Math.min(Math.max(we.x,cu),uu),Math.min(Math.max(we.y,cu),uu),Math.min(Math.max(we.z,cu),uu)],Te=new xi().setFromEuler(new As(O.current[0],O.current[1],O.current[2],"XYZ")),Re=new xi().copy(re).multiply(Te),ee=new As().setFromQuaternion(Re,"XYZ"),xe=[ee.x,ee.y,ee.z];_e.current.set(Oe[0],Oe[1],Oe[2]),Ye.current.set(xe[0],xe[1],xe[2]),$.current=Oe,Z.current=xe;let Me=new xi().setFromEuler(Ye.current);G.compose(_e.current,Me,z),P()},[G,z,P]),Pe=Es(()=>{N.current=!1;let se=$.current,de=Z.current;$.current=null,Z.current=null;let Ke=se&&!Nf(se,M.current),Ae=de&&!Nf(de,O.current);Ke&&a&&a(se),Ae&&s&&s(de),Ke||Ae?te.current=requestAnimationFrame(()=>{te.current=null,ie.current?.(!1)}):ie.current?.(!1)},[a,s]);return No(()=>{let se=Ae=>{let Qe=f.domElement.getBoundingClientRect();return new q1((Ae.clientX-Qe.left)/Qe.width*2-1,-((Ae.clientY-Qe.top)/Qe.height)*2+1)},de=Ae=>!!Ae.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Ke=Ae=>{if(de(Ae))return;let Qe=se(Ae);b.setFromCamera(Qe,m);let V=[];if(k.current&&V.push(k.current),y.current&&V.push(y.current),V.length===0)return;if(b.intersectObjects(V,!1).length>0){let oe=e?.id??null;Mi!==oe&&(hu(oe),d?.("scene"),h?.("Lighting")),Ae.preventDefault(),Ae.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Ke),()=>{f.domElement.removeEventListener("pointerdown",Ke)}},[m,b,f,e,d,h]),l!=="scene"||p!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:Jt("group",{ref:se=>{se&&Ap(se)},children:[Jt("group",{ref:C,children:[Be("sprite",{ref:y,children:Be("spriteMaterial",{map:q,transparent:!0,opacity:.9,blending:lu,depthWrite:!1,rotation:pt?tM:0},At)}),Be(W1,{ref:k,args:[.25,16,16],children:Be("meshBasicMaterial",{transparent:!0,opacity:.01})}),bt&&Jt("group",{ref:I,children:[Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{children:Be("bufferAttribute",{attach:"attributes-position",args:[gt,3],count:wi+1})}),Be("lineBasicMaterial",{color:du,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{children:Be("bufferAttribute",{attach:"attributes-position",args:[Fe,3],count:wi+1})}),Be("lineBasicMaterial",{color:du,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{children:Be("bufferAttribute",{attach:"attributes-position",args:[ze,3],count:wi+1})}),Be("lineBasicMaterial",{color:du,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!bt&&!pt&&Jt(oM,{children:[Jt("mesh",{ref:w,children:[Be("cylinderGeometry",{args:[Bf,Bf,1,8,1,!0]}),Be("meshBasicMaterial",{color:If,transparent:!0,opacity:.05,blending:lu,depthWrite:!1,depthTest:!1})]}),Jt("line",{ref:j,children:[Be("bufferGeometry",{ref:L,children:Be("bufferAttribute",{attach:"attributes-position",args:[rt,3],count:2})}),Be("lineBasicMaterial",{color:If,transparent:!0,opacity:.7,blending:lu})]})]}),pt&&Jt("group",{ref:U,children:[Jt("lineLoop",{renderOrder:999,children:[Be("bufferGeometry",{ref:_,children:Be("bufferAttribute",{attach:"attributes-position",args:[nt,3],count:Rs+1})}),Be("lineBasicMaterial",{color:zf,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),Jt("lineSegments",{renderOrder:999,children:[Be("bufferGeometry",{ref:S,children:Be("bufferAttribute",{attach:"attributes-position",args:[dt,3],count:Ls*2})}),Be("lineBasicMaterial",{color:zf,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),ht&&a&&Be(X1,{ref:A,matrix:G,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Bt,onDrag:Gt,onDragEnd:Pe})]})}import{useCallback as fu,useLayoutEffect as aM,useMemo as Sr,useRef as Nr}from"react";import{PivotControls as sM}from"@react-three/drei";import{useFrame as lM,useThree as cM}from"@react-three/fiber";import{Euler as Vf,Matrix4 as ks,Quaternion as Ds,Vector3 as jo}from"three";import{jsx as Gf}from"react/jsx-runtime";function gu({node:e,space:t,onTransformChange:r,onDraggingChange:n}){let i=cM(A=>A.invalidate),o=Sr(()=>_p(e),[e]),a=Sr(()=>new ks,[]),s=Nr(!1),c=Nr(new ks),l=Nr(new ks),p=Nr(null),d=Nr(0),h=Nr([]),m=Nr(null),f=Nr(n);f.current=n;let b=Sr(()=>new jo,[]),P=Sr(()=>new Ds,[]),C=Sr(()=>new jo,[]),k=Sr(()=>new Ds,[]),y=Sr(()=>new jo(1,1,1),[]),j=Sr(()=>new Ds,[]),L=Sr(()=>new jo,[]),w=Sr(()=>new jo,[]),I=Nr([0,0,0]),U=fu(()=>{s.current||(e.updateWorldMatrix(!0,!1),b.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),k.copy(P),t==="world"&&k.identity(),a.compose(b,k,y))},[b,a,k,y,e,o,t,P]);aM(()=>(U(),()=>{let A=m.current!==null;A&&(cancelAnimationFrame(m.current),m.current=null),(s.current||A)&&(s.current=!1,f.current(!1));for(let G of h.current)si(G);h.current=[]}),[U]),lM(()=>U());let _=fu(()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let A of ai(e))Ph(A)||(ja(A,A.matrixWorld),h.current.push(A));e.updateWorldMatrix(!0,!1),b.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),e.getWorldScale(C),c.current.compose(b,P,C),l.current.copy(a),I.current=[e.rotation.x,e.rotation.y,e.rotation.z],p.current=null,s.current=!0,n(!0)},[b,a,e,n,o,P,C]),S=fu((A,G)=>{let v=c.current.clone().premultiply(G),z=l.current.clone().premultiply(G);v.decompose(L,P,w);let M=L.clone();z.decompose(b,k,y),t==="world"&&k.identity(),a.compose(b,k,y),A.decompose(L,j,w);let O=new Vf().setFromQuaternion(j,e.rotation.order),[N,$,Z]=I.current,te=[N+O.x,$+O.y,Z+O.z],ie=new Ds().setFromEuler(new Vf(te[0],te[1],te[2],e.rotation.order)),Ue=(e.parent?.matrixWorld||new ks).clone().invert(),rt=M.clone().applyMatrix4(Ue),gt=o.clone().multiply(e.scale).applyQuaternion(ie),Fe=rt.clone().sub(gt),ze=[Fe.x,Fe.y,Fe.z];e.position.set(ze[0],ze[1],ze[2]),e.rotation.set(te[0],te[1],te[2],e.rotation.order),e.updateMatrixWorld(!0),i(),p.current={position:ze,rotation:te}},[b,j,a,k,y,i,e,o,L,w,t,P]);return Gf("group",{children:Gf(sM,{matrix:a,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:_,onDrag:(A,G,v,z)=>S(G,z),onDragEnd:()=>{s.current=!1;let A=p.current;if(p.current=null,A)r(A),m.current=requestAnimationFrame(()=>{m.current=null,n(!1)});else if(h.current.length>0){for(let G of h.current)si(G);e.updateMatrixWorld(!0),i(),n(!1)}else n(!1);h.current=[]}})})}import{Fragment as Si,jsx as B,jsxs as he}from"react/jsx-runtime";function kM(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let r=t.geometry,n=r.getAttribute("skinIndex"),i=r.getAttribute("skinWeight"),o=r.getAttribute("position");if(!n||!i||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new It,l=s[0],p=1/0;for(let m of s){c.fromBufferAttribute(o,m);let f=c.distanceToSquared(a);f<p&&(p=f,l=m)}let d=n.getComponent(l,0),h=i.getComponent(l,0);for(let m=1;m<4;m++){let f=i.getComponent(l,m);f>h&&(h=f,d=n.getComponent(l,m))}return t.skeleton.bones[d]??null}function DM(e){let t=kM(e)??e.object,r=Ki(t);if(!r)return null;t.updateWorldMatrix(!0,!1);let n=t.worldToLocal(e.point.clone());return{anchorNodeName:r,anchorLocalPosition:[n.x,n.y,n.z]}}function OM(e,t,r){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let n=fn(t,e.anchorNodeName);return n?(n.updateWorldMatrix(!0,!1),r.set(...e.anchorLocalPosition).applyMatrix4(n.matrixWorld),!0):!1}function IM({annotation:e,enabled:t,controlsRef:r,offsetRef:n}){let i=Qf(h=>h.scene),o=ue(null),a=ue(!1),s=Mt(()=>new It,[]),c=Mt(()=>new It,[]),l=Mt(()=>new It,[]),p=e?.anchorNodeName,d=e?.anchorLocalPosition;return Se(()=>{o.current=null,a.current=!1},[p,e?.id]),Kf(()=>{let h=r.current,m=n.current;if(!t||!h||!m||!p||!d){a.current=!1;return}let f=o.current;if((!f||!f.parent)&&(f=fn(i,p),o.current=f),!f){a.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(f.matrixWorld),!(a.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),a.current=!0,l.copy(s).add(m),h.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function BM(e){let t={total:0,missing:0};return e.traverse(r=>{let n=r;!n.isMesh||!n.geometry||(t.total+=1,n.geometry.getAttribute("uv")||(t.missing+=1))}),t}var zM=.2,$f=Object.freeze({});function NM({enabled:e,speed:t,controlsRef:r}){let n=Qf(i=>i.invalidate);return Kf((i,o)=>{!e||!r.current||(r.current.rotate(o*zM*t,0,!1),n())}),null}function jM(e,t,r){let n=t?.camera;if(!(n instanceof Jf))return null;let o=(e instanceof Ci?e:new Ci().setFromObject(e)).getSize(new It).length();return!Number.isFinite(o)||o<=0?null:(n.near=o/100,n.far=o*100,n.updateProjectionMatrix(),t&&r===void 0&&(t.maxDistance=o*10),o)}function UM(e,t){let r=e.camera;if(!(r instanceof Jf)||!(t>0))return;let n=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(n-r.near)<=r.near*.01||(r.near=n,r.updateProjectionMatrix())}async function Yf(e,t,r=.6){let n=e.smoothTime;e.smoothTime=r;try{return await t()}finally{e.smoothTime=n}}function FM(e){return B(VM,{...Jd(e)})}function VM({modelUrl:e,tilesetUrl:t,tilesErrorTarget:r=8,tilesCacheSize:n=800,onObjectCatalog:i,modelFormat:o,licenseKey:a,licenseValidationUrl:s,objectBindings:c="auto",selectedObject:l,panelHoveredObject:p,onObjectBindingsChange:d,onObjectSelect:h,onObjectHover:m,onObjectDoubleClick:f,onObjectContextMenu:b,onObjectEditLeaseChange:P,onSceneLoaded:C,onModelLoaded:k,onLoadError:y,onProgress:j,onCameraControllerChange:L,cameraControllerType:w,onAction:I,onHiddenObjectsChange:U,onCameraChange:_,onViewerReady:S,onTextureUpload:A,onAnimationsReady:G,onAnnotationsChange:v,activeAnnotation:z,onActiveAnnotationChange:M,camera:O,cameraLimits:N,backgroundColor:$,shadows:Z=!0,showObjectBindingDataPanel:te=!0,customObjectBindingDataPanel:ie,customSceneObjectsPanel:Ce,showSceneObjectsPanel:Ue=!0,showDownloadButton:rt=!0,downloadFilename:gt="model",showResetButton:Fe=!0,showLoadingOverlay:ze=!0,showMouseController:nt=!1,mouseControllerPosition:dt="center-bottom",mouseControllerOpacity:bt=1,moveSensitivity:pt=.08,zoomSensitivity:At=1,sceneConfig:Ge,onSceneConfigChange:q,disableZoom:Vt=!1,zoomOnSelected:ht=!0,highlightOnHover:_e=!0,enableCameraControls:Ye=!0,onAutoFit:He,refitOnResize:Bt=!0,renderMode:Gt="demand",maxDpr:Pe=2,preserveDrawingBuffer:se=!1,performanceProfile:de="auto",dracoDecoderPath:Ke,ktx2TranscoderPath:Ae,meshopt:Qe=!0,showMeasureTools:V=!1,showUvCheckerButton:re=!1,showExplodeControls:oe=!1,cinematic:we,measurementUnit:Oe="m",enableXR:Te=!1,usdzUrl:Re,arScaleMode:ee="normalized",mobileHandoffUrl:xe,showAnnotationNavigation:Me=!0,showAnnotationOnHover:ot=!1,moveModeEnabled:zt=!1,objectTransformSpace:St="world",enableKeyboardNavigation:mt=!1,showViewGizmo:ln=!1,overlay:Nt,unsafe_sceneChildren:jr,autoRotate:Uo,autoRotateSpeed:ft,onTexturePositioningChange:E,endTexturePositioningRef:T,texturePositioning:F}){let H=c==="auto",W=H?$f:c,{isInsideEditor:J,activeTab:Y,activeSubTab:Ie}=Ma(),ke=J&&Y==="scene"&&Ie==="Lighting",Ve=Sp(a,s),[De,We]=ce({}),X=Mt(()=>Al(Ge??Id,De),[Ge,De]),Ne=ue(X);Ne.current=X;let it=Q(u=>{if(q){q(Al(Ne.current,u));return}We(g=>{let x={...g};for(let[R,D]of Object.entries(u))x[R]={...g[R],...D};return x})},[q]),[yt,Zt]=ce(null),[Rt,Ct]=ce(null),Cr=X.model.renderer==="uv-checker",Dn=re?Rt??Cr:Cr,Ti=Mt(()=>{let u=Dn?"uv-checker":Cr?"pbr":X.model.renderer;return u===X.model.renderer?X:{...X,model:{...X.model,renderer:u}}},[Cr,X,Dn]);Se(()=>{Ct(null)},[e,X.model.renderer,re,t]);let Zf=Mt(()=>{if($)return $;let u=X.background;return u.enabled&&u.type==="color"?u.color:"#1c1c1d"},[$,X]),yu=Mt(()=>({dracoDecoderPath:Ke,ktx2TranscoderPath:Ae,meshopt:Qe}),[Ke,Ae,Qe]),eg=Mt(()=>qp(de),[de]),Ee=ue(null),[tg,rg]=ce("orbit"),[ng,vu]=ce(!1),Ur=w!==void 0?w:tg,_i=Q(u=>{vu(!1),u!==Ur&&(rg(u),L?.(u))},[Ur,L]),[Fo,xu]=ce(!1),[pe,Pi]=ce(null),Ei=!!(F||E||T),wu=ue(E);wu.current=E,Se(()=>{wu.current?.(pe)},[pe]),Se(()=>{if(T)return T.current=()=>Pi(null),()=>{T.current=null}},[]),Se(()=>{Ee.current&&(Ee.current.dollySpeed=Math.max(At,0))},[At]),Se(()=>{Ee.current&&(Ee.current.enabled=Ye&&!Fo&&!pe)},[Ye,Fo,pe]);let Is=ue(null),Mu=ue(new Map),Su=ue(null),Cu=ue(null),er=ue(null),On=ue({});Se(()=>()=>{for(let u of Object.values(On.current))URL.revokeObjectURL(u)},[]);let cr=ue({}),[,ig]=ce(0),Tu=Q(()=>{ig(u=>u+1)},[]),Vo=ue({}),_u=ue(null),ur=ue(null),[Fr,og]=ce(null),ag=Q(u=>{ur.current=u,og(u)},[]),Go=ue(new Set),cn=ue(null);Se(()=>{let u=Fr;if(!u||!mt||!Ye||zt)return;let g=new Set(["w","a","s","d"," ","c"]),x=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),R=0,D=ne=>ne.code==="Space"?" ":ne.key.toLowerCase(),K=()=>{Go.current.clear(),R=0,cn.current!==null&&(cancelAnimationFrame(cn.current),cn.current=null)},le=ne=>{let be=Ee.current,ye=Go.current;if(!be||ye.size===0){cn.current=null,R=0;return}let qe=R?Math.min((ne-R)/1e3,.05):1/60;R=ne;let Je=Math.max(be.distance*.75,.01)*qe;ye.has("w")&&be.forward(Je,!1),ye.has("s")&&be.forward(-Je,!1),ye.has("a")&&be.truck(-Je,0,!1),ye.has("d")&&be.truck(Je,0,!1),ye.has(" ")&&be.truck(0,Je,!1),ye.has("c")&&be.truck(0,-Je,!1),cn.current=requestAnimationFrame(le)},ge=ne=>{if(ne.target!==u){K();return}if(x.has(ne.key)){let ye=Ee.current;if(!ye)return;ne.preventDefault();let qe=Math.PI/90,Je=Math.max(ye.distance*.05,.01);ne.key==="ArrowUp"?ne.shiftKey?ye.forward(Je,!0):ye.rotate(0,-qe,!0):ne.key==="ArrowDown"?ne.shiftKey?ye.forward(-Je,!0):ye.rotate(0,qe,!0):ne.key==="ArrowLeft"?ye.rotate(-qe,0,!0):ye.rotate(qe,0,!0);return}let be=D(ne);g.has(be)&&(ne.preventDefault(),Go.current.add(be),cn.current===null&&(cn.current=requestAnimationFrame(le)))},me=ne=>{Go.current.delete(D(ne))};return u.addEventListener("keydown",ge),u.addEventListener("keyup",me),u.addEventListener("blur",K),()=>{u.removeEventListener("keydown",ge),u.removeEventListener("keyup",me),u.removeEventListener("blur",K),K()}},[Fr,Ye,mt,zt]);let Bs=ue(null),[sg,Pu]=ce(W),[In,Ho]=ce({}),[Eu,zs]=ce(null),[Ns,Au]=ce(null),[lg,cg]=ce(null),[ug,dg]=ce(null),[tr,Ru]=ce(null),[pg,Lu]=ce({}),Tt=ue(null),Wo=ue(null),js=ue(0),ku=ue(null),[hg,mg]=ce(0),Vr=ue(!1),Ai=ue(!1),Us=ue(!!O);Us.current=!!O;let Tr=ue(null),[Du,Ri]=ce(!!e),[Fs,Li]=ce(!e||!!He||!!O),[un,Ou]=ce(!1),[Iu,Vs]=ce(!1),[fg,Gs]=ce(null),[Bu,ki]=ce(!1),[zu,gg]=ce(0),Hs=ue(""),Nu=ue(""),[ju,Uu]=ce(!1),[Fu,bg]=ce(null),[yg,Vu]=ce(!1),[Di,Gu]=ce({total:0,missing:0}),[vg,Hu]=ce("Loading model..."),[xg,Ws]=ce(null),Ht=ue({}),Oi=Q(()=>{let u=Ee.current;if(!u||Tr.current)return;let g=u.getPosition(new It),x=u.getTarget(new It);Tr.current={position:[g.x,g.y,g.z],target:[x.x,x.y,x.z]}},[]),[Ii,Xo]=ce(!1),[qo,Wu]=ce(0),[Xs,Xu]=ce(!1);Se(()=>{Wu(0),Xu(!1)},[e,t]);let Bi=Mt(()=>{let u=X.cinematic,g=u?.enabled?{waypoints:u.waypoints,duration:u.duration,loop:u.loop,autoPlay:u.autoPlay}:null;return we===void 0?g&&(g.waypoints?.length??0)>=2?g:null:we===!1?null:we===!0?g??{}:{...g??{},...we}},[we,X]),[dn,dr]=ce(!1),[wg,Bn]=ce(!1),qs=ue(!1);Se(()=>{dr(!1),Bn(!1),qs.current=!1},[e,t]),Se(()=>{!Bi?.autoPlay||qs.current||un&&Fs&&!Du&&(qs.current=!0,dr(!0),Bn(!1))},[Bi,un,Fs,Du]);let{xrStore:pn,presenterRef:Mg,arSupported:$s,vrSupported:qu,quickLookSupported:$u,resolvedMobileHandoffUrl:$o,isMobileHandoffOpen:Yu,arOverlay:Sg,openMobileHandoff:Cg,closeMobileHandoff:Ku,openQuickLook:Tg,handleARStateChange:_g}=Kp({enableXR:Te,usdzUrl:Re,mobileHandoffUrl:xe}),[pr,Qu]=ce(()=>Ge?.annotations??[]);Se(()=>{if(pr.length>0){let u=pr.reduce((g,x)=>Math.max(g,x.id),0);Qo.current=u}else Qo.current=0},[pr]);let[Lt,Yo]=ce(null),[Gr,Ko]=ce({title:"",description:""}),Qo=ue(0),[Pg,Ju]=ce(null),[Wt,zn]=ce(-1),[Zu,Jo]=ce(!1),Nn=ue(null),Xe=Mt(()=>[...pr].sort((u,g)=>u.id-g.id),[pr]),Zo=Mt(()=>Wt<0||Wt>=Xe.length?null:Xe[Wt],[Wt,Xe]),hr=Q(u=>{if(z!==void 0){M?.(u);return}Ju(u?{annotation:u}:null)},[z,M]),jn=Q(u=>{let g=Ee.current,x=Tt.current;if(!g)return;let R=new It,D=Mu.current.get(u.id);D?R.copy(D):x&&OM(u,x,R)||R.set(u.worldPosition[0],u.worldPosition[1],u.worldPosition[2]),Is.current=null;let K=g.smoothTime;g.smoothTime=.6;let le=u.worldNormal;if(x){let ge=new Ci().setFromObject(x),me=new It;ge.getCenter(me);let ne=new It;ge.getSize(ne);let be=ne.length()*.2,ye;le?ye=new It(le[0],le[1],le[2]):ye=R.clone().sub(me),ye.lengthSq()<1e-6&&ye.set(0,0,1),ye.normalize();let qe=Math.max(be*.6,.3),Je=R.clone().add(ye.multiplyScalar(qe));g.setPosition(Je.x,Je.y,Je.z,!0),u.anchorNodeName&&u.anchorLocalPosition&&(Is.current=Je.clone().sub(R))}g.setTarget(R.x,R.y,R.z,!0),Nn.current&&clearTimeout(Nn.current),Nn.current=setTimeout(()=>{g.smoothTime=K,Nn.current=null},800),hr(u)},[hr]),Eg=Q(()=>{Xe.length!==0&&(Xo(!0),zn(0),jn(Xe[0]))},[Xe,jn]),Ag=Q(()=>{if(Xe.length===0||Wt<0)return;Jo(!0);let u=(Wt-1+Xe.length)%Xe.length;zn(u),jn(Xe[u]),setTimeout(()=>Jo(!1),500)},[Wt,Xe,jn]),Rg=Q(()=>{if(Xe.length===0||Wt<0)return;if(Wt===Xe.length-1){if(Xo(!1),zn(-1),hr(null),Ee.current&&Tr.current){let g=Tr.current;Ee.current.setLookAt(g.position[0],g.position[1],g.position[2],g.target[0],g.target[1],g.target[2],!0)}return}Jo(!0);let u=Wt+1;zn(u),jn(Xe[u]),setTimeout(()=>Jo(!1),500)},[Wt,Xe,jn,hr]),Lg=Q(()=>{if(Xo(!1),zn(-1),hr(null),Ee.current&&Tr.current){let u=Tr.current;Ee.current.setLookAt(u.position[0],u.position[1],u.position[2],u.target[0],u.target[1],u.target[2],!0)}},[hr]);Se(()=>{zn(-1),Xo(!1)},[Xe.length]),Se(()=>()=>{Nn.current&&clearTimeout(Nn.current)},[]),Se(()=>{Zo&&Ii&&hr(Zo)},[Zo,hr,Ii]),Se(()=>{if(Ge?.annotations===void 0)return;let u=Ge.annotations.map(g=>({...g,localPosition:g.localPosition??g.worldPosition}));Qu(u)},[Ge?.annotations]);let zi=Q(()=>{if(z!==void 0){M?.(null);return}Ju(null)},[z,M]),Ni=z!==void 0?z:Pg?.annotation??null,ji=Mt(()=>Ni?pr.find(g=>g.id===Ni.id)??null:null,[Ni,pr]);Se(()=>{Ni&&!ji&&zi()},[Ni,ji,zi]);let Ui=!H&&d!==void 0,fe=Ui?W:sg;Ht.current=fe,Se(()=>{if(!pe)return;let u=fe[pe.objectKey]?.style?.material?.[pe.textureKey]?.path;(!Ei||!u)&&Pi(null)},[fe,Ei,pe]);let Ys=ue({}),[ea,kg]=ce({});Se(()=>{let u={...ea},g=!1,x=new Set;for(let[R,D]of Object.entries(fe)){x.add(R);let K=D.style?.material,le=Ys.current[R]??{},ge={};for(let ne of Wr){let be=K?.[ne]?.path;be&&(ge[ne]=be,be!==le[ne]&&(u[R]!==ne&&(g=!0),u[R]=ne))}let me=u[R];if(me&&!ge[me]){let ne=Wr.find(be=>!!ge[be]);ne?u[R]=ne:delete u[R],g=!0}Ys.current[R]=ge}for(let R of Object.keys(u))x.has(R)||(delete u[R],delete Ys.current[R],g=!0);g&&kg(u)},[fe]);let Dg=Mt(()=>Object.entries(fe).map(([u,g])=>JSON.stringify([u,g.modelObjectId,g.transform??null])).sort().join(""),[fe]),{measureMode:Fi,measureModeRef:Og,measurePoints:ed,showDimensions:Ks,measureBox:td,modelBounds:Ig,refreshBounds:rd,clearMeasurements:Bg,toggleMeasureMode:zg,toggleDimensions:Ng,handleMeasurePointerDown:jg,handleMeasureClick:Ug}=Wp({canvasAreaRef:ur,controlsRef:Ee,sceneRef:Tt,modelUrl:e,modelRotation:X.model.rotation,bindingTransformSignature:Dg,modelLoaded:un}),{isDownloading:Qs,downloadMenuOpen:Fg,uvExportError:nd,toggleDownloadMenu:Vg,handleDownloadMesh:Gg,handleDownloadScreenshot:Hg,handleDownloadUvLayout:Wg}=Gp({sceneRef:Tt,materialRefs:Vo,rendererCaptureRef:er,objectBindings:fe,downloadFilename:gt}),id=Mt(()=>Object.fromEntries(Object.entries(fe).filter(([,u])=>u.visible===!1).map(([u])=>[u,!0])),[fe]),_r=Mt(()=>{let u=new WeakMap,g=new Map,x=new Map;for(let[R,D]of Object.entries(fe))u.set(D,R),g.has(D.id)||g.set(D.id,R),x.has(D.modelObjectId)||x.set(D.modelObjectId,R);return{byReference:u,byId:g,byModelObjectId:x}},[fe]),mr=Q(u=>u?_r.byReference.get(u)??_r.byModelObjectId.get(u.modelObjectId)??_r.byId.get(u.id)??null:null,[_r]),Js=l!==void 0,Vi=Js?l??null:ug,jt=mr(Vi),Zs=jt?cr.current[jt]??null:null,Xg=jt?ea[jt]:void 0,od=mr(_e?p??Ns??lg:null),qg=od?cr.current[od]??null:null,ad=Q(u=>{cg(u),m?.(u)},[m]),sd=te&&Vi!==null&&jt!==null,Gi=(jt?fe[jt]:null)??Vi,el=Gi&&(Gi.modelObjectId||Gi.id)||null,Un=el?pg[el]??null:null;Se(()=>{Ui||Pu(W)},[Ui,W]),Se(()=>{U?.(id)},[id,U]);let Fn=Q(u=>{if(Ur==="pointerLock"){_i("orbit");return}Js||dg(u),h?.(u)},[Ur,_i,Js,h]),fr=Q(u=>{Ui||Pu(u),d?.(u)},[Ui,d]),ld=ue(null),ta=Q(u=>{if(!H)return;let g=`${e}
25
+ ${t??""}`,x=ld.current===g?Ht.current:$f;ld.current=g;let R=$d(u);for(let D of Object.keys(R))x[D]&&(R[D]=x[D]);fr(R)},[H,e,t,fr]),ra=ue({}),Vn=Q(u=>{let g=Dp(cr.current[u]),x=Ht.current[u]?.style?.material,R=x?.emissive??g.color,D=x?.emissiveIntensity??g.intensity;return{color:R,intensity:D,on:R!=="#000000"&&D>0}},[]),Hi=Q((u,g)=>{let x=Ht.current,R=x[u];R&&fr({...x,[u]:{...R,style:{...R.style,material:{...R.style?.material,...g}}}})},[fr]),tl=u=>u==="#000000"?"#ffffff":u,$g=Q(u=>{let g=jt;if(!g||!u)return;let x=Ht.current[g];x&&fr({...Ht.current,[g]:{...x,transform:{...x.transform,...u}}})},[fr,jt]),gr=Q((u,g)=>fe[u]?u:g?mr(g):_r.byId.get(u)??_r.byModelObjectId.get(u)??null,[fe,mr,_r]),_t=Q((u,g)=>{let x=gr(u),R=x?fe[x]:void 0;!x||!R||fr({...fe,[x]:{...R,style:g(R.style)}})},[gr,fe,fr]),Xt=Q(()=>{if(tr){let u=In[tr.objectId]?.hex;u!==void 0&&(_t(tr.objectId,g=>({...g,material:{...g?.material,baseColor:u}})),Ho(g=>({...g,[tr.objectId]:{}})))}Ru(null)},[tr,In,_t]),cd=Q(()=>{Fn(null),zs(null),Xt()},[Fn,Xt]),rl=Q((u,g,x,R,D)=>{let K=_u.current,le=ur.current,ge=Ee.current?.camera;if(!K)return{objectId:u,x:24,y:24};let me=K.getBoundingClientRect(),ne=12,be=me.width-g-ne,ye=me.height-x-ne,qe=Math.max(ne,(me.width-g)/2),Je=Math.max(ne,(me.height-x)/2),Xn=gr(u,R),$i=Xn?cr.current[Xn]:null,br=(qn,mn)=>mn<=ne?ne:Math.min(Math.max(qn,ne),mn);if(le&&ge&&$i){let qn=le.getBoundingClientRect(),mn=new It;new Ci().setFromObject($i).getCenter(mn),mn.project(ge);let yb=(mn.x+1)/2*qn.width+(qn.left-me.left),vb=(1-mn.y)/2*qn.height+(qn.top-me.top);return{objectId:u,x:br(yb+24,be),y:br(vb-x/2,ye)}}let dl=typeof D?.screenX=="number"?D.screenX-me.left:qe,pl=typeof D?.screenY=="number"?D.screenY-me.top:Je;return{objectId:u,x:br(dl,be),y:br(pl,ye)}},[gr]),na=Q(u=>{let{objectId:g,action:x,binding:R}=u;switch(zs(u),x.id){case"toggle-visibility":{let D=g;R?.modelObjectId&&(D=_r.byModelObjectId.get(R.modelObjectId)??D);let K=fe[D],le=K?.visible===!1;K&&fr({...fe,[D]:{...K,visible:le}});break}case"change-color":Xt(),Lu(D=>{if(!(g in D))return D;let K={...D};return delete K[g],K}),Ho(D=>{let K=gr(g,R)??g,le=D[g]?.hex,ge=fe[K]?.style?.material?.baseColor;return{...D,[g]:{...D[g],hex:le??ge??"#ffffff"}}}),Ru(rl(g,225,250,R,u));break;case"change-material":Xt(),Lu(D=>{if(g in D){let K={...D};return delete K[g],K}return{...D,[g]:rl(g,300,320,R,u)}});break;case"toggle-light":case"change-light-color":case"set-brightness":{let D=gr(g,R);if(!D)break;let K=kp(Ne.current,fe,D);if(x.id==="toggle-light"){if(K.length>0){let ne=!K.some(be=>be.visible);it(Object.fromEntries(K.map(be=>[be.id,{visible:ne}])));break}let me=Vn(D);me.on?(ra.current[D]=me.intensity,Hi(D,{emissiveIntensity:0})):Hi(D,{emissive:tl(me.color),emissiveIntensity:ra.current[D]??1});break}let le=x.id,ge=K.length>0?null:Vn(D);Zt(me=>me?.objectId===g&&me.kind===le?null:{objectId:g,kind:le,target:ge?{type:"glow",objectKey:D,baseIntensity:ge.on?ge.intensity:ra.current[D]??1}:{type:"lights",lightIds:K.map(ne=>ne.id),baseIntensity:Object.fromEntries(K.map(ne=>[ne.id,ne.intensity]))},percent:ge&&!ge.on?0:100});break}default:break}I?.(u)},[fr,Hi,it,Vn,fe,rl,I,Xt,gr,_r]);Se(()=>{if(tr)return window.addEventListener("pointerdown",Xt),()=>window.removeEventListener("pointerdown",Xt)},[tr,Xt]),Se(()=>{if(!ji)return;let u=g=>{if(Bs.current&&!Bs.current.contains(g.target)){if(g.target.closest?.(".ri-annotationMarker"))return;zi()}};return document.addEventListener("mousedown",u),document.addEventListener("touchstart",u),()=>{document.removeEventListener("mousedown",u),document.removeEventListener("touchstart",u)}},[ji,zi]),Se(()=>{if(!Lt)return;let u=g=>{let x=g.target;if(x.closest?.(".ri-annotationPopup")||x.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let R=ur.current;!R||!R.contains(x)||(Yo(null),Ko({title:"",description:""}))};return document.addEventListener("mousedown",u,!0),document.addEventListener("touchstart",u,!0),()=>{document.removeEventListener("mousedown",u,!0),document.removeEventListener("touchstart",u,!0)}},[Lt]);let ud=Q((u,g)=>{let x=On.current[u];x&&URL.revokeObjectURL(x),g.startsWith("blob:")?On.current[u]=g:delete On.current[u],_t(u,R=>({...R,material:{...R?.material,texture:{path:g}}}))},[_t]),Yg=u=>{let g=u.target.files?.[0],x=Cu.current;if(!g||!x)return;let R=gr(x);R&&(A?A(g,R).then(D=>ud(R,D),D=>console.error("onTextureUpload failed:",D)):ud(R,URL.createObjectURL(g)),u.target.value="")},dd=u=>{Cu.current=u,Su.current?.click()},pd=u=>{let g=gr(u);if(!g)return;_t(g,R=>R?.material?.texture?{...R,material:{...R.material,texture:void 0}}:R);let x=On.current[g];x&&(URL.revokeObjectURL(x),delete On.current[g])},Gn=!!F,rr=typeof F=="object"?F:void 0,Kg=Q((u,g,x)=>{if(rr?.onOffsetChange){rr.onOffsetChange(u,g,x);return}_t(u,R=>{let D=R?.material?.texture;if(!D?.path)return R;let K=D.offset??[0,0],le=[K[0],K[1]];return le[g]=x,{...R,material:{...R?.material,texture:{...D,offset:le}}}})},[_t,rr]),Qg=Q((u,g)=>{if(rr?.onRotationChange){rr.onRotationChange(u,g);return}_t(u,x=>{let R=x?.material?.texture;if(!R?.path)return x;let D=(g%360+360)%360;return{...x,material:{...x?.material,texture:{...R,rotation:D*Math.PI/180}}}})},[_t,rr]),Jg=Q(()=>{Pi(null),rr?.onEndPositioning?.()},[rr]),nl=ue(S);nl.current=S;let nr=Q(()=>{let u=Ee.current;!u||!nl.current||nl.current({objectBindings:Ht.current,homeCameraState:Tr.current,captureImage:g=>Ca(er.current,g),invalidate:()=>er.current?.invalidate(),raw:{controls:u,scene:Tt.current,nodes:cr.current}})},[]),Hn=Q(async(u=!1)=>{let g=Ee.current,x=Wo.current??Tt.current;if(!g||!x)return!1;try{if(u){let R=(x instanceof Ci?x:new Ci().setFromObject(x)).getBoundingSphere(new mM),D=R.center.clone(),le=g.getPosition(new It).clone().sub(g.getTarget(new It));le.lengthSq()<1e-6&&le.set(0,0,1),le.normalize();let ge=Math.max(R.radius*10,20),me=D.clone().add(le.multiplyScalar(ge));await g.setLookAt(me.x,me.y,me.z,D.x,D.y,D.z,!1)}return Li(!0),await Yf(g,()=>g.fitToBox(x,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(R=>{let D=performance.now(),K=()=>{g.active===!1||performance.now()-D>8e3?(g.dispatchEvent({type:"update"}),er.current?.invalidate(),R()):(er.current?.invalidate(),setTimeout(K,100))};setTimeout(K,100)}),Vr.current=!0,Oi(),nr(),!0}catch(R){return console.error("Fit scene error:",R),!1}},[Oi,nr]);Se(()=>{if(Vr.current=!1,Ai.current=!1,Tr.current=null,Tt.current=null,Wo.current=null,Ou(!1),Vs(!1),Gs(null),ki(!1),Hs.current="",Gu({total:0,missing:0}),Hu("Loading model..."),Ws(null),!e){Ri(!1),Li(!0);return}Ri(!0),Li(!!He||Us.current);let u=!1,g=null,x=D=>{g=setTimeout(R,D)},R=()=>{if(u||Vr.current||Ai.current)return;let D=Wo.current??Tt.current;if(!Ee.current||!D){x(100);return}if(js.current=jM(D,Ee.current,N?.maxDistance)??js.current,Zd(Ee.current)){Vr.current=!0,Oi(),nr(),Ri(!1),Li(!0),er.current?.invalidate();return}Ai.current=!0,(He?He():Us.current?Promise.resolve(!0):Hn(!0)).then(le=>{Vr.current=le!==!1,Vr.current?(Oi(),nr(),Ri(!1)):u||x(100)}).catch(()=>{Vr.current=!1,u||x(100)}).finally(()=>{Ai.current=!1})};return x(50),()=>{u=!0,g&&clearTimeout(g)}},[Oi,N?.maxDistance,Hn,e,nr,He,t]),Se(()=>{if(!Bt)return;let u=Fr;if(!u)return;let g=null,x=new ResizeObserver(()=>{!Vr.current||Ai.current||(g&&clearTimeout(g),g=setTimeout(()=>{Hn()},150))});return x.observe(u),()=>{x.disconnect(),g&&clearTimeout(g)}},[Fr,Hn,Bt]);let hd=Q(u=>{if(Og.current||(dr(!1),Xt(),zs(null),Fn(u),Vt||!ht))return;let g=Ee.current,x=mr(u),R=x?cr.current[x]:null;g&&u.cameraState?.position&&u.cameraState?.target?(g.setPosition(u.cameraState.position[0],u.cameraState.position[1],u.cameraState.position[2],!0),g.setTarget(u.cameraState.target[0],u.cameraState.target[1],u.cameraState.target[2],!0)):g&&R&&g.fitToBox(R,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Fn,Xt,mr,Vt,ht]),md=Q(u=>{if(!Ei)return!1;let g=mr(u);if(!g)return!1;let x=ea[g];return x?(Wn.current=!1,hn.current=null,Pi({objectKey:g,textureKey:x}),!0):!1},[Ei,mr,ea]),il=ue(!1),fd=Q((u,g)=>f?.({binding:u,...g})===!0?(il.current=!0,!0):md(u),[f,md]),gd=Mt(()=>b?(u,g)=>b({binding:u,...g}):void 0,[b]),bd=Q(u=>{if(Fn(u),Vt)return;let g=Ee.current,x=mr(u),R=x?cr.current[x]:null;if(!g||!R)return;let D=u.cameraState;D?.position&&D?.target?(g.setPosition(D.position[0],D.position[1],D.position[2],!0),g.setTarget(D.target[0],D.target[1],D.target[2],!0)):g.fitToBox(R,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Fn,mr,Vt]);Se(()=>{nr()},[nr,fe]);let yd=Q((u,g)=>{UM(g,js.current),_?.(Pr(u,g)),nr()},[nr,_]),Zg=Q(u=>{ku.current=new Set(u.map(g=>g.name)),mg(g=>g+1),ta(u.map(g=>g.name)),i?.(u)},[ta,i]),eb=Q(u=>{Wo.current=u,er.current?.invalidate()},[]),vd=Q(u=>{Tt.current=u,rd(u),Gu(BM(u));let g=kd(u);bg(g>ml?g:null),Vu(!1),Ws(null),g>ml&&Hu(`Preparing large model (${Math.round(g/1e6)}M triangles) \u2014 the first display can take a while on this device...`),Ou(!0),Vs(!1),Gs(null),Uu(!1),t||(i&&i(sf(u)),ta(Yd(u))),C?.(u),k?.(Xd(u)),nr()},[ta,nr,k,i,C,rd,t]),xd=Q(u=>{Ri(!1),Li(!0),Vs(!0),Gs(u),y?.(u)},[y]),tb=Q(u=>{u.lengthComputable&&u.total>0&&Ws(u.loaded/u.total*100),j?.(u)},[j]),wd=Q((u,g,x)=>{if(!q)return;let R={...X,lighting:{...X.lighting,lights:X.lighting.lights.map(D=>D.id===u?{...D,position:g,...x?{rotation:x}:{}}:D)}};q(R)},[X,q]);Se(()=>{let u=Tt.current;if(!un||!u){ki(!1);return}let g=Object.entries(fe);if(g.length===0){ki(!1);return}let x=t?ku.current:new Set(Object.keys(Yn(u).nodesById));if(!x||x.size===0){ki(!1);return}let R=g.map(([K,le])=>le.modelObjectId??K).filter(K=>!x.has(K));ki(R.length>0),gg(R.length);let D=R.join(`
26
+ `);if(R.length>0&&D!==Hs.current){let K=R.slice(0,10).map(ge=>`"${ge}"`).join(", "),le=R.length>10?` and ${R.length-10} more`:"";console.warn(`[react-immersive] ${R.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${K}${le}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}Hs.current=D},[un,fe,hg,t]),Se(()=>{if(I||J)return;let u=[];for(let[x,R]of Object.entries(fe))for(let D of R.actions??[])fl.includes(D.id)||u.push(`"${D.id}" on "${R.label??x}"`);let g=u.join(`
27
+ `);if(u.length>0&&g!==Nu.current){let x=u.slice(0,10).join(", "),R=u.length>10?` and ${u.length-10} more`:"";console.warn(`[react-immersive] ${u.length} action button(s) do nothing because ModelViewer has no onAction handler: ${x}${R}. ModelViewer itself handles ${fl.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}Nu.current=g},[fe,J,I]);let ol=Q(async()=>{if(He){await He();return}let u=Ee.current;if(!u)return;let g=Tr.current;try{g?await Yf(u,()=>u.setLookAt(g.position[0],g.position[1],g.position[2],g.target[0],g.target[1],g.target[2],!0)):await Hn()}catch(x){console.error("Reset camera error:",x)}},[He,Hn]),WM=Q(()=>{Bn(!1),dr(!0)},[]),XM=Q(()=>{dr(!1)},[]),rb=Q(()=>{dr(!1),Bn(!0),setTimeout(()=>{ol()},100)},[ol]),nb=Q((u,g)=>{yd(u,g)},[yd]),Md=1,ib=4,ob=.0015,ab=.1,sb=8,hn=ue(null),Wn=ue(!1),al=ue([0,0]),ia=ue([0,0]),oa=ue(1),qt=ue(null),aa=Q((u,g)=>{let x=pe;if(!x)return;let R=Ht.current[x.objectKey]?.style?.material?.[x.textureKey],D=R?.path;if(!D)return;let K=R?.rotation??0,le=ir(x.textureKey),ge=to(D,le),me=Vo.current[x.objectKey],ne=Array.isArray(me)?me:me?[me]:[],be=la[x.textureKey];for(let ye of ne){let qe=ye;be in qe&&(qe[be]=ya(qe.userData,x.textureKey,ge,D,u,g,K))}er.current?.invalidate()},[pe]),lb=Q(u=>{if(!pe)return;u.currentTarget.setPointerCapture?.(u.pointerId),hn.current={x:u.clientX,y:u.clientY},Wn.current=!1;let g=Ht.current[pe.objectKey]?.style?.material?.[pe.textureKey];if(al.current=g?.offset??[0,0],ia.current=al.current,oa.current=g?.scale??1,qt.current===null){let x=()=>{er.current?.invalidate(),qt.current=requestAnimationFrame(x)};qt.current=requestAnimationFrame(x)}},[pe]),sl=Q(u=>{if(!pe||!hn.current)return;let g=ur.current,x=g?.clientWidth||1,R=g?.clientHeight||1,D=u.clientX-hn.current.x,K=u.clientY-hn.current.y;if(!Wn.current&&Math.hypot(D,K)<ib)return;Wn.current=!0;let le=-(D/x)*Md,ge=K/R*Md,[me,ne]=al.current,be=[me+le,ne+ge];ia.current=be,aa(be,oa.current),_t(pe.objectKey,ye=>({...ye,material:{...ye?.material,[pe.textureKey]:{...ye?.material?.[pe.textureKey],path:Ht.current[pe.objectKey]?.style?.material?.[pe.textureKey]?.path,offset:be}}}))},[pe,aa,_t]),Wi=Q(u=>{if(!pe)return;u.target?.releasePointerCapture?.(u.pointerId),qt.current!==null&&(cancelAnimationFrame(qt.current),qt.current=null);let g=Wn.current,x=pe;if(g){_t(x.objectKey,R=>({...R,material:{...R?.material,[x.textureKey]:{...R?.material?.[x.textureKey],path:Ht.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:ia.current}}})),hn.current=null,Wn.current=!1;return}hn.current=null,Pi(null)},[pe,_t]);Se(()=>{if(!pe)return qt.current!==null&&(cancelAnimationFrame(qt.current),qt.current=null),()=>{qt.current!==null&&(cancelAnimationFrame(qt.current),qt.current=null)}},[pe]),Se(()=>{let u=Fr;if(!(!u||!pe))return u.addEventListener("pointermove",sl),u.addEventListener("pointerup",Wi),u.addEventListener("pointercancel",Wi),()=>{u.removeEventListener("pointermove",sl),u.removeEventListener("pointerup",Wi),u.removeEventListener("pointercancel",Wi)}},[Fr,pe,sl,Wi]);let ll=Q(u=>{if(!pe)return;u.preventDefault();let g=pe,x=Math.exp(-u.deltaY*ob),R=Math.min(sb,Math.max(ab,oa.current*x));oa.current=R,aa(ia.current,R),_t(g.objectKey,D=>({...D,material:{...D?.material,[g.textureKey]:{...D?.material?.[g.textureKey],path:Ht.current[g.objectKey]?.style?.material?.[g.textureKey]?.path,scale:R}}}))},[pe,aa,_t]);Se(()=>{let u=Fr;if(!(!u||!pe))return u.addEventListener("wheel",ll,{passive:!1}),()=>u.removeEventListener("wheel",ll)},[Fr,pe,ll]);let cb=Q(u=>{if(il.current){il.current=!1;return}let g=Y==="scene"&&Ie==="Annotations";if(u.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let R=ur.current,D=Ee.current,K=D?.camera,le=Tt.current;if(!R||!D||!K||!le||!g&&!D.enabled)return;let ge=R.getBoundingClientRect(),me=(u.clientX-ge.left)/ge.width*2-1,ne=-((u.clientY-ge.top)/ge.height)*2+1,be=new hM;be.setFromCamera(new fM(me,ne),K);let ye=be.intersectObject(le,!0);if(ye.length===0)return;if(!g){let{x:br,y:dl,z:pl}=ye[0].point;D.setOrbitPoint(br,dl,pl);return}let qe=ye[0],Je=qe.point,Xn=le.worldToLocal(qe.point.clone()),$i=[0,0,1];if(qe.face){let br=qe.face.normal.clone().transformDirection(qe.object.matrixWorld).normalize();$i=[br.x,br.y,br.z]}Yo({worldPosition:[Je.x,Je.y,Je.z],localPosition:[Xn.x,Xn.y,Xn.z],worldNormal:$i,anchor:DM(qe),screenX:u.clientX-ge.left,screenY:u.clientY-ge.top}),Ko({title:"",description:""})},[Y,Ie]),Sd=Q(()=>{if(!Lt||!Gr.title.trim())return;Qo.current+=1;let g={id:Qo.current,worldPosition:Lt.worldPosition,localPosition:Lt.localPosition,worldNormal:Lt.worldNormal,anchorNodeName:Lt.anchor?.anchorNodeName,anchorLocalPosition:Lt.anchor?.anchorLocalPosition,title:Gr.title.trim(),description:Gr.description},x=[...pr,g];Qu(x),v?.(x),Yo(null)},[Lt,Gr,pr,v]),cl=Q(()=>Yo(null),[]),ub=Q(u=>{hr(u)},[hr]);if(Ve.status==="checking")return B("div",{className:"ri-viewer ri-viewer--license-checking",children:B(ma,{title:"Verifying License",message:"Checking your license key..."})});if(Ve.status==="invalid")return B("div",{className:"ri-viewer ri-viewer--license-invalid",children:B(ma,{tone:"error",title:"Invalid License",message:Ve.isLocalDomain?Ve.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Hr=Un?gr(Un.objectId):null,ul=Hr?fe[Hr]?.style?.material?.texture?.path:void 0,Cd=ul?cp(ul)??ul:void 0,Td=Gn?rr?.offset??(Hr?fe[Hr]?.style?.material?.texture?.offset:void 0):void 0,_d=Gn?rr?.rotationDegrees??(Hr?((fe[Hr]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,Pd=Gn?rr?.isPositioning??!!(Hr&&pe?.objectKey===Hr&&pe?.textureKey==="texture"):!1,Ed=Gn?Kg:void 0,Ad=Gn?Qg:void 0,Rd=Gn?Jg:void 0,db=ur.current?.offsetWidth??600,pb=ur.current?.offsetHeight??400,hb=350,mb=290,fb=Lt?Math.min(Lt.screenX+12,db-hb-8):0,gb=Lt?Math.min(Lt.screenY,pb-mb-8):0,bb=ze&&!!e&&!Iu&&!un,Xi=Te&&(pn&&($s||qu)||$u||!!$o),qi=u=>16+u*42;return he("div",{className:"ri-viewer",style:{background:Zf},children:[he("div",{className:"ri-viewerLeft",ref:_u,children:[ie?ie({isOpen:sd,selectedObject:Gi,currentAction:Eu,onClose:cd,onAction:na}):B(au,{isOpen:sd,selectedObject:Gi,currentAction:Eu,onClose:cd,onAction:na,renderActionExtra:u=>{if(u==="change-color"&&tr)return B(tu,{inline:!0,colorPicker:tr,onClose:Xt,itemMaterials:In,setItemMaterials:Ho});if((u==="change-light-color"||u==="set-brightness")&&yt?.kind===u&&yt.objectId===el){let g=yt,x=g.target,R=x.type==="lights"?X.lighting.lights.find(D=>D.id===x.lightIds[0])?.color??"#ffffff":tl(Vn(x.objectKey).color);return B(Ip,{kind:g.kind,color:R,brightness:g.percent,onColorChange:D=>{if(x.type==="lights"){it(Object.fromEntries(x.lightIds.map(le=>[le,{color:D}])));return}let K=Vn(x.objectKey);Hi(x.objectKey,{emissive:D,emissiveIntensity:K.intensity>0?K.intensity:ra.current[x.objectKey]??1})},onBrightnessChange:D=>{if(Zt({...g,percent:D}),x.type==="lights"){it(Object.fromEntries(x.lightIds.map(K=>[K,{intensity:(x.baseIntensity[K]??0)*(D/100)}])));return}Hi(x.objectKey,{emissive:tl(Vn(x.objectKey).color),emissiveIntensity:x.baseIntensity*(D/100)})},onClose:()=>Zt(null)})}return u==="change-material"&&Un?B(ru,{inline:!0,triggerFileUpload:dd,materialPopup:Un,textureUrl:Cd,clearTexture:pd,offset:Td,rotationDegrees:_d,onOffsetChange:Ed,onRotationChange:Ad,isPositioning:Pd,onEndPositioning:Rd}):null}}),he("div",{className:`ri-canvasArea ${Fi?"ri-canvasArea--measuring":""} ${Fs?"":"ri-canvasArea--positioning"} ${zt?"ri-canvasArea--moveMode":""}`,ref:ag,tabIndex:mt?0:void 0,onDoubleClick:cb,onPointerDown:u=>{if(mt&&ur.current?.focus({preventScroll:!0}),pe){lb(u);return}jg(u)},onClick:pe?void 0:Ug,children:[Ei&&!t&&(pe||Xg)&&B("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:pe?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:pe?"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish":"Double-click to move or zoom"}),Bu&&!ju&&he("div",{className:"ri-bindingsMismatchBanner",children:[B(Os,{size:14,className:"ri-bindingsMismatchBanner__icon"}),B("span",{children:zu===1?"1 object binding doesn't match this model":`${zu} object bindings don't match this model`}),B("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:u=>{u.stopPropagation(),Uu(!0)},"aria-label":"Dismiss",children:B(bu,{size:12})})]}),Fu!==null&&!yg&&he("div",{className:`ri-largeModelBanner ${Bu&&!ju?"ri-largeModelBanner--offset":""}`,children:[B(Os,{size:14,className:"ri-largeModelBanner__icon"}),he("span",{children:["Very large model (",Math.round(Fu/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),B("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:u=>{u.stopPropagation(),Vu(!0)},"aria-label":"Dismiss",children:B(bu,{size:12})})]}),Ti.model.renderer==="uv-checker"&&Di.missing>0&&he("div",{className:"ri-uvCheckerBanner",role:"status",children:[B(Os,{size:14,className:"ri-uvCheckerBanner__icon"}),he("span",{children:[Di.missing===Di.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Di.missing} of ${Di.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),B("input",{ref:Su,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:Yg}),he(Ql,{camera:O,backgroundColor:$,shadows:Z&&X.shadows.enabled,sceneConfig:Ti,selectedObjectRef:Zs,hoveredObjectRef:qg,highlightOnHover:_e,renderMode:Gt,maxDpr:Pe,reduceGpuLoad:eg,xrStore:pn,rendererCaptureRef:er,preserveDrawingBuffer:se,children:[B(ec,{lightingConfig:X.lighting,shadowConfig:X.shadows,shadowsEnabled:Z,environmentRotation:X.environment.rotation,environmentConfig:X.environment,modelBounds:Ig,objectBindings:fe,nodeRefs:cr}),ke&&X.lighting.lights.map(u=>!u.visible||u.type==="none"||u.type==="hemisphere"||u.attachment?null:B(Ff,{light:u,position:u.position,rotation:u.rotation,color:u.color,intensity:u.intensity,visible:u.visible,onPositionChange:g=>wd(u.id,g,u.rotation),onRotationChange:g=>wd(u.id,u.position,g),onDraggingChange:xu},u.id)),B(Jl,{controlsRef:Ee,onCameraChange:nb,cameraLimits:N,controllerType:Ur,onPointerLockExit:()=>_i("orbit")}),B(NM,{enabled:Ur==="pointerLock"?!1:Uo??X.model.autoRotate??!1,speed:ft??X.model.autoRotateSpeed??1,controlsRef:Ee}),ln&&B(uM,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Ee.current?.update(0),er.current?.invalidate()},children:B(dM,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),zt&&Zs&&jt&&B(gu,{node:Zs,space:St,onTransformChange:$g,onDraggingChange:u=>{xu(u),Vi&&P?.(Vi,u)}},jt),B(Sa,{onLoadError:xd,children:B(Hf,{fallback:null,children:(()=>{let u=he(Si,{children:[t?B(Xc,{url:t,rotation:Ti.model.rotation,errorTarget:r,cacheSize:n,decoderConfig:yu,objectBindings:fe,itemMaterials:In,sceneConfig:Ti,selectedItem:jt,panelHoveredItem:p??Ns,highlightOnHover:_e,onItemClick:hd,onItemHover:ad,onItemDoubleClick:fd,onItemContextMenu:gd,onObjectCatalog:Zg,onTilesetBounds:eb,onModelLoaded:vd,onLoadError:xd,nodeRefsOut:cr,onNodeRefsChange:Tu,materialRefsOut:Vo,explodeFactor:qo,suspendBindingTransforms:Fo}):B(nc,{url:e,modelFormat:o,objectBindings:fe,selectedItem:jt,itemMaterials:In,onItemClick:hd,onItemDoubleClick:fd,onItemContextMenu:gd,onItemHover:ad,onModelLoaded:vd,onAnimationsReady:G,nodeRefsOut:cr,onNodeRefsChange:Tu,materialRefsOut:Vo,panelHoveredItem:p??Ns,sceneConfig:Ti,zoomOnSelected:ht,highlightOnHover:_e,decoderConfig:yu,onLoadProgress:tb,explodeFactor:qo,suspendBindingTransforms:Fo}),B(Qc,{annotations:pr,sceneConfig:X,activeAnnotation:ji,popupRef:Bs,canvasRootRef:ur,worldPositionsRef:Mu,modelLoaded:un,onAnnotationClick:ub,onCloseAnnotation:zi,hideCloseButton:Ii,showAnnotationOnHover:ot}),B(IM,{annotation:Zo,enabled:Ii,controlsRef:Ee,offsetRef:Is}),Bi&&B(Zc,{controlsRef:Ee,sceneRef:Tt,config:Bi,playing:dn,resetOnPlay:wg,onFinished:()=>{dr(!1),Bn(!1)},onUserInteract:()=>{dr(!1)}}),V&&B(Jc,{points:ed,unit:Oe,box:td,showDimensions:Ks})]});return pn?B(Mf,{ref:Mg,box:td,scaleMode:ee,onARStateChange:_g,children:u}):u})()})},t??e),jr&&B(Hf,{fallback:null,children:jr})]}),Nt&&B("div",{className:"ri-overlay",children:Nt}),ze&&e&&Iu&&(()=>{let u=Lp(fg,t||e,t?void 0:o);return B("div",{className:"ri-loadError",role:"alert",children:he("div",{className:"ri-loadError__card",children:[he("div",{className:"ri-loadError__header",children:[B(Os,{size:16,"aria-hidden":"true"}),B("span",{className:"ri-loadError__title",children:u.title})]}),B("p",{className:"ri-loadError__detail",children:u.detail}),B("p",{className:"ri-loadError__source",children:t||e}),u.technical&&B("p",{className:"ri-loadError__technical",children:u.technical})]})})})(),B(qd,{visible:bb,message:vg,progress:xg??void 0}),Xi&&he("div",{className:"ri-xrTools",style:{top:`${qi(0)}px`},children:[!$s&&$u&&he("button",{type:"button",className:"ri-xrButton",onClick:Tg,title:"View this model in AR with Apple Quick Look",children:[B(Wf,{size:16}),"View in AR"]}),$o&&he("button",{type:"button",className:"ri-xrButton",onClick:Cg,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":Yu,children:[B(CM,{size:16}),B("span",{children:"Open on phone"})]}),pn&&$s&&he("button",{type:"button",className:"ri-xrButton",onClick:()=>pn.enterAR().catch(u=>{console.error("Failed to enter AR session:",u)}),title:"View this model in your space",children:[B(qf,{size:16}),B("span",{className:"ri-xrButtonPrefix",children:"Enter"}),B("span",{children:"AR"})]}),pn&&qu&&he("button",{type:"button",className:"ri-xrButton",onClick:()=>pn.enterVR().catch(u=>{console.error("Failed to enter VR session:",u)}),title:"View this model in VR",children:[B(SM,{size:16}),B("span",{className:"ri-xrButtonPrefix",children:"Enter"}),B("span",{children:"VR"})]})]}),Sg,Yu&&$o&&B("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:u=>{u.target===u.currentTarget&&Ku()},children:he("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[B("button",{type:"button",className:"ri-mobileHandoffClose",onClick:Ku,"aria-label":"Close phone handoff",children:B(bu,{size:18})}),B(qf,{size:22,"aria-hidden":"true"}),B("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),B("p",{children:"Scan the code and choose AR."}),B("div",{className:"ri-mobileHandoffQr",children:B(pM,{value:$o,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),re&&B("div",{className:"ri-uvCheckerTools",style:{top:`${qi(Xi?1:0)}px`},children:B("button",{type:"button",className:`ri-measureButton ${Dn?"ri-measureButton--active":""}`,onClick:()=>Ct(u=>!(u??Cr)),title:Dn?"Disable UV checker":"Enable UV checker","aria-label":Dn?"Disable UV checker":"Enable UV checker","aria-pressed":Dn,children:B(RM,{size:16})})}),V&&he("div",{className:"ri-measureTools",style:{top:`${qi((Xi?1:0)+(re?1:0))}px`},children:[B("button",{type:"button",className:`ri-measureButton ${Fi?"ri-measureButton--active":""}`,onClick:zg,title:Fi?"Stop measuring":"Measure distance","aria-pressed":Fi,children:B(EM,{size:16})}),B("button",{type:"button",className:`ri-measureButton ${Ks?"ri-measureButton--active":""}`,onClick:Ng,title:"Toggle bounding dimensions","aria-pressed":Ks,children:B(AM,{size:16})}),ed.length>0&&B("button",{type:"button",className:"ri-measureButton",onClick:Bg,title:"Clear measurements",children:B(yM,{size:16})}),Fi&&B("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),oe&&he("div",{className:"ri-explodeTools",style:{top:`${qi((Xi?1:0)+(re?1:0)+(V?1:0))}px`},children:[B("button",{type:"button",className:`ri-measureButton ${Xs||qo>0?"ri-measureButton--active":""}`,onClick:()=>Xu(u=>!u),title:"Exploded view","aria-pressed":Xs,children:B(TM,{size:16})}),Xs&&B("div",{className:"ri-explodeSlider",onPointerDown:u=>u.stopPropagation(),children:B("input",{type:"range",min:0,max:100,value:Math.round(qo*100),onChange:u=>Wu(Number(u.target.value)/100),"aria-label":"Explode amount"})})]}),Bi&&he("div",{className:"ri-cinematicTools",style:{top:`${qi((Xi?1:0)+(re?1:0)+(V?1:0)+(oe?1:0))}px`},children:[B("button",{type:"button",className:`ri-measureButton ${dn?"ri-measureButton--active":""}`,onClick:()=>{dn?dr(!1):(Bn(!1),dr(!0))},title:dn?"Pause cinematic":"Play cinematic","aria-pressed":dn,children:dn?B(PM,{size:16}):B(_M,{size:16})}),dn&&B("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:rb,title:"Stop cinematic and reset camera",children:B(Xf,{size:16})})]}),(Fe||rt||Me&&Xe.length>0)&&he("div",{className:"ri-buttonContainer",children:[B("div",{className:"ri-tourControls",children:Me&&Xe.length>0&&B(Si,{children:Ii?he(Si,{children:[he("button",{className:"ri-tourButton",onClick:Ag,disabled:Zu||Xe.length===0||Wt<=0,title:"Previous annotation",children:[B(wM,{size:16}),B("span",{children:"Prev"})]}),B("button",{className:"ri-tourButton ri-tourButton--stop",onClick:Lg,title:"Stop guided tour",children:B(Xf,{size:16})}),he("button",{className:"ri-tourButton ri-tourButton--next",onClick:Rg,disabled:Zu||Xe.length===0,title:"Next annotation",children:[B("span",{children:"Next"}),B(MM,{size:16})]})]}):B("button",{className:"ri-navButtonSingle",onClick:Eg,disabled:Xe.length===0,title:"Start guided tour",children:"Guided Tour"})})}),he("div",{className:"mv-rightControls",children:[Fe&&B("button",{className:"mv-resetButton",onClick:ol,title:"Reset camera view",children:B(xM,{})}),he("div",{className:"mv-controllersWrapper",onPointerDown:u=>u.stopPropagation(),children:[ng&&he("div",{className:"mv-controllersMenu",children:[B("button",{type:"button",className:`mv-controllersMenuItem ${Ur==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>_i("orbit"),children:"Orbit Control"}),B("button",{type:"button",className:`mv-controllersMenuItem ${Ur==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>_i("pointerLock"),children:"Point Lock"})]}),B("button",{className:"mv-controllersButton",onClick:()=>vu(u=>!u),title:"Camera controller","aria-label":"Camera controller settings",children:B(LM,{size:15})})]}),rt&&he("div",{className:"mv-downloadWrapper",onPointerDown:u=>u.stopPropagation(),children:[Fg&&he("div",{className:"mv-downloadMenu",children:[he("button",{className:"mv-downloadMenuItem",onClick:Gg,disabled:Qs||!Tt.current,children:[B(Wf,{size:14}),"Download GLB"]}),B("div",{className:"mv-downloadMenuDivider"}),se&&he(Si,{children:[he("button",{className:"mv-downloadMenuItem",onClick:Hg,disabled:!Tt.current,children:[B(gM,{size:14}),"Download PNG"]}),B("div",{className:"mv-downloadMenuDivider"})]}),he("button",{className:"mv-downloadMenuItem",onClick:Wg,disabled:!Tt.current,children:[B(vM,{size:14}),"Download UV Layout"]}),nd&&B("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:nd})]}),B("button",{className:"mv-downloadButton",onClick:Vg,disabled:Qs||!Tt.current,title:"Download options",children:Qs?he(Si,{children:[B("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):he(Si,{children:[B(bM,{size:15}),"Download"]})})]})]})]}),Lt&&he("div",{className:"ri-annotationPopup",style:{left:fb,top:gb},onPointerDown:u=>u.stopPropagation(),onClick:u=>u.stopPropagation(),children:[B("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Gr.title,onChange:u=>Ko(g=>({...g,title:u.target.value})),onKeyDown:u=>{u.key==="Enter"&&Sd(),u.key==="Escape"&&cl()}}),B("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Gr.description,onChange:u=>Ko(g=>({...g,description:u.target.value})),onKeyDown:u=>{u.key==="Escape"&&cl()},rows:5}),he("div",{className:"ri-annotationActions",children:[B("button",{onClick:Sd,className:`ri-annotationOkBtn ${Gr.title.trim()?"":"disabled"}`,disabled:!Gr.title.trim(),children:"OK"}),B("button",{onClick:cl,className:"ri-annotationCancelBtn",children:"Cancel"}),B("div",{className:"ri-annotationIcons"})]})]})]}),ie&&tr&&B(tu,{colorPicker:tr,onClose:Xt,itemMaterials:In,setItemMaterials:Ho}),ie&&Un&&B(ru,{triggerFileUpload:dd,materialPopup:Un,textureUrl:Cd,clearTexture:pd,offset:Td,rotationDegrees:_d,onOffsetChange:Ed,onRotationChange:Ad,isPositioning:Pd,onEndPositioning:Rd})]}),Ue&&B("div",{className:"ri-viewerRight",children:Ce?Ce({objectBindings:fe,onAction:na,onFocus:bd,onHover:Au}):B(su,{objectBindings:fe,onAction:na,onFocus:bd,onHover:Au})}),nt&&B(Cf,{controlsRef:Ee,enabled:!0,opacity:bt,moveSensitivity:pt,position:dt})]})}export{ma as a,xb as b,no as c,zp as d,hS as e,cp as f,mS as g,fS as h,Sp as i,tS as j,ey as k,Ma as l,hu as m,iM as n,jf as o,_p as p,TS as q,FM as r,iS as s};