markuno_lib 1.2.95 → 1.2.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/markcad.js CHANGED
@@ -1 +1 @@
1
- import*as e from"three";import{TrianglesDrawMode as t,TriangleFanDrawMode as i,TriangleStripDrawMode as n,Loader as r,LoaderUtils as o,FileLoader as s,MeshPhysicalMaterial as A,Vector2 as a,Color as l,LinearSRGBColorSpace as c,SRGBColorSpace as p,SpotLight as h,PointLight as g,DirectionalLight as u,Matrix4 as d,Vector3 as f,Quaternion as I,InstancedMesh as m,InstancedBufferAttribute as b,Object3D as C,TextureLoader as B,ImageBitmapLoader as y,BufferAttribute as E,InterleavedBuffer as x,InterleavedBufferAttribute as w,LinearMipmapLinearFilter as P,NearestMipmapLinearFilter as v,LinearMipmapNearestFilter as D,NearestMipmapNearestFilter as S,LinearFilter as M,NearestFilter as L,RepeatWrapping as T,MirroredRepeatWrapping as _,ClampToEdgeWrapping as F,PointsMaterial as k,Material as R,LineBasicMaterial as N,MeshStandardMaterial as G,DoubleSide as O,MeshBasicMaterial as Y,PropertyBinding as U,BufferGeometry as X,SkinnedMesh as q,Mesh as H,LineSegments as z,Line as j,LineLoop as J,Points as W,Group as K,PerspectiveCamera as V,MathUtils as Z,OrthographicCamera as $,Skeleton as ee,AnimationClip as te,Bone as ie,InterpolateDiscrete as ne,InterpolateLinear as re,Texture as oe,VectorKeyframeTrack as se,NumberKeyframeTrack as Ae,QuaternionKeyframeTrack as ae,ColorManagement as le,FrontSide as ce,Interpolant as pe,Box3 as he,Sphere as ge,CompressedCubeTexture as ue,UnsignedByteType as de,CompressedArrayTexture as fe,CompressedTexture as Ie,DisplayP3ColorSpace as me,LinearDisplayP3ColorSpace as be,NoColorSpace as Ce,RGBA_ASTC_6x6_Format as Be,RedFormat as ye,RGFormat as Ee,RGBAFormat as xe,HalfFloatType as Qe,FloatType as we,DataTexture as Pe,Data3DTexture as ve,RGBA_S3TC_DXT1_Format as De,RGB_PVRTC_4BPPV1_Format as Se,RGB_ETC2_Format as Me,RGB_ETC1_Format as Le,RGBA_S3TC_DXT5_Format as Te,RGBA_PVRTC_4BPPV1_Format as _e,RGBA_ETC2_EAC_Format as Fe,RGBA_BPTC_Format as ke,RGBA_ASTC_4x4_Format as Re,MeshPhongMaterial as Ne,AdditiveBlending as Ge,Float32BufferAttribute as Oe}from"three";class Matrix3D{constructor(){this.m=new Float32Array(16),this.st=[],this.init()}init(){return this.m.fill(0),this.m[0]=this.m[5]=this.m[10]=this.m[15]=1,this}atranslate(e,t,i){return this.m[12]+=e,this.m[13]+=t,this.m[14]+=i,this}translate(e,t,i){return e??=0,t??=0,i??=0,this.m[12]+=e*this.m[0]+t*this.m[4]+i*this.m[8],this.m[13]+=e*this.m[1]+t*this.m[5]+i*this.m[9],this.m[14]+=e*this.m[2]+t*this.m[6]+i*this.m[10],this.m[15]+=e*this.m[3]+t*this.m[7]+i*this.m[11],this}rotateX(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),r=[...this.m];this.m[1]=r[1]*n+r[9]*i,this.m[2]=r[2]*n+r[10]*i,this.m[3]=r[3]*n+r[11]*i,this.m[9]=r[1]*-i+r[9]*n,this.m[10]=r[2]*-i+r[10]*n,this.m[11]=r[3]*-i+r[11]*n}return this}rotateY(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),r=[...this.m];this.m[0]=r[0]*n+r[8]*i,this.m[1]=r[1]*n+r[9]*i,this.m[2]=r[2]*n+r[10]*i,this.m[3]=r[3]*n+r[11]*i,this.m[8]=r[0]*-i+r[8]*n,this.m[9]=r[1]*-i+r[9]*n,this.m[10]=r[2]*-i+r[10]*n,this.m[11]=r[3]*-i+r[11]*n}return this}rotateZ(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),r=[...this.m];this.m[0]=r[0]*n+r[4]*i,this.m[1]=r[1]*n+r[5]*i,this.m[2]=r[2]*n+r[6]*i,this.m[3]=r[3]*n+r[7]*i,this.m[4]=r[0]*-i+r[4]*n,this.m[5]=r[1]*-i+r[5]*n,this.m[6]=r[2]*-i+r[6]*n,this.m[7]=r[3]*-i+r[7]*n}return this}getdati(){return Array.from(this.m)}setdati(e){if(e&&16===e.length){for(let t=0;t<16;t++)this.m[t]=Number(e[t])||0;return this}this.init()}push(){return this.st.push(new Float32Array(this.m)),this}pop(){return this.st.length>0&&(this.m=this.st.pop()),this}transform(e,t,i=0){return{x:e*this.m[0]+t*this.m[4]+i*this.m[8]+this.m[12],y:e*this.m[1]+t*this.m[5]+i*this.m[9]+this.m[13],z:e*this.m[2]+t*this.m[6]+i*this.m[10]+this.m[14]}}invert(){const e=this.m,t=new Matrix3D,i=this.determinant();return Math.abs(i)<1e-8?null:(t.m[0]=(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])/i,t.m[1]=(e[1]*e[14]*e[11]+e[9]*e[2]*e[15]+e[13]*e[10]*e[3]-e[1]*e[10]*e[15]-e[9]*e[14]*e[3]-e[13]*e[2]*e[11])/i,t.m[2]=(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])/i,t.m[3]=(e[1]*e[10]*e[7]+e[5]*e[2]*e[11]+e[9]*e[6]*e[3]-e[1]*e[6]*e[11]-e[5]*e[10]*e[3]-e[9]*e[2]*e[7])/i,t.m[4]=(e[4]*e[14]*e[11]+e[8]*e[6]*e[15]+e[12]*e[10]*e[7]-e[4]*e[10]*e[15]-e[8]*e[14]*e[7]-e[12]*e[6]*e[11])/i,t.m[5]=(e[0]*e[10]*e[15]+e[8]*e[14]*e[3]+e[12]*e[2]*e[11]-e[0]*e[14]*e[11]-e[8]*e[2]*e[15]-e[12]*e[10]*e[3])/i,t.m[6]=(e[0]*e[14]*e[7]+e[4]*e[2]*e[15]+e[12]*e[6]*e[3]-e[0]*e[6]*e[15]-e[4]*e[14]*e[3]-e[12]*e[2]*e[7])/i,t.m[7]=(e[0]*e[6]*e[11]+e[4]*e[10]*e[3]+e[8]*e[2]*e[7]-e[0]*e[10]*e[7]-e[4]*e[2]*e[11]-e[8]*e[6]*e[3])/i,t.m[8]=(e[4]*e[9]*e[15]+e[8]*e[13]*e[7]+e[12]*e[5]*e[11]-e[4]*e[13]*e[11]-e[8]*e[5]*e[15]-e[12]*e[9]*e[7])/i,t.m[9]=(e[0]*e[13]*e[11]+e[8]*e[1]*e[15]+e[12]*e[9]*e[3]-e[0]*e[9]*e[15]-e[8]*e[13]*e[3]-e[12]*e[1]*e[11])/i,t.m[10]=(e[0]*e[5]*e[15]+e[4]*e[13]*e[3]+e[12]*e[1]*e[7]-e[0]*e[13]*e[7]-e[4]*e[1]*e[15]-e[12]*e[5]*e[3])/i,t.m[11]=(e[0]*e[9]*e[7]+e[4]*e[1]*e[11]+e[8]*e[5]*e[3]-e[0]*e[5]*e[11]-e[4]*e[9]*e[3]-e[8]*e[1]*e[7])/i,t.m[12]=(e[4]*e[13]*e[10]+e[8]*e[5]*e[14]+e[12]*e[9]*e[6]-e[4]*e[9]*e[14]-e[8]*e[13]*e[6]-e[12]*e[5]*e[10])/i,t.m[13]=(e[0]*e[9]*e[14]+e[8]*e[13]*e[2]+e[12]*e[1]*e[10]-e[0]*e[13]*e[10]-e[8]*e[1]*e[14]-e[12]*e[9]*e[2])/i,t.m[14]=(e[0]*e[13]*e[6]+e[4]*e[1]*e[14]+e[12]*e[5]*e[2]-e[0]*e[5]*e[14]-e[4]*e[13]*e[2]-e[12]*e[1]*e[6])/i,t.m[15]=(e[0]*e[5]*e[10]+e[4]*e[9]*e[2]+e[8]*e[1]*e[6]-e[0]*e[9]*e[6]-e[4]*e[1]*e[10]-e[8]*e[5]*e[2])/i,t)}determinant(){const e=this.m;return e[0]*(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])-e[4]*(e[1]*e[10]*e[15]+e[9]*e[14]*e[3]+e[13]*e[2]*e[11]-e[1]*e[14]*e[11]-e[9]*e[2]*e[15]-e[13]*e[10]*e[3])+e[8]*(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])-e[12]*(e[1]*e[6]*e[11]+e[5]*e[10]*e[3]+e[9]*e[2]*e[7]-e[1]*e[10]*e[7]-e[5]*e[2]*e[11]-e[9]*e[6]*e[3])}multiply(e){const t=[...this.m],i=e.m;return this.m[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],this.m[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],this.m[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3],this.m[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],this.m[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],this.m[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],this.m[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],this.m[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],this.m[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],this.m[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],this.m[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],this.m[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],this.m[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],this.m[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],this.m[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],this.m[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15],this}}const Ye=.001;class Punto2{constructor(e,t){Array.isArray(e)?(this.x=e[0]||0,this.y=e[1]||0):e&&"object"==typeof e?(this.x=e.x||0,this.y=e.y||0):(this.x=e||0,this.y=t||0)}get dump(){return`{${this.x.toFixed(1)},${this.y.toFixed(1)}}`}get len2(){return this.x*this.x+this.y*this.y}get len(){return Math.sqrt(this.len2)}get angle(){return Math.atan2(this.y,this.x)}dir(){let e=this.len;return e?new Punto2(this.x/e,this.y/e):this}distanza(e){return new Punto2(e.x-this.x,e.y-this.y).len}}class Linea2{constructor(e,t,i=null,n=null){"number"==typeof e&&"number"==typeof t&&null!==i&&null!==n?(this.p1=new Punto2({x:e,y:t}),this.p2=new Punto2({x:i,y:n})):e&&t?(this.p1=new Punto2(e),this.p2=new Punto2(t)):(this.p1=new Punto2(0,0),this.p2=new Punto2(1,0))}get dump(){return`${this.p1.dump}-${this.p2.dump}`}get dx(){return this.p2.x-this.p1.x}get dy(){return this.p2.y-this.p1.y}get len2(){let{dx:e,dy:t}=this;return e*e+t*t}get len(){return Math.sqrt(this.len2)}get angle(){return this.angolo()}estendi(e){if("number"==typeof e){if(!e)return this;let{p1:t,p2:i,dx:n,dy:r,len:o}=this;return o?(n/=o,r/=o,e>0?new Linea2(t,new Punto2(i.x+n*e,i.y+r*e)):new Linea2(new Punto2(t.x+n*e,t.y+r*e),i)):this}if(e instanceof Linea2){const t=this.interseca(e);if(!t)return this;return(t.x-this.p1.x)**2+(t.y-this.p1.y)**2<(t.x-this.p2.x)**2+(t.y-this.p2.y)**2?new Linea2(t,this.p2):new Linea2(this.p1,t)}}puntot(e){return new Punto2(this.p1.x+(this.p2.x-this.p1.x)*e,this.p1.y+(this.p2.y-this.p1.y)*e)}setlunghezza(e){let t=this.len;if(t&&e){let i=e/t,n=this.puntot(i);this.p2=n}}proiezionet(e){const{p1:t,dx:i,dy:n,len2:r}=this;if(r<Ye)return;const o=((e.x-t.x)*i+(e.y-t.y)*n)/r;return{p:new Punto2(t.x+o*i,t.y+o*n),t:o}}proiezione(e){const t=this.proiezionet(e);return t?t.p:void 0}get direzione(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(e/i,t/i):new Punto2(0,0)}get normale(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(-t/i,e/i):new Punto2(0,1)}perpendicolare(e=null,t=0){const{normale:i,len:n,p1:r}=this;if(n<1e-9)return;const o=t||n,s=e?new Punto2(e):this.p1;return new Linea2(s,new Punto2(s.x+i.x*o,s.y+i.y*o))}perpendicolaret(e,t=0){const{normale:i,len:n,p1:r,p2:o}=this;if(n<1e-9)return;const s=t||n,A=new Punto2(r.x+(o.x-r.x)*e,r.y+(o.y-r.y)*e);return new Linea2(A,new Punto2(A.x+i.x*s,A.y+i.y*s))}ruotata(e=Math.PI/2,t=0,i=!1){const{p1:n,p2:r,direzione:o,len:s}=this;if(t=t||s,s<1e-9)return;const A=Math.abs(e%(2*Math.PI));if(!(A<1e-9||Math.abs(A-Math.PI)<1e-9)){if("boolean"==typeof i){const s=(o.x*Math.cos(e)-o.y*Math.sin(e))*t,A=(o.x*Math.sin(e)+o.y*Math.cos(e))*t;return i?new Linea2(n,new Punto2(n.x+s,n.y+A)):new Linea2(r,new Punto2(r.x+s,r.y+A))}{let n=new Punto2(i);const r=o.x*Math.cos(e)-o.y*Math.sin(e),s=o.x*Math.sin(e)+o.y*Math.cos(e);new Punto2(r,s);const A=new Linea2(n,new Punto2(n.x+r,n.y+s)),a=this.interseca(A);if(!a)return;const l=new Punto2(a.x+r*t,a.y+s*t);return new Linea2(a,l)}}}puntosudirezione(e,t){let{direzione:i}=this;return new Punto2(e.x+i.x*t,e.y+i.y*t)}parallela(e,t){let{direzione:i}=this;return new Linea2(e,this.puntosudirezione(e,t))}intersezione(e){return this.interseca(e)}interseca(e){const{p1:t,p2:i}=this,{p1:n,p2:r}=e,o=(i.x-t.x)*(r.y-n.y)-(i.y-t.y)*(r.x-n.x);if(Math.abs(o)<Ye)return null;const s=((n.x-t.x)*(r.y-n.y)-(n.y-t.y)*(r.x-n.x))/o;return new Punto2(t.x+s*(i.x-t.x),t.y+s*(i.y-t.y))}onsegment(e,t=1e-9){const{p1:i,p2:n}=this,r=Math.min(i.x,n.x)-t,o=Math.max(i.x,n.x)+t,s=Math.min(i.y,n.y)-t,A=Math.max(i.y,n.y)+t;return e.x>=r&&e.x<=o&&e.y>=s&&e.y<=A}distanzaPunto(e){const t=this.proiezione(e);if(!t)return 1e9;const i=e.x-t.x,n=e.y-t.y;return Math.hypot(i,n)}isparallela(e){const t=this.dx*e.dy-this.dy*e.dx;return Math.abs(t)<1}lunghezzatotale(e){const t=this.p2.x-this.p1.x,i=this.p2.y-this.p1.y,n=Math.hypot(t,i);if(!n)return 0;const r=1/n,proj=e=>(e.x*t+e.y*i)*r,o=proj(this.p1),s=proj(this.p2),A=proj(e.p1),a=proj(e.p2),l=o<s?o:s,c=o>s?o:s,p=A<a?A:a,h=A>a?A:a;return Math.round(100*(Math.max(c,h)-Math.min(l,p)))/100}infoquad(e){if(!this.isparallela(e))return;const{p1:t,p2:i,normale:n}=this;let{p1:r,p2:o}=e;const distance2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;function wrapToPi(e){return e>Math.PI?e-=2*Math.PI:e<-Math.PI&&(e+=2*Math.PI),e}function getangle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}distance2(t,r)>distance2(t,o)&&([r,o]=[o,r]);const s=getangle(t,i);function toDeg(e){return Math.round(18e4*e/Math.PI)/1e3}const A=toDeg(wrapToPi(getangle(t,r)-s)),a=toDeg(wrapToPi(getangle(i,o)-s)),l=Math.round(100*this.len)/100,c=r.x-t.x,p=r.y-t.y,h=Math.round(100*Math.abs(c*n.x+p*n.y))/100;let g=this.lunghezzatotale(e);return{angle:toDeg(s),aini:A,afin:a,l:l,ltot:g,distanza:h,sx:Math.round(100*t.x)/100,sy:Math.round(100*t.y)/100}}isperpendicolare(e){const t=this.dx*e.dx+this.dy*e.dy;return Math.abs(t)<Ye}offset(e){const t=this.normale,i=new Punto2(this.p1.x+t.x*e,this.p1.y+t.y*e),n=new Punto2(this.p2.x+t.x*e,this.p2.y+t.y*e);return new Linea2(i,n)}angolo(e){const{dx:t,dy:i}=this;let n;if(e){const{dx:r,dy:o}=e,s=Math.atan2(i,t);n=Math.atan2(o,r)-s}else n=Math.atan2(i,t);return n>Math.PI?n-=2*Math.PI:n<-Math.PI&&(n+=2*Math.PI),n}ortopt(e){let{p1:t,dx:i,dy:n}=this;const r=Math.hypot(i,n);if(r<Ye)return;const o=-n/r,s=i/r;return{x:t.x+o*e,y:t.y+s*e}}offsetline(e){let{p1:t,p2:i,dx:n,dy:r}=this;const o=Math.hypot(n,r);if(o<Ye)return;const s=-r/o,A=n/o;return new Linea2({x:t.x+s*e,y:t.y+A*e},{x:i.x+s*e,y:i.y+A*e})}distanzaSegmentiParalleli(e){if(!this.isparallela(e))return 1e9;const{p1:t,normale:i}=this,n=e.p1.x-t.x,r=e.p1.y-t.y,o=Math.abs(n*i.x+r*i.y);return Math.abs(o)<Ye?0:o}isCollineare(e,t=!1){if(!this.isparallela(e))return!1;const i=this.distanzaSegmentiParalleli(e);if(Math.abs(i)>Ye)return!1;if(t){function isPointBetween(e,t,i,n=Ye){const r=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);return!(Math.abs(r)>n)&&(Math.min(t.x,i.x)-n<=e.x&&e.x<=Math.max(t.x,i.x)+n&&Math.min(t.y,i.y)-n<=e.y&&e.y<=Math.max(t.y,i.y)+n)}const{p1:n,p2:r}=this,{p1:o,p2:s}=e;return isPointBetween(o,n,r)||isPointBetween(s,n,r)||isPointBetween(n,o,s)||isPointBetween(r,o,s)}return!0}clone(){return new Linea2(this.p1.x,this.p1.y,this.p2.x,this.p2.y)}rotate(e){if(!e)return this;const t=e*Math.PI/180,i=Math.cos(t),n=Math.sin(t);function rotate(e){return new Punto2(e.x*i-e.y*n,e.x*n+e.y*i)}return this.p1=rotate(this.p1),this.p2=rotate(this.p2),this}move(e=0,t=0){return"object"==typeof e&&e.x&&(t=e.y||0,e=e.x),this.p1.x+=e,this.p1.y+=t,this.p2.x+=e,this.p2.y+=t,this}}function getptsoffset(e,t,i){let n,r,o,s,A=-1,a=-1,l=e.length,c=t.length,p=[],h=new Linea2(e[0],e[1]),g=new Linea2(e[l-2],e[l-1]),u=h.offset(i),d=g.offset(i);for(let e=0;e<c;e++){let i=new Linea2(t[e%c],t[(e+1)%c]);u.isparallela(i)&&u.isCollineare(i,!0)&&(A=e),d.isparallela(i)&&d.isCollineare(i,!0)&&(a=e)}if(A>=0&&a>=0){A>a?(n=A-a+2,r=a+c-A+2,n<r?(o=a,s=A+1):(o=A,s=a+c+1)):(n=a-A+2,r=A+c-a+2,n<r?(o=A,s=a+1):(o=a,s=A+c+1));for(let e=o;e<=s;e++)p.push(t[e%c])}return p}async function errorescript(e,t){let i,n,r,o=(t.stack||"").match(/user-script\.js:(\d+):(\d+)/);if(o||(o=(t.toString()||"").match(/user-script\.js:(\d+):(\d+)/)),o&&([,i,n]=o.map(Number),i-=2),(!i||!n)&&t instanceof SyntaxError){window.acorn||(await new Promise(((e,t)=>{const i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/acorn@8.15.0/dist/acorn.js",i.onload=e,i.onerror=t,document.head.appendChild(i)})),console.log("caricato acorn"));try{window.acorn.parse(e,{ecmaVersion:"latest"})}catch(e){e.loc&&(i=e.loc.line,n=e.loc.column+1)}}return r=i&&n?`ERRORE: ${t.message}\n`+function extractContext(e,t,i,n=1){const r=e.split(/\r?\n/),o=t-1,s=Math.max(0,o-n),A=Math.min(r.length,o+n+1);return r.slice(s,A).map(((e,n)=>s+n+1===t?e+"\n"+" ".repeat(i-1)+"^":e)).join("\n")}(e,i,n):t.message,r}function seedarray(e,t){if(e&&e.length){let i=[];for(let t=0;t<e.length;t++){let n=e[t];if(n.p)for(let e=0;e<n.p;e++)i.push(t);else i.push(t)}return e[i[seeder(i.length,t)]]}}function seeder(e,t="seed42"){const i=function mulberry32(e){return function(){e=(e|=0)+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}(function xmur3(e){let t=1779033703^e.length;for(let i=0;i<e.length;i++)t=Math.imul(t^e.charCodeAt(i),3432918353),t=t<<13|t>>>19;return function(){return t=Math.imul(t^t>>>16,2246822507),t=Math.imul(t^t>>>13,3266489909),(t^=t>>>16)>>>0}}(String(t))());return Math.floor(i()*e)}function hash(e){let t="";if("string"==typeof e||"number"==typeof e)t=e+"";else if("object"==typeof e&&e){const i=Object.keys(e).sort(),n="\0";t=i.map((t=>`${t}${n}${String(e[t])}`)).join(n)}let i=2166136261,n=2218511855;for(let e=0;e<t.length;e++){const r=t.charCodeAt(e);i^=r,i+=i<<5^2779096485,n^=i,n=((n<<3)+r^2134516169)>>>0}return i>>>=0,i.toString(16)+n.toString(16)}function clean(e,t=!1){return t?(e||"").trim().toLowerCase():(e||"").trim()}function getcouple(e,t="=",i=!0){const n=(e=e||"").indexOf(t);return n>=0?{v:clean(e.substring(0,n),i),o:e.substring(n+t.length).trim(),fl:!0}:{v:clean(e,i),o:"",fl:!1}}function clamp(e,t=-1/0,i=1/0){return(e=Number(e)||0)<t&&(e=t),e>i&&(e=i),e}function getcolonne(e,t=!1){e=String(e||"");const i=/^(\d*)\.\.(\d*)$/.exec(e);if(i){let e=parseInt(i[1])||0,t=parseInt(i[2])||0;const n=[];for(let i=e;i<=t;i++)n.push(i+"");return n}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const n=[];let r="",o=0,s=!1;for(let t=0;t<e.length;t++){const i=e[t];if(0===o&&'"'===i&&(0!==t&&"\\"===e[t-1]||(s=!s)),s||("("===i||"["===i||"{"===i?o++:")"!==i&&"]"!==i&&"}"!==i||(o=Math.max(0,o-1))),","!==i&&";"!==i||0!==o||s)r+=i;else{const e=r.trim();n.push(e),r=""}}const A=r.trim();return A&&n.push(A),n.map((e=>(e=e.trim(),!t&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("(")&&e.endsWith(")"))?e.slice(1,-1):e)))}function muClComments(e,t){const i=(n=e,n.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||""))).split(/\r?\n/);var n;const r=[];let o="";for(const e of i){let t=e;if(/(^|[^:])\/\/.*/.test(t)&&(t=t.replace(/(^|[^:])\/\/.*/,((e,t)=>t.trim()))),t=t.trim(),0!==t.length)if(o.length>0&&(t=o+" "+t,o=""),t.endsWith("\\")){t=t.slice(0,-1);const e=t.lastIndexOf("//");-1!==e&&(t=t.slice(0,e).trim()),o=t}else r.push(t)}return r}new class Errori{constructor(){this.azzera()}azzera(){this.err=[]}add(e,t){this.err.push({msg:e,row:t})}get(){return this.err}get length(){return this.err.length}toString(){const e=[];for(const t of this.err){const i="object"==typeof t.msg?JSON.stringify(t.msg):t.msg||"";e.push(`${t.row?t.row+":":""}${i}`)}return e.join("\n")}};const Ue=Math.PI/180;function TODEG(e,t=1){let i=10**t;return Math.round(180*e*i/Math.PI)/i}function TORAD(e,t=3){let i=10**t;return Math.round(e*Ue*i)/i}const Xe={window:void 0,self:void 0,globalThis:void 0,document:void 0,Function:void 0,eval:void 0,fetch:void 0,XMLHttpRequest:void 0};function getOggetto(e,t=[]){if(Array.isArray(e))return e.map((e=>getOggetto(e,t)));if(e&&"object"==typeof e){const i={};for(const[n,r]of Object.entries(e))"function"==typeof r||t&&t.includes(n)||(i[n]=getOggetto(r,t));return i}return e}function getSqDist(e,t){let i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function getSqSegDist(e,t,i){let n=t.x,r=t.y,o=i.x-n,s=i.y-r;if(0!==o||0!==s){let t=((e.x-n)*o+(e.y-r)*s)/(o*o+s*s);t>1?(n=i.x,r=i.y):t>0&&(n+=o*t,r+=s*t)}return o=e.x-n,s=e.y-r,o*o+s*s}function simplifyDPStep(e,t,i,n,r){let o,s=n;for(let n=t+1;n<i;n++){let r=getSqSegDist(e[n],e[t],e[i]);r>s&&(o=n,s=r)}s>n&&(o-t>1&&simplifyDPStep(e,t,o,n,r),r.push(e[o]),i-o>1&&simplifyDPStep(e,o,i,n,r))}function simplifyDouglasPeucker(e,t){let i=e.length-1,n=[e[0]];return simplifyDPStep(e,0,i,t,n),n.push(e[i]),n}function simplify(e,t,i){if(e.length<=2)return e;let n=void 0!==t?t*t:1;return e=i?e:function simplifyRadialDist(e,t){let i,n=e[0],r=[n];for(let o=1,s=e.length;o<s;o++)i=e[o],getSqDist(i,n)>t&&(r.push(i),n=i);return n!==i&&r.push(i),r}(e,n),e=simplifyDouglasPeucker(e,n)}function mapvertices(e,t){const dist2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;let i=e.length,n=t.length;if(i<2||n<2)return[];let r=[[0,0]];if(i===n){for(let e=1;e<i;e++)r.push([e,e]);return r}if(i>n)for(let o=1,s=0;o<i-1;o++){if(s+1<n){const i=e[o],n=dist2(i,t[s]);dist2(i,t[s+1])<=n&&s++}r.push([o,s])}else for(let o=1,s=0;o<n-1;o++){if(s+1<i){const i=t[o],n=dist2(i,e[s]);dist2(i,e[s+1])<=n&&s++}r.push([s,o])}return r.push([i-1,n-1]),r}function dxfbulge(e,t,i,n=0){const r=[];if(!i||Math.abs(i)<1e-10||0===n)return r;const o=4*Math.atan(i);if(o<0)return dxfbulge(t,e,-i,n).reverse();const s=t.x-e.x,A=t.y-e.y,a=Math.hypot(s,A),l=a/(2*Math.sin(o/2)),c=(e.x+t.x)/2,p=(e.y+t.y)/2,h=-A/a,g=s/a,u=l*Math.cos(o/2),d=i>=0?1:-1,f=c+d*h*u,I=p+d*g*u;let m=Math.atan2(e.y-I,e.x-f);for(let e=1;e<=n;e++){const t=m+e/(n+1)*o,i=f+l*Math.cos(t),s=I+l*Math.sin(t);r.push({x:i,y:s})}return r}function raccordabezier(e,t,i,n,r=10){const o=function getIntersection(e,t,i,n){const r=(e.x-t.x)*(i.y-n.y)-(e.y-t.y)*(i.x-n.x);return 0===r?null:{x:((e.x*t.y-e.y*t.x)*(i.x-n.x)-(e.x-t.x)*(i.x*n.y-i.y*n.x))/r,y:((e.x*t.y-e.y*t.x)*(i.y-n.y)-(e.y-t.y)*(i.x*n.y-i.y*n.x))/r}}(e,t,i,n);if(!o)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const s=o;if(0===r)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const A=[];for(let e=0;e<=r;e++){const n=e/r,o=1-n,a=o*o*t.x+2*o*n*s.x+n*n*i.x,l=o*o*t.y+2*o*n*s.y+n*n*i.y;A.push({x:a,y:l})}return A}function raccordabezier3(e,t,i,n,r=10){const o=t.x-e.x,s=t.y-e.y,A=i.x-t.x,a=i.y-t.y,l=Math.sqrt(o*o+s*s),c=Math.sqrt(A*A+a*a);if(n>l||n>c)return[e,t,i];n!=l&&n!=c||(n-=.01);const p=(l-n)/l,h=n/c;return raccordabezier(e,{x:e.x+o*p,y:e.y+s*p},{x:t.x+A*h,y:t.y+a*h},i,r)}function normal2(e,t){const i=t.x-e.x;let n=-(t.y-e.y),r=i;const o=Math.sqrt(n*n+r*r);return 0===o?{nx:0,ny:0}:{nx:n/o,ny:r/o}}function angle3point(e,t,i){const n=t.x-e.x,r=t.y-e.y,o=i.x-t.x,s=i.y-t.y,A=n*o+r*s,a=n*s-r*o,l=Math.sqrt(n**2+r**2),c=Math.sqrt(o**2+s**2);return l&&c?Math.atan2(a,A):0}function angle2vec(e,t){const i=e.x*t.x+e.y*t.y,n=Math.sqrt(e.x*e.x+e.y*e.y),r=Math.sqrt(t.x*t.x+t.y*t.y);if(0===n||0===r)return 0;let o=i/(n*r);o=Math.max(-1,Math.min(1,o));return Math.acos(o)/Ue}function removeduplicate(e,t=.005){if(!Array.isArray(e)||0===e.length)return[];const i=[],n=e.length;for(let t=0;t<n;t++){const r=e[t],o=e[(t+1)%n];i.push({x:r.x,y:r.y}),o.x,r.x,o.y,r.y}const r=i[0],o=i[i.length-1];return r.x,o.x,r.y,o.y,i}function getshape(){let e=[];function orientation(){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const r=e[n],o=e[(n+1)%i];t+=r.x*o.y-o.x*r.y}return t>0?1:t<0?-1:0}function tovec(){return e.flatMap((e=>[e.x,e.y]))}function move(t=0,i=0){"object"==typeof t&&t.x&&(i=t.y||0,t=t.x);for(let n of e)n.x+=t,n.y+=i;return this}function selezionaprimo(t){return(t%=e.length)>0&&(e=[...e.slice(t),...e.slice(0,t)]),this}function _addvec(t){for(let i=0;i<t.length;i+=2)e.push({x:t[i],y:t[i+1]})}function fromstr(t){return e=removeduplicate(function processTokens(e){const t=[];for(let i=0;i<e.length;i++){const n=e[i];if("point"===n.type)t.push(n.point);else if("command"===n.type)switch(n.cmd){case"x":{const r=t[t.length-1],o="point"===e[i+1]?.type?e[i+1].point:t[0],s=parseFloat(n.params[0])||5;{const e=1;let i=o.x-r.x,n=o.y-r.y,A=Math.hypot(i,n);A>1&&t.push(...dxfbulge(r,o,s,Math.floor((A-e)/(e+2))+1))}break}case"b":{if(t.length<2)continue;const r=parseInt(n.params[0])||5,o=t[t.length-2],s=t[t.length-1];let A="point"===e[i+1]?.type?e[i+1].point:void 0,a="point"===e[i+2]?.type?e[i+2].point:void 0;A?a||(a=t[0]):(A=t[0],a=t[1]);const l=raccordabezier(o,s,A,a,r);t.push(...l),i+=1;break}case"r":{if(t.length<1)continue;const r=parseFloat(n.params[0])||0;if(r>0){const o=parseInt(n.params[1])||Math.min(r,10),s=t[t.length-1];let A="point"===e[i+1]?.type?e[i+1].point:void 0,a="point"===e[i+2]?.type?e[i+2].point:"point"===e[i+3]?.type?e[i+3].point:void 0;A?a||(a=t[0]):(A=t[0],a=t[1],t.splice(0,1));const l=raccordabezier3(s,A,a,r,o);t.push(...l),i+=1}break}case"c":{const r=parseFloat(n.params[0])||50,o=parseInt(n.params[1])||12,s="point"===e[i+1]?.type?e[i+1].point:new Punto2(0,0);for(let e=0;e<o;e++)t.push(new Punto2(s.x+r*Math.cos(e/o*Math.PI*2),s.y+r*Math.sin(e/o*Math.PI*2)));i+=1;break}case"a":{let r,o="point"===e[i+1]?.type?e[i+1].point:void 0,s="point"===e[i+2]?.type?e[i+2].point:void 0,A="point"===e[i+3]?.type?e[i+3].point:void 0;if(!o||!A)continue;if(s)if(n.params[0])r=clamp(parseInt(n.params[0]),1,24);else{const e=Math.hypot(A.x-o.x,A.y-o.y),t=Math.abs((s.x-o.x)*(A.y-o.y)-(A.x-o.x)*(s.y-o.y))/(2*e);r=Math.round(e*Math.sqrt(t/(e+.1))*10),r=clamp(r,1,24),r=1}else s=A,r=0;const a=arcfrom3point(r,o,s,A);t.push(...a),i+=3;break}}}return t}(function tokenize(e){const t=[],i=e.replace(/[\n\r,;]/g," ").replace(/\s+/g," ").toLowerCase().trim().split(" ").filter((e=>e.length>0));let n=0;for(;n<i.length;){const e=i[n];/^[brcax]/.test(e)?(t.push({type:"command",cmd:e[0],params:e.slice(1).split(":")}),n++):n<i.length-1&&/^-?\d+(\.\d+)?$/.test(i[n])&&/^-?\d+(\.\d+)?$/.test(i[n+1])?(t.push({type:"point",point:new Punto2(parseFloat(i[n]),parseFloat(i[n+1]))}),n+=2):n++}return t}(t))),this}function dims(e){let{p1:t,p2:i}=e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}),n=!1;if(4==e.length){const r=.001;function findpunto(t,i){let n=e.find((e=>Math.abs(e.x-t)<r&&Math.abs(e.y-i)<r));return!!n}findpunto(t.x,t.y)&&findpunto(t.x,i.y)&&findpunto(i.x,t.y)&&findpunto(i.x,i.y)&&(n=!0)}return{p1:t,p2:i,isrect:n,width:i.x-t.x,height:i.y-t.y}}return{get key(){return hash(tovec().join("\t"))},orienta:function orienta(t,i){if(!t||!i)return null;const n=i.x-t.x,r=i.y-t.y,o=180*Math.atan2(r,n)/Math.PI,s=new Matrix3D;s.rotateZ(-o),s.translate(-t.x,-t.y,0);const A=e.map((e=>s.transform(e.x,e.y)));let a=A.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)});return{shape:getshape().frompt(A),origine:new Punto2(t.x,t.y),angolo:o,mm:a,width:a.p2.x-a.p1.x,height:a.p2.y-a.p1.y}},rebase:function rebase(t,i=!1,n=0,r=0){const o=new Matrix3D;o.rotateZ(-t);let s=e.map((e=>o.transform(e.x,e.y))),{p1:A,p2:a,width:l,height:c}=dims(s);return i||(n=A.x,r=A.y),s=s.map((e=>new Punto2(e.x-n,e.y-r))),{shape:getshape().frompt(s),origine:new Punto2(n,r),angolo:t,width:l,height:c}},fromstr:fromstr,move:move,get pt(){return e},set pt(t){Array.isArray(t)&&(e=t)},get npt(){return e?.length||0},get vec(){return tovec()},toJSON:()=>({vec:tovec(),orient:orientation()}),get orient(){return orientation()},corners:(t=45)=>function sharpCorners(e,t=45){const i=[],n=e.length;if(n<3)return i;for(let r=0;r<n;r++){const o=e[(r-1+n)%n],s=e[r],A=e[(r+1)%n],a=s.x-o.x,l=s.y-o.y,c=A.x-s.x,p=A.y-s.y,h=Math.hypot(a,l),g=Math.hypot(c,p);if(0===h||0===g)continue;let u=(a*c+l*p)/(h*g);u=Math.max(-1,Math.min(1,u));const d=180*Math.acos(u)/Math.PI;d>t&&i.push({i:r,x:s.x,y:s.y,a:d})}return i}(e,45),clone:()=>getshape().frompt(e),dims:()=>dims(e),get area(){return Math.abs(e.reduce(((t,i,n)=>{const r=e[(n+1)%e.length];return t+(i.x*r.y-r.x*i.y)}),0)/2)},pointslink(t){let i=mapvertices(e,t.pt),n=[];for(let e of i)n[e[0]]=t.pt[e[1]];return n},alignline(t,i){return e=function stretchShapeToLine(e,t,i){if(!e?.length||!t||!i)return[];const n=e[0],r=e[e.length-1],o=r.x-n.x,s=r.y-n.y,A=Math.atan2(s,o);let a=e.map((e=>({x:e.x-n.x,y:e.y-n.y}))),l=a.map((e=>({x:e.x*Math.cos(-A)-e.y*Math.sin(-A),y:e.x*Math.sin(-A)+e.y*Math.cos(-A)})));const c={dx:i.x-t.x,dy:i.y-t.y},p=Math.sqrt(c.dx*c.dx+c.dy*c.dy)/(l[l.length-1].x||1e-8);let h=l.map((e=>({x:e.x*p,y:e.y})));const g=Math.atan2(c.dy,c.dx);let u=h.map((e=>({x:e.x*Math.cos(g)-e.y*Math.sin(g),y:e.x*Math.sin(g)+e.y*Math.cos(g)}))),d=u.map((e=>({x:e.x+t.x,y:e.y+t.y})));return d}(e,t,i),this},rotate(t){if(!t)return this;const i=t*Math.PI/180,n=Math.cos(i),r=Math.sin(i);for(let t of e){const e=t.x*n-t.y*r,i=t.x*r+t.y*n;t.x=e,t.y=i}return this},selezionaprimo:selezionaprimo,segment(t,i=!1){let n=e.length;return t<0&&(t+=n),new Linea2(e[t%n],e[(t+(i?-1:1))%n])},lineoffset(t,i,n){if((t=(t||0)%e.length)!=(i=(i||0)%e.length)){let r=new Linea2(e[t],e[i]);if(r){return r=r.offsetline(-n),this.intersectline(r)}}},orientasplitter(){-1!=orientation()&&e.reverse();let t=e.length;for(let i=0;i<t;i++){let n=new Linea2(e[(t+i-1)%t],e[i]);if(Math.abs(Math.abs(n.angle)-Math.PI)<.001){i&&selezionaprimo(i);break}}return this},mirrorx(t=0){for(let i of e)i.x=2*t-i.x;return this},mirrory(t=0){for(let i of e)i.y=2*t-i.y;return this},simplify(t,i){return e=simplify(e,t,i),this},fromclip(t){e=[];for(let i of t)e.push({x:i.x/1e3,y:i.y/1e3});return this},infosegmento(t,i=!1){const n=e.length;function clampIndex(e){return(e+n)%n}function angle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}function angleDiff(e,t){let i=e-t;for(;i>Math.PI;)i-=2*Math.PI;for(;i<-Math.PI;)i+=2*Math.PI;return i}const r=e[t];let o,s,A;if(i)if(0===t){const t=e[1].x-e[0].x,i=e[1].y-e[0].y;o={x:e[0].x-t,y:e[0].y-i},s=e[1],A=2==n?{x:e[1].x+t,y:e[1].y+i}:e[2]}else if(t===n-1){const t=e[n-1].x-e[n-2].x,i=e[n-1].y-e[n-2].y;o=e[n-2],s={x:e[n-1].x+t,y:e[n-1].y+i},A={x:s.x+t,y:s.y+i}}else o=e[t-1],s=e[t+1],A=t+2<n?e[t+2]:{x:e[t+1].x+(e[t+1].x-e[t].x),y:e[t+1].y+(e[t+1].y-e[t].y)};else{const i=clampIndex(t-1),n=clampIndex(t+1),r=clampIndex(t+2);o=e[i],s=e[n],A=e[r]}const a=angle(r,s),l=angle(o,r),c=angle(s,A);return{x:r.x,y:r.y,l:function length(e,t){const i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}(r,s),ang:a/Ue,a1:angleDiff(a,l)/Ue,a2:angleDiff(c,a)/Ue}},swapxy(){for(let t=0;t<e.length;t++){let i=e[t].x;e[t].x=-e[t].y,e[t].y=-i}return this},fromvec(t){return e=[],_addvec(t),this},addvec(e){return _addvec(e),this},frompt(t){return e=[...t],e=removeduplicate(e),this},fromdxfvec(t){let i=[];if(t&&t.length)for(let e=0;e<t.length;e++){let{x:n,y:r,bulge:o}=t[e];if(i.push({x:n,y:r}),o){const s=1;let A={x:n,y:r},a=t[(e+1)%t.length],l=a.x-A.x,c=a.y-A.y,p=Math.hypot(l,c);p>s&&i.push(...dxfbulge(A,a,o,Math.floor((p-s)/s)+1))}}return e=i.map((e=>({x:Math.round(10*e.x)/10,y:Math.round(10*e.y)/10}))),e=removeduplicate(e),this},monotona(){let t=dims(e),i=e.map((e=>({x:e.x-t.p2.x,y:e.y}))),n=[];n.push(i[0]);let r=i[0].y,o=1e-4;for(let e=1;e<i.length;e++)if(i[e].y>r+o||e==i.length-1)n.push(i[e]),r=i[e].y;else{const t=r+o;n.push({x:i[e].x,y:t}),r=t}return{sh:getshape().frompt(n),...t}},offsetshape(e){let t=[],i=this;for(let n=0;n<i.npt-1;n++){let r=i.segment(n).offset(e);t.push(r)}let n=i.segment(0).perpendicolare(),r=i.segment(i.npt-2),o=r.perpendicolare(r.p2),s=[n.interseca(t[0])];for(let e=0;e<t.length-1;e++){let i=t[e].interseca(t[e+1]);i&&s.push(i)}return s.push(t[t.length-1].interseca(o)),getshape().frompt(s)},sliceony(t){let i=t.pt.map((e=>e.y)).slice(1,-1);const n=[],r=e.length;let o=0,s=e[0].y;for(let t=1;t<r;t++)e[t].y<s&&(s=e[t].y,o=t);const A=[...e.slice(o),...e.slice(0,o)],a=A.length,l=new Map;for(let e=0;e<a;e++)for(let t of i)Math.abs(A[e].y-t)<1e-5&&(l.has(t)?l.get(t).i2=e:l.set(t,{i1:e,i2:e}));const c=i.map((e=>l.get(e))).filter((e=>e&&e.i1>=0&&e.i2>=0));c.length>0&&c[0].i1>0&&n.push([...A.slice(0,c[0].i1+1),...A.slice(c[0].i2,c[0].length)]);for(let e=0;e<c.length-1;e++){const t=c[e],i=c[e+1];n.push([...A.slice(t.i1,i.i1+1),...A.slice(i.i2,t.i2+1)])}const p=c[c.length-1];p.i2>p.i1&&n.push(A.slice(p.i1,p.i2+1));return n.filter((e=>e.length>0))},splitshape(e,t=!0){const i=100,n=t?{x:e.x,y:e.y-i}:{x:e.x-i,y:e.y},r=t?{x:e.x,y:e.y+i}:{x:e.x+i,y:e.y},o=this.intersectline(new Linea2(n,r));if(!o)return null;const s=o.p1,A=o.p2,findIndex=e=>this.pt.findIndex(((t,i)=>new Linea2(t,this.pt[(i+1)%this.pt.length]).onsegment(e))),a=findIndex(s),l=findIndex(A);if(a<0||l<0)return null;const c=this.pt.length,loop=(e,t,i,n)=>{const r=[];for(let i=e;i!==t;i=(i+1)%c)r.push(this.pt[(i+1)%c]);return r},p=getshape().frompt(loop(a,l));return{sx:getshape().frompt(loop(l,a)),dx:p,linea:o}},xfromy(e,t=0,i=!0){const n=[],r=this.pt.length;for(let t=0;t<r-1;t++){const r=this.pt[t],o=this.pt[t+1];if(r.y<=e&&o.y>=e||o.y<=e&&r.y>=e){const t=o.y-r.y,i=t?(e-r.y)/t:0,s=r.x+i*(o.x-r.x);n.push(s)}else r.y===e&&o.y===e&&n.push(i?Math.max(r.x,o.x):Math.min(r.x,o.x))}return n.length?i?Math.max(...n):Math.min(...n):t},yfromx(e,t=0,i=!0){const n=[],r=this.pt.length;for(let t=0;t<r-1;t++){const r=this.pt[t],o=this.pt[t+1];if(r.x<=e&&o.x>=e||o.x<=e&&r.x>=e){const t=o.x-r.x,i=t?(e-r.x)/t:0,s=r.y+i*(o.y-r.y);n.push(s)}else r.x===e&&o.x===e&&n.push(i?Math.max(r.y,o.y):Math.min(r.y,o.y))}return n.length?i?Math.max(...n):Math.min(...n):t},forcevalues(t,i=!0,n=1e-6){const r=[...new Set(t.pt.map((e=>i?e.y:e.x)))].sort(((e,t)=>e-t)),o=[],s=e.length;for(let t=0;t<s;t++){const A=e[t],a=e[(t+1)%s];o.push({...A});let l=i?A.y:A.x,c=i?a.y:a.x;if(l===c)continue;const p=c>l?r.filter((e=>e>l+n&&e<c-n)):r.filter((e=>e<l-n&&e>c+n)).reverse();for(const e of p){const t=(e-l)/(c-l),i={x:A.x+t*(a.x-A.x),y:A.y+t*(a.y-A.y)};o.push(i)}}return e=o,this},fromrrect(e,t,i=10,n=0,r=0){return(i>=e/2||i>=t/2&&i<=0)&&(i=Math.round(Math.min(e/3,t/3))),fromstr(`0,0,r${i},${e},0,r${i},${e},${t},r${i},0,${t},r${i}`),(n||r)&&move(n,r),this},fromrect(t,i,n,r,o){t||(t=10),i||(i=10),o||(o=0),o=Math.min(Math.abs(o),Math.abs(.4*t),Math.abs(.4*i));let s=t>0?o:-o,A=i>0?o:-o;return e=o?[{x:s,y:0},{x:t-s,y:0},{x:t,y:A},{x:t,y:i-A},{x:t-s,y:i},{x:s,y:i},{x:0,y:i-A},{x:0,y:A}]:[{x:0,y:0},{x:t,y:0},{x:t,y:i},{x:0,y:i}],this},intersectline:t=>function _intersectline(e,t,i){let n=e.length,r=new Linea2(t,i);const o=[];for(let t=0;t<e.length;t++){let i=new Linea2(e[t],e[(t+1)%n]),s=i.interseca(r);s&&i.onsegment(s)&&o.push(s)}if(o.length<2)return null;const{dx:s,dy:A}=r;o.sort(((e,i)=>(e.x-t.x)*s+(e.y-t.y)*A-((i.x-t.x)*s+(i.y-t.y)*A)));let a=new Punto2(o[0].x,o[0].y),l=new Punto2(o[o.length-1].x,o[o.length-1].y);const c=l.x-a.x,p=l.y-a.y;return c*s+p*A<0&&([a,l]=[l,a]),new Linea2(a,l)}(e,t.p1,t.p2),tostr(t=2){let i=10**t,pstr=e=>String(Math.round(e*i)/i),n=e.map((e=>`${pstr(e.x)};${pstr(e.y)};`)).join("");return n&&n.length?n.slice(0,-1).match(/.{1,80}(;|$)/g).map((e=>e.trim())).join("\n"):""},addpt(t){return t?(Array.isArray(t)||(t=[t]),e=removeduplicate([...e,...t]),this):this},addracc(t,i,n=2,r=!0){if(Array.isArray(t)&&(i={x:t[2]||0,y:t[3]||0},t={x:t[0]||0,y:t[1]||0}),e.length>=2){let o=raccordabezier(e[e.length-2],e[e.length-1],t,i,n);e=[...e,...o],r&&(e.push(t),e.push(i))}return e=removeduplicate(e),this},setorient(t){let i=orientation();return(1==i&&-1==t||-1==i&&1==t)&&e.reverse(),this},reverse(){return e.reverse(),this},pointinshape:t=>function isPointInPolygon(t){let i=t.x,n=t.y,r=!1;for(let t=0,o=e.length-1;t<e.length;o=t++){let s=e[t].x,A=e[t].y,a=e[o].x,l=e[o].y;A>n!=l>n&&i<(a-s)*(n-A)/(l-A)+s&&(r=!r)}return r}(t),azzera(){return e=[],this},truncatebefore:function truncatebefore(t){let i=new Linea2(e[0],e[1]),n=t.interseca(i);if(n){let t=e[0],i=e[1],r=i.x-t.x,o=i.y-t.y,s=r*r+o*o;if(s){if(((n.x-t.x)*r+(n.y-t.y)*o)/s<=1)return e[0]=n,this}}for(let i=1;i<e.length-1;i++){let n=new Linea2(e[i],e[i+1]),r=t.interseca(n);if(r&&n.onsegment(r))return e=e.slice(i),e[0]=r,this}return this},truncateafter:function truncateafter(t){let i=e.length,n=new Linea2(e[i-2],e[i-1]),r=t.interseca(n);if(r){let t=e[i-2],n=e[i-1],o=n.x-t.x,s=n.y-t.y,A=o*o+s*s;if(A){if(((r.x-t.x)*o+(r.y-t.y)*s)/A>=0)return e[i-1]=r,this}}for(let n=i-3;n>=0;n--){let i=new Linea2(e[n],e[n+1]),r=t.interseca(i);if(r&&i.onsegment(r))return e=e.slice(0,n+1),e.push(r),this}return this},removeduplicate(t=.005){return e=removeduplicate(e,t),this},to3d(t,i=0,n=0,r=0,o=!1,s=null,A=!1){let a=function to3dcoor(e,t){let{currentU:i=0,c:n=0,a:r=0,b:o=0,anglemin:s=30,open:A=!1,sh:a=null,invert:l=!1}=t;const c=[],p=e.length;for(let t=0;t<p;t++){const A=e[(t-1+p)%p],h=e[t],g=e[(t+1)%p],u={x:h.x-A.x,y:h.y-A.y},d={x:g.x-h.x,y:g.y-h.y},f=normal2(A,h),I=normal2(h,g),m=angle2vec(u,d);let b=r*h.x+o*h.y+n;if(a){let e=a.xfromy(h.y,0,!0);l?b+=e:b-=e}Math.abs(m-180)<=s?(f.nx,I.nx,f.ny,I.ny,c.push({x:h.x,y:-h.y,z:b,u:i,v:b})):(c.push({x:h.x,y:-h.y,z:b,u:i,v:b}),c.push({x:h.x,y:-h.y,z:b,u:i,v:b}));const C=g.x-h.x,B=g.y-h.y;i+=Math.sqrt(C*C+B*B)}if(!A){let e=c[0],t=c[c.length-1];e.x==t.x&&e.y==t.y||c.push({x:e.x,y:e.y,z:e.z,nx:e.nx,ny:e.ny,nz:e.nz,u:i,v:e.z})}return c}(e,{open:o,currentU:t,c:i,a:n,b:r,anglemin:30,sh:s,invert:A});return a},getboundbox:()=>e.length?e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.x=Math.max(e.p2.x,t.x),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}):{p1:new Punto2(0,0),p2:new Punto2(0,0)},fittobox(t,i){if(!e.length)return this;const n=this.getboundbox(),r=n.p2.x-n.p1.x,o=n.p2.y-n.p1.y,s=i.x-t.x,A=i.y-t.y,a=Math.min(s/(r||1),A/(o||1));for(let i of e)i.x=(i.x-n.p1.x)*a,i.y=(i.y-n.p1.y)*a,i.x+=t.x,i.y+=t.y;return this}}}function arcfrom3point(e,t,i,n){if(e<=0)return[t,n];if(1===e)return[t,i,n];const r=function findCircleCenter(e,t,i){const n=t.x*t.x+t.y*t.y,r=(e.x*e.x+e.y*e.y-n)/2,o=(n-i.x*i.x-i.y*i.y)/2,s=(e.x-t.x)*(t.y-i.y)-(t.x-i.x)*(e.y-t.y);return Math.abs(s)<1e-10?null:new Punto2((r*(t.y-i.y)-o*(e.y-t.y))/s,((e.x-t.x)*o-(t.x-i.x)*r)/s)}(t,i,n);if(!r){const i=[];for(let r=0;r<=e;r++){const o=r/e;i.push(new Punto2(t.x+(n.x-t.x)*o,t.y+(n.y-t.y)*o))}return i}let o=Math.atan2(t.y-r.y,t.x-r.x);Math.atan2(i.y-r.y,i.x-r.x);let s=Math.atan2(n.y-r.y,n.x-r.x);const A=(i.x-t.x)*(n.y-t.y)-(i.y-t.y)*(n.x-t.x),norm=e=>(e+2*Math.PI)%(2*Math.PI);o=norm(o),s=norm(s),A>0?s<o&&(s+=2*Math.PI):s>o&&(s-=2*Math.PI);const a=Math.hypot(t.x-r.x,t.y-r.y),l=(s-o)/e,c=[];for(let t=0;t<=e;t++){const e=o+l*t;c.push(new Punto2(r.x+a*Math.cos(e),r.y+a*Math.sin(e)))}return c}function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var qe,He={exports:{}};qe=He,function(){var e,t={version:"6.4.2.2",use_lines:!0,use_xyz:!1},i=!1;if(qe.exports?(qe.exports=t,i=!0):"undefined"!=typeof document?window.ClipperLib=t:self.ClipperLib=t,i)n="chrome",e="Netscape";else{var n=navigator.userAgent.toString().toLowerCase();e=navigator.appName}var r,o={};function BigInteger(e,i,n){t.biginteger_used=1,null!=e&&("number"==typeof e&&void 0===i?this.fromInt(e):"number"==typeof e?this.fromNumber(e,i,n):null==i&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,i))}function nbi(){return new BigInteger(null,void 0,void 0)}-1!=n.indexOf("chrome")&&-1==n.indexOf("chromium")?o.chrome=1:o.chrome=0,-1!=n.indexOf("chromium")?o.chromium=1:o.chromium=0,-1!=n.indexOf("safari")&&-1==n.indexOf("chrome")&&-1==n.indexOf("chromium")?o.safari=1:o.safari=0,-1!=n.indexOf("firefox")?o.firefox=1:o.firefox=0,-1!=n.indexOf("firefox/17")?o.firefox17=1:o.firefox17=0,-1!=n.indexOf("firefox/15")?o.firefox15=1:o.firefox15=0,-1!=n.indexOf("firefox/3")?o.firefox3=1:o.firefox3=0,-1!=n.indexOf("opera")?o.opera=1:o.opera=0,-1!=n.indexOf("msie 10")?o.msie10=1:o.msie10=0,-1!=n.indexOf("msie 9")?o.msie9=1:o.msie9=0,-1!=n.indexOf("msie 8")?o.msie8=1:o.msie8=0,-1!=n.indexOf("msie 7")?o.msie7=1:o.msie7=0,-1!=n.indexOf("msie ")?o.msie=1:o.msie=0,t.biginteger_used=null,"Microsoft Internet Explorer"==e?(BigInteger.prototype.am=function am2(e,t,i,n,r,o){for(var s=32767&t,A=t>>15;--o>=0;){var a=32767&this[e],l=this[e++]>>15,c=A*a+l*s;r=((a=s*a+((32767&c)<<15)+i[n]+(1073741823&r))>>>30)+(c>>>15)+A*l+(r>>>30),i[n++]=1073741823&a}return r},r=30):"Netscape"!=e?(BigInteger.prototype.am=function am1(e,t,i,n,r,o){for(;--o>=0;){var s=t*this[e++]+i[n]+r;r=Math.floor(s/67108864),i[n++]=67108863&s}return r},r=26):(BigInteger.prototype.am=function am3(e,t,i,n,r,o){for(var s=16383&t,A=t>>14;--o>=0;){var a=16383&this[e],l=this[e++]>>14,c=A*a+l*s;r=((a=s*a+((16383&c)<<14)+i[n]+r)>>28)+(c>>14)+A*l,i[n++]=268435455&a}return r},r=28),BigInteger.prototype.DB=r,BigInteger.prototype.DM=(1<<r)-1,BigInteger.prototype.DV=1<<r,BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-r,BigInteger.prototype.F2=2*r-52;var s,A,a=new Array;for(s="0".charCodeAt(0),A=0;A<=9;++A)a[s++]=A;for(s="a".charCodeAt(0),A=10;A<36;++A)a[s++]=A;for(s="A".charCodeAt(0),A=10;A<36;++A)a[s++]=A;function int2char(e){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)}function intAt(e,t){var i=a[e.charCodeAt(t)];return null==i?-1:i}function nbv(e){var t=nbi();return t.fromInt(e),t}function nbits(e){var t,i=1;return 0!=(t=e>>>16)&&(e=t,i+=16),0!=(t=e>>8)&&(e=t,i+=8),0!=(t=e>>4)&&(e=t,i+=4),0!=(t=e>>2)&&(e=t,i+=2),0!=(t=e>>1)&&(e=t,i+=1),i}function Classic(e){this.m=e}function Montgomery(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function op_and(e,t){return e&t}function op_or(e,t){return e|t}function op_xor(e,t){return e^t}function op_andnot(e,t){return e&~t}function lbit(e){if(0==e)return-1;var t=0;return 65535&e||(e>>=16,t+=16),255&e||(e>>=8,t+=8),15&e||(e>>=4,t+=4),3&e||(e>>=2,t+=2),1&e||++t,t}function cbit(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function NullExp(){}function nNop(e){return e}function Barrett(e){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}Classic.prototype.convert=function cConvert(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},Classic.prototype.revert=function cRevert(e){return e},Classic.prototype.reduce=function cReduce(e){e.divRemTo(this.m,null,e)},Classic.prototype.mulTo=function cMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Classic.prototype.sqrTo=function cSqrTo(e,t){e.squareTo(t),this.reduce(t)},Montgomery.prototype.convert=function montConvert(e){var t=nbi();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(BigInteger.ZERO)>0&&this.m.subTo(t,t),t},Montgomery.prototype.revert=function montRevert(e){var t=nbi();return e.copyTo(t),this.reduce(t),t},Montgomery.prototype.reduce=function montReduce(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var i=32767&e[t],n=i*this.mpl+((i*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(e[i=t+this.m.t]+=this.m.am(0,n,e,t,0,this.m.t);e[i]>=e.DV;)e[i]-=e.DV,e[++i]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},Montgomery.prototype.mulTo=function montMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Montgomery.prototype.sqrTo=function montSqrTo(e,t){e.squareTo(t),this.reduce(t)},BigInteger.prototype.copyTo=function bnpCopyTo(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(e,t){var i;if(16==t)i=4;else if(8==t)i=3;else if(256==t)i=8;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return void this.fromRadix(e,t);i=2}this.t=0,this.s=0;for(var n=e.length,r=!1,o=0;--n>=0;){var s=8==i?255&e[n]:intAt(e,n);s<0?"-"==e.charAt(n)&&(r=!0):(r=!1,0==o?this[this.t++]=s:o+i>this.DB?(this[this.t-1]|=(s&(1<<this.DB-o)-1)<<o,this[this.t++]=s>>this.DB-o):this[this.t-1]|=s<<o,(o+=i)>=this.DB&&(o-=this.DB))}8==i&&128&e[0]&&(this.s=-1,o>0&&(this[this.t-1]|=(1<<this.DB-o)-1<<o)),this.clamp(),r&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.clamp=function bnpClamp(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t},BigInteger.prototype.dlShiftTo=function bnpDLShiftTo(e,t){var i;for(i=this.t-1;i>=0;--i)t[i+e]=this[i];for(i=e-1;i>=0;--i)t[i]=0;t.t=this.t+e,t.s=this.s},BigInteger.prototype.drShiftTo=function bnpDRShiftTo(e,t){for(var i=e;i<this.t;++i)t[i-e]=this[i];t.t=Math.max(this.t-e,0),t.s=this.s},BigInteger.prototype.lShiftTo=function bnpLShiftTo(e,t){var i,n=e%this.DB,r=this.DB-n,o=(1<<r)-1,s=Math.floor(e/this.DB),A=this.s<<n&this.DM;for(i=this.t-1;i>=0;--i)t[i+s+1]=this[i]>>r|A,A=(this[i]&o)<<n;for(i=s-1;i>=0;--i)t[i]=0;t[s]=A,t.t=this.t+s+1,t.s=this.s,t.clamp()},BigInteger.prototype.rShiftTo=function bnpRShiftTo(e,t){t.s=this.s;var i=Math.floor(e/this.DB);if(i>=this.t)t.t=0;else{var n=e%this.DB,r=this.DB-n,o=(1<<n)-1;t[0]=this[i]>>n;for(var s=i+1;s<this.t;++s)t[s-i-1]|=(this[s]&o)<<r,t[s-i]=this[s]>>n;n>0&&(t[this.t-i-1]|=(this.s&o)<<r),t.t=this.t-i,t.clamp()}},BigInteger.prototype.subTo=function bnpSubTo(e,t){for(var i=0,n=0,r=Math.min(e.t,this.t);i<r;)n+=this[i]-e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n-=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n-=e[i],t[i++]=n&this.DM,n>>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t[i++]=this.DV+n:n>0&&(t[i++]=n),t.t=i,t.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(e,t){var i=this.abs(),n=e.abs(),r=i.t;for(t.t=r+n.t;--r>=0;)t[r]=0;for(r=0;r<n.t;++r)t[r+i.t]=i.am(0,n[r],t,r,0,i.t);t.s=0,t.clamp(),this.s!=e.s&&BigInteger.ZERO.subTo(t,t)},BigInteger.prototype.squareTo=function bnpSquareTo(e){for(var t=this.abs(),i=e.t=2*t.t;--i>=0;)e[i]=0;for(i=0;i<t.t-1;++i){var n=t.am(i,t[i],e,2*i,0,1);(e[i+t.t]+=t.am(i+1,2*t[i],e,2*i+1,n,t.t-i-1))>=t.DV&&(e[i+t.t]-=t.DV,e[i+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(i,t[i],e,2*i,0,1)),e.s=0,e.clamp()},BigInteger.prototype.divRemTo=function bnpDivRemTo(e,t,i){var n=e.abs();if(!(n.t<=0)){var r=this.abs();if(r.t<n.t)return null!=t&&t.fromInt(0),void(null!=i&&this.copyTo(i));null==i&&(i=nbi());var o=nbi(),s=this.s,A=e.s,a=this.DB-nbits(n[n.t-1]);a>0?(n.lShiftTo(a,o),r.lShiftTo(a,i)):(n.copyTo(o),r.copyTo(i));var l=o.t,c=o[l-1];if(0!=c){var p=c*(1<<this.F1)+(l>1?o[l-2]>>this.F2:0),h=this.FV/p,g=(1<<this.F1)/p,u=1<<this.F2,d=i.t,f=d-l,I=null==t?nbi():t;for(o.dlShiftTo(f,I),i.compareTo(I)>=0&&(i[i.t++]=1,i.subTo(I,i)),BigInteger.ONE.dlShiftTo(l,I),I.subTo(o,o);o.t<l;)o[o.t++]=0;for(;--f>=0;){var m=i[--d]==c?this.DM:Math.floor(i[d]*h+(i[d-1]+u)*g);if((i[d]+=o.am(0,m,i,f,0,l))<m)for(o.dlShiftTo(f,I),i.subTo(I,i);i[d]<--m;)i.subTo(I,i)}null!=t&&(i.drShiftTo(l,t),s!=A&&BigInteger.ZERO.subTo(t,t)),i.t=l,i.clamp(),a>0&&i.rShiftTo(a,i),s<0&&BigInteger.ZERO.subTo(i,i)}}},BigInteger.prototype.invDigit=function bnpInvDigit(){if(this.t<1)return 0;var e=this[0];if(!(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},BigInteger.prototype.isEven=function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)},BigInteger.prototype.exp=function bnpExp(e,t){if(e>4294967295||e<1)return BigInteger.ONE;var i=nbi(),n=nbi(),r=t.convert(this),o=nbits(e)-1;for(r.copyTo(i);--o>=0;)if(t.sqrTo(i,n),(e&1<<o)>0)t.mulTo(n,r,i);else{var s=i;i=n,n=s}return t.revert(i)},BigInteger.prototype.toString=function bnToString(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var i,n=(1<<t)-1,r=!1,o="",s=this.t,A=this.DB-s*this.DB%t;if(s-- >0)for(A<this.DB&&(i=this[s]>>A)>0&&(r=!0,o=int2char(i));s>=0;)A<t?(i=(this[s]&(1<<A)-1)<<t-A,i|=this[--s]>>(A+=this.DB-t)):(i=this[s]>>(A-=t)&n,A<=0&&(A+=this.DB,--s)),i>0&&(r=!0),r&&(o+=int2char(i));return r?o:"0"},BigInteger.prototype.negate=function bnNegate(){var e=nbi();return BigInteger.ZERO.subTo(this,e),e},BigInteger.prototype.abs=function bnAbs(){return this.s<0?this.negate():this},BigInteger.prototype.compareTo=function bnCompareTo(e){var t=this.s-e.s;if(0!=t)return t;var i=this.t;if(0!=(t=i-e.t))return this.s<0?-t:t;for(;--i>=0;)if(0!=(t=this[i]-e[i]))return t;return 0},BigInteger.prototype.bitLength=function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)},BigInteger.prototype.mod=function bnMod(e){var t=nbi();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(BigInteger.ZERO)>0&&e.subTo(t,t),t},BigInteger.prototype.modPowInt=function bnModPowInt(e,t){var i;return i=e<256||t.isEven()?new Classic(t):new Montgomery(t),this.exp(e,i)},BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=function nMulTo(e,t,i){e.multiplyTo(t,i)},NullExp.prototype.sqrTo=function nSqrTo(e,t){e.squareTo(t)},Barrett.prototype.convert=function barrettConvert(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=nbi();return e.copyTo(t),this.reduce(t),t},Barrett.prototype.revert=function barrettRevert(e){return e},Barrett.prototype.reduce=function barrettReduce(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},Barrett.prototype.mulTo=function barrettMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Barrett.prototype.sqrTo=function barrettSqrTo(e,t){e.squareTo(t),this.reduce(t)};var l=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],c=(1<<26)/l[l.length-1];BigInteger.prototype.chunkSize=function bnpChunkSize(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},BigInteger.prototype.toRadix=function bnpToRadix(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),i=Math.pow(e,t),n=nbv(i),r=nbi(),o=nbi(),s="";for(this.divRemTo(n,r,o);r.signum()>0;)s=(i+o.intValue()).toString(e).substr(1)+s,r.divRemTo(n,r,o);return o.intValue().toString(e)+s},BigInteger.prototype.fromRadix=function bnpFromRadix(e,t){this.fromInt(0),null==t&&(t=10);for(var i=this.chunkSize(t),n=Math.pow(t,i),r=!1,o=0,s=0,A=0;A<e.length;++A){var a=intAt(e,A);a<0?"-"==e.charAt(A)&&0==this.signum()&&(r=!0):(s=t*s+a,++o>=i&&(this.dMultiply(n),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(s,0)),r&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.fromNumber=function bnpFromNumber(e,t,i){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,i),this.testBit(e-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(e-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(BigInteger.ONE.shiftLeft(e-1),this);else{var n=new Array,r=7&e;n.length=1+(e>>3),t.nextBytes(n),r>0?n[0]&=(1<<r)-1:n[0]=0,this.fromString(n,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,i){var n,r,o=Math.min(e.t,this.t);for(n=0;n<o;++n)i[n]=t(this[n],e[n]);if(e.t<this.t){for(r=e.s&this.DM,n=o;n<this.t;++n)i[n]=t(this[n],r);i.t=this.t}else{for(r=this.s&this.DM,n=o;n<e.t;++n)i[n]=t(r,e[n]);i.t=e.t}i.s=t(this.s,e.s),i.clamp()},BigInteger.prototype.changeBit=function bnpChangeBit(e,t){var i=BigInteger.ONE.shiftLeft(e);return this.bitwiseTo(i,t,i),i},BigInteger.prototype.addTo=function bnpAddTo(e,t){for(var i=0,n=0,r=Math.min(e.t,this.t);i<r;)n+=this[i]+e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n+=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n+=e[i],t[i++]=n&this.DM,n>>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t[i++]=n:n<-1&&(t[i++]=this.DV+n),t.t=i,t.clamp()},BigInteger.prototype.dMultiply=function bnpDMultiply(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},BigInteger.prototype.dAddOffset=function bnpDAddOffset(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},BigInteger.prototype.multiplyLowerTo=function bnpMultiplyLowerTo(e,t,i){var n,r=Math.min(this.t+e.t,t);for(i.s=0,i.t=r;r>0;)i[--r]=0;for(n=i.t-this.t;r<n;++r)i[r+this.t]=this.am(0,e[r],i,r,0,this.t);for(n=Math.min(e.t,t);r<n;++r)this.am(0,e[r],i,r,0,t-r);i.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,i){--t;var n=i.t=this.t+e.t-t;for(i.s=0;--n>=0;)i[n]=0;for(n=Math.max(t-this.t,0);n<e.t;++n)i[this.t+n-t]=this.am(t-n,e[n],i,0,0,this.t+n-t);i.clamp(),i.drShiftTo(1,i)},BigInteger.prototype.modInt=function bnpModInt(e){if(e<=0)return 0;var t=this.DV%e,i=this.s<0?e-1:0;if(this.t>0)if(0==t)i=this[0]%e;else for(var n=this.t-1;n>=0;--n)i=(t*i+this[n])%e;return i},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var n=t.shiftRight(i);(e=e+1>>1)>l.length&&(e=l.length);for(var r=nbi(),o=0;o<e;++o){r.fromInt(l[Math.floor(Math.random()*l.length)]);var s=r.modPow(n,this);if(0!=s.compareTo(BigInteger.ONE)&&0!=s.compareTo(t)){for(var A=1;A++<i&&0!=s.compareTo(t);)if(0==(s=s.modPowInt(2,this)).compareTo(BigInteger.ONE))return!1;if(0!=s.compareTo(t))return!1}}return!0},BigInteger.prototype.clone=function bnClone(){var e=nbi();return this.copyTo(e),e},BigInteger.prototype.intValue=function bnIntValue(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},BigInteger.prototype.byteValue=function bnByteValue(){return 0==this.t?this.s:this[0]<<24>>24},BigInteger.prototype.shortValue=function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16},BigInteger.prototype.signum=function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},BigInteger.prototype.toByteArray=function bnToByteArray(){var e=this.t,t=new Array;t[0]=this.s;var i,n=this.DB-e*this.DB%8,r=0;if(e-- >0)for(n<this.DB&&(i=this[e]>>n)!=(this.s&this.DM)>>n&&(t[r++]=i|this.s<<this.DB-n);e>=0;)n<8?(i=(this[e]&(1<<n)-1)<<8-n,i|=this[--e]>>(n+=this.DB-8)):(i=this[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),128&i&&(i|=-256),0==r&&(128&this.s)!=(128&i)&&++r,(r>0||i!=this.s)&&(t[r++]=i);return t},BigInteger.prototype.equals=function bnEquals(e){return 0==this.compareTo(e)},BigInteger.prototype.min=function bnMin(e){return this.compareTo(e)<0?this:e},BigInteger.prototype.max=function bnMax(e){return this.compareTo(e)>0?this:e},BigInteger.prototype.and=function bnAnd(e){var t=nbi();return this.bitwiseTo(e,op_and,t),t},BigInteger.prototype.or=function bnOr(e){var t=nbi();return this.bitwiseTo(e,op_or,t),t},BigInteger.prototype.xor=function bnXor(e){var t=nbi();return this.bitwiseTo(e,op_xor,t),t},BigInteger.prototype.andNot=function bnAndNot(e){var t=nbi();return this.bitwiseTo(e,op_andnot,t),t},BigInteger.prototype.not=function bnNot(){for(var e=nbi(),t=0;t<this.t;++t)e[t]=this.DM&~this[t];return e.t=this.t,e.s=~this.s,e},BigInteger.prototype.shiftLeft=function bnShiftLeft(e){var t=nbi();return e<0?this.rShiftTo(-e,t):this.lShiftTo(e,t),t},BigInteger.prototype.shiftRight=function bnShiftRight(e){var t=nbi();return e<0?this.lShiftTo(-e,t):this.rShiftTo(e,t),t},BigInteger.prototype.getLowestSetBit=function bnGetLowestSetBit(){for(var e=0;e<this.t;++e)if(0!=this[e])return e*this.DB+lbit(this[e]);return this.s<0?this.t*this.DB:-1},BigInteger.prototype.bitCount=function bnBitCount(){for(var e=0,t=this.s&this.DM,i=0;i<this.t;++i)e+=cbit(this[i]^t);return e},BigInteger.prototype.testBit=function bnTestBit(e){var t=Math.floor(e/this.DB);return t>=this.t?0!=this.s:!!(this[t]&1<<e%this.DB)},BigInteger.prototype.setBit=function bnSetBit(e){return this.changeBit(e,op_or)},BigInteger.prototype.clearBit=function bnClearBit(e){return this.changeBit(e,op_andnot)},BigInteger.prototype.flipBit=function bnFlipBit(e){return this.changeBit(e,op_xor)},BigInteger.prototype.add=function bnAdd(e){var t=nbi();return this.addTo(e,t),t},BigInteger.prototype.subtract=function bnSubtract(e){var t=nbi();return this.subTo(e,t),t},BigInteger.prototype.multiply=function bnMultiply(e){var t=nbi();return this.multiplyTo(e,t),t},BigInteger.prototype.divide=function bnDivide(e){var t=nbi();return this.divRemTo(e,t,null),t},BigInteger.prototype.remainder=function bnRemainder(e){var t=nbi();return this.divRemTo(e,null,t),t},BigInteger.prototype.divideAndRemainder=function bnDivideAndRemainder(e){var t=nbi(),i=nbi();return this.divRemTo(e,t,i),new Array(t,i)},BigInteger.prototype.modPow=function bnModPow(e,t){var i,n,r=e.bitLength(),o=nbv(1);if(r<=0)return o;i=r<18?1:r<48?3:r<144?4:r<768?5:6,n=r<8?new Classic(t):t.isEven()?new Barrett(t):new Montgomery(t);var s=new Array,A=3,a=i-1,l=(1<<i)-1;if(s[1]=n.convert(this),i>1){var c=nbi();for(n.sqrTo(s[1],c);A<=l;)s[A]=nbi(),n.mulTo(c,s[A-2],s[A]),A+=2}var p,h,g=e.t-1,u=!0,d=nbi();for(r=nbits(e[g])-1;g>=0;){for(r>=a?p=e[g]>>r-a&l:(p=(e[g]&(1<<r+1)-1)<<a-r,g>0&&(p|=e[g-1]>>this.DB+r-a)),A=i;!(1&p);)p>>=1,--A;if((r-=A)<0&&(r+=this.DB,--g),u)s[p].copyTo(o),u=!1;else{for(;A>1;)n.sqrTo(o,d),n.sqrTo(d,o),A-=2;A>0?n.sqrTo(o,d):(h=o,o=d,d=h),n.mulTo(d,s[p],o)}for(;g>=0&&!(e[g]&1<<r);)n.sqrTo(o,d),h=o,o=d,d=h,--r<0&&(r=this.DB-1,--g)}return n.revert(o)},BigInteger.prototype.modInverse=function bnModInverse(e){var t=e.isEven();if(this.isEven()&&t||0==e.signum())return BigInteger.ZERO;for(var i=e.clone(),n=this.clone(),r=nbv(1),o=nbv(0),s=nbv(0),A=nbv(1);0!=i.signum();){for(;i.isEven();)i.rShiftTo(1,i),t?(r.isEven()&&o.isEven()||(r.addTo(this,r),o.subTo(e,o)),r.rShiftTo(1,r)):o.isEven()||o.subTo(e,o),o.rShiftTo(1,o);for(;n.isEven();)n.rShiftTo(1,n),t?(s.isEven()&&A.isEven()||(s.addTo(this,s),A.subTo(e,A)),s.rShiftTo(1,s)):A.isEven()||A.subTo(e,A),A.rShiftTo(1,A);i.compareTo(n)>=0?(i.subTo(n,i),t&&r.subTo(s,r),o.subTo(A,o)):(n.subTo(i,n),t&&s.subTo(r,s),A.subTo(o,A))}return 0!=n.compareTo(BigInteger.ONE)?BigInteger.ZERO:A.compareTo(e)>=0?A.subtract(e):A.signum()<0?(A.addTo(e,A),A.signum()<0?A.add(e):A):A},BigInteger.prototype.pow=function bnPow(e){return this.exp(e,new NullExp)},BigInteger.prototype.gcd=function bnGCD(e){var t=this.s<0?this.negate():this.clone(),i=e.s<0?e.negate():e.clone();if(t.compareTo(i)<0){var n=t;t=i,i=n}var r=t.getLowestSetBit(),o=i.getLowestSetBit();if(o<0)return t;for(r<o&&(o=r),o>0&&(t.rShiftTo(o,t),i.rShiftTo(o,i));t.signum()>0;)(r=t.getLowestSetBit())>0&&t.rShiftTo(r,t),(r=i.getLowestSetBit())>0&&i.rShiftTo(r,i),t.compareTo(i)>=0?(t.subTo(i,t),t.rShiftTo(1,t)):(i.subTo(t,i),i.rShiftTo(1,i));return o>0&&i.lShiftTo(o,i),i},BigInteger.prototype.isProbablePrime=function bnIsProbablePrime(e){var t,i=this.abs();if(1==i.t&&i[0]<=l[l.length-1]){for(t=0;t<l.length;++t)if(i[0]==l[t])return!0;return!1}if(i.isEven())return!1;for(t=1;t<l.length;){for(var n=l[t],r=t+1;r<l.length&&n<c;)n*=l[r++];for(n=i.modInt(n);t<r;)if(n%l[t++]==0)return!1}return i.millerRabin(e)},BigInteger.prototype.square=function bnSquare(){var e=nbi();return this.squareTo(e),e};var p=BigInteger;p.prototype.IsNegative=function(){return-1==this.compareTo(p.ZERO)},p.op_Equality=function(e,t){return 0==e.compareTo(t)},p.op_Inequality=function(e,t){return 0!=e.compareTo(t)},p.op_GreaterThan=function(e,t){return e.compareTo(t)>0},p.op_LessThan=function(e,t){return e.compareTo(t)<0},p.op_Addition=function(e,t){return new p(e,void 0,void 0).add(new p(t,void 0,void 0))},p.op_Subtraction=function(e,t){return new p(e,void 0,void 0).subtract(new p(t,void 0,void 0))},p.Int128Mul=function(e,t){return new p(e,void 0,void 0).multiply(new p(t,void 0,void 0))},p.op_Division=function(e,t){return e.divide(t)},p.prototype.ToDouble=function(){return parseFloat(this.toString())};var Inherit=function(e,t){var i;if(void 0===Object.getOwnPropertyNames){for(i in t.prototype)void 0!==e.prototype[i]&&e.prototype[i]!==Object.prototype[i]||(e.prototype[i]=t.prototype[i]);for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}else{for(var n=Object.getOwnPropertyNames(t.prototype),r=0;r<n.length;r++)void 0===Object.getOwnPropertyDescriptor(e.prototype,n[r])&&Object.defineProperty(e.prototype,n[r],Object.getOwnPropertyDescriptor(t.prototype,n[r]));for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}};t.Path=function(){return[]},t.Path.prototype.push=Array.prototype.push,t.Paths=function(){return[]},t.Paths.prototype.push=Array.prototype.push,t.DoublePoint=function(){var e=arguments;this.X=0,this.Y=0,1===e.length?(this.X=e[0].X,this.Y=e[0].Y):2===e.length&&(this.X=e[0],this.Y=e[1])},t.DoublePoint0=function(){this.X=0,this.Y=0},t.DoublePoint0.prototype=t.DoublePoint.prototype,t.DoublePoint1=function(e){this.X=e.X,this.Y=e.Y},t.DoublePoint1.prototype=t.DoublePoint.prototype,t.DoublePoint2=function(e,t){this.X=e,this.Y=t},t.DoublePoint2.prototype=t.DoublePoint.prototype,t.PolyNode=function(){this.m_Parent=null,this.m_polygon=new t.Path,this.m_Index=0,this.m_jointype=0,this.m_endtype=0,this.m_Childs=[],this.IsOpen=!1},t.PolyNode.prototype.IsHoleNode=function(){for(var e=!0,t=this.m_Parent;null!==t;)e=!e,t=t.m_Parent;return e},t.PolyNode.prototype.ChildCount=function(){return this.m_Childs.length},t.PolyNode.prototype.Contour=function(){return this.m_polygon},t.PolyNode.prototype.AddChild=function(e){var t=this.m_Childs.length;this.m_Childs.push(e),e.m_Parent=this,e.m_Index=t},t.PolyNode.prototype.GetNext=function(){return this.m_Childs.length>0?this.m_Childs[0]:this.GetNextSiblingUp()},t.PolyNode.prototype.GetNextSiblingUp=function(){return null===this.m_Parent?null:this.m_Index===this.m_Parent.m_Childs.length-1?this.m_Parent.GetNextSiblingUp():this.m_Parent.m_Childs[this.m_Index+1]},t.PolyNode.prototype.Childs=function(){return this.m_Childs},t.PolyNode.prototype.Parent=function(){return this.m_Parent},t.PolyNode.prototype.IsHole=function(){return this.IsHoleNode()},t.PolyTree=function(){this.m_AllPolys=[],t.PolyNode.call(this)},t.PolyTree.prototype.Clear=function(){for(var e=0,t=this.m_AllPolys.length;e<t;e++)this.m_AllPolys[e]=null;this.m_AllPolys.length=0,this.m_Childs.length=0},t.PolyTree.prototype.GetFirst=function(){return this.m_Childs.length>0?this.m_Childs[0]:null},t.PolyTree.prototype.Total=function(){var e=this.m_AllPolys.length;return e>0&&this.m_Childs[0]!==this.m_AllPolys[0]&&e--,e},Inherit(t.PolyTree,t.PolyNode),t.Math_Abs_Int64=t.Math_Abs_Int32=t.Math_Abs_Double=function(e){return Math.abs(e)},t.Math_Max_Int32_Int32=function(e,t){return Math.max(e,t)},o.msie||o.opera||o.safari?t.Cast_Int32=function(e){return 0|e}:t.Cast_Int32=function(e){return~~e},void 0===Number.toInteger&&(Number.toInteger=null),o.chrome?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):~~e}:o.firefox&&"function"==typeof Number.toInteger?t.Cast_Int64=function(e){return Number.toInteger(e)}:o.msie7||o.msie8?t.Cast_Int64=function(e){return parseInt(e,10)}:o.msie?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):0|e}:t.Cast_Int64=function(e){return e<0?Math.ceil(e):Math.floor(e)},t.Clear=function(e){e.length=0},t.PI=3.141592653589793,t.PI2=6.283185307179586,t.IntPoint=function(){var e=arguments,i=e.length;if(this.X=0,this.Y=0,t.use_xyz)if(this.Z=0,3===i)this.X=e[0],this.Y=e[1],this.Z=e[2];else if(2===i)this.X=e[0],this.Y=e[1],this.Z=0;else if(1===i)if(e[0]instanceof t.DoublePoint){var n=e[0];this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y),this.Z=0}else void 0===(r=e[0]).Z&&(r.Z=0),this.X=r.X,this.Y=r.Y,this.Z=r.Z;else this.X=0,this.Y=0,this.Z=0;else if(2===i)this.X=e[0],this.Y=e[1];else if(1===i)if(e[0]instanceof t.DoublePoint)n=e[0],this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y);else{var r=e[0];this.X=r.X,this.Y=r.Y}else this.X=0,this.Y=0},t.IntPoint.op_Equality=function(e,t){return e.X===t.X&&e.Y===t.Y},t.IntPoint.op_Inequality=function(e,t){return e.X!==t.X||e.Y!==t.Y},t.IntPoint0=function(){this.X=0,this.Y=0,t.use_xyz&&(this.Z=0)},t.IntPoint0.prototype=t.IntPoint.prototype,t.IntPoint1=function(e){this.X=e.X,this.Y=e.Y,t.use_xyz&&(void 0===e.Z?this.Z=0:this.Z=e.Z)},t.IntPoint1.prototype=t.IntPoint.prototype,t.IntPoint1dp=function(e){this.X=t.Clipper.Round(e.X),this.Y=t.Clipper.Round(e.Y),t.use_xyz&&(this.Z=0)},t.IntPoint1dp.prototype=t.IntPoint.prototype,t.IntPoint2=function(e,i,n){this.X=e,this.Y=i,t.use_xyz&&(this.Z=void 0===n?0:n)},t.IntPoint2.prototype=t.IntPoint.prototype,t.IntRect=function(){var e=arguments,t=e.length;if(4===t)this.left=e[0],this.top=e[1],this.right=e[2],this.bottom=e[3];else if(1===t){var i=e[0];this.left=i.left,this.top=i.top,this.right=i.right,this.bottom=i.bottom}else this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0=function(){this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0.prototype=t.IntRect.prototype,t.IntRect1=function(e){this.left=e.left,this.top=e.top,this.right=e.right,this.bottom=e.bottom},t.IntRect1.prototype=t.IntRect.prototype,t.IntRect4=function(e,t,i,n){this.left=e,this.top=t,this.right=i,this.bottom=n},t.IntRect4.prototype=t.IntRect.prototype,t.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,ctXor:3},t.PolyType={ptSubject:0,ptClip:1},t.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3},t.JoinType={jtSquare:0,jtRound:1,jtMiter:2},t.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4},t.EdgeSide={esLeft:0,esRight:1},t.Direction={dRightToLeft:0,dLeftToRight:1},t.TEdge=function(){this.Bot=new t.IntPoint0,this.Curr=new t.IntPoint0,this.Top=new t.IntPoint0,this.Delta=new t.IntPoint0,this.Dx=0,this.PolyTyp=t.PolyType.ptSubject,this.Side=t.EdgeSide.esLeft,this.WindDelta=0,this.WindCnt=0,this.WindCnt2=0,this.OutIdx=0,this.Next=null,this.Prev=null,this.NextInLML=null,this.NextInAEL=null,this.PrevInAEL=null,this.NextInSEL=null,this.PrevInSEL=null},t.IntersectNode=function(){this.Edge1=null,this.Edge2=null,this.Pt=new t.IntPoint0},t.MyIntersectNodeSort=function(){},t.MyIntersectNodeSort.Compare=function(e,t){var i=t.Pt.Y-e.Pt.Y;return i>0?1:i<0?-1:0},t.LocalMinima=function(){this.Y=0,this.LeftBound=null,this.RightBound=null,this.Next=null},t.Scanbeam=function(){this.Y=0,this.Next=null},t.Maxima=function(){this.X=0,this.Next=null,this.Prev=null},t.OutRec=function(){this.Idx=0,this.IsHole=!1,this.IsOpen=!1,this.FirstLeft=null,this.Pts=null,this.BottomPt=null,this.PolyNode=null},t.OutPt=function(){this.Idx=0,this.Pt=new t.IntPoint0,this.Next=null,this.Prev=null},t.Join=function(){this.OutPt1=null,this.OutPt2=null,this.OffPt=new t.IntPoint0},t.ClipperBase=function(){this.m_MinimaList=null,this.m_CurrentLM=null,this.m_edges=new Array,this.m_UseFullRange=!1,this.m_HasOpenPaths=!1,this.PreserveCollinear=!1,this.m_Scanbeam=null,this.m_PolyOuts=null,this.m_ActiveEdges=null},t.ClipperBase.horizontal=-9007199254740992,t.ClipperBase.Skip=-2,t.ClipperBase.Unassigned=-1,t.ClipperBase.tolerance=1e-20,t.ClipperBase.loRange=47453132,t.ClipperBase.hiRange=0xfffffffffffff,t.ClipperBase.near_zero=function(e){return e>-t.ClipperBase.tolerance&&e<t.ClipperBase.tolerance},t.ClipperBase.IsHorizontal=function(e){return 0===e.Delta.Y},t.ClipperBase.prototype.PointIsVertex=function(e,i){var n=i;do{if(t.IntPoint.op_Equality(n.Pt,e))return!0;n=n.Next}while(n!==i);return!1},t.ClipperBase.prototype.PointOnLineSegment=function(e,t,i,n){return n?e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&p.op_Equality(p.Int128Mul(e.X-t.X,i.Y-t.Y),p.Int128Mul(i.X-t.X,e.Y-t.Y)):e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&(e.X-t.X)*(i.Y-t.Y)==(i.X-t.X)*(e.Y-t.Y)},t.ClipperBase.prototype.PointOnPolygon=function(e,t,i){for(var n=t;;){if(this.PointOnLineSegment(e,n.Pt,n.Next.Pt,i))return!0;if((n=n.Next)===t)break}return!1},t.ClipperBase.prototype.SlopesEqual=t.ClipperBase.SlopesEqual=function(){var e,i,n,r,o,s,A=arguments,a=A.length;return 3===a?(e=A[0],i=A[1],A[2]?p.op_Equality(p.Int128Mul(e.Delta.Y,i.Delta.X),p.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)):4===a?(n=A[0],r=A[1],o=A[2],A[3]?p.op_Equality(p.Int128Mul(n.Y-r.Y,r.X-o.X),p.Int128Mul(n.X-r.X,r.Y-o.Y)):t.Cast_Int64((n.Y-r.Y)*(r.X-o.X))-t.Cast_Int64((n.X-r.X)*(r.Y-o.Y))==0):(n=A[0],r=A[1],o=A[2],s=A[3],A[4]?p.op_Equality(p.Int128Mul(n.Y-r.Y,o.X-s.X),p.Int128Mul(n.X-r.X,o.Y-s.Y)):t.Cast_Int64((n.Y-r.Y)*(o.X-s.X))-t.Cast_Int64((n.X-r.X)*(o.Y-s.Y))==0)},t.ClipperBase.SlopesEqual3=function(e,i,n){return n?p.op_Equality(p.Int128Mul(e.Delta.Y,i.Delta.X),p.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)},t.ClipperBase.SlopesEqual4=function(e,i,n,r){return r?p.op_Equality(p.Int128Mul(e.Y-i.Y,i.X-n.X),p.Int128Mul(e.X-i.X,i.Y-n.Y)):t.Cast_Int64((e.Y-i.Y)*(i.X-n.X))-t.Cast_Int64((e.X-i.X)*(i.Y-n.Y))==0},t.ClipperBase.SlopesEqual5=function(e,i,n,r,o){return o?p.op_Equality(p.Int128Mul(e.Y-i.Y,n.X-r.X),p.Int128Mul(e.X-i.X,n.Y-r.Y)):t.Cast_Int64((e.Y-i.Y)*(n.X-r.X))-t.Cast_Int64((e.X-i.X)*(n.Y-r.Y))==0},t.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var e=0,i=this.m_edges.length;e<i;++e){for(var n=0,r=this.m_edges[e].length;n<r;++n)this.m_edges[e][n]=null;t.Clear(this.m_edges[e])}t.Clear(this.m_edges),this.m_UseFullRange=!1,this.m_HasOpenPaths=!1},t.ClipperBase.prototype.DisposeLocalMinimaList=function(){for(;null!==this.m_MinimaList;){var e=this.m_MinimaList.Next;this.m_MinimaList=null,this.m_MinimaList=e}this.m_CurrentLM=null},t.ClipperBase.prototype.RangeTest=function(e,i){i.Value?(e.X>t.ClipperBase.hiRange||e.Y>t.ClipperBase.hiRange||-e.X>t.ClipperBase.hiRange||-e.Y>t.ClipperBase.hiRange)&&t.Error("Coordinate outside allowed range in RangeTest()."):(e.X>t.ClipperBase.loRange||e.Y>t.ClipperBase.loRange||-e.X>t.ClipperBase.loRange||-e.Y>t.ClipperBase.loRange)&&(i.Value=!0,this.RangeTest(e,i))},t.ClipperBase.prototype.InitEdge=function(e,i,n,r){e.Next=i,e.Prev=n,e.Curr.X=r.X,e.Curr.Y=r.Y,t.use_xyz&&(e.Curr.Z=r.Z),e.OutIdx=-1},t.ClipperBase.prototype.InitEdge2=function(e,i){e.Curr.Y>=e.Next.Curr.Y?(e.Bot.X=e.Curr.X,e.Bot.Y=e.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Curr.Z),e.Top.X=e.Next.Curr.X,e.Top.Y=e.Next.Curr.Y,t.use_xyz&&(e.Top.Z=e.Next.Curr.Z)):(e.Top.X=e.Curr.X,e.Top.Y=e.Curr.Y,t.use_xyz&&(e.Top.Z=e.Curr.Z),e.Bot.X=e.Next.Curr.X,e.Bot.Y=e.Next.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Next.Curr.Z)),this.SetDx(e),e.PolyTyp=i},t.ClipperBase.prototype.FindNextLocMin=function(e){for(var i;;){for(;t.IntPoint.op_Inequality(e.Bot,e.Prev.Bot)||t.IntPoint.op_Equality(e.Curr,e.Top);)e=e.Next;if(e.Dx!==t.ClipperBase.horizontal&&e.Prev.Dx!==t.ClipperBase.horizontal)break;for(;e.Prev.Dx===t.ClipperBase.horizontal;)e=e.Prev;for(i=e;e.Dx===t.ClipperBase.horizontal;)e=e.Next;if(e.Top.Y!==e.Prev.Bot.Y){i.Prev.Bot.X<e.Bot.X&&(e=i);break}}return e},t.ClipperBase.prototype.ProcessBound=function(e,i){var n,r,o=e;if(o.OutIdx===t.ClipperBase.Skip){if(e=o,i){for(;e.Top.Y===e.Next.Bot.Y;)e=e.Next;for(;e!==o&&e.Dx===t.ClipperBase.horizontal;)e=e.Prev}else{for(;e.Top.Y===e.Prev.Bot.Y;)e=e.Prev;for(;e!==o&&e.Dx===t.ClipperBase.horizontal;)e=e.Next}if(e===o)o=i?e.Next:e.Prev;else{e=i?o.Next:o.Prev;var s=new t.LocalMinima;s.Next=null,s.Y=e.Bot.Y,s.LeftBound=null,s.RightBound=e,e.WindDelta=0,o=this.ProcessBound(e,i),this.InsertLocalMinima(s)}return o}if(e.Dx===t.ClipperBase.horizontal&&((n=i?e.Prev:e.Next).Dx===t.ClipperBase.horizontal?n.Bot.X!==e.Bot.X&&n.Top.X!==e.Bot.X&&this.ReverseHorizontal(e):n.Bot.X!==e.Bot.X&&this.ReverseHorizontal(e)),n=e,i){for(;o.Top.Y===o.Next.Bot.Y&&o.Next.OutIdx!==t.ClipperBase.Skip;)o=o.Next;if(o.Dx===t.ClipperBase.horizontal&&o.Next.OutIdx!==t.ClipperBase.Skip){for(r=o;r.Prev.Dx===t.ClipperBase.horizontal;)r=r.Prev;r.Prev.Top.X>o.Next.Top.X&&(o=r.Prev)}for(;e!==o;)e.NextInLML=e.Next,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),e=e.Next;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),o=o.Next}else{for(;o.Top.Y===o.Prev.Bot.Y&&o.Prev.OutIdx!==t.ClipperBase.Skip;)o=o.Prev;if(o.Dx===t.ClipperBase.horizontal&&o.Prev.OutIdx!==t.ClipperBase.Skip){for(r=o;r.Next.Dx===t.ClipperBase.horizontal;)r=r.Next;(r.Next.Top.X===o.Prev.Top.X||r.Next.Top.X>o.Prev.Top.X)&&(o=r.Next)}for(;e!==o;)e.NextInLML=e.Prev,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),e=e.Prev;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),o=o.Prev}return o},t.ClipperBase.prototype.AddPath=function(e,i,n){t.use_lines?n||i!==t.PolyType.ptClip||t.Error("AddPath: Open paths must be subject."):n||t.Error("AddPath: Open paths have been disabled.");var r=e.length-1;if(n)for(;r>0&&t.IntPoint.op_Equality(e[r],e[0]);)--r;for(;r>0&&t.IntPoint.op_Equality(e[r],e[r-1]);)--r;if(n&&r<2||!n&&r<1)return!1;for(var o=new Array,s=0;s<=r;s++)o.push(new t.TEdge);var A=!0;o[1].Curr.X=e[1].X,o[1].Curr.Y=e[1].Y,t.use_xyz&&(o[1].Curr.Z=e[1].Z);var a={Value:this.m_UseFullRange};for(this.RangeTest(e[0],a),this.m_UseFullRange=a.Value,a.Value=this.m_UseFullRange,this.RangeTest(e[r],a),this.m_UseFullRange=a.Value,this.InitEdge(o[0],o[1],o[r],e[0]),this.InitEdge(o[r],o[0],o[r-1],e[r]),s=r-1;s>=1;--s)a.Value=this.m_UseFullRange,this.RangeTest(e[s],a),this.m_UseFullRange=a.Value,this.InitEdge(o[s],o[s+1],o[s-1],e[s]);for(var l,c=o[0],p=c,h=c;;)if(p.Curr!==p.Next.Curr||!n&&p.Next===c){if(p.Prev===p.Next)break;if(!n||!t.ClipperBase.SlopesEqual4(p.Prev.Curr,p.Curr,p.Next.Curr,this.m_UseFullRange)||this.PreserveCollinear&&this.Pt2IsBetweenPt1AndPt3(p.Prev.Curr,p.Curr,p.Next.Curr)){if((p=p.Next)===h||!n&&p.Next===c)break}else p===c&&(c=p.Next),h=p=(p=this.RemoveEdge(p)).Prev}else{if(p===p.Next)break;p===c&&(c=p.Next),h=p=this.RemoveEdge(p)}if(!n&&p===p.Next||n&&p.Prev===p.Next)return!1;n||(this.m_HasOpenPaths=!0,c.Prev.OutIdx=t.ClipperBase.Skip),p=c;do{this.InitEdge2(p,i),p=p.Next,A&&p.Curr.Y!==c.Curr.Y&&(A=!1)}while(p!==c);if(A){if(n)return!1;for(p.Prev.OutIdx=t.ClipperBase.Skip,(u=new t.LocalMinima).Next=null,u.Y=p.Bot.Y,u.LeftBound=null,u.RightBound=p,u.RightBound.Side=t.EdgeSide.esRight,u.RightBound.WindDelta=0;p.Bot.X!==p.Prev.Top.X&&this.ReverseHorizontal(p),p.Next.OutIdx!==t.ClipperBase.Skip;)p.NextInLML=p.Next,p=p.Next;return this.InsertLocalMinima(u),this.m_edges.push(o),!0}this.m_edges.push(o);var g=null;for(t.IntPoint.op_Equality(p.Prev.Bot,p.Prev.Top)&&(p=p.Next);(p=this.FindNextLocMin(p))!==g;){var u;null===g&&(g=p),(u=new t.LocalMinima).Next=null,u.Y=p.Bot.Y,p.Dx<p.Prev.Dx?(u.LeftBound=p.Prev,u.RightBound=p,l=!1):(u.LeftBound=p,u.RightBound=p.Prev,l=!0),u.LeftBound.Side=t.EdgeSide.esLeft,u.RightBound.Side=t.EdgeSide.esRight,n?u.LeftBound.Next===u.RightBound?u.LeftBound.WindDelta=-1:u.LeftBound.WindDelta=1:u.LeftBound.WindDelta=0,u.RightBound.WindDelta=-u.LeftBound.WindDelta,(p=this.ProcessBound(u.LeftBound,l)).OutIdx===t.ClipperBase.Skip&&(p=this.ProcessBound(p,l));var d=this.ProcessBound(u.RightBound,!l);d.OutIdx===t.ClipperBase.Skip&&(d=this.ProcessBound(d,!l)),u.LeftBound.OutIdx===t.ClipperBase.Skip?u.LeftBound=null:u.RightBound.OutIdx===t.ClipperBase.Skip&&(u.RightBound=null),this.InsertLocalMinima(u),l||(p=d)}return!0},t.ClipperBase.prototype.AddPaths=function(e,t,i){for(var n=!1,r=0,o=e.length;r<o;++r)this.AddPath(e[r],t,i)&&(n=!0);return n},t.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(e,i,n){return!(t.IntPoint.op_Equality(e,n)||t.IntPoint.op_Equality(e,i)||t.IntPoint.op_Equality(n,i))&&(e.X!==n.X?i.X>e.X==i.X<n.X:i.Y>e.Y==i.Y<n.Y)},t.ClipperBase.prototype.RemoveEdge=function(e){e.Prev.Next=e.Next,e.Next.Prev=e.Prev;var t=e.Next;return e.Prev=null,t},t.ClipperBase.prototype.SetDx=function(e){e.Delta.X=e.Top.X-e.Bot.X,e.Delta.Y=e.Top.Y-e.Bot.Y,0===e.Delta.Y?e.Dx=t.ClipperBase.horizontal:e.Dx=e.Delta.X/e.Delta.Y},t.ClipperBase.prototype.InsertLocalMinima=function(e){if(null===this.m_MinimaList)this.m_MinimaList=e;else if(e.Y>=this.m_MinimaList.Y)e.Next=this.m_MinimaList,this.m_MinimaList=e;else{for(var t=this.m_MinimaList;null!==t.Next&&e.Y<t.Next.Y;)t=t.Next;e.Next=t.Next,t.Next=e}},t.ClipperBase.prototype.PopLocalMinima=function(e,t){return t.v=this.m_CurrentLM,null!==this.m_CurrentLM&&this.m_CurrentLM.Y===e&&(this.m_CurrentLM=this.m_CurrentLM.Next,!0)},t.ClipperBase.prototype.ReverseHorizontal=function(e){var i=e.Top.X;e.Top.X=e.Bot.X,e.Bot.X=i,t.use_xyz&&(i=e.Top.Z,e.Top.Z=e.Bot.Z,e.Bot.Z=i)},t.ClipperBase.prototype.Reset=function(){if(this.m_CurrentLM=this.m_MinimaList,null!==this.m_CurrentLM){this.m_Scanbeam=null;for(var e=this.m_MinimaList;null!==e;){this.InsertScanbeam(e.Y);var i=e.LeftBound;null!==i&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),null!==(i=e.RightBound)&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),e=e.Next}this.m_ActiveEdges=null}},t.ClipperBase.prototype.InsertScanbeam=function(e){if(null===this.m_Scanbeam)this.m_Scanbeam=new t.Scanbeam,this.m_Scanbeam.Next=null,this.m_Scanbeam.Y=e;else if(e>this.m_Scanbeam.Y){var i=new t.Scanbeam;i.Y=e,i.Next=this.m_Scanbeam,this.m_Scanbeam=i}else{for(var n=this.m_Scanbeam;null!==n.Next&&e<=n.Next.Y;)n=n.Next;if(e===n.Y)return;var r=new t.Scanbeam;r.Y=e,r.Next=n.Next,n.Next=r}},t.ClipperBase.prototype.PopScanbeam=function(e){return null===this.m_Scanbeam?(e.v=0,!1):(e.v=this.m_Scanbeam.Y,this.m_Scanbeam=this.m_Scanbeam.Next,!0)},t.ClipperBase.prototype.LocalMinimaPending=function(){return null!==this.m_CurrentLM},t.ClipperBase.prototype.CreateOutRec=function(){var e=new t.OutRec;return e.Idx=t.ClipperBase.Unassigned,e.IsHole=!1,e.IsOpen=!1,e.FirstLeft=null,e.Pts=null,e.BottomPt=null,e.PolyNode=null,this.m_PolyOuts.push(e),e.Idx=this.m_PolyOuts.length-1,e},t.ClipperBase.prototype.DisposeOutRec=function(e){var t=this.m_PolyOuts[e];t.Pts=null,t=null,this.m_PolyOuts[e]=null},t.ClipperBase.prototype.UpdateEdgeIntoAEL=function(e){null===e.NextInLML&&t.Error("UpdateEdgeIntoAEL: invalid call");var i=e.PrevInAEL,n=e.NextInAEL;return e.NextInLML.OutIdx=e.OutIdx,null!==i?i.NextInAEL=e.NextInLML:this.m_ActiveEdges=e.NextInLML,null!==n&&(n.PrevInAEL=e.NextInLML),e.NextInLML.Side=e.Side,e.NextInLML.WindDelta=e.WindDelta,e.NextInLML.WindCnt=e.WindCnt,e.NextInLML.WindCnt2=e.WindCnt2,(e=e.NextInLML).Curr.X=e.Bot.X,e.Curr.Y=e.Bot.Y,e.PrevInAEL=i,e.NextInAEL=n,t.ClipperBase.IsHorizontal(e)||this.InsertScanbeam(e.Top.Y),e},t.ClipperBase.prototype.SwapPositionsInAEL=function(e,t){if(e.NextInAEL!==e.PrevInAEL&&t.NextInAEL!==t.PrevInAEL){if(e.NextInAEL===t){var i=t.NextInAEL;null!==i&&(i.PrevInAEL=e);var n=e.PrevInAEL;null!==n&&(n.NextInAEL=t),t.PrevInAEL=n,t.NextInAEL=e,e.PrevInAEL=t,e.NextInAEL=i}else if(t.NextInAEL===e){var r=e.NextInAEL;null!==r&&(r.PrevInAEL=t);var o=t.PrevInAEL;null!==o&&(o.NextInAEL=e),e.PrevInAEL=o,e.NextInAEL=t,t.PrevInAEL=e,t.NextInAEL=r}else{var s=e.NextInAEL,A=e.PrevInAEL;e.NextInAEL=t.NextInAEL,null!==e.NextInAEL&&(e.NextInAEL.PrevInAEL=e),e.PrevInAEL=t.PrevInAEL,null!==e.PrevInAEL&&(e.PrevInAEL.NextInAEL=e),t.NextInAEL=s,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=t),t.PrevInAEL=A,null!==t.PrevInAEL&&(t.PrevInAEL.NextInAEL=t)}null===e.PrevInAEL?this.m_ActiveEdges=e:null===t.PrevInAEL&&(this.m_ActiveEdges=t)}},t.ClipperBase.prototype.DeleteFromAEL=function(e){var t=e.PrevInAEL,i=e.NextInAEL;null===t&&null===i&&e!==this.m_ActiveEdges||(null!==t?t.NextInAEL=i:this.m_ActiveEdges=i,null!==i&&(i.PrevInAEL=t),e.NextInAEL=null,e.PrevInAEL=null)},t.Clipper=function(e){void 0===e&&(e=0),this.m_PolyOuts=null,this.m_ClipType=t.ClipType.ctIntersection,this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=null,this.m_IntersectNodeComparer=null,this.m_ExecuteLocked=!1,this.m_ClipFillType=t.PolyFillType.pftEvenOdd,this.m_SubjFillType=t.PolyFillType.pftEvenOdd,this.m_Joins=null,this.m_GhostJoins=null,this.m_UsingPolyTree=!1,this.ReverseSolution=!1,this.StrictlySimple=!1,t.ClipperBase.call(this),this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=new Array,this.m_IntersectNodeComparer=t.MyIntersectNodeSort.Compare,this.m_ExecuteLocked=!1,this.m_UsingPolyTree=!1,this.m_PolyOuts=new Array,this.m_Joins=new Array,this.m_GhostJoins=new Array,this.ReverseSolution=!!(1&e),this.StrictlySimple=!!(2&e),this.PreserveCollinear=!!(4&e),t.use_xyz&&(this.ZFillFunction=null)},t.Clipper.ioReverseSolution=1,t.Clipper.ioStrictlySimple=2,t.Clipper.ioPreserveCollinear=4,t.Clipper.prototype.Clear=function(){0!==this.m_edges.length&&(this.DisposeAllPolyPts(),t.ClipperBase.prototype.Clear.call(this))},t.Clipper.prototype.InsertMaxima=function(e){var i=new t.Maxima;if(i.X=e,null===this.m_Maxima)this.m_Maxima=i,this.m_Maxima.Next=null,this.m_Maxima.Prev=null;else if(e<this.m_Maxima.X)i.Next=this.m_Maxima,i.Prev=null,this.m_Maxima=i;else{for(var n=this.m_Maxima;null!==n.Next&&e>=n.Next.X;)n=n.Next;if(e===n.X)return;i.Next=n.Next,i.Prev=n,null!==n.Next&&(n.Next.Prev=i),n.Next=i}},t.Clipper.prototype.Execute=function(){var e=arguments,i=e.length,n=e[1]instanceof t.PolyTree;if(4===i&&!n){var r=e[0],o=e[1],s=e[2],A=e[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&&t.Error("Error: PolyTree struct is needed for open path clipping."),this.m_ExecuteLocked=!0,t.Clear(o),this.m_SubjFillType=s,this.m_ClipFillType=A,this.m_ClipType=r,this.m_UsingPolyTree=!1;try{(l=this.ExecuteInternal())&&this.BuildResult(o)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}if(4===i&&n){r=e[0];var a=e[1];if(s=e[2],A=e[3],this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0,this.m_SubjFillType=s,this.m_ClipFillType=A,this.m_ClipType=r,this.m_UsingPolyTree=!0;try{var l;(l=this.ExecuteInternal())&&this.BuildResult2(a)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}return 2!==i||n?2===i&&n?(r=e[0],a=e[1],this.Execute(r,a,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd)):void 0:(r=e[0],o=e[1],this.Execute(r,o,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd))},t.Clipper.prototype.FixHoleLinkage=function(e){if(null!==e.FirstLeft&&(e.IsHole===e.FirstLeft.IsHole||null===e.FirstLeft.Pts)){for(var t=e.FirstLeft;null!==t&&(t.IsHole===e.IsHole||null===t.Pts);)t=t.FirstLeft;e.FirstLeft=t}},t.Clipper.prototype.ExecuteInternal=function(){try{this.Reset(),this.m_SortedEdges=null,this.m_Maxima=null;var e,t,i,n={},r={};if(!this.PopScanbeam(n))return!1;for(this.InsertLocalMinimaIntoAEL(n.v);this.PopScanbeam(r)||this.LocalMinimaPending();){if(this.ProcessHorizontals(),this.m_GhostJoins.length=0,!this.ProcessIntersections(r.v))return!1;this.ProcessEdgesAtTopOfScanbeam(r.v),n.v=r.v,this.InsertLocalMinimaIntoAEL(n.v)}for(t=0,i=this.m_PolyOuts.length;t<i;t++)null===(e=this.m_PolyOuts[t]).Pts||e.IsOpen||(e.IsHole^this.ReverseSolution)==this.Area$1(e)>0&&this.ReversePolyPtLinks(e.Pts);for(this.JoinCommonEdges(),t=0,i=this.m_PolyOuts.length;t<i;t++)null!==(e=this.m_PolyOuts[t]).Pts&&(e.IsOpen?this.FixupOutPolyline(e):this.FixupOutPolygon(e));return this.StrictlySimple&&this.DoSimplePolygons(),!0}finally{this.m_Joins.length=0,this.m_GhostJoins.length=0}},t.Clipper.prototype.DisposeAllPolyPts=function(){for(var e=0,i=this.m_PolyOuts.length;e<i;++e)this.DisposeOutRec(e);t.Clear(this.m_PolyOuts)},t.Clipper.prototype.AddJoin=function(e,i,n){var r=new t.Join;r.OutPt1=e,r.OutPt2=i,r.OffPt.X=n.X,r.OffPt.Y=n.Y,t.use_xyz&&(r.OffPt.Z=n.Z),this.m_Joins.push(r)},t.Clipper.prototype.AddGhostJoin=function(e,i){var n=new t.Join;n.OutPt1=e,n.OffPt.X=i.X,n.OffPt.Y=i.Y,t.use_xyz&&(n.OffPt.Z=i.Z),this.m_GhostJoins.push(n)},t.Clipper.prototype.SetZ=function(e,i,n){if(null!==this.ZFillFunction){if(0!==e.Z||null===this.ZFillFunction)return;t.IntPoint.op_Equality(e,i.Bot)?e.Z=i.Bot.Z:t.IntPoint.op_Equality(e,i.Top)?e.Z=i.Top.Z:t.IntPoint.op_Equality(e,n.Bot)?e.Z=n.Bot.Z:t.IntPoint.op_Equality(e,n.Top)?e.Z=n.Top.Z:this.ZFillFunction(i.Bot,i.Top,n.Bot,n.Top,e)}},t.Clipper.prototype.InsertLocalMinimaIntoAEL=function(e){for(var i,n,r={};this.PopLocalMinima(e,r);){i=r.v.LeftBound,n=r.v.RightBound;var o=null;if(null===i?(this.InsertEdgeIntoAEL(n,null),this.SetWindingCount(n),this.IsContributing(n)&&(o=this.AddOutPt(n,n.Bot))):null===n?(this.InsertEdgeIntoAEL(i,null),this.SetWindingCount(i),this.IsContributing(i)&&(o=this.AddOutPt(i,i.Bot)),this.InsertScanbeam(i.Top.Y)):(this.InsertEdgeIntoAEL(i,null),this.InsertEdgeIntoAEL(n,i),this.SetWindingCount(i),n.WindCnt=i.WindCnt,n.WindCnt2=i.WindCnt2,this.IsContributing(i)&&(o=this.AddLocalMinPoly(i,n,i.Bot)),this.InsertScanbeam(i.Top.Y)),null!==n&&(t.ClipperBase.IsHorizontal(n)?(null!==n.NextInLML&&this.InsertScanbeam(n.NextInLML.Top.Y),this.AddEdgeToSEL(n)):this.InsertScanbeam(n.Top.Y)),null!==i&&null!==n){if(null!==o&&t.ClipperBase.IsHorizontal(n)&&this.m_GhostJoins.length>0&&0!==n.WindDelta)for(var s=0,A=this.m_GhostJoins.length;s<A;s++){var a=this.m_GhostJoins[s];this.HorzSegmentsOverlap(a.OutPt1.Pt.X,a.OffPt.X,n.Bot.X,n.Top.X)&&this.AddJoin(a.OutPt1,o,a.OffPt)}if(i.OutIdx>=0&&null!==i.PrevInAEL&&i.PrevInAEL.Curr.X===i.Bot.X&&i.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(i.PrevInAEL.Curr,i.PrevInAEL.Top,i.Curr,i.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==i.PrevInAEL.WindDelta){var l=this.AddOutPt(i.PrevInAEL,i.Bot);this.AddJoin(o,l,i.Top)}if(i.NextInAEL!==n){n.OutIdx>=0&&n.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(n.PrevInAEL.Curr,n.PrevInAEL.Top,n.Curr,n.Top,this.m_UseFullRange)&&0!==n.WindDelta&&0!==n.PrevInAEL.WindDelta&&(l=this.AddOutPt(n.PrevInAEL,n.Bot),this.AddJoin(o,l,n.Top));var c=i.NextInAEL;if(null!==c)for(;c!==n;)this.IntersectEdges(n,c,i.Curr),c=c.NextInAEL}}}},t.Clipper.prototype.InsertEdgeIntoAEL=function(e,t){if(null===this.m_ActiveEdges)e.PrevInAEL=null,e.NextInAEL=null,this.m_ActiveEdges=e;else if(null===t&&this.E2InsertsBeforeE1(this.m_ActiveEdges,e))e.PrevInAEL=null,e.NextInAEL=this.m_ActiveEdges,this.m_ActiveEdges.PrevInAEL=e,this.m_ActiveEdges=e;else{for(null===t&&(t=this.m_ActiveEdges);null!==t.NextInAEL&&!this.E2InsertsBeforeE1(t.NextInAEL,e);)t=t.NextInAEL;e.NextInAEL=t.NextInAEL,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=e),e.PrevInAEL=t,t.NextInAEL=e}},t.Clipper.prototype.E2InsertsBeforeE1=function(e,i){return i.Curr.X===e.Curr.X?i.Top.Y>e.Top.Y?i.Top.X<t.Clipper.TopX(e,i.Top.Y):e.Top.X>t.Clipper.TopX(i,e.Top.Y):i.Curr.X<e.Curr.X},t.Clipper.prototype.IsEvenOddFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType===t.PolyFillType.pftEvenOdd:this.m_ClipFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsEvenOddAltFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_ClipFillType===t.PolyFillType.pftEvenOdd:this.m_SubjFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsContributing=function(e){var i,n;switch(e.PolyTyp===t.PolyType.ptSubject?(i=this.m_SubjFillType,n=this.m_ClipFillType):(i=this.m_ClipFillType,n=this.m_SubjFillType),i){case t.PolyFillType.pftEvenOdd:if(0===e.WindDelta&&1!==e.WindCnt)return!1;break;case t.PolyFillType.pftNonZero:if(1!==Math.abs(e.WindCnt))return!1;break;case t.PolyFillType.pftPositive:if(1!==e.WindCnt)return!1;break;default:if(-1!==e.WindCnt)return!1}switch(this.m_ClipType){case t.ClipType.ctIntersection:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctUnion:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}case t.ClipType.ctDifference:if(e.PolyTyp===t.PolyType.ptSubject)switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}else switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctXor:if(0!==e.WindDelta)return!0;switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}}return!0},t.Clipper.prototype.SetWindingCount=function(e){for(var i=e.PrevInAEL;null!==i&&(i.PolyTyp!==e.PolyTyp||0===i.WindDelta);)i=i.PrevInAEL;if(null===i){var n=e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType:this.m_ClipFillType;0===e.WindDelta?e.WindCnt=n===t.PolyFillType.pftNegative?-1:1:e.WindCnt=e.WindDelta,e.WindCnt2=0,i=this.m_ActiveEdges}else if(0===e.WindDelta&&this.m_ClipType!==t.ClipType.ctUnion)e.WindCnt=1,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;else if(this.IsEvenOddFillType(e)){if(0===e.WindDelta){for(var r=!0,o=i.PrevInAEL;null!==o;)o.PolyTyp===i.PolyTyp&&0!==o.WindDelta&&(r=!r),o=o.PrevInAEL;e.WindCnt=r?0:1}else e.WindCnt=e.WindDelta;e.WindCnt2=i.WindCnt2,i=i.NextInAEL}else i.WindCnt*i.WindDelta<0?Math.abs(i.WindCnt)>1?i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta:e.WindCnt=0===e.WindDelta?1:e.WindDelta:0===e.WindDelta?e.WindCnt=i.WindCnt<0?i.WindCnt-1:i.WindCnt+1:i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;if(this.IsEvenOddAltFillType(e))for(;i!==e;)0!==i.WindDelta&&(e.WindCnt2=0===e.WindCnt2?1:0),i=i.NextInAEL;else for(;i!==e;)e.WindCnt2+=i.WindDelta,i=i.NextInAEL},t.Clipper.prototype.AddEdgeToSEL=function(e){null===this.m_SortedEdges?(this.m_SortedEdges=e,e.PrevInSEL=null,e.NextInSEL=null):(e.NextInSEL=this.m_SortedEdges,e.PrevInSEL=null,this.m_SortedEdges.PrevInSEL=e,this.m_SortedEdges=e)},t.Clipper.prototype.PopEdgeFromSEL=function(e){if(e.v=this.m_SortedEdges,null===e.v)return!1;var t=e.v;return this.m_SortedEdges=e.v.NextInSEL,null!==this.m_SortedEdges&&(this.m_SortedEdges.PrevInSEL=null),t.NextInSEL=null,t.PrevInSEL=null,!0},t.Clipper.prototype.CopyAELToSEL=function(){var e=this.m_ActiveEdges;for(this.m_SortedEdges=e;null!==e;)e.PrevInSEL=e.PrevInAEL,e.NextInSEL=e.NextInAEL,e=e.NextInAEL},t.Clipper.prototype.SwapPositionsInSEL=function(e,t){if(!(null===e.NextInSEL&&null===e.PrevInSEL||null===t.NextInSEL&&null===t.PrevInSEL)){if(e.NextInSEL===t)null!==(i=t.NextInSEL)&&(i.PrevInSEL=e),null!==(n=e.PrevInSEL)&&(n.NextInSEL=t),t.PrevInSEL=n,t.NextInSEL=e,e.PrevInSEL=t,e.NextInSEL=i;else if(t.NextInSEL===e)null!==(i=e.NextInSEL)&&(i.PrevInSEL=t),null!==(n=t.PrevInSEL)&&(n.NextInSEL=e),e.PrevInSEL=n,e.NextInSEL=t,t.PrevInSEL=e,t.NextInSEL=i;else{var i=e.NextInSEL,n=e.PrevInSEL;e.NextInSEL=t.NextInSEL,null!==e.NextInSEL&&(e.NextInSEL.PrevInSEL=e),e.PrevInSEL=t.PrevInSEL,null!==e.PrevInSEL&&(e.PrevInSEL.NextInSEL=e),t.NextInSEL=i,null!==t.NextInSEL&&(t.NextInSEL.PrevInSEL=t),t.PrevInSEL=n,null!==t.PrevInSEL&&(t.PrevInSEL.NextInSEL=t)}null===e.PrevInSEL?this.m_SortedEdges=e:null===t.PrevInSEL&&(this.m_SortedEdges=t)}},t.Clipper.prototype.AddLocalMaxPoly=function(e,t,i){this.AddOutPt(e,i),0===t.WindDelta&&this.AddOutPt(t,i),e.OutIdx===t.OutIdx?(e.OutIdx=-1,t.OutIdx=-1):e.OutIdx<t.OutIdx?this.AppendPolygon(e,t):this.AppendPolygon(t,e)},t.Clipper.prototype.AddLocalMinPoly=function(e,i,n){var r,o,s;if(t.ClipperBase.IsHorizontal(i)||e.Dx>i.Dx?(r=this.AddOutPt(e,n),i.OutIdx=e.OutIdx,e.Side=t.EdgeSide.esLeft,i.Side=t.EdgeSide.esRight,s=(o=e).PrevInAEL===i?i.PrevInAEL:o.PrevInAEL):(r=this.AddOutPt(i,n),e.OutIdx=i.OutIdx,e.Side=t.EdgeSide.esRight,i.Side=t.EdgeSide.esLeft,s=(o=i).PrevInAEL===e?e.PrevInAEL:o.PrevInAEL),null!==s&&s.OutIdx>=0&&s.Top.Y<n.Y&&o.Top.Y<n.Y){var A=t.Clipper.TopX(s,n.Y),a=t.Clipper.TopX(o,n.Y);if(A===a&&0!==o.WindDelta&&0!==s.WindDelta&&t.ClipperBase.SlopesEqual5(new t.IntPoint2(A,n.Y),s.Top,new t.IntPoint2(a,n.Y),o.Top,this.m_UseFullRange)){var l=this.AddOutPt(s,n);this.AddJoin(r,l,o.Top)}}return r},t.Clipper.prototype.AddOutPt=function(e,i){if(e.OutIdx<0){(r=this.CreateOutRec()).IsOpen=0===e.WindDelta;var n=new t.OutPt;return r.Pts=n,n.Idx=r.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=n,n.Prev=n,r.IsOpen||this.SetHoleState(e,r),e.OutIdx=r.Idx,n}var r,o=(r=this.m_PolyOuts[e.OutIdx]).Pts,s=e.Side===t.EdgeSide.esLeft;return s&&t.IntPoint.op_Equality(i,o.Pt)?o:!s&&t.IntPoint.op_Equality(i,o.Prev.Pt)?o.Prev:((n=new t.OutPt).Idx=r.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=o,n.Prev=o.Prev,n.Prev.Next=n,o.Prev=n,s&&(r.Pts=n),n)},t.Clipper.prototype.GetLastOutPt=function(e){var i=this.m_PolyOuts[e.OutIdx];return e.Side===t.EdgeSide.esLeft?i.Pts:i.Pts.Prev},t.Clipper.prototype.SwapPoints=function(e,i){var n=new t.IntPoint1(e.Value);e.Value.X=i.Value.X,e.Value.Y=i.Value.Y,t.use_xyz&&(e.Value.Z=i.Value.Z),i.Value.X=n.X,i.Value.Y=n.Y,t.use_xyz&&(i.Value.Z=n.Z)},t.Clipper.prototype.HorzSegmentsOverlap=function(e,t,i,n){var r;return e>t&&(r=e,e=t,t=r),i>n&&(r=i,i=n,n=r),e<n&&i<t},t.Clipper.prototype.SetHoleState=function(e,t){for(var i=e.PrevInAEL,n=null;null!==i;)i.OutIdx>=0&&0!==i.WindDelta&&(null===n?n=i:n.OutIdx===i.OutIdx&&(n=null)),i=i.PrevInAEL;null===n?(t.FirstLeft=null,t.IsHole=!1):(t.FirstLeft=this.m_PolyOuts[n.OutIdx],t.IsHole=!t.FirstLeft.IsHole)},t.Clipper.prototype.GetDx=function(e,i){return e.Y===i.Y?t.ClipperBase.horizontal:(i.X-e.X)/(i.Y-e.Y)},t.Clipper.prototype.FirstIsBottomPt=function(e,i){for(var n=e.Prev;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Prev;var r=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=e.Next;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Next;var o=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=i.Prev;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Prev;var s=Math.abs(this.GetDx(i.Pt,n.Pt));for(n=i.Next;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Next;var A=Math.abs(this.GetDx(i.Pt,n.Pt));return Math.max(r,o)===Math.max(s,A)&&Math.min(r,o)===Math.min(s,A)?this.Area(e)>0:r>=s&&r>=A||o>=s&&o>=A},t.Clipper.prototype.GetBottomPt=function(e){for(var i=null,n=e.Next;n!==e;)n.Pt.Y>e.Pt.Y?(e=n,i=null):n.Pt.Y===e.Pt.Y&&n.Pt.X<=e.Pt.X&&(n.Pt.X<e.Pt.X?(i=null,e=n):n.Next!==e&&n.Prev!==e&&(i=n)),n=n.Next;if(null!==i)for(;i!==n;)for(this.FirstIsBottomPt(n,i)||(e=i),i=i.Next;t.IntPoint.op_Inequality(i.Pt,e.Pt);)i=i.Next;return e},t.Clipper.prototype.GetLowermostRec=function(e,t){null===e.BottomPt&&(e.BottomPt=this.GetBottomPt(e.Pts)),null===t.BottomPt&&(t.BottomPt=this.GetBottomPt(t.Pts));var i=e.BottomPt,n=t.BottomPt;return i.Pt.Y>n.Pt.Y?e:i.Pt.Y<n.Pt.Y?t:i.Pt.X<n.Pt.X?e:i.Pt.X>n.Pt.X||i.Next===i?t:n.Next===n||this.FirstIsBottomPt(i,n)?e:t},t.Clipper.prototype.OutRec1RightOfOutRec2=function(e,t){do{if((e=e.FirstLeft)===t)return!0}while(null!==e);return!1},t.Clipper.prototype.GetOutRec=function(e){for(var t=this.m_PolyOuts[e];t!==this.m_PolyOuts[t.Idx];)t=this.m_PolyOuts[t.Idx];return t},t.Clipper.prototype.AppendPolygon=function(e,i){var n,r=this.m_PolyOuts[e.OutIdx],o=this.m_PolyOuts[i.OutIdx];n=this.OutRec1RightOfOutRec2(r,o)?o:this.OutRec1RightOfOutRec2(o,r)?r:this.GetLowermostRec(r,o);var s=r.Pts,A=s.Prev,a=o.Pts,l=a.Prev;e.Side===t.EdgeSide.esLeft?i.Side===t.EdgeSide.esLeft?(this.ReversePolyPtLinks(a),a.Next=s,s.Prev=a,A.Next=l,l.Prev=A,r.Pts=l):(l.Next=s,s.Prev=l,a.Prev=A,A.Next=a,r.Pts=a):i.Side===t.EdgeSide.esRight?(this.ReversePolyPtLinks(a),A.Next=l,l.Prev=A,a.Next=s,s.Prev=a):(A.Next=a,a.Prev=A,s.Prev=l,l.Next=s),r.BottomPt=null,n===o&&(o.FirstLeft!==r&&(r.FirstLeft=o.FirstLeft),r.IsHole=o.IsHole),o.Pts=null,o.BottomPt=null,o.FirstLeft=r;var c=e.OutIdx,p=i.OutIdx;e.OutIdx=-1,i.OutIdx=-1;for(var h=this.m_ActiveEdges;null!==h;){if(h.OutIdx===p){h.OutIdx=c,h.Side=e.Side;break}h=h.NextInAEL}o.Idx=r.Idx},t.Clipper.prototype.ReversePolyPtLinks=function(e){if(null!==e){var t,i;t=e;do{i=t.Next,t.Next=t.Prev,t.Prev=i,t=i}while(t!==e)}},t.Clipper.SwapSides=function(e,t){var i=e.Side;e.Side=t.Side,t.Side=i},t.Clipper.SwapPolyIndexes=function(e,t){var i=e.OutIdx;e.OutIdx=t.OutIdx,t.OutIdx=i},t.Clipper.prototype.IntersectEdges=function(e,i,n){var r=e.OutIdx>=0,o=i.OutIdx>=0;if(t.use_xyz&&this.SetZ(n,e,i),!t.use_lines||0!==e.WindDelta&&0!==i.WindDelta){if(e.PolyTyp===i.PolyTyp)if(this.IsEvenOddFillType(e)){var s=e.WindCnt;e.WindCnt=i.WindCnt,i.WindCnt=s}else e.WindCnt+i.WindDelta===0?e.WindCnt=-e.WindCnt:e.WindCnt+=i.WindDelta,i.WindCnt-e.WindDelta==0?i.WindCnt=-i.WindCnt:i.WindCnt-=e.WindDelta;else this.IsEvenOddFillType(i)?e.WindCnt2=0===e.WindCnt2?1:0:e.WindCnt2+=i.WindDelta,this.IsEvenOddFillType(e)?i.WindCnt2=0===i.WindCnt2?1:0:i.WindCnt2-=e.WindDelta;var A,a,l,c,p,h;switch(e.PolyTyp===t.PolyType.ptSubject?(A=this.m_SubjFillType,l=this.m_ClipFillType):(A=this.m_ClipFillType,l=this.m_SubjFillType),i.PolyTyp===t.PolyType.ptSubject?(a=this.m_SubjFillType,c=this.m_ClipFillType):(a=this.m_ClipFillType,c=this.m_SubjFillType),A){case t.PolyFillType.pftPositive:p=e.WindCnt;break;case t.PolyFillType.pftNegative:p=-e.WindCnt;break;default:p=Math.abs(e.WindCnt)}switch(a){case t.PolyFillType.pftPositive:h=i.WindCnt;break;case t.PolyFillType.pftNegative:h=-i.WindCnt;break;default:h=Math.abs(i.WindCnt)}if(r&&o)0!==p&&1!==p||0!==h&&1!==h||e.PolyTyp!==i.PolyTyp&&this.m_ClipType!==t.ClipType.ctXor?this.AddLocalMaxPoly(e,i,n):(this.AddOutPt(e,n),this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(r)0!==h&&1!==h||(this.AddOutPt(e,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(o)0!==p&&1!==p||(this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(!(0!==p&&1!==p||0!==h&&1!==h)){var g,u;switch(l){case t.PolyFillType.pftPositive:g=e.WindCnt2;break;case t.PolyFillType.pftNegative:g=-e.WindCnt2;break;default:g=Math.abs(e.WindCnt2)}switch(c){case t.PolyFillType.pftPositive:u=i.WindCnt2;break;case t.PolyFillType.pftNegative:u=-i.WindCnt2;break;default:u=Math.abs(i.WindCnt2)}if(e.PolyTyp!==i.PolyTyp)this.AddLocalMinPoly(e,i,n);else if(1===p&&1===h)switch(this.m_ClipType){case t.ClipType.ctIntersection:g>0&&u>0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctUnion:g<=0&&u<=0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctDifference:(e.PolyTyp===t.PolyType.ptClip&&g>0&&u>0||e.PolyTyp===t.PolyType.ptSubject&&g<=0&&u<=0)&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctXor:this.AddLocalMinPoly(e,i,n)}else t.Clipper.SwapSides(e,i)}}else{if(0===e.WindDelta&&0===i.WindDelta)return;e.PolyTyp===i.PolyTyp&&e.WindDelta!==i.WindDelta&&this.m_ClipType===t.ClipType.ctUnion?0===e.WindDelta?o&&(this.AddOutPt(e,n),r&&(e.OutIdx=-1)):r&&(this.AddOutPt(i,n),o&&(i.OutIdx=-1)):e.PolyTyp!==i.PolyTyp&&(0!==e.WindDelta||1!==Math.abs(i.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==i.WindCnt2?0!==i.WindDelta||1!==Math.abs(e.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==e.WindCnt2||(this.AddOutPt(i,n),o&&(i.OutIdx=-1)):(this.AddOutPt(e,n),r&&(e.OutIdx=-1)))}},t.Clipper.prototype.DeleteFromSEL=function(e){var t=e.PrevInSEL,i=e.NextInSEL;null===t&&null===i&&e!==this.m_SortedEdges||(null!==t?t.NextInSEL=i:this.m_SortedEdges=i,null!==i&&(i.PrevInSEL=t),e.NextInSEL=null,e.PrevInSEL=null)},t.Clipper.prototype.ProcessHorizontals=function(){for(var e={};this.PopEdgeFromSEL(e);)this.ProcessHorizontal(e.v)},t.Clipper.prototype.GetHorzDirection=function(e,i){e.Bot.X<e.Top.X?(i.Left=e.Bot.X,i.Right=e.Top.X,i.Dir=t.Direction.dLeftToRight):(i.Left=e.Top.X,i.Right=e.Bot.X,i.Dir=t.Direction.dRightToLeft)},t.Clipper.prototype.ProcessHorizontal=function(e){var i={Dir:null,Left:null,Right:null};this.GetHorzDirection(e,i);for(var n=i.Dir,r=i.Left,o=i.Right,s=0===e.WindDelta,A=e,a=null;null!==A.NextInLML&&t.ClipperBase.IsHorizontal(A.NextInLML);)A=A.NextInLML;null===A.NextInLML&&(a=this.GetMaximaPair(A));var l=this.m_Maxima;if(null!==l)if(n===t.Direction.dLeftToRight){for(;null!==l&&l.X<=e.Bot.X;)l=l.Next;null!==l&&l.X>=A.Top.X&&(l=null)}else{for(;null!==l.Next&&l.Next.X<e.Bot.X;)l=l.Next;l.X<=A.Top.X&&(l=null)}for(var c=null;;){for(var p=e===A,h=this.GetNextInAEL(e,n);null!==h;){if(null!==l)if(n===t.Direction.dLeftToRight)for(;null!==l&&l.X<h.Curr.X;)e.OutIdx>=0&&!s&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Next;else for(;null!==l&&l.X>h.Curr.X;)e.OutIdx>=0&&!s&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Prev;if(n===t.Direction.dLeftToRight&&h.Curr.X>o||n===t.Direction.dRightToLeft&&h.Curr.X<r)break;if(h.Curr.X===e.Top.X&&null!==e.NextInLML&&h.Dx<e.NextInLML.Dx)break;if(e.OutIdx>=0&&!s){t.use_xyz&&(n===t.Direction.dLeftToRight?this.SetZ(h.Curr,e,h):this.SetZ(h.Curr,h,e)),c=this.AddOutPt(e,h.Curr);for(var g=this.m_SortedEdges;null!==g;){if(g.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,g.Bot.X,g.Top.X)){var u=this.GetLastOutPt(g);this.AddJoin(u,c,g.Top)}g=g.NextInSEL}this.AddGhostJoin(c,e.Bot)}if(h===a&&p)return e.OutIdx>=0&&this.AddLocalMaxPoly(e,a,e.Top),this.DeleteFromAEL(e),void this.DeleteFromAEL(a);if(n===t.Direction.dLeftToRight){var d=new t.IntPoint2(h.Curr.X,e.Curr.Y);this.IntersectEdges(e,h,d)}else d=new t.IntPoint2(h.Curr.X,e.Curr.Y),this.IntersectEdges(h,e,d);var f=this.GetNextInAEL(h,n);this.SwapPositionsInAEL(e,h),h=f}if(null===e.NextInLML||!t.ClipperBase.IsHorizontal(e.NextInLML))break;(e=this.UpdateEdgeIntoAEL(e)).OutIdx>=0&&this.AddOutPt(e,e.Bot),i={Dir:n,Left:r,Right:o},this.GetHorzDirection(e,i),n=i.Dir,r=i.Left,o=i.Right}if(e.OutIdx>=0&&null===c){for(c=this.GetLastOutPt(e),g=this.m_SortedEdges;null!==g;)g.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,g.Bot.X,g.Top.X)&&(u=this.GetLastOutPt(g),this.AddJoin(u,c,g.Top)),g=g.NextInSEL;this.AddGhostJoin(c,e.Top)}if(null!==e.NextInLML)if(e.OutIdx>=0){if(c=this.AddOutPt(e,e.Top),0===(e=this.UpdateEdgeIntoAEL(e)).WindDelta)return;var I=e.PrevInAEL;f=e.NextInAEL,null!==I&&I.Curr.X===e.Bot.X&&I.Curr.Y===e.Bot.Y&&0===I.WindDelta&&I.OutIdx>=0&&I.Curr.Y>I.Top.Y&&t.ClipperBase.SlopesEqual3(e,I,this.m_UseFullRange)?(u=this.AddOutPt(I,e.Bot),this.AddJoin(c,u,e.Top)):null!==f&&f.Curr.X===e.Bot.X&&f.Curr.Y===e.Bot.Y&&0!==f.WindDelta&&f.OutIdx>=0&&f.Curr.Y>f.Top.Y&&t.ClipperBase.SlopesEqual3(e,f,this.m_UseFullRange)&&(u=this.AddOutPt(f,e.Bot),this.AddJoin(c,u,e.Top))}else e=this.UpdateEdgeIntoAEL(e);else e.OutIdx>=0&&this.AddOutPt(e,e.Top),this.DeleteFromAEL(e)},t.Clipper.prototype.GetNextInAEL=function(e,i){return i===t.Direction.dLeftToRight?e.NextInAEL:e.PrevInAEL},t.Clipper.prototype.IsMinima=function(e){return null!==e&&e.Prev.NextInLML!==e&&e.Next.NextInLML!==e},t.Clipper.prototype.IsMaxima=function(e,t){return null!==e&&e.Top.Y===t&&null===e.NextInLML},t.Clipper.prototype.IsIntermediate=function(e,t){return e.Top.Y===t&&null!==e.NextInLML},t.Clipper.prototype.GetMaximaPair=function(e){return t.IntPoint.op_Equality(e.Next.Top,e.Top)&&null===e.Next.NextInLML?e.Next:t.IntPoint.op_Equality(e.Prev.Top,e.Top)&&null===e.Prev.NextInLML?e.Prev:null},t.Clipper.prototype.GetMaximaPairEx=function(e){var i=this.GetMaximaPair(e);return null===i||i.OutIdx===t.ClipperBase.Skip||i.NextInAEL===i.PrevInAEL&&!t.ClipperBase.IsHorizontal(i)?null:i},t.Clipper.prototype.ProcessIntersections=function(e){if(null===this.m_ActiveEdges)return!0;try{if(this.BuildIntersectList(e),0===this.m_IntersectList.length)return!0;if(1!==this.m_IntersectList.length&&!this.FixupIntersectionOrder())return!1;this.ProcessIntersectList()}catch(e){this.m_SortedEdges=null,this.m_IntersectList.length=0,t.Error("ProcessIntersections error")}return this.m_SortedEdges=null,!0},t.Clipper.prototype.BuildIntersectList=function(e){if(null!==this.m_ActiveEdges){var i=this.m_ActiveEdges;for(this.m_SortedEdges=i;null!==i;)i.PrevInSEL=i.PrevInAEL,i.NextInSEL=i.NextInAEL,i.Curr.X=t.Clipper.TopX(i,e),i=i.NextInAEL;for(var n=!0;n&&null!==this.m_SortedEdges;){for(n=!1,i=this.m_SortedEdges;null!==i.NextInSEL;){var r=i.NextInSEL,o=new t.IntPoint0;if(i.Curr.X>r.Curr.X){this.IntersectPoint(i,r,o),o.Y<e&&(o=new t.IntPoint2(t.Clipper.TopX(i,e),e));var s=new t.IntersectNode;s.Edge1=i,s.Edge2=r,s.Pt.X=o.X,s.Pt.Y=o.Y,t.use_xyz&&(s.Pt.Z=o.Z),this.m_IntersectList.push(s),this.SwapPositionsInSEL(i,r),n=!0}else i=r}if(null===i.PrevInSEL)break;i.PrevInSEL.NextInSEL=null}this.m_SortedEdges=null}},t.Clipper.prototype.EdgesAdjacent=function(e){return e.Edge1.NextInSEL===e.Edge2||e.Edge1.PrevInSEL===e.Edge2},t.Clipper.IntersectNodeSort=function(e,t){return t.Pt.Y-e.Pt.Y},t.Clipper.prototype.FixupIntersectionOrder=function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer),this.CopyAELToSEL();for(var e=this.m_IntersectList.length,t=0;t<e;t++){if(!this.EdgesAdjacent(this.m_IntersectList[t])){for(var i=t+1;i<e&&!this.EdgesAdjacent(this.m_IntersectList[i]);)i++;if(i===e)return!1;var n=this.m_IntersectList[t];this.m_IntersectList[t]=this.m_IntersectList[i],this.m_IntersectList[i]=n}this.SwapPositionsInSEL(this.m_IntersectList[t].Edge1,this.m_IntersectList[t].Edge2)}return!0},t.Clipper.prototype.ProcessIntersectList=function(){for(var e=0,t=this.m_IntersectList.length;e<t;e++){var i=this.m_IntersectList[e];this.IntersectEdges(i.Edge1,i.Edge2,i.Pt),this.SwapPositionsInAEL(i.Edge1,i.Edge2)}this.m_IntersectList.length=0},o.msie?t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.round(e)}:o.chromium?t.Clipper.Round=function(e){return e<0?-Math.round(Math.abs(e)):Math.round(e)}:o.safari?t.Clipper.Round=function(e){return e<0?(e-=.5)<-2147483648?Math.ceil(e):0|e:(e+=.5)>2147483647?Math.floor(e):0|e}:t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.floor(e+.5)},t.Clipper.TopX=function(e,i){return i===e.Top.Y?e.Top.X:e.Bot.X+t.Clipper.Round(e.Dx*(i-e.Bot.Y))},t.Clipper.prototype.IntersectPoint=function(e,i,n){var r,o;if(n.X=0,n.Y=0,e.Dx===i.Dx)return n.Y=e.Curr.Y,void(n.X=t.Clipper.TopX(e,n.Y));if(0===e.Delta.X)n.X=e.Bot.X,t.ClipperBase.IsHorizontal(i)?n.Y=i.Bot.Y:(o=i.Bot.Y-i.Bot.X/i.Dx,n.Y=t.Clipper.Round(n.X/i.Dx+o));else if(0===i.Delta.X)n.X=i.Bot.X,t.ClipperBase.IsHorizontal(e)?n.Y=e.Bot.Y:(r=e.Bot.Y-e.Bot.X/e.Dx,n.Y=t.Clipper.Round(n.X/e.Dx+r));else{r=e.Bot.X-e.Bot.Y*e.Dx;var s=((o=i.Bot.X-i.Bot.Y*i.Dx)-r)/(e.Dx-i.Dx);n.Y=t.Clipper.Round(s),Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.Round(e.Dx*s+r):n.X=t.Clipper.Round(i.Dx*s+o)}if(n.Y<e.Top.Y||n.Y<i.Top.Y){if(e.Top.Y>i.Top.Y)return n.Y=e.Top.Y,n.X=t.Clipper.TopX(i,e.Top.Y),n.X<e.Top.X;n.Y=i.Top.Y,Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.TopX(e,n.Y):n.X=t.Clipper.TopX(i,n.Y)}n.Y>e.Curr.Y&&(n.Y=e.Curr.Y,Math.abs(e.Dx)>Math.abs(i.Dx)?n.X=t.Clipper.TopX(i,n.Y):n.X=t.Clipper.TopX(e,n.Y))},t.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(e){for(var i=this.m_ActiveEdges;null!==i;){var n=this.IsMaxima(i,e);if(n){var r=this.GetMaximaPairEx(i);n=null===r||!t.ClipperBase.IsHorizontal(r)}if(n){this.StrictlySimple&&this.InsertMaxima(i.Top.X);var o=i.PrevInAEL;this.DoMaxima(i),i=null===o?this.m_ActiveEdges:o.NextInAEL}else{if(this.IsIntermediate(i,e)&&t.ClipperBase.IsHorizontal(i.NextInLML)?((i=this.UpdateEdgeIntoAEL(i)).OutIdx>=0&&this.AddOutPt(i,i.Bot),this.AddEdgeToSEL(i)):(i.Curr.X=t.Clipper.TopX(i,e),i.Curr.Y=e),t.use_xyz&&(i.Top.Y===e?i.Curr.Z=i.Top.Z:i.Bot.Y===e?i.Curr.Z=i.Bot.Z:i.Curr.Z=0),this.StrictlySimple&&(o=i.PrevInAEL,i.OutIdx>=0&&0!==i.WindDelta&&null!==o&&o.OutIdx>=0&&o.Curr.X===i.Curr.X&&0!==o.WindDelta)){var s=new t.IntPoint1(i.Curr);t.use_xyz&&this.SetZ(s,o,i);var A=this.AddOutPt(o,s),a=this.AddOutPt(i,s);this.AddJoin(A,a,s)}i=i.NextInAEL}}for(this.ProcessHorizontals(),this.m_Maxima=null,i=this.m_ActiveEdges;null!==i;){if(this.IsIntermediate(i,e)){A=null,i.OutIdx>=0&&(A=this.AddOutPt(i,i.Top)),o=(i=this.UpdateEdgeIntoAEL(i)).PrevInAEL;var l=i.NextInAEL;null!==o&&o.Curr.X===i.Bot.X&&o.Curr.Y===i.Bot.Y&&null!==A&&o.OutIdx>=0&&o.Curr.Y===o.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,o.Curr,o.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==o.WindDelta?(a=this.AddOutPt(ePrev2,i.Bot),this.AddJoin(A,a,i.Top)):null!==l&&l.Curr.X===i.Bot.X&&l.Curr.Y===i.Bot.Y&&null!==A&&l.OutIdx>=0&&l.Curr.Y===l.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,l.Curr,l.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==l.WindDelta&&(a=this.AddOutPt(l,i.Bot),this.AddJoin(A,a,i.Top))}i=i.NextInAEL}},t.Clipper.prototype.DoMaxima=function(e){var i=this.GetMaximaPairEx(e);if(null===i)return e.OutIdx>=0&&this.AddOutPt(e,e.Top),void this.DeleteFromAEL(e);for(var n=e.NextInAEL;null!==n&&n!==i;)this.IntersectEdges(e,n,e.Top),this.SwapPositionsInAEL(e,n),n=e.NextInAEL;-1===e.OutIdx&&-1===i.OutIdx?(this.DeleteFromAEL(e),this.DeleteFromAEL(i)):e.OutIdx>=0&&i.OutIdx>=0?(e.OutIdx>=0&&this.AddLocalMaxPoly(e,i,e.Top),this.DeleteFromAEL(e),this.DeleteFromAEL(i)):t.use_lines&&0===e.WindDelta?(e.OutIdx>=0&&(this.AddOutPt(e,e.Top),e.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(e),i.OutIdx>=0&&(this.AddOutPt(i,e.Top),i.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(i)):t.Error("DoMaxima error")},t.Clipper.ReversePaths=function(e){for(var t=0,i=e.length;t<i;t++)e[t].reverse()},t.Clipper.Orientation=function(e){return t.Clipper.Area(e)>=0},t.Clipper.prototype.PointCount=function(e){if(null===e)return 0;var t=0,i=e;do{t++,i=i.Next}while(i!==e);return t},t.Clipper.prototype.BuildResult=function(e){t.Clear(e);for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var r=this.m_PolyOuts[i];if(null!==r.Pts){var o=r.Pts.Prev,s=this.PointCount(o);if(!(s<2)){for(var A=new Array(s),a=0;a<s;a++)A[a]=o.Pt,o=o.Prev;e.push(A)}}}},t.Clipper.prototype.BuildResult2=function(e){e.Clear();for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var r=this.m_PolyOuts[i],o=this.PointCount(r.Pts);if(!(r.IsOpen&&o<2||!r.IsOpen&&o<3)){this.FixHoleLinkage(r);var s=new t.PolyNode;e.m_AllPolys.push(s),r.PolyNode=s,s.m_polygon.length=o;for(var A=r.Pts.Prev,a=0;a<o;a++)s.m_polygon[a]=A.Pt,A=A.Prev}}for(i=0,n=this.m_PolyOuts.length;i<n;i++)null!==(r=this.m_PolyOuts[i]).PolyNode&&(r.IsOpen?(r.PolyNode.IsOpen=!0,e.AddChild(r.PolyNode)):null!==r.FirstLeft&&null!==r.FirstLeft.PolyNode?r.FirstLeft.PolyNode.AddChild(r.PolyNode):e.AddChild(r.PolyNode))},t.Clipper.prototype.FixupOutPolyline=function(e){for(var i=e.Pts,n=i.Prev;i!==n;)if(i=i.Next,t.IntPoint.op_Equality(i.Pt,i.Prev.Pt)){i===n&&(n=i.Prev);var r=i.Prev;r.Next=i.Next,i.Next.Prev=r,i=r}i===i.Prev&&(e.Pts=null)},t.Clipper.prototype.FixupOutPolygon=function(e){var i=null;e.BottomPt=null;for(var n=e.Pts,r=this.PreserveCollinear||this.StrictlySimple;;){if(n.Prev===n||n.Prev===n.Next)return void(e.Pts=null);if(t.IntPoint.op_Equality(n.Pt,n.Next.Pt)||t.IntPoint.op_Equality(n.Pt,n.Prev.Pt)||t.ClipperBase.SlopesEqual4(n.Prev.Pt,n.Pt,n.Next.Pt,this.m_UseFullRange)&&(!r||!this.Pt2IsBetweenPt1AndPt3(n.Prev.Pt,n.Pt,n.Next.Pt)))i=null,n.Prev.Next=n.Next,n.Next.Prev=n.Prev,n=n.Prev;else{if(n===i)break;null===i&&(i=n),n=n.Next}}e.Pts=n},t.Clipper.prototype.DupOutPt=function(e,i){var n=new t.OutPt;return n.Pt.X=e.Pt.X,n.Pt.Y=e.Pt.Y,t.use_xyz&&(n.Pt.Z=e.Pt.Z),n.Idx=e.Idx,i?(n.Next=e.Next,n.Prev=e,e.Next.Prev=n,e.Next=n):(n.Prev=e.Prev,n.Next=e,e.Prev.Next=n,e.Prev=n),n},t.Clipper.prototype.GetOverlap=function(e,t,i,n,r){return e<t?i<n?(r.Left=Math.max(e,i),r.Right=Math.min(t,n)):(r.Left=Math.max(e,n),r.Right=Math.min(t,i)):i<n?(r.Left=Math.max(t,i),r.Right=Math.min(e,n)):(r.Left=Math.max(t,n),r.Right=Math.min(e,i)),r.Left<r.Right},t.Clipper.prototype.JoinHorz=function(e,i,n,r,o,s){var A=e.Pt.X>i.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight,a=n.Pt.X>r.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight;if(A===a)return!1;if(A===t.Direction.dLeftToRight){for(;e.Next.Pt.X<=o.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y===o.Y;)e=e.Next;s&&e.Pt.X!==o.X&&(e=e.Next),i=this.DupOutPt(e,!s),t.IntPoint.op_Inequality(i.Pt,o)&&((e=i).Pt.X=o.X,e.Pt.Y=o.Y,t.use_xyz&&(e.Pt.Z=o.Z),i=this.DupOutPt(e,!s))}else{for(;e.Next.Pt.X>=o.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y===o.Y;)e=e.Next;s||e.Pt.X===o.X||(e=e.Next),i=this.DupOutPt(e,s),t.IntPoint.op_Inequality(i.Pt,o)&&((e=i).Pt.X=o.X,e.Pt.Y=o.Y,t.use_xyz&&(e.Pt.Z=o.Z),i=this.DupOutPt(e,s))}if(a===t.Direction.dLeftToRight){for(;n.Next.Pt.X<=o.X&&n.Next.Pt.X>=n.Pt.X&&n.Next.Pt.Y===o.Y;)n=n.Next;s&&n.Pt.X!==o.X&&(n=n.Next),r=this.DupOutPt(n,!s),t.IntPoint.op_Inequality(r.Pt,o)&&((n=r).Pt.X=o.X,n.Pt.Y=o.Y,t.use_xyz&&(n.Pt.Z=o.Z),r=this.DupOutPt(n,!s))}else{for(;n.Next.Pt.X>=o.X&&n.Next.Pt.X<=n.Pt.X&&n.Next.Pt.Y===o.Y;)n=n.Next;s||n.Pt.X===o.X||(n=n.Next),r=this.DupOutPt(n,s),t.IntPoint.op_Inequality(r.Pt,o)&&((n=r).Pt.X=o.X,n.Pt.Y=o.Y,t.use_xyz&&(n.Pt.Z=o.Z),r=this.DupOutPt(n,s))}return A===t.Direction.dLeftToRight===s?(e.Prev=n,n.Next=e,i.Next=r,r.Prev=i):(e.Next=n,n.Prev=e,i.Prev=r,r.Next=i),!0},t.Clipper.prototype.JoinPoints=function(e,i,n){var r=e.OutPt1,o=new t.OutPt,s=e.OutPt2,A=new t.OutPt,a=e.OutPt1.Pt.Y===e.OffPt.Y;if(a&&t.IntPoint.op_Equality(e.OffPt,e.OutPt1.Pt)&&t.IntPoint.op_Equality(e.OffPt,e.OutPt2.Pt)){if(i!==n)return!1;for(o=e.OutPt1.Next;o!==r&&t.IntPoint.op_Equality(o.Pt,e.OffPt);)o=o.Next;var l=o.Pt.Y>e.OffPt.Y;for(A=e.OutPt2.Next;A!==s&&t.IntPoint.op_Equality(A.Pt,e.OffPt);)A=A.Next;return l!==A.Pt.Y>e.OffPt.Y&&(l?(o=this.DupOutPt(r,!1),A=this.DupOutPt(s,!0),r.Prev=s,s.Next=r,o.Next=A,A.Prev=o,e.OutPt1=r,e.OutPt2=o,!0):(o=this.DupOutPt(r,!0),A=this.DupOutPt(s,!1),r.Next=s,s.Prev=r,o.Prev=A,A.Next=o,e.OutPt1=r,e.OutPt2=o,!0))}if(a){for(o=r;r.Prev.Pt.Y===r.Pt.Y&&r.Prev!==o&&r.Prev!==s;)r=r.Prev;for(;o.Next.Pt.Y===o.Pt.Y&&o.Next!==r&&o.Next!==s;)o=o.Next;if(o.Next===r||o.Next===s)return!1;for(A=s;s.Prev.Pt.Y===s.Pt.Y&&s.Prev!==A&&s.Prev!==o;)s=s.Prev;for(;A.Next.Pt.Y===A.Pt.Y&&A.Next!==s&&A.Next!==r;)A=A.Next;if(A.Next===s||A.Next===r)return!1;var c={Left:null,Right:null};if(!this.GetOverlap(r.Pt.X,o.Pt.X,s.Pt.X,A.Pt.X,c))return!1;var p,h=c.Left,g=c.Right,u=new t.IntPoint0;return r.Pt.X>=h&&r.Pt.X<=g?(u.X=r.Pt.X,u.Y=r.Pt.Y,t.use_xyz&&(u.Z=r.Pt.Z),p=r.Pt.X>o.Pt.X):s.Pt.X>=h&&s.Pt.X<=g?(u.X=s.Pt.X,u.Y=s.Pt.Y,t.use_xyz&&(u.Z=s.Pt.Z),p=s.Pt.X>A.Pt.X):o.Pt.X>=h&&o.Pt.X<=g?(u.X=o.Pt.X,u.Y=o.Pt.Y,t.use_xyz&&(u.Z=o.Pt.Z),p=o.Pt.X>r.Pt.X):(u.X=A.Pt.X,u.Y=A.Pt.Y,t.use_xyz&&(u.Z=A.Pt.Z),p=A.Pt.X>s.Pt.X),e.OutPt1=r,e.OutPt2=s,this.JoinHorz(r,o,s,A,u,p)}for(o=r.Next;t.IntPoint.op_Equality(o.Pt,r.Pt)&&o!==r;)o=o.Next;var d=o.Pt.Y>r.Pt.Y||!t.ClipperBase.SlopesEqual4(r.Pt,o.Pt,e.OffPt,this.m_UseFullRange);if(d){for(o=r.Prev;t.IntPoint.op_Equality(o.Pt,r.Pt)&&o!==r;)o=o.Prev;if(o.Pt.Y>r.Pt.Y||!t.ClipperBase.SlopesEqual4(r.Pt,o.Pt,e.OffPt,this.m_UseFullRange))return!1}for(A=s.Next;t.IntPoint.op_Equality(A.Pt,s.Pt)&&A!==s;)A=A.Next;var f=A.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,A.Pt,e.OffPt,this.m_UseFullRange);if(f){for(A=s.Prev;t.IntPoint.op_Equality(A.Pt,s.Pt)&&A!==s;)A=A.Prev;if(A.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,A.Pt,e.OffPt,this.m_UseFullRange))return!1}return!(o===r||A===s||o===A||i===n&&d===f||(d?(o=this.DupOutPt(r,!1),A=this.DupOutPt(s,!0),r.Prev=s,s.Next=r,o.Next=A,A.Prev=o,e.OutPt1=r,e.OutPt2=o,0):(o=this.DupOutPt(r,!0),A=this.DupOutPt(s,!1),r.Next=s,s.Prev=r,o.Prev=A,A.Next=o,e.OutPt1=r,e.OutPt2=o,0)))},t.Clipper.GetBounds=function(e){for(var i=0,n=e.length;i<n&&0===e[i].length;)i++;if(i===n)return new t.IntRect(0,0,0,0);var r=new t.IntRect;for(r.left=e[i][0].X,r.right=r.left,r.top=e[i][0].Y,r.bottom=r.top;i<n;i++)for(var o=0,s=e[i].length;o<s;o++)e[i][o].X<r.left?r.left=e[i][o].X:e[i][o].X>r.right&&(r.right=e[i][o].X),e[i][o].Y<r.top?r.top=e[i][o].Y:e[i][o].Y>r.bottom&&(r.bottom=e[i][o].Y);return r},t.Clipper.prototype.GetBounds2=function(e){var i=e,n=new t.IntRect;for(n.left=e.Pt.X,n.right=e.Pt.X,n.top=e.Pt.Y,n.bottom=e.Pt.Y,e=e.Next;e!==i;)e.Pt.X<n.left&&(n.left=e.Pt.X),e.Pt.X>n.right&&(n.right=e.Pt.X),e.Pt.Y<n.top&&(n.top=e.Pt.Y),e.Pt.Y>n.bottom&&(n.bottom=e.Pt.Y),e=e.Next;return n},t.Clipper.PointInPolygon=function(e,t){var i=0,n=t.length;if(n<3)return 0;for(var r=t[0],o=1;o<=n;++o){var s=o===n?t[0]:t[o];if(s.Y===e.Y&&(s.X===e.X||r.Y===e.Y&&s.X>e.X==r.X<e.X))return-1;if(r.Y<e.Y!=s.Y<e.Y)if(r.X>=e.X)if(s.X>e.X)i=1-i;else{if(0==(A=(r.X-e.X)*(s.Y-e.Y)-(s.X-e.X)*(r.Y-e.Y)))return-1;A>0==s.Y>r.Y&&(i=1-i)}else if(s.X>e.X){var A;if(0==(A=(r.X-e.X)*(s.Y-e.Y)-(s.X-e.X)*(r.Y-e.Y)))return-1;A>0==s.Y>r.Y&&(i=1-i)}r=s}return i},t.Clipper.prototype.PointInPolygon=function(e,t){var i=0,n=t,r=e.X,o=e.Y,s=t.Pt.X,A=t.Pt.Y;do{var a=(t=t.Next).Pt.X,l=t.Pt.Y;if(l===o&&(a===r||A===o&&a>r==s<r))return-1;if(A<o!=l<o)if(s>=r)if(a>r)i=1-i;else{if(0==(c=(s-r)*(l-o)-(a-r)*(A-o)))return-1;c>0==l>A&&(i=1-i)}else if(a>r){var c;if(0==(c=(s-r)*(l-o)-(a-r)*(A-o)))return-1;c>0==l>A&&(i=1-i)}s=a,A=l}while(n!==t);return i},t.Clipper.prototype.Poly2ContainsPoly1=function(e,t){var i=e;do{var n=this.PointInPolygon(i.Pt,t);if(n>=0)return n>0;i=i.Next}while(i!==e);return!0},t.Clipper.prototype.FixupFirstLefts1=function(e,i){for(var n,r,o=0,s=this.m_PolyOuts.length;o<s;o++)n=this.m_PolyOuts[o],r=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&r===e&&this.Poly2ContainsPoly1(n.Pts,i.Pts)&&(n.FirstLeft=i)},t.Clipper.prototype.FixupFirstLefts2=function(e,i){for(var n,r,o=i.FirstLeft,s=0,A=this.m_PolyOuts.length;s<A;s++)null!==(n=this.m_PolyOuts[s]).Pts&&n!==i&&n!==e&&((r=t.Clipper.ParseFirstLeft(n.FirstLeft))!==o&&r!==e&&r!==i||(this.Poly2ContainsPoly1(n.Pts,e.Pts)?n.FirstLeft=e:this.Poly2ContainsPoly1(n.Pts,i.Pts)?n.FirstLeft=i:n.FirstLeft!==e&&n.FirstLeft!==i||(n.FirstLeft=o)))},t.Clipper.prototype.FixupFirstLefts3=function(e,i){for(var n,r,o=0,s=this.m_PolyOuts.length;o<s;o++)n=this.m_PolyOuts[o],r=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&r===e&&(n.FirstLeft=i)},t.Clipper.ParseFirstLeft=function(e){for(;null!==e&&null===e.Pts;)e=e.FirstLeft;return e},t.Clipper.prototype.JoinCommonEdges=function(){for(var e=0,t=this.m_Joins.length;e<t;e++){var i,n=this.m_Joins[e],r=this.GetOutRec(n.OutPt1.Idx),o=this.GetOutRec(n.OutPt2.Idx);null!==r.Pts&&null!==o.Pts&&(r.IsOpen||o.IsOpen||(i=r===o?r:this.OutRec1RightOfOutRec2(r,o)?o:this.OutRec1RightOfOutRec2(o,r)?r:this.GetLowermostRec(r,o),this.JoinPoints(n,r,o)&&(r===o?(r.Pts=n.OutPt1,r.BottomPt=null,(o=this.CreateOutRec()).Pts=n.OutPt2,this.UpdateOutPtIdxs(o),this.Poly2ContainsPoly1(o.Pts,r.Pts)?(o.IsHole=!r.IsHole,o.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts2(o,r),(o.IsHole^this.ReverseSolution)==this.Area$1(o)>0&&this.ReversePolyPtLinks(o.Pts)):this.Poly2ContainsPoly1(r.Pts,o.Pts)?(o.IsHole=r.IsHole,r.IsHole=!o.IsHole,o.FirstLeft=r.FirstLeft,r.FirstLeft=o,this.m_UsingPolyTree&&this.FixupFirstLefts2(r,o),(r.IsHole^this.ReverseSolution)==this.Area$1(r)>0&&this.ReversePolyPtLinks(r.Pts)):(o.IsHole=r.IsHole,o.FirstLeft=r.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(r,o))):(o.Pts=null,o.BottomPt=null,o.Idx=r.Idx,r.IsHole=i.IsHole,i===o&&(r.FirstLeft=o.FirstLeft),o.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts3(o,r)))))}},t.Clipper.prototype.UpdateOutPtIdxs=function(e){var t=e.Pts;do{t.Idx=e.Idx,t=t.Prev}while(t!==e.Pts)},t.Clipper.prototype.DoSimplePolygons=function(){for(var e=0;e<this.m_PolyOuts.length;){var i=this.m_PolyOuts[e++],n=i.Pts;if(null!==n&&!i.IsOpen)do{for(var r=n.Next;r!==i.Pts;){if(t.IntPoint.op_Equality(n.Pt,r.Pt)&&r.Next!==n&&r.Prev!==n){var o=n.Prev,s=r.Prev;n.Prev=s,s.Next=n,r.Prev=o,o.Next=r,i.Pts=n;var A=this.CreateOutRec();A.Pts=r,this.UpdateOutPtIdxs(A),this.Poly2ContainsPoly1(A.Pts,i.Pts)?(A.IsHole=!i.IsHole,A.FirstLeft=i,this.m_UsingPolyTree&&this.FixupFirstLefts2(A,i)):this.Poly2ContainsPoly1(i.Pts,A.Pts)?(A.IsHole=i.IsHole,i.IsHole=!A.IsHole,A.FirstLeft=i.FirstLeft,i.FirstLeft=A,this.m_UsingPolyTree&&this.FixupFirstLefts2(i,A)):(A.IsHole=i.IsHole,A.FirstLeft=i.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(i,A)),r=n}r=r.Next}n=n.Next}while(n!==i.Pts)}},t.Clipper.Area=function(e){if(!Array.isArray(e))return 0;var t=e.length;if(t<3)return 0;for(var i=0,n=0,r=t-1;n<t;++n)i+=(e[r].X+e[n].X)*(e[r].Y-e[n].Y),r=n;return.5*-i},t.Clipper.prototype.Area=function(e){var t=e;if(null===e)return 0;var i=0;do{i+=(e.Prev.Pt.X+e.Pt.X)*(e.Prev.Pt.Y-e.Pt.Y),e=e.Next}while(e!==t);return.5*i},t.Clipper.prototype.Area$1=function(e){return this.Area(e.Pts)},t.Clipper.SimplifyPolygon=function(e,i){var n=new Array,r=new t.Clipper(0);return r.StrictlySimple=!0,r.AddPath(e,t.PolyType.ptSubject,!0),r.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.SimplifyPolygons=function(e,i){void 0===i&&(i=t.PolyFillType.pftEvenOdd);var n=new Array,r=new t.Clipper(0);return r.StrictlySimple=!0,r.AddPaths(e,t.PolyType.ptSubject,!0),r.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.DistanceSqrd=function(e,t){var i=e.X-t.X,n=e.Y-t.Y;return i*i+n*n},t.Clipper.DistanceFromLineSqrd=function(e,t,i){var n=t.Y-i.Y,r=i.X-t.X,o=n*t.X+r*t.Y;return(o=n*e.X+r*e.Y-o)*o/(n*n+r*r)},t.Clipper.SlopesNearCollinear=function(e,i,n,r){return Math.abs(e.X-i.X)>Math.abs(e.Y-i.Y)?e.X>i.X==e.X<n.X?t.Clipper.DistanceFromLineSqrd(e,i,n)<r:i.X>e.X==i.X<n.X?t.Clipper.DistanceFromLineSqrd(i,e,n)<r:t.Clipper.DistanceFromLineSqrd(n,e,i)<r:e.Y>i.Y==e.Y<n.Y?t.Clipper.DistanceFromLineSqrd(e,i,n)<r:i.Y>e.Y==i.Y<n.Y?t.Clipper.DistanceFromLineSqrd(i,e,n)<r:t.Clipper.DistanceFromLineSqrd(n,e,i)<r},t.Clipper.PointsAreClose=function(e,t,i){var n=e.X-t.X,r=e.Y-t.Y;return n*n+r*r<=i},t.Clipper.ExcludeOp=function(e){var t=e.Prev;return t.Next=e.Next,e.Next.Prev=t,t.Idx=0,t},t.Clipper.CleanPolygon=function(e,i){void 0===i&&(i=1.415);var n=e.length;if(0===n)return new Array;for(var r=new Array(n),o=0;o<n;++o)r[o]=new t.OutPt;for(o=0;o<n;++o)r[o].Pt=e[o],r[o].Next=r[(o+1)%n],r[o].Next.Prev=r[o],r[o].Idx=0;for(var s=i*i,A=r[0];0===A.Idx&&A.Next!==A.Prev;)t.Clipper.PointsAreClose(A.Pt,A.Prev.Pt,s)?(A=t.Clipper.ExcludeOp(A),n--):t.Clipper.PointsAreClose(A.Prev.Pt,A.Next.Pt,s)?(t.Clipper.ExcludeOp(A.Next),A=t.Clipper.ExcludeOp(A),n-=2):t.Clipper.SlopesNearCollinear(A.Prev.Pt,A.Pt,A.Next.Pt,s)?(A=t.Clipper.ExcludeOp(A),n--):(A.Idx=1,A=A.Next);n<3&&(n=0);var a=new Array(n);for(o=0;o<n;++o)a[o]=new t.IntPoint1(A.Pt),A=A.Next;return r=null,a},t.Clipper.CleanPolygons=function(e,i){for(var n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t.Clipper.CleanPolygon(e[r],i);return n},t.Clipper.Minkowski=function(e,i,n,r){var o=r?1:0,s=e.length,A=i.length,a=new Array;if(n)for(var l=0;l<A;l++){for(var c=new Array(s),p=0,h=e.length,g=e[p];p<h;g=e[++p])c[p]=new t.IntPoint2(i[l].X+g.X,i[l].Y+g.Y);a.push(c)}else for(l=0;l<A;l++){for(c=new Array(s),p=0,h=e.length,g=e[p];p<h;g=e[++p])c[p]=new t.IntPoint2(i[l].X-g.X,i[l].Y-g.Y);a.push(c)}var u=new Array;for(l=0;l<A-1+o;l++)for(p=0;p<s;p++){var d=new Array;d.push(a[l%A][p%s]),d.push(a[(l+1)%A][p%s]),d.push(a[(l+1)%A][(p+1)%s]),d.push(a[l%A][(p+1)%s]),t.Clipper.Orientation(d)||d.reverse(),u.push(d)}return u},t.Clipper.MinkowskiSum=function(e,i,n){if(i[0]instanceof Array){l=i;for(var r=new t.Paths,o=(A=new t.Clipper,0);o<l.length;++o){var s=t.Clipper.Minkowski(e,l[o],!0,n);A.AddPaths(s,t.PolyType.ptSubject,!0),n&&(a=t.Clipper.TranslatePath(l[o],e[0]),A.AddPath(a,t.PolyType.ptClip,!0))}return A.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),r}var A,a=i,l=t.Clipper.Minkowski(e,a,!0,n);return(A=new t.Clipper).AddPaths(l,t.PolyType.ptSubject,!0),A.Execute(t.ClipType.ctUnion,l,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),l},t.Clipper.TranslatePath=function(e,i){for(var n=new t.Path,r=0;r<e.length;r++)n.push(new t.IntPoint2(e[r].X+i.X,e[r].Y+i.Y));return n},t.Clipper.MinkowskiDiff=function(e,i){var n=t.Clipper.Minkowski(e,i,!1,!0),r=new t.Clipper;return r.AddPaths(n,t.PolyType.ptSubject,!0),r.Execute(t.ClipType.ctUnion,n,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),n},t.Clipper.PolyTreeToPaths=function(e){var i=new Array;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntAny,i),i},t.Clipper.AddPolyNodeToPaths=function(e,i,n){var r=!0;switch(i){case t.Clipper.NodeType.ntOpen:return;case t.Clipper.NodeType.ntClosed:r=!e.IsOpen}e.m_polygon.length>0&&r&&n.push(e.m_polygon);for(var o=0,s=e.Childs(),A=s.length,a=s[o];o<A;a=s[++o])t.Clipper.AddPolyNodeToPaths(a,i,n)},t.Clipper.OpenPathsFromPolyTree=function(e){for(var i=new t.Paths,n=0,r=e.ChildCount();n<r;n++)e.Childs()[n].IsOpen&&i.push(e.Childs()[n].m_polygon);return i},t.Clipper.ClosedPathsFromPolyTree=function(e){var i=new t.Paths;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntClosed,i),i},Inherit(t.Clipper,t.ClipperBase),t.Clipper.NodeType={ntAny:0,ntOpen:1,ntClosed:2},t.ClipperOffset=function(e,i){void 0===e&&(e=2),void 0===i&&(i=t.ClipperOffset.def_arc_tolerance),this.m_destPolys=new t.Paths,this.m_srcPoly=new t.Path,this.m_destPoly=new t.Path,this.m_normals=new Array,this.m_delta=0,this.m_sinA=0,this.m_sin=0,this.m_cos=0,this.m_miterLim=0,this.m_StepsPerRad=0,this.m_lowest=new t.IntPoint0,this.m_polyNodes=new t.PolyNode,this.MiterLimit=e,this.ArcTolerance=i,this.m_lowest.X=-1},t.ClipperOffset.two_pi=6.28318530717959,t.ClipperOffset.def_arc_tolerance=.25,t.ClipperOffset.prototype.Clear=function(){t.Clear(this.m_polyNodes.Childs()),this.m_lowest.X=-1},t.ClipperOffset.Round=t.Clipper.Round,t.ClipperOffset.prototype.AddPath=function(e,i,n){var r=e.length-1;if(!(r<0)){var o=new t.PolyNode;if(o.m_jointype=i,o.m_endtype=n,n===t.EndType.etClosedLine||n===t.EndType.etClosedPolygon)for(;r>0&&t.IntPoint.op_Equality(e[0],e[r]);)r--;o.m_polygon.push(e[0]);for(var s=0,A=0,a=1;a<=r;a++)t.IntPoint.op_Inequality(o.m_polygon[s],e[a])&&(s++,o.m_polygon.push(e[a]),(e[a].Y>o.m_polygon[A].Y||e[a].Y===o.m_polygon[A].Y&&e[a].X<o.m_polygon[A].X)&&(A=s));if(!(n===t.EndType.etClosedPolygon&&s<2)&&(this.m_polyNodes.AddChild(o),n===t.EndType.etClosedPolygon))if(this.m_lowest.X<0)this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,A);else{var l=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y];(o.m_polygon[A].Y>l.Y||o.m_polygon[A].Y===l.Y&&o.m_polygon[A].X<l.X)&&(this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,A))}}},t.ClipperOffset.prototype.AddPaths=function(e,t,i){for(var n=0,r=e.length;n<r;n++)this.AddPath(e[n],t,i)},t.ClipperOffset.prototype.FixOrientations=function(){if(this.m_lowest.X>=0&&!t.Clipper.Orientation(this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon))for(var e=0;e<this.m_polyNodes.ChildCount();e++)((i=this.m_polyNodes.Childs()[e]).m_endtype===t.EndType.etClosedPolygon||i.m_endtype===t.EndType.etClosedLine&&t.Clipper.Orientation(i.m_polygon))&&i.m_polygon.reverse();else for(e=0;e<this.m_polyNodes.ChildCount();e++){var i;(i=this.m_polyNodes.Childs()[e]).m_endtype!==t.EndType.etClosedLine||t.Clipper.Orientation(i.m_polygon)||i.m_polygon.reverse()}},t.ClipperOffset.GetUnitNormal=function(e,i){var n=i.X-e.X,r=i.Y-e.Y;if(0===n&&0===r)return new t.DoublePoint2(0,0);var o=1/Math.sqrt(n*n+r*r);return n*=o,r*=o,new t.DoublePoint2(r,-n)},t.ClipperOffset.prototype.DoOffset=function(e){if(this.m_destPolys=new Array,this.m_delta=e,t.ClipperBase.near_zero(e))for(var i=0;i<this.m_polyNodes.ChildCount();i++)(o=this.m_polyNodes.Childs()[i]).m_endtype===t.EndType.etClosedPolygon&&this.m_destPolys.push(o.m_polygon);else{var n;this.MiterLimit>2?this.m_miterLim=2/(this.MiterLimit*this.MiterLimit):this.m_miterLim=.5,n=this.ArcTolerance<=0?t.ClipperOffset.def_arc_tolerance:this.ArcTolerance>Math.abs(e)*t.ClipperOffset.def_arc_tolerance?Math.abs(e)*t.ClipperOffset.def_arc_tolerance:this.ArcTolerance;var r=3.14159265358979/Math.acos(1-n/Math.abs(e));for(this.m_sin=Math.sin(t.ClipperOffset.two_pi/r),this.m_cos=Math.cos(t.ClipperOffset.two_pi/r),this.m_StepsPerRad=r/t.ClipperOffset.two_pi,e<0&&(this.m_sin=-this.m_sin),i=0;i<this.m_polyNodes.ChildCount();i++){var o=this.m_polyNodes.Childs()[i];this.m_srcPoly=o.m_polygon;var s=this.m_srcPoly.length;if(!(0===s||e<=0&&(s<3||o.m_endtype!==t.EndType.etClosedPolygon)))if(this.m_destPoly=new Array,1!==s){for(this.m_normals.length=0,h=0;h<s-1;h++)this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[h],this.m_srcPoly[h+1]));if(o.m_endtype===t.EndType.etClosedLine||o.m_endtype===t.EndType.etClosedPolygon?this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[s-1],this.m_srcPoly[0])):this.m_normals.push(new t.DoublePoint1(this.m_normals[s-2])),o.m_endtype===t.EndType.etClosedPolygon){var A=s-1;for(h=0;h<s;h++)A=this.OffsetPoint(h,A,o.m_jointype);this.m_destPolys.push(this.m_destPoly)}else if(o.m_endtype===t.EndType.etClosedLine){for(A=s-1,h=0;h<s;h++)A=this.OffsetPoint(h,A,o.m_jointype);this.m_destPolys.push(this.m_destPoly),this.m_destPoly=new Array;var a=this.m_normals[s-1];for(h=s-1;h>0;h--)this.m_normals[h]=new t.DoublePoint2(-this.m_normals[h-1].X,-this.m_normals[h-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-a.X,-a.Y),A=0,h=s-1;h>=0;h--)A=this.OffsetPoint(h,A,o.m_jointype);this.m_destPolys.push(this.m_destPoly)}else{var l;for(A=0,h=1;h<s-1;++h)A=this.OffsetPoint(h,A,o.m_jointype);for(o.m_endtype===t.EndType.etOpenButt?(h=s-1,l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[h].X+this.m_normals[h].X*e),t.ClipperOffset.Round(this.m_srcPoly[h].Y+this.m_normals[h].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[h].X-this.m_normals[h].X*e),t.ClipperOffset.Round(this.m_srcPoly[h].Y-this.m_normals[h].Y*e)),this.m_destPoly.push(l)):(h=s-1,A=s-2,this.m_sinA=0,this.m_normals[h]=new t.DoublePoint2(-this.m_normals[h].X,-this.m_normals[h].Y),o.m_endtype===t.EndType.etOpenSquare?this.DoSquare(h,A):this.DoRound(h,A)),h=s-1;h>0;h--)this.m_normals[h]=new t.DoublePoint2(-this.m_normals[h-1].X,-this.m_normals[h-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-this.m_normals[1].X,-this.m_normals[1].Y),h=(A=s-1)-1;h>0;--h)A=this.OffsetPoint(h,A,o.m_jointype);o.m_endtype===t.EndType.etOpenButt?(l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X-this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y-this.m_normals[0].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+this.m_normals[0].Y*e)),this.m_destPoly.push(l)):(A=1,this.m_sinA=0,o.m_endtype===t.EndType.etOpenSquare?this.DoSquare(0,1):this.DoRound(0,1)),this.m_destPolys.push(this.m_destPoly)}}else{if(o.m_jointype===t.JoinType.jtRound)for(var c=1,p=0,h=1;h<=r;h++){this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+p*e)));var g=c;c=c*this.m_cos-this.m_sin*p,p=g*this.m_sin+p*this.m_cos}else{c=-1,p=-1;for(var h=0;h<4;++h)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+p*e))),c<0?c=1:p<0?p=1:c=-1}this.m_destPolys.push(this.m_destPoly)}}}},t.ClipperOffset.prototype.Execute=function(){var e=arguments;if(e[0]instanceof t.PolyTree)if(s=e[1],(o=e[0]).Clear(),this.FixOrientations(),this.DoOffset(s),(r=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),s>0)r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else if(a=t.Clipper.GetBounds(this.m_destPolys),(A=new t.Path).push(new t.IntPoint2(a.left-10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.top-10)),A.push(new t.IntPoint2(a.left-10,a.top-10)),r.AddPath(A,t.PolyType.ptSubject,!0),r.ReverseSolution=!0,r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),1===o.ChildCount()&&o.Childs()[0].ChildCount()>0){var i=o.Childs()[0];o.Childs()[0]=i.Childs()[0],o.Childs()[0].m_Parent=o;for(var n=1;n<i.ChildCount();n++)o.AddChild(i.Childs()[n])}else o.Clear();else{var r,o=e[0],s=e[1];if(t.Clear(o),this.FixOrientations(),this.DoOffset(s),(r=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),s>0)r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else{var A,a=t.Clipper.GetBounds(this.m_destPolys);(A=new t.Path).push(new t.IntPoint2(a.left-10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.top-10)),A.push(new t.IntPoint2(a.left-10,a.top-10)),r.AddPath(A,t.PolyType.ptSubject,!0),r.ReverseSolution=!0,r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),o.length>0&&o.splice(0,1)}}},t.ClipperOffset.prototype.OffsetPoint=function(e,i,n){if(this.m_sinA=this.m_normals[i].X*this.m_normals[e].Y-this.m_normals[e].X*this.m_normals[i].Y,Math.abs(this.m_sinA*this.m_delta)<1){if(this.m_normals[i].X*this.m_normals[e].X+this.m_normals[e].Y*this.m_normals[i].Y>0)return this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),i}else this.m_sinA>1?this.m_sinA=1:this.m_sinA<-1&&(this.m_sinA=-1);if(this.m_sinA*this.m_delta<0)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),this.m_destPoly.push(new t.IntPoint1(this.m_srcPoly[e])),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)));else switch(n){case t.JoinType.jtMiter:var r=this.m_normals[e].X*this.m_normals[i].X+this.m_normals[e].Y*this.m_normals[i].Y+1;r>=this.m_miterLim?this.DoMiter(e,i,r):this.DoSquare(e,i);break;case t.JoinType.jtSquare:this.DoSquare(e,i);break;case t.JoinType.jtRound:this.DoRound(e,i)}return i=e},t.ClipperOffset.prototype.DoSquare=function(e,i){var n=Math.tan(Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y)/4);this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[i].X-this.m_normals[i].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[i].Y+this.m_normals[i].X*n)))),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[e].X+this.m_normals[e].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[e].Y-this.m_normals[e].X*n))))},t.ClipperOffset.prototype.DoMiter=function(e,i,n){var r=this.m_delta/n;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+(this.m_normals[i].X+this.m_normals[e].X)*r),t.ClipperOffset.Round(this.m_srcPoly[e].Y+(this.m_normals[i].Y+this.m_normals[e].Y)*r)))},t.ClipperOffset.prototype.DoRound=function(e,i){for(var n,r=Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y),o=Math.max(t.Cast_Int32(t.ClipperOffset.Round(this.m_StepsPerRad*Math.abs(r))),1),s=this.m_normals[i].X,A=this.m_normals[i].Y,a=0;a<o;++a)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+s*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+A*this.m_delta))),n=s,s=s*this.m_cos-this.m_sin*A,A=n*this.m_sin+A*this.m_cos;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)))},t.Error=function(e){try{throw new Error(e)}catch(e){alert(e.message)}},t.JS={},t.JS.AreaOfPolygon=function(e,i){return i||(i=1),t.Clipper.Area(e)/(i*i)},t.JS.AreaOfPolygons=function(e,i){i||(i=1);for(var n=0,r=0;r<e.length;r++)n+=t.Clipper.Area(e[r]);return n/(i*i)},t.JS.BoundsOfPath=function(e,i){return t.JS.BoundsOfPaths([e],i)},t.JS.BoundsOfPaths=function(e,i){i||(i=1);var n=t.Clipper.GetBounds(e);return n.left/=i,n.bottom/=i,n.right/=i,n.top/=i,n},t.JS.Clean=function(e,i){if(!(e instanceof Array))return[];var n=e[0]instanceof Array;if(e=t.JS.Clone(e),"number"!=typeof i||null===i)return t.Error("Delta is not a number in Clean()."),e;if(0===e.length||1===e.length&&0===e[0].length||i<0)return e;n||(e=[e]);for(var r,o,s,A,a,l,c,p=e.length,h=[],g=0;g<p;g++)if(0!==(r=(o=e[g]).length))if(r<3)s=o,h.push(s);else{for(s=o,A=i*i,a=o[0],l=1,c=1;c<r;c++)(o[c].X-a.X)*(o[c].X-a.X)+(o[c].Y-a.Y)*(o[c].Y-a.Y)<=A||(s[l]=o[c],a=o[c],l++);a=o[l-1],(o[0].X-a.X)*(o[0].X-a.X)+(o[0].Y-a.Y)*(o[0].Y-a.Y)<=A&&l--,l<r&&s.splice(l,r-l),s.length&&h.push(s)}return!n&&h.length?h=h[0]:n||0!==h.length?n&&0===h.length&&(h=[[]]):h=[],h},t.JS.Clone=function(e){if(!(e instanceof Array))return[];if(0===e.length)return[];if(1===e.length&&0===e[0].length)return[[]];var t=e[0]instanceof Array;t||(e=[e]);var i,n,r,o,s=e.length,A=new Array(s);for(n=0;n<s;n++){for(i=e[n].length,o=new Array(i),r=0;r<i;r++)o[r]={X:e[n][r].X,Y:e[n][r].Y};A[n]=o}return t||(A=A[0]),A},t.JS.Lighten=function(e,i){if(!(e instanceof Array))return[];if("number"!=typeof i||null===i)return t.Error("Tolerance is not a number in Lighten()."),t.JS.Clone(e);if(0===e.length||1===e.length&&0===e[0].length||i<0)return t.JS.Clone(e);var n,r,o,s,A,a,l,c,p,h,g,u,d,f,I,m,b=e[0]instanceof Array;b||(e=[e]);var C=e.length,B=i*i,y=[];for(n=0;n<C;n++)if(0!==(a=(o=e[n]).length)){for(s=0;s<1e6;s++){for(A=[],o[(a=o.length)-1].X!==o[0].X||o[a-1].Y!==o[0].Y?(g=1,o.push({X:o[0].X,Y:o[0].Y}),a=o.length):g=0,h=[],r=0;r<a-2;r++)l=o[r],p=o[r+1],c=o[r+2],I=l.X,m=l.Y,u=c.X-I,d=c.Y-m,0===u&&0===d||((f=((p.X-I)*u+(p.Y-m)*d)/(u*u+d*d))>1?(I=c.X,m=c.Y):f>0&&(I+=u*f,m+=d*f)),(u=p.X-I)*u+(d=p.Y-m)*d<=B&&(h[r+1]=1,r++);for(A.push({X:o[0].X,Y:o[0].Y}),r=1;r<a-1;r++)h[r]||A.push({X:o[r].X,Y:o[r].Y});if(A.push({X:o[a-1].X,Y:o[a-1].Y}),g&&o.pop(),!h.length)break;o=A}A[(a=A.length)-1].X===A[0].X&&A[a-1].Y===A[0].Y&&A.pop(),A.length>2&&y.push(A)}return b||(y=y[0]),void 0===y&&(y=[]),y},t.JS.PerimeterOfPath=function(e,t,i){if(void 0===e)return 0;var n,r,o=Math.sqrt,s=0,A=0,a=0,l=0,c=0,p=e.length;if(p<2)return 0;for(t&&(e[p]=e[0],p++);--p;)A=(n=e[p]).X,a=n.Y,s+=o((A-(l=(r=e[p-1]).X))*(A-l)+(a-(c=r.Y))*(a-c));return t&&e.pop(),s/i},t.JS.PerimeterOfPaths=function(e,i,n){n||(n=1);for(var r=0,o=0;o<e.length;o++)r+=t.JS.PerimeterOfPath(e[o],i,n);return r},t.JS.ScaleDownPath=function(e,t){var i,n;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=n.X/t,n.Y=n.Y/t},t.JS.ScaleDownPaths=function(e,t){var i,n,r;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(r=e[i][n]).X=r.X/t,r.Y=r.Y/t},t.JS.ScaleUpPath=function(e,t){var i,n,r=Math.round;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=r(n.X*t),n.Y=r(n.Y*t)},t.JS.ScaleUpPaths=function(e,t){var i,n,r,o=Math.round;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(r=e[i][n]).X=o(r.X*t),r.Y=o(r.Y*t)},t.ExPolygons=function(){return[]},t.ExPolygon=function(){this.outer=null,this.holes=null},t.JS.AddOuterPolyNodeToExPolygons=function(e,i){var n=new t.ExPolygon;n.outer=e.Contour();var r,o,s,A,a,l,c=e.Childs(),p=c.length;for(n.holes=new Array(p),s=0;s<p;s++)for(r=c[s],n.holes[s]=r.Contour(),A=0,l=(a=r.Childs()).length;A<l;A++)o=a[A],t.JS.AddOuterPolyNodeToExPolygons(o,i);i.push(n)},t.JS.ExPolygonsToPaths=function(e){var i,n,r,o,s=new t.Paths;for(i=0,r=e.length;i<r;i++)for(s.push(e[i].outer),n=0,o=e[i].holes.length;n<o;n++)s.push(e[i].holes[n]);return s},t.JS.PolyTreeToExPolygons=function(e){var i,n,r,o,s=new t.ExPolygons;for(n=0,o=(r=e.Childs()).length;n<o;n++)i=r[n],t.JS.AddOuterPolyNodeToExPolygons(i,s);return s}}();var ze=getDefaultExportFromCjs(He.exports);function alignByMinDist(e,t,i){const n=e.length,r=t.length;if(n<1||r<1)return t.slice();let o=0,s=1/0;for(let A=0;A<r;A++){const a=e[0],l=t[A%r],c=a.x-l.x,p=a.y-l.y,h=e[n-1],g=t[i?Math.min(A+n-1,r-1):(A+n-1)%r],u=h.x-g.x,d=h.y-g.y,f=c*c+p*p+u*u+d*d;f<s&&(s=f,o=A)}return[...t.slice(o),...t.slice(0,o)]}function shapeclip(){const e=1e4;function toclipformat(t){let i=t.map((t=>({X:Math.round(t.x*e),Y:Math.round(t.y*e)})));return ensureOrientation(i)}function fromclipformat(t){return t.map((t=>({x:t.X/e,y:t.Y/e})))}const ensureOrientation=e=>ze.Clipper.Orientation(e)?e:e.slice().reverse();function orientation(e){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const r=e[n],o=e[(n+1)%i];t+=r.X*o.Y-o.X*r.Y}return t>0?1:t<0?-1:0}const _inflate=(e,t,i=!1)=>{const n=new ze.ClipperOffset;n.MiterLimit=4,n.AddPath(e,ze.JoinType.jtMiter,i||2==e.length?ze.EndType.etOpenButt:ze.EndType.etClosedPolygon);const r=new ze.Paths;return n.Execute(r,t),r};function _inflateopen(t,i){const n=new ze.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const r=i*e,o=toclipformat(t);n.AddPath(o,ze.JoinType.jtMiter,ze.EndType.etClosedPolygon);const s=new ze.Paths;n.Execute(s,r);let A=fromclipformat(s[0]);return getshape().frompt(A)}return{offset(t,i){const n=new ze.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const r=Math.abs(i)*e,o=toclipformat(t.pt);n.AddPath(o,ze.JoinType.jtMiter,ze.EndType.etOpenButt);const s=new ze.Paths;n.Execute(s,r);let A=fromclipformat(s[0]);return getshape().frompt(A)},inflate:function inflate(t,i=2,n=!1,r=0){let o=toclipformat(t.pt),s=_inflate(o,i*e);if(!s||!s.length)return getshape().frompt([]);let A=getshape().frompt(fromclipformat(s[0]));if(n){A.orient!=t.orient&&A.reverse();let a=alignByMinDist(t.pt,A.pt,r);if(A.frompt(a),r>0&&t.pt.length>=3){function estendi1(e,t){let i=e.segment(0).ruotata(-Math.PI/2,200,!0),n=e.segment(-2).ruotata(-Math.PI/2,200),r=t.segment(-2).interseca(n),o=t.segment(0).interseca(i);o&&(t.pt[0]=o),r&&(t.pt[t.pt.length-1]=r)}function estendi2(e,t){let i=e.segment(-1),n=t.segment(0),r=i.interseca(n);r&&(t.pt[0]=r),n=t.segment(-2);let o=i.interseca(n);o&&(t.pt[t.pt.length-1]=o)}1==r?estendi1(t,A):estendi2(t,A)}}return A},inflateopen:_inflateopen,inflateclose(e,t){let i=_inflateopen(e.pt,t);i.orient!=e.orient&&i.reverse();let n=alignByMinDist(e.pt,i.pt,0);return i.frompt(n),i},inflatecornici(e,t=2,i,n){let r,o=e.npt;if(2==o){let i=e.segment(0).offset(t);r=getshape().frompt([i.p1,i.p2])}else if(3==o){let i=e.segment(0).offset(t),n=e.segment(1).offset(t);if(i.isparallela(n))r=getshape().frompt([i.p1,n.p2]);else{let e=i.interseca(n);r=getshape().frompt([i.p1,e,n.p2])}}else{let o=new Linea2(e.pt[0],e.pt[e.npt-1]),s=o.len,A=o.perpendicolare(o.p1,s),a=o.perpendicolare(o.p2,s);A.isparallela(e.segment(0))&&(A=o.perpendicolare(o.puntot(.1),s)),a.isparallela(e.segment(e.npt-2))&&(a=o.perpendicolare(o.puntot(.9),s));let l=Math.floor(e.npt/2),{t:c}=A.proiezionet(e.pt[l]),p=2*(c>0?-1:1),h=A.puntot(p),g=a.puntot(p);r=_inflateopen([...e.pt,g,h],t);let u=r.pt.reduce(((e,t,i)=>(t.x-h.x)**2+(t.y-h.y)**2<(r.pt[e].x-h.x)**2+(r.pt[e].y-h.y)**2?i:e),0);r.pt=r.pt.slice(u+2).concat(r.pt.slice(0,u)),r.orient!=e.orient&&r.reverse(),i&&(e.truncatebefore(i),r.truncatebefore(i)),n&&(r.truncateafter(n),e.truncateafter(n))}return r},intersecasplitter(e,t){const i=new ze.Clipper,n=[toclipformat(t.pt)],r=[toclipformat(e.pt)];i.AddPaths(n,ze.PolyType.ptSubject,!0),i.AddPaths(r,ze.PolyType.ptClip,!0);const o=new ze.Paths;let s;if(i.Execute(ze.ClipType.ctIntersection,o,ze.PolyFillType.pftNonZero,ze.PolyFillType.pftNonZero)&&o.length>0){const e=o[0];if(1===orientation(e)){s=getshape().frompt(fromclipformat(e)),s.orient!=t.orient&&s.reverse();for(let e=0;e<t.pt.length;e++){let i=t.pt[e],n=s.pt.findIndex((e=>Math.abs(e.x-i.x)<.01&&Math.abs(e.y-i.y)<.01));if(n>0){n-=e,0!=n&&s.selezionaprimo(n);break}}}}return s},offsetpts(t,i=.01){const n=e*i;let r=_inflate(toclipformat(t),n);if(r&&r.length)return fromclipformat(r[0])},areesplitter(e,t,i=!0){if(!Array.isArray(e)||e.length<3)return;if(!t||0==t.length)return[e];const n=new ze.Paths,r=new ze.Paths;let o=i?_inflate(toclipformat(e),-100):[toclipformat(e)],s=i?t.flatMap((e=>_inflate(toclipformat(e),100))):t.map((e=>toclipformat(e)));for(let e of o)n.push(e);for(let e of s)r.push(e);const A=new ze.Clipper;A.AddPaths(n,ze.PolyType.ptSubject,!0),A.AddPaths(r,ze.PolyType.ptClip,!0);const a=new ze.Paths;if(!A.Execute(ze.ClipType.ctDifference,a,ze.PolyFillType.pftNonZero,ze.PolyFillType.pftNonZero))return;let l=[];for(let e of a)if(i){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}else if(e.length>4&&1==orientation(e)){const t=_inflate(e,-100);if(t.length>0)for(let e of t){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}}else 1==orientation(e)&&l.push(fromclipformat(e));return l},unisci(e,t,i){const n=new ze.Paths,r=new ze.Paths;for(let t of e){let e=[toclipformat(t.pt)];for(let t of e)n.push(t)}if(t&&t.length)for(let e of t){let t=toclipformat(e.pt);r.push(t)}if(i&&i.length)for(let e of i){let t=toclipformat(e.pt),i=_inflate(t,1,!0);for(let e of i)r.push(e)}const o=new ze.Clipper;o.AddPaths(n,ze.PolyType.ptSubject,!0),o.AddPaths(r,ze.PolyType.ptClip,!0);const s=new ze.Paths;if(o.Execute(ze.ClipType.ctDifference,s,ze.PolyFillType.pftNonZero,ze.PolyFillType.pftNonZero)){let e=[],t=[];for(let i of s)if(1==orientation(i)){let t=[i];for(let i of t)e.push({shape:getshape().frompt(fromclipformat(i)),holes:[]})}else t.push(getshape().frompt(fromclipformat(i)));for(let i of t)for(let t of e)if(t.shape.pointinshape(i.pt[0])){t.holes.push(i);break}return e}return[]}}}class Vscene{constructor(e,t,i={}){this.x=e,this.y=t,this.info=i,this.clear()}addrow(e){e||(e={}),e.id=function newid(e){let t=0;for(let i of e)+i.id>t&&(t=+i.id);return t+1}(this.rows);let t=new Vobject(e);return this.rows.push(t),t}clear(){this.curlayer=0,this.rows=[],this.clines=[]}fromjson(e){let t,i;e||(e={info:{}}),this.clear(),this.x=e.x||4e3,this.y=e.y||3e3,this.info=e.info||{},this.curlayer=e.curlayer,e.clines&&(t=e.clines.map((e=>new Linea2(e.p1,e.p2))));let n=this.x,r=this.y;i=[new Linea2(0,0,100,0),new Linea2(n,0,n,100),new Linea2(n,r,n-100,r),new Linea2(0,r,0,r-100)],this.clines=[...i,...t],e.rows&&(this.rows=e.rows.map((e=>new Vobject(e))))}tojson(){let{x:e,y:t,info:i,curlayer:n,xrows:r,xclines:o}=this,s=r.map((e=>e.tojson())),A=o.map((e=>({p1:e.p1,p2:e.p2})));return A=A.slice(4),{x:e,y:t,curlayer:n,rows:s,clines:A}}}class Vobject{constructor(e){e||(e={}),this.fromjson(e)}get lines(){if(this._lines&&this._lines.length)return this._lines;{let{x:e,y:t}=this;return e||(e=100),t||(t=100),[new Linea2(0,0,0,t),new Linea2(e,0,e,t)]}}fromjson(e){let t;this.id=e.id??1,this.layer=e.layer||0,this.hidden=!!e.hidden,this.x=e.x||100,this.y=e.y||100,this.pc=e.pc||{x:0,y:0},e.shape?this.shape=getshape().frompt(e.shape):this.shape=void 0,e.lines&&e.lines.length&&(t=e.lines.map((e=>new Linea2(e.p1,e.p2)))),this._lines=t,this.draw=new Vis2d(`d:${e.id}`),e.draw&&this.draw.fromjson(e.draw),this.info=e.info||{},this.pos=e.pos||{x:0,y:0,rot:0}}tojson(){let{id:e,layer:t,x:i,y:n,pc:r,shape:o,hidden:s,_lines:A,info:a,pos:l}=this;return A=A&&A.length?A.map((e=>({p1:e.p1,p2:e.p2}))):void 0,o=o?o.pt:void 0,{id:e,layer:t,x:i,y:n,pc:r,shape:o,lines:A,hidden:s,info:a,pos:l,draw:this.draw.tojson()}}}class Vis2d{constructor(e){this.name=e,this.clear()}clear(){return this.vec=[],this.gr={},this}tojson(){let e={};for(let t in this.gr)e[t]=this.gr[t].tojson();return{name:this.name,rows:this.vec,groups:e}}fromjson(e){if(!(e&&e.name&&e.rows&&e.groups))throw new Error("wrong data JSON");this.clear(),this.name=e.name,this.vec=e.rows;for(let t in e.groups)this.gr[t]=new Vis2d(t).fromjson(e.groups[t])}creategr(e="grp"){return this.gr[e]||(this.gr[e]=new Vis2d(e)),this.gr[e]}push(e=0,t=0,i={}){"number"==typeof i&&(i={rot:i}),i||(i={}),this.vec.push({type:"push",x:e,y:t,op:i})}pop(){this.vec.push({type:"pop"})}randomcolor(e="100%"){return`hsl(${Math.floor(360*Math.random())}, 50%, 40%,${e})`}addgr(e){let t=e;e?.name&&(t=e.name),this.gr[t]?this.vec.push({type:"group",name:t}):this.vec.push({type:"err",err:`addgroup: ${t} => missing`})}addquota(e,t,i,n,r=0,o="",s=1,A=.25){this.vec.push({type:"quota",x1:e,y1:t,x2:i,y2:n,d:r,text:o,spessore:A,color:"black",scalafont:s})}addqpunto(e,t,i,n,r=0,o="",s=1,A=.25){this.vec.push({type:"qpunto",x1:e,y1:t,x2:i,y2:n,d:r,text:o,spessore:A,color:"black",scalafont:s})}addpoint(e,t=-1,i="red",n=8){return e&&this.vec.push({type:"point",p:e,id:t,color:i,spessore:1*n}),this}addline(e,t=-1,i=void 0,n=1){return e&&this.vec.push({type:"line",l:e,id:t,color:i,spessore:1*n}),this}addrect(e,t=-1,i=void 0,n=1){return e&&this.vec.push({type:"rect",l:e,id:t,color:i,spessore:1*n}),this}addimg(e,t){return e&&this.vec.push({type:"img",l:e,img:t}),this}addrecta(e,t=-1,i=void 0){return e&&this.vec.push({type:"recta",l:e,id:t,color:i,spessore:0}),this}addshape(e,t=void 0,i=1){return e&&this.vec.push({type:"shape",s:e,color:t||this.randomcolor(),spessore:1*i}),this}addshapelin(e,t=void 0,i=1){return e&&this.vec.push({type:"shapelin",s:e,color:t||this.randomcolor(),spessore:1*i}),this}addarea(e,t=void 0){return e&&this.vec.push({type:"area",s:e,color:t||this.randomcolor()}),this}addoffset(e,t){return this.vec.push({type:"offset",x:e||0,y:t||0}),this}}function checkoggetto(e,t,i,n){if("h"==t&&(t="o"),e||(e=[]),"number"==typeof i&&!["a","as"].includes(t))return{cod:"__",macro:"",sps:i};let r=e.find((e=>e.tipo.includes(t)&&e.cod==i&&(e.isshape||n||"a"!=t)));return r||(r=e.find((e=>e.tipo.includes(t)&&(e.isshape||n||"a"!=t)))),r||(r={cod:"__",macro:"",sps:0}),"a"!=t&&"as"!=t||"__"==r.cod||r.color||(r.color=`hsl(${function stringToHue(e){let t=0;for(let i=0;i<e.length;i++)t=31*t+e.charCodeAt(i)>>>0;return Math.floor(.6180339887*t%1*360)}(r.cod)}, 95%, 97%`),r}function getbordi(e,t){let i,n=!1;if(Array.isArray(t)){t.length=4;let r=t[0]||"";i=t.map((t=>checkoggetto(e,"b",t||r))),n=i.every((e=>e.sps===i[0].sps))}else{let r=checkoggetto(e,"b",t);i=[r,r,r,r],n=!0}return{bordi:i,uguali:n,senza:!(i[0].sps||i[1].sps||i[2].sps||i[3].sps),bl:i[0].sps,bt:i[1].sps,br:i[2].sps,bb:i[3].sps}}function elaborapercorso(e,t,i,n,r=0){let o,s,A,a,l,c,p,h,g,u,d,f,I,m,b,C,B=[],y=[];function eseguipezzo(e,t,i,n){let o=e.infoquad(t);if(o&&o.distanza){let s=getshape().frompt(n||[e.p1,e.p2,t.p2,t.p1]),A=s.clone();(o.sx||o.sy)&&A.move(-o.sx||0,-o.sy||0),o.angle&&A.rotate(-o.angle||0);let a={id:++r,type:`b${i}`,info:o};n&&(a.shape=A.pt),y.push({type:`b${i}`,pt:s.pt}),B.push(a)}}r=r||0;let E=e.pt.length,x=E-1;n||(n=[]);let{bordi:w,uguali:P,senza:v}=getbordi(n,t);if(P)if(v||!w[0].sps)o=e.clone();else{let t=w[0].sps;o=shapeclip().inflate(e,-t,!0)}else{let t,i=[],n=[];for(let n=0;n<E;n++){t=0==n?w[0].sps:n==x-1?w[2].sps:n==x?w[3].sps:w[1].sps,"number"!=typeof t&&(t=0);let r=e.segment(n).offset(-t);i.push(r)}for(let e=0;e<E;e++){let t=i[e].interseca(i[(e-1+E)%E]);n.push(t)}o=getshape().frompt(n)}if(!v){A=o.segment(x).interseca(e.segment(0)),a=o.segment(1).interseca(e.segment(0)),l=e.segment(x-1).interseca(o.segment(x-2)),c=e.segment(x-1).interseca(o.segment(x)),p=e.segment(x).interseca(o.segment(0)),h=e.segment(1).interseca(o.segment(0)),g=e.segment(x-2).interseca(o.segment(x-1)),u=e.segment(x).interseca(o.segment(x-1)),b=1,C=x-2,I=o.segment(0),m=o.segment(x-1);for(let t=1;t<x-1;t++){let i=e.segment(t),n=i.interseca(I);n&&i.onsegment(n)&&(b=t,h=n),n=i.interseca(m),n&&i.onsegment(n)&&(C=t,g=n)}b-=1,C=x-2-C;let n=e.pt[0],r=o.pt[0],B=o.pt[x],y=e.pt[x];switch(i[0]){case"v":eseguipezzo(new Linea2(u,p),o.segment(x),3),r=p,B=u;break;case"o":eseguipezzo(e.segment(x),new Linea2(c,A),3),n=A,y=c;break;default:eseguipezzo(e.segment(x),o.segment(x),3)}switch(d=e.pt.slice(1,x),f=o.pt.slice(1,x),i[1]){case"v":eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(r,h),0),eseguipezzo(new Linea2(e.pt[x-1],y),new Linea2(g,B),2),b&&(d=d.slice(b)),C&&(d=d.slice(0,-C)),d[0]=h,d[d.length-1]=g;break;case"o":eseguipezzo(new Linea2(n,a),new Linea2(r,o.pt[1]),0),eseguipezzo(new Linea2(l,y),new Linea2(o.pt[x-1],B),2),f[0]=a,f[f.length-1]=l;break;default:eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(r,o.pt[1]),0),eseguipezzo(new Linea2(e.pt[x-1],y),new Linea2(o.pt[x-1],B),2)}if(s=getshape().frompt(f),d.length<8&&d.length==f.length)for(let e=0;e<d.length-1;e++)eseguipezzo(new Linea2(d[e],d[e+1]),new Linea2(f[e],f[e+1]),1);else{let e=getshape().frompt([...d,...f.reverse()]),i=new Linea2(d[0],d[d.length-1]),n=i.offset(-t[1]);eseguipezzo(i,n,1,e.pt)}}return{countid:r,shape2:o,shapetop:s,bordi:w,dati:B,draws:y}}function creaprofiloesterno(e,t){let i,{x:n,y:r,tipo:o,bordo:s,taglio:A,h1:a,h2:l,l1:c,l2:p,forma:h}=e;n=n<50?50:n,r=r<50?50:r,c=c||0,p=p||0,a=a||0,l=l||0;let g=[0,0];switch(o){case"i":case"d":g.push(c>0&&c<n?c:0,a>0&&a<r?r-a:r),g.push(p>0&&p<n-c?n-p:n,l>0&&l<r&&l!=a?r-l:r);break;case"a":if(h){let e=getshape().fromstr(h);e.alignline({x:c,y:r-a},{x:n-p,y:r-l}),g.push(...e.vec)}else if((a||l)&&a>=0&&a<Math.min(r,n/2)&&l>=0&&l<Math.min(r,n/2)){let e=getshape().fromstr(`a30;${c||0};${r-a};${n/2};${r};${n-p};${r-l}`);g.push(...e.vec)}else g.push(0,r,n,r);break;case"s":c>0&&a>0?g.push(0,r-a,c,r):g.push(0,r),p&&p<n-c&&l>0&&l<r?g.push(n-p,r,n,r-l):g.push(n,r);break;default:g.push(0,r,n,r)}g.push(n,0),e.countid=0,i=getshape().fromvec(g);let{countid:u,shape2:d,shapetop:f,bordi:I,dati:m,draws:b}=elaborapercorso(i,s,A,t,e.countid);return e.countid=u,{shape:i,internalshape:d,shape2:d,shapetop:f,bordi:I,dati:m,draws:b}}const je={x:"normale",s:"smussato",i:"inclinato",a:"arco/sagomato",d:"diagonali"},Je={dd:"diagonale",vv:"verticale",oo:"orizzontale",vo:"verticale+orizzontale",vd:"verticale+diagonale",ov:"orizzontale+verticale",od:"orizzontale+diagonale"},We={d:"dist. positiva","d-":"dist. negativa",p:"perc. positiva","p-":"perc negativa"},Ke={l:"sinistra",c:"centro",r:"destra"};function findareacod(e,t,i){let n=1/0,r="";for(let o of e){let e=(o.x-t)**2+(o.y-i)**2;e<n&&(n=e,r=o.k)}return r}function generatesegments(e,t,i=!1,n=!1){let r=[];if(e?.length>=2){if(n){let t=[];for(let i of e)t.push({a:i.a,b:i.a}),i.a!=i.b&&t.push({a:i.b,b:i.b});e=t}if(e=e.sort(((e,t)=>e.a-t.a)),t?.length){let n=0;for(let o=1;o<e.length;o++){const s=1e-6;if(t.find((t=>t>e[o-1].b+s&&t<e[o].a-s))){if(o-1>n){let t;t=i?{a:e[n].b,b:e[o-1].a}:{a:e[n].a,b:e[o-1].b},r.push(t)}n=o}}n<e.length-1&&(i?r.push({a:e[n].b,b:e[e.length-1].a}):r.push({a:e[n].a,b:e[e.length-1].b}))}else r.push({a:e[0].b,b:e[e.length-1].a})}return r}function makedivisions(e,t,i){delete e.arre;let n=[],r=[],o=[],s=[],{x:A,y:a,oriz:l,vert:c,tipo:p,minvano:h,minvanox:g,minvanoy:u}=e,{bb:d,bt:f,bl:I,br:m}=getbordi(i,e.bordo);g=g||h||50,u=u||h||50;let{dati:b,punti:C}=ordinabase(i,"o",l,a,u,d,f,p),{dati:B,punti:y}=ordinabase(i,"v",c,A,g,I,m),E=t.clone();function adddatilin(e,t,A,a,l,c){if("l"==e)r.push([A.p1,A.p2]),s.push([A.p1.x,A.p1.y,A.p2.x,A.p2.y]);else{let p=[A.p1,A.p2,a.p2,a.p1];r.push(p);let h=getshape().frompt(p);if(E?.pt&&(h.orient!=E.orient&&h.reverse(),h=shapeclip().intersecasplitter(E,h)),h){h.pt.length>=4&&(A.p1=h.pt[0],A.p2=h.pt[1],a.p1=h.pt[h.pt.length-1],a.p2=h.pt[h.pt.length-2]),s.push([A.p1.x+("v"==e?l:0),A.p1.y+("v"!=e?l:0),A.p2.x+("v"==e?l:0),A.p2.y+("v"!=e?l:0)]);let r=A.infoquad(a);if(r&&r.distanza){let s=h.clone(),A=checkoggetto(i,e,t);(r.sx||r.sy)&&s.move(-r.sx||0,-r.sy||0),r.angle&&s.rotate(-r.angle||0);let a={id:c,type:e,cod:t,c2:A,shape:s.pt,info:r};o.push(a),a?.shape&&n.push({type:e,sx:a.info.sx,sy:a.info.sy,rot:a.info.angle,pt:a.shape})}}}}function isinseg(e,t){return!!e.find((e=>e.a<=t&&e.b>=t))}B.forEach(((e,t)=>{e.segs=generatesegments(C,e.cuts,!0),e.segs.forEach(((t,i)=>{let n=new Linea2({x:e.x,y:t.a},{x:e.x,y:t.b}),r=new Linea2({x:e.x+e.sp,y:t.a},{x:e.x+e.sp,y:t.b});adddatilin(e.sp?"v":"l",e.cod,n,r,e.sp/2,e.id)}))}));for(let e of b){let t=[...e.cuts],i=[...y];for(let n of B)i.push({a:n.x,b:n.x+n.sp}),isinseg(n.segs,e.x+e.sp/2)&&t.push(n.x+n.sp/2);e.segs=generatesegments(i,t,!0,!0),e.segs=e.segs.filter((e=>Math.abs(e.a-e.b)>40));for(let t of e.segs){let i=new Linea2({x:t.b,y:e.x+e.sp},{x:t.a,y:e.x+e.sp}),n=new Linea2({x:t.b,y:e.x},{x:t.a,y:e.x});adddatilin(e.sp?"o":"l",e.cod,n,i,e.sp,e.id)}}let x=shapeclip().areesplitter(t.pt,r),w=function getareacodes(e){let t,i,n,r,o=[];for(let s=0;s<=e.vert.length;s++){if(0==s)t="v0",i=0;else{let n=e.vert[s-1];t=`${n.dir}${n.id}`,i=n._v}for(let s=0;s<=e.oriz.length;s++){if(0==s)n="o0",r=0;else{let t=e.oriz[s-1];n=`${t.dir}${t.id}`,r=t._v}o.push({k:t+n,x:i,y:r})}}return o}(e);for(let t of x){let r=getshape().frompt(t),{p1:s,width:A,height:a,isrect:l}=r.dims(),c=findareacod(w,s.x,s.y),p=e.aree[c]||e.area||"",h=checkoggetto(i,"a",p,l),g=r.pt.findIndex((e=>Math.abs(e.x-s.x)<.001&&Math.abs(e.y-s.y)<.001));g>0&&r.selezionaprimo(g),r.pt.length&&(r.move(-s.x,-s.y),1==r.orient&&r.reverse()),o.push({id:c,cod:p,c2:h,type:"a",shape:l?null:r.pt,info:{isrect:l?1:0,sx:s.x,sy:s.y,rot:0,width:A,height:a}}),n.push({type:l?"a":"as",sx:s.x,sy:s.y,dx:A,dy:a,id:c,cod:p,rot:0,pt:r.pt,color:h.color})}return{ff:e,h1:b,ph:C,v1:B,pv:y,draws:n,lines:s,dati:o}}function ordinabase(e,t,i,n,r,o,s,A){let a=[];if(i){for(let r of i){let i=checkoggetto(e,t,r.cod).sps||0,A=0;switch(r.tipo){case"d-":A=n-r.v;break;case"p":A=n*r.v/100;break;case"p-":A=n*(100-r.v)/100;break;default:A=r.v}if(i&&"c"==r.align?A-=i/2:i&&"r"==r.align&&(A-=i),A=Math.round(10*A)/10,r._x0=A,r._x1=A+i,r._v=A+i/2,r._valid=A>0&&A<n,A>o&&A<n-s){let e=[];r.cuts&&r.cuts.length&&r.cuts.forEach((t=>{e.push(t<0?n+t:t)})),a.push({id:r.id,x:A,sp:i,cuts:e,cod:r.cod})}}a.sort(((e,t)=>e.x-t.x))}let l=[],c=o;"a"==A&&(n*=1.3);for(let e=0;e<a.length;e++){let t=a[e];t.x>=c+r&&t.x+t.sp<=n-s-r&&(t.min=c+r,t.max=n-s-r,l.length>0&&(l[l.length-1].max=t.x-r),l.push(t),c=t.x+t.sp)}let p=[];p.push({a:o,b:o});for(let e of l)p.push({a:e.x,b:e.x+e.sp});return p.push({a:n-s,b:n-s}),{dati:l,punti:p}}function check(e){let{x:t,y:i,area:n,bordo:r,gvert:o,goriz:s,priority:A,minvano:a,taglio:l,tipo:c,h1:p,h2:h,l1:g,l2:u,d1:d,x1:f,y1:I,d2:m,x2:b,y2:C,vert:B,oriz:y,aree:E,forma:x,countid:w}=e;return t=t||1e3,t<200&&(t=200),i=i||1e3,i<200&&(i=200),p=p||I||0,h=h||C||0,g=g||d||f||0,u=u||m||b||0,p<0&&p>i-100&&(p=0),h<0&&h>i-100&&(h=0),(u<0||u>t-g)&&(u=0),(g<0||g>t-u)&&(g=0),a=a||50,x&&(c="a"),n=n||"__",r=r||"__",A=A||"v",l=Je[l]?l:"dd",c=je[c]?c:"x",B=B||[],y=y||[],E=E||{},s=s||void 0,o=o||void 0,w=w||1,{x:t,y:i,area:n,bordo:r,gvert:o,goriz:s,priority:A,minvano:a,taglio:l,tipo:c,h1:p,h2:h,l1:g,l2:u,vert:B,oriz:y,aree:E,countid:w}}function addtaglio(e,t,i,n,r,o="c",s=[],A){return A||(console.log("manca id a addtaglio"),A=0),{dir:t,id:A,tipo:We[i]?i:"d",align:Ke[o]?o:"c",v:n,cod:r,cuts:s||[]}}function addoriz(e,t,i,n,r,o){let s=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.goriz||s||"__"),Array.isArray(r)&&(o=r,r="c"),e.oriz||(e.oriz=[]);let A=addtaglio(0,"o",t,i,n,r,o,(e.oriz.length?Math.max(...e.oriz.map((e=>e.id))):0)+1);return e.oriz.push(A),e}var Ve=Object.freeze({__proto__:null,addhoriz:function addhoriz(e,t,i,n,r,o){return addoriz(e,t,i,n,r,o)},addoriz:addoriz,addvert:function addvert(e,t,i,n,r,o){let s=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.gvert||s||"__"),Array.isArray(r)&&(o=r,r="c"),e.vert||(e.vert=[]);let A=addtaglio(0,"v",t,i,n,r,o,(e.vert.length?Math.max(...e.vert.map((e=>e.id))):0)+1);return e.vert.push(A),e},calcoladivisioni:function calcoladivisioni(e,t,i,n){return makedivisions(e,i,n)},check:check,checkoggetto:checkoggetto,creaprofiloesterno:creaprofiloesterno,create:function create(e,t,i,n){n||(n={});let{minvano:r,priority:o,taglio:s,tipo:A,h1:a,h2:l,d1:c,d2:p,l1:h,l2:g,x1:u,x2:d,y1:f,y2:I,gvert:m,goriz:b,forma:C,area:B}=n,y=check({x:e,y:t,area:B,bordo:i,gvert:m,goriz:b,priority:o,minvano:r,taglio:s,tipo:A,h1:a,h2:l,l1:h,l2:g,d1:c,x1:u,y1:f,d2:p,x2:d,y2:I});return y.forma=C,y},elaborapercorso:elaborapercorso,getbordi:getbordi,makedivisions:makedivisions,makeshape:function makeshape(e,t){return creaprofiloesterno(e,t)},priorita:{v:"verticale",h:"orizzontale"},tagli:Je,tipi:je,tipilocks:[{cod:"diml",des:"Larghezza"},{cod:"dima",des:"Altezza"},{cod:"etipo",des:"Modifica Tipo"},{cod:"etaglio",des:"Modifica Taglio"},{cod:"ebordi",des:"Modifica Bordi"},{cod:"esag",des:"Shape"},{cod:"vcrea",des:"Crea Div. Verticale"},{cod:"ocrea",des:"Crea Div. Orizzontale"},{cod:"vmov",des:"Sposta Div. Verticale"},{cod:"omov",des:"Sposta Div. Orizzontale"},{cod:"vedit",des:"Modifica Div. Verticale"},{cod:"oedit",des:"Modifica Div. Orizzontale"},{cod:"emods",des:"Modificatori Orizzontali/Verticali"},{cod:"ecuts",des:"Modifica/Aggiungi Cuts"},{cod:"earee",des:"Modifica Aree"}],tipoalign:Ke,tipocut:We});function joinlinestoshapes(e){let t=[];for(let i of e)for(let e of i.lines){let n=new Linea2(e.p1,e.p2);n.rotate(-i.ang),n.move(i.pos.x,i.pos.z),n.valid=!0,t.push(n)}const i=.1;function samepoint(e,t){return Math.abs(e.x-t.x)+Math.abs(e.y-t.y)<i}for(let e=0;e<t.length;e++){if(!t[e].valid)continue;if(t[e].len<i){t[e].valid=!1;continue}const n=t[e];for(let r=e+1;r<t.length;r++){const e=t[r];if(!e.valid)continue;if(!n.isparallela(e))continue;if(!n.isCollineare(e))continue;n.a1b=e.onsegment(n.p1,i),n.a2b=e.onsegment(n.p2,i),n.b1a=n.onsegment(e.p1,i),n.b2a=n.onsegment(e.p2,i);const{x:o,y:s}=n.direzione,{x:A,y:a}=e.direzione;if(o*A+s*a>0)if(n.b1a&&n.b2a)e.valid=!1;else{if(n.a1b&&n.a2b){n.valid=!1;break}if(n.a1b&&n.b2a){let i=new Linea2(e.p1,n.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}if(n.a2b&&n.b1a){let i=new Linea2(n.p1,e.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}}else{const r=n.proiezionet(n.p1).t,o=n.proiezionet(n.p2).t,s=n.proiezionet(e.p1).t,A=n.proiezionet(e.p2).t,a=Math.min(r,o),l=Math.max(r,o),c=Math.min(s,A),p=Math.max(s,A),h=Math.max(a,c),g=Math.min(l,p);if(g>h+i){if(a<h){let e=new Linea2(n.puntot(a),n.puntot(h));e.valid=!0,t.push(e)}if(l>g){let e=new Linea2(n.puntot(l),n.puntot(g));e.valid=!0,t.push(e)}if(c<h){let e=new Linea2(n.puntot(c),n.puntot(h));e.valid=!0,t.push(e)}if(p>g){let e=new Linea2(n.puntot(p),n.puntot(g));e.valid=!0,t.push(e)}n.valid=!1,e.valid=!1;break}}}}t=t.filter((e=>e.valid)).map((e=>getshape().frompt([e.p1,e.p2])));for(let e=0;e<t.length;e++){let i=t[e],n=!0;for(;n;){n=!1;for(let r=e+1;r<t.length;){let e=t[r];samepoint(i.pt[0],e.pt[0])?(e.pt.reverse(),i.pt.unshift(...e.pt.slice(0,-1)),t.splice(r,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[e.pt.length-1])?(e.pt.reverse(),i.pt.push(...e.pt.slice(1)),t.splice(r,1),n=!0):samepoint(i.pt[0],e.pt[e.pt.length-1])?(i.pt.unshift(...e.pt.slice(0,-1)),t.splice(r,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[0])?(i.pt.push(...e.pt.slice(1)),t.splice(r,1),n=!0):r++}}}return t}async function valutagrafica(e,t,i,n,r){let{getcolonne:o,muCalc:s,muEval:A,tipifree:a}=e.muvalutatore;i||(i={});for(let i of["l","a","p"]){!e.vari.var(i)&&t.dims&&e.vari.add(i,String(t.dims[i].val||100))}let l=new Set;const c=["sl","sa","sp","ul","ua","up","ax","ay","az","scx","scy","scz","scale"];let p,h=!1,g=await A(e,t,t.codice,{leveleval:0,checkheader:e=>{let{variante:i}=e;if(Array.isArray(t.head)){let e=t.head.find((e=>e.cod==i));h=!!e}},grafica:async t=>{let r,o,a,l,p,{id:h,pars:g,parametri:u,macro:d,options:f,vari:I}=t,m=!!(d&&d.head&&d.head.length),b={l:e.vari.var("l"),a:e.vari.var("a"),p:e.vari.var("p")};const C=["l","a","p","#d",...c];for(let t of C){let i=e.vari.dictionary[t];i&&(b[t]=i)}async function _parsepars(t,i){let n,A,c=/^#(d|des|descrizione)\s*=\s*(.*)\s*$/im.exec(t);if(c)n="#d",A=await e.vari.valuta(c[2]);else{let e=await I.parametrokeyval(t);n=e.k,A=e.v}n&&!p[n]&&(p[n]=!0,C.includes(n)?"#d"==n?l=A:("string"==typeof A&&(A=s(A)),["l","a","p"].includes(n)&&e.vari.add(n,String(A)),o[n]=A,a=!0):"string"==typeof A?r.push(`${n}=${A}`):e.vari.add(n,A))}let B;if(r=[],o={},a=!1,l="",p={},n&&n.keys&&n.keys[h]&&(B=n.keys[h].pars,B))for(let t in B){let i=e.vari.dictionary[t];i&&(b[t]=i),await _parsepars(`${t}=${B[t]}`)}if(g&&g.length)for(const e of g)await _parsepars(e);if(u&&u.length)for(const e of u)await _parsepars(e);if(d&&d.head&&d.head.length){let e=d.head.filter((e=>!["g","p"].includes(e.t)));for(const t of e)await _parsepars(t.cod)}let y={iscad:a,isheader:m,name:d.name,des:l,leveleval:f.leveleval};m&&h&&(y.id=h),a&&(o.l?e.vari.add("l",String(o.l)):o.l=s(e.vari.var("l")),o.a?e.vari.add("a",String(o.a)):o.a=s(e.vari.var("a")),o.p?e.vari.add("p",String(o.p)):o.p=s(e.vari.var("p")),y.cadv=o),await d.impostaparametri(u,r,!0,B);let E=i[h];h&&m&&E&&E.pars&&(y.pars=E.pars,f.leveleval++,await d.setparametri(E.pars));let x=e.vari.var("_rootnode");if(e.vari.add("_rootnode","0"),y.rows=await A(e,d,d.codice,f),e.vari.add("_rootnode",x),h&&m&&(y.spars=d.getparametri()),a)for(let t in b)e.vari.dictionary[t]=b[t];return y},parsefnpunto:async e=>{let{dati:t,vari:i,id:n,output:r}=e;t=t.trim();let A=t.indexOf(" "),a=t.indexOf(",");a>0&&A>0&&a<A&&(A=a);let p,h,g={},u={};A>1?(p=t.slice(1,A),h=o(t.slice(A+1))):(p=t.slice(1),h=[]),l.has(p)||l.add(p);for(let e of h){let{k:t,v:n}=await i.parametrokeyval(e);t&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&(g[t]=n||"")}for(let e of["l","a","p"])g[e]||(g[e]=i.var(e));let d=Object.keys(g);for(let e of c)d.includes(e)&&(u[e]=s(g[e]),u[e]&&(g[e]=u[e]));r.push({t:"fn",fn:p,id:n,pars:g,p2:u})}});for(let i of["l","a","p"])if(t.dims&&t.dims[i].val!=parseFloat(e.vari.var(i))){p=!0;break}return(h||p&&"function"==typeof r)&&await r(p,h),{oo:g,vari:e.vari.dump(!0),fnlist:[...l]}}function ismacro(e){return"object"==typeof e&&e?.name&&e.rows}function isfn(e){return"object"==typeof e&&"fn"==e?.t}function getnodebyid(e,t){let i;return t&&t.rows&&function _getnode(t){for(let n of t){if(ismacro(n)){if(n.id==e)return void(i=n);n.rows&&_getnode(n.rows)}if(i)return}}(t.rows),i}function getsubrules(e){let t=[];return t.push({id:"",level:0,name:"home"}),function _xfiltrati(e,i){if(e.rows&&e.rows.length)for(let n of e.rows)ismacro(n)&&(n.id&&n.isheader?(t.push({id:n.id,name:n.name,des:n.des||"",spec:n.pars?1:0,level:i}),_xfiltrati(n,i+1)):_xfiltrati(n,i))}(e,1),t}function getdumpmacro(e){let t=[];return function _dumpnodo(e){if(e.rows&&e.rows.length)for(let i of e.rows)if(ismacro(i)){i.name;let e=[];if(i.iscad&&i.cadv)for(let t in i.cadv){let n=i.cadv[t];"number"==typeof n&&n&&e.push(`${t}=${n}`)}if(i.pars)for(let t in i.pars){let n=i.pars[t];e.push(`${t}=${n}`)}e.length&&t.push(`--\x3e ${i.name} ${e.join(",")}`),_dumpnodo(i),e.length&&t.push("<--")}else isfn(i)?t.push(`FN: ${i.fn} ${JSON.stringify(i.pars)}`):"string"==typeof i&&i.length&&t.push(i)}(e),t.join("\n")}const Ze=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:e.DoubleSide});function getorientate(e,t,i,n){switch(t=t||0,i=i||0,n=n||0,e.trim().toLowerCase()){case"alp":return{x:i,y:t,z:n};case"apl":return{x:i,y:n,z:t};case"pla":return{x:n,y:t,z:i};case"pal":return{x:n,y:i,z:t};case"lpa":return{x:t,y:n,z:i};default:return{x:t,y:i,z:n}}}function parselavs(e,t,i=0,n=0,r=0,o="",s="",A=""){let a=muClComments(o),l=[];for(let o of a){let A=/^([({}):$\w.\\/]+)[\s;,]*(.*)?$/im.exec(o);if(A&&A[1]){let o={name:A[1].trim().toLowerCase(),...getorientate(e,i,n,r),id:t,facce:s};if(A[2]){let e=getcolonne(A[2]);for(let t of e){let e=t.indexOf("=");e>0&&(o[t.slice(0,e).trim()]=t.slice(e+1).trim())}}l.push(o)}}return!l.length&&A&&l.push({name:A,...getorientate(e,i,n,r),id:t,facce:s}),l}function getemitter(t){let{d:i,name:n,x:r,y:o,z:s,lavs:A="",ids:a="",faces:l=null,size:c=5}=t;a=getcolonne(clean(a,!0));const p=new e.Object3D;if(p.position.set(r,o,s),p.userData={emitter:!0,lavs:A,ids:a,faces:l,size:c,name:n},i){const t=new e.SphereGeometry(c||5,8,8),i=new e.MeshBasicMaterial({color:16711680}),n=new e.Mesh(t,i);p.add(n)}return p.layers.set(29),p}function getreceiver(t,i){t.gmats.__istask=1;let{d:n,ori:r="LAP",x:o=0,y:s=0,z:A=0,tipo:a="",start:l="",end:c=""}=i;a=clean(a,!0);const p=new e.Object3D;if(p.position.set(o/2,s/2,A/2),p.userData={receiver:!0,ori:(r||"").trim().toLowerCase(),x:o,y:s,z:A,tipo:a,start:l,end:c},n){const t=new e.BoxGeometry(o,s,A),i=new e.Mesh(t,Ze);i.position.set(0,0,0),p.add(i)}return p.layers.set(29),p}function calcolatasks(t){const i=new WeakMap,n=new WeakMap;function boxBoxIntersects(e,t,i,n,r){return e.x+t>0&&e.x-t<i&&e.y+t>0&&e.y-t<n&&e.z+t>0&&e.z-t<r}function getFacceToccate(e,t,i,n,r,o){const s=[];function addfaccia(e){o&&!o.includes(e)||s.push(e)}return Math.abs(e.x-0)<t&&addfaccia("s"),Math.abs(e.x-i)<t&&addfaccia("d"),Math.abs(e.y-0)<t&&addfaccia("b"),Math.abs(e.y-n)<t&&addfaccia("a"),Math.abs(e.z-0)<t&&addfaccia("z"),Math.abs(e.z-r)<t&&addfaccia("f"),s.join("")}function getEmitterWorldPosition(t){if(!i.has(t)){const n=new e.Vector3;t.getWorldPosition(n),i.set(t,n)}return i.get(t)}function getReceiverWorldMatrixInverse(e){if(!n.has(e)){const t=e.matrixWorld.clone().invert();n.set(e,t)}return n.get(e)}t.updateMatrixWorld(!0);const r=[],o=[];!function scan(e){e.userData?.receiver&&r.push(e),e.userData?.emitter&&o.push(e),e.children&&e.children.forEach(scan)}(t);let s=[];for(const t of r){const{mat:i,ori:n,x:r,y:A,z:a,start:l,end:c,tipo:p,size:h}=t.userData;let g={id:i,...getorientate(n,r,A,a),tipo:p,ori:n,lavs:[]};l&&g.lavs.push(...parselavs(n,"_start",0,0,0,l,"",""));const u=getReceiverWorldMatrixInverse(t);for(const t of o){if("string"==typeof p&&""!==p){const e=t.userData.ids;if(Array.isArray(e)&&e.length>0&&!e.includes("*")&&!e.includes(p))continue}const i=getEmitterWorldPosition(t).clone().applyMatrix4(u).clone().add(new e.Vector3(r/2,A/2,a/2));if(!boxBoxIntersects(i,t.userData.size??0,r,A,a))continue;const o=getFacceToccate(i,t.userData.soglia??2,r,A,a,t.userData.faces);o&&o.length&&g.lavs.push(...parselavs(n,t.userData.name,i.x,i.y,i.z,t.userData.lavs,o,"nd"))}c&&g.lavs.push(...parselavs(n,"_end",0,0,0,c,"","")),g.lavs.length&&s.push(g)}return s}function getbb(t,i=!1){if(!i&&t.userData.bb)return t.userData._boundingbox;const n=(new e.Box3).setFromObject(t);return t.userData._boundingbox=n,n}function setorigine(t,i=0,n=0,r=0){const o=getbb(t).min,s=new e.Group;return s.add(t),t.position.sub(new e.Vector3(o.x+i,o.y+n,o.z+r)),s}function scalaoggetto(t,i,n={}){const r=getbb(i),o=new e.Vector3;r.getSize(o);const s=r.min,A=["x","y","z","u","v"],a={};for(let e of A){let t=n[e];if(void 0===t)a[e]={s:1};else if("number"==typeof t)a[e]={s:t};else if("object"==typeof t){let i=t.s??1,n="x"===e?o.x:"y"===e?o.y:o.z,r="x"===e?s.x:"y"===e?s.y:s.z;void 0!==t.distperc&&(t.dist=n*t.distperc),void 0!==t.dist&&(i=(n+t.dist)/n);let A=t.p1?t.p1+r:void 0,l=t.p2?t.p2+r:void 0;void 0!==t.p1perc&&(A=r+n*t.p1perc),void 0!==t.p2perc&&(l=r+n*t.p2perc),a[e]={s:i,p1:A,p2:l}}}if(A.every((e=>void 0===a[e].p1||void 0===a[e].p2))){if(1===a.x.s&&1===a.y.s&&1===a.z.s)return i;const t=new e.Group;return t.scale.set(a.x.s,a.y.s,a.z.s),t.add(i),t}const l=hash(`${i.uuid}|${JSON.stringify(a)}`);if(t.meshes[l])return t.meshes[l];const c={};A.forEach((e=>{const{s:t,p1:i,p2:n}=a[e];c[e]=!(1===t&&void 0===i&&void 0===n)}));const p=i.clone(!0);return delete p?.userData._boundingbox,p.traverse((e=>{if(e.isMesh){const t=e.scale.clone();e.geometry=e.geometry.clone();const i=e.geometry.attributes.position,n=e.geometry.attributes.uv,trasf=(e,t)=>{if(!c[t])return e;const{s:i,p1:n,p2:r}=a[t];if(void 0===n||void 0===r)return e*i;const o=r*i-r;if(e<n)return e;if(e>=r)return e+o;return n+(e-n)*((r-n+o)/(r-n))};if(i&&(c.x||c.y||c.z)){const t=i.array;for(let e=0;e<t.length;e+=3)c.x&&(t[e]=trasf(t[e],"x")),c.y&&(t[e+1]=trasf(t[e+1],"y")),c.z&&(t[e+2]=trasf(t[e+2],"z"));i.needsUpdate=!0,e.geometry.computeVertexNormals()}if(n&&(c.u||c.v)){const e=n.array;for(let t=0;t<e.length;t+=2)c.u&&(e[t]=trasf(e[t],"u")),c.v&&(e[t+1]=trasf(e[t+1],"v"));n.needsUpdate=!0}e.scale.set(t.x*a.x.s,t.y*a.y.s,t.z*a.z.s)}})),t.meshes[l]=p,p}function posiziona(t,i={}){let n=new e.Group;if(t){let r=function deepclone(e){if(!e)return null;const t=e.clone();return function checkchildren(e,t){if(e.onBeforeRender&&(t.onBeforeRender=e.onBeforeRender),e.onAfterRender&&(t.onAfterRender=e.onAfterRender),e.userData&&(t.userData={...e.userData}),e.children||e.children.length)for(let i=0;i<e.children.length;i++)checkchildren(e.children[i],t.children[i])}(e,t),t}(t),o=r,{noingombro:s=!1,marker:A="",markerid:a="",marklink:l="",sl:c=0,sa:p=0,sp:h=0,ax:g=0,ay:u=0,az:d=0,ul:f=0,ua:I=0,up:m=0,scale:b=1,scx:C=b,scy:B=b,scz:y=b,emitters:E,emittersname:x,order:w,ignoreTraverse:P}=i;if("number"==typeof w&&r.traverse((e=>{e.isMesh&&(e.renderOrder=w)})),n.position.set(c,p,h),n.rotation.set(g*Ue,u*Ue,d*Ue),(f||I||m)&&(o=new e.Group,o.add(r),o.position.set(f,I,m)),n.scale.set(C,B,y),n.add(o),A&&a&&(n.userData.marker=A,n.userData.markerid=`#mk_${a||""}`,n.userData.marklink=l),s&&(n.userData.noingombro=!0),P&&(n.userData.ignoreTraverse=!0),E&&E.length)for(let e of E)e.name=e.name||x,n.add(getemitter(e))}return n.updateMatrixWorld(!0),n}const $e=e.DoubleSide;let et=new e.LineBasicMaterial({color:16711680,transparent:!1,opacity:1}),tt=new e.LineBasicMaterial({color:11579568,transparent:!1,opacity:1});const it=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:$e}),nt=new e.MeshStandardMaterial({color:8421504,roughness:.5,metalness:.4,side:$e}),rt=new e.MeshStandardMaterial({color:11579568,roughness:.5,metalness:.4,side:$e}),ot=new e.MeshStandardMaterial({color:16711680,roughness:.5,metalness:.4,side:$e}),st=new e.MeshStandardMaterial({color:1982639,roughness:.5,metalness:.4,side:$e}),At=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:$e}),at=new e.MeshStandardMaterial({color:0,roughness:.5,metalness:.4,side:$e}),lt=.001;function groupfromgeometry(t,i,n,r,o,s,A){let a=new e.Group;a.position.set(n,r,o),a.name=s;const l=new e.Mesh(t,i);l.name=s,l.castShadow=!0,l.receiveShadow=!0,l.layers.set(A);const c=new e.EdgesGeometry(t),p=new e.LineSegments(c,et);return p.layers.set(30),a.add(l),a.add(p),a}function edgesfromgeometry(t,i=30){return getlinesgeom(new e.EdgesGeometry(t,40),i)}function getlinesgeom(t,i=30){const n=new e.LineSegments(t,et);return n.layers.set(i),n}function getmesh(t,i,n=1,r=!1){let o=new e.Mesh(t,r?i.clone():i);return o.castShadow=!0,o.receiveShadow=!0,o.layers.set(n),o}function get3dshape(t,i,n){if(!t||t.length<3)return new e.BufferGeometry;const r=[];for(let e=0;e<t.length;e++){const i=t[e],n=t[(e+1)%t.length];r.push(i.x,0,i.y),r.push(n.x,0,n.y)}const o=new e.BufferGeometry;o.setAttribute("position",new e.Float32BufferAttribute(r,3));let s=new e.LineSegments(o,i);return s.layers.set(n),s}function creategroup(t,i={}){let{ignoreTraverse:n}=i,r=new e.Group;return r.name=t||"$$",n&&(r.userData.ignoreTraverse=!0),r}function svuotanodo(e){!function _dispose(e){if(e.children.length){[...e.children].forEach((t=>{_dispose(t),e.remove(t)}))}e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach((e=>e.dispose())):e.material.dispose())}(e)}function deletegroup(e,t){if(!e?.children)return;let i=e.children.find((e=>e.name==t));if(i){for(;i.children.length>0;){const e=i.children[0];i.remove(e)}i.parent&&i.parent.remove(i),i=null}}function randombasemat(){const t=new e.LineBasicMaterial,i=new e.Color;return i.setHSL(Math.random(),.7,.4),t.color=i,t}function getspriteid(t,i=5,n="#000"){const r=document.createElement("canvas"),o=r.getContext("2d");o.font="48px sans-serif";const s=Math.ceil(o.measureText(t).width)+16;r.width=s,r.height=64,o.font="48px sans-serif",o.textBaseline="middle",o.fillStyle="rgba(0,0,0,0)",o.fillRect(0,0,s,64),o.fillStyle=n,o.fillText(t,8,32);const A=new e.CanvasTexture(r);A.needsUpdate=!0,A.minFilter=e.LinearFilter;const a=new e.SpriteMaterial({map:A,transparent:!0}),l=new e.Sprite(a),c=i/20;return l.scale.set(s*c,64*c,1),l}function getline(t,i,n=null){const r=(new e.BufferGeometry).setFromPoints([new e.Vector3(t.p1.x,0,t.p1.y),new e.Vector3(t.p2.x,0,t.p2.y)]);let o=new e.Line(r,n||randombasemat());if(i){let e=getspriteid(i||"",8,"#F00");e.position.set((t.p1.x+t.p2.x)/2,0,(t.p1.y+t.p2.y)/2),o.add(e)}return o}function getpoint(t,i,n=null,r=5){let o;const s=new e.SphereGeometry(r,8,8);if(o=new e.Mesh(s,n||randombasemat()),i){let e=getspriteid(i||"",r);e.position.set(1.2*r,0,1.2*r),o.add(e)}return o.position.set(t.x,0,t.y),o}async function smat(t,i,n={}){n||(n={});let r=hash(i+JSON.stringify(n));return t.smats[r]||(t.smats[r]=await async function smat0(t,i,n={}){let r=i,o="",s=!1;const A={"":{prop:"map",extra:null},h:{},n:{prop:"normalMap",extra:null},a:{prop:"aoMap",extra:"aoMapIntensity"},r:{prop:"roughnessMap",extra:null},t:{prop:"alphaMap",extra:null},m:{prop:"metalnessMap",extra:null},e:{prop:"emissiveMap",extra:["emissive","emissiveIntensity"]}};function getFilesToLoad(e,t){let i=[],n=t.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!n)return{base:t,files:i};let r=n[1],o=!1,s=n[3]||r,a=n[4]||n[5]||"";!a.includes("h")&&e||i.push({suff:"",file:`${s}.webp`,cs:!0});for(let e of a)"t"==e?(o=!0,n[3]&&A[e]&&i.push({suff:e,file:`${s}_${e}.webp`,cs:!1})):"h"!=e&&A[e]&&i.push({suff:e,file:`${s}_${e}.webp`,cs:!!["","e"].includes(e)});return{base:r,files:i,transparent:o}}i.startsWith("#")&&(s=!0,/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})(?=$|[[(])/.test(i)||(i=i.slice(1)));let a=i;const l=i.match(/^(.*)\[([^\]]+)\]$/);l&&(a=l[1],o=l[2]);const c={};o&&o.split(/[,;]/).forEach((e=>{let[t,i]=e.split("=").map((e=>e.trim()));void 0!==i&&(["e"].includes(t)?c[t]=i.startsWith("0x")?parseInt(i):parseFloat(i):isNaN(parseFloat(i))?c[t]=i:c[t]=parseFloat(i))}));const p={s:["sx","sy"],sx:["sx"],sy:["sy"],rot:["rot"],br:["brightness"],r:["roughness"],m:["metalness"],h:["bumpScale"],n:["normalScale"],d:["bumpScale"],b:["bumpScale"],e:["emissiveIntensity"],ec:["emissive"],env:["envMapIntensity"],o:["opacity"],t:["transparent"],at:["alphaTest"]};let h=n.rot,g=parseFloat(n.s)||1;delete n.s;let u={...n};for(let e in c)if(p[e])for(let t of p[e])u[t]=c[e];let d=!!u?.transparent,f=(u.sx??u.s??c.sx??c.s??1)*g,I=(u.sy??u.s??c.sy??c.s??1)*g,m=Number((c.rot??0)+(h??0))*Ue;try{let n={roughness:u.roughness??.5,metalness:u.metalness??0,side:e.DoubleSide,envMapIntensity:u.env??1};if(void 0!==u.normalScale){let t=Number(u.normalScale);isNaN(t)||0===t||(n.normalScale=new e.Vector2(t,t))}let r=!1,o=!1;if(i.includes("(")||s){let{base:i,files:l,transparent:c}=getFilesToLoad(s,a);if(d=c,l.some((e=>"n"===e.suff))&&(l=l.filter((e=>"h"!==e.suff))),0===u.roughness&&(l=l.filter((e=>"r"!==e.suff))),0===u.metalness&&(l=l.filter((e=>"m"!==e.suff))),0===u.emissiveIntensity&&(l=l.filter((e=>"e"!==e.suff))),l&&l.length){let i=await Promise.all(l.map((e=>t.tex(e.file,f,I,m).catch((()=>null)))));for(let t=0;t<l.length;t++){let s=i[t];if(!s)continue;s.isTexture&&(s.colorSpace=l[t].cs?e.SRGBColorSpace:e.LinearSRGBColorSpace);let a=l[t].suff,{prop:c,extra:p}=A[a];n[c]=s,"map"===c&&(n._hasMap=!0),"normalMap"===p?(r=!0,n.normalMap=s,delete s.colorSpace,s.needsUpdate=!0,n.normalScale=n.normalScale??new e.Vector2(1,1)):"bumpScale"===p?(o=!0,n.bumpMap=s):Array.isArray(p)&&p.includes("emissive")&&void 0!==u.emissiveIntensity&&0!==u.emissiveIntensity&&(n.emissive=u.emissive||16777215,n.emissiveIntensity=u.emissiveIntensity??1)}}s&&(n.color=new e.Color(i),n._hasColor=!0)}else if(a.includes(".")){let e=await t.tex(a,f,I,m);if(!e)return it;n.map=e,n._hasMap=!0}if(r&&o?delete n.bumpMap:o&&(n.bumpScale=u.bumpScale??.03),n.transparent=!!d,n.transparent&&(n.depthWrite=!1,n.opacity=u?.opacity??1),void 0!==u.brightness){let t=Number(u.brightness);!isNaN(t)&&t>0&&1!==t&&(n.color||(n.color=new e.Color(1,1,1)),n.color.multiplyScalar(t))}return n._hasMap&&!n._hasColor&&(n.color=new e.Color(1,1,1)),n._hasColor&&!n._hasMap&&delete n.map,new e.MeshStandardMaterial(n)}catch(e){return console.log("errore mat:",e.message,r),it}}(t,i,n)),t.smats[r]}async function extractTextures(e,t){const i={},n=[];function getName(e){i[e]=(i[e]||0)+1;let n=t;return e&&(n+=`_${e}`),i[e]>1&&(n+=i[e]),`${n}.webp`}return e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const[t,{prop:i}]of Object.entries(suffissoMap)){const r=e[i];if(r&&r.image&&!r._extracted){r._extracted=!0;let e,i=r.image;if(i.toBlob)e=new Promise((e=>i.toBlob(e,"image/webp")));else if(i instanceof ImageBitmap){const t=document.createElement("canvas");t.width=i.width,t.height=i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}else{if(!(i instanceof HTMLImageElement))continue;{const t=document.createElement("canvas");t.width=i.naturalWidth||i.width,t.height=i.naturalHeight||i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}}n.push(e.then((e=>new File([e],getName(t),{type:"image/webp"}))))}}}})),e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const{prop:t}of Object.values(suffissoMap)){const i=e[t];i&&i._extracted&&delete i._extracted}}})),Promise.all(n)}function uvswap(e,t=!1,i=!0){if(e&&e.attributes){const n=i?lt:1,r=e.attributes.uv;if(r){const e=r.array;for(let r=0,o=e.length;r<o;r+=2)if(t){const t=e[r];e[r]=e[r+1]*n,e[r+1]=t*n}else i&&(e[r]*=n,e[r+1]*=n);r.needsUpdate=t||i}const o=e.attributes.uv2;if(o){const e=o.array;for(let i=0,r=e.length;i<r;i+=2)if(t){const t=e[i];e[i]=e[i+1]*n,e[i+1]=t*n}else e[i]*=n,e[i+1]*=n;o.needsUpdate=!0}e.computeTangents?.()}}function getfakeshadow2(t,i,n){const r=(new e.Shape).moveTo(0,0).lineTo(t,0).lineTo(t,i).lineTo(0,i).lineTo(0,0),o=new e.ShapeGeometry(r),s=o.attributes.position,A=new Float32Array(2*s.count);for(let e=0;e<s.count;e++)A[2*e]=s.getX(e)/t,A[2*e+1]=s.getY(e)/i;o.setAttribute("uv",new e.BufferAttribute(A,2));const a=new e.MeshBasicMaterial({map:n,transparent:!0,alphaTest:.01,depthWrite:!1,side:e.DoubleSide}),l=new e.Mesh(o,a);return l.layers.set(9),l.rotation.x=Math.PI/2,l}function getfakeshadow(t,i,n){let r=`fk${i.key}${n}`,{p1:o,width:s,height:A}=i.dims();t.texture||(t.texture={});let a=t.texture[r];a||(a=function createBlurredShadowTextureFromPoints(t,i=256,n=32,r=.2,o,s,A){if(!s||!A||!t.pt||t.pt.length<2)return;const a=o.x,l=o.y,c=s,p=A,h=t.pt,g=2*n,u=document.createElement("canvas");u.width=i+2*g,u.height=i+2*g;const d=u.getContext("2d");d.save(),d.translate(g,g),d.scale(i/c,i/p),d.translate(-a,-l),d.filter=`blur(${n}px)`,d.beginPath(),d.moveTo(h[0].x,h[0].y);for(let e=1;e<h.length;e++)d.lineTo(h[e].x,h[e].y);d.closePath(),d.fillStyle=`rgba(0,0,0,${r})`,d.fill(),d.restore();const f=new e.CanvasTexture(u);return f.needsUpdate=!0,f}(i,256,32,n,o,s,A),t.texture[r]=a);const l=function pointsToShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i}(i.pt),c=new e.ShapeGeometry(l);!function applyUVtoShapeGeometry(t,i,n,r,o){const s=t.attributes.position,A=[];for(let e=0;e<s.count;e++){const t=s.getX(e),a=s.getY(e);A.push((t-i)/r,(a-n)/o)}t.setAttribute("uv",new e.Float32BufferAttribute(A,2))}(c,o.x,o.y,s,A);const p=new e.MeshBasicMaterial({map:a,transparent:!0,depthWrite:!1,side:e.DoubleSide});let h=new e.Mesh(c,p);return h.layers.set(9),h.rotation.x=Math.PI/2,h}function addmovpivot(t,i,n,r={},o=0,s=0,A=0){if(n=clean(n,!0),!t.movs[n])return i;t.movs[n];const a=new e.Vector3(o,s,A),l=0===a.lengthSq(),c=new e.Group;c.name=`pivot_${n}`;const p=new e.Group;if(p.name=`mov_${n}`,l)c.position.copy(i.position),c.quaternion.copy(i.quaternion),i.position.set(0,0,0),i.rotation.set(0,0,0);else{const t=a.clone().applyMatrix4(i.matrixWorld);c.position.copy(t);const n=a.clone().negate();i.position.add(n),c.quaternion.copy(i.getWorldQuaternion(new e.Quaternion)),i.rotation.set(0,0,0)}return p.add(i),c.add(p),r||(r={}),r.inmov=!1,r.key=n,r.dt=0,r.dtstart=!1,p.userData.mov={...r},c}function getmovimento(e,t=[]){let i=0,n=[];const _cleartimeline=()=>{n=[],i=0},_add=(e,t={})=>{e&&n.push({...t,time:e}),i=n.reduce(((e,t)=>e+(t.time||0)),0)};_cleartimeline(),t&&t.length&&t.forEach((e=>_add(e.time,e)));const _resetmov=e=>{const{mov:t}=e?.userData||{};t&&(t.inmov=!1,e.position.set(0,0,0),e.scale.set(1,1,1),e.rotation.set(0,0,0))};return{get tline(){return i},clear:_cleartimeline,add:_add,key:e,step:(e,t)=>{if(!e||!e.userData?.mov||!i)return;const{mov:r}=e.userData;if(!r.inmov)return;let o=r.dt-r.dtstart;if(r.ripeti)o%=i;else if(o>i)return void _resetmov(e);let s=0,A=0,a=0,l=0,c=0,p=0,h=1,g=1,u=1,d=null,f=0;for(let e of n){if(f+=e.time,o<f){const t=e.time>0?(o-(f-e.time))/e.time:1,_calc=(e,i=0)=>"function"==typeof e?e(r)*t:(e||i)*t;s+=_calc(e.x),A+=_calc(e.y),a+=_calc(e.z),h*=1+_calc(e.sx??e.s,0),g*=1+_calc(e.sy??e.s,0),u*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,p+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(r)*t:e.t*t);break}{const _calc=(e,t=0)=>"function"==typeof e?e(r):e||t;s+=_calc(e.x),A+=_calc(e.y),a+=_calc(e.z),h*=1+_calc(e.sx??e.s,0),g*=1+_calc(e.sy??e.s,0),u*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,p+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(r):e.t)}}e.position.set(s,A,a),e.scale.set(h,g,u),e.rotation.set(l,c,p),null!==d&&e.traverse((e=>{if(e.material){(Array.isArray(e.material)?e.material:[e.material]).forEach((e=>{e.transparent&&(e.opacity=1-d)}))}})),t&&t(e,o)},reset:_resetmov}}let ct=null,pt=null;function getriferimento(t,i=0,n=0,r=0,o="rif"){"string"==typeof t&&(t={testo:t});let s=new e.Object3D;return s.position.set(i,n,r),o&&(s.name=o),s.userData={tipo:"rif",...t},s}function gettarghetta(t,i,n=100,r={}){const{noSfondo:o=!1,forcey:s=!1,coloreSfondo:A="white",coloreBordo:a="gray",spessoreBordo:l=2,padding:c=8,layer:p=21,size:h=24,fontFamily:g="Arial",raggioAngoli:u=10,order:d=0,variant:f,tooltip:I,billboard:m=!1}=r;i=(i||"").replaceAll("\\n","\n");let b=hash(`T:${A}|${a}|${g}|${c}|${l}|${u}|${o}|${i}|${f}|${m}`);const C=h??24;i=i.split("\n").map((e=>{let t=C,i=!1,n=!1,r="black";e=e.trim();let o=/^\s*#(\w)([bi]?)([\d.]*)[,;](.*)$/.exec(e);if(o)switch(t=parseFloat(o[3]||1)*C,"b"===o[2]&&(i=!0),"i"===o[2]&&(n=!0),e=o[4],o[1].toLowerCase()){case"r":r="red";break;case"g":r="green";break;case"b":r="blue";break;case"w":r="white";break;case"c":r="cyan"}return{testo:e,size:t,color:r,bold:i,italic:n}})).filter((e=>e.testo));const{canvas:B,context:y}=function getGlobalCanvas(){return ct||(ct=document.createElement("canvas"),pt=ct.getContext("2d",{willReadFrequently:!0})),{canvas:ct,context:pt}}();let E=0,x=2*c;i.forEach(((e,t)=>{const{testo:n,size:r=12}=e,o=2*r;y.font=`${o}px ${g}`;const s=y.measureText(n).width,A=o*(t==i.length-1?1:1.2);E=Math.max(E,s),x+=A})),E+=2*c;const w=x/E||1;let P,v;if(s?(v=n,P=Math.ceil(v/w)):(P=n,v=Math.ceil(P*w)),!t.textures[b]){const n=Math.floor(E+2*l),r=Math.floor(x+2*l);(B.width<n||B.height<r)&&(B.width=Math.max(B.width,n),B.height=Math.max(B.height,r)),y.clearRect(0,0,n,r);const s=new e.Color(A),p=`rgb(${Math.floor(255*s.r)}, ${Math.floor(255*s.g)}, ${Math.floor(255*s.b)})`,h=new e.Color(a),d=`rgb(${Math.floor(255*h.r)}, ${Math.floor(255*h.g)}, ${Math.floor(255*h.b)})`,f=u;y.beginPath(),o||(drawRoundedRect(y,0,0,n,r,f+l/2),y.fillStyle=d,y.fill(),y.beginPath(),drawRoundedRect(y,l,l,n-2*l,r-2*l,f-l/2),y.fillStyle=p,y.fill());let I=c+l;i.forEach((e=>{const{testo:t,size:i=12,color:r="black",bold:o,italic:s}=e,A=2*i;y.font=`${o?"bold ":s?"italic ":""}${A}px ${g}`,y.fillStyle=r,y.textAlign="center",y.textBaseline="top",y.fillText(t,n/2,I),I+=1.2*A}));const m=y.getImageData(0,0,n,r),C=new e.DataTexture(m.data,m.width,m.height,e.RGBAFormat);C.needsUpdate=!0,C.flipY=!0,C.minFilter=e.LinearFilter,C.magFilter=e.LinearFilter,t.textures[b]=C}const D=new e.MeshBasicMaterial({map:t.textures[b],transparent:!0,alphaTest:.5,side:$e}),S=new e.PlaneGeometry(P,v),M=new e.Mesh(S,D);return M.layers.set(p),M.renderOrder=d,M.userData={dimx:P,dimy:v,noingombro:!0},f&&(M.userData.pickvariant=!0,M.userData.variant=f,M.userData.tooltip=I),m&&(M.up.set(0,0,1),M.layers.set(21),M.onBeforeRender=(e,t,i)=>{M.quaternion.copy(i.quaternion)}),M}function drawRoundedRect(e,t,i,n,r,o){o=Math.min(o,Math.min(n/2,r/2)),e.moveTo(t+o,i),e.lineTo(t+n-o,i),e.quadraticCurveTo(t+n,i,t+n,i+o),e.lineTo(t+n,i+r-o),e.quadraticCurveTo(t+n,i+r,t+n-o,i+r),e.lineTo(t+o,i+r),e.quadraticCurveTo(t,i+r,t,i+r-o),e.lineTo(t,i+o),e.quadraticCurveTo(t,i,t+o,i),e.closePath()}function getquota(t,i,n,r,o,s,A={}){const{altezza:a=30,offset:l=0,piano:c="xy",layer:p=22,delta:h=5,spessoreLinea:g=3}=A,pp=(e,t)=>"xz"===c?[e,0,t]:"yz"===c?[0,e,t]:[e,t,0],u=new e.Group;u.name="quota";const d=o-n,f=s-r,I=Math.sqrt(d*d+f*f),m=Math.atan2(f,d);i||(i="$$"),i.includes("$$")&&(i=i.replace("$$",`${I.toFixed(1)}`));let b=i.split("\n").length;const C=-Math.sin(m)*l,B=Math.cos(m)*l,y=gettarghetta(t,i,2*a*b,{noSfondo:!0,layer:p,forcey:!0}),{dimx:E,dimy:x}=y.userData;function getCilindro(i,n,r){const o=(new e.Vector3).subVectors(n,i),s=o.length();let A,a=hash(`c:${r}|${s}`);t.geo[a]?A=t.geo[a]:(A=new e.CylinderGeometry(r/2,r/2,s,3,1,!0),t.geo[a]=A);const l=new e.Mesh(A,at);l.position.copy(i).add(o.multiplyScalar(.5));const c=(new e.Vector3).copy(n);return l.lookAt(c),l.rotateX(Math.PI/2),l}if(E>I-h){y.position.set(I/2,2*a,0);const t=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(I,0)),g);u.add(t)}else{const t=E+h,i=(I-t)/2,n=i+t,r=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(i,0)),g);u.add(r);const o=getCilindro(new e.Vector3(...pp(n,0)),new e.Vector3(...pp(I,0)),g);u.add(o),y.position.set(...pp(I/2,0))}const w=l>a/2?-l:-a/2,P=-l>a/2?-l:a/2,v=new e.Vector3(...pp(0,w)),D=new e.Vector3(...pp(0,P)),S=new e.Vector3(...pp(I,w)),M=new e.Vector3(...pp(I,P)),L=getCilindro(v,D,g);u.add(L);const T=getCilindro(S,M,g);return u.add(T),y.userData.updateOrientation=function(e){e&&this.quaternion.copy(e.quaternion)},u.add(y),u.userData.noingombro=!0,"xy"===c?(u.position.set(n+C,r+B,0),u.rotation.z=m):"xz"===c?(u.position.set(n+C,0,r+B),u.rotation.y=-m):"yz"===c&&(u.position.set(0,n+C,r+B),u.rotation.x=m),u.traverse((function(e){e.layers.set(p)})),u}function fillNoise(t,i,n={}){let{scale:r=8,octaves:o=3,persistence:s=.5,seed:A=0,contrast:a=1,color1:l="#000000",color2:c="#ffffff",alpha1:p=1,alpha2:h=1}=n;const g=new e.Color(l),u=new e.Color(c),fade=e=>e*e*e*(e*(6*e-15)+10),lerp=(e,t,i)=>e+(t-e)*i,d=i,f=new Uint16Array(2*d);let I=0|Math.floor(65536*A);for(let e=0;e<d;e++)f[e]=e;for(let e=0;e<d;e++){const t=Math.floor((I^=I<<13,I^=I>>17,I^=I<<5,(I<0?1+~I:I)%65536/65536*d));[f[e],f[t]]=[f[t],f[e]]}for(let e=0;e<d;e++)f[d+e]=f[e];const m=[[1,1],[-1,1],[1,-1],[-1,-1],[1,0],[-1,0],[0,1],[0,-1]];function grad(e,t){const i=f[(f[e%d]+t)%d]%8;return m[i]}function perlin(e,t,i,n){const r=Math.floor(e)%i,o=Math.floor(t)%n,s=e-Math.floor(e),A=t-Math.floor(t),a=grad(r,o),l=grad(r+1,o),c=grad(r,o+1),p=grad(r+1,o+1),h=a[0]*s+a[1]*A,g=l[0]*(s-1)+l[1]*A,u=c[0]*s+c[1]*(A-1),d=p[0]*(s-1)+p[1]*(A-1),f=fade(s),I=fade(A);return lerp(lerp(h,g,f),lerp(u,d,f),I)}let b=1/0,C=-1/0;const B=new Float32Array(i*i);for(let e=0;e<i;e++)for(let t=0;t<i;t++){let n=t/i*r,A=e/i*r,a=1,l=1,c=0,p=0;for(let e=0;e<o;e++){c+=perlin(n*l,A*l,d/l,d/l)*a,p+=a,a*=s,l*=2}let h=c/p;B[e*i+t]=h,h<b&&(b=h),h>C&&(C=h)}const y=1/(C-b);for(let e=0;e<i;e++)for(let n=0;n<i;n++){let r=(B[e*i+n]-b)*y;r=Math.pow(r,a);const o=g.r+(u.r-g.r)*r,s=g.g+(u.g-g.g)*r,A=g.b+(u.b-g.b)*r,l=0,c=4*(e*i+n);t[c]=Math.floor(255*o),t[c+1]=Math.floor(255*s),t[c+2]=Math.floor(255*A),t[c+3]=Math.floor(255*l)}}function texgen(t,i,n=256,r={}){[16,32,64,128,256,512,1024].includes(n)||(n=256);let o=hash(`gen|${i}|${n}|${JSON.stringify(r)}`);if(!t[o]){const s=new Uint8Array(n*n*4);switch(i){case"wood":let e={...r};e.scale=6+seeder(40,r.seed+"a")/10,e.octaves=r.octaves||3,e.persistence=.5+seeder(50,r.seed+"b")/100,e.rings=2+seeder(200,r.seed+"c")/100,e.distortion=.3+seeder(100,r.seed+"d")/300,e.color1=r.color1||"#442200",e.color2=r.color2||"#ffe0a0",fillNoise(s,n,e);break;case"marble":let t={...r};t.scale=r.scale||10,t.octaves=r.octaves||3,t.persistence=r.persistence||.6,t.rings=r.rings||1+seeder(100,r.seed+"m3")/50,t.distortion=r.distortion||.8+seeder(200,r.seed+"m4")/200,t.contrast=r.contrast||1.2,t.color1=r.color1||"#e0e0e0",t.color2=r.color2||"#909090",fillNoise(s,n,t);break;case"glass":let i={...r};i.scale=r.scale||32,i.octaves=r.octaves||2,i.persistence=r.persistence||.8,i.contrast=r.contrast||1,i.color1=r.color1||"rgba(255,255,255,0.2)",i.color2=r.color2||"rgba(255,255,255,0.6)",fillNoise(s,n,i);break;case"gradient":case"pattern":break;default:fillNoise(s,n,r)}const A=new e.DataTexture(s,n,n,e.RGBAFormat);A.needsUpdate=!0,A.wrapS=A.wrapT=e.RepeatWrapping,A.repeat.set(.002,.002),A.center.set(.5,.5),t[o]=A}return t[o]}function getcilindro(t,i,n,r,o,s=it,A){A||(A={}),Array.isArray(s)||(s=[s]);const a=function cylgeometry(t,i,n,r,o=16){if(!n||!i)return null;let s=hash(`cy${i}|${n}|${r||n}|${o}`);if(!t.geo[s]){const A=new e.CylinderGeometry(r||n,n,i,o);t.geo[s]=A}return t.geo[s]}(t,n,r,o,A.sides||16);let l=new e.Group;switch((i||"").trim().toUpperCase()){case"X":case"L":l.position.set(n/2,0,0),l.rotation.z=Math.PI/2;break;case"Z":case"P":l.position.set(0,0,n/2),l.rotation.x=Math.PI/2;break;default:l.position.set(0,n/2,0)}if(a){if(!A.nolines){let e=edgesfromgeometry(a);l.add(e)}uvswap(a,A.uvswap,!1);const e=s[0]||it,t=s[1]||e,i=s[2]||e;l.add(getmesh(a,[e,t,i]))}return l}function facesettile(e,t,i,n){if(t>1||i>1){let r=n%(t=t??1);const o=1/t,s=1/(i=i??1),A=r*o,a=1-((n-r)/t+1)*s,l=A+o,c=a+s,p=e.geometry.attributes.uv,h=[[A,c],[l,c],[A,a],[l,a]];for(let e=0;e<p.count;e++)p.setXY(e,h[e][0],h[e][1]);p.needsUpdate=!0}}function pickvariant(e,t,i,n,r,o,s={}){let A,{mat:a,testo:l,matover:c}=s;return a?(A=getface(e,t,i,a,s),c&&(c=c.clone(),c.depthTest=!1,c.depthWrite=!1,A.userData.matover=c)):(l=l||"xx",A=gettarghetta(e,l,t,s)),A.layers.disableAll(),A.layers.set(30),A.userData.pickvariant=!0,A.userData.variant=n,A.userData.value=r,A.userData.tooltip=o,A}function getface(t,i,n,r,o={}){let{repeat:s,order:A,center:a=!1,base:l=!1,billboard:c=!1}=o;const p=hash(`f:${i}|${n}|${s?1:0}|${l?1:0}`);if(!t.geo[p]){const r=new e.PlaneGeometry(i,n);let o=l?-.5:0;const A=r.attributes.uv;if(s)for(let e=0;e<A.count;e++)A.setXY(e,A.getX(e)*i/1e3,A.getY(e)*n/1e3);else{const e=[[0,1],[1,1],[0,0],[1,0]];for(let t=0;t<A.count;t++){const i=e[t];A.setXY(t,i[0]-o,i[1]-o)}}A.needsUpdate=!0,t.geo[p]=r}c&&((r=r.clone()).depthTest=!1,r.depthWrite=!1);const h=new e.Mesh(t.geo[p],r);if(h.name=c?"billboard":"face","number"==typeof A&&(h.renderOrder=A),a||h.position.set(i/2,n/2,0),r?.transparent&&h.layers.set(2),c){h.layers.disableAll(),h.layers.set(30),h.userData.billboard=!0;let t=new e.Quaternion,i=new e.Quaternion;h.onBeforeRender=function(e,n,r){this.getWorldQuaternion(t),this.parent?.getWorldQuaternion(i),this.quaternion.copy(r.quaternion),this.quaternion.premultiply(i.invert())}}return h}function getbox(t,i,n,r,o,s){o&&o.isMaterial||(s=o,o=void 0),s||(s={});let{center:A=!1,nolines:a,centerbase:l=!1,px:c=0,py:p=0,pz:h=0}=s;const g=new e.BoxGeometry(i,n,r),u=new e.Group;if(l?u.position.set(0,n/2,0):c||p||h?u.position.set(c||0,p||0,h||0):A||u.position.set(i/2,n/2,r/2),!a||!o){let e=edgesfromgeometry(g);u.add(e)}return o&&u.add(getmesh(g,o)),u}function getcyl(t,i,n,r,o){o||(o={});let{center:s=!1,nolines:A=!1,segments:a=16,top:l=-1,bottom:c=-1,heightSegments:p=1,openEnded:h=!1,thetaStart:g=0,thetaLength:u=2*Math.PI}=o;l<0&&(l=n),c<0&&(c=n);const d=new e.CylinderGeometry(l,c,i,a,p,h,g,u);uvswap(d,o.uvswap,!1);const f=getmesh(d,r||it),I=new e.Group;if(I.add(f),I.position.set(0,s?0:i/2,0),!A){let e=edgesfromgeometry(d);I.add(e)}return I}function getsphere(t,i,n,r){r||(r={});let{nolines:o,segmenti:s=16}=r,A=new e.Group;const a=new e.SphereGeometry(i,2*s,s);if(!o){let e=edgesfromgeometry(a);A.add(e)}return A.add(getmesh(a,n||it)),A}function makeShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}function getextrude(t,i,n=10,r=[],o=void 0,s={}){o&&o.isMaterial||(s=o,o=void 0),s=s??{};let{stonda:A,sx:a,sy:l,round:c,nolines:p}=s,h=hash(`${JSON.stringify(i)}|${n}|${JSON.stringify(s)}|${JSON.stringify(r)}`);a=a??A??0,l=l??A??0;let g=t.geo[h];if(!g){const o=makeShape(i);r.forEach((t=>o.holes.push(function makePath(t){const i=new e.Path;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}(t))));const A=a>0&&l>0;g=new e.ExtrudeGeometry(o,{depth:n,bevelEnabled:A,bevelSize:a,bevelThickness:l,bevelSegments:A?c?3:1:0,curveSegments:A?10:1}),t.geo[h]=g,uvswap(g,s.uvswap,!0)}let u=new e.Group;return u.add(new e.Mesh(g,o||it)),p||function extrudelines(t,i,n,r,o=3){const makeloop=(t,i)=>{if(!t||t.length<2)return null;const n=t.length,r=new Float32Array(3*(n+1));for(let e=0;e<=n;e++){const o=t[e%n],s=3*e;r[s]=o.x,r[s+1]=o.y,r[s+2]=i}const o=new e.BufferGeometry;return o.setAttribute("position",new e.BufferAttribute(r,3)),new e.Line(o,et)},addring=e=>{let i=makeloop(e,-o);i&&(i.layers.set(30),t.add(i)),i=makeloop(e,r+o),i&&(i.layers.set(30),t.add(i))};addring(i);for(const e of n)addring(e)}(u,i,r,n,l),u}function getthorus(t,i,n=.2,r,o){o||(o={});let{center:s,nolines:A,segmenti:a=16,tubi:l=12}=o,c=new e.Group;const p=new e.TorusGeometry(i,n,l,2*a);if(c.position.set(0,s?0:i,0),!A){let e=edgesfromgeometry(p);c.add(e)}return c.add(getmesh(p,r||it)),c}function getluce(t,i,n="#ffffff",r=1){const o=i.pt;if(!o||!o.length)return null;const s=hash(`${i.key}|${n}|${r}`);if(!t.meshes[s]){const i=makeShape(o),A=new e.ShapeGeometry(i),a=new e.MeshStandardMaterial({color:new e.Color(n),emissive:new e.Color(n),emissiveIntensity:r,toneMapped:!1,transparent:!0,depthWrite:!1,side:e.DoubleSide,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:1}),l=new e.Mesh(A,a);l.layers.set(8),l.userData.isBloom=!0,t.meshes[s]=l,t.mustlight=!0}return t.meshes[s]}function getmarker(e,t,i,n,r,o,s={}){if(t&&i){s||(s={});let{markscale:A=.6,marklink:a,billboard:l}=s;s.markerid=t,s.marker=i,s.noingombro=!0;let c=getface(e,n*A,r*A,o,{order:1}),p=t;p.length>7&&(p=".."+p.slice(-6));let h=gettarghetta(e,`#w,${p}`,50,{noSfondo:!0,layer:11,billboard:l,forcey:!0});return c.add(posiziona(h,{sp:11,order:2})),s.center||(c=posiziona(c,{sl:n*(1-A)/2,sa:r*(1-A)/2})),c.layers.set(28),c.userData.marklink=a,posiziona(c,s)}}function toTrianglesDrawMode(e,r){if(r===t)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(r===i||r===n){let t=e.getIndex();if(null===t){const i=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<n.count;e++)i.push(e);e.setIndex(i),t=e.getIndex()}const n=t.count-2,o=[];if(r===i)for(let e=1;e<=n;e++)o.push(t.getX(0)),o.push(t.getX(e)),o.push(t.getX(e+1));else for(let e=0;e<n;e++)e%2==0?(o.push(t.getX(e)),o.push(t.getX(e+1)),o.push(t.getX(e+2))):(o.push(t.getX(e+2)),o.push(t.getX(e+1)),o.push(t.getX(e)));o.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const s=e.clone();return s.setIndex(o),s.clearGroups(),s}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",r),e}function pannellogeometry(t,i,n,r,o=0,s=0,A=0,a=0,l=0,c=2,p=!1){let h=hash(`pg--${i}|${n}|${r}|${o}|${s}|${A}|${a}|${l}|${c}|${p?1:0}`);if(i-=.01,n-=.01,r-=.01,!t.geo[h]){i-=2*l,n-=2*l,r-=2*l;let g=getshape();const u=[{x:a,y:0},{x:n-o,y:0},{x:n,y:o},{x:n,y:r-s},{x:n-s,y:r},{x:A,y:r},{x:0,y:r-A},{x:0,y:a}];g.addpt(u[0]),g.addpt(u[1]),o&&g.addpt(raccordabezier(u[0],u[1],u[2],u[3],c)),g.addpt(u[2]),g.addpt(u[3]),s&&g.addpt(raccordabezier(u[2],u[3],u[4],u[5],c)),g.addpt(u[4]),g.addpt(u[5]),A&&g.addpt(raccordabezier(u[4],u[5],u[6],u[7],c)),g.addpt(u[6]),g.addpt(u[7]),s&&g.addpt(raccordabezier(u[6],u[7],u[0],u[1],c)),g.removeduplicate(.01);let d=g.pt;const f=new e.Shape;f.moveTo(d[0].x,d[0].y);for(let e=1;e<d.length;e++)f.lineTo(d[e].x,d[e].y);f.lineTo(d[0].x,d[0].y);const I={depth:i,bevelEnabled:l>0,bevelThickness:l,bevelSize:l,bevelSegments:1};let m=new e.ExtrudeGeometry(f,I);m=function mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);const i={},n=e.getIndex(),r=e.getAttribute("position"),o=n?n.count:r.count;let s=0;const A=Object.keys(e.attributes),a={},l={},c=[],p=["getX","getY","getZ","getW"],h=["setX","setY","setZ","setW"];for(let t=0,i=A.length;t<i;t++){const i=A[t],n=e.attributes[i];a[i]=new n.constructor(new n.array.constructor(n.count*n.itemSize),n.itemSize,n.normalized);const r=e.morphAttributes[i];r&&(l[i]||(l[i]=[]),r.forEach(((e,t)=>{const n=new e.array.constructor(e.count*e.itemSize);l[i][t]=new e.constructor(n,e.itemSize,e.normalized)})))}const g=.5*t,u=Math.log10(1/t),d=Math.pow(10,u),f=g*d;for(let t=0;t<o;t++){const r=n?n.getX(t):t;let o="";for(let t=0,i=A.length;t<i;t++){const i=A[t],n=e.getAttribute(i),s=n.itemSize;for(let e=0;e<s;e++)o+=~~(n[p[e]](r)*d+f)+","}if(o in i)c.push(i[o]);else{for(let t=0,i=A.length;t<i;t++){const i=A[t],n=e.getAttribute(i),o=e.morphAttributes[i],c=n.itemSize,g=a[i],u=l[i];for(let e=0;e<c;e++){const t=p[e],i=h[e];if(g[i](s,n[t](r)),o)for(let e=0,n=o.length;e<n;e++)u[e][i](s,o[e][t](r))}}i[o]=s,c.push(s),s++}}const I=e.clone();for(const t in e.attributes){const e=a[t];if(I.setAttribute(t,new e.constructor(e.array.slice(0,s*e.itemSize),e.itemSize,e.normalized)),t in l)for(let e=0;e<l[t].length;e++){const i=l[t][e];I.morphAttributes[t][e]=new i.constructor(i.array.slice(0,s*i.itemSize),i.itemSize,i.normalized)}}return I.setIndex(c),I}(m),uvswap(m,p,!0),t.geo[h]=m}return t.geo[h]}function getpannello(t,i,n,r,o,s,A,a){a||(a={});let l,c,p,{r:h,r1:g,r2:u,r3:d,r4:f,b:I,npt:m}=a;g=g||h||0,u=u||h||0,d=d||h||0,f=f||h||0,m=m||2,I=I||0,(I>=n/2||I>=r/2||I>=o/2)&&(I=0),l="L"==(i=i.trim().toUpperCase())[0]?n:"A"==i[0]?r:o,c="L"==i[1]?n:"A"==i[1]?r:o,p="L"==i[2]?n:"A"==i[2]?r:o;let b=new e.Group;if(!a.nolines){let t=edgesfromgeometry(new e.BoxGeometry(n,r,o));t.position.set(n/2,r/2,o/2),b.add(t)}let C=getmesh(pannellogeometry(t,l,c,p,g,u,d,f,I,m,!a.uvswap),[A||s||At,s||ot]);C.name="pannello",C.layers.set(1);let B=C;return I&&(C.position.set(I,I,I),B=new e.Group,B.add(C)),C=function meshrotate(e,t,i=0,n=0,r=0){switch(e.trim().toUpperCase()){case"LPA":t.rotation.y=Math.PI/2,t.rotation.x=Math.PI,t.position.set(0,r,0);break;case"ALP":t.rotation.x=Math.PI/2,t.position.set(0,i,0);break;case"APL":t.rotation.x=-Math.PI/2,t.rotation.z=-Math.PI/2;break;case"PLA":break;case"PAL":t.rotation.z=Math.PI/2,t.position.set(r,0,0);break;case"LAP":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI/2}return t}(i,B,l,c,p),b.add(C),b}async function getpannello2(e,t,i,n,r,o,s=0){let A;switch((s<0||s>Math.max(i,n,r)/3)&&(s=0),t){case"lap":A=getextrude(e,getshape().fromrect(i-2*s,n-2*s).pt,r-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=r-s,A.position.y=n-s,A.rotation.x=Math.PI;break;case"alp":A=getextrude(e,getshape().fromrect(n-2*s,i-2*s).pt,r-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=s,A.position.y=n-s,A.rotation.z=-Math.PI/2;break;case"apl":A=getextrude(e,getshape().fromrect(n-2*s,r-2*s).pt,i-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=s,A.position.y=s,A.rotation.y=Math.PI/2,A.rotation.z=Math.PI/2;break;case"pal":A=getextrude(e,getshape().fromrect(r-2*s,n-2*s).pt,i-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=r-s,A.position.y=s,A.rotation.y=Math.PI/2;break;case"pla":A=getextrude(e,getshape().fromrect(r-2*s,i-2*s).pt,n-2*s,[],o,{round:s,stonda:s}),A.rotation.z=-Math.PI/2,A.rotation.x=-Math.PI/2,A.position.x=s,A.position.z=s,A.position.y=s;break;default:A=getextrude(e,getshape().fromrect(i-2*s,r-2*s).pt,n-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=s,A.rotation.x=Math.PI/2,A.position.y=n-s}return A}function earcut(e,t,i=2){const n=t&&t.length,r=n?t[0]*i:e.length;let o=linkedList(e,0,r,i,!0);const s=[];if(!o||o.next===o.prev)return s;let A,a,l;if(n&&(o=function eliminateHoles(e,t,i,n){const r=[];for(let i=0,o=t.length;i<o;i++){const s=linkedList(e,t[i]*n,i<o-1?t[i+1]*n:e.length,n,!1);s===s.next&&(s.steiner=!0),r.push(getLeftmost(s))}r.sort(compareXYSlope);for(let e=0;e<r.length;e++)i=eliminateHole(r[e],i);return i}(e,t,o,i)),e.length>80*i){A=1/0,a=1/0;let t=-1/0,n=-1/0;for(let o=i;o<r;o+=i){const i=e[o],r=e[o+1];i<A&&(A=i),r<a&&(a=r),i>t&&(t=i),r>n&&(n=r)}l=Math.max(t-A,n-a),l=0!==l?32767/l:0}return earcutLinked(o,s,i,A,a,l,0),s}function linkedList(e,t,i,n,r){let o;if(r===function signedArea(e,t,i,n){let r=0;for(let o=t,s=i-n;o<i;o+=n)r+=(e[s]-e[o])*(e[o+1]+e[s+1]),s=o;return r}(e,t,i,n)>0)for(let r=t;r<i;r+=n)o=insertNode(r/n|0,e[r],e[r+1],o);else for(let r=i-n;r>=t;r-=n)o=insertNode(r/n|0,e[r],e[r+1],o);return o&&equals(o,o.next)&&(removeNode(o),o=o.next),o}function filterPoints(e,t){if(!e)return e;t||(t=e);let i,n=e;do{if(i=!1,n.steiner||!equals(n,n.next)&&0!==area(n.prev,n,n.next))n=n.next;else{if(removeNode(n),n=t=n.prev,n===n.next)break;i=!0}}while(i||n!==t);return t}function earcutLinked(e,t,i,n,r,o,s){if(!e)return;!s&&o&&function indexCurve(e,t,i,n){let r=e;do{0===r.z&&(r.z=zOrder(r.x,r.y,t,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function sortLinked(e){let t,i=1;do{let n,r=e;e=null;let o=null;for(t=0;r;){t++;let s=r,A=0;for(let e=0;e<i&&(A++,s=s.nextZ,s);e++);let a=i;for(;A>0||a>0&&s;)0!==A&&(0===a||!s||r.z<=s.z)?(n=r,r=r.nextZ,A--):(n=s,s=s.nextZ,a--),o?o.nextZ=n:e=n,n.prevZ=o,o=n;r=s}o.nextZ=null,i*=2}while(t>1);return e}(r)}(e,n,r,o);let A=e;for(;e.prev!==e.next;){const a=e.prev,l=e.next;if(o?isEarHashed(e,n,r,o):isEar(e))t.push(a.i,e.i,l.i),removeNode(e),e=l.next,A=l.next;else if((e=l)===A){s?1===s?earcutLinked(e=cureLocalIntersections(filterPoints(e),t),t,i,n,r,o,2):2===s&&splitEarcut(e,t,i,n,r,o):earcutLinked(filterPoints(e),t,i,n,r,o,1);break}}}function isEar(e){const t=e.prev,i=e,n=e.next;if(area(t,i,n)>=0)return!1;const r=t.x,o=i.x,s=n.x,A=t.y,a=i.y,l=n.y,c=Math.min(r,o,s),p=Math.min(A,a,l),h=Math.max(r,o,s),g=Math.max(A,a,l);let u=n.next;for(;u!==t;){if(u.x>=c&&u.x<=h&&u.y>=p&&u.y<=g&&pointInTriangleExceptFirst(r,A,o,a,s,l,u.x,u.y)&&area(u.prev,u,u.next)>=0)return!1;u=u.next}return!0}function isEarHashed(e,t,i,n){const r=e.prev,o=e,s=e.next;if(area(r,o,s)>=0)return!1;const A=r.x,a=o.x,l=s.x,c=r.y,p=o.y,h=s.y,g=Math.min(A,a,l),u=Math.min(c,p,h),d=Math.max(A,a,l),f=Math.max(c,p,h),I=zOrder(g,u,t,i,n),m=zOrder(d,f,t,i,n);let b=e.prevZ,C=e.nextZ;for(;b&&b.z>=I&&C&&C.z<=m;){if(b.x>=g&&b.x<=d&&b.y>=u&&b.y<=f&&b!==r&&b!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,C.x>=g&&C.x<=d&&C.y>=u&&C.y<=f&&C!==r&&C!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,C.x,C.y)&&area(C.prev,C,C.next)>=0)return!1;C=C.nextZ}for(;b&&b.z>=I;){if(b.x>=g&&b.x<=d&&b.y>=u&&b.y<=f&&b!==r&&b!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;C&&C.z<=m;){if(C.x>=g&&C.x<=d&&C.y>=u&&C.y<=f&&C!==r&&C!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,C.x,C.y)&&area(C.prev,C,C.next)>=0)return!1;C=C.nextZ}return!0}function cureLocalIntersections(e,t){let i=e;do{const n=i.prev,r=i.next.next;!equals(n,r)&&intersects(n,i,i.next,r)&&locallyInside(n,r)&&locallyInside(r,n)&&(t.push(n.i,i.i,r.i),removeNode(i),removeNode(i.next),i=e=r),i=i.next}while(i!==e);return filterPoints(i)}function splitEarcut(e,t,i,n,r,o){let s=e;do{let e=s.next.next;for(;e!==s.prev;){if(s.i!==e.i&&isValidDiagonal(s,e)){let A=splitPolygon(s,e);return s=filterPoints(s,s.next),A=filterPoints(A,A.next),earcutLinked(s,t,i,n,r,o,0),void earcutLinked(A,t,i,n,r,o,0)}e=e.next}s=s.next}while(s!==e)}function compareXYSlope(e,t){let i=e.x-t.x;if(0===i&&(i=e.y-t.y,0===i)){i=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}return i}function eliminateHole(e,t){const i=function findHoleBridge(e,t){let i=t;const n=e.x,r=e.y;let o,s=-1/0;if(equals(e,i))return i;do{if(equals(e,i.next))return i.next;if(r<=i.y&&r>=i.next.y&&i.next.y!==i.y){const e=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=n&&e>s&&(s=e,o=i.x<i.next.x?i:i.next,e===n))return o}i=i.next}while(i!==t);if(!o)return null;const A=o,a=o.x,l=o.y;let c=1/0;i=o;do{if(n>=i.x&&i.x>=a&&n!==i.x&&pointInTriangle(r<l?n:s,r,a,l,r<l?s:n,r,i.x,i.y)){const t=Math.abs(r-i.y)/(n-i.x);locallyInside(i,e)&&(t<c||t===c&&(i.x>o.x||i.x===o.x&&sectorContainsSector(o,i)))&&(o=i,c=t)}i=i.next}while(i!==A);return o}(e,t);if(!i)return t;const n=splitPolygon(i,e);return filterPoints(n,n.next),filterPoints(i,i.next)}function sectorContainsSector(e,t){return area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0}function zOrder(e,t,i,n,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function getLeftmost(e){let t=e,i=e;do{(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next}while(t!==e);return i}function pointInTriangle(e,t,i,n,r,o,s,A){return(r-s)*(t-A)>=(e-s)*(o-A)&&(e-s)*(n-A)>=(i-s)*(t-A)&&(i-s)*(o-A)>=(r-s)*(n-A)}function pointInTriangleExceptFirst(e,t,i,n,r,o,s,A){return!(e===s&&t===A)&&pointInTriangle(e,t,i,n,r,o,s,A)}function isValidDiagonal(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function intersectsPolygon(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&intersects(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(locallyInside(e,t)&&locallyInside(t,e)&&function middleInside(e,t){let i=e,n=!1;const r=(e.x+t.x)/2,o=(e.y+t.y)/2;do{i.y>o!=i.next.y>o&&i.next.y!==i.y&&r<(i.next.x-i.x)*(o-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==e);return n}(e,t)&&(area(e.prev,e,t.prev)||area(e,t.prev,t))||equals(e,t)&&area(e.prev,e,e.next)>0&&area(t.prev,t,t.next)>0)}function area(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function equals(e,t){return e.x===t.x&&e.y===t.y}function intersects(e,t,i,n){const r=sign(area(e,t,i)),o=sign(area(e,t,n)),s=sign(area(i,n,e)),A=sign(area(i,n,t));return r!==o&&s!==A||(!(0!==r||!onSegment(e,i,t))||(!(0!==o||!onSegment(e,n,t))||(!(0!==s||!onSegment(i,e,n))||!(0!==A||!onSegment(i,t,n)))))}function onSegment(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function sign(e){return e>0?1:e<0?-1:0}function locallyInside(e,t){return area(e.prev,e,e.next)<0?area(e,t,e.next)>=0&&area(e,e.prev,t)>=0:area(e,t,e.prev)<0||area(e,e.next,t)<0}function splitPolygon(e,t){const i=createNode(e.i,e.x,e.y),n=createNode(t.i,t.x,t.y),r=e.next,o=t.prev;return e.next=t,t.prev=e,i.next=r,r.prev=i,n.next=i,i.prev=n,o.next=n,n.prev=o,n}function insertNode(e,t,i,n){const r=createNode(e,t,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function removeNode(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function createNode(e,t,i){return{i:e,x:t,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function unifyVertices(e,t,i){const n=new Map,r=[],o=[],s=[];for(let A=0;A<i.length;A++){const a=i[A],l=e[3*a+0],c=e[3*a+1],p=e[3*a+2],h=t[2*a+0],g=t[2*a+1],u=`${l},${c},${p}|${h},${g}`;if(n.has(u))s.push(n.get(u));else{const e=r.length/3;n.set(u,e),r.push(l,c,p),o.push(h,g),s.push(e)}}return{vertices:r,uvs:o,indices:s}}function infoestrudi(e,t,i,n,r){n||(n={}),i||(i=[]);let o=n.p0||0,s=Math.tan(n.coeffbase1*Ue||0),A=Math.tan(n.coeffbase2*Ue||0),a=t||n.p1||20,l=Math.tan(n.coefftop1*Ue||0),c=Math.tan(n.coefftop2*Ue||0),{mi:p,ma:h}=e.pt.reduce(((e,t)=>(e.mi.x=Math.min(e.mi.x,t.x),e.mi.y=Math.min(e.mi.y,t.y),e.ma.x=Math.max(e.ma.x,t.x),e.ma.y=Math.max(e.ma.y,t.y),e)),{mi:{x:1e9,y:1e9},ma:{x:-1e9,y:-1e9}}),g=0,u=1e9;function getpars(e){e.z1=getzeta(e.x,e.y,o,s,A,r),e.z2=getzeta(e.x,e.y,a,l,c,r),e.l=Math.abs(e.z2-e.z1)}for(let e of i)getpars(e);getpars(p),getpars(h);let d=[{x:p.x,y:p.y},{x:h.x,y:p.y},{x:h.x,y:h.y},{x:p.x,y:h.y}];for(let e of d)getpars(e),e.l>g&&(g=e.l),e.l<u&&(u=e.l);return{aini:n.coeffbase1||0,aini2:n.coeffbase2||0,afin:n.coefftop1||0,afin2:n.coefftop2||0,pts:i,mi:p,ma:h,rect:d,dimx:h.x-p.x,dimy:h.y-p.y,lnom:a-o,lmax:g,lmin:u,lmed:(g+u)/2}}function getzeta(e,t,i,n,r,o,s=!1){let A=e*n+t*r+i;if(o){let e=o.xfromy(-t,0,!0);s?A-=e:A=e}return A}function sidegeomfromshapes(t,i,n,r,o=!1,s=!1,A=!1){if(n&&r){if(n.length!==r.length)throw new Error("shapes with different length");if(n.length<2)throw new Error("I percorsi devono contenere almeno due punti ciascuno.");if(!t.geo[i]){const a=[],l=[],c=[],p=n.length,addpts=e=>{for(const t of e)a.push(t.x,t.y,t.z),A?l.push(t.v/1e3,t.u/1e3):l.push(t.u/1e3,t.v/1e3)},equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z,addindexquad=(e,t,i,n)=>{o?c.push(e,i,t,i,n,t):c.push(e,t,i,i,t,n)};addpts(n),addpts(r);for(let e=0;e<p-1;e++){const t=e+1;equalpos(n[e],n[t])||addindexquad(e,t,e+p,t+p)}const h=new e.BufferGeometry;if(s){let t=unifyVertices(a,l,c);h.setAttribute("position",new e.Float32BufferAttribute(t.vertices,3)),h.setAttribute("uv",new e.Float32BufferAttribute(t.uvs,2)),h.setIndex(t.indices)}else h.setAttribute("position",new e.Float32BufferAttribute(a,3)),h.setAttribute("uv",new e.Float32BufferAttribute(l,2)),h.setIndex(c);h.computeTangents?.(),h.computeVertexNormals(),t.geo[i]=h}return t.geo[i]}}function bottomgeomfromshape(t,i,n,r,o=0,s=0,A=0,a=null,l=!1,c=!1){let p=`bg:${o}|${s}${A}|${n.key}|${i}|${a?.key||""}|${c?1:0}`;for(let h of r)p=`${p}|${h.key}`;if(p=hash(p),!t.geo[p]){let g,u=[],d=[],f=n.pt.length;u=n.vec;const I=new e.BufferGeometry,m=[],b=[],C=[];function addvertexes(e,t){let n=m.length/3;for(let n=0;n<e.length;n++){const r=e[n],l=t[2*r],p=-t[2*r+1],h=getzeta(l,p,o,s,A,a,i);m.push(l,p,h),c?b.push(p/1e3,l/1e3):b.push(l/1e3,p/1e3)}for(let t=0;t<e.length;t+=3)i?C.push(t+n,t+n+2,t+n+1):C.push(t+n,t+n+1,t+n+2)}if(a){let B=n.sliceony(a);for(let y of B){let E=y.flatMap((e=>[e.x,e.y]));addvertexes(earcut(E,[]),E)}}else if(Array.isArray(r)&&r.length){for(let x of r)d.push(f),f+=x.pt.length,u=[...u,...x.vec];g=earcut(u,d),addvertexes(g,u)}else g=earcut(u),addvertexes(g,u);if(l){let w=unifyVertices(m,b,C);I.setAttribute("position",new e.Float32BufferAttribute(w.vertices,3)),I.setAttribute("uv",new e.Float32BufferAttribute(w.uvs,2)),I.setIndex(w.indices)}else I.setAttribute("position",new e.Float32BufferAttribute(m,3)),I.setAttribute("uv",new e.Float32BufferAttribute(b,2)),I.setIndex(C);I.computeVertexNormals(),I.computeTangents?.(),t.geo[p]=I}return t.geo[p]}function estrusorotate(e,t,i=0){switch(e.trim().toUpperCase().slice(0,1)){case"A":t.rotation.x=-Math.PI/2;break;case"L":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI;break;case"P":t.rotation.z=Math.PI/2}return t}function estruso(t,i,n,r,o,s,A){A||(A={}),s||(s=[]),Array.isArray(s)||(s=[s,s,s]);let a=A.p0||0,l=Math.tan(A.coeffbase1*Ue||0),c=Math.tan(A.coeffbase2*Ue||0),p=n||A.p1||20,h=Math.tan(A.coefftop1*Ue||0),g=Math.tan(A.coefftop2*Ue||0),u=A.shapetop,d=A.shapebase||A.shapebottom;u&&(g=0),d&&(g=0);let f=d?d.key:"",I=u?u.key:"",m=A.notopholes||!1,b=A.nobottomholes||A.nobaseholes||!1,C=A.invert||!1,B=A.open||!1,y=new e.Group;if(r){if(!A.nobase){let e=o;b&&(e=Array.isArray(b)?e.filter(((e,t)=>!b[t])):[]);let i=bottomgeomfromshape(t,!A.notop,r,B?[]:e,a,l,c,d,!1,A.uvswap);A.nolines||y.add(edgesfromgeometry(i)),y.add(getmesh(i,s[0]||it))}if(!A.notop){let e=o;m&&(e=Array.isArray(m)?e.filter(((e,t)=>!m[t])):[]);let i=bottomgeomfromshape(t,!1,r,B?[]:e,p,h,g,u,!1,A.uvswap);y.add(getmesh(i,s[1]||s[0]||it)),A.nolines||y.add(edgesfromgeometry(i))}if(!A.nosides){let e=r.to3d(0,a,l,-c,B,d,!C),i=r.to3d(1,p,h,-g,B,u,C),n=`${r.key}${C?1:0}|${a}|${p}|${l}|${c||f}|${h}|${g||I}|${B}|${A.wvswap?1:0}`,E=sidegeomfromshapes(t,n,e,i,!1,!1,A.uvswap);if(A.nolines||A.nosidelines||y.add(edgesfromgeometry(E)),y.add(getmesh(E,s[2]||s[0]||it)),o&&!B)for(let r=0;r<o.length;r++){let u=o[r];if(Array.isArray(m)){if(m[r])continue}else if(m)continue;if(Array.isArray(b)){if(b[r])continue}else if(b)continue;e=u.to3d(0,a,l,c),i=u.to3d(0,p,h,g),n=`${u.key}|${a}|${p}|${l}|${c}|${h}|${g}`;let d=sidegeomfromshapes(t,n,e,i,!0);A.nolines||A.nosidelines||y.add(edgesfromgeometry(d)),y.add(getmesh(d,s[3]||s[0]||it))}}return estrusorotate(i,y,n)}return y}function revolve(t,i,n,r,o){o||(o={});let s=o.segmenti??12,A=hash(`rev|${i.key}|${n}|${s}|${o?.uvswap}`),a=t.geo[A],l=new e.Group;if(!a){const n=i.pt.map((t=>new e.Vector2(t.x,t.y)));a=new e.LatheGeometry(n,s,0,2*Math.PI),uvswap(a,o.uvswap,!0),t.geo[A]=a}const c=new e.Mesh(a,r);return l.add(c),o.nolines||o.nosidelines||l.add(edgesfromgeometry(a)),l}function estrusopat(t,i,n,r,o,s,A){A||(A={});let a=A.invert;s||(s=[]);let l=A.open,c=A.closepat;if(!n.pt?.length)return;let p=o.to3d(0,0,0,0,l),h=new e.Group;if(!A.nobase&&!A.open&&!c){let i=new e.Group,a=angle3point(r[0],n.pt[0],n.pt[1])+Math.PI/2,l=bottomgeomfromshape(t,!1,o,[],0,-Math.tan(a),0,null,!1,A.uvswap);i.add(getmesh(l,s[0]||it)),i.add(edgesfromgeometry(l));let c=n.infosegmento(0,!0);h.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!A.notop&&!A.open&&!c){let i=new e.Group,a=-(angle3point(n.pt[n.npt-2],n.pt[n.npt-1],r[n.npt-1])+Math.PI/2),l=bottomgeomfromshape(t,!0,o,[],0,-Math.tan(a),0,null,!1,A.uvswap);i.add(getmesh(l,s[1]||s[0]||it)),i.add(edgesfromgeometry(l));let c=n.infosegmento(n.pt.length-1,!0);h.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}const g=function sidegeomfrompat(t,i,n,r,o,s){let A=`bsg:${i.key}|${n.key}|${o}|${s}`;if(n.npt==r.length){if(A=hash(A),!t.geo[A]){const a=[],l=[],c=[],p=i.length,equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z;let h=0,g=n.pt,u=n.npt;const addpts=(t,i,n,r)=>{for(const o of t){let t=new e.Vector3(o.x,o.y,o.x*r);t.applyMatrix4(i),a.push(t.x,t.y,t.z),l.push(o.u,o.v+n)}};let d=u;for(let t=0;t<u;t++){let o;o=t<u-1?angle3point(r[t],g[t],g[t+1])+Math.PI/2:-(angle3point(g[t-1],g[t],r[t])+Math.PI/2);let s=-Math.tan(o),A=n.infosegmento(t,!0),a=new e.Object3D;a.position.set(A.x,0,A.y),a.rotation.set(0,(90-A.ang)*Ue,0),a.updateMatrix(),addpts(i,a.matrix,h,s),h+=A.l}if(o){let t=n.infosegmento(0,!0),o=new e.Object3D;o.position.set(t.x,0,t.y),o.rotation.set(0,(90-t.ang)*Ue,0);let s=angle3point(g[u-1],g[0],r[0])+Math.PI/2,A=-Math.tan(s);o.updateMatrix(),addpts(i,o.matrix,h,A),h+=t.l,d++}for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const addindexquad=(e,t,i,n)=>{s?c.push(e,i,t,i,n,t):c.push(e,t,i,i,t,n)},n=t+1;equalpos(i[t],i[n])||addindexquad(t+e*p,n+e*p,t+(e+1)*p,n+(e+1)*p)}const f=new e.BufferGeometry;f.setAttribute("position",new e.Float32BufferAttribute(a,3)),f.setAttribute("uv",new e.Float32BufferAttribute(l,2)),f.setIndex(c),f.computeVertexNormals(),f.computeTangents?.(),t[A]=f}return t[A]}}(t,p,n,r,c?1:0,a?1:0,A.uvswap);return g&&(A.nolines||A.nosidelines||h.add(edgesfromgeometry(g)),h.add(getmesh(g,s[2]||s[0]||it))),estrusorotate(i,h,0)}async function spritemat(t,i){try{let n={transparent:!0,depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1};if(i.startsWith("#"))n.color=i;else{let e=await t.tex(i,1e3,1e3);e?n.map=e:n.color="black"}return new e.SpriteMaterial(n)}catch(e){return it}}function getsprite0(t,i,n,r,o,s={}){s||(s={});let{size:A=50,pick:a=!1,screen:l=!1,sizex:c,sizey:p}=s;const h=new e.Sprite(o);h.position.set(0,0,0),h.userData.issprite=!0,h.userData.ispunto=t,h.userData.ispick=a,h.userData.isScreen=l,h.renderOrder=999,h.layers.set(29),h.name=t?"_punto":"_sprite";let g=new e.Group;return g.position.set(i,n,r),g.scale.set(c||A,p||c||A,1),g.add(h),g.traverse((e=>{e.material&&(e.material.depthTest=!1,e.material.depthWrite=!1)})),g.renderOrder=999,g}async function getpunto(t,i,n,r,o="yellow",s){s||(s={size:20}),s.screen=!0;const A=await function createCircleTexture(t,i=64,n="rgba(255,0,0,1)"){const r=`ct|${i}|${n}`;if(!t.textures[r]){const o=document.createElement("canvas");o.width=o.height=i;const s=o.getContext("2d"),A=i/2;s.clearRect(0,0,i,i),s.fillStyle=n,s.beginPath(),s.arc(A,A,A,0,2*Math.PI),s.fill();const a=new e.CanvasTexture(o);a.needsUpdate=!0,t.textures[r]=a}return t.textures[r]}(t,64,o);return getsprite0(!0,i,n,r,new e.SpriteMaterial({map:A,transparent:!0,fog:!1,toneMapped:!1}),s)}function getsprite(e,t,i,n,r,o={}){return getsprite0(!1,t,i,n,r,o)}class GLTFLoader extends r{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(e){return new GLTFMaterialsClearcoatExtension(e)})),this.register((function(e){return new GLTFMaterialsDispersionExtension(e)})),this.register((function(e){return new GLTFTextureBasisUExtension(e)})),this.register((function(e){return new GLTFTextureWebPExtension(e)})),this.register((function(e){return new GLTFTextureAVIFExtension(e)})),this.register((function(e){return new GLTFMaterialsSheenExtension(e)})),this.register((function(e){return new GLTFMaterialsTransmissionExtension(e)})),this.register((function(e){return new GLTFMaterialsVolumeExtension(e)})),this.register((function(e){return new GLTFMaterialsIorExtension(e)})),this.register((function(e){return new GLTFMaterialsEmissiveStrengthExtension(e)})),this.register((function(e){return new GLTFMaterialsSpecularExtension(e)})),this.register((function(e){return new GLTFMaterialsIridescenceExtension(e)})),this.register((function(e){return new GLTFMaterialsAnisotropyExtension(e)})),this.register((function(e){return new GLTFMaterialsBumpExtension(e)})),this.register((function(e){return new GLTFLightsExtension(e)})),this.register((function(e){return new GLTFMeshoptCompression(e)})),this.register((function(e){return new GLTFMeshGpuInstancing(e)}))}load(e,t,i,n){const r=this;let A;if(""!==this.resourcePath)A=this.resourcePath;else if(""!==this.path){const t=o.extractUrlBase(e);A=o.resolveURL(t,this.path)}else A=o.extractUrlBase(e);this.manager.itemStart(e);const _onError=function(t){n?n(t):console.error(t),r.manager.itemError(e),r.manager.itemEnd(e)},a=new s(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(i){try{r.parse(i,A,(function(i){t(i),r.manager.itemEnd(e)}),_onError)}catch(e){_onError(e)}}),i,_onError)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return-1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return-1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,n){let r;const o={},s={},A=new TextDecoder;if("string"==typeof e)r=JSON.parse(e);else if(e instanceof ArrayBuffer){if(A.decode(new Uint8Array(e,0,4))===gt){try{o[ht.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(n&&n(e))}r=JSON.parse(o[ht.KHR_BINARY_GLTF].content)}else r=JSON.parse(A.decode(e))}else r=e;if(void 0===r.asset||r.asset.version[0]<2)return void(n&&n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const a=new GLTFParser(r,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){const t=this.pluginCallbacks[e](a);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),s[t.name]=t,o[t.name]=!0}if(r.extensionsUsed)for(let e=0;e<r.extensionsUsed.length;++e){const t=r.extensionsUsed[e],i=r.extensionsRequired||[];switch(t){case ht.KHR_MATERIALS_UNLIT:o[t]=new GLTFMaterialsUnlitExtension;break;case ht.KHR_DRACO_MESH_COMPRESSION:o[t]=new GLTFDracoMeshCompressionExtension(r,this.dracoLoader);break;case ht.KHR_TEXTURE_TRANSFORM:o[t]=new GLTFTextureTransformExtension;break;case ht.KHR_MESH_QUANTIZATION:o[t]=new GLTFMeshQuantizationExtension;break;default:i.indexOf(t)>=0&&void 0===s[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}a.setExtensions(o),a.setPlugins(s),a.parse(i,n)}parseAsync(e,t){const i=this;return new Promise((function(n,r){i.parse(e,t,n,r)}))}}function GLTFRegistry(){let e={};return{get:function(t){return e[t]},add:function(t,i){e[t]=i},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const ht={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class GLTFLightsExtension{constructor(e){this.parser=e,this.name=ht.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i];n.extensions&&n.extensions[this.name]&&void 0!==n.extensions[this.name].light&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let n=t.cache.get(i);if(n)return n;const r=t.json,o=((r.extensions&&r.extensions[this.name]||{}).lights||[])[e];let s;const A=new l(16777215);void 0!==o.color&&A.setRGB(o.color[0],o.color[1],o.color[2],c);const a=void 0!==o.range?o.range:0;switch(o.type){case"directional":s=new u(A),s.target.position.set(0,0,-1),s.add(s.target);break;case"point":s=new g(A),s.distance=a;break;case"spot":s=new h(A),s.distance=a,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,s.angle=o.spot.outerConeAngle,s.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,s.target.position.set(0,0,-1),s.add(s.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return s.position.set(0,0,0),s.decay=2,assignExtrasToUserData(s,o),void 0!==o.intensity&&(s.intensity=o.intensity),s.name=t.createUniqueName(o.name||"light_"+e),n=Promise.resolve(s),t.cache.add(i,n),n}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,n=i.json.nodes[e],r=(n.extensions&&n.extensions[this.name]||{}).light;return void 0===r?null:this._loadLight(r).then((function(e){return i._getNodeRef(t.cache,r,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=ht.KHR_MATERIALS_UNLIT}getMaterialType(){return Y}extendParams(e,t,i){const n=[];e.color=new l(1,1,1),e.opacity=1;const r=t.pbrMetallicRoughness;if(r){if(Array.isArray(r.baseColorFactor)){const t=r.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],c),e.opacity=t[3]}void 0!==r.baseColorTexture&&n.push(i.assignTexture(e,"map",r.baseColorTexture,p))}return Promise.all(n)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name].emissiveStrength;return void 0!==n&&(t.emissiveIntensity=n),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];if(void 0!==o.clearcoatFactor&&(t.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&r.push(i.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&r.push(i.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(r.push(i.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const e=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new a(e,e)}return Promise.all(r)}}class GLTFMaterialsDispersionExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_DISPERSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.dispersion=void 0!==n.dispersion?n.dispersion:0,Promise.resolve()}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return void 0!==o.iridescenceFactor&&(t.iridescence=o.iridescenceFactor),void 0!==o.iridescenceTexture&&r.push(i.assignTexture(t,"iridescenceMap",o.iridescenceTexture)),void 0!==o.iridescenceIor&&(t.iridescenceIOR=o.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==o.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),void 0!==o.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),void 0!==o.iridescenceThicknessTexture&&r.push(i.assignTexture(t,"iridescenceThicknessMap",o.iridescenceThicknessTexture)),Promise.all(r)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[];t.sheenColor=new l(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=n.extensions[this.name];if(void 0!==o.sheenColorFactor){const e=o.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],c)}return void 0!==o.sheenRoughnessFactor&&(t.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&r.push(i.assignTexture(t,"sheenColorMap",o.sheenColorTexture,p)),void 0!==o.sheenRoughnessTexture&&r.push(i.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(r)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return void 0!==o.transmissionFactor&&(t.transmission=o.transmissionFactor),void 0!==o.transmissionTexture&&r.push(i.assignTexture(t,"transmissionMap",o.transmissionTexture)),Promise.all(r)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];t.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&r.push(i.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const s=o.attenuationColor||[1,1,1];return t.attenuationColor=(new l).setRGB(s[0],s[1],s[2],c),Promise.all(r)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.ior=void 0!==n.ior?n.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];t.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&r.push(i.assignTexture(t,"specularIntensityMap",o.specularTexture));const s=o.specularColorFactor||[1,1,1];return t.specularColor=(new l).setRGB(s[0],s[1],s[2],c),void 0!==o.specularColorTexture&&r.push(i.assignTexture(t,"specularColorMap",o.specularColorTexture,p)),Promise.all(r)}}class GLTFMaterialsBumpExtension{constructor(e){this.parser=e,this.name=ht.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return t.bumpScale=void 0!==o.bumpFactor?o.bumpFactor:1,void 0!==o.bumpTexture&&r.push(i.assignTexture(t,"bumpMap",o.bumpTexture)),Promise.all(r)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=ht.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return void 0!==o.anisotropyStrength&&(t.anisotropy=o.anisotropyStrength),void 0!==o.anisotropyRotation&&(t.anisotropyRotation=o.anisotropyRotation),void 0!==o.anisotropyTexture&&r.push(i.assignTexture(t,"anisotropyMap",o.anisotropyTexture)),Promise.all(r)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=ht.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,n=i.textures[e];if(!n.extensions||!n.extensions[this.name])return null;const r=n.extensions[this.name],o=t.options.ktx2Loader;if(!o){if(i.extensionsRequired&&i.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,r.source,o)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=ht.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,r=n.textures[e];if(!r.extensions||!r.extensions[t])return null;const o=r.extensions[t],s=n.images[o.source];let A=i.textureLoader;if(s.uri){const e=i.options.manager.getHandler(s.uri);null!==e&&(A=e)}return this.detectSupport().then((function(r){if(r)return i.loadTextureImage(e,o.source,A);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFTextureAVIFExtension{constructor(e){this.parser=e,this.name=ht.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,r=n.textures[e];if(!r.extensions||!r.extensions[t])return null;const o=r.extensions[t],s=n.images[o.source];let A=i.textureLoader;if(s.uri){const e=i.options.manager.getHandler(s.uri);null!==e&&(A=e)}return this.detectSupport().then((function(r){if(r)return i.loadTextureImage(e,o.source,A);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFMeshoptCompression{constructor(e){this.name=ht.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const e=i.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return n.then((function(t){const i=e.byteOffset||0,n=e.byteLength||0,o=e.count,s=e.byteStride,A=new Uint8Array(t,i,n);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(o,s,A,e.mode,e.filter).then((function(e){return e.buffer})):r.ready.then((function(){const t=new ArrayBuffer(o*s);return r.decodeGltfBuffer(new Uint8Array(t),o,s,A,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=ht.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||void 0===i.mesh)return null;const n=t.meshes[i.mesh];for(const e of n.primitives)if(e.mode!==It.TRIANGLES&&e.mode!==It.TRIANGLE_STRIP&&e.mode!==It.TRIANGLE_FAN&&void 0!==e.mode)return null;const r=i.extensions[this.name].attributes,o=[],s={};for(const e in r)o.push(this.parser.getDependency("accessor",r[e]).then((t=>(s[e]=t,s[e]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then((e=>{const t=e.pop(),i=t.isGroup?t.children:[t],n=e[0].count,r=[];for(const e of i){const t=new d,i=new f,o=new I,A=new f(1,1,1),a=new m(e.geometry,e.material,n);for(let e=0;e<n;e++)s.TRANSLATION&&i.fromBufferAttribute(s.TRANSLATION,e),s.ROTATION&&o.fromBufferAttribute(s.ROTATION,e),s.SCALE&&A.fromBufferAttribute(s.SCALE,e),a.setMatrixAt(e,t.compose(i,o,A));for(const t in s)if("_COLOR_0"===t){const e=s[t];a.instanceColor=new b(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,s[t]);C.prototype.copy.call(a,e),this.parser.assignFinalMaterial(a),r.push(a)}return t.isGroup?(t.clear(),t.add(...r),t):r[0]})))}}const gt="glTF",ut=1313821514,dt=5130562;class GLTFBinaryExtension{constructor(e){this.name=ht.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==gt)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const n=this.header.length-12,r=new DataView(e,12);let o=0;for(;o<n;){const t=r.getUint32(o,!0);o+=4;const n=r.getUint32(o,!0);if(o+=4,n===ut){const n=new Uint8Array(e,12+o,t);this.content=i.decode(n)}else if(n===dt){const i=12+o;this.body=e.slice(i,i+t)}o+=t}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class GLTFDracoMeshCompressionExtension{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=ht.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,n=this.dracoLoader,r=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,s={},A={},a={};for(const e in o){const t=yt[e]||e.toLowerCase();s[t]=o[e]}for(const t in e.attributes){const n=yt[t]||t.toLowerCase();if(void 0!==o[t]){const r=i.accessors[e.attributes[t]],o=mt[r.componentType];a[n]=o.name,A[n]=!0===r.normalized}}return t.getDependency("bufferView",r).then((function(e){return new Promise((function(t,i){n.decodeDracoFile(e,(function(e){for(const t in e.attributes){const i=e.attributes[t],n=A[t];void 0!==n&&(i.normalized=n)}t(e)}),s,a,c,i)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=ht.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return void 0!==t.texCoord&&t.texCoord!==e.channel||void 0!==t.offset||void 0!==t.rotation||void 0!==t.scale?(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e):e}}class GLTFMeshQuantizationExtension{constructor(){this.name=ht.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends pe{constructor(e,t,i,n){super(e,t,i,n)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,n=this.valueSize,r=e*n*3+n;for(let e=0;e!==n;e++)t[e]=i[r+e];return t}interpolate_(e,t,i,n){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,A=2*s,a=3*s,l=n-t,c=(i-t)/l,p=c*c,h=p*c,g=e*a,u=g-a,d=-2*h+3*p,f=h-p,I=1-d,m=f-p+c;for(let e=0;e!==s;e++){const t=o[u+e+s],i=o[u+e+A]*l,n=o[g+e+s],a=o[g+e]*l;r[e]=I*t+m*i+d*n+f*a}return r}}const ft=new I;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,i,n){const r=super.interpolate_(e,t,i,n);return ft.fromArray(r).normalize().toArray(r),r}}const It={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},mt={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},bt={9728:L,9729:M,9984:S,9985:D,9986:v,9987:P},Ct={33071:F,33648:_,10497:T},Bt={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},yt={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},Et={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},xt={CUBICSPLINE:void 0,LINEAR:re,STEP:ne},Qt="OPAQUE",wt="MASK",Pt="BLEND";function addUnknownExtensionsToUserData(e,t,i){for(const n in i.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=i.extensions[n])}function assignExtrasToUserData(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function updateMorphTargets(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let i=0,n=t.weights.length;i<n;i++)e.morphTargetInfluences[i]=t.weights[i];if(t.extras&&Array.isArray(t.extras.targetNames)){const i=t.extras.targetNames;if(e.morphTargetInfluences.length===i.length){e.morphTargetDictionary={};for(let t=0,n=i.length;t<n;t++)e.morphTargetDictionary[i[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function createPrimitiveKey(e){let t;const i=e.extensions&&e.extensions[ht.KHR_DRACO_MESH_COMPRESSION];if(t=i?"draco:"+i.bufferView+":"+i.indices+":"+createAttributesKey(i.attributes):e.indices+":"+createAttributesKey(e.attributes)+":"+e.mode,void 0!==e.targets)for(let i=0,n=e.targets.length;i<n;i++)t+=":"+createAttributesKey(e.targets[i]);return t}function createAttributesKey(e){let t="";const i=Object.keys(e).sort();for(let n=0,r=i.length;n<r;n++)t+=i[n]+":"+e[i[n]]+";";return t}function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const vt=new d;class GLTFParser{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new GLTFRegistry,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,n=-1,r=!1,o=-1;if("undefined"!=typeof navigator){const e=navigator.userAgent;i=!0===/^((?!chrome|android).)*safari/i.test(e);const t=e.match(/Version\/(\d+)/);n=i&&t?parseInt(t[1],10):-1,r=e.indexOf("Firefox")>-1,o=r?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||i&&n<17||r&&o<98?this.textureLoader=new B(this.options.manager):this.textureLoader=new y(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new s(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,n=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])})).then((function(t){const o={scene:t[0][n.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:n.asset,parser:i,userData:{}};return addUnknownExtensionsToUserData(r,o,n),assignExtrasToUserData(o,n),Promise.all(i._invokeAll((function(e){return e.afterRoot&&e.afterRoot(o)}))).then((function(){for(const e of o.scenes)e.updateMatrixWorld();e(o)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i].joints;for(let t=0,i=n.length;t<i;t++)e[n[t]].isBone=!0}for(let t=0,n=e.length;t<n;t++){const n=e[t];void 0!==n.mesh&&(this._addNodeRef(this.meshCache,n.mesh),void 0!==n.skin&&(i[n.mesh].isSkinnedMesh=!0)),void 0!==n.camera&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,i){if(e.refs[t]<=1)return i;const n=i.clone(),updateMappings=(e,t)=>{const i=this.associations.get(e);null!=i&&this.associations.set(t,i);for(const[i,n]of e.children.entries())updateMappings(n,t.children[i])};return updateMappings(i,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const n=e(t[i]);if(n)return n}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let n=0;n<t.length;n++){const r=e(t[n]);r&&i.push(r)}return i}getDependency(e,t){const i=e+":"+t;let n=this.cache.get(i);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":n=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":n=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":n=this.loadCamera(t);break;default:if(n=this._invokeOne((function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)})),!n)throw new Error("Unknown type: "+e)}this.cache.add(i,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,n=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(n.map((function(t,n){return i.getDependency(e,n)}))),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],i=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[ht.KHR_BINARY_GLTF].body);const n=this.options;return new Promise((function(e,r){i.load(o.resolveURL(t.uri,n.path),e,void 0,(function(){r(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then((function(e){const i=t.byteLength||0,n=t.byteOffset||0;return e.slice(n,n+i)}))}loadAccessor(e){const t=this,i=this.json,n=this.json.accessors[e];if(void 0===n.bufferView&&void 0===n.sparse){const e=Bt[n.type],t=mt[n.componentType],i=!0===n.normalized,r=new t(n.count*e);return Promise.resolve(new E(r,e,i))}const r=[];return void 0!==n.bufferView?r.push(this.getDependency("bufferView",n.bufferView)):r.push(null),void 0!==n.sparse&&(r.push(this.getDependency("bufferView",n.sparse.indices.bufferView)),r.push(this.getDependency("bufferView",n.sparse.values.bufferView))),Promise.all(r).then((function(e){const r=e[0],o=Bt[n.type],s=mt[n.componentType],A=s.BYTES_PER_ELEMENT,a=A*o,l=n.byteOffset||0,c=void 0!==n.bufferView?i.bufferViews[n.bufferView].byteStride:void 0,p=!0===n.normalized;let h,g;if(c&&c!==a){const e=Math.floor(l/c),i="InterleavedBuffer:"+n.bufferView+":"+n.componentType+":"+e+":"+n.count;let a=t.cache.get(i);a||(h=new s(r,e*c,n.count*c/A),a=new x(h,c/A),t.cache.add(i,a)),g=new w(a,o,l%c/A,p)}else h=null===r?new s(n.count*o):new s(r,l,n.count*o),g=new E(h,o,p);if(void 0!==n.sparse){const t=Bt.SCALAR,i=mt[n.sparse.indices.componentType],A=n.sparse.indices.byteOffset||0,a=n.sparse.values.byteOffset||0,l=new i(e[1],A,n.sparse.count*t),c=new s(e[2],a,n.sparse.count*o);null!==r&&(g=new E(g.array.slice(),g.itemSize,g.normalized));for(let e=0,t=l.length;e<t;e++){const t=l[e];if(g.setX(t,c[e*o]),o>=2&&g.setY(t,c[e*o+1]),o>=3&&g.setZ(t,c[e*o+2]),o>=4&&g.setW(t,c[e*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return g}))}loadTexture(e){const t=this.json,i=this.options,n=t.textures[e].source,r=t.images[n];let o=this.textureLoader;if(r.uri){const e=i.manager.getHandler(r.uri);null!==e&&(o=e)}return this.loadTextureImage(e,n,o)}loadTextureImage(e,t,i){const n=this,r=this.json,o=r.textures[e],s=r.images[t],A=(s.uri||s.bufferView)+":"+o.sampler;if(this.textureCache[A])return this.textureCache[A];const a=this.loadImageSource(t,i).then((function(t){t.flipY=!1,t.name=o.name||s.name||"",""===t.name&&"string"==typeof s.uri&&!1===s.uri.startsWith("data:image/")&&(t.name=s.uri);const i=(r.samplers||{})[o.sampler]||{};return t.magFilter=bt[i.magFilter]||M,t.minFilter=bt[i.minFilter]||P,t.wrapS=Ct[i.wrapS]||T,t.wrapT=Ct[i.wrapT]||T,n.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[A]=a,a}loadImageSource(e,t){const i=this,n=this.json,r=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const s=n.images[e],A=self.URL||self.webkitURL;let a=s.uri||"",l=!1;if(void 0!==s.bufferView)a=i.getDependency("bufferView",s.bufferView).then((function(e){l=!0;const t=new Blob([e],{type:s.mimeType});return a=A.createObjectURL(t),a}));else if(void 0===s.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const c=Promise.resolve(a).then((function(e){return new Promise((function(i,n){let s=i;!0===t.isImageBitmapLoader&&(s=function(e){const t=new oe(e);t.needsUpdate=!0,i(t)}),t.load(o.resolveURL(e,r.path),s,void 0,n)}))})).then((function(e){return!0===l&&A.revokeObjectURL(a),assignExtrasToUserData(e,s),e.userData.mimeType=s.mimeType||function getImageURIMimeType(e){return e.search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"}(s.uri),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),e}));return this.sourceCache[e]=c,c}assignTexture(e,t,i,n){const r=this;return this.getDependency("texture",i.index).then((function(o){if(!o)return null;if(void 0!==i.texCoord&&i.texCoord>0&&((o=o.clone()).channel=i.texCoord),r.extensions[ht.KHR_TEXTURE_TRANSFORM]){const e=void 0!==i.extensions?i.extensions[ht.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=r.associations.get(o);o=r.extensions[ht.KHR_TEXTURE_TRANSFORM].extendTexture(o,e),r.associations.set(o,t)}}return void 0!==n&&(o.colorSpace=n),e[t]=o,o}))}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const n=void 0===t.attributes.tangent,r=void 0!==t.attributes.color,o=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new k,R.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,t.sizeAttenuation=!1,this.cache.add(e,t)),i=t}else if(e.isLine){const e="LineBasicMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new N,R.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,this.cache.add(e,t)),i=t}if(n||r||o){let e="ClonedMaterial:"+i.uuid+":";n&&(e+="derivative-tangents:"),r&&(e+="vertex-colors:"),o&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=i.clone(),r&&(t.vertexColors=!0),o&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(i))),i=t}e.material=i}getMaterialType(){return G}loadMaterial(e){const t=this,i=this.json,n=this.extensions,r=i.materials[e];let o;const s={},A=[];if((r.extensions||{})[ht.KHR_MATERIALS_UNLIT]){const e=n[ht.KHR_MATERIALS_UNLIT];o=e.getMaterialType(),A.push(e.extendParams(s,r,t))}else{const i=r.pbrMetallicRoughness||{};if(s.color=new l(1,1,1),s.opacity=1,Array.isArray(i.baseColorFactor)){const e=i.baseColorFactor;s.color.setRGB(e[0],e[1],e[2],c),s.opacity=e[3]}void 0!==i.baseColorTexture&&A.push(t.assignTexture(s,"map",i.baseColorTexture,p)),s.metalness=void 0!==i.metallicFactor?i.metallicFactor:1,s.roughness=void 0!==i.roughnessFactor?i.roughnessFactor:1,void 0!==i.metallicRoughnessTexture&&(A.push(t.assignTexture(s,"metalnessMap",i.metallicRoughnessTexture)),A.push(t.assignTexture(s,"roughnessMap",i.metallicRoughnessTexture))),o=this._invokeOne((function(t){return t.getMaterialType&&t.getMaterialType(e)})),A.push(Promise.all(this._invokeAll((function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,s)}))))}!0===r.doubleSided&&(s.side=O);const h=r.alphaMode||Qt;if(h===Pt?(s.transparent=!0,s.depthWrite=!1):(s.transparent=!1,h===wt&&(s.alphaTest=void 0!==r.alphaCutoff?r.alphaCutoff:.5)),void 0!==r.normalTexture&&o!==Y&&(A.push(t.assignTexture(s,"normalMap",r.normalTexture)),s.normalScale=new a(1,1),void 0!==r.normalTexture.scale)){const e=r.normalTexture.scale;s.normalScale.set(e,e)}if(void 0!==r.occlusionTexture&&o!==Y&&(A.push(t.assignTexture(s,"aoMap",r.occlusionTexture)),void 0!==r.occlusionTexture.strength&&(s.aoMapIntensity=r.occlusionTexture.strength)),void 0!==r.emissiveFactor&&o!==Y){const e=r.emissiveFactor;s.emissive=(new l).setRGB(e[0],e[1],e[2],c)}return void 0!==r.emissiveTexture&&o!==Y&&A.push(t.assignTexture(s,"emissiveMap",r.emissiveTexture,p)),Promise.all(A).then((function(){const i=new o(s);return r.name&&(i.name=r.name),assignExtrasToUserData(i,r),t.associations.set(i,{materials:e}),r.extensions&&addUnknownExtensionsToUserData(n,i,r),i}))}createUniqueName(e){const t=U.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,n=this.primitiveCache;function createDracoPrimitive(e){return i[ht.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(i){return addPrimitiveAttributes(i,e,t)}))}const r=[];for(let i=0,o=e.length;i<o;i++){const o=e[i],s=createPrimitiveKey(o),A=n[s];if(A)r.push(A.promise);else{let e;e=o.extensions&&o.extensions[ht.KHR_DRACO_MESH_COMPRESSION]?createDracoPrimitive(o):addPrimitiveAttributes(new X,o,t),n[s]={primitive:o,promise:e},r.push(e)}}return Promise.all(r)}loadMesh(e){const t=this,r=this.json,o=this.extensions,s=r.meshes[e],A=s.primitives,a=[];for(let e=0,t=A.length;e<t;e++){const t=void 0===A[e].material?(void 0===(l=this.cache).DefaultMaterial&&(l.DefaultMaterial=new G({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:ce})),l.DefaultMaterial):this.getDependency("material",A[e].material);a.push(t)}var l;return a.push(t.loadGeometries(A)),Promise.all(a).then((function(r){const a=r.slice(0,r.length-1),l=r[r.length-1],c=[];for(let r=0,p=l.length;r<p;r++){const p=l[r],h=A[r];let g;const u=a[r];if(h.mode===It.TRIANGLES||h.mode===It.TRIANGLE_STRIP||h.mode===It.TRIANGLE_FAN||void 0===h.mode)g=!0===s.isSkinnedMesh?new q(p,u):new H(p,u),!0===g.isSkinnedMesh&&g.normalizeSkinWeights(),h.mode===It.TRIANGLE_STRIP?g.geometry=toTrianglesDrawMode(g.geometry,n):h.mode===It.TRIANGLE_FAN&&(g.geometry=toTrianglesDrawMode(g.geometry,i));else if(h.mode===It.LINES)g=new z(p,u);else if(h.mode===It.LINE_STRIP)g=new j(p,u);else if(h.mode===It.LINE_LOOP)g=new J(p,u);else{if(h.mode!==It.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);g=new W(p,u)}Object.keys(g.geometry.morphAttributes).length>0&&updateMorphTargets(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),assignExtrasToUserData(g,s),h.extensions&&addUnknownExtensionsToUserData(o,g,h),t.assignFinalMaterial(g),c.push(g)}for(let i=0,n=c.length;i<n;i++)t.associations.set(c[i],{meshes:e,primitives:i});if(1===c.length)return s.extensions&&addUnknownExtensionsToUserData(o,c[0],s),c[0];const p=new K;s.extensions&&addUnknownExtensionsToUserData(o,p,s),t.associations.set(p,{meshes:e});for(let e=0,t=c.length;e<t;e++)p.add(c[e]);return p}))}loadCamera(e){let t;const i=this.json.cameras[e],n=i[i.type];if(n)return"perspective"===i.type?t=new V(Z.radToDeg(n.yfov),n.aspectRatio||1,n.znear||1,n.zfar||2e6):"orthographic"===i.type&&(t=new $(-n.xmag,n.xmag,n.ymag,-n.ymag,n.znear,n.zfar)),i.name&&(t.name=this.createUniqueName(i.name)),assignExtrasToUserData(t,i),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],i=[];for(let e=0,n=t.joints.length;e<n;e++)i.push(this._loadNodeShallow(t.joints[e]));return void 0!==t.inverseBindMatrices?i.push(this.getDependency("accessor",t.inverseBindMatrices)):i.push(null),Promise.all(i).then((function(e){const i=e.pop(),n=e,r=[],o=[];for(let e=0,s=n.length;e<s;e++){const s=n[e];if(s){r.push(s);const t=new d;null!==i&&t.fromArray(i.array,16*e),o.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new ee(r,o)}))}loadAnimation(e){const t=this.json,i=this,n=t.animations[e],r=n.name?n.name:"animation_"+e,o=[],s=[],A=[],a=[],l=[];for(let e=0,t=n.channels.length;e<t;e++){const t=n.channels[e],i=n.samplers[t.sampler],r=t.target,c=r.node,p=void 0!==n.parameters?n.parameters[i.input]:i.input,h=void 0!==n.parameters?n.parameters[i.output]:i.output;void 0!==r.node&&(o.push(this.getDependency("node",c)),s.push(this.getDependency("accessor",p)),A.push(this.getDependency("accessor",h)),a.push(i),l.push(r))}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(A),Promise.all(a),Promise.all(l)]).then((function(e){const t=e[0],n=e[1],o=e[2],s=e[3],A=e[4],a=[];for(let e=0,r=t.length;e<r;e++){const r=t[e],l=n[e],c=o[e],p=s[e],h=A[e];if(void 0===r)continue;r.updateMatrix&&r.updateMatrix();const g=i._createAnimationTracks(r,l,c,p,h);if(g)for(let e=0;e<g.length;e++)a.push(g[e])}return new te(r,void 0,a)}))}createNodeMesh(e){const t=this.json,i=this,n=t.nodes[e];return void 0===n.mesh?null:i.getDependency("mesh",n.mesh).then((function(e){const t=i._getNodeRef(i.meshCache,n.mesh,e);return void 0!==n.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,i=n.weights.length;t<i;t++)e.morphTargetInfluences[t]=n.weights[t]})),t}))}loadNode(e){const t=this,i=this.json.nodes[e],n=t._loadNodeShallow(e),r=[],o=i.children||[];for(let e=0,i=o.length;e<i;e++)r.push(t.getDependency("node",o[e]));const s=void 0===i.skin?Promise.resolve(null):t.getDependency("skin",i.skin);return Promise.all([n,Promise.all(r),s]).then((function(e){const t=e[0],i=e[1],n=e[2];null!==n&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(n,vt)}));for(let e=0,n=i.length;e<n;e++)t.add(i[e]);return t}))}_loadNodeShallow(e){const t=this.json,i=this.extensions,n=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const r=t.nodes[e],o=r.name?n.createUniqueName(r.name):"",s=[],A=n._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return A&&s.push(A),void 0!==r.camera&&s.push(n.getDependency("camera",r.camera).then((function(e){return n._getNodeRef(n.cameraCache,r.camera,e)}))),n._invokeAll((function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)})).forEach((function(e){s.push(e)})),this.nodeCache[e]=Promise.all(s).then((function(t){let s;if(s=!0===r.isBone?new ie:t.length>1?new K:1===t.length?t[0]:new C,s!==t[0])for(let e=0,i=t.length;e<i;e++)s.add(t[e]);if(r.name&&(s.userData.name=r.name,s.name=o),assignExtrasToUserData(s,r),r.extensions&&addUnknownExtensionsToUserData(i,s,r),void 0!==r.matrix){const e=new d;e.fromArray(r.matrix),s.applyMatrix4(e)}else void 0!==r.translation&&s.position.fromArray(r.translation),void 0!==r.rotation&&s.quaternion.fromArray(r.rotation),void 0!==r.scale&&s.scale.fromArray(r.scale);return n.associations.has(s)||n.associations.set(s,{}),n.associations.get(s).nodes=e,s})),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],n=this,r=new K;i.name&&(r.name=n.createUniqueName(i.name)),assignExtrasToUserData(r,i),i.extensions&&addUnknownExtensionsToUserData(t,r,i);const o=i.nodes||[],s=[];for(let e=0,t=o.length;e<t;e++)s.push(n.getDependency("node",o[e]));return Promise.all(s).then((function(e){for(let t=0,i=e.length;t<i;t++)r.add(e[t]);return n.associations=(e=>{const t=new Map;for(const[e,i]of n.associations)(e instanceof R||e instanceof oe)&&t.set(e,i);return e.traverse((e=>{const i=n.associations.get(e);null!=i&&t.set(e,i)})),t})(r),r}))}_createAnimationTracks(e,t,i,n,r){const o=[],s=e.name?e.name:e.uuid,A=[];let a;switch(Et[r.path]===Et.weights?e.traverse((function(e){e.morphTargetInfluences&&A.push(e.name?e.name:e.uuid)})):A.push(s),Et[r.path]){case Et.weights:a=Ae;break;case Et.rotation:a=ae;break;case Et.position:case Et.scale:a=se;break;default:if(1===i.itemSize)a=Ae;else a=se}const l=void 0!==n.interpolation?xt[n.interpolation]:re,c=this._getArrayFromAccessor(i);for(let e=0,i=A.length;e<i;e++){const i=new a(A[e]+"."+Et[r.path],t.array,c,l);"CUBICSPLINE"===n.interpolation&&this._createCubicSplineTrackInterpolant(i),o.push(i)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const e=getNormalizedComponentScale(t.constructor),i=new Float32Array(t.length);for(let n=0,r=t.length;n<r;n++)i[n]=t[n]*e;t=i}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function InterpolantFactoryMethodGLTFCubicSpline(e){return new(this instanceof ae?GLTFCubicSplineQuaternionInterpolant:GLTFCubicSplineInterpolant)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function addPrimitiveAttributes(e,t,i){const n=t.attributes,r=[];function assignAttributeAccessor(t,n){return i.getDependency("accessor",t).then((function(t){e.setAttribute(n,t)}))}for(const t in n){const i=yt[t]||t.toLowerCase();i in e.attributes||r.push(assignAttributeAccessor(n[t],i))}if(void 0!==t.indices&&!e.index){const n=i.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));r.push(n)}return le.workingColorSpace!==c&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function computeBounds(e,t,i){const n=t.attributes,r=new he;if(void 0===n.POSITION)return;{const e=i.json.accessors[n.POSITION],t=e.min,o=e.max;if(void 0===t||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(r.set(new f(t[0],t[1],t[2]),new f(o[0],o[1],o[2])),e.normalized){const t=getNormalizedComponentScale(mt[e.componentType]);r.min.multiplyScalar(t),r.max.multiplyScalar(t)}}const o=t.targets;if(void 0!==o){const e=new f,t=new f;for(let n=0,r=o.length;n<r;n++){const r=o[n];if(void 0!==r.POSITION){const n=i.json.accessors[r.POSITION],o=n.min,s=n.max;if(void 0!==o&&void 0!==s){if(t.setX(Math.max(Math.abs(o[0]),Math.abs(s[0]))),t.setY(Math.max(Math.abs(o[1]),Math.abs(s[1]))),t.setZ(Math.max(Math.abs(o[2]),Math.abs(s[2]))),n.normalized){const e=getNormalizedComponentScale(mt[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}r.expandByVector(e)}e.boundingBox=r;const s=new ge;r.getCenter(s.center),s.radius=r.min.distanceTo(r.max)/2,e.boundingSphere=s}(e,t,i),Promise.all(r).then((function(){return void 0!==t.targets?function addMorphTargets(e,t,i){let n=!1,r=!1,o=!1;for(let e=0,i=t.length;e<i;e++){const i=t[e];if(void 0!==i.POSITION&&(n=!0),void 0!==i.NORMAL&&(r=!0),void 0!==i.COLOR_0&&(o=!0),n&&r&&o)break}if(!n&&!r&&!o)return Promise.resolve(e);const s=[],A=[],a=[];for(let l=0,c=t.length;l<c;l++){const c=t[l];if(n){const t=void 0!==c.POSITION?i.getDependency("accessor",c.POSITION):e.attributes.position;s.push(t)}if(r){const t=void 0!==c.NORMAL?i.getDependency("accessor",c.NORMAL):e.attributes.normal;A.push(t)}if(o){const t=void 0!==c.COLOR_0?i.getDependency("accessor",c.COLOR_0):e.attributes.color;a.push(t)}}return Promise.all([Promise.all(s),Promise.all(A),Promise.all(a)]).then((function(t){const i=t[0],s=t[1],A=t[2];return n&&(e.morphAttributes.position=i),r&&(e.morphAttributes.normal=s),o&&(e.morphAttributes.color=A),e.morphTargetsRelative=!0,e}))}(e,t.targets,i):e}))}const Dt=new WeakMap;class DRACOLoader extends r{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,n){const r=new s(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,p,i).catch(i)}decodeDracoFile(e,t,i,n,r=c,o=()=>{}){const s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:r};return this.decodeGeometry(e,s).then(t).catch(o)}decodeGeometry(e,t){const i=JSON.stringify(t);if(Dt.has(e)){const t=Dt.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n;const r=this.workerNextTaskID++,o=e.byteLength,s=this._getWorker(r,o).then((i=>(n=i,new Promise(((i,o)=>{n._callbacks[r]={resolve:i,reject:o},n.postMessage({type:"decode",id:r,taskConfig:t,buffer:e},[e])}))))).then((e=>this._createGeometry(e.geometry)));return s.catch((()=>!0)).then((()=>{n&&r&&this._releaseTask(n,r)})),Dt.set(e,{key:i,promise:s}),s}_createGeometry(e){const t=new X;e.index&&t.setIndex(new E(e.index.array,1));for(let i=0;i<e.attributes.length;i++){const n=e.attributes[i],r=n.name,o=n.array,s=n.itemSize,A=new E(o,s);"color"===r&&(this._assignVertexColorSpace(A,n.vertexColorSpace),A.normalized=o instanceof Float32Array==!1),t.setAttribute(r,A)}return t}_assignVertexColorSpace(e,t){if(t!==p)return;const i=new l;for(let t=0,n=e.count;t<n;t++)i.fromBufferAttribute(e,t).convertSRGBToLinear(),e.setXYZ(t,i.r,i.g,i.b)}_loadLibrary(e,t){const i=new s(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise(((t,n)=>{i.load(e,t,void 0,n)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then((t=>{const i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);const n=DRACOWorker.toString(),r=["/* draco decoder */",i,"","/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r]))})),this.decoderPending}_getWorker(e,t){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){const i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort((function(e,t){return e._taskLoad>t._taskLoad?-1:1}));const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i}))}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map((e=>e._taskLoad)))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function DRACOWorker(){let e,t;function decodeAttribute(e,t,i,n,r,o){const s=o.num_components(),A=i.num_points()*s,a=A*r.BYTES_PER_ELEMENT,l=function getDracoDataType(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,r),c=e._malloc(a);t.GetAttributeDataArrayForAllPoints(i,o,l,a,c);const p=new r(e.HEAPF32.buffer,c,A).slice();return e._free(c),{name:n,array:p,itemSize:s}}onmessage=function(i){const n=i.data;switch(n.type){case"init":e=n.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const i=n.buffer,r=n.taskConfig;t.then((e=>{const t=e.draco,o=new t.Decoder;try{const e=function decodeGeometry(e,t,i,n){const r=n.attributeIDs,o=n.attributeTypes;let s,A;const a=t.GetEncodedGeometryType(i);if(a===e.TRIANGULAR_MESH)s=new e.Mesh,A=t.DecodeArrayToMesh(i,i.byteLength,s);else{if(a!==e.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");s=new e.PointCloud,A=t.DecodeArrayToPointCloud(i,i.byteLength,s)}if(!A.ok()||0===s.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+A.error_msg());const l={index:null,attributes:[]};for(const i in r){const A=self[o[i]];let a,c;if(n.useUniqueIDs)c=r[i],a=t.GetAttributeByUniqueId(s,c);else{if(c=t.GetAttributeId(s,e[r[i]]),-1===c)continue;a=t.GetAttribute(s,c)}const p=decodeAttribute(e,t,s,i,A,a);"color"===i&&(p.vertexColorSpace=n.vertexColorSpace),l.attributes.push(p)}a===e.TRIANGULAR_MESH&&(l.index=function decodeIndex(e,t,i){const n=i.num_faces(),r=3*n,o=4*r,s=e._malloc(o);t.GetTrianglesUInt32Array(i,o,s);const A=new Uint32Array(e.HEAPF32.buffer,s,r).slice();return e._free(s),{array:A,itemSize:1}}(e,t,s));return e.destroy(s),l}(t,o,new Int8Array(i),r),s=e.attributes.map((e=>e.array.buffer));e.index&&s.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(o)}}))}}}class WorkerPool{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const i=this.workersResolve[e];if(i&&i(t),this.queue.length){const{resolve:t,msg:i,transfer:n}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,n)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise((i=>{const n=this._getIdleWorker();-1!==n?(this._initWorker(n),this.workerStatus|=1<<n,this.workersResolve[n]=i,this.workers[n].postMessage(e,t)):this.queue.push({resolve:i,msg:e,transfer:t})}))}dispose(){this.workers.forEach((e=>e.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const St=9,Mt=15,Lt=16,Tt=22,_t=37,Ft=43,kt=76,Rt=83,Nt=97,Gt=100,Ot=103,Yt=109,Ut=165,Xt=166;class Si{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Ii{constructor(e,t,i,n){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=n,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_skip(e){return this._offset+=e,this}_scan(e,t=0){const i=this._offset;let n=0;for(;this._dataView.getUint8(this._offset)!==t&&n<e;)n++,this._offset++;return n<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,n)}}const qt=[171,75,84,88,32,50,48,187,13,10,26,10];function Ei(e){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(e):Buffer.from(e).toString("utf8")}let Ht,zt,jt;const Jt={env:{emscripten_notify_memory_growth:function(e){jt=new Uint8Array(zt.exports.memory.buffer)}}};class Q{init(){return Ht||(Ht="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+Wt).then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,Jt))).then(this._init):WebAssembly.instantiate(Buffer.from(Wt,"base64"),Jt).then(this._init),Ht)}_init(e){zt=e.instance,Jt.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!zt)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,n=zt.exports.malloc(i);jt.set(e,n),t=t||Number(zt.exports.ZSTD_findDecompressedSize(n,i));const r=zt.exports.malloc(t),o=zt.exports.ZSTD_decompress(r,t,n,i),s=jt.slice(r,r+o);return zt.exports.free(n),zt.exports.free(r),s}}const Wt="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",Kt=new WeakMap;let Vt,Zt=0;class KTX2Loader extends r{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new WorkerPool,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),etc1Supported:await e.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return!0===e.isWebGPURenderer?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bptc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new s(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),i=new s(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const n=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,n]).then((([e,t])=>{const i=KTX2Loader.BasisWorker.toString(),n=["/* constants */","let _EngineFormat = "+JSON.stringify(KTX2Loader.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(KTX2Loader.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(KTX2Loader.BasisFormat),"/* basis_transcoder.js */",e,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([n])),this.transcoderBinary=t,this.workerPool.setWorkerCreator((()=>{const e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:"init",config:this.workerConfig,transcoderBinary:t},[t]),e}))})),Zt>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Zt++}return this.transcoderPending}load(e,t,i,n){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const r=new s(this.manager);r.setResponseType("arraybuffer"),r.setWithCredentials(this.withCredentials),r.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Kt.has(e)){return Kt.get(e).promise.then(t).catch(i)}this._createTexture(e).then((e=>t?t(e):null)).catch(i)}_createTextureFrom(e,t){const{faces:i,width:n,height:r,format:o,type:s,error:A,dfdFlags:a}=e;if("error"===s)return Promise.reject(A);let l;if(6===t.faceCount)l=new ue(i,o,de);else{const e=i[0].mipmaps;l=t.layerCount>1?new fe(e,n,r,t.layerCount,o,de):new Ie(e,n,r,o,de)}return l.minFilter=1===i[0].mipmaps.length?M:P,l.magFilter=M,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=parseColorSpace(t),l.premultiplyAlpha=!!(1&a),l}async _createTexture(e,t={}){const i=function Pi(e){const t=new Uint8Array(e.buffer,e.byteOffset,qt.length);if(t[0]!==qt[0]||t[1]!==qt[1]||t[2]!==qt[2]||t[3]!==qt[3]||t[4]!==qt[4]||t[5]!==qt[5]||t[6]!==qt[6]||t[7]!==qt[7]||t[8]!==qt[8]||t[9]!==qt[9]||t[10]!==qt[10]||t[11]!==qt[11])throw new Error("Missing KTX 2.0 identifier.");const i=new Si,n=17*Uint32Array.BYTES_PER_ELEMENT,r=new Ii(e,qt.length,n,!0);i.vkFormat=r._nextUint32(),i.typeSize=r._nextUint32(),i.pixelWidth=r._nextUint32(),i.pixelHeight=r._nextUint32(),i.pixelDepth=r._nextUint32(),i.layerCount=r._nextUint32(),i.faceCount=r._nextUint32();const o=r._nextUint32();i.supercompressionScheme=r._nextUint32();const s=r._nextUint32(),A=r._nextUint32(),a=r._nextUint32(),l=r._nextUint32(),c=r._nextUint64(),p=r._nextUint64(),h=new Ii(e,qt.length+n,3*o*8,!0);for(let t=0;t<o;t++)i.levels.push({levelData:new Uint8Array(e.buffer,e.byteOffset+h._nextUint64(),h._nextUint64()),uncompressedByteLength:h._nextUint64()});const g=new Ii(e,s,A,!0),u={vendorId:g._skip(4)._nextUint16(),descriptorType:g._nextUint16(),versionNumber:g._nextUint16(),descriptorBlockSize:g._nextUint16(),colorModel:g._nextUint8(),colorPrimaries:g._nextUint8(),transferFunction:g._nextUint8(),flags:g._nextUint8(),texelBlockDimension:[g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8()],bytesPlane:[g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8()],samples:[]},d=(u.descriptorBlockSize/4-6)/4;for(let e=0;e<d;e++){const t={bitOffset:g._nextUint16(),bitLength:g._nextUint8(),channelType:g._nextUint8(),samplePosition:[g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&t.channelType?(t.sampleLower=g._nextInt32(),t.sampleUpper=g._nextInt32()):(t.sampleLower=g._nextUint32(),t.sampleUpper=g._nextUint32()),u.samples[e]=t}i.dataFormatDescriptor.length=0,i.dataFormatDescriptor.push(u);const f=new Ii(e,a,l,!0);for(;f._offset<l;){const e=f._nextUint32(),t=f._scan(e),n=Ei(t),r=f._scan(e-t.byteLength);i.keyValue[n]=n.match(/^ktx/i)?Ei(r):r,f._offset%4&&f._skip(4-f._offset%4)}if(p<=0)return i;const I=new Ii(e,c,p,!0),m=I._nextUint16(),b=I._nextUint16(),C=I._nextUint32(),B=I._nextUint32(),y=I._nextUint32(),E=I._nextUint32(),x=[];for(let e=0;e<o;e++)x.push({imageFlags:I._nextUint32(),rgbSliceByteOffset:I._nextUint32(),rgbSliceByteLength:I._nextUint32(),alphaSliceByteOffset:I._nextUint32(),alphaSliceByteLength:I._nextUint32()});const w=c+I._offset,P=w+C,v=P+B,D=v+y,S=new Uint8Array(e.buffer,e.byteOffset+w,C),M=new Uint8Array(e.buffer,e.byteOffset+P,B),L=new Uint8Array(e.buffer,e.byteOffset+v,y),T=new Uint8Array(e.buffer,e.byteOffset+D,E);return i.globalData={endpointCount:m,selectorCount:b,imageDescs:x,endpointsData:S,selectorsData:M,tablesData:L,extendedData:T},i}(new Uint8Array(e));if(0!==i.vkFormat)return async function createRawTexture(e){const{vkFormat:t}=e;if(void 0===ei[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let i;2===e.supercompressionScheme&&(Vt||(Vt=new Promise((async e=>{const t=new Q;await t.init(),e(t)}))),i=await Vt);const n=[];for(let r=0;r<e.levels.length;r++){const o=Math.max(1,e.pixelWidth>>r),s=Math.max(1,e.pixelHeight>>r),A=e.pixelDepth?Math.max(1,e.pixelDepth>>r):0,a=e.levels[r];let l,c;if(0===e.supercompressionScheme)l=a.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");l=i.decode(a.levelData,a.uncompressedByteLength)}c=ti[t]===we?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):ti[t]===Qe?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,n.push({data:c,width:o,height:s,depth:A})}let r;if($t.has(ei[t]))r=0===e.pixelDepth?new Pe(n[0].data,e.pixelWidth,e.pixelHeight):new ve(n[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");r=new Ie(n,e.pixelWidth,e.pixelHeight)}return r.mipmaps=n,r.type=ti[t],r.format=ei[t],r.colorSpace=parseColorSpace(e),r.needsUpdate=!0,Promise.resolve(r)}(i);const n=t,r=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:n},[e]))).then((e=>this._createTextureFrom(e.data,i)));return Kt.set(e,{promise:r}),r}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Zt--,this}}KTX2Loader.BasisFormat={ETC1S:0,UASTC_4x4:1},KTX2Loader.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},KTX2Loader.EngineFormat={RGBAFormat:xe,RGBA_ASTC_4x4_Format:Re,RGBA_BPTC_Format:ke,RGBA_ETC2_EAC_Format:Fe,RGBA_PVRTC_4BPPV1_Format:_e,RGBA_S3TC_DXT5_Format:Te,RGB_ETC1_Format:Le,RGB_ETC2_Format:Me,RGB_PVRTC_4BPPV1_Format:Se,RGBA_S3TC_DXT1_Format:De},KTX2Loader.BasisWorker=function(){let e,t,i;const n=_EngineFormat,r=_TranscoderFormat,o=_BasisFormat;self.addEventListener("message",(function(s){const l=s.data;switch(l.type){case"init":e=l.config,function init(e){t=new Promise((t=>{i={wasmBinary:e,onRuntimeInitialized:t},BASIS(i)})).then((()=>{i.initializeBasis(),void 0===i.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}))}(l.transcoderBinary);break;case"transcode":t.then((()=>{try{const{faces:t,buffers:s,width:c,height:p,hasAlpha:h,format:g,dfdFlags:u}=function transcode(t){const s=new i.KTX2File(new Uint8Array(t));function cleanup(){s.close(),s.delete()}if(!s.isValid())throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const l=s.isUASTC()?o.UASTC_4x4:o.ETC1S,c=s.getWidth(),p=s.getHeight(),h=s.getLayers()||1,g=s.getLevels(),u=s.getFaces(),d=s.getHasAlpha(),f=s.getDFDFlags(),{transcoderFormat:I,engineFormat:m}=function getTranscoderFormat(t,i,s,l){let c,p;const h=t===o.ETC1S?A:a;for(let n=0;n<h.length;n++){const r=h[n];if(e[r.if]&&(r.basisFormat.includes(t)&&!(l&&r.transcoderFormat.length<2)&&(!r.needsPowerOfTwo||isPowerOfTwo(i)&&isPowerOfTwo(s))))return c=r.transcoderFormat[l?1:0],p=r.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:p}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=r.RGBA32,p=n.RGBAFormat,{transcoderFormat:c,engineFormat:p}}(l,c,p,d);if(!c||!p||!g)throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!s.startTranscoding())throw cleanup(),new Error("THREE.KTX2Loader: .startTranscoding failed");const b=[],C=[];for(let e=0;e<u;e++){const t=[];for(let i=0;i<g;i++){const n=[];let r,o;for(let t=0;t<h;t++){const A=s.getImageLevelInfo(i,t,e);0!==e||0!==i||0!==t||A.origWidth%4==0&&A.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),g>1?(r=A.origWidth,o=A.origHeight):(r=A.width,o=A.height);const a=new Uint8Array(s.getImageTranscodedSizeInBytes(i,t,0,I));if(!s.transcodeImage(a,i,t,e,I,0,-1,-1))throw cleanup(),new Error("THREE.KTX2Loader: .transcodeImage failed.");n.push(a)}const A=concat(n);t.push({data:A,width:r,height:o}),C.push(A.buffer)}b.push({mipmaps:t,width:c,height:p,format:m})}return cleanup(),{faces:b,buffers:C,width:c,height:p,hasAlpha:d,format:m,dfdFlags:f}}(l.buffer);self.postMessage({type:"transcode",id:l.id,faces:t,width:c,height:p,hasAlpha:h,format:g,dfdFlags:u},s)}catch(e){console.error(e),self.postMessage({type:"error",id:l.id,error:e.message})}}))}}));const s=[{if:"astcSupported",basisFormat:[o.UASTC_4x4],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.BC1,r.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.ETC1],engineFormat:[n.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],A=s.sort((function(e,t){return e.priorityETC1S-t.priorityETC1S})),a=s.sort((function(e,t){return e.priorityUASTC-t.priorityUASTC}));function isPowerOfTwo(e){return e<=2||!(e&e-1)&&0!==e}function concat(e){if(1===e.length)return e[0];let t=0;for(let i=0;i<e.length;i++){t+=e[i].byteLength}const i=new Uint8Array(t);let n=0;for(let t=0;t<e.length;t++){const r=e[t];i.set(r,n),n+=r.byteLength}return i}};const $t=new Set([xe,Ee,ye]),ei={[Yt]:xe,[Nt]:xe,[_t]:xe,[Ft]:xe,[Ot]:Ee,[Rt]:Ee,[Lt]:Ee,[Tt]:Ee,[Gt]:ye,[kt]:ye,[Mt]:ye,[St]:ye,[Xt]:Be,[Ut]:Be},ti={[Yt]:we,[Nt]:Qe,[_t]:de,[Ft]:de,[Ot]:we,[Rt]:Qe,[Lt]:de,[Tt]:de,[Gt]:we,[kt]:Qe,[Mt]:de,[St]:de,[Xt]:de,[Ut]:de};function parseColorSpace(e){const t=e.dataFormatDescriptor[0];return 1===t.colorPrimaries?2===t.transferFunction?p:c:10===t.colorPrimaries?2===t.transferFunction?me:be:(0===t.colorPrimaries||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),Ce)}var ii=function(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if("object"!=typeof WebAssembly)return{supported:!1};var i,n=WebAssembly.validate(e)?"b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb":"b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",r=WebAssembly.instantiate(unpack(n),{}).then((function(e){(i=e.instance).exports.__wasm_call_ctors()}));function unpack(e){for(var i=new Uint8Array(e.length),n=0;n<e.length;++n){var r=e.charCodeAt(n);i[n]=r>96?r-97:r>64?r-39:r+4}var o=0;for(n=0;n<e.length;++n)i[o++]=i[n]<60?t[i[n]]:64*(i[n]-60)+i[++n];return i.buffer.slice(0,o)}function decode(e,t,n,r,o,s){var A=i.exports.sbrk,a=n+3&-4,l=A(a*r),c=A(o.length),p=new Uint8Array(i.exports.memory.buffer);p.set(o,c);var h=e(l,n,r,c,o.length);if(0==h&&s&&s(l,a,r),t.set(p.subarray(l,l+n*r)),A(l-A(0)),0!=h)throw new Error("Malformed buffer data: "+h)}var o={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},s={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},A=[],a=0;function createWorker(e){var t={object:new Worker(e),pending:0,requests:{}};return t.object.onmessage=function(e){var i=e.data;t.pending-=i.count,t.requests[i.id][i.action](i.value),delete t.requests[i.id]},t}function initWorkers(e){for(var t="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(unpack(n))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+decode.toString()+workerProcess.toString(),i=new Blob([t],{type:"text/javascript"}),r=URL.createObjectURL(i),o=0;o<e;++o)A[o]=createWorker(r);URL.revokeObjectURL(r)}function workerProcess(e){r.then((function(){var t=e.data;try{var n=new Uint8Array(t.count*t.size);decode(i.exports[t.mode],n,t.count,t.size,t.source,i.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:"resolve",value:n},[n.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:"reject",value:e})}}))}return{ready:r,supported:!0,useWorkers:function(e){initWorkers(e)},decodeVertexBuffer:function(e,t,n,r,s){decode(i.exports.meshopt_decodeVertexBuffer,e,t,n,r,i.exports[o[s]])},decodeIndexBuffer:function(e,t,n,r){decode(i.exports.meshopt_decodeIndexBuffer,e,t,n,r)},decodeIndexSequence:function(e,t,n,r){decode(i.exports.meshopt_decodeIndexSequence,e,t,n,r)},decodeGltfBuffer:function(e,t,n,r,A,a){decode(i.exports[s[A]],e,t,n,r,i.exports[o[a]])},decodeGltfBufferAsync:function(e,t,n,l,c){return A.length>0?function decodeWorker(e,t,i,n,r){for(var o=A[0],s=1;s<A.length;++s)A[s].pending<o.pending&&(o=A[s]);return new Promise((function(s,A){var l=new Uint8Array(i),c=a++;o.pending+=e,o.requests[c]={resolve:s,reject:A},o.object.postMessage({id:c,count:e,size:t,source:l,mode:n,filter:r},[l.buffer])}))}(e,t,n,s[l],o[c]):r.then((function(){var r=new Uint8Array(e*t);return decode(i.exports[s[l]],r,e,t,n,i.exports[o[c]]),r}))}}}();class TDSLoader extends r{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,t,i,n){const r=this,A=""===this.path?o.extractUrlBase(e):this.path,a=new s(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(i){try{t(r.parse(i,A))}catch(t){n?n(t):console.error(t),r.manager.itemError(e)}}),i,n)}parse(e,t){this.group=new K,this.materials=[],this.meshes=[],this.readFile(e,t);for(let e=0;e<this.meshes.length;e++)this.group.add(this.meshes[e]);return this.group}readFile(e,t){const i=new DataView(e),n=new Chunk(i,0,this.debugMessage);if(n.id===ri||n.id===oi||n.id===ni){let e=n.readChunk();for(;e;){if(e.id===si){const t=e.readDWord();this.debugMessage("3DS file version: "+t)}else e.id===gi?this.readMeshData(e,t):this.debugMessage("Unknown main chunk: "+e.hexId);e=n.readChunk()}}this.debugMessage("Parsed "+this.meshes.length+" meshes")}readMeshData(e,t){let i=e.readChunk();for(;i;){if(i.id===ui){const e=+i.readDWord();this.debugMessage("Mesh Version: "+e)}else if(i.id===di){const e=i.readFloat();this.debugMessage("Master scale: "+e),this.group.scale.set(e,e,e)}else i.id===Oi?(this.debugMessage("Named Object"),this.readNamedObject(i)):i.id===fi?(this.debugMessage("Material"),this.readMaterialEntry(i,t)):this.debugMessage("Unknown MDATA chunk: "+i.hexId);i=e.readChunk()}}readNamedObject(e){const t=e.readString();let i=e.readChunk();for(;i;){if(i.id===Yi){const e=this.readMesh(i);e.name=t,this.meshes.push(e)}else this.debugMessage("Unknown named object chunk: "+i.hexId);i=e.readChunk()}}readMaterialEntry(e,t){let i=e.readChunk();const n=new Ne;for(;i;){if(i.id===mi)n.name=i.readString(),this.debugMessage(" Name: "+n.name);else if(i.id===vi)this.debugMessage(" Wireframe"),n.wireframe=!0;else if(i.id===Di){const e=i.readByte();n.wireframeLinewidth=e,this.debugMessage(" Wireframe Thickness: "+e)}else if(i.id===Qi)n.side=O,this.debugMessage(" DoubleSided");else if(i.id===wi)this.debugMessage(" Additive Blending"),n.blending=Ge;else if(i.id===Ci)this.debugMessage(" Diffuse Color"),n.color=this.readColor(i);else if(i.id===Bi)this.debugMessage(" Specular Color"),n.specular=this.readColor(i);else if(i.id===bi)this.debugMessage(" Ambient color"),n.color=this.readColor(i);else if(i.id===yi){const e=this.readPercentage(i);n.shininess=100*e,this.debugMessage(" Shininess : "+e)}else if(i.id===xi){const e=this.readPercentage(i);n.opacity=1-e,this.debugMessage(" Transparency : "+e),n.transparent=n.opacity<1}else i.id===Mi?(this.debugMessage(" ColorMap"),n.map=this.readMap(i,t)):i.id===Ti?(this.debugMessage(" BumpMap"),n.bumpMap=this.readMap(i,t)):i.id===Li?(this.debugMessage(" OpacityMap"),n.alphaMap=this.readMap(i,t)):i.id===_i?(this.debugMessage(" SpecularMap"),n.specularMap=this.readMap(i,t)):this.debugMessage(" Unknown material chunk: "+i.hexId);i=e.readChunk()}this.materials[n.name]=n}readMesh(e){let t=e.readChunk();const i=new X,n=new Ne,r=new H(i,n);for(r.name="mesh";t;){if(t.id===Ui){const e=t.readWord();this.debugMessage(" Vertex: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("position",new Oe(n,3))}else if(t.id===Xi)this.readFaceArray(t,r);else if(t.id===Hi){const e=t.readWord();this.debugMessage(" UV: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("uv",new Oe(n,2))}else if(t.id===zi){this.debugMessage(" Tranformation Matrix (TODO)");const e=[];for(let i=0;i<12;i++)e[i]=t.readFloat();const n=new d;n.elements[0]=e[0],n.elements[1]=e[6],n.elements[2]=e[3],n.elements[3]=e[9],n.elements[4]=e[2],n.elements[5]=e[8],n.elements[6]=e[5],n.elements[7]=e[11],n.elements[8]=e[1],n.elements[9]=e[7],n.elements[10]=e[4],n.elements[11]=e[10],n.elements[12]=0,n.elements[13]=0,n.elements[14]=0,n.elements[15]=1,n.transpose();const o=new d;o.copy(n).invert(),i.applyMatrix4(o),n.decompose(r.position,r.quaternion,r.scale)}else this.debugMessage(" Unknown mesh chunk: "+t.hexId);t=e.readChunk()}return i.computeVertexNormals(),r}readFaceArray(e,t){const i=e.readWord();this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(n);let r=0,o=0;for(;!e.endOfChunk;){const i=e.readChunk();if(i.id===qi){this.debugMessage(" Material Group");const e=this.readMaterialGroup(i),n=3*e.index.length;t.geometry.addGroup(o,n,r),o+=n,r++;const s=this.materials[e.name];!1===Array.isArray(t.material)&&(t.material=[]),void 0!==s&&t.material.push(s)}else this.debugMessage(" Unknown face array chunk: "+i.hexId)}1===t.material.length&&(t.material=t.material[0])}readMap(e,t){let i=e.readChunk(),n={};const r=new B(this.manager);for(r.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);i;){if(i.id===Fi){const e=i.readString();n=r.load(e),n.userData.name=e.split(".").slice(0,-1).join("."),this.debugMessage(" File: "+t+e)}else i.id===Ni?(n.offset.x=i.readFloat(),this.debugMessage(" OffsetX: "+n.offset.x)):i.id===Gi?(n.offset.y=i.readFloat(),this.debugMessage(" OffsetY: "+n.offset.y)):i.id===ki?(n.repeat.x=i.readFloat(),this.debugMessage(" RepeatX: "+n.repeat.x)):i.id===Ri?(n.repeat.y=i.readFloat(),this.debugMessage(" RepeatY: "+n.repeat.y)):this.debugMessage(" Unknown map chunk: "+i.hexId);i=e.readChunk()}return n}readMaterialGroup(e){const t=e.readString(),i=e.readWord();this.debugMessage(" Name: "+t),this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord());return{name:t,index:n}}readColor(e){const t=e.readChunk(),i=new l;if(t.id===ai||t.id===li){const e=t.readByte(),n=t.readByte(),r=t.readByte();i.setRGB(e/255,n/255,r/255),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else if(t.id===Ai||t.id===ci){const e=t.readFloat(),n=t.readFloat(),r=t.readFloat();i.setRGB(e,n,r),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else this.debugMessage(" Unknown color chunk: "+t.hexId);return i}readPercentage(e){const t=e.readChunk();switch(t.id){case pi:return t.readShort()/100;case hi:return t.readFloat();default:return this.debugMessage(" Unknown percentage chunk: "+t.hexId),0}}debugMessage(e){this.debug&&console.log(e)}}class Chunk{constructor(e,t,i){this.data=e,this.offset=t,this.position=t,this.debugMessage=i,this.debugMessage instanceof Function&&(this.debugMessage=function(){}),this.id=this.readWord(),this.size=this.readDWord(),this.end=this.offset+this.size,this.end>e.byteLength&&this.debugMessage("Bad chunk size for chunk at "+t)}readChunk(){if(this.endOfChunk)return null;try{const e=new Chunk(this.data,this.position,this.debugMessage);return this.position+=e.size,e}catch(e){return this.debugMessage("Unable to read chunk at "+this.position),null}}get hexId(){return this.id.toString(16)}get endOfChunk(){return this.position>=this.end}readByte(){const e=this.data.getUint8(this.position,!0);return this.position+=1,e}readFloat(){try{const e=this.data.getFloat32(this.position,!0);return this.position+=4,e}catch(e){return this.debugMessage(e+" "+this.position+" "+this.data.byteLength),0}}readInt(){const e=this.data.getInt32(this.position,!0);return this.position+=4,e}readShort(){const e=this.data.getInt16(this.position,!0);return this.position+=2,e}readDWord(){const e=this.data.getUint32(this.position,!0);return this.position+=4,e}readWord(){const e=this.data.getUint16(this.position,!0);return this.position+=2,e}readString(){let e="",t=this.readByte();for(;t;)e+=String.fromCharCode(t),t=this.readByte();return e}}const ni=19789,ri=15786,oi=49725,si=2,Ai=16,ai=17,li=18,ci=19,pi=48,hi=49,gi=15677,ui=15678,di=256,fi=45055,mi=40960,bi=40976,Ci=40992,Bi=41008,yi=41024,xi=41040,Qi=41089,wi=41091,vi=41093,Di=41095,Mi=41472,Li=41488,Ti=41520,_i=41476,Fi=41728,ki=41812,Ri=41814,Ni=41816,Gi=41818,Oi=16384,Yi=16640,Ui=16656,Xi=16672,qi=16688,Hi=16704,zi=16736;const to_std=(t,i)=>{if(!t||"MeshPhongMaterial"!==t.type)return t;if(i){const e=i.get(t);if(e)return e}const n=1-("number"==typeof t.shininess?Math.min(Math.max(t.shininess,0),100):30)/100,r=new e.MeshStandardMaterial({name:t.name,color:t.color,map:t.map,normalMap:t.normalMap,emissive:t.emissive,emissiveMap:t.emissiveMap,envMap:t.envMap,envMapIntensity:t.envMapIntensity??1,lightMap:t.lightMap,lightMapIntensity:t.lightMapIntensity,alphaTest:t.alphaTest,depthWrite:t.depthWrite,depthTest:t.depthTest,wireframe:t.wireframe,transparent:t.transparent,opacity:t.opacity,side:t.side,roughness:n,metalness:0});return i&&i.set(t,r),"function"==typeof t.dispose&&(t.dispose(),t.userData=t.userData||{},t.userData._replaced=!0),r.needsUpdate=!0,r};function newgcad(t,i,n,r=!0){let o={},s={},A={},a={},l={};const c=new Map;let p={},h={},g=new e.TextureLoader,u=new GLTFLoader,d=new TDSLoader;const f=new DRACOLoader;f.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"),u.setDRACOLoader(f);const I=new KTX2Loader;I.setTranscoderPath("https://unpkg.com/three@0.159.0/examples/jsm/libs/basis/"),u.setKTX2Loader(I),u.setMeshoptDecoder(ii);let m=[n],getcat=()=>m[m.length-1],b={};async function clearmat(){for(const e in s)if(s[e]){const t=await s[e];t?.dispose()}for(const e in p)p[e]&&p[e]?.dispose();for(const[e,t]of c.entries()){const e=t instanceof Promise?await t:t;e?.dispose&&e.dispose()}c.clear(),s={},p={}}function getdims(t){let i=(new e.Box3).setFromObject(t),n2=e=>Math.round(100*e)/100;return{zero:{x:n2(-i.min.x),y:n2(-i.min.y),z:n2(-i.min.z)},dim:{x:n2(i.max.x-i.min.x),y:n2(i.max.y-i.min.y),z:n2(i.max.z-i.min.z)},position:t.position,rotation:{x:t.rotation.x,y:t.rotation.y,z:t.rotation.z},scale:t.scale}}async function get3ds(e){e.endsWith(".3ds")&&(e=e.slice(0,-4));const i=hash(`${getcat()}|${e}.3ds`);return A[i]||(A[i]=await new Promise(((n,r)=>{let o,s="";e.startsWith("https://")?(o=`${e}.3ds`,s=o):t._cdn?(o=`${t._cdn}${getcat()}/3d/${e}.3ds`,s=`${t._cdn}${getcat()}/3d/${e}/`):(o=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:".3ds"}),s=o+"&tex="),d.setResourcePath(s),d.load(o,(e=>{const t=new WeakMap;e.traverse((e=>{e.isMesh&&e.material&&(e.material=Array.isArray(e.material)?e.material.map((e=>to_std(e,t))):to_std(e.material,t))})),e.userData||(e.userData={}),e.userData._ky=i,n(e)}),void 0,(e=>{console.log(e),delete A[i],n(void 0)}))}))),A[i]}async function getglb(e){const i=".glb";e.endsWith(i)&&(e=e.slice(0,-4)),e.startsWith("https://")||(e=e.replace(/\//g,"+"));let n=(e=e.split("+"))[1];e=e[0];const r=hash(`${getcat()}|${e}${i}`);A[r]||(A[r]=await new Promise(((n,o)=>{let s;s=e.startsWith("https://")?`${e}.glb`:t._cdn?`${t._cdn}${getcat()}/3d/${e}.glb`:t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:i}),u.setPath(""),u.setResourcePath((e=>(console.log("risorsa",e),`${s}&tex=${e}`))),u.load(s,(async e=>{const t=e.scene;t.userData||(t.userData={}),t.userData._ky=r,n(t)}),void 0,(e=>{console.log(e),delete A[r],n(void 0)}))})));let o=A[r];if(n){let e=o?.getObjectByName(n);e&&(o=e)}return o}return{clearmatricole:()=>{b={}},P:t,bus:i,tex:async function tex(i,n=1,r,o){let A;return r||(r=n),o||(o=0),"__alpha"==i?(A=i,s[A]||(s[A]=function getfortransparent(){const t=new e.CanvasTexture(function generateTexture(){const e=document.createElement("canvas");e.width=2,e.height=2;const t=e.getContext("2d");return t.fillStyle="white",t.fillRect(0,1,2,1),e}());return t.magFilter=e.NearestFilter,t.wrapT=e.RepeatWrapping,t.wrapS=e.RepeatWrapping,t.repeat.set(1,3.5),t}()),s[A]):(A=hash(`${getcat()}|${i}|${n}|${r}|${o}`),s[A]||(s[A]=new Promise(((a,l)=>{let p;if(i.startsWith("https://"))p=i;else if(t._cdn)if(i.includes("/")){let e=i.split("/");p=`${t._cdn}${e[0]}/textures/${e[1]}`}else p=`${t._cdn}${getcat()}/textures/${i}`;else p=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"textures",name:i,force:1});if(c.has(p)){const t=c.get(p).clone();return t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.center.set(.5,.5),t.repeat.set(n,r),t.rotation=o,void a(t)}g.load(p,(t=>{c.set(p,t),t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.repeat.set(n,r),t.center.set(.5,.5),t.rotation=o,a(t)}),void 0,(e=>{console.log(`Manca Texture ${i}!. questo rallenta molto il processo`),delete s[A],a(void 0)}))}))),s[A])},getglb:getglb,get3ds:get3ds,replacemats:function replacemats(e,t,i){if(!Array.isArray(t)||0==t.length)return e;const leggi_slot=e=>{if(!e)return-1;let t=(e?.map?.name||e?.name||e?.map?.userData?.name||"").toString().trim();if(i){const e=i(t);void 0!==e&&(t=e)}if(t.includes("_")&&(t=t.split("_").pop()),!t)return-1;const n=parseInt(t,10);return n>=1&&n<=9?n:-1};let n=!1,r=String(e.userData?._ky||"");if(e.traverse((e=>{if(!e.isMesh)return;const i=Array.isArray(e.material)?e.material:[e.material];for(const e of i){const i=leggi_slot(e);i>0&&t[i-1]&&(n=!0,r+="|"+(t[i-1].name||t[i-1].uuid))}})),n){if(r=hash(r),A[r])return A[r];const i=e.clone(!0);i.traverse((e=>{if(e.isMesh)if(Array.isArray(e.material))e.material=e.material.map((e=>{if(!e)return e;const i=leggi_slot(e);if(i>0&&t[i-1]){const e=t[i-1];return e.needsUpdate=!0,e}return e}));else{const i=e.material,n=leggi_slot(i);e.material=n>0&&t[n-1]?(t[n-1].needsUpdate=!0,t[n-1]):i}})),i.userData=i.userData||{},i.userData._ky=r,A[r]=i,e=i}return e},islog:r,clear:async function clear(){function destroymesh(e){function disposeMaterial(e){e.map&&e.map.dispose(),e.lightMap&&e.lightMap.dispose(),e.bumpMap&&e.bumpMap.dispose(),e.normalMap&&e.normalMap.dispose(),e.specularMap&&e.specularMap.dispose(),e.envMap&&e.envMap.dispose(),e.alphaMap&&e.alphaMap.dispose(),e.dispose()}e&&e.traverse((e=>{e.isMesh&&(e.onBeforeRender&&(e.onBeforeRender=null),e.onAfterRender&&(e.onAfterRender=null),e.geometry?.dispose&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(disposeMaterial):disposeMaterial(e.material)))}))}b={},l={},e.Cache.clear();for(const e in a)a[e]?.dispose();for(const e in A)if(A[e]){destroymesh(await A[e])}await clearmat(),o={},s={},A={},a={},p={},h={}},clearmat:clearmat,getdims:getdims,info3d:async function info3d(e,t=1,i=0,n=0){let r=(e||"").endsWith(".3ds")?await get3ds(e):await getglb(e);if(r)return t&&1!=t&&(r.scale.set(t||1,i||t||1,n||t||1),r.needsUpdate=!0),getdims(r)},getScript:async function getScript(e){e.endsWith(".custom")?e=e.slice(0,-7):e.endsWith(".js")&&(e=e.slice(0,-3));let i=hash(`${getcat()}|${e}`);if(!h[i]){let n;try{n=await t.fetch("mufiles/customfn",{id:getcat(),name:e,ispar:1})}catch(t){n=`log('undefined ${getcat()}/${e}: ${t.message}');`}h[i]=n}return h[i]},checkScripts:async function checkScripts(e){let i=[];if(!e||!Array.isArray(e))return;let n=getcat();e=[...e,"_ricalcolatop","_ricalcolaaltri","_ricalcolalinee"];for(let t of e){let e=hash(`${n}|${t}`);h[e]||i.push(t)}if(i?.length){let e=await t.fetch("mufiles/customfn",{id:n,name:i,ispar:1});if(e)for(let t of e){let e=hash(`${n}|${t.n}`);h[e]=t.v}}},get loaderGLTF(){return u},get gmats(){return b},scripts:()=>Object.keys(h),get geo(){return a},get movs(){return o},get textures(){return s},get smats(){return p},get meshes(){return A},get cacheFns(){return l},dump(){console.log(`SMATS:\n${Object.keys(p).join(" - ")};\nGEOMS:\n${Object.keys(a).join(" - ")};\nTEX:\n${Object.keys(s).join(" - ")};\nMESH:\n${Object.keys(A).join(" - ")};\n`)},get cat(){return getcat()},pushcat(e){m.push(e)},popcat:()=>(m.length>1&&m.length--,getcat())}}const ji=new Map;function salvaMaterialiOriginali(e){e.traverse((e=>{if(!e.isMesh||e.layers.mask>1<<20)return;const t=e.material;if(!t)return;const i=Array.isArray(t)?t:[t];ji.has(e)||ji.set(e,i)}))}function ripristinaMaterialiOriginali(){for(let[e,t]of ji.entries())e.material=Array.isArray(t)?[...t]:t;ji.clear()}function applicaEvidenziazione(e,t,i,n){!function ricorsiva(e,r,o){const s=!!r||!!t&&t.includes(e?.userData?.mat),A=o||e.userData?.evidenziaMap;if(e.isMesh&&e.layers.mask<=1<<20){const t=ji.get(e);if(!t)return;const r=t.map((e=>{const t=(s?n:i).clone();return A&&e.map&&(t.map=e.map),t.transparent=e.transparent,t.opacity=e.opacity,t}));e.material=Array.isArray(e.material)?r:r[0]}e.children.forEach((e=>ricorsiva(e,s,A)))}(e,!1,!1)}async function evidenziaColli(t,i,n){salvaMaterialiOriginali(t);const r=e.DoubleSide,o=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:r}),s=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:r});let A=0;try{for(let e of i)A++,e.name||(e.name=`collo_${A}`),applicaEvidenziazione(t,e.mats,o,s),await n(e)}catch(e){console.error("Errore durante evidenzia:",e)}finally{ripristinaMaterialiOriginali()}}async function runScript(t,i,n,r,o){let s=await t.getScript(i),A=s.script,a=[],l=function toCadPars(e){const t=muClComments(e),i=[];for(const e of t){const t=e.includes("(")||e.includes("[")?[e]:getcolonne(e,!0);let n=!1;for(const e of t)!e.startsWith('"')&&e.includes("=")?(i.push(e),n=!0):n&&(i[i.length-1]+=","+e)}const n={};for(const e of i){let{v:t,o:i}=getcouple(e,"=",!1);i=i||"",t&&(/^[-+]?\d*\.?\d+$/.test(i)&&(i=parseFloat(i)),n[t]=i)}return n}(s.pars+("string"==typeof r?"\n"+r:""));function setmatricola(e){return e?.userData&&(e.userData.mat=`${i}_${t.gmats[i]}`),e}r&&"object"==typeof r&&(l={...l,...r}),t.gmats[i]||(t.gmats[i]=0);let c=(new Date).valueOf(),p=c;try{function movimento(e,i=[]){return e=clean(e,!0),t.movs[e]||(t.movs[e]=getmovimento(e,i)),t.movs[e]}function addlog(...e){if(t?.islog){const t=e.map((e=>getOggetto(e)));console.log(...t),a.push(...t)}}function dbadd(e,r,o,s={}){s||(s={}),t.gmats[i]++;let A=`${i}_${t.gmats[i]}`,{qt:a=1,l:l=0,a:c=0,p:p=0,vars:h="",shape:g=null,model:u,lavs:d=null}=s;if(n.DB&&r){let t={lev:"string"==typeof e?clean(e,!0):"l"+(e+(n?._level??0)),mat:A,cod:r,note:o||"",qt:a,l:l,a:c,p:p,vars:h};g&&(t.shape=g),d&&(t.lavs=d),u&&(t.model=u),n.DB.push(t)}return A}function addtop(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"top",op:i,posfn:o})}function addhole(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"hole",op:i,posfn:o})}function addaltri(e,t,i={}){i||(i={}),n.TOPS.push({key:e,data:t,type:"altri",op:i,posfn:o})}function addlines(e,t,i={}){i||(i={}),t&&(Array.isArray(t)||(t=[t]),n.TOPS.push({key:e,lines:t,type:"lines",op:i,posfn:o}))}function dbdes(e,t){n.DES&&t&&n.DES.push({lev:e+(n?._level??0),description:t})}function geturltex(e){let i=t.cat;if(!e)return t.P.baseurl+"noimage.jpg";if(t.P._cdn){if(e.includes("/")){let t=e.split("/");i=t[0],e=t[1]}return e.endsWith(".webp")||e.endsWith(".png")||e.endsWith(".jpeg")||e.endsWith(".jpg")||(e+=".webp"),`${t.P._cdn}${i}/textures/${e}`}return t.P.fullget("mufiles/getfile",{id:i,subfolder:"textures",name:e})}l||(l={}),n||(n={});const h={GCAD:!0,...n,...l,THREE:e,TODEG:TODEG,TORAD:TORAD,dbadd:dbadd,addtop:addtop,addhole:addhole,addlines:addlines,addaltri:addaltri,dbdes:dbdes,addpivot:(e,i,n={},r=0,o=0,s=0)=>setmatricola(addmovpivot(t,e,i,n,r,o,s)),movimento:movimento,Math:Math,facesettile:facesettile,info3d:t.info3d,gcad:t,SIDE:$e,seeder:seeder,seedarray:seedarray,baseurl:t.P.baseurl,Vis2d:Vis2d,joinlinestoshapes:joinlinestoshapes,groupfromgeometry:groupfromgeometry,creategroup:creategroup,deletegroup:deletegroup,Matrix3D:Matrix3D,geturltex:geturltex,clamp:clamp,Punto2:Punto2,Linea2:Linea2,getptsoffset:getptsoffset,hash:hash,PIF:Ue,raccordabezier:raccordabezier,svuotanodo:svuotanodo,normal2:normal2,angle3point:angle3point,angle2vec:angle2vec,getshape:getshape,shapeclip:shapeclip,mgray1:nt,mgray2:rt,mwhite:it,mred:ot,mgreen:At,mblack:at,mblue:st,materialline1:et,materialline2:tt,scaleunit:lt,edgesfromgeometry:edgesfromgeometry,getmesh:getmesh,getcolonne:getcolonne,posiziona:posiziona,getbb:getbb,scalaoggetto:(e,i)=>scalaoggetto(t,e,i),setorigine:setorigine,SP:Ve,elaborapercorso:elaborapercorso,gettarghetta:(e,i,n)=>gettarghetta(t,e,i,n),getquota:(e,i,n,r,o,s={})=>getquota(t,e,i,n,r,o,s),getsprite:(e,t,i,n,r)=>getsprite(0,e,t,i,n,r),getpunto:(e,i,n,r,o,s)=>getpunto(t,e,i,n,r,o),spritemat:e=>spritemat(t,e),getemitter:getemitter,getreceiver:e=>setmatricola(getreceiver(t,e)),getriferimento:getriferimento,get3dshape:get3dshape,getline:getline,getpoint:getpoint,randombasemat:randombasemat,texgen:(e,i=256,n={})=>texgen(t,e,i,n),getcilindro:(e,i,n,r,o=it,s)=>setmatricola(getcilindro(t,e,i,n,r,o,s)),getbox:(e,t,i,n,r)=>setmatricola(getbox(0,e,t,i,n,r)),getsphere:(e,t,i)=>setmatricola(getsphere(0,e,t,i)),replacemats:t.replacemats,getluce:(e,i="#ffffff",n=1)=>getluce(t,e,i,n),getthorus:(e,t,i,n)=>setmatricola(getthorus(0,e,t,i,n)),getcyl:(e,t,i=it,n)=>setmatricola(getcyl(0,e,t,i,n)),getpannello:(e,i,n,r,o,s,A)=>setmatricola(getpannello(t,e,i,n,r,o,s,A)),getpannello2:(e,i,n,r,o,s)=>setmatricola(getpannello2(t,e,i,n,r,o,s)),getface:(e,i,n,r)=>setmatricola(getface(t,e,i,n,r)),pickvariant:(e,i,n,r,o,s={})=>pickvariant(t,e,i,n,r,o,s),getmarker:(e,i,n,r,o,s={})=>getmarker(t,e,i,n,r,o,s),getglb:e=>setmatricola(t.getglb(e)),get3ds:e=>setmatricola(t.get3ds(e)),estruso:(e,i,n,r,o,s)=>setmatricola(estruso(t,e,i,n,r,o,s)),getextrude:(e,i,n,r,o)=>setmatricola(getextrude(t,e,i,n,r,o)),estrusopat:(e,i,n,r,o,s)=>setmatricola(estrusopat(t,e,i,n,r,o,s)),infoestrudi:infoestrudi,getfakeshadow:(e,i)=>getfakeshadow(t,e,i),getfakeshadow2:getfakeshadow2,revolve:(e,i,n,r)=>setmatricola(revolve(t,e,i,n,r)),smat:(e,i)=>smat(t,e,i),log:addlog,clean:clean,logtime:e=>{if(t?.islog){let t=(new Date).valueOf();addlog(`time: ${e} => ${t-p}ms / ${t-c}ms`),p=t}}},g=[...Object.keys(h),...Object.keys(Xe)],u=[...Object.values(h),...Object.values(Xe)],d=`//# sourceURL=${i}\n return (async () => {\n${A}\n })();`;try{let f=hash(i+JSON.stringify(Object.keys(l)));t.cacheFns[f]||(t.cacheFns[f]=new Function(...g,d));const I=t.cacheFns[f];return{res:await I(...u),LOGS:a}}catch(m){let b=await errorescript(`// errore\n async function script() {\n ${A}\n }`,m);console.error(m),t?.bus?.errore(b)}}catch(C){t?.bus?.errore(`${C.message}\nscript: ${i}`),console.error(C)}}async function processatop(e,t,i){if(!t)return;let n=t.getObjectByName("_mtop");if(n)for(;n.children.length>0;)n.remove(n.children[0]);else n=creategroup("_mtop"),t.add(n);const uk=e=>`${e.key}|${Math.round(((e.ang||0)+180)%180)/5}|${e.pos.y}`;let r=shapeclip();const o=[...new Set(i.filter((e=>"top"==e.type)).map(uk))];let s=[],A=0;for(let t of o){let o=i.filter((e=>"top"==e.type&&uk(e)===t));if(o.length){let t=o[0],a=i.filter((e=>"hole"==e.type&&e.key==t.key)),l=[],c=[],p=[];for(let e of o)l.push(e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z));let h=[];for(let e of a){let t=e.op.ptrif,i=e.op.ptapplica,n=e.shape.dims();t=t?[n.p1,...t]:[n.p1,n.p2],i||(i=n.p1);let r=e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z),o=getshape().frompt(t).rotate(-e.ang).move(e.pos.x,e.pos.z);h.push({pt:o.pt,shape:r,op:e.op,width:n.width,height:n.height}),e.op?.hidden||c.push(r)}let g,u=r.unisci(l,c,p);for(let t of u){let i=o[0],r=t.shape.rebase(-i.ang),a=t.shape.dims(),l=getshape().fromrect(a.width,a.height,a.p1.x,a.p1.y);r.holes=[],r.cuts=[];for(let e of t.holes)r.holes.push(e.rebase(-i.ang,!0,r.origine.x,r.origine.y));const to2dec=e=>Math.round(100*(Number(e)||0))/100;let c=h.map((e=>{let t=getshape().frompt(e.pt),{shape:n}=t.rebase(-i.ang,!0,r.origine.x,r.origine.y);return{op:e.op,pt:n.pt,px:to2dec(n.pt[0].x),py:to2dec(n.pt[0].y),dx:to2dec(e.width),dy:to2dec(e.height)}})),p=c.filter((e=>{for(let t of e.pt)if(l.pointinshape(t))return!0;return!1}));p.forEach((e=>delete e.pt));let u=[];await runScript(e,"_ricalcolatop",{BOX:u,DB:s,TOPS:[],_level:800,processatop:{top:r,base:i,lavs:p,idt:A}},{}),A++;for(let e of u)g=posiziona(posiziona(e,{sa:i.pos.y||0,sl:r.origine.x,sp:r.origine.y}),{ay:i.ang}),n.add(g)}}}const a=i.filter((e=>"altri"==e.type));let l=[];await runScript(e,"_ricalcolaaltri",{BOX:l,DB:s,TOPS:[],_level:800,processatop:{altri:a,idt:A}},{}),A++;for(let e of l)n.add(e);const uk1=e=>`${e.key}|${e.pos.y}`,c=i.filter((e=>"lines"==e.type)),p=[...new Set(c.map(uk1))];for(let t of p){const i=c.filter((e=>uk1(e)===t)),n=joinlinestoshapes(i);for(let r of n){let n={sh:r,key:t,data:i[0].op||{},idt:A};await runScript(e,"_ricalcolalinee",{BOX:l,DB:s,TOPS:[],_level:800,processatop:n},{})}A++}for(let e of l)n.add(e);return s}function dumpscene(e,t={}){const{maxdepth:i=1/0}=t,r3=e=>Math.round(1e3*e)/1e3;function layerMaskToString(e){let t="";for(let i=0;i<32;i++)t=(e&1<<i?"x":"_")+t;return t}function filterUserData(e){if(!e)return{};const t={};for(const i in e){const n=e[i];if(null==n)continue;const r=typeof n;"string"!==r&&"number"!==r&&"boolean"!==r||(t[i]=n)}return t}return function scan(e,t=0){if(!e||t>i)return null;const n={type:e.type,name:e.name||"",layer:layerMaskToString(e.layers?.mask??0),userData:filterUserData(e.userData)};if(e.position&&function sigPos(e){return 0!==e.x||0!==e.y||0!==e.z}(e.position)&&(n.position={x:r3(e.position.x),y:r3(e.position.y),z:r3(e.position.z)}),e.rotation&&function sigRot(e){return 0!==e.x||0!==e.y||0!==e.z}(e.rotation)&&(n.rotation={x:r3(e.rotation.x),y:r3(e.rotation.y),z:r3(e.rotation.z)}),e.scale&&function sigScale(e){return 1!==e.x||1!==e.y||1!==e.z}(e.scale)&&(n.scale={x:r3(e.scale.x),y:r3(e.scale.y),z:r3(e.scale.z)}),e.isMesh&&e.geometry){n.geometry={type:e.geometry.type};const t=e.geometry.parameters;if(t)for(const e in t){const i=t[e];"number"==typeof i&&(n.geometry[e]=r3(i))}}return e.material&&(Array.isArray(e.material)?n.material=e.material.map((e=>e.type||e.name||"Material")):n.material=e.material.type||e.material.name||"Material"),e.children?.length&&(n.children=e.children.map((e=>scan(e,t+1))).filter(Boolean)),n}(e,0)}async function processamarker(t){t.updateMatrixWorld(!0);const i=new Map;!function traverse(n){if(n.userData?.markerid)i.set(n.userData.markerid,n);else if(n.name?.startsWith("#mk_")){const r=n.name,o=i.get(r);if(!o)return void t.remove(n);{o.updateMatrixWorld(!0);const i=o.matrixWorld.clone(),r=(new e.Matrix4).copy(t.matrixWorld).invert().multiply(i);n.matrix.copy(r),n.matrixAutoUpdate=!1,o.visible=!1,n.updateMatrixWorld(!0)}}for(const e of[...n.children])traverse(e)}(t)}async function processagruppo(e,t){Object.assign(t.userData,{SHAPES:[],DB:[],TOPS:[]});for(let i of t.userData.INFO.rows)if("fn"==i?.t){let n=creategroup(),r=[];await runScript(e,i.fn,{BOX:r,SHAPES:t.userData.SHAPES,DB:t.userData.DB,TOPS:t.userData.TOPS,_level:t.userData._level},i.pars,i.p2),r.length&&(r.forEach((e=>n.add(e))),Object.keys(i.p2).length&&(n=posiziona(n,i.p2)),t.add(n))}else if(i?.rows&&i.rows.length){let n=creategroup();i.iscad&&(n=posiziona(n,i.cadv)),n.name=i.id,Object.assign(n.userData,{INFO:i,_level:t.userData._level+1}),await processagruppo(e,n),t.add(n)}}function getalldb(t,i){let n=[],r=[],o=[];if(t){let i=new e.Matrix4,s=new e.Matrix4;t.updateMatrixWorld(),i.copy(t.matrixWorld);let A=i.clone().invert();t.traverse((t=>{if(t.userData?.DB&&Array.isArray(t.userData.DB)&&n.push(...t.userData.DB),t.userData?.TOPS&&t.userData.TOPS.length){t.updateMatrixWorld(),s.copy(t.matrixWorld);let i=s.clone().premultiply(A),n=new e.Vector3;n.setFromMatrixPosition(i),(new e.Euler).setFromRotationMatrix(i);let o=-e.MathUtils.radToDeg(Math.atan2(i.elements[2],i.elements[10]));for(let i of t.userData.TOPS){let{sl:t=0,sp:s=0,ay:A=0}=i?.posfn;if(t||s||A){let a=e.MathUtils.degToRad(-o),l=Math.cos(a),c=Math.sin(a),p=t*l-s*c,h=t*c+s*l,g=new e.Vector3(n.x+p,n.y,n.z+h),u=o-A;r.push({...i,pos:g,ang:u})}else r.push({...i,pos:n,ang:o})}}t.userData?.SHAPES&&Array.isArray(t.userData.SHAPES)&&o.push(...t.userData.SHAPES)}))}return i&&(i.DB=n,i.TOPS=r,i.SHAPES=o),{DB:n,TOPS:r,SHAPES:o}}async function evalcustomfunction(e,t,i,n){try{i||(i={}),n||(n={});const r={GCAD:!1,...i,A:e,V:e.vari,amb:e,info3d:async function info3d(t,i=1,n=0,r=0){if(e.gcad)return await e.gcad.info3d(t,i,n,r)},gcad:e.gcad,log:function addlog(...e){const t=e.map((e=>getOggetto(e)));console.log(...t)},Math:Math,getcolonne:getcolonne,clean:clean,SP:Ve,seeder:seeder,seedarray:seedarray,Punto2:Punto2,Linea2:Linea2,clamp:clamp,hash:hash,PIF:Ue,getshape:getshape,shapeclip:shapeclip,...n},o=[...Object.keys(r),...Object.keys(Xe)],s=[...Object.values(r),...Object.values(Xe)],A=new Function(...o,`\n try {\n return (async () => {\n ${t}\n })();\n } catch (err) {\n err.stack = '[SCRIPT] ' + err.stack;\n throw err;\n }`);return await A(...s)}catch(e){throw console.error("Errore durante l'esecuzione:",e),e}}function setLineColorMode(e,t){e?(et.color.set(16777215),tt.color.set(16777215)):t?(et.color.set(2501422),tt.color.set(8421504)):(et.color.set(6316128),tt.color.set(8421504)),et.needsUpdate=!0,tt.needsUpdate=!0}export{Linea2,Matrix3D,Ue as PIF,Punto2,$e as SIDE,Ve as SP,TODEG,TORAD,Vis2d,Vobject,Vscene,addmovpivot,angle2vec,angle3point,Xe as blocked,calcolatasks,clamp,clean,creategroup,deletegroup,dumpscene,dxfbulge,edgesfromgeometry,elaborapercorso,errorescript,estruso,estrusopat,evalcustomfunction,evidenziaColli,extractTextures,facesettile,get3dshape,getOggetto,getalldb,getbb,getbordi,getbox,getcilindro,getcyl,getdumpmacro,getemitter,getextrude,getface,getfakeshadow,getfakeshadow2,getline,getlinesgeom,getluce,getmarker,getmesh,getmovimento,getnodebyid,getpannello,getpannello2,getpoint,getptsoffset,getpunto,getquota,getreceiver,getriferimento,getshape,getsphere,getsprite,getsubrules,gettarghetta,getthorus,groupfromgeometry,hash,infoestrudi,isfn,ismacro,joinlinestoshapes,mapvertices,et as materialline1,tt as materialline2,at as mblack,st as mblue,nt as mgray1,rt as mgray2,At as mgreen,ot as mred,it as mwhite,newgcad,normal2,pickvariant,posiziona,processagruppo,processamarker,processatop,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,runScript,salvaMaterialiOriginali,scalaoggetto,lt as scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,texgen,valutagrafica};
1
+ import*as e from"three";import{TrianglesDrawMode as t,TriangleFanDrawMode as i,TriangleStripDrawMode as n,Loader as r,LoaderUtils as o,FileLoader as s,MeshPhysicalMaterial as A,Vector2 as a,Color as l,LinearSRGBColorSpace as c,SRGBColorSpace as p,SpotLight as h,PointLight as g,DirectionalLight as u,Matrix4 as d,Vector3 as f,Quaternion as I,InstancedMesh as m,InstancedBufferAttribute as b,Object3D as C,TextureLoader as B,ImageBitmapLoader as y,BufferAttribute as E,InterleavedBuffer as x,InterleavedBufferAttribute as w,LinearMipmapLinearFilter as P,NearestMipmapLinearFilter as v,LinearMipmapNearestFilter as D,NearestMipmapNearestFilter as S,LinearFilter as M,NearestFilter as L,RepeatWrapping as T,MirroredRepeatWrapping as _,ClampToEdgeWrapping as k,PointsMaterial as F,Material as R,LineBasicMaterial as N,MeshStandardMaterial as G,DoubleSide as O,MeshBasicMaterial as Y,PropertyBinding as U,BufferGeometry as X,SkinnedMesh as q,Mesh as H,LineSegments as z,Line as j,LineLoop as J,Points as W,Group as K,PerspectiveCamera as V,MathUtils as Z,OrthographicCamera as $,Skeleton as ee,AnimationClip as te,Bone as ie,InterpolateDiscrete as ne,InterpolateLinear as re,Texture as oe,VectorKeyframeTrack as se,NumberKeyframeTrack as Ae,QuaternionKeyframeTrack as ae,ColorManagement as le,FrontSide as ce,Interpolant as pe,Box3 as he,Sphere as ge,CompressedCubeTexture as ue,UnsignedByteType as de,CompressedArrayTexture as fe,CompressedTexture as Ie,DisplayP3ColorSpace as me,LinearDisplayP3ColorSpace as be,NoColorSpace as Ce,RGBA_ASTC_6x6_Format as Be,RedFormat as ye,RGFormat as Ee,RGBAFormat as xe,HalfFloatType as Qe,FloatType as we,DataTexture as Pe,Data3DTexture as ve,RGBA_S3TC_DXT1_Format as De,RGB_PVRTC_4BPPV1_Format as Se,RGB_ETC2_Format as Me,RGB_ETC1_Format as Le,RGBA_S3TC_DXT5_Format as Te,RGBA_PVRTC_4BPPV1_Format as _e,RGBA_ETC2_EAC_Format as ke,RGBA_BPTC_Format as Fe,RGBA_ASTC_4x4_Format as Re,MeshPhongMaterial as Ne,AdditiveBlending as Ge,Float32BufferAttribute as Oe}from"three";class Matrix3D{constructor(){this.m=new Float32Array(16),this.st=[],this.init()}init(){return this.m.fill(0),this.m[0]=this.m[5]=this.m[10]=this.m[15]=1,this}atranslate(e,t,i){return this.m[12]+=e,this.m[13]+=t,this.m[14]+=i,this}translate(e,t,i){return e??=0,t??=0,i??=0,this.m[12]+=e*this.m[0]+t*this.m[4]+i*this.m[8],this.m[13]+=e*this.m[1]+t*this.m[5]+i*this.m[9],this.m[14]+=e*this.m[2]+t*this.m[6]+i*this.m[10],this.m[15]+=e*this.m[3]+t*this.m[7]+i*this.m[11],this}rotateX(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),r=[...this.m];this.m[1]=r[1]*n+r[9]*i,this.m[2]=r[2]*n+r[10]*i,this.m[3]=r[3]*n+r[11]*i,this.m[9]=r[1]*-i+r[9]*n,this.m[10]=r[2]*-i+r[10]*n,this.m[11]=r[3]*-i+r[11]*n}return this}rotateY(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),r=[...this.m];this.m[0]=r[0]*n+r[8]*i,this.m[1]=r[1]*n+r[9]*i,this.m[2]=r[2]*n+r[10]*i,this.m[3]=r[3]*n+r[11]*i,this.m[8]=r[0]*-i+r[8]*n,this.m[9]=r[1]*-i+r[9]*n,this.m[10]=r[2]*-i+r[10]*n,this.m[11]=r[3]*-i+r[11]*n}return this}rotateZ(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),r=[...this.m];this.m[0]=r[0]*n+r[4]*i,this.m[1]=r[1]*n+r[5]*i,this.m[2]=r[2]*n+r[6]*i,this.m[3]=r[3]*n+r[7]*i,this.m[4]=r[0]*-i+r[4]*n,this.m[5]=r[1]*-i+r[5]*n,this.m[6]=r[2]*-i+r[6]*n,this.m[7]=r[3]*-i+r[7]*n}return this}getdati(){return Array.from(this.m)}setdati(e){if(e&&16===e.length){for(let t=0;t<16;t++)this.m[t]=Number(e[t])||0;return this}this.init()}push(){return this.st.push(new Float32Array(this.m)),this}pop(){return this.st.length>0&&(this.m=this.st.pop()),this}transform(e,t,i=0){return{x:e*this.m[0]+t*this.m[4]+i*this.m[8]+this.m[12],y:e*this.m[1]+t*this.m[5]+i*this.m[9]+this.m[13],z:e*this.m[2]+t*this.m[6]+i*this.m[10]+this.m[14]}}invert(){const e=this.m,t=new Matrix3D,i=this.determinant();return Math.abs(i)<1e-8?null:(t.m[0]=(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])/i,t.m[1]=(e[1]*e[14]*e[11]+e[9]*e[2]*e[15]+e[13]*e[10]*e[3]-e[1]*e[10]*e[15]-e[9]*e[14]*e[3]-e[13]*e[2]*e[11])/i,t.m[2]=(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])/i,t.m[3]=(e[1]*e[10]*e[7]+e[5]*e[2]*e[11]+e[9]*e[6]*e[3]-e[1]*e[6]*e[11]-e[5]*e[10]*e[3]-e[9]*e[2]*e[7])/i,t.m[4]=(e[4]*e[14]*e[11]+e[8]*e[6]*e[15]+e[12]*e[10]*e[7]-e[4]*e[10]*e[15]-e[8]*e[14]*e[7]-e[12]*e[6]*e[11])/i,t.m[5]=(e[0]*e[10]*e[15]+e[8]*e[14]*e[3]+e[12]*e[2]*e[11]-e[0]*e[14]*e[11]-e[8]*e[2]*e[15]-e[12]*e[10]*e[3])/i,t.m[6]=(e[0]*e[14]*e[7]+e[4]*e[2]*e[15]+e[12]*e[6]*e[3]-e[0]*e[6]*e[15]-e[4]*e[14]*e[3]-e[12]*e[2]*e[7])/i,t.m[7]=(e[0]*e[6]*e[11]+e[4]*e[10]*e[3]+e[8]*e[2]*e[7]-e[0]*e[10]*e[7]-e[4]*e[2]*e[11]-e[8]*e[6]*e[3])/i,t.m[8]=(e[4]*e[9]*e[15]+e[8]*e[13]*e[7]+e[12]*e[5]*e[11]-e[4]*e[13]*e[11]-e[8]*e[5]*e[15]-e[12]*e[9]*e[7])/i,t.m[9]=(e[0]*e[13]*e[11]+e[8]*e[1]*e[15]+e[12]*e[9]*e[3]-e[0]*e[9]*e[15]-e[8]*e[13]*e[3]-e[12]*e[1]*e[11])/i,t.m[10]=(e[0]*e[5]*e[15]+e[4]*e[13]*e[3]+e[12]*e[1]*e[7]-e[0]*e[13]*e[7]-e[4]*e[1]*e[15]-e[12]*e[5]*e[3])/i,t.m[11]=(e[0]*e[9]*e[7]+e[4]*e[1]*e[11]+e[8]*e[5]*e[3]-e[0]*e[5]*e[11]-e[4]*e[9]*e[3]-e[8]*e[1]*e[7])/i,t.m[12]=(e[4]*e[13]*e[10]+e[8]*e[5]*e[14]+e[12]*e[9]*e[6]-e[4]*e[9]*e[14]-e[8]*e[13]*e[6]-e[12]*e[5]*e[10])/i,t.m[13]=(e[0]*e[9]*e[14]+e[8]*e[13]*e[2]+e[12]*e[1]*e[10]-e[0]*e[13]*e[10]-e[8]*e[1]*e[14]-e[12]*e[9]*e[2])/i,t.m[14]=(e[0]*e[13]*e[6]+e[4]*e[1]*e[14]+e[12]*e[5]*e[2]-e[0]*e[5]*e[14]-e[4]*e[13]*e[2]-e[12]*e[1]*e[6])/i,t.m[15]=(e[0]*e[5]*e[10]+e[4]*e[9]*e[2]+e[8]*e[1]*e[6]-e[0]*e[9]*e[6]-e[4]*e[1]*e[10]-e[8]*e[5]*e[2])/i,t)}determinant(){const e=this.m;return e[0]*(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])-e[4]*(e[1]*e[10]*e[15]+e[9]*e[14]*e[3]+e[13]*e[2]*e[11]-e[1]*e[14]*e[11]-e[9]*e[2]*e[15]-e[13]*e[10]*e[3])+e[8]*(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])-e[12]*(e[1]*e[6]*e[11]+e[5]*e[10]*e[3]+e[9]*e[2]*e[7]-e[1]*e[10]*e[7]-e[5]*e[2]*e[11]-e[9]*e[6]*e[3])}multiply(e){const t=[...this.m],i=e.m;return this.m[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],this.m[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],this.m[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3],this.m[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],this.m[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],this.m[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],this.m[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],this.m[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],this.m[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],this.m[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],this.m[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],this.m[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],this.m[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],this.m[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],this.m[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],this.m[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15],this}}const Ye=.001;class Punto2{constructor(e,t){Array.isArray(e)?(this.x=e[0]||0,this.y=e[1]||0):e&&"object"==typeof e?(this.x=e.x||0,this.y=e.y||0):(this.x=e||0,this.y=t||0)}get dump(){return`{${this.x.toFixed(1)},${this.y.toFixed(1)}}`}get len2(){return this.x*this.x+this.y*this.y}get len(){return Math.sqrt(this.len2)}get angle(){return Math.atan2(this.y,this.x)}dir(){let e=this.len;return e?new Punto2(this.x/e,this.y/e):this}distanza(e){return new Punto2(e.x-this.x,e.y-this.y).len}}class Linea2{constructor(e,t,i=null,n=null){"number"==typeof e&&"number"==typeof t&&null!==i&&null!==n?(this.p1=new Punto2({x:e,y:t}),this.p2=new Punto2({x:i,y:n})):e&&t?(this.p1=new Punto2(e),this.p2=new Punto2(t)):(this.p1=new Punto2(0,0),this.p2=new Punto2(1,0))}get dump(){return`${this.p1.dump}-${this.p2.dump}`}get dx(){return this.p2.x-this.p1.x}get dy(){return this.p2.y-this.p1.y}get len2(){let{dx:e,dy:t}=this;return e*e+t*t}get len(){return Math.sqrt(this.len2)}get angle(){return this.angolo()}estendi(e){if("number"==typeof e){if(!e)return this;let{p1:t,p2:i,dx:n,dy:r,len:o}=this;return o?(n/=o,r/=o,e>0?new Linea2(t,new Punto2(i.x+n*e,i.y+r*e)):new Linea2(new Punto2(t.x+n*e,t.y+r*e),i)):this}if(e instanceof Linea2){const t=this.interseca(e);if(!t)return this;return(t.x-this.p1.x)**2+(t.y-this.p1.y)**2<(t.x-this.p2.x)**2+(t.y-this.p2.y)**2?new Linea2(t,this.p2):new Linea2(this.p1,t)}}puntot(e){return new Punto2(this.p1.x+(this.p2.x-this.p1.x)*e,this.p1.y+(this.p2.y-this.p1.y)*e)}setlunghezza(e){let t=this.len;if(t&&e){let i=e/t,n=this.puntot(i);this.p2=n}}proiezionet(e){const{p1:t,dx:i,dy:n,len2:r}=this;if(r<Ye)return;const o=((e.x-t.x)*i+(e.y-t.y)*n)/r;return{p:new Punto2(t.x+o*i,t.y+o*n),t:o}}proiezione(e){const t=this.proiezionet(e);return t?t.p:void 0}get direzione(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(e/i,t/i):new Punto2(0,0)}get normale(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(-t/i,e/i):new Punto2(0,1)}perpendicolare(e=null,t=0){const{normale:i,len:n,p1:r}=this;if(n<1e-9)return;const o=t||n,s=e?new Punto2(e):this.p1;return new Linea2(s,new Punto2(s.x+i.x*o,s.y+i.y*o))}perpendicolaret(e,t=0){const{normale:i,len:n,p1:r,p2:o}=this;if(n<1e-9)return;const s=t||n,A=new Punto2(r.x+(o.x-r.x)*e,r.y+(o.y-r.y)*e);return new Linea2(A,new Punto2(A.x+i.x*s,A.y+i.y*s))}ruotata(e=Math.PI/2,t=0,i=!1){const{p1:n,p2:r,direzione:o,len:s}=this;if(t=t||s,s<1e-9)return;const A=Math.abs(e%(2*Math.PI));if(!(A<1e-9||Math.abs(A-Math.PI)<1e-9)){if("boolean"==typeof i){const s=(o.x*Math.cos(e)-o.y*Math.sin(e))*t,A=(o.x*Math.sin(e)+o.y*Math.cos(e))*t;return i?new Linea2(n,new Punto2(n.x+s,n.y+A)):new Linea2(r,new Punto2(r.x+s,r.y+A))}{let n=new Punto2(i);const r=o.x*Math.cos(e)-o.y*Math.sin(e),s=o.x*Math.sin(e)+o.y*Math.cos(e);new Punto2(r,s);const A=new Linea2(n,new Punto2(n.x+r,n.y+s)),a=this.interseca(A);if(!a)return;const l=new Punto2(a.x+r*t,a.y+s*t);return new Linea2(a,l)}}}puntosudirezione(e,t){let{direzione:i}=this;return new Punto2(e.x+i.x*t,e.y+i.y*t)}parallela(e,t){let{direzione:i}=this;return new Linea2(e,this.puntosudirezione(e,t))}intersezione(e){return this.interseca(e)}interseca(e){const{p1:t,p2:i}=this,{p1:n,p2:r}=e,o=(i.x-t.x)*(r.y-n.y)-(i.y-t.y)*(r.x-n.x);if(Math.abs(o)<Ye)return null;const s=((n.x-t.x)*(r.y-n.y)-(n.y-t.y)*(r.x-n.x))/o;return new Punto2(t.x+s*(i.x-t.x),t.y+s*(i.y-t.y))}onsegment(e,t=1e-9){const{p1:i,p2:n}=this,r=Math.min(i.x,n.x)-t,o=Math.max(i.x,n.x)+t,s=Math.min(i.y,n.y)-t,A=Math.max(i.y,n.y)+t;return e.x>=r&&e.x<=o&&e.y>=s&&e.y<=A}distanzaPunto(e){const t=this.proiezione(e);if(!t)return 1e9;const i=e.x-t.x,n=e.y-t.y;return Math.hypot(i,n)}isparallela(e){const t=this.dx*e.dy-this.dy*e.dx;return Math.abs(t)<1}lunghezzatotale(e){const t=this.p2.x-this.p1.x,i=this.p2.y-this.p1.y,n=Math.hypot(t,i);if(!n)return 0;const r=1/n,proj=e=>(e.x*t+e.y*i)*r,o=proj(this.p1),s=proj(this.p2),A=proj(e.p1),a=proj(e.p2),l=o<s?o:s,c=o>s?o:s,p=A<a?A:a,h=A>a?A:a;return Math.round(100*(Math.max(c,h)-Math.min(l,p)))/100}infoquad(e){if(!this.isparallela(e))return;const{p1:t,p2:i,normale:n}=this;let{p1:r,p2:o}=e;const distance2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;function wrapToPi(e){return e>Math.PI?e-=2*Math.PI:e<-Math.PI&&(e+=2*Math.PI),e}function getangle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}distance2(t,r)>distance2(t,o)&&([r,o]=[o,r]);const s=getangle(t,i);function toDeg(e){return Math.round(18e4*e/Math.PI)/1e3}const A=toDeg(wrapToPi(getangle(t,r)-s)),a=toDeg(wrapToPi(getangle(i,o)-s)),l=Math.round(100*this.len)/100,c=r.x-t.x,p=r.y-t.y,h=Math.round(100*Math.abs(c*n.x+p*n.y))/100;let g=this.lunghezzatotale(e);return{angle:toDeg(s),aini:A,afin:a,l:l,ltot:g,distanza:h,sx:Math.round(100*t.x)/100,sy:Math.round(100*t.y)/100}}isperpendicolare(e){const t=this.dx*e.dx+this.dy*e.dy;return Math.abs(t)<Ye}offset(e){const t=this.normale,i=new Punto2(this.p1.x+t.x*e,this.p1.y+t.y*e),n=new Punto2(this.p2.x+t.x*e,this.p2.y+t.y*e);return new Linea2(i,n)}angolo(e){const{dx:t,dy:i}=this;let n;if(e){const{dx:r,dy:o}=e,s=Math.atan2(i,t);n=Math.atan2(o,r)-s}else n=Math.atan2(i,t);return n>Math.PI?n-=2*Math.PI:n<-Math.PI&&(n+=2*Math.PI),n}ortopt(e){let{p1:t,dx:i,dy:n}=this;const r=Math.hypot(i,n);if(r<Ye)return;const o=-n/r,s=i/r;return{x:t.x+o*e,y:t.y+s*e}}offsetline(e){let{p1:t,p2:i,dx:n,dy:r}=this;const o=Math.hypot(n,r);if(o<Ye)return;const s=-r/o,A=n/o;return new Linea2({x:t.x+s*e,y:t.y+A*e},{x:i.x+s*e,y:i.y+A*e})}distanzaSegmentiParalleli(e){if(!this.isparallela(e))return 1e9;const{p1:t,normale:i}=this,n=e.p1.x-t.x,r=e.p1.y-t.y,o=Math.abs(n*i.x+r*i.y);return Math.abs(o)<Ye?0:o}isCollineare(e,t=!1){if(!this.isparallela(e))return!1;const i=this.distanzaSegmentiParalleli(e);if(Math.abs(i)>Ye)return!1;if(t){function isPointBetween(e,t,i,n=Ye){const r=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);return!(Math.abs(r)>n)&&(Math.min(t.x,i.x)-n<=e.x&&e.x<=Math.max(t.x,i.x)+n&&Math.min(t.y,i.y)-n<=e.y&&e.y<=Math.max(t.y,i.y)+n)}const{p1:n,p2:r}=this,{p1:o,p2:s}=e;return isPointBetween(o,n,r)||isPointBetween(s,n,r)||isPointBetween(n,o,s)||isPointBetween(r,o,s)}return!0}clone(){return new Linea2(this.p1.x,this.p1.y,this.p2.x,this.p2.y)}rotate(e){if(!e)return this;const t=e*Math.PI/180,i=Math.cos(t),n=Math.sin(t);function rotate(e){return new Punto2(e.x*i-e.y*n,e.x*n+e.y*i)}return this.p1=rotate(this.p1),this.p2=rotate(this.p2),this}move(e=0,t=0){return"object"==typeof e&&e.x&&(t=e.y||0,e=e.x),this.p1.x+=e,this.p1.y+=t,this.p2.x+=e,this.p2.y+=t,this}}function getptsoffset(e,t,i){let n,r,o,s,A=-1,a=-1,l=e.length,c=t.length,p=[],h=new Linea2(e[0],e[1]),g=new Linea2(e[l-2],e[l-1]),u=h.offset(i),d=g.offset(i);for(let e=0;e<c;e++){let i=new Linea2(t[e%c],t[(e+1)%c]);u.isparallela(i)&&u.isCollineare(i,!0)&&(A=e),d.isparallela(i)&&d.isCollineare(i,!0)&&(a=e)}if(A>=0&&a>=0){A>a?(n=A-a+2,r=a+c-A+2,n<r?(o=a,s=A+1):(o=A,s=a+c+1)):(n=a-A+2,r=A+c-a+2,n<r?(o=A,s=a+1):(o=a,s=A+c+1));for(let e=o;e<=s;e++)p.push(t[e%c])}return p}async function errorescript(e,t){let i,n,r,o=(t.stack||"").match(/user-script\.js:(\d+):(\d+)/);if(o||(o=(t.toString()||"").match(/user-script\.js:(\d+):(\d+)/)),o&&([,i,n]=o.map(Number),i-=2),(!i||!n)&&t instanceof SyntaxError){window.acorn||(await new Promise(((e,t)=>{const i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/acorn@8.15.0/dist/acorn.js",i.onload=e,i.onerror=t,document.head.appendChild(i)})),console.log("caricato acorn"));try{window.acorn.parse(e,{ecmaVersion:"latest"})}catch(e){e.loc&&(i=e.loc.line,n=e.loc.column+1)}}return r=i&&n?`ERRORE: ${t.message}\n`+function extractContext(e,t,i,n=1){const r=e.split(/\r?\n/),o=t-1,s=Math.max(0,o-n),A=Math.min(r.length,o+n+1);return r.slice(s,A).map(((e,n)=>s+n+1===t?e+"\n"+" ".repeat(i-1)+"^":e)).join("\n")}(e,i,n):t.message,r}function seedarray(e,t){if(e&&e.length){let i=[];for(let t=0;t<e.length;t++){let n=e[t];if(n.p)for(let e=0;e<n.p;e++)i.push(t);else i.push(t)}return e[i[seeder(i.length,t)]]}}function seeder(e,t="seed42"){const i=function mulberry32(e){return function(){e=(e|=0)+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}(function xmur3(e){let t=1779033703^e.length;for(let i=0;i<e.length;i++)t=Math.imul(t^e.charCodeAt(i),3432918353),t=t<<13|t>>>19;return function(){return t=Math.imul(t^t>>>16,2246822507),t=Math.imul(t^t>>>13,3266489909),(t^=t>>>16)>>>0}}(String(t))());return Math.floor(i()*e)}function hash(e){let t="";if("string"==typeof e||"number"==typeof e)t=e+"";else if("object"==typeof e&&e){const i=Object.keys(e).sort(),n="\0";t=i.map((t=>`${t}${n}${String(e[t])}`)).join(n)}let i=2166136261,n=2218511855;for(let e=0;e<t.length;e++){const r=t.charCodeAt(e);i^=r,i+=i<<5^2779096485,n^=i,n=((n<<3)+r^2134516169)>>>0}return i>>>=0,i.toString(16)+n.toString(16)}function clean(e,t=!1){return t?(e||"").trim().toLowerCase():(e||"").trim()}function getcouple(e,t="=",i=!0){const n=(e=e||"").indexOf(t);return n>=0?{v:clean(e.substring(0,n),i),o:e.substring(n+t.length).trim(),fl:!0}:{v:clean(e,i),o:"",fl:!1}}function clamp(e,t=-1/0,i=1/0){return(e=Number(e)||0)<t&&(e=t),e>i&&(e=i),e}function getcolonne(e,t=!1){e=String(e||"");const i=/^(\d*)\.\.(\d*)$/.exec(e);if(i){let e=parseInt(i[1])||0,t=parseInt(i[2])||0;const n=[];for(let i=e;i<=t;i++)n.push(i+"");return n}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const n=[];let r="",o=0,s=!1;for(let t=0;t<e.length;t++){const i=e[t];if(0===o&&'"'===i&&(0!==t&&"\\"===e[t-1]||(s=!s)),s||("("===i||"["===i||"{"===i?o++:")"!==i&&"]"!==i&&"}"!==i||(o=Math.max(0,o-1))),","!==i&&";"!==i||0!==o||s)r+=i;else{const e=r.trim();n.push(e),r=""}}const A=r.trim();return A&&n.push(A),n.map((e=>(e=e.trim(),!t&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("(")&&e.endsWith(")"))?e.slice(1,-1):e)))}function muClComments(e,t){const i=(n=e,n.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||""))).split(/\r?\n/);var n;const r=[];let o="";for(const e of i){let t=e;if(/(^|[^:])\/\/.*/.test(t)&&(t=t.replace(/(^|[^:])\/\/.*/,((e,t)=>t.trim()))),t=t.trim(),0!==t.length)if(o.length>0&&(t=o+" "+t,o=""),t.endsWith("\\")){t=t.slice(0,-1);const e=t.lastIndexOf("//");-1!==e&&(t=t.slice(0,e).trim()),o=t}else r.push(t)}return r}new class Errori{constructor(){this.azzera()}azzera(){this.err=[]}add(e,t){this.err.push({msg:e,row:t})}get(){return this.err}get length(){return this.err.length}toString(){const e=[];for(const t of this.err){const i="object"==typeof t.msg?JSON.stringify(t.msg):t.msg||"";e.push(`${t.row?t.row+":":""}${i}`)}return e.join("\n")}};const Ue=Math.PI/180;function TODEG(e,t=1){let i=10**t;return Math.round(180*e*i/Math.PI)/i}function TORAD(e,t=3){let i=10**t;return Math.round(e*Ue*i)/i}const Xe={window:void 0,self:void 0,globalThis:void 0,document:void 0,Function:void 0,eval:void 0,fetch:void 0,XMLHttpRequest:void 0};function getOggetto(e,t=[]){if(Array.isArray(e))return e.map((e=>getOggetto(e,t)));if(e&&"object"==typeof e){const i={};for(const[n,r]of Object.entries(e))"function"==typeof r||t&&t.includes(n)||(i[n]=getOggetto(r,t));return i}return e}function getSqDist(e,t){let i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function getSqSegDist(e,t,i){let n=t.x,r=t.y,o=i.x-n,s=i.y-r;if(0!==o||0!==s){let t=((e.x-n)*o+(e.y-r)*s)/(o*o+s*s);t>1?(n=i.x,r=i.y):t>0&&(n+=o*t,r+=s*t)}return o=e.x-n,s=e.y-r,o*o+s*s}function simplifyDPStep(e,t,i,n,r){let o,s=n;for(let n=t+1;n<i;n++){let r=getSqSegDist(e[n],e[t],e[i]);r>s&&(o=n,s=r)}s>n&&(o-t>1&&simplifyDPStep(e,t,o,n,r),r.push(e[o]),i-o>1&&simplifyDPStep(e,o,i,n,r))}function simplifyDouglasPeucker(e,t){let i=e.length-1,n=[e[0]];return simplifyDPStep(e,0,i,t,n),n.push(e[i]),n}function simplify(e,t,i){if(e.length<=2)return e;let n=void 0!==t?t*t:1;return e=i?e:function simplifyRadialDist(e,t){let i,n=e[0],r=[n];for(let o=1,s=e.length;o<s;o++)i=e[o],getSqDist(i,n)>t&&(r.push(i),n=i);return n!==i&&r.push(i),r}(e,n),e=simplifyDouglasPeucker(e,n)}function mapvertices(e,t){const dist2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;let i=e.length,n=t.length;if(i<2||n<2)return[];let r=[[0,0]];if(i===n){for(let e=1;e<i;e++)r.push([e,e]);return r}if(i>n)for(let o=1,s=0;o<i-1;o++){if(s+1<n){const i=e[o],n=dist2(i,t[s]);dist2(i,t[s+1])<=n&&s++}r.push([o,s])}else for(let o=1,s=0;o<n-1;o++){if(s+1<i){const i=t[o],n=dist2(i,e[s]);dist2(i,e[s+1])<=n&&s++}r.push([s,o])}return r.push([i-1,n-1]),r}function dxfbulge(e,t,i,n=0){const r=[];if(!i||Math.abs(i)<1e-10||0===n)return r;const o=4*Math.atan(i);if(o<0)return dxfbulge(t,e,-i,n).reverse();const s=t.x-e.x,A=t.y-e.y,a=Math.hypot(s,A),l=a/(2*Math.sin(o/2)),c=(e.x+t.x)/2,p=(e.y+t.y)/2,h=-A/a,g=s/a,u=l*Math.cos(o/2),d=i>=0?1:-1,f=c+d*h*u,I=p+d*g*u;let m=Math.atan2(e.y-I,e.x-f);for(let e=1;e<=n;e++){const t=m+e/(n+1)*o,i=f+l*Math.cos(t),s=I+l*Math.sin(t);r.push({x:i,y:s})}return r}function raccordabezier(e,t,i,n,r=10){const o=function getIntersection(e,t,i,n){const r=(e.x-t.x)*(i.y-n.y)-(e.y-t.y)*(i.x-n.x);return 0===r?null:{x:((e.x*t.y-e.y*t.x)*(i.x-n.x)-(e.x-t.x)*(i.x*n.y-i.y*n.x))/r,y:((e.x*t.y-e.y*t.x)*(i.y-n.y)-(e.y-t.y)*(i.x*n.y-i.y*n.x))/r}}(e,t,i,n);if(!o)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const s=o;if(0===r)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const A=[];for(let e=0;e<=r;e++){const n=e/r,o=1-n,a=o*o*t.x+2*o*n*s.x+n*n*i.x,l=o*o*t.y+2*o*n*s.y+n*n*i.y;A.push({x:a,y:l})}return A}function raccordabezier3(e,t,i,n,r=10){const o=t.x-e.x,s=t.y-e.y,A=i.x-t.x,a=i.y-t.y,l=Math.sqrt(o*o+s*s),c=Math.sqrt(A*A+a*a);if(n>l||n>c)return[e,t,i];n!=l&&n!=c||(n-=.01);const p=(l-n)/l,h=n/c;return raccordabezier(e,{x:e.x+o*p,y:e.y+s*p},{x:t.x+A*h,y:t.y+a*h},i,r)}function normal2(e,t){const i=t.x-e.x;let n=-(t.y-e.y),r=i;const o=Math.sqrt(n*n+r*r);return 0===o?{nx:0,ny:0}:{nx:n/o,ny:r/o}}function angle3point(e,t,i){const n=t.x-e.x,r=t.y-e.y,o=i.x-t.x,s=i.y-t.y,A=n*o+r*s,a=n*s-r*o,l=Math.sqrt(n**2+r**2),c=Math.sqrt(o**2+s**2);return l&&c?Math.atan2(a,A):0}function angle2vec(e,t){const i=e.x*t.x+e.y*t.y,n=Math.sqrt(e.x*e.x+e.y*e.y),r=Math.sqrt(t.x*t.x+t.y*t.y);if(0===n||0===r)return 0;let o=i/(n*r);o=Math.max(-1,Math.min(1,o));return Math.acos(o)/Ue}function removeduplicate(e,t=.005){if(!Array.isArray(e)||0===e.length)return[];const i=[],n=e.length;for(let t=0;t<n;t++){const r=e[t],o=e[(t+1)%n];i.push({x:r.x,y:r.y}),o.x,r.x,o.y,r.y}const r=i[0],o=i[i.length-1];return r.x,o.x,r.y,o.y,i}function getshape(){let e=[];function orientation(){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const r=e[n],o=e[(n+1)%i];t+=r.x*o.y-o.x*r.y}return t>0?1:t<0?-1:0}function tovec(){return e.flatMap((e=>[e.x,e.y]))}function move(t=0,i=0){"object"==typeof t&&t.x&&(i=t.y||0,t=t.x);for(let n of e)n.x+=t,n.y+=i;return this}function selezionaprimo(t){return(t%=e.length)>0&&(e=[...e.slice(t),...e.slice(0,t)]),this}function _addvec(t){for(let i=0;i<t.length;i+=2)e.push({x:t[i],y:t[i+1]})}function fromstr(t){return e=removeduplicate(function processTokens(e){const t=[];for(let i=0;i<e.length;i++){const n=e[i];if("point"===n.type)t.push(n.point);else if("command"===n.type)switch(n.cmd){case"x":{const r=t[t.length-1],o="point"===e[i+1]?.type?e[i+1].point:t[0],s=parseFloat(n.params[0])||5;{const e=1;let i=o.x-r.x,n=o.y-r.y,A=Math.hypot(i,n);A>1&&t.push(...dxfbulge(r,o,s,Math.floor((A-e)/(e+2))+1))}break}case"b":{if(t.length<2)continue;const r=parseInt(n.params[0])||5,o=t[t.length-2],s=t[t.length-1];let A="point"===e[i+1]?.type?e[i+1].point:void 0,a="point"===e[i+2]?.type?e[i+2].point:void 0;A?a||(a=t[0]):(A=t[0],a=t[1]);const l=raccordabezier(o,s,A,a,r);t.push(...l),i+=1;break}case"r":{if(t.length<1)continue;const r=parseFloat(n.params[0])||0;if(r>0){const o=parseInt(n.params[1])||Math.min(r,10),s=t[t.length-1];let A="point"===e[i+1]?.type?e[i+1].point:void 0,a="point"===e[i+2]?.type?e[i+2].point:"point"===e[i+3]?.type?e[i+3].point:void 0;A?a||(a=t[0]):(A=t[0],a=t[1],t.splice(0,1));const l=raccordabezier3(s,A,a,r,o);t.push(...l),i+=1}break}case"c":{const r=parseFloat(n.params[0])||50,o=parseInt(n.params[1])||12,s="point"===e[i+1]?.type?e[i+1].point:new Punto2(0,0);for(let e=0;e<o;e++)t.push(new Punto2(s.x+r*Math.cos(e/o*Math.PI*2),s.y+r*Math.sin(e/o*Math.PI*2)));i+=1;break}case"a":{let r,o="point"===e[i+1]?.type?e[i+1].point:void 0,s="point"===e[i+2]?.type?e[i+2].point:void 0,A="point"===e[i+3]?.type?e[i+3].point:void 0;if(!o||!A)continue;if(s)if(n.params[0])r=clamp(parseInt(n.params[0]),1,24);else{const e=Math.hypot(A.x-o.x,A.y-o.y),t=Math.abs((s.x-o.x)*(A.y-o.y)-(A.x-o.x)*(s.y-o.y))/(2*e);r=Math.round(e*Math.sqrt(t/(e+.1))*10),r=clamp(r,1,24),r=1}else s=A,r=0;const a=arcfrom3point(r,o,s,A);t.push(...a),i+=3;break}}}return t}(function tokenize(e){const t=[],i=e.replace(/[\n\r,;]/g," ").replace(/\s+/g," ").toLowerCase().trim().split(" ").filter((e=>e.length>0));let n=0;for(;n<i.length;){const e=i[n];/^[brcax]/.test(e)?(t.push({type:"command",cmd:e[0],params:e.slice(1).split(":")}),n++):n<i.length-1&&/^-?\d+(\.\d+)?$/.test(i[n])&&/^-?\d+(\.\d+)?$/.test(i[n+1])?(t.push({type:"point",point:new Punto2(parseFloat(i[n]),parseFloat(i[n+1]))}),n+=2):n++}return t}(t))),this}function dims(e){let{p1:t,p2:i}=e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}),n=!1;if(4==e.length){const r=.001;function findpunto(t,i){let n=e.find((e=>Math.abs(e.x-t)<r&&Math.abs(e.y-i)<r));return!!n}findpunto(t.x,t.y)&&findpunto(t.x,i.y)&&findpunto(i.x,t.y)&&findpunto(i.x,i.y)&&(n=!0)}return{p1:t,p2:i,isrect:n,width:i.x-t.x,height:i.y-t.y}}return{get key(){return hash(tovec().join("\t"))},orienta:function orienta(t,i){if(!t||!i)return null;const n=i.x-t.x,r=i.y-t.y,o=180*Math.atan2(r,n)/Math.PI,s=new Matrix3D;s.rotateZ(-o),s.translate(-t.x,-t.y,0);const A=e.map((e=>s.transform(e.x,e.y)));let a=A.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)});return{shape:getshape().frompt(A),origine:new Punto2(t.x,t.y),angolo:o,mm:a,width:a.p2.x-a.p1.x,height:a.p2.y-a.p1.y}},rebase:function rebase(t,i=!1,n=0,r=0){const o=new Matrix3D;o.rotateZ(-t);let s=e.map((e=>o.transform(e.x,e.y))),{p1:A,p2:a,width:l,height:c}=dims(s);return i||(n=A.x,r=A.y),s=s.map((e=>new Punto2(e.x-n,e.y-r))),{shape:getshape().frompt(s),origine:new Punto2(n,r),angolo:t,width:l,height:c}},fromstr:fromstr,move:move,get pt(){return e},set pt(t){Array.isArray(t)&&(e=t)},get npt(){return e?.length||0},get vec(){return tovec()},toJSON:()=>({vec:tovec(),orient:orientation()}),get orient(){return orientation()},corners:(t=45)=>function sharpCorners(e,t=45){const i=[],n=e.length;if(n<3)return i;for(let r=0;r<n;r++){const o=e[(r-1+n)%n],s=e[r],A=e[(r+1)%n],a=s.x-o.x,l=s.y-o.y,c=A.x-s.x,p=A.y-s.y,h=Math.hypot(a,l),g=Math.hypot(c,p);if(0===h||0===g)continue;let u=(a*c+l*p)/(h*g);u=Math.max(-1,Math.min(1,u));const d=180*Math.acos(u)/Math.PI;d>t&&i.push({i:r,x:s.x,y:s.y,a:d})}return i}(e,45),clone:()=>getshape().frompt(e),dims:()=>dims(e),get area(){return Math.abs(e.reduce(((t,i,n)=>{const r=e[(n+1)%e.length];return t+(i.x*r.y-r.x*i.y)}),0)/2)},pointslink(t){let i=mapvertices(e,t.pt),n=[];for(let e of i)n[e[0]]=t.pt[e[1]];return n},alignline(t,i){return e=function stretchShapeToLine(e,t,i){if(!e?.length||!t||!i)return[];const n=e[0],r=e[e.length-1],o=r.x-n.x,s=r.y-n.y,A=Math.atan2(s,o);let a=e.map((e=>({x:e.x-n.x,y:e.y-n.y}))),l=a.map((e=>({x:e.x*Math.cos(-A)-e.y*Math.sin(-A),y:e.x*Math.sin(-A)+e.y*Math.cos(-A)})));const c={dx:i.x-t.x,dy:i.y-t.y},p=Math.sqrt(c.dx*c.dx+c.dy*c.dy)/(l[l.length-1].x||1e-8);let h=l.map((e=>({x:e.x*p,y:e.y})));const g=Math.atan2(c.dy,c.dx);let u=h.map((e=>({x:e.x*Math.cos(g)-e.y*Math.sin(g),y:e.x*Math.sin(g)+e.y*Math.cos(g)}))),d=u.map((e=>({x:e.x+t.x,y:e.y+t.y})));return d}(e,t,i),this},rotate(t){if(!t)return this;const i=t*Math.PI/180,n=Math.cos(i),r=Math.sin(i);for(let t of e){const e=t.x*n-t.y*r,i=t.x*r+t.y*n;t.x=e,t.y=i}return this},selezionaprimo:selezionaprimo,segment(t,i=!1){let n=e.length;return t<0&&(t+=n),new Linea2(e[t%n],e[(t+(i?-1:1))%n])},lineoffset(t,i,n){if((t=(t||0)%e.length)!=(i=(i||0)%e.length)){let r=new Linea2(e[t],e[i]);if(r){return r=r.offsetline(-n),this.intersectline(r)}}},orientasplitter(){-1!=orientation()&&e.reverse();let t=e.length;for(let i=0;i<t;i++){let n=new Linea2(e[(t+i-1)%t],e[i]);if(Math.abs(Math.abs(n.angle)-Math.PI)<.001){i&&selezionaprimo(i);break}}return this},mirrorx(t=0){for(let i of e)i.x=2*t-i.x;return this},mirrory(t=0){for(let i of e)i.y=2*t-i.y;return this},simplify(t,i){return e=simplify(e,t,i),this},fromclip(t){e=[];for(let i of t)e.push({x:i.x/1e3,y:i.y/1e3});return this},infosegmento(t,i=!1){const n=e.length;function clampIndex(e){return(e+n)%n}function angle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}function angleDiff(e,t){let i=e-t;for(;i>Math.PI;)i-=2*Math.PI;for(;i<-Math.PI;)i+=2*Math.PI;return i}const r=e[t];let o,s,A;if(i)if(0===t){const t=e[1].x-e[0].x,i=e[1].y-e[0].y;o={x:e[0].x-t,y:e[0].y-i},s=e[1],A=2==n?{x:e[1].x+t,y:e[1].y+i}:e[2]}else if(t===n-1){const t=e[n-1].x-e[n-2].x,i=e[n-1].y-e[n-2].y;o=e[n-2],s={x:e[n-1].x+t,y:e[n-1].y+i},A={x:s.x+t,y:s.y+i}}else o=e[t-1],s=e[t+1],A=t+2<n?e[t+2]:{x:e[t+1].x+(e[t+1].x-e[t].x),y:e[t+1].y+(e[t+1].y-e[t].y)};else{const i=clampIndex(t-1),n=clampIndex(t+1),r=clampIndex(t+2);o=e[i],s=e[n],A=e[r]}const a=angle(r,s),l=angle(o,r),c=angle(s,A);return{x:r.x,y:r.y,l:function length(e,t){const i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}(r,s),ang:a/Ue,a1:angleDiff(a,l)/Ue,a2:angleDiff(c,a)/Ue}},swapxy(){for(let t=0;t<e.length;t++){let i=e[t].x;e[t].x=-e[t].y,e[t].y=-i}return this},fromvec(t){return e=[],_addvec(t),this},addvec(e){return _addvec(e),this},frompt(t){return e=[...t],e=removeduplicate(e),this},fromdxfvec(t){let i=[];if(t&&t.length)for(let e=0;e<t.length;e++){let{x:n,y:r,bulge:o}=t[e];if(i.push({x:n,y:r}),o){const s=1;let A={x:n,y:r},a=t[(e+1)%t.length],l=a.x-A.x,c=a.y-A.y,p=Math.hypot(l,c);p>s&&i.push(...dxfbulge(A,a,o,Math.floor((p-s)/s)+1))}}return e=i.map((e=>({x:Math.round(10*e.x)/10,y:Math.round(10*e.y)/10}))),e=removeduplicate(e),this},monotona(){let t=dims(e),i=e.map((e=>({x:e.x-t.p2.x,y:e.y}))),n=[];n.push(i[0]);let r=i[0].y,o=1e-4;for(let e=1;e<i.length;e++)if(i[e].y>r+o||e==i.length-1)n.push(i[e]),r=i[e].y;else{const t=r+o;n.push({x:i[e].x,y:t}),r=t}return{sh:getshape().frompt(n),...t}},offsetshape(e){let t=[],i=this;for(let n=0;n<i.npt-1;n++){let r=i.segment(n).offset(e);t.push(r)}let n=i.segment(0).perpendicolare(),r=i.segment(i.npt-2),o=r.perpendicolare(r.p2),s=[n.interseca(t[0])];for(let e=0;e<t.length-1;e++){let i=t[e].interseca(t[e+1]);i&&s.push(i)}return s.push(t[t.length-1].interseca(o)),getshape().frompt(s)},sliceony(t){let i=t.pt.map((e=>e.y)).slice(1,-1);const n=[],r=e.length;let o=0,s=e[0].y;for(let t=1;t<r;t++)e[t].y<s&&(s=e[t].y,o=t);const A=[...e.slice(o),...e.slice(0,o)],a=A.length,l=new Map;for(let e=0;e<a;e++)for(let t of i)Math.abs(A[e].y-t)<1e-5&&(l.has(t)?l.get(t).i2=e:l.set(t,{i1:e,i2:e}));const c=i.map((e=>l.get(e))).filter((e=>e&&e.i1>=0&&e.i2>=0));c.length>0&&c[0].i1>0&&n.push([...A.slice(0,c[0].i1+1),...A.slice(c[0].i2,c[0].length)]);for(let e=0;e<c.length-1;e++){const t=c[e],i=c[e+1];n.push([...A.slice(t.i1,i.i1+1),...A.slice(i.i2,t.i2+1)])}const p=c[c.length-1];p.i2>p.i1&&n.push(A.slice(p.i1,p.i2+1));return n.filter((e=>e.length>0))},splitshape(e,t=!0){const i=100,n=t?{x:e.x,y:e.y-i}:{x:e.x-i,y:e.y},r=t?{x:e.x,y:e.y+i}:{x:e.x+i,y:e.y},o=this.intersectline(new Linea2(n,r));if(!o)return null;const s=o.p1,A=o.p2,findIndex=e=>this.pt.findIndex(((t,i)=>new Linea2(t,this.pt[(i+1)%this.pt.length]).onsegment(e))),a=findIndex(s),l=findIndex(A);if(a<0||l<0)return null;const c=this.pt.length,loop=(e,t,i,n)=>{const r=[];for(let i=e;i!==t;i=(i+1)%c)r.push(this.pt[(i+1)%c]);return r},p=getshape().frompt(loop(a,l));return{sx:getshape().frompt(loop(l,a)),dx:p,linea:o}},xfromy(e,t=0,i=!0){const n=[],r=this.pt.length;for(let t=0;t<r-1;t++){const r=this.pt[t],o=this.pt[t+1];if(r.y<=e&&o.y>=e||o.y<=e&&r.y>=e){const t=o.y-r.y,i=t?(e-r.y)/t:0,s=r.x+i*(o.x-r.x);n.push(s)}else r.y===e&&o.y===e&&n.push(i?Math.max(r.x,o.x):Math.min(r.x,o.x))}return n.length?i?Math.max(...n):Math.min(...n):t},yfromx(e,t=0,i=!0){const n=[],r=this.pt.length;for(let t=0;t<r-1;t++){const r=this.pt[t],o=this.pt[t+1];if(r.x<=e&&o.x>=e||o.x<=e&&r.x>=e){const t=o.x-r.x,i=t?(e-r.x)/t:0,s=r.y+i*(o.y-r.y);n.push(s)}else r.x===e&&o.x===e&&n.push(i?Math.max(r.y,o.y):Math.min(r.y,o.y))}return n.length?i?Math.max(...n):Math.min(...n):t},forcevalues(t,i=!0,n=1e-6){const r=[...new Set(t.pt.map((e=>i?e.y:e.x)))].sort(((e,t)=>e-t)),o=[],s=e.length;for(let t=0;t<s;t++){const A=e[t],a=e[(t+1)%s];o.push({...A});let l=i?A.y:A.x,c=i?a.y:a.x;if(l===c)continue;const p=c>l?r.filter((e=>e>l+n&&e<c-n)):r.filter((e=>e<l-n&&e>c+n)).reverse();for(const e of p){const t=(e-l)/(c-l),i={x:A.x+t*(a.x-A.x),y:A.y+t*(a.y-A.y)};o.push(i)}}return e=o,this},fromrrect(e,t,i=10,n=0,r=0){return(i>=e/2||i>=t/2&&i<=0)&&(i=Math.round(Math.min(e/3,t/3))),fromstr(`0,0,r${i},${e},0,r${i},${e},${t},r${i},0,${t},r${i}`),(n||r)&&move(n,r),this},fromrect(t,i,n,r,o){t||(t=10),i||(i=10),o||(o=0),o=Math.min(Math.abs(o),Math.abs(.4*t),Math.abs(.4*i));let s=t>0?o:-o,A=i>0?o:-o;return e=o?[{x:s,y:0},{x:t-s,y:0},{x:t,y:A},{x:t,y:i-A},{x:t-s,y:i},{x:s,y:i},{x:0,y:i-A},{x:0,y:A}]:[{x:0,y:0},{x:t,y:0},{x:t,y:i},{x:0,y:i}],this},intersectline:t=>function _intersectline(e,t,i){let n=e.length,r=new Linea2(t,i);const o=[];for(let t=0;t<e.length;t++){let i=new Linea2(e[t],e[(t+1)%n]),s=i.interseca(r);s&&i.onsegment(s)&&o.push(s)}if(o.length<2)return null;const{dx:s,dy:A}=r;o.sort(((e,i)=>(e.x-t.x)*s+(e.y-t.y)*A-((i.x-t.x)*s+(i.y-t.y)*A)));let a=new Punto2(o[0].x,o[0].y),l=new Punto2(o[o.length-1].x,o[o.length-1].y);const c=l.x-a.x,p=l.y-a.y;return c*s+p*A<0&&([a,l]=[l,a]),new Linea2(a,l)}(e,t.p1,t.p2),tostr(t=2){let i=10**t,pstr=e=>String(Math.round(e*i)/i),n=e.map((e=>`${pstr(e.x)};${pstr(e.y)};`)).join("");return n&&n.length?n.slice(0,-1).match(/.{1,80}(;|$)/g).map((e=>e.trim())).join("\n"):""},addpt(t){return t?(Array.isArray(t)||(t=[t]),e=removeduplicate([...e,...t]),this):this},addracc(t,i,n=2,r=!0){if(Array.isArray(t)&&(i={x:t[2]||0,y:t[3]||0},t={x:t[0]||0,y:t[1]||0}),e.length>=2){let o=raccordabezier(e[e.length-2],e[e.length-1],t,i,n);e=[...e,...o],r&&(e.push(t),e.push(i))}return e=removeduplicate(e),this},setorient(t){let i=orientation();return(1==i&&-1==t||-1==i&&1==t)&&e.reverse(),this},reverse(){return e.reverse(),this},pointinshape:t=>function isPointInPolygon(t){let i=t.x,n=t.y,r=!1;for(let t=0,o=e.length-1;t<e.length;o=t++){let s=e[t].x,A=e[t].y,a=e[o].x,l=e[o].y;A>n!=l>n&&i<(a-s)*(n-A)/(l-A)+s&&(r=!r)}return r}(t),azzera(){return e=[],this},truncatebefore:function truncatebefore(t){let i=new Linea2(e[0],e[1]),n=t.interseca(i);if(n){let t=e[0],i=e[1],r=i.x-t.x,o=i.y-t.y,s=r*r+o*o;if(s){if(((n.x-t.x)*r+(n.y-t.y)*o)/s<=1)return e[0]=n,this}}for(let i=1;i<e.length-1;i++){let n=new Linea2(e[i],e[i+1]),r=t.interseca(n);if(r&&n.onsegment(r))return e=e.slice(i),e[0]=r,this}return this},truncateafter:function truncateafter(t){let i=e.length,n=new Linea2(e[i-2],e[i-1]),r=t.interseca(n);if(r){let t=e[i-2],n=e[i-1],o=n.x-t.x,s=n.y-t.y,A=o*o+s*s;if(A){if(((r.x-t.x)*o+(r.y-t.y)*s)/A>=0)return e[i-1]=r,this}}for(let n=i-3;n>=0;n--){let i=new Linea2(e[n],e[n+1]),r=t.interseca(i);if(r&&i.onsegment(r))return e=e.slice(0,n+1),e.push(r),this}return this},removeduplicate(t=.005){return e=removeduplicate(e,t),this},to3d(t,i=0,n=0,r=0,o=!1,s=null,A=!1){let a=function to3dcoor(e,t){let{currentU:i=0,c:n=0,a:r=0,b:o=0,anglemin:s=30,open:A=!1,sh:a=null,invert:l=!1}=t;const c=[],p=e.length;for(let t=0;t<p;t++){const A=e[(t-1+p)%p],h=e[t],g=e[(t+1)%p],u={x:h.x-A.x,y:h.y-A.y},d={x:g.x-h.x,y:g.y-h.y},f=normal2(A,h),I=normal2(h,g),m=angle2vec(u,d);let b=r*h.x+o*h.y+n;if(a){let e=a.xfromy(h.y,0,!0);l?b+=e:b-=e}Math.abs(m-180)<=s?(f.nx,I.nx,f.ny,I.ny,c.push({x:h.x,y:-h.y,z:b,u:i,v:b})):(c.push({x:h.x,y:-h.y,z:b,u:i,v:b}),c.push({x:h.x,y:-h.y,z:b,u:i,v:b}));const C=g.x-h.x,B=g.y-h.y;i+=Math.sqrt(C*C+B*B)}if(!A){let e=c[0],t=c[c.length-1];e.x==t.x&&e.y==t.y||c.push({x:e.x,y:e.y,z:e.z,nx:e.nx,ny:e.ny,nz:e.nz,u:i,v:e.z})}return c}(e,{open:o,currentU:t,c:i,a:n,b:r,anglemin:30,sh:s,invert:A});return a},getboundbox:()=>e.length?e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.x=Math.max(e.p2.x,t.x),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}):{p1:new Punto2(0,0),p2:new Punto2(0,0)},fittobox(t,i){if(!e.length)return this;const n=this.getboundbox(),r=n.p2.x-n.p1.x,o=n.p2.y-n.p1.y,s=i.x-t.x,A=i.y-t.y,a=Math.min(s/(r||1),A/(o||1));for(let i of e)i.x=(i.x-n.p1.x)*a,i.y=(i.y-n.p1.y)*a,i.x+=t.x,i.y+=t.y;return this}}}function arcfrom3point(e,t,i,n){if(e<=0)return[t,n];if(1===e)return[t,i,n];const r=function findCircleCenter(e,t,i){const n=t.x*t.x+t.y*t.y,r=(e.x*e.x+e.y*e.y-n)/2,o=(n-i.x*i.x-i.y*i.y)/2,s=(e.x-t.x)*(t.y-i.y)-(t.x-i.x)*(e.y-t.y);return Math.abs(s)<1e-10?null:new Punto2((r*(t.y-i.y)-o*(e.y-t.y))/s,((e.x-t.x)*o-(t.x-i.x)*r)/s)}(t,i,n);if(!r){const i=[];for(let r=0;r<=e;r++){const o=r/e;i.push(new Punto2(t.x+(n.x-t.x)*o,t.y+(n.y-t.y)*o))}return i}let o=Math.atan2(t.y-r.y,t.x-r.x);Math.atan2(i.y-r.y,i.x-r.x);let s=Math.atan2(n.y-r.y,n.x-r.x);const A=(i.x-t.x)*(n.y-t.y)-(i.y-t.y)*(n.x-t.x),norm=e=>(e+2*Math.PI)%(2*Math.PI);o=norm(o),s=norm(s),A>0?s<o&&(s+=2*Math.PI):s>o&&(s-=2*Math.PI);const a=Math.hypot(t.x-r.x,t.y-r.y),l=(s-o)/e,c=[];for(let t=0;t<=e;t++){const e=o+l*t;c.push(new Punto2(r.x+a*Math.cos(e),r.y+a*Math.sin(e)))}return c}function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var qe,He={exports:{}};qe=He,function(){var e,t={version:"6.4.2.2",use_lines:!0,use_xyz:!1},i=!1;if(qe.exports?(qe.exports=t,i=!0):"undefined"!=typeof document?window.ClipperLib=t:self.ClipperLib=t,i)n="chrome",e="Netscape";else{var n=navigator.userAgent.toString().toLowerCase();e=navigator.appName}var r,o={};function BigInteger(e,i,n){t.biginteger_used=1,null!=e&&("number"==typeof e&&void 0===i?this.fromInt(e):"number"==typeof e?this.fromNumber(e,i,n):null==i&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,i))}function nbi(){return new BigInteger(null,void 0,void 0)}-1!=n.indexOf("chrome")&&-1==n.indexOf("chromium")?o.chrome=1:o.chrome=0,-1!=n.indexOf("chromium")?o.chromium=1:o.chromium=0,-1!=n.indexOf("safari")&&-1==n.indexOf("chrome")&&-1==n.indexOf("chromium")?o.safari=1:o.safari=0,-1!=n.indexOf("firefox")?o.firefox=1:o.firefox=0,-1!=n.indexOf("firefox/17")?o.firefox17=1:o.firefox17=0,-1!=n.indexOf("firefox/15")?o.firefox15=1:o.firefox15=0,-1!=n.indexOf("firefox/3")?o.firefox3=1:o.firefox3=0,-1!=n.indexOf("opera")?o.opera=1:o.opera=0,-1!=n.indexOf("msie 10")?o.msie10=1:o.msie10=0,-1!=n.indexOf("msie 9")?o.msie9=1:o.msie9=0,-1!=n.indexOf("msie 8")?o.msie8=1:o.msie8=0,-1!=n.indexOf("msie 7")?o.msie7=1:o.msie7=0,-1!=n.indexOf("msie ")?o.msie=1:o.msie=0,t.biginteger_used=null,"Microsoft Internet Explorer"==e?(BigInteger.prototype.am=function am2(e,t,i,n,r,o){for(var s=32767&t,A=t>>15;--o>=0;){var a=32767&this[e],l=this[e++]>>15,c=A*a+l*s;r=((a=s*a+((32767&c)<<15)+i[n]+(1073741823&r))>>>30)+(c>>>15)+A*l+(r>>>30),i[n++]=1073741823&a}return r},r=30):"Netscape"!=e?(BigInteger.prototype.am=function am1(e,t,i,n,r,o){for(;--o>=0;){var s=t*this[e++]+i[n]+r;r=Math.floor(s/67108864),i[n++]=67108863&s}return r},r=26):(BigInteger.prototype.am=function am3(e,t,i,n,r,o){for(var s=16383&t,A=t>>14;--o>=0;){var a=16383&this[e],l=this[e++]>>14,c=A*a+l*s;r=((a=s*a+((16383&c)<<14)+i[n]+r)>>28)+(c>>14)+A*l,i[n++]=268435455&a}return r},r=28),BigInteger.prototype.DB=r,BigInteger.prototype.DM=(1<<r)-1,BigInteger.prototype.DV=1<<r,BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-r,BigInteger.prototype.F2=2*r-52;var s,A,a=new Array;for(s="0".charCodeAt(0),A=0;A<=9;++A)a[s++]=A;for(s="a".charCodeAt(0),A=10;A<36;++A)a[s++]=A;for(s="A".charCodeAt(0),A=10;A<36;++A)a[s++]=A;function int2char(e){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)}function intAt(e,t){var i=a[e.charCodeAt(t)];return null==i?-1:i}function nbv(e){var t=nbi();return t.fromInt(e),t}function nbits(e){var t,i=1;return 0!=(t=e>>>16)&&(e=t,i+=16),0!=(t=e>>8)&&(e=t,i+=8),0!=(t=e>>4)&&(e=t,i+=4),0!=(t=e>>2)&&(e=t,i+=2),0!=(t=e>>1)&&(e=t,i+=1),i}function Classic(e){this.m=e}function Montgomery(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function op_and(e,t){return e&t}function op_or(e,t){return e|t}function op_xor(e,t){return e^t}function op_andnot(e,t){return e&~t}function lbit(e){if(0==e)return-1;var t=0;return 65535&e||(e>>=16,t+=16),255&e||(e>>=8,t+=8),15&e||(e>>=4,t+=4),3&e||(e>>=2,t+=2),1&e||++t,t}function cbit(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function NullExp(){}function nNop(e){return e}function Barrett(e){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}Classic.prototype.convert=function cConvert(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},Classic.prototype.revert=function cRevert(e){return e},Classic.prototype.reduce=function cReduce(e){e.divRemTo(this.m,null,e)},Classic.prototype.mulTo=function cMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Classic.prototype.sqrTo=function cSqrTo(e,t){e.squareTo(t),this.reduce(t)},Montgomery.prototype.convert=function montConvert(e){var t=nbi();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(BigInteger.ZERO)>0&&this.m.subTo(t,t),t},Montgomery.prototype.revert=function montRevert(e){var t=nbi();return e.copyTo(t),this.reduce(t),t},Montgomery.prototype.reduce=function montReduce(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var i=32767&e[t],n=i*this.mpl+((i*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(e[i=t+this.m.t]+=this.m.am(0,n,e,t,0,this.m.t);e[i]>=e.DV;)e[i]-=e.DV,e[++i]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},Montgomery.prototype.mulTo=function montMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Montgomery.prototype.sqrTo=function montSqrTo(e,t){e.squareTo(t),this.reduce(t)},BigInteger.prototype.copyTo=function bnpCopyTo(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(e,t){var i;if(16==t)i=4;else if(8==t)i=3;else if(256==t)i=8;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return void this.fromRadix(e,t);i=2}this.t=0,this.s=0;for(var n=e.length,r=!1,o=0;--n>=0;){var s=8==i?255&e[n]:intAt(e,n);s<0?"-"==e.charAt(n)&&(r=!0):(r=!1,0==o?this[this.t++]=s:o+i>this.DB?(this[this.t-1]|=(s&(1<<this.DB-o)-1)<<o,this[this.t++]=s>>this.DB-o):this[this.t-1]|=s<<o,(o+=i)>=this.DB&&(o-=this.DB))}8==i&&128&e[0]&&(this.s=-1,o>0&&(this[this.t-1]|=(1<<this.DB-o)-1<<o)),this.clamp(),r&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.clamp=function bnpClamp(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t},BigInteger.prototype.dlShiftTo=function bnpDLShiftTo(e,t){var i;for(i=this.t-1;i>=0;--i)t[i+e]=this[i];for(i=e-1;i>=0;--i)t[i]=0;t.t=this.t+e,t.s=this.s},BigInteger.prototype.drShiftTo=function bnpDRShiftTo(e,t){for(var i=e;i<this.t;++i)t[i-e]=this[i];t.t=Math.max(this.t-e,0),t.s=this.s},BigInteger.prototype.lShiftTo=function bnpLShiftTo(e,t){var i,n=e%this.DB,r=this.DB-n,o=(1<<r)-1,s=Math.floor(e/this.DB),A=this.s<<n&this.DM;for(i=this.t-1;i>=0;--i)t[i+s+1]=this[i]>>r|A,A=(this[i]&o)<<n;for(i=s-1;i>=0;--i)t[i]=0;t[s]=A,t.t=this.t+s+1,t.s=this.s,t.clamp()},BigInteger.prototype.rShiftTo=function bnpRShiftTo(e,t){t.s=this.s;var i=Math.floor(e/this.DB);if(i>=this.t)t.t=0;else{var n=e%this.DB,r=this.DB-n,o=(1<<n)-1;t[0]=this[i]>>n;for(var s=i+1;s<this.t;++s)t[s-i-1]|=(this[s]&o)<<r,t[s-i]=this[s]>>n;n>0&&(t[this.t-i-1]|=(this.s&o)<<r),t.t=this.t-i,t.clamp()}},BigInteger.prototype.subTo=function bnpSubTo(e,t){for(var i=0,n=0,r=Math.min(e.t,this.t);i<r;)n+=this[i]-e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n-=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n-=e[i],t[i++]=n&this.DM,n>>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t[i++]=this.DV+n:n>0&&(t[i++]=n),t.t=i,t.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(e,t){var i=this.abs(),n=e.abs(),r=i.t;for(t.t=r+n.t;--r>=0;)t[r]=0;for(r=0;r<n.t;++r)t[r+i.t]=i.am(0,n[r],t,r,0,i.t);t.s=0,t.clamp(),this.s!=e.s&&BigInteger.ZERO.subTo(t,t)},BigInteger.prototype.squareTo=function bnpSquareTo(e){for(var t=this.abs(),i=e.t=2*t.t;--i>=0;)e[i]=0;for(i=0;i<t.t-1;++i){var n=t.am(i,t[i],e,2*i,0,1);(e[i+t.t]+=t.am(i+1,2*t[i],e,2*i+1,n,t.t-i-1))>=t.DV&&(e[i+t.t]-=t.DV,e[i+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(i,t[i],e,2*i,0,1)),e.s=0,e.clamp()},BigInteger.prototype.divRemTo=function bnpDivRemTo(e,t,i){var n=e.abs();if(!(n.t<=0)){var r=this.abs();if(r.t<n.t)return null!=t&&t.fromInt(0),void(null!=i&&this.copyTo(i));null==i&&(i=nbi());var o=nbi(),s=this.s,A=e.s,a=this.DB-nbits(n[n.t-1]);a>0?(n.lShiftTo(a,o),r.lShiftTo(a,i)):(n.copyTo(o),r.copyTo(i));var l=o.t,c=o[l-1];if(0!=c){var p=c*(1<<this.F1)+(l>1?o[l-2]>>this.F2:0),h=this.FV/p,g=(1<<this.F1)/p,u=1<<this.F2,d=i.t,f=d-l,I=null==t?nbi():t;for(o.dlShiftTo(f,I),i.compareTo(I)>=0&&(i[i.t++]=1,i.subTo(I,i)),BigInteger.ONE.dlShiftTo(l,I),I.subTo(o,o);o.t<l;)o[o.t++]=0;for(;--f>=0;){var m=i[--d]==c?this.DM:Math.floor(i[d]*h+(i[d-1]+u)*g);if((i[d]+=o.am(0,m,i,f,0,l))<m)for(o.dlShiftTo(f,I),i.subTo(I,i);i[d]<--m;)i.subTo(I,i)}null!=t&&(i.drShiftTo(l,t),s!=A&&BigInteger.ZERO.subTo(t,t)),i.t=l,i.clamp(),a>0&&i.rShiftTo(a,i),s<0&&BigInteger.ZERO.subTo(i,i)}}},BigInteger.prototype.invDigit=function bnpInvDigit(){if(this.t<1)return 0;var e=this[0];if(!(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},BigInteger.prototype.isEven=function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)},BigInteger.prototype.exp=function bnpExp(e,t){if(e>4294967295||e<1)return BigInteger.ONE;var i=nbi(),n=nbi(),r=t.convert(this),o=nbits(e)-1;for(r.copyTo(i);--o>=0;)if(t.sqrTo(i,n),(e&1<<o)>0)t.mulTo(n,r,i);else{var s=i;i=n,n=s}return t.revert(i)},BigInteger.prototype.toString=function bnToString(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var i,n=(1<<t)-1,r=!1,o="",s=this.t,A=this.DB-s*this.DB%t;if(s-- >0)for(A<this.DB&&(i=this[s]>>A)>0&&(r=!0,o=int2char(i));s>=0;)A<t?(i=(this[s]&(1<<A)-1)<<t-A,i|=this[--s]>>(A+=this.DB-t)):(i=this[s]>>(A-=t)&n,A<=0&&(A+=this.DB,--s)),i>0&&(r=!0),r&&(o+=int2char(i));return r?o:"0"},BigInteger.prototype.negate=function bnNegate(){var e=nbi();return BigInteger.ZERO.subTo(this,e),e},BigInteger.prototype.abs=function bnAbs(){return this.s<0?this.negate():this},BigInteger.prototype.compareTo=function bnCompareTo(e){var t=this.s-e.s;if(0!=t)return t;var i=this.t;if(0!=(t=i-e.t))return this.s<0?-t:t;for(;--i>=0;)if(0!=(t=this[i]-e[i]))return t;return 0},BigInteger.prototype.bitLength=function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)},BigInteger.prototype.mod=function bnMod(e){var t=nbi();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(BigInteger.ZERO)>0&&e.subTo(t,t),t},BigInteger.prototype.modPowInt=function bnModPowInt(e,t){var i;return i=e<256||t.isEven()?new Classic(t):new Montgomery(t),this.exp(e,i)},BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=function nMulTo(e,t,i){e.multiplyTo(t,i)},NullExp.prototype.sqrTo=function nSqrTo(e,t){e.squareTo(t)},Barrett.prototype.convert=function barrettConvert(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=nbi();return e.copyTo(t),this.reduce(t),t},Barrett.prototype.revert=function barrettRevert(e){return e},Barrett.prototype.reduce=function barrettReduce(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},Barrett.prototype.mulTo=function barrettMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Barrett.prototype.sqrTo=function barrettSqrTo(e,t){e.squareTo(t),this.reduce(t)};var l=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],c=(1<<26)/l[l.length-1];BigInteger.prototype.chunkSize=function bnpChunkSize(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},BigInteger.prototype.toRadix=function bnpToRadix(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),i=Math.pow(e,t),n=nbv(i),r=nbi(),o=nbi(),s="";for(this.divRemTo(n,r,o);r.signum()>0;)s=(i+o.intValue()).toString(e).substr(1)+s,r.divRemTo(n,r,o);return o.intValue().toString(e)+s},BigInteger.prototype.fromRadix=function bnpFromRadix(e,t){this.fromInt(0),null==t&&(t=10);for(var i=this.chunkSize(t),n=Math.pow(t,i),r=!1,o=0,s=0,A=0;A<e.length;++A){var a=intAt(e,A);a<0?"-"==e.charAt(A)&&0==this.signum()&&(r=!0):(s=t*s+a,++o>=i&&(this.dMultiply(n),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(s,0)),r&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.fromNumber=function bnpFromNumber(e,t,i){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,i),this.testBit(e-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(e-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(BigInteger.ONE.shiftLeft(e-1),this);else{var n=new Array,r=7&e;n.length=1+(e>>3),t.nextBytes(n),r>0?n[0]&=(1<<r)-1:n[0]=0,this.fromString(n,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,i){var n,r,o=Math.min(e.t,this.t);for(n=0;n<o;++n)i[n]=t(this[n],e[n]);if(e.t<this.t){for(r=e.s&this.DM,n=o;n<this.t;++n)i[n]=t(this[n],r);i.t=this.t}else{for(r=this.s&this.DM,n=o;n<e.t;++n)i[n]=t(r,e[n]);i.t=e.t}i.s=t(this.s,e.s),i.clamp()},BigInteger.prototype.changeBit=function bnpChangeBit(e,t){var i=BigInteger.ONE.shiftLeft(e);return this.bitwiseTo(i,t,i),i},BigInteger.prototype.addTo=function bnpAddTo(e,t){for(var i=0,n=0,r=Math.min(e.t,this.t);i<r;)n+=this[i]+e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n+=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n+=e[i],t[i++]=n&this.DM,n>>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t[i++]=n:n<-1&&(t[i++]=this.DV+n),t.t=i,t.clamp()},BigInteger.prototype.dMultiply=function bnpDMultiply(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},BigInteger.prototype.dAddOffset=function bnpDAddOffset(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},BigInteger.prototype.multiplyLowerTo=function bnpMultiplyLowerTo(e,t,i){var n,r=Math.min(this.t+e.t,t);for(i.s=0,i.t=r;r>0;)i[--r]=0;for(n=i.t-this.t;r<n;++r)i[r+this.t]=this.am(0,e[r],i,r,0,this.t);for(n=Math.min(e.t,t);r<n;++r)this.am(0,e[r],i,r,0,t-r);i.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,i){--t;var n=i.t=this.t+e.t-t;for(i.s=0;--n>=0;)i[n]=0;for(n=Math.max(t-this.t,0);n<e.t;++n)i[this.t+n-t]=this.am(t-n,e[n],i,0,0,this.t+n-t);i.clamp(),i.drShiftTo(1,i)},BigInteger.prototype.modInt=function bnpModInt(e){if(e<=0)return 0;var t=this.DV%e,i=this.s<0?e-1:0;if(this.t>0)if(0==t)i=this[0]%e;else for(var n=this.t-1;n>=0;--n)i=(t*i+this[n])%e;return i},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var n=t.shiftRight(i);(e=e+1>>1)>l.length&&(e=l.length);for(var r=nbi(),o=0;o<e;++o){r.fromInt(l[Math.floor(Math.random()*l.length)]);var s=r.modPow(n,this);if(0!=s.compareTo(BigInteger.ONE)&&0!=s.compareTo(t)){for(var A=1;A++<i&&0!=s.compareTo(t);)if(0==(s=s.modPowInt(2,this)).compareTo(BigInteger.ONE))return!1;if(0!=s.compareTo(t))return!1}}return!0},BigInteger.prototype.clone=function bnClone(){var e=nbi();return this.copyTo(e),e},BigInteger.prototype.intValue=function bnIntValue(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},BigInteger.prototype.byteValue=function bnByteValue(){return 0==this.t?this.s:this[0]<<24>>24},BigInteger.prototype.shortValue=function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16},BigInteger.prototype.signum=function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},BigInteger.prototype.toByteArray=function bnToByteArray(){var e=this.t,t=new Array;t[0]=this.s;var i,n=this.DB-e*this.DB%8,r=0;if(e-- >0)for(n<this.DB&&(i=this[e]>>n)!=(this.s&this.DM)>>n&&(t[r++]=i|this.s<<this.DB-n);e>=0;)n<8?(i=(this[e]&(1<<n)-1)<<8-n,i|=this[--e]>>(n+=this.DB-8)):(i=this[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),128&i&&(i|=-256),0==r&&(128&this.s)!=(128&i)&&++r,(r>0||i!=this.s)&&(t[r++]=i);return t},BigInteger.prototype.equals=function bnEquals(e){return 0==this.compareTo(e)},BigInteger.prototype.min=function bnMin(e){return this.compareTo(e)<0?this:e},BigInteger.prototype.max=function bnMax(e){return this.compareTo(e)>0?this:e},BigInteger.prototype.and=function bnAnd(e){var t=nbi();return this.bitwiseTo(e,op_and,t),t},BigInteger.prototype.or=function bnOr(e){var t=nbi();return this.bitwiseTo(e,op_or,t),t},BigInteger.prototype.xor=function bnXor(e){var t=nbi();return this.bitwiseTo(e,op_xor,t),t},BigInteger.prototype.andNot=function bnAndNot(e){var t=nbi();return this.bitwiseTo(e,op_andnot,t),t},BigInteger.prototype.not=function bnNot(){for(var e=nbi(),t=0;t<this.t;++t)e[t]=this.DM&~this[t];return e.t=this.t,e.s=~this.s,e},BigInteger.prototype.shiftLeft=function bnShiftLeft(e){var t=nbi();return e<0?this.rShiftTo(-e,t):this.lShiftTo(e,t),t},BigInteger.prototype.shiftRight=function bnShiftRight(e){var t=nbi();return e<0?this.lShiftTo(-e,t):this.rShiftTo(e,t),t},BigInteger.prototype.getLowestSetBit=function bnGetLowestSetBit(){for(var e=0;e<this.t;++e)if(0!=this[e])return e*this.DB+lbit(this[e]);return this.s<0?this.t*this.DB:-1},BigInteger.prototype.bitCount=function bnBitCount(){for(var e=0,t=this.s&this.DM,i=0;i<this.t;++i)e+=cbit(this[i]^t);return e},BigInteger.prototype.testBit=function bnTestBit(e){var t=Math.floor(e/this.DB);return t>=this.t?0!=this.s:!!(this[t]&1<<e%this.DB)},BigInteger.prototype.setBit=function bnSetBit(e){return this.changeBit(e,op_or)},BigInteger.prototype.clearBit=function bnClearBit(e){return this.changeBit(e,op_andnot)},BigInteger.prototype.flipBit=function bnFlipBit(e){return this.changeBit(e,op_xor)},BigInteger.prototype.add=function bnAdd(e){var t=nbi();return this.addTo(e,t),t},BigInteger.prototype.subtract=function bnSubtract(e){var t=nbi();return this.subTo(e,t),t},BigInteger.prototype.multiply=function bnMultiply(e){var t=nbi();return this.multiplyTo(e,t),t},BigInteger.prototype.divide=function bnDivide(e){var t=nbi();return this.divRemTo(e,t,null),t},BigInteger.prototype.remainder=function bnRemainder(e){var t=nbi();return this.divRemTo(e,null,t),t},BigInteger.prototype.divideAndRemainder=function bnDivideAndRemainder(e){var t=nbi(),i=nbi();return this.divRemTo(e,t,i),new Array(t,i)},BigInteger.prototype.modPow=function bnModPow(e,t){var i,n,r=e.bitLength(),o=nbv(1);if(r<=0)return o;i=r<18?1:r<48?3:r<144?4:r<768?5:6,n=r<8?new Classic(t):t.isEven()?new Barrett(t):new Montgomery(t);var s=new Array,A=3,a=i-1,l=(1<<i)-1;if(s[1]=n.convert(this),i>1){var c=nbi();for(n.sqrTo(s[1],c);A<=l;)s[A]=nbi(),n.mulTo(c,s[A-2],s[A]),A+=2}var p,h,g=e.t-1,u=!0,d=nbi();for(r=nbits(e[g])-1;g>=0;){for(r>=a?p=e[g]>>r-a&l:(p=(e[g]&(1<<r+1)-1)<<a-r,g>0&&(p|=e[g-1]>>this.DB+r-a)),A=i;!(1&p);)p>>=1,--A;if((r-=A)<0&&(r+=this.DB,--g),u)s[p].copyTo(o),u=!1;else{for(;A>1;)n.sqrTo(o,d),n.sqrTo(d,o),A-=2;A>0?n.sqrTo(o,d):(h=o,o=d,d=h),n.mulTo(d,s[p],o)}for(;g>=0&&!(e[g]&1<<r);)n.sqrTo(o,d),h=o,o=d,d=h,--r<0&&(r=this.DB-1,--g)}return n.revert(o)},BigInteger.prototype.modInverse=function bnModInverse(e){var t=e.isEven();if(this.isEven()&&t||0==e.signum())return BigInteger.ZERO;for(var i=e.clone(),n=this.clone(),r=nbv(1),o=nbv(0),s=nbv(0),A=nbv(1);0!=i.signum();){for(;i.isEven();)i.rShiftTo(1,i),t?(r.isEven()&&o.isEven()||(r.addTo(this,r),o.subTo(e,o)),r.rShiftTo(1,r)):o.isEven()||o.subTo(e,o),o.rShiftTo(1,o);for(;n.isEven();)n.rShiftTo(1,n),t?(s.isEven()&&A.isEven()||(s.addTo(this,s),A.subTo(e,A)),s.rShiftTo(1,s)):A.isEven()||A.subTo(e,A),A.rShiftTo(1,A);i.compareTo(n)>=0?(i.subTo(n,i),t&&r.subTo(s,r),o.subTo(A,o)):(n.subTo(i,n),t&&s.subTo(r,s),A.subTo(o,A))}return 0!=n.compareTo(BigInteger.ONE)?BigInteger.ZERO:A.compareTo(e)>=0?A.subtract(e):A.signum()<0?(A.addTo(e,A),A.signum()<0?A.add(e):A):A},BigInteger.prototype.pow=function bnPow(e){return this.exp(e,new NullExp)},BigInteger.prototype.gcd=function bnGCD(e){var t=this.s<0?this.negate():this.clone(),i=e.s<0?e.negate():e.clone();if(t.compareTo(i)<0){var n=t;t=i,i=n}var r=t.getLowestSetBit(),o=i.getLowestSetBit();if(o<0)return t;for(r<o&&(o=r),o>0&&(t.rShiftTo(o,t),i.rShiftTo(o,i));t.signum()>0;)(r=t.getLowestSetBit())>0&&t.rShiftTo(r,t),(r=i.getLowestSetBit())>0&&i.rShiftTo(r,i),t.compareTo(i)>=0?(t.subTo(i,t),t.rShiftTo(1,t)):(i.subTo(t,i),i.rShiftTo(1,i));return o>0&&i.lShiftTo(o,i),i},BigInteger.prototype.isProbablePrime=function bnIsProbablePrime(e){var t,i=this.abs();if(1==i.t&&i[0]<=l[l.length-1]){for(t=0;t<l.length;++t)if(i[0]==l[t])return!0;return!1}if(i.isEven())return!1;for(t=1;t<l.length;){for(var n=l[t],r=t+1;r<l.length&&n<c;)n*=l[r++];for(n=i.modInt(n);t<r;)if(n%l[t++]==0)return!1}return i.millerRabin(e)},BigInteger.prototype.square=function bnSquare(){var e=nbi();return this.squareTo(e),e};var p=BigInteger;p.prototype.IsNegative=function(){return-1==this.compareTo(p.ZERO)},p.op_Equality=function(e,t){return 0==e.compareTo(t)},p.op_Inequality=function(e,t){return 0!=e.compareTo(t)},p.op_GreaterThan=function(e,t){return e.compareTo(t)>0},p.op_LessThan=function(e,t){return e.compareTo(t)<0},p.op_Addition=function(e,t){return new p(e,void 0,void 0).add(new p(t,void 0,void 0))},p.op_Subtraction=function(e,t){return new p(e,void 0,void 0).subtract(new p(t,void 0,void 0))},p.Int128Mul=function(e,t){return new p(e,void 0,void 0).multiply(new p(t,void 0,void 0))},p.op_Division=function(e,t){return e.divide(t)},p.prototype.ToDouble=function(){return parseFloat(this.toString())};var Inherit=function(e,t){var i;if(void 0===Object.getOwnPropertyNames){for(i in t.prototype)void 0!==e.prototype[i]&&e.prototype[i]!==Object.prototype[i]||(e.prototype[i]=t.prototype[i]);for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}else{for(var n=Object.getOwnPropertyNames(t.prototype),r=0;r<n.length;r++)void 0===Object.getOwnPropertyDescriptor(e.prototype,n[r])&&Object.defineProperty(e.prototype,n[r],Object.getOwnPropertyDescriptor(t.prototype,n[r]));for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}};t.Path=function(){return[]},t.Path.prototype.push=Array.prototype.push,t.Paths=function(){return[]},t.Paths.prototype.push=Array.prototype.push,t.DoublePoint=function(){var e=arguments;this.X=0,this.Y=0,1===e.length?(this.X=e[0].X,this.Y=e[0].Y):2===e.length&&(this.X=e[0],this.Y=e[1])},t.DoublePoint0=function(){this.X=0,this.Y=0},t.DoublePoint0.prototype=t.DoublePoint.prototype,t.DoublePoint1=function(e){this.X=e.X,this.Y=e.Y},t.DoublePoint1.prototype=t.DoublePoint.prototype,t.DoublePoint2=function(e,t){this.X=e,this.Y=t},t.DoublePoint2.prototype=t.DoublePoint.prototype,t.PolyNode=function(){this.m_Parent=null,this.m_polygon=new t.Path,this.m_Index=0,this.m_jointype=0,this.m_endtype=0,this.m_Childs=[],this.IsOpen=!1},t.PolyNode.prototype.IsHoleNode=function(){for(var e=!0,t=this.m_Parent;null!==t;)e=!e,t=t.m_Parent;return e},t.PolyNode.prototype.ChildCount=function(){return this.m_Childs.length},t.PolyNode.prototype.Contour=function(){return this.m_polygon},t.PolyNode.prototype.AddChild=function(e){var t=this.m_Childs.length;this.m_Childs.push(e),e.m_Parent=this,e.m_Index=t},t.PolyNode.prototype.GetNext=function(){return this.m_Childs.length>0?this.m_Childs[0]:this.GetNextSiblingUp()},t.PolyNode.prototype.GetNextSiblingUp=function(){return null===this.m_Parent?null:this.m_Index===this.m_Parent.m_Childs.length-1?this.m_Parent.GetNextSiblingUp():this.m_Parent.m_Childs[this.m_Index+1]},t.PolyNode.prototype.Childs=function(){return this.m_Childs},t.PolyNode.prototype.Parent=function(){return this.m_Parent},t.PolyNode.prototype.IsHole=function(){return this.IsHoleNode()},t.PolyTree=function(){this.m_AllPolys=[],t.PolyNode.call(this)},t.PolyTree.prototype.Clear=function(){for(var e=0,t=this.m_AllPolys.length;e<t;e++)this.m_AllPolys[e]=null;this.m_AllPolys.length=0,this.m_Childs.length=0},t.PolyTree.prototype.GetFirst=function(){return this.m_Childs.length>0?this.m_Childs[0]:null},t.PolyTree.prototype.Total=function(){var e=this.m_AllPolys.length;return e>0&&this.m_Childs[0]!==this.m_AllPolys[0]&&e--,e},Inherit(t.PolyTree,t.PolyNode),t.Math_Abs_Int64=t.Math_Abs_Int32=t.Math_Abs_Double=function(e){return Math.abs(e)},t.Math_Max_Int32_Int32=function(e,t){return Math.max(e,t)},o.msie||o.opera||o.safari?t.Cast_Int32=function(e){return 0|e}:t.Cast_Int32=function(e){return~~e},void 0===Number.toInteger&&(Number.toInteger=null),o.chrome?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):~~e}:o.firefox&&"function"==typeof Number.toInteger?t.Cast_Int64=function(e){return Number.toInteger(e)}:o.msie7||o.msie8?t.Cast_Int64=function(e){return parseInt(e,10)}:o.msie?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):0|e}:t.Cast_Int64=function(e){return e<0?Math.ceil(e):Math.floor(e)},t.Clear=function(e){e.length=0},t.PI=3.141592653589793,t.PI2=6.283185307179586,t.IntPoint=function(){var e=arguments,i=e.length;if(this.X=0,this.Y=0,t.use_xyz)if(this.Z=0,3===i)this.X=e[0],this.Y=e[1],this.Z=e[2];else if(2===i)this.X=e[0],this.Y=e[1],this.Z=0;else if(1===i)if(e[0]instanceof t.DoublePoint){var n=e[0];this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y),this.Z=0}else void 0===(r=e[0]).Z&&(r.Z=0),this.X=r.X,this.Y=r.Y,this.Z=r.Z;else this.X=0,this.Y=0,this.Z=0;else if(2===i)this.X=e[0],this.Y=e[1];else if(1===i)if(e[0]instanceof t.DoublePoint)n=e[0],this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y);else{var r=e[0];this.X=r.X,this.Y=r.Y}else this.X=0,this.Y=0},t.IntPoint.op_Equality=function(e,t){return e.X===t.X&&e.Y===t.Y},t.IntPoint.op_Inequality=function(e,t){return e.X!==t.X||e.Y!==t.Y},t.IntPoint0=function(){this.X=0,this.Y=0,t.use_xyz&&(this.Z=0)},t.IntPoint0.prototype=t.IntPoint.prototype,t.IntPoint1=function(e){this.X=e.X,this.Y=e.Y,t.use_xyz&&(void 0===e.Z?this.Z=0:this.Z=e.Z)},t.IntPoint1.prototype=t.IntPoint.prototype,t.IntPoint1dp=function(e){this.X=t.Clipper.Round(e.X),this.Y=t.Clipper.Round(e.Y),t.use_xyz&&(this.Z=0)},t.IntPoint1dp.prototype=t.IntPoint.prototype,t.IntPoint2=function(e,i,n){this.X=e,this.Y=i,t.use_xyz&&(this.Z=void 0===n?0:n)},t.IntPoint2.prototype=t.IntPoint.prototype,t.IntRect=function(){var e=arguments,t=e.length;if(4===t)this.left=e[0],this.top=e[1],this.right=e[2],this.bottom=e[3];else if(1===t){var i=e[0];this.left=i.left,this.top=i.top,this.right=i.right,this.bottom=i.bottom}else this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0=function(){this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0.prototype=t.IntRect.prototype,t.IntRect1=function(e){this.left=e.left,this.top=e.top,this.right=e.right,this.bottom=e.bottom},t.IntRect1.prototype=t.IntRect.prototype,t.IntRect4=function(e,t,i,n){this.left=e,this.top=t,this.right=i,this.bottom=n},t.IntRect4.prototype=t.IntRect.prototype,t.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,ctXor:3},t.PolyType={ptSubject:0,ptClip:1},t.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3},t.JoinType={jtSquare:0,jtRound:1,jtMiter:2},t.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4},t.EdgeSide={esLeft:0,esRight:1},t.Direction={dRightToLeft:0,dLeftToRight:1},t.TEdge=function(){this.Bot=new t.IntPoint0,this.Curr=new t.IntPoint0,this.Top=new t.IntPoint0,this.Delta=new t.IntPoint0,this.Dx=0,this.PolyTyp=t.PolyType.ptSubject,this.Side=t.EdgeSide.esLeft,this.WindDelta=0,this.WindCnt=0,this.WindCnt2=0,this.OutIdx=0,this.Next=null,this.Prev=null,this.NextInLML=null,this.NextInAEL=null,this.PrevInAEL=null,this.NextInSEL=null,this.PrevInSEL=null},t.IntersectNode=function(){this.Edge1=null,this.Edge2=null,this.Pt=new t.IntPoint0},t.MyIntersectNodeSort=function(){},t.MyIntersectNodeSort.Compare=function(e,t){var i=t.Pt.Y-e.Pt.Y;return i>0?1:i<0?-1:0},t.LocalMinima=function(){this.Y=0,this.LeftBound=null,this.RightBound=null,this.Next=null},t.Scanbeam=function(){this.Y=0,this.Next=null},t.Maxima=function(){this.X=0,this.Next=null,this.Prev=null},t.OutRec=function(){this.Idx=0,this.IsHole=!1,this.IsOpen=!1,this.FirstLeft=null,this.Pts=null,this.BottomPt=null,this.PolyNode=null},t.OutPt=function(){this.Idx=0,this.Pt=new t.IntPoint0,this.Next=null,this.Prev=null},t.Join=function(){this.OutPt1=null,this.OutPt2=null,this.OffPt=new t.IntPoint0},t.ClipperBase=function(){this.m_MinimaList=null,this.m_CurrentLM=null,this.m_edges=new Array,this.m_UseFullRange=!1,this.m_HasOpenPaths=!1,this.PreserveCollinear=!1,this.m_Scanbeam=null,this.m_PolyOuts=null,this.m_ActiveEdges=null},t.ClipperBase.horizontal=-9007199254740992,t.ClipperBase.Skip=-2,t.ClipperBase.Unassigned=-1,t.ClipperBase.tolerance=1e-20,t.ClipperBase.loRange=47453132,t.ClipperBase.hiRange=0xfffffffffffff,t.ClipperBase.near_zero=function(e){return e>-t.ClipperBase.tolerance&&e<t.ClipperBase.tolerance},t.ClipperBase.IsHorizontal=function(e){return 0===e.Delta.Y},t.ClipperBase.prototype.PointIsVertex=function(e,i){var n=i;do{if(t.IntPoint.op_Equality(n.Pt,e))return!0;n=n.Next}while(n!==i);return!1},t.ClipperBase.prototype.PointOnLineSegment=function(e,t,i,n){return n?e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&p.op_Equality(p.Int128Mul(e.X-t.X,i.Y-t.Y),p.Int128Mul(i.X-t.X,e.Y-t.Y)):e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&(e.X-t.X)*(i.Y-t.Y)==(i.X-t.X)*(e.Y-t.Y)},t.ClipperBase.prototype.PointOnPolygon=function(e,t,i){for(var n=t;;){if(this.PointOnLineSegment(e,n.Pt,n.Next.Pt,i))return!0;if((n=n.Next)===t)break}return!1},t.ClipperBase.prototype.SlopesEqual=t.ClipperBase.SlopesEqual=function(){var e,i,n,r,o,s,A=arguments,a=A.length;return 3===a?(e=A[0],i=A[1],A[2]?p.op_Equality(p.Int128Mul(e.Delta.Y,i.Delta.X),p.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)):4===a?(n=A[0],r=A[1],o=A[2],A[3]?p.op_Equality(p.Int128Mul(n.Y-r.Y,r.X-o.X),p.Int128Mul(n.X-r.X,r.Y-o.Y)):t.Cast_Int64((n.Y-r.Y)*(r.X-o.X))-t.Cast_Int64((n.X-r.X)*(r.Y-o.Y))==0):(n=A[0],r=A[1],o=A[2],s=A[3],A[4]?p.op_Equality(p.Int128Mul(n.Y-r.Y,o.X-s.X),p.Int128Mul(n.X-r.X,o.Y-s.Y)):t.Cast_Int64((n.Y-r.Y)*(o.X-s.X))-t.Cast_Int64((n.X-r.X)*(o.Y-s.Y))==0)},t.ClipperBase.SlopesEqual3=function(e,i,n){return n?p.op_Equality(p.Int128Mul(e.Delta.Y,i.Delta.X),p.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)},t.ClipperBase.SlopesEqual4=function(e,i,n,r){return r?p.op_Equality(p.Int128Mul(e.Y-i.Y,i.X-n.X),p.Int128Mul(e.X-i.X,i.Y-n.Y)):t.Cast_Int64((e.Y-i.Y)*(i.X-n.X))-t.Cast_Int64((e.X-i.X)*(i.Y-n.Y))==0},t.ClipperBase.SlopesEqual5=function(e,i,n,r,o){return o?p.op_Equality(p.Int128Mul(e.Y-i.Y,n.X-r.X),p.Int128Mul(e.X-i.X,n.Y-r.Y)):t.Cast_Int64((e.Y-i.Y)*(n.X-r.X))-t.Cast_Int64((e.X-i.X)*(n.Y-r.Y))==0},t.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var e=0,i=this.m_edges.length;e<i;++e){for(var n=0,r=this.m_edges[e].length;n<r;++n)this.m_edges[e][n]=null;t.Clear(this.m_edges[e])}t.Clear(this.m_edges),this.m_UseFullRange=!1,this.m_HasOpenPaths=!1},t.ClipperBase.prototype.DisposeLocalMinimaList=function(){for(;null!==this.m_MinimaList;){var e=this.m_MinimaList.Next;this.m_MinimaList=null,this.m_MinimaList=e}this.m_CurrentLM=null},t.ClipperBase.prototype.RangeTest=function(e,i){i.Value?(e.X>t.ClipperBase.hiRange||e.Y>t.ClipperBase.hiRange||-e.X>t.ClipperBase.hiRange||-e.Y>t.ClipperBase.hiRange)&&t.Error("Coordinate outside allowed range in RangeTest()."):(e.X>t.ClipperBase.loRange||e.Y>t.ClipperBase.loRange||-e.X>t.ClipperBase.loRange||-e.Y>t.ClipperBase.loRange)&&(i.Value=!0,this.RangeTest(e,i))},t.ClipperBase.prototype.InitEdge=function(e,i,n,r){e.Next=i,e.Prev=n,e.Curr.X=r.X,e.Curr.Y=r.Y,t.use_xyz&&(e.Curr.Z=r.Z),e.OutIdx=-1},t.ClipperBase.prototype.InitEdge2=function(e,i){e.Curr.Y>=e.Next.Curr.Y?(e.Bot.X=e.Curr.X,e.Bot.Y=e.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Curr.Z),e.Top.X=e.Next.Curr.X,e.Top.Y=e.Next.Curr.Y,t.use_xyz&&(e.Top.Z=e.Next.Curr.Z)):(e.Top.X=e.Curr.X,e.Top.Y=e.Curr.Y,t.use_xyz&&(e.Top.Z=e.Curr.Z),e.Bot.X=e.Next.Curr.X,e.Bot.Y=e.Next.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Next.Curr.Z)),this.SetDx(e),e.PolyTyp=i},t.ClipperBase.prototype.FindNextLocMin=function(e){for(var i;;){for(;t.IntPoint.op_Inequality(e.Bot,e.Prev.Bot)||t.IntPoint.op_Equality(e.Curr,e.Top);)e=e.Next;if(e.Dx!==t.ClipperBase.horizontal&&e.Prev.Dx!==t.ClipperBase.horizontal)break;for(;e.Prev.Dx===t.ClipperBase.horizontal;)e=e.Prev;for(i=e;e.Dx===t.ClipperBase.horizontal;)e=e.Next;if(e.Top.Y!==e.Prev.Bot.Y){i.Prev.Bot.X<e.Bot.X&&(e=i);break}}return e},t.ClipperBase.prototype.ProcessBound=function(e,i){var n,r,o=e;if(o.OutIdx===t.ClipperBase.Skip){if(e=o,i){for(;e.Top.Y===e.Next.Bot.Y;)e=e.Next;for(;e!==o&&e.Dx===t.ClipperBase.horizontal;)e=e.Prev}else{for(;e.Top.Y===e.Prev.Bot.Y;)e=e.Prev;for(;e!==o&&e.Dx===t.ClipperBase.horizontal;)e=e.Next}if(e===o)o=i?e.Next:e.Prev;else{e=i?o.Next:o.Prev;var s=new t.LocalMinima;s.Next=null,s.Y=e.Bot.Y,s.LeftBound=null,s.RightBound=e,e.WindDelta=0,o=this.ProcessBound(e,i),this.InsertLocalMinima(s)}return o}if(e.Dx===t.ClipperBase.horizontal&&((n=i?e.Prev:e.Next).Dx===t.ClipperBase.horizontal?n.Bot.X!==e.Bot.X&&n.Top.X!==e.Bot.X&&this.ReverseHorizontal(e):n.Bot.X!==e.Bot.X&&this.ReverseHorizontal(e)),n=e,i){for(;o.Top.Y===o.Next.Bot.Y&&o.Next.OutIdx!==t.ClipperBase.Skip;)o=o.Next;if(o.Dx===t.ClipperBase.horizontal&&o.Next.OutIdx!==t.ClipperBase.Skip){for(r=o;r.Prev.Dx===t.ClipperBase.horizontal;)r=r.Prev;r.Prev.Top.X>o.Next.Top.X&&(o=r.Prev)}for(;e!==o;)e.NextInLML=e.Next,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),e=e.Next;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),o=o.Next}else{for(;o.Top.Y===o.Prev.Bot.Y&&o.Prev.OutIdx!==t.ClipperBase.Skip;)o=o.Prev;if(o.Dx===t.ClipperBase.horizontal&&o.Prev.OutIdx!==t.ClipperBase.Skip){for(r=o;r.Next.Dx===t.ClipperBase.horizontal;)r=r.Next;(r.Next.Top.X===o.Prev.Top.X||r.Next.Top.X>o.Prev.Top.X)&&(o=r.Next)}for(;e!==o;)e.NextInLML=e.Prev,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),e=e.Prev;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),o=o.Prev}return o},t.ClipperBase.prototype.AddPath=function(e,i,n){t.use_lines?n||i!==t.PolyType.ptClip||t.Error("AddPath: Open paths must be subject."):n||t.Error("AddPath: Open paths have been disabled.");var r=e.length-1;if(n)for(;r>0&&t.IntPoint.op_Equality(e[r],e[0]);)--r;for(;r>0&&t.IntPoint.op_Equality(e[r],e[r-1]);)--r;if(n&&r<2||!n&&r<1)return!1;for(var o=new Array,s=0;s<=r;s++)o.push(new t.TEdge);var A=!0;o[1].Curr.X=e[1].X,o[1].Curr.Y=e[1].Y,t.use_xyz&&(o[1].Curr.Z=e[1].Z);var a={Value:this.m_UseFullRange};for(this.RangeTest(e[0],a),this.m_UseFullRange=a.Value,a.Value=this.m_UseFullRange,this.RangeTest(e[r],a),this.m_UseFullRange=a.Value,this.InitEdge(o[0],o[1],o[r],e[0]),this.InitEdge(o[r],o[0],o[r-1],e[r]),s=r-1;s>=1;--s)a.Value=this.m_UseFullRange,this.RangeTest(e[s],a),this.m_UseFullRange=a.Value,this.InitEdge(o[s],o[s+1],o[s-1],e[s]);for(var l,c=o[0],p=c,h=c;;)if(p.Curr!==p.Next.Curr||!n&&p.Next===c){if(p.Prev===p.Next)break;if(!n||!t.ClipperBase.SlopesEqual4(p.Prev.Curr,p.Curr,p.Next.Curr,this.m_UseFullRange)||this.PreserveCollinear&&this.Pt2IsBetweenPt1AndPt3(p.Prev.Curr,p.Curr,p.Next.Curr)){if((p=p.Next)===h||!n&&p.Next===c)break}else p===c&&(c=p.Next),h=p=(p=this.RemoveEdge(p)).Prev}else{if(p===p.Next)break;p===c&&(c=p.Next),h=p=this.RemoveEdge(p)}if(!n&&p===p.Next||n&&p.Prev===p.Next)return!1;n||(this.m_HasOpenPaths=!0,c.Prev.OutIdx=t.ClipperBase.Skip),p=c;do{this.InitEdge2(p,i),p=p.Next,A&&p.Curr.Y!==c.Curr.Y&&(A=!1)}while(p!==c);if(A){if(n)return!1;for(p.Prev.OutIdx=t.ClipperBase.Skip,(u=new t.LocalMinima).Next=null,u.Y=p.Bot.Y,u.LeftBound=null,u.RightBound=p,u.RightBound.Side=t.EdgeSide.esRight,u.RightBound.WindDelta=0;p.Bot.X!==p.Prev.Top.X&&this.ReverseHorizontal(p),p.Next.OutIdx!==t.ClipperBase.Skip;)p.NextInLML=p.Next,p=p.Next;return this.InsertLocalMinima(u),this.m_edges.push(o),!0}this.m_edges.push(o);var g=null;for(t.IntPoint.op_Equality(p.Prev.Bot,p.Prev.Top)&&(p=p.Next);(p=this.FindNextLocMin(p))!==g;){var u;null===g&&(g=p),(u=new t.LocalMinima).Next=null,u.Y=p.Bot.Y,p.Dx<p.Prev.Dx?(u.LeftBound=p.Prev,u.RightBound=p,l=!1):(u.LeftBound=p,u.RightBound=p.Prev,l=!0),u.LeftBound.Side=t.EdgeSide.esLeft,u.RightBound.Side=t.EdgeSide.esRight,n?u.LeftBound.Next===u.RightBound?u.LeftBound.WindDelta=-1:u.LeftBound.WindDelta=1:u.LeftBound.WindDelta=0,u.RightBound.WindDelta=-u.LeftBound.WindDelta,(p=this.ProcessBound(u.LeftBound,l)).OutIdx===t.ClipperBase.Skip&&(p=this.ProcessBound(p,l));var d=this.ProcessBound(u.RightBound,!l);d.OutIdx===t.ClipperBase.Skip&&(d=this.ProcessBound(d,!l)),u.LeftBound.OutIdx===t.ClipperBase.Skip?u.LeftBound=null:u.RightBound.OutIdx===t.ClipperBase.Skip&&(u.RightBound=null),this.InsertLocalMinima(u),l||(p=d)}return!0},t.ClipperBase.prototype.AddPaths=function(e,t,i){for(var n=!1,r=0,o=e.length;r<o;++r)this.AddPath(e[r],t,i)&&(n=!0);return n},t.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(e,i,n){return!(t.IntPoint.op_Equality(e,n)||t.IntPoint.op_Equality(e,i)||t.IntPoint.op_Equality(n,i))&&(e.X!==n.X?i.X>e.X==i.X<n.X:i.Y>e.Y==i.Y<n.Y)},t.ClipperBase.prototype.RemoveEdge=function(e){e.Prev.Next=e.Next,e.Next.Prev=e.Prev;var t=e.Next;return e.Prev=null,t},t.ClipperBase.prototype.SetDx=function(e){e.Delta.X=e.Top.X-e.Bot.X,e.Delta.Y=e.Top.Y-e.Bot.Y,0===e.Delta.Y?e.Dx=t.ClipperBase.horizontal:e.Dx=e.Delta.X/e.Delta.Y},t.ClipperBase.prototype.InsertLocalMinima=function(e){if(null===this.m_MinimaList)this.m_MinimaList=e;else if(e.Y>=this.m_MinimaList.Y)e.Next=this.m_MinimaList,this.m_MinimaList=e;else{for(var t=this.m_MinimaList;null!==t.Next&&e.Y<t.Next.Y;)t=t.Next;e.Next=t.Next,t.Next=e}},t.ClipperBase.prototype.PopLocalMinima=function(e,t){return t.v=this.m_CurrentLM,null!==this.m_CurrentLM&&this.m_CurrentLM.Y===e&&(this.m_CurrentLM=this.m_CurrentLM.Next,!0)},t.ClipperBase.prototype.ReverseHorizontal=function(e){var i=e.Top.X;e.Top.X=e.Bot.X,e.Bot.X=i,t.use_xyz&&(i=e.Top.Z,e.Top.Z=e.Bot.Z,e.Bot.Z=i)},t.ClipperBase.prototype.Reset=function(){if(this.m_CurrentLM=this.m_MinimaList,null!==this.m_CurrentLM){this.m_Scanbeam=null;for(var e=this.m_MinimaList;null!==e;){this.InsertScanbeam(e.Y);var i=e.LeftBound;null!==i&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),null!==(i=e.RightBound)&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),e=e.Next}this.m_ActiveEdges=null}},t.ClipperBase.prototype.InsertScanbeam=function(e){if(null===this.m_Scanbeam)this.m_Scanbeam=new t.Scanbeam,this.m_Scanbeam.Next=null,this.m_Scanbeam.Y=e;else if(e>this.m_Scanbeam.Y){var i=new t.Scanbeam;i.Y=e,i.Next=this.m_Scanbeam,this.m_Scanbeam=i}else{for(var n=this.m_Scanbeam;null!==n.Next&&e<=n.Next.Y;)n=n.Next;if(e===n.Y)return;var r=new t.Scanbeam;r.Y=e,r.Next=n.Next,n.Next=r}},t.ClipperBase.prototype.PopScanbeam=function(e){return null===this.m_Scanbeam?(e.v=0,!1):(e.v=this.m_Scanbeam.Y,this.m_Scanbeam=this.m_Scanbeam.Next,!0)},t.ClipperBase.prototype.LocalMinimaPending=function(){return null!==this.m_CurrentLM},t.ClipperBase.prototype.CreateOutRec=function(){var e=new t.OutRec;return e.Idx=t.ClipperBase.Unassigned,e.IsHole=!1,e.IsOpen=!1,e.FirstLeft=null,e.Pts=null,e.BottomPt=null,e.PolyNode=null,this.m_PolyOuts.push(e),e.Idx=this.m_PolyOuts.length-1,e},t.ClipperBase.prototype.DisposeOutRec=function(e){var t=this.m_PolyOuts[e];t.Pts=null,t=null,this.m_PolyOuts[e]=null},t.ClipperBase.prototype.UpdateEdgeIntoAEL=function(e){null===e.NextInLML&&t.Error("UpdateEdgeIntoAEL: invalid call");var i=e.PrevInAEL,n=e.NextInAEL;return e.NextInLML.OutIdx=e.OutIdx,null!==i?i.NextInAEL=e.NextInLML:this.m_ActiveEdges=e.NextInLML,null!==n&&(n.PrevInAEL=e.NextInLML),e.NextInLML.Side=e.Side,e.NextInLML.WindDelta=e.WindDelta,e.NextInLML.WindCnt=e.WindCnt,e.NextInLML.WindCnt2=e.WindCnt2,(e=e.NextInLML).Curr.X=e.Bot.X,e.Curr.Y=e.Bot.Y,e.PrevInAEL=i,e.NextInAEL=n,t.ClipperBase.IsHorizontal(e)||this.InsertScanbeam(e.Top.Y),e},t.ClipperBase.prototype.SwapPositionsInAEL=function(e,t){if(e.NextInAEL!==e.PrevInAEL&&t.NextInAEL!==t.PrevInAEL){if(e.NextInAEL===t){var i=t.NextInAEL;null!==i&&(i.PrevInAEL=e);var n=e.PrevInAEL;null!==n&&(n.NextInAEL=t),t.PrevInAEL=n,t.NextInAEL=e,e.PrevInAEL=t,e.NextInAEL=i}else if(t.NextInAEL===e){var r=e.NextInAEL;null!==r&&(r.PrevInAEL=t);var o=t.PrevInAEL;null!==o&&(o.NextInAEL=e),e.PrevInAEL=o,e.NextInAEL=t,t.PrevInAEL=e,t.NextInAEL=r}else{var s=e.NextInAEL,A=e.PrevInAEL;e.NextInAEL=t.NextInAEL,null!==e.NextInAEL&&(e.NextInAEL.PrevInAEL=e),e.PrevInAEL=t.PrevInAEL,null!==e.PrevInAEL&&(e.PrevInAEL.NextInAEL=e),t.NextInAEL=s,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=t),t.PrevInAEL=A,null!==t.PrevInAEL&&(t.PrevInAEL.NextInAEL=t)}null===e.PrevInAEL?this.m_ActiveEdges=e:null===t.PrevInAEL&&(this.m_ActiveEdges=t)}},t.ClipperBase.prototype.DeleteFromAEL=function(e){var t=e.PrevInAEL,i=e.NextInAEL;null===t&&null===i&&e!==this.m_ActiveEdges||(null!==t?t.NextInAEL=i:this.m_ActiveEdges=i,null!==i&&(i.PrevInAEL=t),e.NextInAEL=null,e.PrevInAEL=null)},t.Clipper=function(e){void 0===e&&(e=0),this.m_PolyOuts=null,this.m_ClipType=t.ClipType.ctIntersection,this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=null,this.m_IntersectNodeComparer=null,this.m_ExecuteLocked=!1,this.m_ClipFillType=t.PolyFillType.pftEvenOdd,this.m_SubjFillType=t.PolyFillType.pftEvenOdd,this.m_Joins=null,this.m_GhostJoins=null,this.m_UsingPolyTree=!1,this.ReverseSolution=!1,this.StrictlySimple=!1,t.ClipperBase.call(this),this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=new Array,this.m_IntersectNodeComparer=t.MyIntersectNodeSort.Compare,this.m_ExecuteLocked=!1,this.m_UsingPolyTree=!1,this.m_PolyOuts=new Array,this.m_Joins=new Array,this.m_GhostJoins=new Array,this.ReverseSolution=!!(1&e),this.StrictlySimple=!!(2&e),this.PreserveCollinear=!!(4&e),t.use_xyz&&(this.ZFillFunction=null)},t.Clipper.ioReverseSolution=1,t.Clipper.ioStrictlySimple=2,t.Clipper.ioPreserveCollinear=4,t.Clipper.prototype.Clear=function(){0!==this.m_edges.length&&(this.DisposeAllPolyPts(),t.ClipperBase.prototype.Clear.call(this))},t.Clipper.prototype.InsertMaxima=function(e){var i=new t.Maxima;if(i.X=e,null===this.m_Maxima)this.m_Maxima=i,this.m_Maxima.Next=null,this.m_Maxima.Prev=null;else if(e<this.m_Maxima.X)i.Next=this.m_Maxima,i.Prev=null,this.m_Maxima=i;else{for(var n=this.m_Maxima;null!==n.Next&&e>=n.Next.X;)n=n.Next;if(e===n.X)return;i.Next=n.Next,i.Prev=n,null!==n.Next&&(n.Next.Prev=i),n.Next=i}},t.Clipper.prototype.Execute=function(){var e=arguments,i=e.length,n=e[1]instanceof t.PolyTree;if(4===i&&!n){var r=e[0],o=e[1],s=e[2],A=e[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&&t.Error("Error: PolyTree struct is needed for open path clipping."),this.m_ExecuteLocked=!0,t.Clear(o),this.m_SubjFillType=s,this.m_ClipFillType=A,this.m_ClipType=r,this.m_UsingPolyTree=!1;try{(l=this.ExecuteInternal())&&this.BuildResult(o)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}if(4===i&&n){r=e[0];var a=e[1];if(s=e[2],A=e[3],this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0,this.m_SubjFillType=s,this.m_ClipFillType=A,this.m_ClipType=r,this.m_UsingPolyTree=!0;try{var l;(l=this.ExecuteInternal())&&this.BuildResult2(a)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}return 2!==i||n?2===i&&n?(r=e[0],a=e[1],this.Execute(r,a,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd)):void 0:(r=e[0],o=e[1],this.Execute(r,o,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd))},t.Clipper.prototype.FixHoleLinkage=function(e){if(null!==e.FirstLeft&&(e.IsHole===e.FirstLeft.IsHole||null===e.FirstLeft.Pts)){for(var t=e.FirstLeft;null!==t&&(t.IsHole===e.IsHole||null===t.Pts);)t=t.FirstLeft;e.FirstLeft=t}},t.Clipper.prototype.ExecuteInternal=function(){try{this.Reset(),this.m_SortedEdges=null,this.m_Maxima=null;var e,t,i,n={},r={};if(!this.PopScanbeam(n))return!1;for(this.InsertLocalMinimaIntoAEL(n.v);this.PopScanbeam(r)||this.LocalMinimaPending();){if(this.ProcessHorizontals(),this.m_GhostJoins.length=0,!this.ProcessIntersections(r.v))return!1;this.ProcessEdgesAtTopOfScanbeam(r.v),n.v=r.v,this.InsertLocalMinimaIntoAEL(n.v)}for(t=0,i=this.m_PolyOuts.length;t<i;t++)null===(e=this.m_PolyOuts[t]).Pts||e.IsOpen||(e.IsHole^this.ReverseSolution)==this.Area$1(e)>0&&this.ReversePolyPtLinks(e.Pts);for(this.JoinCommonEdges(),t=0,i=this.m_PolyOuts.length;t<i;t++)null!==(e=this.m_PolyOuts[t]).Pts&&(e.IsOpen?this.FixupOutPolyline(e):this.FixupOutPolygon(e));return this.StrictlySimple&&this.DoSimplePolygons(),!0}finally{this.m_Joins.length=0,this.m_GhostJoins.length=0}},t.Clipper.prototype.DisposeAllPolyPts=function(){for(var e=0,i=this.m_PolyOuts.length;e<i;++e)this.DisposeOutRec(e);t.Clear(this.m_PolyOuts)},t.Clipper.prototype.AddJoin=function(e,i,n){var r=new t.Join;r.OutPt1=e,r.OutPt2=i,r.OffPt.X=n.X,r.OffPt.Y=n.Y,t.use_xyz&&(r.OffPt.Z=n.Z),this.m_Joins.push(r)},t.Clipper.prototype.AddGhostJoin=function(e,i){var n=new t.Join;n.OutPt1=e,n.OffPt.X=i.X,n.OffPt.Y=i.Y,t.use_xyz&&(n.OffPt.Z=i.Z),this.m_GhostJoins.push(n)},t.Clipper.prototype.SetZ=function(e,i,n){if(null!==this.ZFillFunction){if(0!==e.Z||null===this.ZFillFunction)return;t.IntPoint.op_Equality(e,i.Bot)?e.Z=i.Bot.Z:t.IntPoint.op_Equality(e,i.Top)?e.Z=i.Top.Z:t.IntPoint.op_Equality(e,n.Bot)?e.Z=n.Bot.Z:t.IntPoint.op_Equality(e,n.Top)?e.Z=n.Top.Z:this.ZFillFunction(i.Bot,i.Top,n.Bot,n.Top,e)}},t.Clipper.prototype.InsertLocalMinimaIntoAEL=function(e){for(var i,n,r={};this.PopLocalMinima(e,r);){i=r.v.LeftBound,n=r.v.RightBound;var o=null;if(null===i?(this.InsertEdgeIntoAEL(n,null),this.SetWindingCount(n),this.IsContributing(n)&&(o=this.AddOutPt(n,n.Bot))):null===n?(this.InsertEdgeIntoAEL(i,null),this.SetWindingCount(i),this.IsContributing(i)&&(o=this.AddOutPt(i,i.Bot)),this.InsertScanbeam(i.Top.Y)):(this.InsertEdgeIntoAEL(i,null),this.InsertEdgeIntoAEL(n,i),this.SetWindingCount(i),n.WindCnt=i.WindCnt,n.WindCnt2=i.WindCnt2,this.IsContributing(i)&&(o=this.AddLocalMinPoly(i,n,i.Bot)),this.InsertScanbeam(i.Top.Y)),null!==n&&(t.ClipperBase.IsHorizontal(n)?(null!==n.NextInLML&&this.InsertScanbeam(n.NextInLML.Top.Y),this.AddEdgeToSEL(n)):this.InsertScanbeam(n.Top.Y)),null!==i&&null!==n){if(null!==o&&t.ClipperBase.IsHorizontal(n)&&this.m_GhostJoins.length>0&&0!==n.WindDelta)for(var s=0,A=this.m_GhostJoins.length;s<A;s++){var a=this.m_GhostJoins[s];this.HorzSegmentsOverlap(a.OutPt1.Pt.X,a.OffPt.X,n.Bot.X,n.Top.X)&&this.AddJoin(a.OutPt1,o,a.OffPt)}if(i.OutIdx>=0&&null!==i.PrevInAEL&&i.PrevInAEL.Curr.X===i.Bot.X&&i.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(i.PrevInAEL.Curr,i.PrevInAEL.Top,i.Curr,i.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==i.PrevInAEL.WindDelta){var l=this.AddOutPt(i.PrevInAEL,i.Bot);this.AddJoin(o,l,i.Top)}if(i.NextInAEL!==n){n.OutIdx>=0&&n.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(n.PrevInAEL.Curr,n.PrevInAEL.Top,n.Curr,n.Top,this.m_UseFullRange)&&0!==n.WindDelta&&0!==n.PrevInAEL.WindDelta&&(l=this.AddOutPt(n.PrevInAEL,n.Bot),this.AddJoin(o,l,n.Top));var c=i.NextInAEL;if(null!==c)for(;c!==n;)this.IntersectEdges(n,c,i.Curr),c=c.NextInAEL}}}},t.Clipper.prototype.InsertEdgeIntoAEL=function(e,t){if(null===this.m_ActiveEdges)e.PrevInAEL=null,e.NextInAEL=null,this.m_ActiveEdges=e;else if(null===t&&this.E2InsertsBeforeE1(this.m_ActiveEdges,e))e.PrevInAEL=null,e.NextInAEL=this.m_ActiveEdges,this.m_ActiveEdges.PrevInAEL=e,this.m_ActiveEdges=e;else{for(null===t&&(t=this.m_ActiveEdges);null!==t.NextInAEL&&!this.E2InsertsBeforeE1(t.NextInAEL,e);)t=t.NextInAEL;e.NextInAEL=t.NextInAEL,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=e),e.PrevInAEL=t,t.NextInAEL=e}},t.Clipper.prototype.E2InsertsBeforeE1=function(e,i){return i.Curr.X===e.Curr.X?i.Top.Y>e.Top.Y?i.Top.X<t.Clipper.TopX(e,i.Top.Y):e.Top.X>t.Clipper.TopX(i,e.Top.Y):i.Curr.X<e.Curr.X},t.Clipper.prototype.IsEvenOddFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType===t.PolyFillType.pftEvenOdd:this.m_ClipFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsEvenOddAltFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_ClipFillType===t.PolyFillType.pftEvenOdd:this.m_SubjFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsContributing=function(e){var i,n;switch(e.PolyTyp===t.PolyType.ptSubject?(i=this.m_SubjFillType,n=this.m_ClipFillType):(i=this.m_ClipFillType,n=this.m_SubjFillType),i){case t.PolyFillType.pftEvenOdd:if(0===e.WindDelta&&1!==e.WindCnt)return!1;break;case t.PolyFillType.pftNonZero:if(1!==Math.abs(e.WindCnt))return!1;break;case t.PolyFillType.pftPositive:if(1!==e.WindCnt)return!1;break;default:if(-1!==e.WindCnt)return!1}switch(this.m_ClipType){case t.ClipType.ctIntersection:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctUnion:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}case t.ClipType.ctDifference:if(e.PolyTyp===t.PolyType.ptSubject)switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}else switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctXor:if(0!==e.WindDelta)return!0;switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}}return!0},t.Clipper.prototype.SetWindingCount=function(e){for(var i=e.PrevInAEL;null!==i&&(i.PolyTyp!==e.PolyTyp||0===i.WindDelta);)i=i.PrevInAEL;if(null===i){var n=e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType:this.m_ClipFillType;0===e.WindDelta?e.WindCnt=n===t.PolyFillType.pftNegative?-1:1:e.WindCnt=e.WindDelta,e.WindCnt2=0,i=this.m_ActiveEdges}else if(0===e.WindDelta&&this.m_ClipType!==t.ClipType.ctUnion)e.WindCnt=1,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;else if(this.IsEvenOddFillType(e)){if(0===e.WindDelta){for(var r=!0,o=i.PrevInAEL;null!==o;)o.PolyTyp===i.PolyTyp&&0!==o.WindDelta&&(r=!r),o=o.PrevInAEL;e.WindCnt=r?0:1}else e.WindCnt=e.WindDelta;e.WindCnt2=i.WindCnt2,i=i.NextInAEL}else i.WindCnt*i.WindDelta<0?Math.abs(i.WindCnt)>1?i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta:e.WindCnt=0===e.WindDelta?1:e.WindDelta:0===e.WindDelta?e.WindCnt=i.WindCnt<0?i.WindCnt-1:i.WindCnt+1:i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;if(this.IsEvenOddAltFillType(e))for(;i!==e;)0!==i.WindDelta&&(e.WindCnt2=0===e.WindCnt2?1:0),i=i.NextInAEL;else for(;i!==e;)e.WindCnt2+=i.WindDelta,i=i.NextInAEL},t.Clipper.prototype.AddEdgeToSEL=function(e){null===this.m_SortedEdges?(this.m_SortedEdges=e,e.PrevInSEL=null,e.NextInSEL=null):(e.NextInSEL=this.m_SortedEdges,e.PrevInSEL=null,this.m_SortedEdges.PrevInSEL=e,this.m_SortedEdges=e)},t.Clipper.prototype.PopEdgeFromSEL=function(e){if(e.v=this.m_SortedEdges,null===e.v)return!1;var t=e.v;return this.m_SortedEdges=e.v.NextInSEL,null!==this.m_SortedEdges&&(this.m_SortedEdges.PrevInSEL=null),t.NextInSEL=null,t.PrevInSEL=null,!0},t.Clipper.prototype.CopyAELToSEL=function(){var e=this.m_ActiveEdges;for(this.m_SortedEdges=e;null!==e;)e.PrevInSEL=e.PrevInAEL,e.NextInSEL=e.NextInAEL,e=e.NextInAEL},t.Clipper.prototype.SwapPositionsInSEL=function(e,t){if(!(null===e.NextInSEL&&null===e.PrevInSEL||null===t.NextInSEL&&null===t.PrevInSEL)){if(e.NextInSEL===t)null!==(i=t.NextInSEL)&&(i.PrevInSEL=e),null!==(n=e.PrevInSEL)&&(n.NextInSEL=t),t.PrevInSEL=n,t.NextInSEL=e,e.PrevInSEL=t,e.NextInSEL=i;else if(t.NextInSEL===e)null!==(i=e.NextInSEL)&&(i.PrevInSEL=t),null!==(n=t.PrevInSEL)&&(n.NextInSEL=e),e.PrevInSEL=n,e.NextInSEL=t,t.PrevInSEL=e,t.NextInSEL=i;else{var i=e.NextInSEL,n=e.PrevInSEL;e.NextInSEL=t.NextInSEL,null!==e.NextInSEL&&(e.NextInSEL.PrevInSEL=e),e.PrevInSEL=t.PrevInSEL,null!==e.PrevInSEL&&(e.PrevInSEL.NextInSEL=e),t.NextInSEL=i,null!==t.NextInSEL&&(t.NextInSEL.PrevInSEL=t),t.PrevInSEL=n,null!==t.PrevInSEL&&(t.PrevInSEL.NextInSEL=t)}null===e.PrevInSEL?this.m_SortedEdges=e:null===t.PrevInSEL&&(this.m_SortedEdges=t)}},t.Clipper.prototype.AddLocalMaxPoly=function(e,t,i){this.AddOutPt(e,i),0===t.WindDelta&&this.AddOutPt(t,i),e.OutIdx===t.OutIdx?(e.OutIdx=-1,t.OutIdx=-1):e.OutIdx<t.OutIdx?this.AppendPolygon(e,t):this.AppendPolygon(t,e)},t.Clipper.prototype.AddLocalMinPoly=function(e,i,n){var r,o,s;if(t.ClipperBase.IsHorizontal(i)||e.Dx>i.Dx?(r=this.AddOutPt(e,n),i.OutIdx=e.OutIdx,e.Side=t.EdgeSide.esLeft,i.Side=t.EdgeSide.esRight,s=(o=e).PrevInAEL===i?i.PrevInAEL:o.PrevInAEL):(r=this.AddOutPt(i,n),e.OutIdx=i.OutIdx,e.Side=t.EdgeSide.esRight,i.Side=t.EdgeSide.esLeft,s=(o=i).PrevInAEL===e?e.PrevInAEL:o.PrevInAEL),null!==s&&s.OutIdx>=0&&s.Top.Y<n.Y&&o.Top.Y<n.Y){var A=t.Clipper.TopX(s,n.Y),a=t.Clipper.TopX(o,n.Y);if(A===a&&0!==o.WindDelta&&0!==s.WindDelta&&t.ClipperBase.SlopesEqual5(new t.IntPoint2(A,n.Y),s.Top,new t.IntPoint2(a,n.Y),o.Top,this.m_UseFullRange)){var l=this.AddOutPt(s,n);this.AddJoin(r,l,o.Top)}}return r},t.Clipper.prototype.AddOutPt=function(e,i){if(e.OutIdx<0){(r=this.CreateOutRec()).IsOpen=0===e.WindDelta;var n=new t.OutPt;return r.Pts=n,n.Idx=r.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=n,n.Prev=n,r.IsOpen||this.SetHoleState(e,r),e.OutIdx=r.Idx,n}var r,o=(r=this.m_PolyOuts[e.OutIdx]).Pts,s=e.Side===t.EdgeSide.esLeft;return s&&t.IntPoint.op_Equality(i,o.Pt)?o:!s&&t.IntPoint.op_Equality(i,o.Prev.Pt)?o.Prev:((n=new t.OutPt).Idx=r.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=o,n.Prev=o.Prev,n.Prev.Next=n,o.Prev=n,s&&(r.Pts=n),n)},t.Clipper.prototype.GetLastOutPt=function(e){var i=this.m_PolyOuts[e.OutIdx];return e.Side===t.EdgeSide.esLeft?i.Pts:i.Pts.Prev},t.Clipper.prototype.SwapPoints=function(e,i){var n=new t.IntPoint1(e.Value);e.Value.X=i.Value.X,e.Value.Y=i.Value.Y,t.use_xyz&&(e.Value.Z=i.Value.Z),i.Value.X=n.X,i.Value.Y=n.Y,t.use_xyz&&(i.Value.Z=n.Z)},t.Clipper.prototype.HorzSegmentsOverlap=function(e,t,i,n){var r;return e>t&&(r=e,e=t,t=r),i>n&&(r=i,i=n,n=r),e<n&&i<t},t.Clipper.prototype.SetHoleState=function(e,t){for(var i=e.PrevInAEL,n=null;null!==i;)i.OutIdx>=0&&0!==i.WindDelta&&(null===n?n=i:n.OutIdx===i.OutIdx&&(n=null)),i=i.PrevInAEL;null===n?(t.FirstLeft=null,t.IsHole=!1):(t.FirstLeft=this.m_PolyOuts[n.OutIdx],t.IsHole=!t.FirstLeft.IsHole)},t.Clipper.prototype.GetDx=function(e,i){return e.Y===i.Y?t.ClipperBase.horizontal:(i.X-e.X)/(i.Y-e.Y)},t.Clipper.prototype.FirstIsBottomPt=function(e,i){for(var n=e.Prev;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Prev;var r=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=e.Next;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Next;var o=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=i.Prev;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Prev;var s=Math.abs(this.GetDx(i.Pt,n.Pt));for(n=i.Next;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Next;var A=Math.abs(this.GetDx(i.Pt,n.Pt));return Math.max(r,o)===Math.max(s,A)&&Math.min(r,o)===Math.min(s,A)?this.Area(e)>0:r>=s&&r>=A||o>=s&&o>=A},t.Clipper.prototype.GetBottomPt=function(e){for(var i=null,n=e.Next;n!==e;)n.Pt.Y>e.Pt.Y?(e=n,i=null):n.Pt.Y===e.Pt.Y&&n.Pt.X<=e.Pt.X&&(n.Pt.X<e.Pt.X?(i=null,e=n):n.Next!==e&&n.Prev!==e&&(i=n)),n=n.Next;if(null!==i)for(;i!==n;)for(this.FirstIsBottomPt(n,i)||(e=i),i=i.Next;t.IntPoint.op_Inequality(i.Pt,e.Pt);)i=i.Next;return e},t.Clipper.prototype.GetLowermostRec=function(e,t){null===e.BottomPt&&(e.BottomPt=this.GetBottomPt(e.Pts)),null===t.BottomPt&&(t.BottomPt=this.GetBottomPt(t.Pts));var i=e.BottomPt,n=t.BottomPt;return i.Pt.Y>n.Pt.Y?e:i.Pt.Y<n.Pt.Y?t:i.Pt.X<n.Pt.X?e:i.Pt.X>n.Pt.X||i.Next===i?t:n.Next===n||this.FirstIsBottomPt(i,n)?e:t},t.Clipper.prototype.OutRec1RightOfOutRec2=function(e,t){do{if((e=e.FirstLeft)===t)return!0}while(null!==e);return!1},t.Clipper.prototype.GetOutRec=function(e){for(var t=this.m_PolyOuts[e];t!==this.m_PolyOuts[t.Idx];)t=this.m_PolyOuts[t.Idx];return t},t.Clipper.prototype.AppendPolygon=function(e,i){var n,r=this.m_PolyOuts[e.OutIdx],o=this.m_PolyOuts[i.OutIdx];n=this.OutRec1RightOfOutRec2(r,o)?o:this.OutRec1RightOfOutRec2(o,r)?r:this.GetLowermostRec(r,o);var s=r.Pts,A=s.Prev,a=o.Pts,l=a.Prev;e.Side===t.EdgeSide.esLeft?i.Side===t.EdgeSide.esLeft?(this.ReversePolyPtLinks(a),a.Next=s,s.Prev=a,A.Next=l,l.Prev=A,r.Pts=l):(l.Next=s,s.Prev=l,a.Prev=A,A.Next=a,r.Pts=a):i.Side===t.EdgeSide.esRight?(this.ReversePolyPtLinks(a),A.Next=l,l.Prev=A,a.Next=s,s.Prev=a):(A.Next=a,a.Prev=A,s.Prev=l,l.Next=s),r.BottomPt=null,n===o&&(o.FirstLeft!==r&&(r.FirstLeft=o.FirstLeft),r.IsHole=o.IsHole),o.Pts=null,o.BottomPt=null,o.FirstLeft=r;var c=e.OutIdx,p=i.OutIdx;e.OutIdx=-1,i.OutIdx=-1;for(var h=this.m_ActiveEdges;null!==h;){if(h.OutIdx===p){h.OutIdx=c,h.Side=e.Side;break}h=h.NextInAEL}o.Idx=r.Idx},t.Clipper.prototype.ReversePolyPtLinks=function(e){if(null!==e){var t,i;t=e;do{i=t.Next,t.Next=t.Prev,t.Prev=i,t=i}while(t!==e)}},t.Clipper.SwapSides=function(e,t){var i=e.Side;e.Side=t.Side,t.Side=i},t.Clipper.SwapPolyIndexes=function(e,t){var i=e.OutIdx;e.OutIdx=t.OutIdx,t.OutIdx=i},t.Clipper.prototype.IntersectEdges=function(e,i,n){var r=e.OutIdx>=0,o=i.OutIdx>=0;if(t.use_xyz&&this.SetZ(n,e,i),!t.use_lines||0!==e.WindDelta&&0!==i.WindDelta){if(e.PolyTyp===i.PolyTyp)if(this.IsEvenOddFillType(e)){var s=e.WindCnt;e.WindCnt=i.WindCnt,i.WindCnt=s}else e.WindCnt+i.WindDelta===0?e.WindCnt=-e.WindCnt:e.WindCnt+=i.WindDelta,i.WindCnt-e.WindDelta==0?i.WindCnt=-i.WindCnt:i.WindCnt-=e.WindDelta;else this.IsEvenOddFillType(i)?e.WindCnt2=0===e.WindCnt2?1:0:e.WindCnt2+=i.WindDelta,this.IsEvenOddFillType(e)?i.WindCnt2=0===i.WindCnt2?1:0:i.WindCnt2-=e.WindDelta;var A,a,l,c,p,h;switch(e.PolyTyp===t.PolyType.ptSubject?(A=this.m_SubjFillType,l=this.m_ClipFillType):(A=this.m_ClipFillType,l=this.m_SubjFillType),i.PolyTyp===t.PolyType.ptSubject?(a=this.m_SubjFillType,c=this.m_ClipFillType):(a=this.m_ClipFillType,c=this.m_SubjFillType),A){case t.PolyFillType.pftPositive:p=e.WindCnt;break;case t.PolyFillType.pftNegative:p=-e.WindCnt;break;default:p=Math.abs(e.WindCnt)}switch(a){case t.PolyFillType.pftPositive:h=i.WindCnt;break;case t.PolyFillType.pftNegative:h=-i.WindCnt;break;default:h=Math.abs(i.WindCnt)}if(r&&o)0!==p&&1!==p||0!==h&&1!==h||e.PolyTyp!==i.PolyTyp&&this.m_ClipType!==t.ClipType.ctXor?this.AddLocalMaxPoly(e,i,n):(this.AddOutPt(e,n),this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(r)0!==h&&1!==h||(this.AddOutPt(e,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(o)0!==p&&1!==p||(this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(!(0!==p&&1!==p||0!==h&&1!==h)){var g,u;switch(l){case t.PolyFillType.pftPositive:g=e.WindCnt2;break;case t.PolyFillType.pftNegative:g=-e.WindCnt2;break;default:g=Math.abs(e.WindCnt2)}switch(c){case t.PolyFillType.pftPositive:u=i.WindCnt2;break;case t.PolyFillType.pftNegative:u=-i.WindCnt2;break;default:u=Math.abs(i.WindCnt2)}if(e.PolyTyp!==i.PolyTyp)this.AddLocalMinPoly(e,i,n);else if(1===p&&1===h)switch(this.m_ClipType){case t.ClipType.ctIntersection:g>0&&u>0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctUnion:g<=0&&u<=0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctDifference:(e.PolyTyp===t.PolyType.ptClip&&g>0&&u>0||e.PolyTyp===t.PolyType.ptSubject&&g<=0&&u<=0)&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctXor:this.AddLocalMinPoly(e,i,n)}else t.Clipper.SwapSides(e,i)}}else{if(0===e.WindDelta&&0===i.WindDelta)return;e.PolyTyp===i.PolyTyp&&e.WindDelta!==i.WindDelta&&this.m_ClipType===t.ClipType.ctUnion?0===e.WindDelta?o&&(this.AddOutPt(e,n),r&&(e.OutIdx=-1)):r&&(this.AddOutPt(i,n),o&&(i.OutIdx=-1)):e.PolyTyp!==i.PolyTyp&&(0!==e.WindDelta||1!==Math.abs(i.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==i.WindCnt2?0!==i.WindDelta||1!==Math.abs(e.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==e.WindCnt2||(this.AddOutPt(i,n),o&&(i.OutIdx=-1)):(this.AddOutPt(e,n),r&&(e.OutIdx=-1)))}},t.Clipper.prototype.DeleteFromSEL=function(e){var t=e.PrevInSEL,i=e.NextInSEL;null===t&&null===i&&e!==this.m_SortedEdges||(null!==t?t.NextInSEL=i:this.m_SortedEdges=i,null!==i&&(i.PrevInSEL=t),e.NextInSEL=null,e.PrevInSEL=null)},t.Clipper.prototype.ProcessHorizontals=function(){for(var e={};this.PopEdgeFromSEL(e);)this.ProcessHorizontal(e.v)},t.Clipper.prototype.GetHorzDirection=function(e,i){e.Bot.X<e.Top.X?(i.Left=e.Bot.X,i.Right=e.Top.X,i.Dir=t.Direction.dLeftToRight):(i.Left=e.Top.X,i.Right=e.Bot.X,i.Dir=t.Direction.dRightToLeft)},t.Clipper.prototype.ProcessHorizontal=function(e){var i={Dir:null,Left:null,Right:null};this.GetHorzDirection(e,i);for(var n=i.Dir,r=i.Left,o=i.Right,s=0===e.WindDelta,A=e,a=null;null!==A.NextInLML&&t.ClipperBase.IsHorizontal(A.NextInLML);)A=A.NextInLML;null===A.NextInLML&&(a=this.GetMaximaPair(A));var l=this.m_Maxima;if(null!==l)if(n===t.Direction.dLeftToRight){for(;null!==l&&l.X<=e.Bot.X;)l=l.Next;null!==l&&l.X>=A.Top.X&&(l=null)}else{for(;null!==l.Next&&l.Next.X<e.Bot.X;)l=l.Next;l.X<=A.Top.X&&(l=null)}for(var c=null;;){for(var p=e===A,h=this.GetNextInAEL(e,n);null!==h;){if(null!==l)if(n===t.Direction.dLeftToRight)for(;null!==l&&l.X<h.Curr.X;)e.OutIdx>=0&&!s&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Next;else for(;null!==l&&l.X>h.Curr.X;)e.OutIdx>=0&&!s&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Prev;if(n===t.Direction.dLeftToRight&&h.Curr.X>o||n===t.Direction.dRightToLeft&&h.Curr.X<r)break;if(h.Curr.X===e.Top.X&&null!==e.NextInLML&&h.Dx<e.NextInLML.Dx)break;if(e.OutIdx>=0&&!s){t.use_xyz&&(n===t.Direction.dLeftToRight?this.SetZ(h.Curr,e,h):this.SetZ(h.Curr,h,e)),c=this.AddOutPt(e,h.Curr);for(var g=this.m_SortedEdges;null!==g;){if(g.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,g.Bot.X,g.Top.X)){var u=this.GetLastOutPt(g);this.AddJoin(u,c,g.Top)}g=g.NextInSEL}this.AddGhostJoin(c,e.Bot)}if(h===a&&p)return e.OutIdx>=0&&this.AddLocalMaxPoly(e,a,e.Top),this.DeleteFromAEL(e),void this.DeleteFromAEL(a);if(n===t.Direction.dLeftToRight){var d=new t.IntPoint2(h.Curr.X,e.Curr.Y);this.IntersectEdges(e,h,d)}else d=new t.IntPoint2(h.Curr.X,e.Curr.Y),this.IntersectEdges(h,e,d);var f=this.GetNextInAEL(h,n);this.SwapPositionsInAEL(e,h),h=f}if(null===e.NextInLML||!t.ClipperBase.IsHorizontal(e.NextInLML))break;(e=this.UpdateEdgeIntoAEL(e)).OutIdx>=0&&this.AddOutPt(e,e.Bot),i={Dir:n,Left:r,Right:o},this.GetHorzDirection(e,i),n=i.Dir,r=i.Left,o=i.Right}if(e.OutIdx>=0&&null===c){for(c=this.GetLastOutPt(e),g=this.m_SortedEdges;null!==g;)g.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,g.Bot.X,g.Top.X)&&(u=this.GetLastOutPt(g),this.AddJoin(u,c,g.Top)),g=g.NextInSEL;this.AddGhostJoin(c,e.Top)}if(null!==e.NextInLML)if(e.OutIdx>=0){if(c=this.AddOutPt(e,e.Top),0===(e=this.UpdateEdgeIntoAEL(e)).WindDelta)return;var I=e.PrevInAEL;f=e.NextInAEL,null!==I&&I.Curr.X===e.Bot.X&&I.Curr.Y===e.Bot.Y&&0===I.WindDelta&&I.OutIdx>=0&&I.Curr.Y>I.Top.Y&&t.ClipperBase.SlopesEqual3(e,I,this.m_UseFullRange)?(u=this.AddOutPt(I,e.Bot),this.AddJoin(c,u,e.Top)):null!==f&&f.Curr.X===e.Bot.X&&f.Curr.Y===e.Bot.Y&&0!==f.WindDelta&&f.OutIdx>=0&&f.Curr.Y>f.Top.Y&&t.ClipperBase.SlopesEqual3(e,f,this.m_UseFullRange)&&(u=this.AddOutPt(f,e.Bot),this.AddJoin(c,u,e.Top))}else e=this.UpdateEdgeIntoAEL(e);else e.OutIdx>=0&&this.AddOutPt(e,e.Top),this.DeleteFromAEL(e)},t.Clipper.prototype.GetNextInAEL=function(e,i){return i===t.Direction.dLeftToRight?e.NextInAEL:e.PrevInAEL},t.Clipper.prototype.IsMinima=function(e){return null!==e&&e.Prev.NextInLML!==e&&e.Next.NextInLML!==e},t.Clipper.prototype.IsMaxima=function(e,t){return null!==e&&e.Top.Y===t&&null===e.NextInLML},t.Clipper.prototype.IsIntermediate=function(e,t){return e.Top.Y===t&&null!==e.NextInLML},t.Clipper.prototype.GetMaximaPair=function(e){return t.IntPoint.op_Equality(e.Next.Top,e.Top)&&null===e.Next.NextInLML?e.Next:t.IntPoint.op_Equality(e.Prev.Top,e.Top)&&null===e.Prev.NextInLML?e.Prev:null},t.Clipper.prototype.GetMaximaPairEx=function(e){var i=this.GetMaximaPair(e);return null===i||i.OutIdx===t.ClipperBase.Skip||i.NextInAEL===i.PrevInAEL&&!t.ClipperBase.IsHorizontal(i)?null:i},t.Clipper.prototype.ProcessIntersections=function(e){if(null===this.m_ActiveEdges)return!0;try{if(this.BuildIntersectList(e),0===this.m_IntersectList.length)return!0;if(1!==this.m_IntersectList.length&&!this.FixupIntersectionOrder())return!1;this.ProcessIntersectList()}catch(e){this.m_SortedEdges=null,this.m_IntersectList.length=0,t.Error("ProcessIntersections error")}return this.m_SortedEdges=null,!0},t.Clipper.prototype.BuildIntersectList=function(e){if(null!==this.m_ActiveEdges){var i=this.m_ActiveEdges;for(this.m_SortedEdges=i;null!==i;)i.PrevInSEL=i.PrevInAEL,i.NextInSEL=i.NextInAEL,i.Curr.X=t.Clipper.TopX(i,e),i=i.NextInAEL;for(var n=!0;n&&null!==this.m_SortedEdges;){for(n=!1,i=this.m_SortedEdges;null!==i.NextInSEL;){var r=i.NextInSEL,o=new t.IntPoint0;if(i.Curr.X>r.Curr.X){this.IntersectPoint(i,r,o),o.Y<e&&(o=new t.IntPoint2(t.Clipper.TopX(i,e),e));var s=new t.IntersectNode;s.Edge1=i,s.Edge2=r,s.Pt.X=o.X,s.Pt.Y=o.Y,t.use_xyz&&(s.Pt.Z=o.Z),this.m_IntersectList.push(s),this.SwapPositionsInSEL(i,r),n=!0}else i=r}if(null===i.PrevInSEL)break;i.PrevInSEL.NextInSEL=null}this.m_SortedEdges=null}},t.Clipper.prototype.EdgesAdjacent=function(e){return e.Edge1.NextInSEL===e.Edge2||e.Edge1.PrevInSEL===e.Edge2},t.Clipper.IntersectNodeSort=function(e,t){return t.Pt.Y-e.Pt.Y},t.Clipper.prototype.FixupIntersectionOrder=function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer),this.CopyAELToSEL();for(var e=this.m_IntersectList.length,t=0;t<e;t++){if(!this.EdgesAdjacent(this.m_IntersectList[t])){for(var i=t+1;i<e&&!this.EdgesAdjacent(this.m_IntersectList[i]);)i++;if(i===e)return!1;var n=this.m_IntersectList[t];this.m_IntersectList[t]=this.m_IntersectList[i],this.m_IntersectList[i]=n}this.SwapPositionsInSEL(this.m_IntersectList[t].Edge1,this.m_IntersectList[t].Edge2)}return!0},t.Clipper.prototype.ProcessIntersectList=function(){for(var e=0,t=this.m_IntersectList.length;e<t;e++){var i=this.m_IntersectList[e];this.IntersectEdges(i.Edge1,i.Edge2,i.Pt),this.SwapPositionsInAEL(i.Edge1,i.Edge2)}this.m_IntersectList.length=0},o.msie?t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.round(e)}:o.chromium?t.Clipper.Round=function(e){return e<0?-Math.round(Math.abs(e)):Math.round(e)}:o.safari?t.Clipper.Round=function(e){return e<0?(e-=.5)<-2147483648?Math.ceil(e):0|e:(e+=.5)>2147483647?Math.floor(e):0|e}:t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.floor(e+.5)},t.Clipper.TopX=function(e,i){return i===e.Top.Y?e.Top.X:e.Bot.X+t.Clipper.Round(e.Dx*(i-e.Bot.Y))},t.Clipper.prototype.IntersectPoint=function(e,i,n){var r,o;if(n.X=0,n.Y=0,e.Dx===i.Dx)return n.Y=e.Curr.Y,void(n.X=t.Clipper.TopX(e,n.Y));if(0===e.Delta.X)n.X=e.Bot.X,t.ClipperBase.IsHorizontal(i)?n.Y=i.Bot.Y:(o=i.Bot.Y-i.Bot.X/i.Dx,n.Y=t.Clipper.Round(n.X/i.Dx+o));else if(0===i.Delta.X)n.X=i.Bot.X,t.ClipperBase.IsHorizontal(e)?n.Y=e.Bot.Y:(r=e.Bot.Y-e.Bot.X/e.Dx,n.Y=t.Clipper.Round(n.X/e.Dx+r));else{r=e.Bot.X-e.Bot.Y*e.Dx;var s=((o=i.Bot.X-i.Bot.Y*i.Dx)-r)/(e.Dx-i.Dx);n.Y=t.Clipper.Round(s),Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.Round(e.Dx*s+r):n.X=t.Clipper.Round(i.Dx*s+o)}if(n.Y<e.Top.Y||n.Y<i.Top.Y){if(e.Top.Y>i.Top.Y)return n.Y=e.Top.Y,n.X=t.Clipper.TopX(i,e.Top.Y),n.X<e.Top.X;n.Y=i.Top.Y,Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.TopX(e,n.Y):n.X=t.Clipper.TopX(i,n.Y)}n.Y>e.Curr.Y&&(n.Y=e.Curr.Y,Math.abs(e.Dx)>Math.abs(i.Dx)?n.X=t.Clipper.TopX(i,n.Y):n.X=t.Clipper.TopX(e,n.Y))},t.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(e){for(var i=this.m_ActiveEdges;null!==i;){var n=this.IsMaxima(i,e);if(n){var r=this.GetMaximaPairEx(i);n=null===r||!t.ClipperBase.IsHorizontal(r)}if(n){this.StrictlySimple&&this.InsertMaxima(i.Top.X);var o=i.PrevInAEL;this.DoMaxima(i),i=null===o?this.m_ActiveEdges:o.NextInAEL}else{if(this.IsIntermediate(i,e)&&t.ClipperBase.IsHorizontal(i.NextInLML)?((i=this.UpdateEdgeIntoAEL(i)).OutIdx>=0&&this.AddOutPt(i,i.Bot),this.AddEdgeToSEL(i)):(i.Curr.X=t.Clipper.TopX(i,e),i.Curr.Y=e),t.use_xyz&&(i.Top.Y===e?i.Curr.Z=i.Top.Z:i.Bot.Y===e?i.Curr.Z=i.Bot.Z:i.Curr.Z=0),this.StrictlySimple&&(o=i.PrevInAEL,i.OutIdx>=0&&0!==i.WindDelta&&null!==o&&o.OutIdx>=0&&o.Curr.X===i.Curr.X&&0!==o.WindDelta)){var s=new t.IntPoint1(i.Curr);t.use_xyz&&this.SetZ(s,o,i);var A=this.AddOutPt(o,s),a=this.AddOutPt(i,s);this.AddJoin(A,a,s)}i=i.NextInAEL}}for(this.ProcessHorizontals(),this.m_Maxima=null,i=this.m_ActiveEdges;null!==i;){if(this.IsIntermediate(i,e)){A=null,i.OutIdx>=0&&(A=this.AddOutPt(i,i.Top)),o=(i=this.UpdateEdgeIntoAEL(i)).PrevInAEL;var l=i.NextInAEL;null!==o&&o.Curr.X===i.Bot.X&&o.Curr.Y===i.Bot.Y&&null!==A&&o.OutIdx>=0&&o.Curr.Y===o.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,o.Curr,o.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==o.WindDelta?(a=this.AddOutPt(ePrev2,i.Bot),this.AddJoin(A,a,i.Top)):null!==l&&l.Curr.X===i.Bot.X&&l.Curr.Y===i.Bot.Y&&null!==A&&l.OutIdx>=0&&l.Curr.Y===l.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,l.Curr,l.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==l.WindDelta&&(a=this.AddOutPt(l,i.Bot),this.AddJoin(A,a,i.Top))}i=i.NextInAEL}},t.Clipper.prototype.DoMaxima=function(e){var i=this.GetMaximaPairEx(e);if(null===i)return e.OutIdx>=0&&this.AddOutPt(e,e.Top),void this.DeleteFromAEL(e);for(var n=e.NextInAEL;null!==n&&n!==i;)this.IntersectEdges(e,n,e.Top),this.SwapPositionsInAEL(e,n),n=e.NextInAEL;-1===e.OutIdx&&-1===i.OutIdx?(this.DeleteFromAEL(e),this.DeleteFromAEL(i)):e.OutIdx>=0&&i.OutIdx>=0?(e.OutIdx>=0&&this.AddLocalMaxPoly(e,i,e.Top),this.DeleteFromAEL(e),this.DeleteFromAEL(i)):t.use_lines&&0===e.WindDelta?(e.OutIdx>=0&&(this.AddOutPt(e,e.Top),e.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(e),i.OutIdx>=0&&(this.AddOutPt(i,e.Top),i.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(i)):t.Error("DoMaxima error")},t.Clipper.ReversePaths=function(e){for(var t=0,i=e.length;t<i;t++)e[t].reverse()},t.Clipper.Orientation=function(e){return t.Clipper.Area(e)>=0},t.Clipper.prototype.PointCount=function(e){if(null===e)return 0;var t=0,i=e;do{t++,i=i.Next}while(i!==e);return t},t.Clipper.prototype.BuildResult=function(e){t.Clear(e);for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var r=this.m_PolyOuts[i];if(null!==r.Pts){var o=r.Pts.Prev,s=this.PointCount(o);if(!(s<2)){for(var A=new Array(s),a=0;a<s;a++)A[a]=o.Pt,o=o.Prev;e.push(A)}}}},t.Clipper.prototype.BuildResult2=function(e){e.Clear();for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var r=this.m_PolyOuts[i],o=this.PointCount(r.Pts);if(!(r.IsOpen&&o<2||!r.IsOpen&&o<3)){this.FixHoleLinkage(r);var s=new t.PolyNode;e.m_AllPolys.push(s),r.PolyNode=s,s.m_polygon.length=o;for(var A=r.Pts.Prev,a=0;a<o;a++)s.m_polygon[a]=A.Pt,A=A.Prev}}for(i=0,n=this.m_PolyOuts.length;i<n;i++)null!==(r=this.m_PolyOuts[i]).PolyNode&&(r.IsOpen?(r.PolyNode.IsOpen=!0,e.AddChild(r.PolyNode)):null!==r.FirstLeft&&null!==r.FirstLeft.PolyNode?r.FirstLeft.PolyNode.AddChild(r.PolyNode):e.AddChild(r.PolyNode))},t.Clipper.prototype.FixupOutPolyline=function(e){for(var i=e.Pts,n=i.Prev;i!==n;)if(i=i.Next,t.IntPoint.op_Equality(i.Pt,i.Prev.Pt)){i===n&&(n=i.Prev);var r=i.Prev;r.Next=i.Next,i.Next.Prev=r,i=r}i===i.Prev&&(e.Pts=null)},t.Clipper.prototype.FixupOutPolygon=function(e){var i=null;e.BottomPt=null;for(var n=e.Pts,r=this.PreserveCollinear||this.StrictlySimple;;){if(n.Prev===n||n.Prev===n.Next)return void(e.Pts=null);if(t.IntPoint.op_Equality(n.Pt,n.Next.Pt)||t.IntPoint.op_Equality(n.Pt,n.Prev.Pt)||t.ClipperBase.SlopesEqual4(n.Prev.Pt,n.Pt,n.Next.Pt,this.m_UseFullRange)&&(!r||!this.Pt2IsBetweenPt1AndPt3(n.Prev.Pt,n.Pt,n.Next.Pt)))i=null,n.Prev.Next=n.Next,n.Next.Prev=n.Prev,n=n.Prev;else{if(n===i)break;null===i&&(i=n),n=n.Next}}e.Pts=n},t.Clipper.prototype.DupOutPt=function(e,i){var n=new t.OutPt;return n.Pt.X=e.Pt.X,n.Pt.Y=e.Pt.Y,t.use_xyz&&(n.Pt.Z=e.Pt.Z),n.Idx=e.Idx,i?(n.Next=e.Next,n.Prev=e,e.Next.Prev=n,e.Next=n):(n.Prev=e.Prev,n.Next=e,e.Prev.Next=n,e.Prev=n),n},t.Clipper.prototype.GetOverlap=function(e,t,i,n,r){return e<t?i<n?(r.Left=Math.max(e,i),r.Right=Math.min(t,n)):(r.Left=Math.max(e,n),r.Right=Math.min(t,i)):i<n?(r.Left=Math.max(t,i),r.Right=Math.min(e,n)):(r.Left=Math.max(t,n),r.Right=Math.min(e,i)),r.Left<r.Right},t.Clipper.prototype.JoinHorz=function(e,i,n,r,o,s){var A=e.Pt.X>i.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight,a=n.Pt.X>r.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight;if(A===a)return!1;if(A===t.Direction.dLeftToRight){for(;e.Next.Pt.X<=o.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y===o.Y;)e=e.Next;s&&e.Pt.X!==o.X&&(e=e.Next),i=this.DupOutPt(e,!s),t.IntPoint.op_Inequality(i.Pt,o)&&((e=i).Pt.X=o.X,e.Pt.Y=o.Y,t.use_xyz&&(e.Pt.Z=o.Z),i=this.DupOutPt(e,!s))}else{for(;e.Next.Pt.X>=o.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y===o.Y;)e=e.Next;s||e.Pt.X===o.X||(e=e.Next),i=this.DupOutPt(e,s),t.IntPoint.op_Inequality(i.Pt,o)&&((e=i).Pt.X=o.X,e.Pt.Y=o.Y,t.use_xyz&&(e.Pt.Z=o.Z),i=this.DupOutPt(e,s))}if(a===t.Direction.dLeftToRight){for(;n.Next.Pt.X<=o.X&&n.Next.Pt.X>=n.Pt.X&&n.Next.Pt.Y===o.Y;)n=n.Next;s&&n.Pt.X!==o.X&&(n=n.Next),r=this.DupOutPt(n,!s),t.IntPoint.op_Inequality(r.Pt,o)&&((n=r).Pt.X=o.X,n.Pt.Y=o.Y,t.use_xyz&&(n.Pt.Z=o.Z),r=this.DupOutPt(n,!s))}else{for(;n.Next.Pt.X>=o.X&&n.Next.Pt.X<=n.Pt.X&&n.Next.Pt.Y===o.Y;)n=n.Next;s||n.Pt.X===o.X||(n=n.Next),r=this.DupOutPt(n,s),t.IntPoint.op_Inequality(r.Pt,o)&&((n=r).Pt.X=o.X,n.Pt.Y=o.Y,t.use_xyz&&(n.Pt.Z=o.Z),r=this.DupOutPt(n,s))}return A===t.Direction.dLeftToRight===s?(e.Prev=n,n.Next=e,i.Next=r,r.Prev=i):(e.Next=n,n.Prev=e,i.Prev=r,r.Next=i),!0},t.Clipper.prototype.JoinPoints=function(e,i,n){var r=e.OutPt1,o=new t.OutPt,s=e.OutPt2,A=new t.OutPt,a=e.OutPt1.Pt.Y===e.OffPt.Y;if(a&&t.IntPoint.op_Equality(e.OffPt,e.OutPt1.Pt)&&t.IntPoint.op_Equality(e.OffPt,e.OutPt2.Pt)){if(i!==n)return!1;for(o=e.OutPt1.Next;o!==r&&t.IntPoint.op_Equality(o.Pt,e.OffPt);)o=o.Next;var l=o.Pt.Y>e.OffPt.Y;for(A=e.OutPt2.Next;A!==s&&t.IntPoint.op_Equality(A.Pt,e.OffPt);)A=A.Next;return l!==A.Pt.Y>e.OffPt.Y&&(l?(o=this.DupOutPt(r,!1),A=this.DupOutPt(s,!0),r.Prev=s,s.Next=r,o.Next=A,A.Prev=o,e.OutPt1=r,e.OutPt2=o,!0):(o=this.DupOutPt(r,!0),A=this.DupOutPt(s,!1),r.Next=s,s.Prev=r,o.Prev=A,A.Next=o,e.OutPt1=r,e.OutPt2=o,!0))}if(a){for(o=r;r.Prev.Pt.Y===r.Pt.Y&&r.Prev!==o&&r.Prev!==s;)r=r.Prev;for(;o.Next.Pt.Y===o.Pt.Y&&o.Next!==r&&o.Next!==s;)o=o.Next;if(o.Next===r||o.Next===s)return!1;for(A=s;s.Prev.Pt.Y===s.Pt.Y&&s.Prev!==A&&s.Prev!==o;)s=s.Prev;for(;A.Next.Pt.Y===A.Pt.Y&&A.Next!==s&&A.Next!==r;)A=A.Next;if(A.Next===s||A.Next===r)return!1;var c={Left:null,Right:null};if(!this.GetOverlap(r.Pt.X,o.Pt.X,s.Pt.X,A.Pt.X,c))return!1;var p,h=c.Left,g=c.Right,u=new t.IntPoint0;return r.Pt.X>=h&&r.Pt.X<=g?(u.X=r.Pt.X,u.Y=r.Pt.Y,t.use_xyz&&(u.Z=r.Pt.Z),p=r.Pt.X>o.Pt.X):s.Pt.X>=h&&s.Pt.X<=g?(u.X=s.Pt.X,u.Y=s.Pt.Y,t.use_xyz&&(u.Z=s.Pt.Z),p=s.Pt.X>A.Pt.X):o.Pt.X>=h&&o.Pt.X<=g?(u.X=o.Pt.X,u.Y=o.Pt.Y,t.use_xyz&&(u.Z=o.Pt.Z),p=o.Pt.X>r.Pt.X):(u.X=A.Pt.X,u.Y=A.Pt.Y,t.use_xyz&&(u.Z=A.Pt.Z),p=A.Pt.X>s.Pt.X),e.OutPt1=r,e.OutPt2=s,this.JoinHorz(r,o,s,A,u,p)}for(o=r.Next;t.IntPoint.op_Equality(o.Pt,r.Pt)&&o!==r;)o=o.Next;var d=o.Pt.Y>r.Pt.Y||!t.ClipperBase.SlopesEqual4(r.Pt,o.Pt,e.OffPt,this.m_UseFullRange);if(d){for(o=r.Prev;t.IntPoint.op_Equality(o.Pt,r.Pt)&&o!==r;)o=o.Prev;if(o.Pt.Y>r.Pt.Y||!t.ClipperBase.SlopesEqual4(r.Pt,o.Pt,e.OffPt,this.m_UseFullRange))return!1}for(A=s.Next;t.IntPoint.op_Equality(A.Pt,s.Pt)&&A!==s;)A=A.Next;var f=A.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,A.Pt,e.OffPt,this.m_UseFullRange);if(f){for(A=s.Prev;t.IntPoint.op_Equality(A.Pt,s.Pt)&&A!==s;)A=A.Prev;if(A.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,A.Pt,e.OffPt,this.m_UseFullRange))return!1}return!(o===r||A===s||o===A||i===n&&d===f||(d?(o=this.DupOutPt(r,!1),A=this.DupOutPt(s,!0),r.Prev=s,s.Next=r,o.Next=A,A.Prev=o,e.OutPt1=r,e.OutPt2=o,0):(o=this.DupOutPt(r,!0),A=this.DupOutPt(s,!1),r.Next=s,s.Prev=r,o.Prev=A,A.Next=o,e.OutPt1=r,e.OutPt2=o,0)))},t.Clipper.GetBounds=function(e){for(var i=0,n=e.length;i<n&&0===e[i].length;)i++;if(i===n)return new t.IntRect(0,0,0,0);var r=new t.IntRect;for(r.left=e[i][0].X,r.right=r.left,r.top=e[i][0].Y,r.bottom=r.top;i<n;i++)for(var o=0,s=e[i].length;o<s;o++)e[i][o].X<r.left?r.left=e[i][o].X:e[i][o].X>r.right&&(r.right=e[i][o].X),e[i][o].Y<r.top?r.top=e[i][o].Y:e[i][o].Y>r.bottom&&(r.bottom=e[i][o].Y);return r},t.Clipper.prototype.GetBounds2=function(e){var i=e,n=new t.IntRect;for(n.left=e.Pt.X,n.right=e.Pt.X,n.top=e.Pt.Y,n.bottom=e.Pt.Y,e=e.Next;e!==i;)e.Pt.X<n.left&&(n.left=e.Pt.X),e.Pt.X>n.right&&(n.right=e.Pt.X),e.Pt.Y<n.top&&(n.top=e.Pt.Y),e.Pt.Y>n.bottom&&(n.bottom=e.Pt.Y),e=e.Next;return n},t.Clipper.PointInPolygon=function(e,t){var i=0,n=t.length;if(n<3)return 0;for(var r=t[0],o=1;o<=n;++o){var s=o===n?t[0]:t[o];if(s.Y===e.Y&&(s.X===e.X||r.Y===e.Y&&s.X>e.X==r.X<e.X))return-1;if(r.Y<e.Y!=s.Y<e.Y)if(r.X>=e.X)if(s.X>e.X)i=1-i;else{if(0==(A=(r.X-e.X)*(s.Y-e.Y)-(s.X-e.X)*(r.Y-e.Y)))return-1;A>0==s.Y>r.Y&&(i=1-i)}else if(s.X>e.X){var A;if(0==(A=(r.X-e.X)*(s.Y-e.Y)-(s.X-e.X)*(r.Y-e.Y)))return-1;A>0==s.Y>r.Y&&(i=1-i)}r=s}return i},t.Clipper.prototype.PointInPolygon=function(e,t){var i=0,n=t,r=e.X,o=e.Y,s=t.Pt.X,A=t.Pt.Y;do{var a=(t=t.Next).Pt.X,l=t.Pt.Y;if(l===o&&(a===r||A===o&&a>r==s<r))return-1;if(A<o!=l<o)if(s>=r)if(a>r)i=1-i;else{if(0==(c=(s-r)*(l-o)-(a-r)*(A-o)))return-1;c>0==l>A&&(i=1-i)}else if(a>r){var c;if(0==(c=(s-r)*(l-o)-(a-r)*(A-o)))return-1;c>0==l>A&&(i=1-i)}s=a,A=l}while(n!==t);return i},t.Clipper.prototype.Poly2ContainsPoly1=function(e,t){var i=e;do{var n=this.PointInPolygon(i.Pt,t);if(n>=0)return n>0;i=i.Next}while(i!==e);return!0},t.Clipper.prototype.FixupFirstLefts1=function(e,i){for(var n,r,o=0,s=this.m_PolyOuts.length;o<s;o++)n=this.m_PolyOuts[o],r=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&r===e&&this.Poly2ContainsPoly1(n.Pts,i.Pts)&&(n.FirstLeft=i)},t.Clipper.prototype.FixupFirstLefts2=function(e,i){for(var n,r,o=i.FirstLeft,s=0,A=this.m_PolyOuts.length;s<A;s++)null!==(n=this.m_PolyOuts[s]).Pts&&n!==i&&n!==e&&((r=t.Clipper.ParseFirstLeft(n.FirstLeft))!==o&&r!==e&&r!==i||(this.Poly2ContainsPoly1(n.Pts,e.Pts)?n.FirstLeft=e:this.Poly2ContainsPoly1(n.Pts,i.Pts)?n.FirstLeft=i:n.FirstLeft!==e&&n.FirstLeft!==i||(n.FirstLeft=o)))},t.Clipper.prototype.FixupFirstLefts3=function(e,i){for(var n,r,o=0,s=this.m_PolyOuts.length;o<s;o++)n=this.m_PolyOuts[o],r=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&r===e&&(n.FirstLeft=i)},t.Clipper.ParseFirstLeft=function(e){for(;null!==e&&null===e.Pts;)e=e.FirstLeft;return e},t.Clipper.prototype.JoinCommonEdges=function(){for(var e=0,t=this.m_Joins.length;e<t;e++){var i,n=this.m_Joins[e],r=this.GetOutRec(n.OutPt1.Idx),o=this.GetOutRec(n.OutPt2.Idx);null!==r.Pts&&null!==o.Pts&&(r.IsOpen||o.IsOpen||(i=r===o?r:this.OutRec1RightOfOutRec2(r,o)?o:this.OutRec1RightOfOutRec2(o,r)?r:this.GetLowermostRec(r,o),this.JoinPoints(n,r,o)&&(r===o?(r.Pts=n.OutPt1,r.BottomPt=null,(o=this.CreateOutRec()).Pts=n.OutPt2,this.UpdateOutPtIdxs(o),this.Poly2ContainsPoly1(o.Pts,r.Pts)?(o.IsHole=!r.IsHole,o.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts2(o,r),(o.IsHole^this.ReverseSolution)==this.Area$1(o)>0&&this.ReversePolyPtLinks(o.Pts)):this.Poly2ContainsPoly1(r.Pts,o.Pts)?(o.IsHole=r.IsHole,r.IsHole=!o.IsHole,o.FirstLeft=r.FirstLeft,r.FirstLeft=o,this.m_UsingPolyTree&&this.FixupFirstLefts2(r,o),(r.IsHole^this.ReverseSolution)==this.Area$1(r)>0&&this.ReversePolyPtLinks(r.Pts)):(o.IsHole=r.IsHole,o.FirstLeft=r.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(r,o))):(o.Pts=null,o.BottomPt=null,o.Idx=r.Idx,r.IsHole=i.IsHole,i===o&&(r.FirstLeft=o.FirstLeft),o.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts3(o,r)))))}},t.Clipper.prototype.UpdateOutPtIdxs=function(e){var t=e.Pts;do{t.Idx=e.Idx,t=t.Prev}while(t!==e.Pts)},t.Clipper.prototype.DoSimplePolygons=function(){for(var e=0;e<this.m_PolyOuts.length;){var i=this.m_PolyOuts[e++],n=i.Pts;if(null!==n&&!i.IsOpen)do{for(var r=n.Next;r!==i.Pts;){if(t.IntPoint.op_Equality(n.Pt,r.Pt)&&r.Next!==n&&r.Prev!==n){var o=n.Prev,s=r.Prev;n.Prev=s,s.Next=n,r.Prev=o,o.Next=r,i.Pts=n;var A=this.CreateOutRec();A.Pts=r,this.UpdateOutPtIdxs(A),this.Poly2ContainsPoly1(A.Pts,i.Pts)?(A.IsHole=!i.IsHole,A.FirstLeft=i,this.m_UsingPolyTree&&this.FixupFirstLefts2(A,i)):this.Poly2ContainsPoly1(i.Pts,A.Pts)?(A.IsHole=i.IsHole,i.IsHole=!A.IsHole,A.FirstLeft=i.FirstLeft,i.FirstLeft=A,this.m_UsingPolyTree&&this.FixupFirstLefts2(i,A)):(A.IsHole=i.IsHole,A.FirstLeft=i.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(i,A)),r=n}r=r.Next}n=n.Next}while(n!==i.Pts)}},t.Clipper.Area=function(e){if(!Array.isArray(e))return 0;var t=e.length;if(t<3)return 0;for(var i=0,n=0,r=t-1;n<t;++n)i+=(e[r].X+e[n].X)*(e[r].Y-e[n].Y),r=n;return.5*-i},t.Clipper.prototype.Area=function(e){var t=e;if(null===e)return 0;var i=0;do{i+=(e.Prev.Pt.X+e.Pt.X)*(e.Prev.Pt.Y-e.Pt.Y),e=e.Next}while(e!==t);return.5*i},t.Clipper.prototype.Area$1=function(e){return this.Area(e.Pts)},t.Clipper.SimplifyPolygon=function(e,i){var n=new Array,r=new t.Clipper(0);return r.StrictlySimple=!0,r.AddPath(e,t.PolyType.ptSubject,!0),r.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.SimplifyPolygons=function(e,i){void 0===i&&(i=t.PolyFillType.pftEvenOdd);var n=new Array,r=new t.Clipper(0);return r.StrictlySimple=!0,r.AddPaths(e,t.PolyType.ptSubject,!0),r.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.DistanceSqrd=function(e,t){var i=e.X-t.X,n=e.Y-t.Y;return i*i+n*n},t.Clipper.DistanceFromLineSqrd=function(e,t,i){var n=t.Y-i.Y,r=i.X-t.X,o=n*t.X+r*t.Y;return(o=n*e.X+r*e.Y-o)*o/(n*n+r*r)},t.Clipper.SlopesNearCollinear=function(e,i,n,r){return Math.abs(e.X-i.X)>Math.abs(e.Y-i.Y)?e.X>i.X==e.X<n.X?t.Clipper.DistanceFromLineSqrd(e,i,n)<r:i.X>e.X==i.X<n.X?t.Clipper.DistanceFromLineSqrd(i,e,n)<r:t.Clipper.DistanceFromLineSqrd(n,e,i)<r:e.Y>i.Y==e.Y<n.Y?t.Clipper.DistanceFromLineSqrd(e,i,n)<r:i.Y>e.Y==i.Y<n.Y?t.Clipper.DistanceFromLineSqrd(i,e,n)<r:t.Clipper.DistanceFromLineSqrd(n,e,i)<r},t.Clipper.PointsAreClose=function(e,t,i){var n=e.X-t.X,r=e.Y-t.Y;return n*n+r*r<=i},t.Clipper.ExcludeOp=function(e){var t=e.Prev;return t.Next=e.Next,e.Next.Prev=t,t.Idx=0,t},t.Clipper.CleanPolygon=function(e,i){void 0===i&&(i=1.415);var n=e.length;if(0===n)return new Array;for(var r=new Array(n),o=0;o<n;++o)r[o]=new t.OutPt;for(o=0;o<n;++o)r[o].Pt=e[o],r[o].Next=r[(o+1)%n],r[o].Next.Prev=r[o],r[o].Idx=0;for(var s=i*i,A=r[0];0===A.Idx&&A.Next!==A.Prev;)t.Clipper.PointsAreClose(A.Pt,A.Prev.Pt,s)?(A=t.Clipper.ExcludeOp(A),n--):t.Clipper.PointsAreClose(A.Prev.Pt,A.Next.Pt,s)?(t.Clipper.ExcludeOp(A.Next),A=t.Clipper.ExcludeOp(A),n-=2):t.Clipper.SlopesNearCollinear(A.Prev.Pt,A.Pt,A.Next.Pt,s)?(A=t.Clipper.ExcludeOp(A),n--):(A.Idx=1,A=A.Next);n<3&&(n=0);var a=new Array(n);for(o=0;o<n;++o)a[o]=new t.IntPoint1(A.Pt),A=A.Next;return r=null,a},t.Clipper.CleanPolygons=function(e,i){for(var n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t.Clipper.CleanPolygon(e[r],i);return n},t.Clipper.Minkowski=function(e,i,n,r){var o=r?1:0,s=e.length,A=i.length,a=new Array;if(n)for(var l=0;l<A;l++){for(var c=new Array(s),p=0,h=e.length,g=e[p];p<h;g=e[++p])c[p]=new t.IntPoint2(i[l].X+g.X,i[l].Y+g.Y);a.push(c)}else for(l=0;l<A;l++){for(c=new Array(s),p=0,h=e.length,g=e[p];p<h;g=e[++p])c[p]=new t.IntPoint2(i[l].X-g.X,i[l].Y-g.Y);a.push(c)}var u=new Array;for(l=0;l<A-1+o;l++)for(p=0;p<s;p++){var d=new Array;d.push(a[l%A][p%s]),d.push(a[(l+1)%A][p%s]),d.push(a[(l+1)%A][(p+1)%s]),d.push(a[l%A][(p+1)%s]),t.Clipper.Orientation(d)||d.reverse(),u.push(d)}return u},t.Clipper.MinkowskiSum=function(e,i,n){if(i[0]instanceof Array){l=i;for(var r=new t.Paths,o=(A=new t.Clipper,0);o<l.length;++o){var s=t.Clipper.Minkowski(e,l[o],!0,n);A.AddPaths(s,t.PolyType.ptSubject,!0),n&&(a=t.Clipper.TranslatePath(l[o],e[0]),A.AddPath(a,t.PolyType.ptClip,!0))}return A.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),r}var A,a=i,l=t.Clipper.Minkowski(e,a,!0,n);return(A=new t.Clipper).AddPaths(l,t.PolyType.ptSubject,!0),A.Execute(t.ClipType.ctUnion,l,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),l},t.Clipper.TranslatePath=function(e,i){for(var n=new t.Path,r=0;r<e.length;r++)n.push(new t.IntPoint2(e[r].X+i.X,e[r].Y+i.Y));return n},t.Clipper.MinkowskiDiff=function(e,i){var n=t.Clipper.Minkowski(e,i,!1,!0),r=new t.Clipper;return r.AddPaths(n,t.PolyType.ptSubject,!0),r.Execute(t.ClipType.ctUnion,n,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),n},t.Clipper.PolyTreeToPaths=function(e){var i=new Array;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntAny,i),i},t.Clipper.AddPolyNodeToPaths=function(e,i,n){var r=!0;switch(i){case t.Clipper.NodeType.ntOpen:return;case t.Clipper.NodeType.ntClosed:r=!e.IsOpen}e.m_polygon.length>0&&r&&n.push(e.m_polygon);for(var o=0,s=e.Childs(),A=s.length,a=s[o];o<A;a=s[++o])t.Clipper.AddPolyNodeToPaths(a,i,n)},t.Clipper.OpenPathsFromPolyTree=function(e){for(var i=new t.Paths,n=0,r=e.ChildCount();n<r;n++)e.Childs()[n].IsOpen&&i.push(e.Childs()[n].m_polygon);return i},t.Clipper.ClosedPathsFromPolyTree=function(e){var i=new t.Paths;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntClosed,i),i},Inherit(t.Clipper,t.ClipperBase),t.Clipper.NodeType={ntAny:0,ntOpen:1,ntClosed:2},t.ClipperOffset=function(e,i){void 0===e&&(e=2),void 0===i&&(i=t.ClipperOffset.def_arc_tolerance),this.m_destPolys=new t.Paths,this.m_srcPoly=new t.Path,this.m_destPoly=new t.Path,this.m_normals=new Array,this.m_delta=0,this.m_sinA=0,this.m_sin=0,this.m_cos=0,this.m_miterLim=0,this.m_StepsPerRad=0,this.m_lowest=new t.IntPoint0,this.m_polyNodes=new t.PolyNode,this.MiterLimit=e,this.ArcTolerance=i,this.m_lowest.X=-1},t.ClipperOffset.two_pi=6.28318530717959,t.ClipperOffset.def_arc_tolerance=.25,t.ClipperOffset.prototype.Clear=function(){t.Clear(this.m_polyNodes.Childs()),this.m_lowest.X=-1},t.ClipperOffset.Round=t.Clipper.Round,t.ClipperOffset.prototype.AddPath=function(e,i,n){var r=e.length-1;if(!(r<0)){var o=new t.PolyNode;if(o.m_jointype=i,o.m_endtype=n,n===t.EndType.etClosedLine||n===t.EndType.etClosedPolygon)for(;r>0&&t.IntPoint.op_Equality(e[0],e[r]);)r--;o.m_polygon.push(e[0]);for(var s=0,A=0,a=1;a<=r;a++)t.IntPoint.op_Inequality(o.m_polygon[s],e[a])&&(s++,o.m_polygon.push(e[a]),(e[a].Y>o.m_polygon[A].Y||e[a].Y===o.m_polygon[A].Y&&e[a].X<o.m_polygon[A].X)&&(A=s));if(!(n===t.EndType.etClosedPolygon&&s<2)&&(this.m_polyNodes.AddChild(o),n===t.EndType.etClosedPolygon))if(this.m_lowest.X<0)this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,A);else{var l=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y];(o.m_polygon[A].Y>l.Y||o.m_polygon[A].Y===l.Y&&o.m_polygon[A].X<l.X)&&(this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,A))}}},t.ClipperOffset.prototype.AddPaths=function(e,t,i){for(var n=0,r=e.length;n<r;n++)this.AddPath(e[n],t,i)},t.ClipperOffset.prototype.FixOrientations=function(){if(this.m_lowest.X>=0&&!t.Clipper.Orientation(this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon))for(var e=0;e<this.m_polyNodes.ChildCount();e++)((i=this.m_polyNodes.Childs()[e]).m_endtype===t.EndType.etClosedPolygon||i.m_endtype===t.EndType.etClosedLine&&t.Clipper.Orientation(i.m_polygon))&&i.m_polygon.reverse();else for(e=0;e<this.m_polyNodes.ChildCount();e++){var i;(i=this.m_polyNodes.Childs()[e]).m_endtype!==t.EndType.etClosedLine||t.Clipper.Orientation(i.m_polygon)||i.m_polygon.reverse()}},t.ClipperOffset.GetUnitNormal=function(e,i){var n=i.X-e.X,r=i.Y-e.Y;if(0===n&&0===r)return new t.DoublePoint2(0,0);var o=1/Math.sqrt(n*n+r*r);return n*=o,r*=o,new t.DoublePoint2(r,-n)},t.ClipperOffset.prototype.DoOffset=function(e){if(this.m_destPolys=new Array,this.m_delta=e,t.ClipperBase.near_zero(e))for(var i=0;i<this.m_polyNodes.ChildCount();i++)(o=this.m_polyNodes.Childs()[i]).m_endtype===t.EndType.etClosedPolygon&&this.m_destPolys.push(o.m_polygon);else{var n;this.MiterLimit>2?this.m_miterLim=2/(this.MiterLimit*this.MiterLimit):this.m_miterLim=.5,n=this.ArcTolerance<=0?t.ClipperOffset.def_arc_tolerance:this.ArcTolerance>Math.abs(e)*t.ClipperOffset.def_arc_tolerance?Math.abs(e)*t.ClipperOffset.def_arc_tolerance:this.ArcTolerance;var r=3.14159265358979/Math.acos(1-n/Math.abs(e));for(this.m_sin=Math.sin(t.ClipperOffset.two_pi/r),this.m_cos=Math.cos(t.ClipperOffset.two_pi/r),this.m_StepsPerRad=r/t.ClipperOffset.two_pi,e<0&&(this.m_sin=-this.m_sin),i=0;i<this.m_polyNodes.ChildCount();i++){var o=this.m_polyNodes.Childs()[i];this.m_srcPoly=o.m_polygon;var s=this.m_srcPoly.length;if(!(0===s||e<=0&&(s<3||o.m_endtype!==t.EndType.etClosedPolygon)))if(this.m_destPoly=new Array,1!==s){for(this.m_normals.length=0,h=0;h<s-1;h++)this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[h],this.m_srcPoly[h+1]));if(o.m_endtype===t.EndType.etClosedLine||o.m_endtype===t.EndType.etClosedPolygon?this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[s-1],this.m_srcPoly[0])):this.m_normals.push(new t.DoublePoint1(this.m_normals[s-2])),o.m_endtype===t.EndType.etClosedPolygon){var A=s-1;for(h=0;h<s;h++)A=this.OffsetPoint(h,A,o.m_jointype);this.m_destPolys.push(this.m_destPoly)}else if(o.m_endtype===t.EndType.etClosedLine){for(A=s-1,h=0;h<s;h++)A=this.OffsetPoint(h,A,o.m_jointype);this.m_destPolys.push(this.m_destPoly),this.m_destPoly=new Array;var a=this.m_normals[s-1];for(h=s-1;h>0;h--)this.m_normals[h]=new t.DoublePoint2(-this.m_normals[h-1].X,-this.m_normals[h-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-a.X,-a.Y),A=0,h=s-1;h>=0;h--)A=this.OffsetPoint(h,A,o.m_jointype);this.m_destPolys.push(this.m_destPoly)}else{var l;for(A=0,h=1;h<s-1;++h)A=this.OffsetPoint(h,A,o.m_jointype);for(o.m_endtype===t.EndType.etOpenButt?(h=s-1,l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[h].X+this.m_normals[h].X*e),t.ClipperOffset.Round(this.m_srcPoly[h].Y+this.m_normals[h].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[h].X-this.m_normals[h].X*e),t.ClipperOffset.Round(this.m_srcPoly[h].Y-this.m_normals[h].Y*e)),this.m_destPoly.push(l)):(h=s-1,A=s-2,this.m_sinA=0,this.m_normals[h]=new t.DoublePoint2(-this.m_normals[h].X,-this.m_normals[h].Y),o.m_endtype===t.EndType.etOpenSquare?this.DoSquare(h,A):this.DoRound(h,A)),h=s-1;h>0;h--)this.m_normals[h]=new t.DoublePoint2(-this.m_normals[h-1].X,-this.m_normals[h-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-this.m_normals[1].X,-this.m_normals[1].Y),h=(A=s-1)-1;h>0;--h)A=this.OffsetPoint(h,A,o.m_jointype);o.m_endtype===t.EndType.etOpenButt?(l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X-this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y-this.m_normals[0].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+this.m_normals[0].Y*e)),this.m_destPoly.push(l)):(A=1,this.m_sinA=0,o.m_endtype===t.EndType.etOpenSquare?this.DoSquare(0,1):this.DoRound(0,1)),this.m_destPolys.push(this.m_destPoly)}}else{if(o.m_jointype===t.JoinType.jtRound)for(var c=1,p=0,h=1;h<=r;h++){this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+p*e)));var g=c;c=c*this.m_cos-this.m_sin*p,p=g*this.m_sin+p*this.m_cos}else{c=-1,p=-1;for(var h=0;h<4;++h)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+p*e))),c<0?c=1:p<0?p=1:c=-1}this.m_destPolys.push(this.m_destPoly)}}}},t.ClipperOffset.prototype.Execute=function(){var e=arguments;if(e[0]instanceof t.PolyTree)if(s=e[1],(o=e[0]).Clear(),this.FixOrientations(),this.DoOffset(s),(r=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),s>0)r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else if(a=t.Clipper.GetBounds(this.m_destPolys),(A=new t.Path).push(new t.IntPoint2(a.left-10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.top-10)),A.push(new t.IntPoint2(a.left-10,a.top-10)),r.AddPath(A,t.PolyType.ptSubject,!0),r.ReverseSolution=!0,r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),1===o.ChildCount()&&o.Childs()[0].ChildCount()>0){var i=o.Childs()[0];o.Childs()[0]=i.Childs()[0],o.Childs()[0].m_Parent=o;for(var n=1;n<i.ChildCount();n++)o.AddChild(i.Childs()[n])}else o.Clear();else{var r,o=e[0],s=e[1];if(t.Clear(o),this.FixOrientations(),this.DoOffset(s),(r=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),s>0)r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else{var A,a=t.Clipper.GetBounds(this.m_destPolys);(A=new t.Path).push(new t.IntPoint2(a.left-10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.bottom+10)),A.push(new t.IntPoint2(a.right+10,a.top-10)),A.push(new t.IntPoint2(a.left-10,a.top-10)),r.AddPath(A,t.PolyType.ptSubject,!0),r.ReverseSolution=!0,r.Execute(t.ClipType.ctUnion,o,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),o.length>0&&o.splice(0,1)}}},t.ClipperOffset.prototype.OffsetPoint=function(e,i,n){if(this.m_sinA=this.m_normals[i].X*this.m_normals[e].Y-this.m_normals[e].X*this.m_normals[i].Y,Math.abs(this.m_sinA*this.m_delta)<1){if(this.m_normals[i].X*this.m_normals[e].X+this.m_normals[e].Y*this.m_normals[i].Y>0)return this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),i}else this.m_sinA>1?this.m_sinA=1:this.m_sinA<-1&&(this.m_sinA=-1);if(this.m_sinA*this.m_delta<0)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),this.m_destPoly.push(new t.IntPoint1(this.m_srcPoly[e])),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)));else switch(n){case t.JoinType.jtMiter:var r=this.m_normals[e].X*this.m_normals[i].X+this.m_normals[e].Y*this.m_normals[i].Y+1;r>=this.m_miterLim?this.DoMiter(e,i,r):this.DoSquare(e,i);break;case t.JoinType.jtSquare:this.DoSquare(e,i);break;case t.JoinType.jtRound:this.DoRound(e,i)}return i=e},t.ClipperOffset.prototype.DoSquare=function(e,i){var n=Math.tan(Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y)/4);this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[i].X-this.m_normals[i].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[i].Y+this.m_normals[i].X*n)))),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[e].X+this.m_normals[e].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[e].Y-this.m_normals[e].X*n))))},t.ClipperOffset.prototype.DoMiter=function(e,i,n){var r=this.m_delta/n;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+(this.m_normals[i].X+this.m_normals[e].X)*r),t.ClipperOffset.Round(this.m_srcPoly[e].Y+(this.m_normals[i].Y+this.m_normals[e].Y)*r)))},t.ClipperOffset.prototype.DoRound=function(e,i){for(var n,r=Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y),o=Math.max(t.Cast_Int32(t.ClipperOffset.Round(this.m_StepsPerRad*Math.abs(r))),1),s=this.m_normals[i].X,A=this.m_normals[i].Y,a=0;a<o;++a)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+s*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+A*this.m_delta))),n=s,s=s*this.m_cos-this.m_sin*A,A=n*this.m_sin+A*this.m_cos;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)))},t.Error=function(e){try{throw new Error(e)}catch(e){alert(e.message)}},t.JS={},t.JS.AreaOfPolygon=function(e,i){return i||(i=1),t.Clipper.Area(e)/(i*i)},t.JS.AreaOfPolygons=function(e,i){i||(i=1);for(var n=0,r=0;r<e.length;r++)n+=t.Clipper.Area(e[r]);return n/(i*i)},t.JS.BoundsOfPath=function(e,i){return t.JS.BoundsOfPaths([e],i)},t.JS.BoundsOfPaths=function(e,i){i||(i=1);var n=t.Clipper.GetBounds(e);return n.left/=i,n.bottom/=i,n.right/=i,n.top/=i,n},t.JS.Clean=function(e,i){if(!(e instanceof Array))return[];var n=e[0]instanceof Array;if(e=t.JS.Clone(e),"number"!=typeof i||null===i)return t.Error("Delta is not a number in Clean()."),e;if(0===e.length||1===e.length&&0===e[0].length||i<0)return e;n||(e=[e]);for(var r,o,s,A,a,l,c,p=e.length,h=[],g=0;g<p;g++)if(0!==(r=(o=e[g]).length))if(r<3)s=o,h.push(s);else{for(s=o,A=i*i,a=o[0],l=1,c=1;c<r;c++)(o[c].X-a.X)*(o[c].X-a.X)+(o[c].Y-a.Y)*(o[c].Y-a.Y)<=A||(s[l]=o[c],a=o[c],l++);a=o[l-1],(o[0].X-a.X)*(o[0].X-a.X)+(o[0].Y-a.Y)*(o[0].Y-a.Y)<=A&&l--,l<r&&s.splice(l,r-l),s.length&&h.push(s)}return!n&&h.length?h=h[0]:n||0!==h.length?n&&0===h.length&&(h=[[]]):h=[],h},t.JS.Clone=function(e){if(!(e instanceof Array))return[];if(0===e.length)return[];if(1===e.length&&0===e[0].length)return[[]];var t=e[0]instanceof Array;t||(e=[e]);var i,n,r,o,s=e.length,A=new Array(s);for(n=0;n<s;n++){for(i=e[n].length,o=new Array(i),r=0;r<i;r++)o[r]={X:e[n][r].X,Y:e[n][r].Y};A[n]=o}return t||(A=A[0]),A},t.JS.Lighten=function(e,i){if(!(e instanceof Array))return[];if("number"!=typeof i||null===i)return t.Error("Tolerance is not a number in Lighten()."),t.JS.Clone(e);if(0===e.length||1===e.length&&0===e[0].length||i<0)return t.JS.Clone(e);var n,r,o,s,A,a,l,c,p,h,g,u,d,f,I,m,b=e[0]instanceof Array;b||(e=[e]);var C=e.length,B=i*i,y=[];for(n=0;n<C;n++)if(0!==(a=(o=e[n]).length)){for(s=0;s<1e6;s++){for(A=[],o[(a=o.length)-1].X!==o[0].X||o[a-1].Y!==o[0].Y?(g=1,o.push({X:o[0].X,Y:o[0].Y}),a=o.length):g=0,h=[],r=0;r<a-2;r++)l=o[r],p=o[r+1],c=o[r+2],I=l.X,m=l.Y,u=c.X-I,d=c.Y-m,0===u&&0===d||((f=((p.X-I)*u+(p.Y-m)*d)/(u*u+d*d))>1?(I=c.X,m=c.Y):f>0&&(I+=u*f,m+=d*f)),(u=p.X-I)*u+(d=p.Y-m)*d<=B&&(h[r+1]=1,r++);for(A.push({X:o[0].X,Y:o[0].Y}),r=1;r<a-1;r++)h[r]||A.push({X:o[r].X,Y:o[r].Y});if(A.push({X:o[a-1].X,Y:o[a-1].Y}),g&&o.pop(),!h.length)break;o=A}A[(a=A.length)-1].X===A[0].X&&A[a-1].Y===A[0].Y&&A.pop(),A.length>2&&y.push(A)}return b||(y=y[0]),void 0===y&&(y=[]),y},t.JS.PerimeterOfPath=function(e,t,i){if(void 0===e)return 0;var n,r,o=Math.sqrt,s=0,A=0,a=0,l=0,c=0,p=e.length;if(p<2)return 0;for(t&&(e[p]=e[0],p++);--p;)A=(n=e[p]).X,a=n.Y,s+=o((A-(l=(r=e[p-1]).X))*(A-l)+(a-(c=r.Y))*(a-c));return t&&e.pop(),s/i},t.JS.PerimeterOfPaths=function(e,i,n){n||(n=1);for(var r=0,o=0;o<e.length;o++)r+=t.JS.PerimeterOfPath(e[o],i,n);return r},t.JS.ScaleDownPath=function(e,t){var i,n;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=n.X/t,n.Y=n.Y/t},t.JS.ScaleDownPaths=function(e,t){var i,n,r;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(r=e[i][n]).X=r.X/t,r.Y=r.Y/t},t.JS.ScaleUpPath=function(e,t){var i,n,r=Math.round;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=r(n.X*t),n.Y=r(n.Y*t)},t.JS.ScaleUpPaths=function(e,t){var i,n,r,o=Math.round;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(r=e[i][n]).X=o(r.X*t),r.Y=o(r.Y*t)},t.ExPolygons=function(){return[]},t.ExPolygon=function(){this.outer=null,this.holes=null},t.JS.AddOuterPolyNodeToExPolygons=function(e,i){var n=new t.ExPolygon;n.outer=e.Contour();var r,o,s,A,a,l,c=e.Childs(),p=c.length;for(n.holes=new Array(p),s=0;s<p;s++)for(r=c[s],n.holes[s]=r.Contour(),A=0,l=(a=r.Childs()).length;A<l;A++)o=a[A],t.JS.AddOuterPolyNodeToExPolygons(o,i);i.push(n)},t.JS.ExPolygonsToPaths=function(e){var i,n,r,o,s=new t.Paths;for(i=0,r=e.length;i<r;i++)for(s.push(e[i].outer),n=0,o=e[i].holes.length;n<o;n++)s.push(e[i].holes[n]);return s},t.JS.PolyTreeToExPolygons=function(e){var i,n,r,o,s=new t.ExPolygons;for(n=0,o=(r=e.Childs()).length;n<o;n++)i=r[n],t.JS.AddOuterPolyNodeToExPolygons(i,s);return s}}();var ze=getDefaultExportFromCjs(He.exports);function alignByMinDist(e,t,i){const n=e.length,r=t.length;if(n<1||r<1)return t.slice();let o=0,s=1/0;for(let A=0;A<r;A++){const a=e[0],l=t[A%r],c=a.x-l.x,p=a.y-l.y,h=e[n-1],g=t[i?Math.min(A+n-1,r-1):(A+n-1)%r],u=h.x-g.x,d=h.y-g.y,f=c*c+p*p+u*u+d*d;f<s&&(s=f,o=A)}return[...t.slice(o),...t.slice(0,o)]}function shapeclip(){const e=1e4;function toclipformat(t){let i=t.map((t=>({X:Math.round(t.x*e),Y:Math.round(t.y*e)})));return ensureOrientation(i)}function fromclipformat(t){return t.map((t=>({x:t.X/e,y:t.Y/e})))}const ensureOrientation=e=>ze.Clipper.Orientation(e)?e:e.slice().reverse();function orientation(e){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const r=e[n],o=e[(n+1)%i];t+=r.X*o.Y-o.X*r.Y}return t>0?1:t<0?-1:0}const _inflate=(e,t,i=!1)=>{const n=new ze.ClipperOffset;n.MiterLimit=4,n.AddPath(e,ze.JoinType.jtMiter,i||2==e.length?ze.EndType.etOpenButt:ze.EndType.etClosedPolygon);const r=new ze.Paths;return n.Execute(r,t),r};function _inflateopen(t,i){const n=new ze.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const r=i*e,o=toclipformat(t);n.AddPath(o,ze.JoinType.jtMiter,ze.EndType.etClosedPolygon);const s=new ze.Paths;n.Execute(s,r);let A=fromclipformat(s[0]);return getshape().frompt(A)}return{offset(t,i){const n=new ze.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const r=Math.abs(i)*e,o=toclipformat(t.pt);n.AddPath(o,ze.JoinType.jtMiter,ze.EndType.etOpenButt);const s=new ze.Paths;n.Execute(s,r);let A=fromclipformat(s[0]);return getshape().frompt(A)},inflate:function inflate(t,i=2,n=!1,r=0){let o=toclipformat(t.pt),s=_inflate(o,i*e);if(!s||!s.length)return getshape().frompt([]);let A=getshape().frompt(fromclipformat(s[0]));if(n){A.orient!=t.orient&&A.reverse();let a=alignByMinDist(t.pt,A.pt,r);if(A.frompt(a),r>0&&t.pt.length>=3){function estendi1(e,t){let i=e.segment(0).ruotata(-Math.PI/2,200,!0),n=e.segment(-2).ruotata(-Math.PI/2,200),r=t.segment(-2).interseca(n),o=t.segment(0).interseca(i);o&&(t.pt[0]=o),r&&(t.pt[t.pt.length-1]=r)}function estendi2(e,t){let i=e.segment(-1),n=t.segment(0),r=i.interseca(n);r&&(t.pt[0]=r),n=t.segment(-2);let o=i.interseca(n);o&&(t.pt[t.pt.length-1]=o)}1==r?estendi1(t,A):estendi2(t,A)}}return A},inflateopen:_inflateopen,inflateclose(e,t){let i=_inflateopen(e.pt,t);i.orient!=e.orient&&i.reverse();let n=alignByMinDist(e.pt,i.pt,0);return i.frompt(n),i},inflatecornici(e,t=2,i,n){let r,o=e.npt;if(2==o){let i=e.segment(0).offset(t);r=getshape().frompt([i.p1,i.p2])}else if(3==o){let i=e.segment(0).offset(t),n=e.segment(1).offset(t);if(i.isparallela(n))r=getshape().frompt([i.p1,n.p2]);else{let e=i.interseca(n);r=getshape().frompt([i.p1,e,n.p2])}}else{let o=new Linea2(e.pt[0],e.pt[e.npt-1]),s=o.len,A=o.perpendicolare(o.p1,s),a=o.perpendicolare(o.p2,s);A.isparallela(e.segment(0))&&(A=o.perpendicolare(o.puntot(.1),s)),a.isparallela(e.segment(e.npt-2))&&(a=o.perpendicolare(o.puntot(.9),s));let l=Math.floor(e.npt/2),{t:c}=A.proiezionet(e.pt[l]),p=2*(c>0?-1:1),h=A.puntot(p),g=a.puntot(p);r=_inflateopen([...e.pt,g,h],t);let u=r.pt.reduce(((e,t,i)=>(t.x-h.x)**2+(t.y-h.y)**2<(r.pt[e].x-h.x)**2+(r.pt[e].y-h.y)**2?i:e),0);r.pt=r.pt.slice(u+2).concat(r.pt.slice(0,u)),r.orient!=e.orient&&r.reverse(),i&&(e.truncatebefore(i),r.truncatebefore(i)),n&&(r.truncateafter(n),e.truncateafter(n))}return r},intersecasplitter(e,t){const i=new ze.Clipper,n=[toclipformat(t.pt)],r=[toclipformat(e.pt)];i.AddPaths(n,ze.PolyType.ptSubject,!0),i.AddPaths(r,ze.PolyType.ptClip,!0);const o=new ze.Paths;let s;if(i.Execute(ze.ClipType.ctIntersection,o,ze.PolyFillType.pftNonZero,ze.PolyFillType.pftNonZero)&&o.length>0){const e=o[0];if(1===orientation(e)){s=getshape().frompt(fromclipformat(e)),s.orient!=t.orient&&s.reverse();for(let e=0;e<t.pt.length;e++){let i=t.pt[e],n=s.pt.findIndex((e=>Math.abs(e.x-i.x)<.01&&Math.abs(e.y-i.y)<.01));if(n>0){n-=e,0!=n&&s.selezionaprimo(n);break}}}}return s},offsetpts(t,i=.01){const n=e*i;let r=_inflate(toclipformat(t),n);if(r&&r.length)return fromclipformat(r[0])},areesplitter(e,t,i=!0){if(!Array.isArray(e)||e.length<3)return;if(!t||0==t.length)return[e];const n=new ze.Paths,r=new ze.Paths;let o=i?_inflate(toclipformat(e),-100):[toclipformat(e)],s=i?t.flatMap((e=>_inflate(toclipformat(e),100))):t.map((e=>toclipformat(e)));for(let e of o)n.push(e);for(let e of s)r.push(e);const A=new ze.Clipper;A.AddPaths(n,ze.PolyType.ptSubject,!0),A.AddPaths(r,ze.PolyType.ptClip,!0);const a=new ze.Paths;if(!A.Execute(ze.ClipType.ctDifference,a,ze.PolyFillType.pftNonZero,ze.PolyFillType.pftNonZero))return;let l=[];for(let e of a)if(i){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}else if(e.length>4&&1==orientation(e)){const t=_inflate(e,-100);if(t.length>0)for(let e of t){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}}else 1==orientation(e)&&l.push(fromclipformat(e));return l},unisci(e,t,i){const n=new ze.Paths,r=new ze.Paths;for(let t of e){let e=[toclipformat(t.pt)];for(let t of e)n.push(t)}if(t&&t.length)for(let e of t){let t=toclipformat(e.pt);r.push(t)}if(i&&i.length)for(let e of i){let t=toclipformat(e.pt),i=_inflate(t,1,!0);for(let e of i)r.push(e)}const o=new ze.Clipper;o.AddPaths(n,ze.PolyType.ptSubject,!0),o.AddPaths(r,ze.PolyType.ptClip,!0);const s=new ze.Paths;if(o.Execute(ze.ClipType.ctDifference,s,ze.PolyFillType.pftNonZero,ze.PolyFillType.pftNonZero)){let e=[],t=[];for(let i of s)if(1==orientation(i)){let t=[i];for(let i of t)e.push({shape:getshape().frompt(fromclipformat(i)),holes:[]})}else t.push(getshape().frompt(fromclipformat(i)));for(let i of t)for(let t of e)if(t.shape.pointinshape(i.pt[0])){t.holes.push(i);break}return e}return[]}}}class Vscene{constructor(e,t,i={}){this.x=e,this.y=t,this.info=i,this.clear()}addrow(e){e||(e={}),e.id=function newid(e){let t=0;for(let i of e)+i.id>t&&(t=+i.id);return t+1}(this.rows);let t=new Vobject(e);return this.rows.push(t),t}clear(){this.curlayer=0,this.rows=[],this.clines=[]}fromjson(e){let t,i;e||(e={info:{}}),this.clear(),this.x=e.x||4e3,this.y=e.y||3e3,this.info=e.info||{},this.curlayer=e.curlayer,e.clines&&(t=e.clines.map((e=>new Linea2(e.p1,e.p2))));let n=this.x,r=this.y;i=[new Linea2(0,0,100,0),new Linea2(n,0,n,100),new Linea2(n,r,n-100,r),new Linea2(0,r,0,r-100)],this.clines=[...i,...t],e.rows&&(this.rows=e.rows.map((e=>new Vobject(e))))}tojson(){let{x:e,y:t,info:i,curlayer:n,xrows:r,xclines:o}=this,s=r.map((e=>e.tojson())),A=o.map((e=>({p1:e.p1,p2:e.p2})));return A=A.slice(4),{x:e,y:t,curlayer:n,rows:s,clines:A}}}class Vobject{constructor(e){e||(e={}),this.fromjson(e)}get lines(){if(this._lines&&this._lines.length)return this._lines;{let{x:e,y:t}=this;return e||(e=100),t||(t=100),[new Linea2(0,0,0,t),new Linea2(e,0,e,t)]}}fromjson(e){let t;this.id=e.id??1,this.layer=e.layer||0,this.hidden=!!e.hidden,this.x=e.x||100,this.y=e.y||100,this.pc=e.pc||{x:0,y:0},e.shape?this.shape=getshape().frompt(e.shape):this.shape=void 0,e.lines&&e.lines.length&&(t=e.lines.map((e=>new Linea2(e.p1,e.p2)))),this._lines=t,this.draw=new Vis2d(`d:${e.id}`),e.draw&&this.draw.fromjson(e.draw),this.info=e.info||{},this.pos=e.pos||{x:0,y:0,rot:0}}tojson(){let{id:e,layer:t,x:i,y:n,pc:r,shape:o,hidden:s,_lines:A,info:a,pos:l}=this;return A=A&&A.length?A.map((e=>({p1:e.p1,p2:e.p2}))):void 0,o=o?o.pt:void 0,{id:e,layer:t,x:i,y:n,pc:r,shape:o,lines:A,hidden:s,info:a,pos:l,draw:this.draw.tojson()}}}class Vis2d{constructor(e){this.name=e,this.clear()}clear(){return this.vec=[],this.gr={},this}tojson(){let e={};for(let t in this.gr)e[t]=this.gr[t].tojson();return{name:this.name,rows:this.vec,groups:e}}fromjson(e){if(!(e&&e.name&&e.rows&&e.groups))throw new Error("wrong data JSON");this.clear(),this.name=e.name,this.vec=e.rows;for(let t in e.groups)this.gr[t]=new Vis2d(t).fromjson(e.groups[t])}creategr(e="grp"){return this.gr[e]||(this.gr[e]=new Vis2d(e)),this.gr[e]}push(e=0,t=0,i={}){"number"==typeof i&&(i={rot:i}),i||(i={}),this.vec.push({type:"push",x:e,y:t,op:i})}pop(){this.vec.push({type:"pop"})}randomcolor(e="100%"){return`hsl(${Math.floor(360*Math.random())}, 50%, 40%,${e})`}addgr(e){let t=e;e?.name&&(t=e.name),this.gr[t]?this.vec.push({type:"group",name:t}):this.vec.push({type:"err",err:`addgroup: ${t} => missing`})}addquota(e,t,i,n,r=0,o="",s=1,A=.25){this.vec.push({type:"quota",x1:e,y1:t,x2:i,y2:n,d:r,text:o,spessore:A,color:"black",scalafont:s})}addqpunto(e,t,i,n,r=0,o="",s=1,A=.25){this.vec.push({type:"qpunto",x1:e,y1:t,x2:i,y2:n,d:r,text:o,spessore:A,color:"black",scalafont:s})}addpoint(e,t=-1,i="red",n=8){return e&&this.vec.push({type:"point",p:e,id:t,color:i,spessore:1*n}),this}addline(e,t=-1,i=void 0,n=1){return e&&this.vec.push({type:"line",l:e,id:t,color:i,spessore:1*n}),this}addrect(e,t=-1,i=void 0,n=1){return e&&this.vec.push({type:"rect",l:e,id:t,color:i,spessore:1*n}),this}addimg(e,t){return e&&this.vec.push({type:"img",l:e,img:t}),this}addrecta(e,t=-1,i=void 0){return e&&this.vec.push({type:"recta",l:e,id:t,color:i,spessore:0}),this}addshape(e,t=void 0,i=1){return e&&this.vec.push({type:"shape",s:e,color:t||this.randomcolor(),spessore:1*i}),this}addshapelin(e,t=void 0,i=1){return e&&this.vec.push({type:"shapelin",s:e,color:t||this.randomcolor(),spessore:1*i}),this}addarea(e,t=void 0){return e&&this.vec.push({type:"area",s:e,color:t||this.randomcolor()}),this}addoffset(e,t){return this.vec.push({type:"offset",x:e||0,y:t||0}),this}}function checkoggetto(e,t,i,n){if("h"==t&&(t="o"),e||(e=[]),"number"==typeof i&&!["a","as"].includes(t))return{cod:"__",macro:"",sps:i};let r=e.find((e=>e.tipo.includes(t)&&e.cod==i&&(e.isshape||n||"a"!=t)));return r||(r=e.find((e=>e.tipo.includes(t)&&(e.isshape||n||"a"!=t)))),r||(r={cod:"__",macro:"",sps:0}),"a"!=t&&"as"!=t||"__"==r.cod||r.color||(r.color=`hsl(${function stringToHue(e){let t=0;for(let i=0;i<e.length;i++)t=31*t+e.charCodeAt(i)>>>0;return Math.floor(.6180339887*t%1*360)}(r.cod)}, 95%, 97%`),r}function getbordi(e,t){let i,n=!1;if(Array.isArray(t)){t.length=4;let r=t[0]||"";i=t.map((t=>checkoggetto(e,"b",t||r))),n=i.every((e=>e.sps===i[0].sps))}else{let r=checkoggetto(e,"b",t);i=[r,r,r,r],n=!0}return{bordi:i,uguali:n,senza:!(i[0].sps||i[1].sps||i[2].sps||i[3].sps),bl:i[0].sps,bt:i[1].sps,br:i[2].sps,bb:i[3].sps}}function elaborapercorso(e,t,i,n,r=0){let o,s,A,a,l,c,p,h,g,u,d,f,I,m,b,C,B=[],y=[];function eseguipezzo(e,t,i,n){let o=e.infoquad(t);if(o&&o.distanza){let s=getshape().frompt(n||[e.p1,e.p2,t.p2,t.p1]),A=s.clone();(o.sx||o.sy)&&A.move(-o.sx||0,-o.sy||0),o.angle&&A.rotate(-o.angle||0);let a={id:++r,type:`b${i}`,info:o};n&&(a.shape=A.pt),y.push({type:`b${i}`,pt:s.pt}),B.push(a)}}r=r||0;let E=e.pt.length,x=E-1;n||(n=[]);let{bordi:w,uguali:P,senza:v}=getbordi(n,t);if(P)if(v||!w[0].sps)o=e.clone();else{let t=w[0].sps;o=shapeclip().inflate(e,-t,!0)}else{let t,i=[],n=[];for(let n=0;n<E;n++){t=0==n?w[0].sps:n==x-1?w[2].sps:n==x?w[3].sps:w[1].sps,"number"!=typeof t&&(t=0);let r=e.segment(n).offset(-t);i.push(r)}for(let e=0;e<E;e++){let t=i[e].interseca(i[(e-1+E)%E]);n.push(t)}o=getshape().frompt(n)}if(!v){A=o.segment(x).interseca(e.segment(0)),a=o.segment(1).interseca(e.segment(0)),l=e.segment(x-1).interseca(o.segment(x-2)),c=e.segment(x-1).interseca(o.segment(x)),p=e.segment(x).interseca(o.segment(0)),h=e.segment(1).interseca(o.segment(0)),g=e.segment(x-2).interseca(o.segment(x-1)),u=e.segment(x).interseca(o.segment(x-1)),b=1,C=x-2,I=o.segment(0),m=o.segment(x-1);for(let t=1;t<x-1;t++){let i=e.segment(t),n=i.interseca(I);n&&i.onsegment(n)&&(b=t,h=n),n=i.interseca(m),n&&i.onsegment(n)&&(C=t,g=n)}b-=1,C=x-2-C;let n=e.pt[0],r=o.pt[0],B=o.pt[x],y=e.pt[x];switch(i[0]){case"v":eseguipezzo(new Linea2(u,p),o.segment(x),3),r=p,B=u;break;case"o":eseguipezzo(e.segment(x),new Linea2(c,A),3),n=A,y=c;break;default:eseguipezzo(e.segment(x),o.segment(x),3)}switch(d=e.pt.slice(1,x),f=o.pt.slice(1,x),i[1]){case"v":eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(r,h),0),eseguipezzo(new Linea2(e.pt[x-1],y),new Linea2(g,B),2),b&&(d=d.slice(b)),C&&(d=d.slice(0,-C)),d[0]=h,d[d.length-1]=g;break;case"o":eseguipezzo(new Linea2(n,a),new Linea2(r,o.pt[1]),0),eseguipezzo(new Linea2(l,y),new Linea2(o.pt[x-1],B),2),f[0]=a,f[f.length-1]=l;break;default:eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(r,o.pt[1]),0),eseguipezzo(new Linea2(e.pt[x-1],y),new Linea2(o.pt[x-1],B),2)}if(s=getshape().frompt(f),d.length<8&&d.length==f.length)for(let e=0;e<d.length-1;e++)eseguipezzo(new Linea2(d[e],d[e+1]),new Linea2(f[e],f[e+1]),1);else{let e=getshape().frompt([...d,...f.reverse()]),i=new Linea2(d[0],d[d.length-1]),n=i.offset(-t[1]);eseguipezzo(i,n,1,e.pt)}}return{countid:r,shape2:o,shapetop:s,bordi:w,dati:B,draws:y}}function creaprofiloesterno(e,t){let i,{x:n,y:r,tipo:o,bordo:s,taglio:A,h1:a,h2:l,l1:c,l2:p,forma:h}=e;n=n<50?50:n,r=r<50?50:r,c=c||0,p=p||0,a=a||0,l=l||0;let g=[0,0];switch(o){case"i":case"d":g.push(c>0&&c<n?c:0,a>0&&a<r?r-a:r),g.push(p>0&&p<n-c?n-p:n,l>0&&l<r&&l!=a?r-l:r);break;case"a":if(h){let e=getshape().fromstr(h);e.alignline({x:c,y:r-a},{x:n-p,y:r-l}),g.push(...e.vec)}else if((a||l)&&a>=0&&a<Math.min(r,n/2)&&l>=0&&l<Math.min(r,n/2)){let e=getshape().fromstr(`a30;${c||0};${r-a};${n/2};${r};${n-p};${r-l}`);g.push(...e.vec)}else g.push(0,r,n,r);break;case"s":c>0&&a>0?g.push(0,r-a,c,r):g.push(0,r),p&&p<n-c&&l>0&&l<r?g.push(n-p,r,n,r-l):g.push(n,r);break;default:g.push(0,r,n,r)}g.push(n,0),e.countid=0,i=getshape().fromvec(g);let{countid:u,shape2:d,shapetop:f,bordi:I,dati:m,draws:b}=elaborapercorso(i,s,A,t,e.countid);return e.countid=u,{shape:i,internalshape:d,shape2:d,shapetop:f,bordi:I,dati:m,draws:b}}const je={x:"normale",s:"smussato",i:"inclinato",a:"arco/sagomato",d:"diagonali"},Je={dd:"diagonale",vv:"verticale",oo:"orizzontale",vo:"verticale+orizzontale",vd:"verticale+diagonale",ov:"orizzontale+verticale",od:"orizzontale+diagonale"},We={d:"dist. positiva","d-":"dist. negativa",p:"perc. positiva","p-":"perc negativa"},Ke={l:"sinistra",c:"centro",r:"destra"};function findareacod(e,t,i){let n=1/0,r="";for(let o of e){let e=(o.x-t)**2+(o.y-i)**2;e<n&&(n=e,r=o.k)}return r}function generatesegments(e,t,i=!1,n=!1){let r=[];if(e?.length>=2){if(n){let t=[];for(let i of e)t.push({a:i.a,b:i.a}),i.a!=i.b&&t.push({a:i.b,b:i.b});e=t}if(e=e.sort(((e,t)=>e.a-t.a)),t?.length){let n=0;for(let o=1;o<e.length;o++){const s=1e-6;if(t.find((t=>t>e[o-1].b+s&&t<e[o].a-s))){if(o-1>n){let t;t=i?{a:e[n].b,b:e[o-1].a}:{a:e[n].a,b:e[o-1].b},r.push(t)}n=o}}n<e.length-1&&(i?r.push({a:e[n].b,b:e[e.length-1].a}):r.push({a:e[n].a,b:e[e.length-1].b}))}else r.push({a:e[0].b,b:e[e.length-1].a})}return r}function makedivisions(e,t,i){delete e.arre;let n=[],r=[],o=[],s=[],{x:A,y:a,oriz:l,vert:c,tipo:p,minvano:h,minvanox:g,minvanoy:u}=e,{bb:d,bt:f,bl:I,br:m}=getbordi(i,e.bordo);g=g||h||50,u=u||h||50;let{dati:b,punti:C}=ordinabase(i,"o",l,a,u,d,f,p),{dati:B,punti:y}=ordinabase(i,"v",c,A,g,I,m),E=t.clone();function adddatilin(e,t,A,a,l,c){if("l"==e)r.push([A.p1,A.p2]),s.push([A.p1.x,A.p1.y,A.p2.x,A.p2.y]);else{let p=[A.p1,A.p2,a.p2,a.p1];r.push(p);let h=getshape().frompt(p);if(E?.pt&&(h.orient!=E.orient&&h.reverse(),h=shapeclip().intersecasplitter(E,h)),h){h.pt.length>=4&&(A.p1=h.pt[0],A.p2=h.pt[1],a.p1=h.pt[h.pt.length-1],a.p2=h.pt[h.pt.length-2]),s.push([A.p1.x+("v"==e?l:0),A.p1.y+("v"!=e?l:0),A.p2.x+("v"==e?l:0),A.p2.y+("v"!=e?l:0)]);let r=A.infoquad(a);if(r&&r.distanza){let s=h.clone(),A=checkoggetto(i,e,t);(r.sx||r.sy)&&s.move(-r.sx||0,-r.sy||0),r.angle&&s.rotate(-r.angle||0);let a={id:c,type:e,cod:t,c2:A,shape:s.pt,info:r};o.push(a),a?.shape&&n.push({type:e,sx:a.info.sx,sy:a.info.sy,rot:a.info.angle,pt:a.shape})}}}}function isinseg(e,t){return!!e.find((e=>e.a<=t&&e.b>=t))}B.forEach(((e,t)=>{e.segs=generatesegments(C,e.cuts,!0),e.segs.forEach(((t,i)=>{let n=new Linea2({x:e.x,y:t.a},{x:e.x,y:t.b}),r=new Linea2({x:e.x+e.sp,y:t.a},{x:e.x+e.sp,y:t.b});adddatilin(e.sp?"v":"l",e.cod,n,r,e.sp/2,e.id)}))}));for(let e of b){let t=[...e.cuts],i=[...y];for(let n of B)i.push({a:n.x,b:n.x+n.sp}),isinseg(n.segs,e.x+e.sp/2)&&t.push(n.x+n.sp/2);e.segs=generatesegments(i,t,!0,!0),e.segs=e.segs.filter((e=>Math.abs(e.a-e.b)>40));for(let t of e.segs){let i=new Linea2({x:t.b,y:e.x+e.sp},{x:t.a,y:e.x+e.sp}),n=new Linea2({x:t.b,y:e.x},{x:t.a,y:e.x});adddatilin(e.sp?"o":"l",e.cod,n,i,e.sp,e.id)}}let x=shapeclip().areesplitter(t.pt,r),w=function getareacodes(e){let t,i,n,r,o=[];for(let s=0;s<=e.vert.length;s++){if(0==s)t="v0",i=0;else{let n=e.vert[s-1];t=`${n.dir}${n.id}`,i=n._v}for(let s=0;s<=e.oriz.length;s++){if(0==s)n="o0",r=0;else{let t=e.oriz[s-1];n=`${t.dir}${t.id}`,r=t._v}o.push({k:t+n,x:i,y:r})}}return o}(e);for(let t of x){let r=getshape().frompt(t),{p1:s,width:A,height:a,isrect:l}=r.dims(),c=findareacod(w,s.x,s.y),p=e.aree[c]||e.area||"",h=checkoggetto(i,"a",p,l),g=r.pt.findIndex((e=>Math.abs(e.x-s.x)<.001&&Math.abs(e.y-s.y)<.001));g>0&&r.selezionaprimo(g),r.pt.length&&(r.move(-s.x,-s.y),1==r.orient&&r.reverse()),o.push({id:c,cod:p,c2:h,type:"a",shape:l?null:r.pt,info:{isrect:l?1:0,sx:s.x,sy:s.y,rot:0,width:A,height:a}}),n.push({type:l?"a":"as",sx:s.x,sy:s.y,dx:A,dy:a,id:c,cod:p,rot:0,pt:r.pt,color:h.color})}return{ff:e,h1:b,ph:C,v1:B,pv:y,draws:n,lines:s,dati:o}}function ordinabase(e,t,i,n,r,o,s,A){let a=[];if(i){for(let r of i){let i=checkoggetto(e,t,r.cod).sps||0,A=0;switch(r.tipo){case"d-":A=n-r.v;break;case"p":A=n*r.v/100;break;case"p-":A=n*(100-r.v)/100;break;default:A=r.v}if(i&&"c"==r.align?A-=i/2:i&&"r"==r.align&&(A-=i),A=Math.round(10*A)/10,r._x0=A,r._x1=A+i,r._v=A+i/2,r._valid=A>0&&A<n,A>o&&A<n-s){let e=[];r.cuts&&r.cuts.length&&r.cuts.forEach((t=>{e.push(t<0?n+t:t)})),a.push({id:r.id,x:A,sp:i,cuts:e,cod:r.cod})}}a.sort(((e,t)=>e.x-t.x))}let l=[],c=o;"a"==A&&(n*=1.3);for(let e=0;e<a.length;e++){let t=a[e];t.x>=c+r&&t.x+t.sp<=n-s-r&&(t.min=c+r,t.max=n-s-r,l.length>0&&(l[l.length-1].max=t.x-r),l.push(t),c=t.x+t.sp)}let p=[];p.push({a:o,b:o});for(let e of l)p.push({a:e.x,b:e.x+e.sp});return p.push({a:n-s,b:n-s}),{dati:l,punti:p}}function check(e){let{x:t,y:i,area:n,bordo:r,gvert:o,goriz:s,priority:A,minvano:a,taglio:l,tipo:c,h1:p,h2:h,l1:g,l2:u,d1:d,x1:f,y1:I,d2:m,x2:b,y2:C,vert:B,oriz:y,aree:E,forma:x,countid:w}=e;return t=t||1e3,t<200&&(t=200),i=i||1e3,i<200&&(i=200),p=p||I||0,h=h||C||0,g=g||d||f||0,u=u||m||b||0,p<0&&p>i-100&&(p=0),h<0&&h>i-100&&(h=0),(u<0||u>t-g)&&(u=0),(g<0||g>t-u)&&(g=0),a=a||50,x&&(c="a"),n=n||"__",r=r||"__",A=A||"v",l=Je[l]?l:"dd",c=je[c]?c:"x",B=B||[],y=y||[],E=E||{},s=s||void 0,o=o||void 0,w=w||1,{x:t,y:i,area:n,bordo:r,gvert:o,goriz:s,priority:A,minvano:a,taglio:l,tipo:c,h1:p,h2:h,l1:g,l2:u,vert:B,oriz:y,aree:E,countid:w}}function addtaglio(e,t,i,n,r,o="c",s=[],A){return A||(console.log("manca id a addtaglio"),A=0),{dir:t,id:A,tipo:We[i]?i:"d",align:Ke[o]?o:"c",v:n,cod:r,cuts:s||[]}}function addoriz(e,t,i,n,r,o){let s=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.goriz||s||"__"),Array.isArray(r)&&(o=r,r="c"),e.oriz||(e.oriz=[]);let A=addtaglio(0,"o",t,i,n,r,o,(e.oriz.length?Math.max(...e.oriz.map((e=>e.id))):0)+1);return e.oriz.push(A),e}var Ve=Object.freeze({__proto__:null,addhoriz:function addhoriz(e,t,i,n,r,o){return addoriz(e,t,i,n,r,o)},addoriz:addoriz,addvert:function addvert(e,t,i,n,r,o){let s=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.gvert||s||"__"),Array.isArray(r)&&(o=r,r="c"),e.vert||(e.vert=[]);let A=addtaglio(0,"v",t,i,n,r,o,(e.vert.length?Math.max(...e.vert.map((e=>e.id))):0)+1);return e.vert.push(A),e},calcoladivisioni:function calcoladivisioni(e,t,i,n){return makedivisions(e,i,n)},check:check,checkoggetto:checkoggetto,creaprofiloesterno:creaprofiloesterno,create:function create(e,t,i,n){n||(n={});let{minvano:r,priority:o,taglio:s,tipo:A,h1:a,h2:l,d1:c,d2:p,l1:h,l2:g,x1:u,x2:d,y1:f,y2:I,gvert:m,goriz:b,forma:C,area:B}=n,y=check({x:e,y:t,area:B,bordo:i,gvert:m,goriz:b,priority:o,minvano:r,taglio:s,tipo:A,h1:a,h2:l,l1:h,l2:g,d1:c,x1:u,y1:f,d2:p,x2:d,y2:I});return y.forma=C,y},elaborapercorso:elaborapercorso,getbordi:getbordi,makedivisions:makedivisions,makeshape:function makeshape(e,t){return creaprofiloesterno(e,t)},priorita:{v:"verticale",h:"orizzontale"},tagli:Je,tipi:je,tipilocks:[{cod:"diml",des:"Larghezza"},{cod:"dima",des:"Altezza"},{cod:"etipo",des:"Modifica Tipo"},{cod:"etaglio",des:"Modifica Taglio"},{cod:"ebordi",des:"Modifica Bordi"},{cod:"esag",des:"Shape"},{cod:"vcrea",des:"Crea Div. Verticale"},{cod:"ocrea",des:"Crea Div. Orizzontale"},{cod:"vmov",des:"Sposta Div. Verticale"},{cod:"omov",des:"Sposta Div. Orizzontale"},{cod:"vedit",des:"Modifica Div. Verticale"},{cod:"oedit",des:"Modifica Div. Orizzontale"},{cod:"emods",des:"Modificatori Orizzontali/Verticali"},{cod:"ecuts",des:"Modifica/Aggiungi Cuts"},{cod:"earee",des:"Modifica Aree"}],tipoalign:Ke,tipocut:We});function joinlinestoshapes(e){let t=[];for(let i of e)for(let e of i.lines){let n=new Linea2(e.p1,e.p2);n.rotate(-i.ang),n.move(i.pos.x,i.pos.z),n.valid=!0,t.push(n)}const i=.1;function samepoint(e,t){return Math.abs(e.x-t.x)+Math.abs(e.y-t.y)<i}for(let e=0;e<t.length;e++){if(!t[e].valid)continue;if(t[e].len<i){t[e].valid=!1;continue}const n=t[e];for(let r=e+1;r<t.length;r++){const e=t[r];if(!e.valid)continue;if(!n.isparallela(e))continue;if(!n.isCollineare(e))continue;n.a1b=e.onsegment(n.p1,i),n.a2b=e.onsegment(n.p2,i),n.b1a=n.onsegment(e.p1,i),n.b2a=n.onsegment(e.p2,i);const{x:o,y:s}=n.direzione,{x:A,y:a}=e.direzione;if(o*A+s*a>0)if(n.b1a&&n.b2a)e.valid=!1;else{if(n.a1b&&n.a2b){n.valid=!1;break}if(n.a1b&&n.b2a){let i=new Linea2(e.p1,n.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}if(n.a2b&&n.b1a){let i=new Linea2(n.p1,e.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}}else{const r=n.proiezionet(n.p1).t,o=n.proiezionet(n.p2).t,s=n.proiezionet(e.p1).t,A=n.proiezionet(e.p2).t,a=Math.min(r,o),l=Math.max(r,o),c=Math.min(s,A),p=Math.max(s,A),h=Math.max(a,c),g=Math.min(l,p);if(g>h+i){if(a<h){let e=new Linea2(n.puntot(a),n.puntot(h));e.valid=!0,t.push(e)}if(l>g){let e=new Linea2(n.puntot(l),n.puntot(g));e.valid=!0,t.push(e)}if(c<h){let e=new Linea2(n.puntot(c),n.puntot(h));e.valid=!0,t.push(e)}if(p>g){let e=new Linea2(n.puntot(p),n.puntot(g));e.valid=!0,t.push(e)}n.valid=!1,e.valid=!1;break}}}}t=t.filter((e=>e.valid)).map((e=>getshape().frompt([e.p1,e.p2])));for(let e=0;e<t.length;e++){let i=t[e],n=!0;for(;n;){n=!1;for(let r=e+1;r<t.length;){let e=t[r];samepoint(i.pt[0],e.pt[0])?(e.pt.reverse(),i.pt.unshift(...e.pt.slice(0,-1)),t.splice(r,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[e.pt.length-1])?(e.pt.reverse(),i.pt.push(...e.pt.slice(1)),t.splice(r,1),n=!0):samepoint(i.pt[0],e.pt[e.pt.length-1])?(i.pt.unshift(...e.pt.slice(0,-1)),t.splice(r,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[0])?(i.pt.push(...e.pt.slice(1)),t.splice(r,1),n=!0):r++}}}return t}async function valutagrafica(e,t,i,n,r){let{getcolonne:o,muCalc:s,muEval:A,tipifree:a}=e.muvalutatore;i||(i={});for(let i of["l","a","p"]){!e.vari.var(i)&&t.dims&&e.vari.add(i,String(t.dims[i].val||100))}let l=new Set;const c=["sl","sa","sp","ul","ua","up","ax","ay","az","scx","scy","scz","scale"];let p,h=!1,g=await A(e,t,t.codice,{leveleval:0,checkheader:e=>{let{variante:i}=e;if(Array.isArray(t.head)){let e=t.head.find((e=>e.cod==i));h=!!e}},grafica:async t=>{let r,o,a,l,p,{id:h,pars:g,parametri:u,macro:d,options:f,vari:I}=t,m=!!(d&&d.head&&d.head.length),b={l:e.vari.var("l"),a:e.vari.var("a"),p:e.vari.var("p")};const C=["l","a","p","#d",...c];for(let t of C){let i=e.vari.dictionary[t];i&&(b[t]=i)}async function _parsepars(t,i){let n,A,c=/^#(d|des|descrizione)\s*=\s*(.*)\s*$/im.exec(t);if(c)n="#d",A=await e.vari.valuta(c[2]);else{let e=await I.parametrokeyval(t);n=e.k,A=e.v}n&&!p[n]&&(p[n]=!0,C.includes(n)?"#d"==n?l=A:("string"==typeof A&&(A=s(A)),["l","a","p"].includes(n)&&e.vari.add(n,String(A)),o[n]=A,a=!0):"string"==typeof A?r.push(`${n}=${A}`):e.vari.add(n,A))}let B;if(r=[],o={},a=!1,l="",p={},n&&n.keys&&n.keys[h]&&(B=n.keys[h].pars,B))for(let t in B){let i=e.vari.dictionary[t];i&&(b[t]=i),await _parsepars(`${t}=${B[t]}`)}if(g&&g.length)for(const e of g)await _parsepars(e);if(u&&u.length)for(const e of u)await _parsepars(e);if(d&&d.head&&d.head.length){let e=d.head.filter((e=>!["g","p"].includes(e.t)));for(const t of e)await _parsepars(t.cod)}let y={iscad:a,isheader:m,name:d.name,des:l,leveleval:f.leveleval};m&&h&&(y.id=h),a&&(o.l?e.vari.add("l",String(o.l)):o.l=s(e.vari.var("l")),o.a?e.vari.add("a",String(o.a)):o.a=s(e.vari.var("a")),o.p?e.vari.add("p",String(o.p)):o.p=s(e.vari.var("p")),y.cadv=o),await d.impostaparametri(u,r,!0,B);let E=i[h];h&&m&&E&&E.pars&&(y.pars=E.pars,f.leveleval++,await d.setparametri(E.pars));let x=e.vari.var("_rootnode");if(e.vari.add("_rootnode","0"),y.rows=await A(e,d,d.codice,f),e.vari.add("_rootnode",x),h&&m&&(y.spars=d.getparametri()),a)for(let t in b)e.vari.dictionary[t]=b[t];return y},parsefnpunto:async e=>{let{dati:t,vari:i,id:n,output:r}=e;t=t.trim();let A=t.indexOf(" "),a=t.indexOf(",");a>0&&A>0&&a<A&&(A=a);let p,h,g={},u={};A>1?(p=t.slice(1,A),h=o(t.slice(A+1))):(p=t.slice(1),h=[]),l.has(p)||l.add(p);for(let e of h){let{k:t,v:n}=await i.parametrokeyval(e);t&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&(g[t]=n||"")}for(let e of["l","a","p"])g[e]||(g[e]=i.var(e));let d=Object.keys(g);for(let e of c)d.includes(e)&&(u[e]=s(g[e]),u[e]&&(g[e]=u[e]));r.push({t:"fn",fn:p,id:n,pars:g,p2:u})}});for(let i of["l","a","p"])if(t.dims&&t.dims[i].val!=parseFloat(e.vari.var(i))){p=!0;break}return(h||p&&"function"==typeof r)&&await r(p,h),{oo:g,vari:e.vari.dump(!0),fnlist:[...l]}}function ismacro(e){return"object"==typeof e&&e?.name&&e.rows}function isfn(e){return"object"==typeof e&&"fn"==e?.t}function getnodebyid(e,t){let i;return t&&t.rows&&function _getnode(t){for(let n of t){if(ismacro(n)){if(n.id==e)return void(i=n);n.rows&&_getnode(n.rows)}if(i)return}}(t.rows),i}function getsubrules(e){let t=[];return t.push({id:"",level:0,name:"home"}),function _xfiltrati(e,i){if(e.rows&&e.rows.length)for(let n of e.rows)ismacro(n)&&(n.id&&n.isheader?(t.push({id:n.id,name:n.name,des:n.des||"",spec:n.pars?1:0,level:i}),_xfiltrati(n,i+1)):_xfiltrati(n,i))}(e,1),t}function getdumpmacro(e){let t=[];return function _dumpnodo(e){if(e.rows&&e.rows.length)for(let i of e.rows)if(ismacro(i)){i.name;let e=[];if(i.iscad&&i.cadv)for(let t in i.cadv){let n=i.cadv[t];"number"==typeof n&&n&&e.push(`${t}=${n}`)}if(i.pars)for(let t in i.pars){let n=i.pars[t];e.push(`${t}=${n}`)}e.length&&t.push(`--\x3e ${i.name} ${e.join(",")}`),_dumpnodo(i),e.length&&t.push("<--")}else isfn(i)?t.push(`FN: ${i.fn} ${JSON.stringify(i.pars)}`):"string"==typeof i&&i.length&&t.push(i)}(e),t.join("\n")}const Ze=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:e.DoubleSide});function getorientate(e,t,i,n){switch(t=t||0,i=i||0,n=n||0,e.trim().toLowerCase()){case"alp":return{x:i,y:t,z:n};case"apl":return{x:i,y:n,z:t};case"pla":return{x:n,y:t,z:i};case"pal":return{x:n,y:i,z:t};case"lpa":return{x:t,y:n,z:i};default:return{x:t,y:i,z:n}}}function parselavs(e,t,i=0,n=0,r=0,o="",s="",A=""){let a=muClComments(o),l=[];for(let o of a){let A=/^([({}):$\w.\\/]+)[\s;,]*(.*)?$/im.exec(o);if(A&&A[1]){let o={name:A[1].trim().toLowerCase(),...getorientate(e,i,n,r),id:t,facce:s};if(A[2]){let e=getcolonne(A[2]);for(let t of e){let e=t.indexOf("=");e>0&&(o[t.slice(0,e).trim()]=t.slice(e+1).trim())}}l.push(o)}}return!l.length&&A&&l.push({name:A,...getorientate(e,i,n,r),id:t,facce:s}),l}function getemitter(t){let{d:i,name:n,x:r,y:o,z:s,lavs:A="",ids:a="",faces:l=null,size:c=5}=t;a=getcolonne(clean(a,!0));const p=new e.Object3D;if(p.position.set(r,o,s),p.userData={emitter:!0,lavs:A,ids:a,faces:l,size:c,name:n},i){const t=new e.SphereGeometry(c||5,8,8),i=new e.MeshBasicMaterial({color:16711680}),n=new e.Mesh(t,i);p.add(n)}return p.layers.set(29),p}function getreceiver(t,i){t.gmats.__istask=1;let{d:n,ori:r="LAP",x:o=0,y:s=0,z:A=0,sx:a=0,sy:l=0,sz:c=0,tipo:p="",start:h="",end:g=""}=i;p=clean(p,!0);const u=new e.Object3D;if(u.position.set(o/2+(a||0),s/2+(l||0),A/2+(c||0)),u.userData={receiver:!0,ori:(r||"").trim().toLowerCase(),x:o,y:s,z:A,tipo:p,start:h,end:g},n){const t=new e.BoxGeometry(o,s,A),i=new e.Mesh(t,Ze);i.position.set(0,0,0),u.add(i)}return u.layers.set(29),u}function calcolatasks(t){const i=new WeakMap,n=new WeakMap;function boxBoxIntersects(e,t,i,n,r){return e.x+t>0&&e.x-t<i&&e.y+t>0&&e.y-t<n&&e.z+t>0&&e.z-t<r}function getFacceToccate(e,t,i,n,r,o){const s=[];function addfaccia(e){o&&!o.includes(e)||s.push(e)}return Math.abs(e.x-0)<t&&addfaccia("s"),Math.abs(e.x-i)<t&&addfaccia("d"),Math.abs(e.y-0)<t&&addfaccia("b"),Math.abs(e.y-n)<t&&addfaccia("a"),Math.abs(e.z-0)<t&&addfaccia("z"),Math.abs(e.z-r)<t&&addfaccia("f"),s.join("")}function getEmitterWorldPosition(t){if(!i.has(t)){const n=new e.Vector3;t.getWorldPosition(n),i.set(t,n)}return i.get(t)}function getReceiverWorldMatrixInverse(e){if(!n.has(e)){const t=e.matrixWorld.clone().invert();n.set(e,t)}return n.get(e)}t.updateMatrixWorld(!0);const r=[],o=[];!function scan(e){e.userData?.receiver&&r.push(e),e.userData?.emitter&&o.push(e),e.children&&e.children.forEach(scan)}(t);let s=[];for(const t of r){const{mat:i,ori:n,x:r,y:A,z:a,start:l,end:c,tipo:p,size:h}=t.userData;let g={id:i,...getorientate(n,r,A,a),tipo:p,ori:n,lavs:[]};l&&g.lavs.push(...parselavs(n,"_start",0,0,0,l,"",""));const u=getReceiverWorldMatrixInverse(t);for(const t of o){if("string"==typeof p&&""!==p){const e=t.userData.ids;if(Array.isArray(e)&&e.length>0&&!e.includes("*")&&!e.includes(p))continue}const i=getEmitterWorldPosition(t).clone().applyMatrix4(u).clone().add(new e.Vector3(r/2,A/2,a/2));if(!boxBoxIntersects(i,t.userData.size??0,r,A,a))continue;const o=getFacceToccate(i,t.userData.soglia??2,r,A,a,t.userData.faces);o&&o.length&&g.lavs.push(...parselavs(n,t.userData.name,i.x,i.y,i.z,t.userData.lavs,o,"nd"))}c&&g.lavs.push(...parselavs(n,"_end",0,0,0,c,"","")),g.lavs.length&&s.push(g)}return s}function getbb(t,i=!1){if(!i&&t.userData.bb)return t.userData._boundingbox;const n=(new e.Box3).setFromObject(t);return t.userData._boundingbox=n,n}function setorigine(t,i=0,n=0,r=0){const o=getbb(t).min,s=new e.Group;return s.add(t),t.position.sub(new e.Vector3(o.x+i,o.y+n,o.z+r)),s}function scalaoggetto(t,i,n={}){const r=getbb(i),o=new e.Vector3;r.getSize(o);const s=r.min,A=["x","y","z","u","v"],a={};for(let e of A){let t=n[e];if(void 0===t)a[e]={s:1};else if("number"==typeof t)a[e]={s:t};else if("object"==typeof t){let i=t.s??1,n="x"===e?o.x:"y"===e?o.y:o.z,r="x"===e?s.x:"y"===e?s.y:s.z;void 0!==t.distperc&&(t.dist=n*t.distperc),void 0!==t.dist&&(i=(n+t.dist)/n);let A=t.p1?t.p1+r:void 0,l=t.p2?t.p2+r:void 0;void 0!==t.p1perc&&(A=r+n*t.p1perc),void 0!==t.p2perc&&(l=r+n*t.p2perc),a[e]={s:i,p1:A,p2:l}}}if(A.every((e=>void 0===a[e].p1||void 0===a[e].p2))){if(1===a.x.s&&1===a.y.s&&1===a.z.s)return i;const t=new e.Group;return t.scale.set(a.x.s,a.y.s,a.z.s),t.add(i),t}const l=hash(`${i.uuid}|${JSON.stringify(a)}`);if(t.meshes[l])return t.meshes[l];const c={};A.forEach((e=>{const{s:t,p1:i,p2:n}=a[e];c[e]=!(1===t&&void 0===i&&void 0===n)}));const p=i.clone(!0);return delete p?.userData._boundingbox,p.traverse((e=>{if(e.isMesh){const t=e.scale.clone();e.geometry=e.geometry.clone();const i=e.geometry.attributes.position,n=e.geometry.attributes.uv,trasf=(e,t)=>{if(!c[t])return e;const{s:i,p1:n,p2:r}=a[t];if(void 0===n||void 0===r)return e*i;const o=r*i-r;if(e<n)return e;if(e>=r)return e+o;return n+(e-n)*((r-n+o)/(r-n))};if(i&&(c.x||c.y||c.z)){const t=i.array;for(let e=0;e<t.length;e+=3)c.x&&(t[e]=trasf(t[e],"x")),c.y&&(t[e+1]=trasf(t[e+1],"y")),c.z&&(t[e+2]=trasf(t[e+2],"z"));i.needsUpdate=!0,e.geometry.computeVertexNormals()}if(n&&(c.u||c.v)){const e=n.array;for(let t=0;t<e.length;t+=2)c.u&&(e[t]=trasf(e[t],"u")),c.v&&(e[t+1]=trasf(e[t+1],"v"));n.needsUpdate=!0}e.scale.set(t.x*a.x.s,t.y*a.y.s,t.z*a.z.s)}})),t.meshes[l]=p,p}function posiziona(t,i={}){let n=new e.Group;if(t){let r=function deepclone(e){if(!e)return null;const t=e.clone();return function checkchildren(e,t){if(e.onBeforeRender&&(t.onBeforeRender=e.onBeforeRender),e.onAfterRender&&(t.onAfterRender=e.onAfterRender),e.userData&&(t.userData={...e.userData}),e.children||e.children.length)for(let i=0;i<e.children.length;i++)checkchildren(e.children[i],t.children[i])}(e,t),t}(t),o=r,{noingombro:s=!1,marker:A="",markerid:a="",marklink:l="",sl:c=0,sa:p=0,sp:h=0,ax:g=0,ay:u=0,az:d=0,ul:f=0,ua:I=0,up:m=0,scale:b=1,scx:C=b,scy:B=b,scz:y=b,emitters:E,emittersname:x,order:w,ignoreTraverse:P}=i;if("number"==typeof w&&r.traverse((e=>{e.isMesh&&(e.renderOrder=w)})),n.position.set(c,p,h),n.rotation.set(g*Ue,u*Ue,d*Ue),(f||I||m)&&(o=new e.Group,o.add(r),o.position.set(f,I,m)),n.scale.set(C,B,y),n.add(o),A&&a&&(n.userData.marker=A,n.userData.markerid=`#mk_${a||""}`,n.userData.marklink=l),s&&(n.userData.noingombro=!0),P&&(n.userData.ignoreTraverse=!0),E&&E.length)for(let e of E)e.name=e.name||x,n.add(getemitter(e))}return n.updateMatrixWorld(!0),n}const $e=e.DoubleSide;let et=new e.LineBasicMaterial({color:16711680,transparent:!1,opacity:1}),tt=new e.LineBasicMaterial({color:11579568,transparent:!1,opacity:1});const it=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:$e}),nt=new e.MeshStandardMaterial({color:8421504,roughness:.5,metalness:.4,side:$e}),rt=new e.MeshStandardMaterial({color:11579568,roughness:.5,metalness:.4,side:$e}),ot=new e.MeshStandardMaterial({color:16711680,roughness:.5,metalness:.4,side:$e}),st=new e.MeshStandardMaterial({color:1982639,roughness:.5,metalness:.4,side:$e}),At=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:$e}),at=new e.MeshStandardMaterial({color:0,roughness:.5,metalness:.4,side:$e}),lt=.001;function groupfromgeometry(t,i,n,r,o,s,A){let a=new e.Group;a.position.set(n,r,o),a.name=s;const l=new e.Mesh(t,i);l.name=s,l.castShadow=!0,l.receiveShadow=!0,l.layers.set(A);const c=new e.EdgesGeometry(t),p=new e.LineSegments(c,et);return p.layers.set(30),a.add(l),a.add(p),a}function edgesfromgeometry(t,i=30){return getlinesgeom(new e.EdgesGeometry(t,40),i)}function getlinesgeom(t,i=30){const n=new e.LineSegments(t,et);return n.layers.set(i),n}function getmesh(t,i,n=1,r=!1){let o=new e.Mesh(t,r?i.clone():i);return o.castShadow=!0,o.receiveShadow=!0,o.layers.set(n),o}function get3dshape(t,i,n){if(!t||t.length<3)return new e.BufferGeometry;const r=[];for(let e=0;e<t.length;e++){const i=t[e],n=t[(e+1)%t.length];r.push(i.x,0,i.y),r.push(n.x,0,n.y)}const o=new e.BufferGeometry;o.setAttribute("position",new e.Float32BufferAttribute(r,3));let s=new e.LineSegments(o,i);return s.layers.set(n),s}function creategroup(t,i={}){let{ignoreTraverse:n}=i,r=new e.Group;return r.name=t||"$$",n&&(r.userData.ignoreTraverse=!0),r}function svuotanodo(e){!function _dispose(e){if(e.children.length){[...e.children].forEach((t=>{_dispose(t),e.remove(t)}))}e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach((e=>e.dispose())):e.material.dispose())}(e)}function deletegroup(e,t){if(!e?.children)return;let i=e.children.find((e=>e.name==t));if(i){for(;i.children.length>0;){const e=i.children[0];i.remove(e)}i.parent&&i.parent.remove(i),i=null}}function randombasemat(){const t=new e.LineBasicMaterial,i=new e.Color;return i.setHSL(Math.random(),.7,.4),t.color=i,t}function getspriteid(t,i=5,n="#000"){const r=document.createElement("canvas"),o=r.getContext("2d");o.font="48px sans-serif";const s=Math.ceil(o.measureText(t).width)+16;r.width=s,r.height=64,o.font="48px sans-serif",o.textBaseline="middle",o.fillStyle="rgba(0,0,0,0)",o.fillRect(0,0,s,64),o.fillStyle=n,o.fillText(t,8,32);const A=new e.CanvasTexture(r);A.needsUpdate=!0,A.minFilter=e.LinearFilter;const a=new e.SpriteMaterial({map:A,transparent:!0}),l=new e.Sprite(a),c=i/20;return l.scale.set(s*c,64*c,1),l}function getline(t,i,n=null){const r=(new e.BufferGeometry).setFromPoints([new e.Vector3(t.p1.x,0,t.p1.y),new e.Vector3(t.p2.x,0,t.p2.y)]);let o=new e.Line(r,n||randombasemat());if(i){let e=getspriteid(i||"",8,"#F00");e.position.set((t.p1.x+t.p2.x)/2,0,(t.p1.y+t.p2.y)/2),o.add(e)}return o}function getpoint(t,i,n=null,r=5){let o;const s=new e.SphereGeometry(r,8,8);if(o=new e.Mesh(s,n||randombasemat()),i){let e=getspriteid(i||"",r);e.position.set(1.2*r,0,1.2*r),o.add(e)}return o.position.set(t.x,0,t.y),o}async function smat(t,i,n={}){n||(n={});let r=hash(i+JSON.stringify(n));return t.smats[r]||(n.glass?t.smats[r]=await async function smatglass(t,i={}){let n=new e.Color("#080808ff");try{n=new e.Color(t)}catch(e){}let{metalness:r=0,roughness:o=.1,ior:s=1.5,envMapIntensity:A=1,transmission:a=1,specularIntensity:l=1,specularColor:c=16777215,opacity:p=1,thickness:h=.2,clearcoat:g=1,clearcoatRoughness:u=.1,dispersion:d=0}=i;return new e.MeshPhysicalMaterial({color:n,metalness:r,roughness:o,ior:s,envMapIntensity:A,transmission:a,specularIntensity:l,specularColor:c,opacity:p,side:e.DoubleSide,transparent:!0,thickness:h,clearcoat:g,clearcoatRoughness:u,dispersion:d})}(t,i):t.smats[r]=await async function smat0(t,i,n={}){let r=i,o="",s=!1;const A={"":{prop:"map",extra:null},h:{},n:{prop:"normalMap",extra:null},a:{prop:"aoMap",extra:"aoMapIntensity"},r:{prop:"roughnessMap",extra:null},t:{prop:"alphaMap",extra:null},m:{prop:"metalnessMap",extra:null},e:{prop:"emissiveMap",extra:["emissive","emissiveIntensity"]}};function getFilesToLoad(e,t){let i=[],n=t.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!n)return{base:t,files:i};let r=n[1],o=!1,s=n[3]||r,a=n[4]||n[5]||"";!a.includes("h")&&e||i.push({suff:"",file:`${s}.webp`,cs:!0});for(let e of a)"t"==e?(o=!0,n[3]&&A[e]&&i.push({suff:e,file:`${s}_${e}.webp`,cs:!1})):"h"!=e&&A[e]&&i.push({suff:e,file:`${s}_${e}.webp`,cs:!!["","e"].includes(e)});return{base:r,files:i,transparent:o}}i.startsWith("#")&&(s=!0,/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})(?=$|[[(])/.test(i)||(i=i.slice(1)));let a=i;const l=i.match(/^(.*)\[([^\]]+)\]$/);l&&(a=l[1],o=l[2]);const c={};o&&o.split(/[,;]/).forEach((e=>{let[t,i]=e.split("=").map((e=>e.trim()));void 0!==i&&(["e"].includes(t)?c[t]=i.startsWith("0x")?parseInt(i):parseFloat(i):isNaN(parseFloat(i))?c[t]=i:c[t]=parseFloat(i))}));let p=n.rot,h=parseFloat(n.s)||1;delete n.s;let g={...n};for(let e in c)if(ct[e])for(let t of ct[e])g[t]=c[e];let u=!!g?.transparent,d=(g.sx??g.s??c.sx??c.s??1)*h,f=(g.sy??g.s??c.sy??c.s??1)*h,I=Number((c.rot??0)+(p??0))*Ue;try{let n={roughness:g.roughness??.5,metalness:g.metalness??0,side:e.DoubleSide,envMapIntensity:g.env??1};if(void 0!==g.normalScale){let t=Number(g.normalScale);isNaN(t)||0===t||(n.normalScale=new e.Vector2(t,t))}let r=!1,o=!1;if(i.includes("(")||s){let{base:i,files:l,transparent:c}=getFilesToLoad(s,a);if(u=c,l.some((e=>"n"===e.suff))&&(l=l.filter((e=>"h"!==e.suff))),0===g.roughness&&(l=l.filter((e=>"r"!==e.suff))),0===g.metalness&&(l=l.filter((e=>"m"!==e.suff))),0===g.emissiveIntensity&&(l=l.filter((e=>"e"!==e.suff))),l&&l.length){let i=await Promise.all(l.map((e=>t.tex(e.file,d,f,I).catch((()=>null)))));for(let t=0;t<l.length;t++){let s=i[t];if(!s)continue;s.isTexture&&(s.colorSpace=l[t].cs?e.SRGBColorSpace:e.LinearSRGBColorSpace);let a=l[t].suff,{prop:c,extra:p}=A[a];n[c]=s,"map"===c&&(n._hasMap=!0),"normalMap"===p?(r=!0,n.normalMap=s,delete s.colorSpace,s.needsUpdate=!0,n.normalScale=n.normalScale??new e.Vector2(1,1)):"bumpScale"===p?(o=!0,n.bumpMap=s):Array.isArray(p)&&p.includes("emissive")&&void 0!==g.emissiveIntensity&&0!==g.emissiveIntensity&&(n.emissive=g.emissive||16777215,n.emissiveIntensity=g.emissiveIntensity??1)}}s&&(n.color=new e.Color(i),n._hasColor=!0)}else if(a.includes(".")){let e=await t.tex(a,d,f,I);if(!e)return it;n.map=e,n._hasMap=!0}if(r&&o?delete n.bumpMap:o&&(n.bumpScale=g.bumpScale??.03),n.transparent=!!u,n.transparent&&(n.depthWrite=!1,n.opacity=g?.opacity??1),void 0!==g.brightness){let t=Number(g.brightness);!isNaN(t)&&t>0&&1!==t&&(n.color||(n.color=new e.Color(1,1,1)),n.color.multiplyScalar(t))}return n._hasMap&&!n._hasColor&&(n.color=new e.Color(1,1,1)),n._hasColor&&!n._hasMap&&delete n.map,new e.MeshStandardMaterial(n)}catch(e){return console.log("errore mat:",e.message,r),it}}(t,i,n)),t.smats[r]}const ct={s:["sx","sy"],sx:["sx"],sy:["sy"],rot:["rot"],br:["brightness"],r:["roughness"],m:["metalness"],h:["bumpScale"],n:["normalScale"],d:["bumpScale"],b:["bumpScale"],e:["emissiveIntensity"],ec:["emissive"],env:["envMapIntensity"],o:["opacity"],t:["transparent"],at:["alphaTest"]};async function extractTextures(e,t){const i={},n=[];function getName(e){i[e]=(i[e]||0)+1;let n=t;return e&&(n+=`_${e}`),i[e]>1&&(n+=i[e]),`${n}.webp`}return e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const[t,{prop:i}]of Object.entries(suffissoMap)){const r=e[i];if(r&&r.image&&!r._extracted){r._extracted=!0;let e,i=r.image;if(i.toBlob)e=new Promise((e=>i.toBlob(e,"image/webp")));else if(i instanceof ImageBitmap){const t=document.createElement("canvas");t.width=i.width,t.height=i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}else{if(!(i instanceof HTMLImageElement))continue;{const t=document.createElement("canvas");t.width=i.naturalWidth||i.width,t.height=i.naturalHeight||i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}}n.push(e.then((e=>new File([e],getName(t),{type:"image/webp"}))))}}}})),e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const{prop:t}of Object.values(suffissoMap)){const i=e[t];i&&i._extracted&&delete i._extracted}}})),Promise.all(n)}function uvswap(e,t=!1,i=!0){if(e&&e.attributes){const n=i?lt:1,r=e.attributes.uv;if(r){const e=r.array;for(let r=0,o=e.length;r<o;r+=2)if(t){const t=e[r];e[r]=e[r+1]*n,e[r+1]=t*n}else i&&(e[r]*=n,e[r+1]*=n);r.needsUpdate=t||i}const o=e.attributes.uv2;if(o){const e=o.array;for(let i=0,r=e.length;i<r;i+=2)if(t){const t=e[i];e[i]=e[i+1]*n,e[i+1]=t*n}else e[i]*=n,e[i+1]*=n;o.needsUpdate=!0}e.computeTangents?.()}}function getfakeshadow2(t,i,n){const r=(new e.Shape).moveTo(0,0).lineTo(t,0).lineTo(t,i).lineTo(0,i).lineTo(0,0),o=new e.ShapeGeometry(r),s=o.attributes.position,A=new Float32Array(2*s.count);for(let e=0;e<s.count;e++)A[2*e]=s.getX(e)/t,A[2*e+1]=s.getY(e)/i;o.setAttribute("uv",new e.BufferAttribute(A,2));const a=new e.MeshBasicMaterial({map:n,transparent:!0,alphaTest:.01,depthWrite:!1,side:e.DoubleSide}),l=new e.Mesh(o,a);return l.layers.set(9),l.rotation.x=Math.PI/2,l}function getfakeshadow(t,i,n){let r=`fk${i.key}${n}`,{p1:o,width:s,height:A}=i.dims();t.texture||(t.texture={});let a=t.texture[r];a||(a=function createBlurredShadowTextureFromPoints(t,i=256,n=32,r=.2,o,s,A){if(!s||!A||!t.pt||t.pt.length<2)return;const a=o.x,l=o.y,c=s,p=A,h=t.pt,g=2*n,u=document.createElement("canvas");u.width=i+2*g,u.height=i+2*g;const d=u.getContext("2d");d.save(),d.translate(g,g),d.scale(i/c,i/p),d.translate(-a,-l),d.filter=`blur(${n}px)`,d.beginPath(),d.moveTo(h[0].x,h[0].y);for(let e=1;e<h.length;e++)d.lineTo(h[e].x,h[e].y);d.closePath(),d.fillStyle=`rgba(0,0,0,${r})`,d.fill(),d.restore();const f=new e.CanvasTexture(u);return f.needsUpdate=!0,f}(i,256,32,n,o,s,A),t.texture[r]=a);const l=function pointsToShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i}(i.pt),c=new e.ShapeGeometry(l);!function applyUVtoShapeGeometry(t,i,n,r,o){const s=t.attributes.position,A=[];for(let e=0;e<s.count;e++){const t=s.getX(e),a=s.getY(e);A.push((t-i)/r,(a-n)/o)}t.setAttribute("uv",new e.Float32BufferAttribute(A,2))}(c,o.x,o.y,s,A);const p=new e.MeshBasicMaterial({map:a,transparent:!0,depthWrite:!1,side:e.DoubleSide});let h=new e.Mesh(c,p);return h.layers.set(9),h.rotation.x=Math.PI/2,h}function addmovpivot(t,i,n,r={},o=0,s=0,A=0){if(n=clean(n,!0),!t.movs[n])return i;t.movs[n];const a=new e.Vector3(o,s,A),l=0===a.lengthSq(),c=new e.Group;c.name=`pivot_${n}`;const p=new e.Group;if(p.name=`mov_${n}`,l)c.position.copy(i.position),c.quaternion.copy(i.quaternion),i.position.set(0,0,0),i.rotation.set(0,0,0);else{const t=a.clone().applyMatrix4(i.matrixWorld);c.position.copy(t);const n=a.clone().negate();i.position.add(n),c.quaternion.copy(i.getWorldQuaternion(new e.Quaternion)),i.rotation.set(0,0,0)}return p.add(i),c.add(p),r||(r={}),r.inmov=!1,r.key=n,r.dt=0,r.dtstart=!1,p.userData.mov={...r},c}function getmovimento(e,t=[]){let i=0,n=[];const _cleartimeline=()=>{n=[],i=0},_add=(e,t={})=>{e&&n.push({...t,time:e}),i=n.reduce(((e,t)=>e+(t.time||0)),0)};_cleartimeline(),t&&t.length&&t.forEach((e=>_add(e.time,e)));const _resetmov=e=>{const{mov:t}=e?.userData||{};t&&(t.inmov=!1,e.position.set(0,0,0),e.scale.set(1,1,1),e.rotation.set(0,0,0))};return{get tline(){return i},clear:_cleartimeline,add:_add,key:e,step:(e,t)=>{if(!e||!e.userData?.mov||!i)return;const{mov:r}=e.userData;if(!r.inmov)return;let o=r.dt-r.dtstart;if(r.ripeti)o%=i;else if(o>i)return void _resetmov(e);let s=0,A=0,a=0,l=0,c=0,p=0,h=1,g=1,u=1,d=null,f=0;for(let e of n){if(f+=e.time,o<f){const t=e.time>0?(o-(f-e.time))/e.time:1,_calc=(e,i=0)=>"function"==typeof e?e(r)*t:(e||i)*t;s+=_calc(e.x),A+=_calc(e.y),a+=_calc(e.z),h*=1+_calc(e.sx??e.s,0),g*=1+_calc(e.sy??e.s,0),u*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,p+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(r)*t:e.t*t);break}{const _calc=(e,t=0)=>"function"==typeof e?e(r):e||t;s+=_calc(e.x),A+=_calc(e.y),a+=_calc(e.z),h*=1+_calc(e.sx??e.s,0),g*=1+_calc(e.sy??e.s,0),u*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,p+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(r):e.t)}}e.position.set(s,A,a),e.scale.set(h,g,u),e.rotation.set(l,c,p),null!==d&&e.traverse((e=>{if(e.material){(Array.isArray(e.material)?e.material:[e.material]).forEach((e=>{e.transparent&&(e.opacity=1-d)}))}})),t&&t(e,o)},reset:_resetmov}}let pt=null,ht=null;function getriferimento(t,i=0,n=0,r=0,o="rif"){"string"==typeof t&&(t={testo:t});let s=new e.Object3D;return s.position.set(i,n,r),o&&(s.name=o),s.userData={tipo:"rif",...t},s}function gettarghetta(t,i,n=100,r={}){const{noSfondo:o=!1,forcey:s=!1,coloreSfondo:A="white",coloreBordo:a="gray",spessoreBordo:l=2,padding:c=8,layer:p=21,size:h=24,fontFamily:g="Arial",raggioAngoli:u=10,order:d=0,variant:f,tooltip:I,billboard:m=!1}=r;i=(i||"").replaceAll("\\n","\n");let b=hash(`T:${A}|${a}|${g}|${c}|${l}|${u}|${o}|${i}|${f}|${m}`);const C=h??24;i=i.split("\n").map((e=>{let t=C,i=!1,n=!1,r="black";e=e.trim();let o=/^\s*#(\w)([bi]?)([\d.]*)[,;](.*)$/.exec(e);if(o)switch(t=parseFloat(o[3]||1)*C,"b"===o[2]&&(i=!0),"i"===o[2]&&(n=!0),e=o[4],o[1].toLowerCase()){case"r":r="red";break;case"g":r="green";break;case"b":r="blue";break;case"w":r="white";break;case"c":r="cyan"}return{testo:e,size:t,color:r,bold:i,italic:n}})).filter((e=>e.testo));const{canvas:B,context:y}=function getGlobalCanvas(){return pt||(pt=document.createElement("canvas"),ht=pt.getContext("2d",{willReadFrequently:!0})),{canvas:pt,context:ht}}();let E=0,x=2*c;i.forEach(((e,t)=>{const{testo:n,size:r=12}=e,o=2*r;y.font=`${o}px ${g}`;const s=y.measureText(n).width,A=o*(t==i.length-1?1:1.2);E=Math.max(E,s),x+=A})),E+=2*c;const w=x/E||1;let P,v;if(s?(v=n,P=Math.ceil(v/w)):(P=n,v=Math.ceil(P*w)),!t.textures[b]){const n=Math.floor(E+2*l),r=Math.floor(x+2*l);(B.width<n||B.height<r)&&(B.width=Math.max(B.width,n),B.height=Math.max(B.height,r)),y.clearRect(0,0,n,r);const s=new e.Color(A),p=`rgb(${Math.floor(255*s.r)}, ${Math.floor(255*s.g)}, ${Math.floor(255*s.b)})`,h=new e.Color(a),d=`rgb(${Math.floor(255*h.r)}, ${Math.floor(255*h.g)}, ${Math.floor(255*h.b)})`,f=u;y.beginPath(),o||(drawRoundedRect(y,0,0,n,r,f+l/2),y.fillStyle=d,y.fill(),y.beginPath(),drawRoundedRect(y,l,l,n-2*l,r-2*l,f-l/2),y.fillStyle=p,y.fill());let I=c+l;i.forEach((e=>{const{testo:t,size:i=12,color:r="black",bold:o,italic:s}=e,A=2*i;y.font=`${o?"bold ":s?"italic ":""}${A}px ${g}`,y.fillStyle=r,y.textAlign="center",y.textBaseline="top",y.fillText(t,n/2,I),I+=1.2*A}));const m=y.getImageData(0,0,n,r),C=new e.DataTexture(m.data,m.width,m.height,e.RGBAFormat);C.needsUpdate=!0,C.flipY=!0,C.minFilter=e.LinearFilter,C.magFilter=e.LinearFilter,t.textures[b]=C}const D=new e.MeshBasicMaterial({map:t.textures[b],transparent:!0,alphaTest:.5,side:$e}),S=new e.PlaneGeometry(P,v),M=new e.Mesh(S,D);return M.layers.set(p),M.renderOrder=d,M.userData={dimx:P,dimy:v,noingombro:!0},f&&(M.userData.pickvariant=!0,M.userData.variant=f,M.userData.tooltip=I),m&&(M.up.set(0,0,1),M.layers.set(21),M.onBeforeRender=(e,t,i)=>{M.quaternion.copy(i.quaternion)}),M}function drawRoundedRect(e,t,i,n,r,o){o=Math.min(o,Math.min(n/2,r/2)),e.moveTo(t+o,i),e.lineTo(t+n-o,i),e.quadraticCurveTo(t+n,i,t+n,i+o),e.lineTo(t+n,i+r-o),e.quadraticCurveTo(t+n,i+r,t+n-o,i+r),e.lineTo(t+o,i+r),e.quadraticCurveTo(t,i+r,t,i+r-o),e.lineTo(t,i+o),e.quadraticCurveTo(t,i,t+o,i),e.closePath()}function getquota(t,i,n,r,o,s,A={}){const{altezza:a=30,offset:l=0,piano:c="xy",layer:p=22,delta:h=5,spessoreLinea:g=3}=A,pp=(e,t)=>"xz"===c?[e,0,t]:"yz"===c?[0,e,t]:[e,t,0],u=new e.Group;u.name="quota";const d=o-n,f=s-r,I=Math.sqrt(d*d+f*f),m=Math.atan2(f,d);i||(i="$$"),i.includes("$$")&&(i=i.replace("$$",`${I.toFixed(1)}`));let b=i.split("\n").length;const C=-Math.sin(m)*l,B=Math.cos(m)*l,y=gettarghetta(t,i,2*a*b,{noSfondo:!0,layer:p,forcey:!0}),{dimx:E,dimy:x}=y.userData;function getCilindro(i,n,r){const o=(new e.Vector3).subVectors(n,i),s=o.length();let A,a=hash(`c:${r}|${s}`);t.geo[a]?A=t.geo[a]:(A=new e.CylinderGeometry(r/2,r/2,s,3,1,!0),t.geo[a]=A);const l=new e.Mesh(A,at);l.position.copy(i).add(o.multiplyScalar(.5));const c=(new e.Vector3).copy(n);return l.lookAt(c),l.rotateX(Math.PI/2),l}if(E>I-h){y.position.set(I/2,2*a,0);const t=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(I,0)),g);u.add(t)}else{const t=E+h,i=(I-t)/2,n=i+t,r=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(i,0)),g);u.add(r);const o=getCilindro(new e.Vector3(...pp(n,0)),new e.Vector3(...pp(I,0)),g);u.add(o),y.position.set(...pp(I/2,0))}const w=l>a/2?-l:-a/2,P=-l>a/2?-l:a/2,v=new e.Vector3(...pp(0,w)),D=new e.Vector3(...pp(0,P)),S=new e.Vector3(...pp(I,w)),M=new e.Vector3(...pp(I,P)),L=getCilindro(v,D,g);u.add(L);const T=getCilindro(S,M,g);return u.add(T),y.userData.updateOrientation=function(e){e&&this.quaternion.copy(e.quaternion)},u.add(y),u.userData.noingombro=!0,"xy"===c?(u.position.set(n+C,r+B,0),u.rotation.z=m):"xz"===c?(u.position.set(n+C,0,r+B),u.rotation.y=-m):"yz"===c&&(u.position.set(0,n+C,r+B),u.rotation.x=m),u.traverse((function(e){e.layers.set(p)})),u}function fillNoise(t,i,n={}){let{scale:r=8,octaves:o=3,persistence:s=.5,seed:A=0,contrast:a=1,color1:l="#000000",color2:c="#ffffff",alpha1:p=1,alpha2:h=1}=n;const g=new e.Color(l),u=new e.Color(c),fade=e=>e*e*e*(e*(6*e-15)+10),lerp=(e,t,i)=>e+(t-e)*i,d=i,f=new Uint16Array(2*d);let I=0|Math.floor(65536*A);for(let e=0;e<d;e++)f[e]=e;for(let e=0;e<d;e++){const t=Math.floor((I^=I<<13,I^=I>>17,I^=I<<5,(I<0?1+~I:I)%65536/65536*d));[f[e],f[t]]=[f[t],f[e]]}for(let e=0;e<d;e++)f[d+e]=f[e];const m=[[1,1],[-1,1],[1,-1],[-1,-1],[1,0],[-1,0],[0,1],[0,-1]];function grad(e,t){const i=f[(f[e%d]+t)%d]%8;return m[i]}function perlin(e,t,i,n){const r=Math.floor(e)%i,o=Math.floor(t)%n,s=e-Math.floor(e),A=t-Math.floor(t),a=grad(r,o),l=grad(r+1,o),c=grad(r,o+1),p=grad(r+1,o+1),h=a[0]*s+a[1]*A,g=l[0]*(s-1)+l[1]*A,u=c[0]*s+c[1]*(A-1),d=p[0]*(s-1)+p[1]*(A-1),f=fade(s),I=fade(A);return lerp(lerp(h,g,f),lerp(u,d,f),I)}let b=1/0,C=-1/0;const B=new Float32Array(i*i);for(let e=0;e<i;e++)for(let t=0;t<i;t++){let n=t/i*r,A=e/i*r,a=1,l=1,c=0,p=0;for(let e=0;e<o;e++){c+=perlin(n*l,A*l,d/l,d/l)*a,p+=a,a*=s,l*=2}let h=c/p;B[e*i+t]=h,h<b&&(b=h),h>C&&(C=h)}const y=1/(C-b);for(let e=0;e<i;e++)for(let n=0;n<i;n++){let r=(B[e*i+n]-b)*y;r=Math.pow(r,a);const o=g.r+(u.r-g.r)*r,s=g.g+(u.g-g.g)*r,A=g.b+(u.b-g.b)*r,l=0,c=4*(e*i+n);t[c]=Math.floor(255*o),t[c+1]=Math.floor(255*s),t[c+2]=Math.floor(255*A),t[c+3]=Math.floor(255*l)}}function texgen(t,i,n=256,r={}){[16,32,64,128,256,512,1024].includes(n)||(n=256);let o=hash(`gen|${i}|${n}|${JSON.stringify(r)}`);if(!t[o]){const s=new Uint8Array(n*n*4);switch(i){case"wood":let e={...r};e.scale=6+seeder(40,r.seed+"a")/10,e.octaves=r.octaves||3,e.persistence=.5+seeder(50,r.seed+"b")/100,e.rings=2+seeder(200,r.seed+"c")/100,e.distortion=.3+seeder(100,r.seed+"d")/300,e.color1=r.color1||"#442200",e.color2=r.color2||"#ffe0a0",fillNoise(s,n,e);break;case"marble":let t={...r};t.scale=r.scale||10,t.octaves=r.octaves||3,t.persistence=r.persistence||.6,t.rings=r.rings||1+seeder(100,r.seed+"m3")/50,t.distortion=r.distortion||.8+seeder(200,r.seed+"m4")/200,t.contrast=r.contrast||1.2,t.color1=r.color1||"#e0e0e0",t.color2=r.color2||"#909090",fillNoise(s,n,t);break;case"glass":let i={...r};i.scale=r.scale||32,i.octaves=r.octaves||2,i.persistence=r.persistence||.8,i.contrast=r.contrast||1,i.color1=r.color1||"rgba(255,255,255,0.2)",i.color2=r.color2||"rgba(255,255,255,0.6)",fillNoise(s,n,i);break;case"gradient":case"pattern":break;default:fillNoise(s,n,r)}const A=new e.DataTexture(s,n,n,e.RGBAFormat);A.needsUpdate=!0,A.wrapS=A.wrapT=e.RepeatWrapping,A.repeat.set(.002,.002),A.center.set(.5,.5),t[o]=A}return t[o]}function getcilindro(t,i,n,r,o,s=it,A){A||(A={}),Array.isArray(s)||(s=[s]);const a=function cylgeometry(t,i,n,r,o=16){if(!n||!i)return null;let s=hash(`cy${i}|${n}|${r||n}|${o}`);if(!t.geo[s]){const A=new e.CylinderGeometry(r||n,n,i,o);t.geo[s]=A}return t.geo[s]}(t,n,r,o,A.sides||16);let l=new e.Group;switch((i||"").trim().toUpperCase()){case"X":case"L":l.position.set(n/2,0,0),l.rotation.z=Math.PI/2;break;case"Z":case"P":l.position.set(0,0,n/2),l.rotation.x=Math.PI/2;break;default:l.position.set(0,n/2,0)}if(a){if(!A.nolines){let e=edgesfromgeometry(a);l.add(e)}uvswap(a,A.uvswap,!1);const e=s[0]||it,t=s[1]||e,i=s[2]||e;l.add(getmesh(a,[e,t,i]))}return l}function facesettile(e,t,i,n){if(t>1||i>1){let r=n%(t=t??1);const o=1/t,s=1/(i=i??1),A=r*o,a=1-((n-r)/t+1)*s,l=A+o,c=a+s,p=e.geometry.attributes.uv,h=[[A,c],[l,c],[A,a],[l,a]];for(let e=0;e<p.count;e++)p.setXY(e,h[e][0],h[e][1]);p.needsUpdate=!0}}function pickvariant(e,t,i,n,r,o,s={}){let A,{mat:a,testo:l,matover:c}=s;return a?(A=getface(e,t,i,a,s),c&&(c=c.clone(),c.depthTest=!1,c.depthWrite=!1,A.userData.matover=c)):(l=l||"xx",A=gettarghetta(e,l,t,s)),A.layers.disableAll(),A.layers.set(30),A.userData.pickvariant=!0,A.userData.variant=n,A.userData.value=r,A.userData.tooltip=o,A}function getface(t,i,n,r,o={}){let{repeat:s,order:A,center:a=!1,base:l=!1,billboard:c=!1}=o;const p=hash(`f:${i}|${n}|${s?1:0}|${l?1:0}`);if(!t.geo[p]){const r=new e.PlaneGeometry(i,n);let o=l?-.5:0;const A=r.attributes.uv;if(s)for(let e=0;e<A.count;e++)A.setXY(e,A.getX(e)*i/1e3,A.getY(e)*n/1e3);else{const e=[[0,1],[1,1],[0,0],[1,0]];for(let t=0;t<A.count;t++){const i=e[t];A.setXY(t,i[0]-o,i[1]-o)}}A.needsUpdate=!0,t.geo[p]=r}c&&((r=r.clone()).depthTest=!1,r.depthWrite=!1);const h=new e.Mesh(t.geo[p],r);if(h.name=c?"billboard":"face","number"==typeof A&&(h.renderOrder=A),a||h.position.set(i/2,n/2,0),r?.transparent&&h.layers.set(2),c){h.layers.disableAll(),h.layers.set(30),h.userData.billboard=!0;let t=new e.Quaternion,i=new e.Quaternion;h.onBeforeRender=function(e,n,r){this.getWorldQuaternion(t),this.parent?.getWorldQuaternion(i),this.quaternion.copy(r.quaternion),this.quaternion.premultiply(i.invert())}}return h}function getbox(t,i,n,r,o,s){o&&o.isMaterial||(s=o,o=void 0),s||(s={});let{center:A=!1,nolines:a,centerbase:l=!1,px:c=0,py:p=0,pz:h=0}=s;const g=new e.BoxGeometry(i,n,r),u=new e.Group;if(l?u.position.set(0,n/2,0):c||p||h?u.position.set(c||0,p||0,h||0):A||u.position.set(i/2,n/2,r/2),!a||!o){let e=edgesfromgeometry(g);u.add(e)}return o&&u.add(getmesh(g,o)),u}function getcyl(t,i,n,r,o){o||(o={});let{center:s=!1,nolines:A=!1,segments:a=16,top:l=-1,bottom:c=-1,heightSegments:p=1,openEnded:h=!1,thetaStart:g=0,thetaLength:u=2*Math.PI}=o;l<0&&(l=n),c<0&&(c=n);const d=new e.CylinderGeometry(l,c,i,a,p,h,g,u);uvswap(d,o.uvswap,!1);const f=getmesh(d,r||it),I=new e.Group;if(I.add(f),I.position.set(0,s?0:i/2,0),!A){let e=edgesfromgeometry(d);I.add(e)}return I}function getsphere(t,i,n,r){r||(r={});let{nolines:o,segmenti:s=16}=r,A=new e.Group;const a=new e.SphereGeometry(i,2*s,s);if(!o){let e=edgesfromgeometry(a);A.add(e)}return A.add(getmesh(a,n||it)),A}function makeShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}function getextrude(t,i,n=10,r=[],o=void 0,s={}){o&&o.isMaterial||(s=o,o=void 0),s=s??{};let{stonda:A,sx:a,sy:l,round:c,nolines:p}=s,h=hash(`${JSON.stringify(i)}|${n}|${JSON.stringify(s)}|${JSON.stringify(r)}`);a=a??A??0,l=l??A??0;let g=t.geo[h];if(!g){const o=makeShape(i);r.forEach((t=>o.holes.push(function makePath(t){const i=new e.Path;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}(t))));const A=a>0&&l>0;g=new e.ExtrudeGeometry(o,{depth:n,bevelEnabled:A,bevelSize:a,bevelThickness:l,bevelSegments:A?c?3:1:0,curveSegments:A?10:1}),t.geo[h]=g,uvswap(g,s.uvswap,!0)}let u=new e.Group;return u.add(new e.Mesh(g,o||it)),p||function extrudelines(t,i,n,r,o=3){const makeloop=(t,i)=>{if(!t||t.length<2)return null;const n=t.length,r=new Float32Array(3*(n+1));for(let e=0;e<=n;e++){const o=t[e%n],s=3*e;r[s]=o.x,r[s+1]=o.y,r[s+2]=i}const o=new e.BufferGeometry;return o.setAttribute("position",new e.BufferAttribute(r,3)),new e.Line(o,et)},addring=e=>{let i=makeloop(e,-o);i&&(i.layers.set(30),t.add(i)),i=makeloop(e,r+o),i&&(i.layers.set(30),t.add(i))};addring(i);for(const e of n)addring(e)}(u,i,r,n,l),u}function getthorus(t,i,n=.2,r,o){o||(o={});let{center:s,nolines:A,segmenti:a=16,tubi:l=12}=o,c=new e.Group;const p=new e.TorusGeometry(i,n,l,2*a);if(c.position.set(0,s?0:i,0),!A){let e=edgesfromgeometry(p);c.add(e)}return c.add(getmesh(p,r||it)),c}function getluce(t,i,n="#ffffff",r=1){const o=i.pt;if(!o||!o.length)return null;const s=hash(`${i.key}|${n}|${r}`);if(!t.meshes[s]){const i=makeShape(o),A=new e.ShapeGeometry(i),a=new e.MeshStandardMaterial({color:new e.Color(n),emissive:new e.Color(n),emissiveIntensity:r,toneMapped:!1,transparent:!0,depthWrite:!1,side:e.DoubleSide,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:1}),l=new e.Mesh(A,a);l.layers.set(8),l.userData.isBloom=!0,t.meshes[s]=l,t.mustlight=!0}return t.meshes[s]}function getmarker(e,t,i,n,r,o,s={}){if(t&&i){s||(s={});let{markscale:A=.6,marklink:a,billboard:l}=s;s.markerid=t,s.marker=i,s.noingombro=!0;let c=getface(e,n*A,r*A,o,{order:1}),p=t;p.length>7&&(p=".."+p.slice(-6));let h=gettarghetta(e,`#w,${p}`,50,{noSfondo:!0,layer:11,billboard:l,forcey:!0});return c.add(posiziona(h,{sp:11,order:2})),s.center||(c=posiziona(c,{sl:n*(1-A)/2,sa:r*(1-A)/2})),c.layers.set(28),c.userData.marklink=a,posiziona(c,s)}}function toTrianglesDrawMode(e,r){if(r===t)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(r===i||r===n){let t=e.getIndex();if(null===t){const i=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<n.count;e++)i.push(e);e.setIndex(i),t=e.getIndex()}const n=t.count-2,o=[];if(r===i)for(let e=1;e<=n;e++)o.push(t.getX(0)),o.push(t.getX(e)),o.push(t.getX(e+1));else for(let e=0;e<n;e++)e%2==0?(o.push(t.getX(e)),o.push(t.getX(e+1)),o.push(t.getX(e+2))):(o.push(t.getX(e+2)),o.push(t.getX(e+1)),o.push(t.getX(e)));o.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const s=e.clone();return s.setIndex(o),s.clearGroups(),s}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",r),e}function pannellogeometry(t,i,n,r,o=0,s=0,A=0,a=0,l=0,c=2,p=!1){let h=hash(`pg--${i}|${n}|${r}|${o}|${s}|${A}|${a}|${l}|${c}|${p?1:0}`);if(i-=.01,n-=.01,r-=.01,!t.geo[h]){i-=2*l,n-=2*l,r-=2*l;let g=getshape();const u=[{x:a,y:0},{x:n-o,y:0},{x:n,y:o},{x:n,y:r-s},{x:n-s,y:r},{x:A,y:r},{x:0,y:r-A},{x:0,y:a}];g.addpt(u[0]),g.addpt(u[1]),o&&g.addpt(raccordabezier(u[0],u[1],u[2],u[3],c)),g.addpt(u[2]),g.addpt(u[3]),s&&g.addpt(raccordabezier(u[2],u[3],u[4],u[5],c)),g.addpt(u[4]),g.addpt(u[5]),A&&g.addpt(raccordabezier(u[4],u[5],u[6],u[7],c)),g.addpt(u[6]),g.addpt(u[7]),s&&g.addpt(raccordabezier(u[6],u[7],u[0],u[1],c)),g.removeduplicate(.01);let d=g.pt;const f=new e.Shape;f.moveTo(d[0].x,d[0].y);for(let e=1;e<d.length;e++)f.lineTo(d[e].x,d[e].y);f.lineTo(d[0].x,d[0].y);const I={depth:i,bevelEnabled:l>0,bevelThickness:l,bevelSize:l,bevelSegments:1};let m=new e.ExtrudeGeometry(f,I);m=function mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);const i={},n=e.getIndex(),r=e.getAttribute("position"),o=n?n.count:r.count;let s=0;const A=Object.keys(e.attributes),a={},l={},c=[],p=["getX","getY","getZ","getW"],h=["setX","setY","setZ","setW"];for(let t=0,i=A.length;t<i;t++){const i=A[t],n=e.attributes[i];a[i]=new n.constructor(new n.array.constructor(n.count*n.itemSize),n.itemSize,n.normalized);const r=e.morphAttributes[i];r&&(l[i]||(l[i]=[]),r.forEach(((e,t)=>{const n=new e.array.constructor(e.count*e.itemSize);l[i][t]=new e.constructor(n,e.itemSize,e.normalized)})))}const g=.5*t,u=Math.log10(1/t),d=Math.pow(10,u),f=g*d;for(let t=0;t<o;t++){const r=n?n.getX(t):t;let o="";for(let t=0,i=A.length;t<i;t++){const i=A[t],n=e.getAttribute(i),s=n.itemSize;for(let e=0;e<s;e++)o+=~~(n[p[e]](r)*d+f)+","}if(o in i)c.push(i[o]);else{for(let t=0,i=A.length;t<i;t++){const i=A[t],n=e.getAttribute(i),o=e.morphAttributes[i],c=n.itemSize,g=a[i],u=l[i];for(let e=0;e<c;e++){const t=p[e],i=h[e];if(g[i](s,n[t](r)),o)for(let e=0,n=o.length;e<n;e++)u[e][i](s,o[e][t](r))}}i[o]=s,c.push(s),s++}}const I=e.clone();for(const t in e.attributes){const e=a[t];if(I.setAttribute(t,new e.constructor(e.array.slice(0,s*e.itemSize),e.itemSize,e.normalized)),t in l)for(let e=0;e<l[t].length;e++){const i=l[t][e];I.morphAttributes[t][e]=new i.constructor(i.array.slice(0,s*i.itemSize),i.itemSize,i.normalized)}}return I.setIndex(c),I}(m),uvswap(m,p,!0),t.geo[h]=m}return t.geo[h]}function getpannello(t,i,n,r,o,s,A,a){a||(a={});let l,c,p,{r:h,r1:g,r2:u,r3:d,r4:f,b:I,npt:m}=a;g=g||h||0,u=u||h||0,d=d||h||0,f=f||h||0,m=m||2,I=I||0,(I>=n/2||I>=r/2||I>=o/2)&&(I=0),l="L"==(i=i.trim().toUpperCase())[0]?n:"A"==i[0]?r:o,c="L"==i[1]?n:"A"==i[1]?r:o,p="L"==i[2]?n:"A"==i[2]?r:o;let b=new e.Group;if(!a.nolines){let t=edgesfromgeometry(new e.BoxGeometry(n,r,o));t.position.set(n/2,r/2,o/2),b.add(t)}let C=getmesh(pannellogeometry(t,l,c,p,g,u,d,f,I,m,!a.uvswap),[A||s||At,s||ot]);C.name="pannello",C.layers.set(1);let B=C;return I&&(C.position.set(I,I,I),B=new e.Group,B.add(C)),C=function meshrotate(e,t,i=0,n=0,r=0){switch(e.trim().toUpperCase()){case"LPA":t.rotation.y=Math.PI/2,t.rotation.x=Math.PI,t.position.set(0,r,0);break;case"ALP":t.rotation.x=Math.PI/2,t.position.set(0,i,0);break;case"APL":t.rotation.x=-Math.PI/2,t.rotation.z=-Math.PI/2;break;case"PLA":break;case"PAL":t.rotation.z=Math.PI/2,t.position.set(r,0,0);break;case"LAP":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI/2}return t}(i,B,l,c,p),b.add(C),b}async function getpannello2(e,t,i,n,r,o,s=0){let A;switch((s<0||s>Math.max(i,n,r)/3)&&(s=0),t){case"lap":A=getextrude(e,getshape().fromrect(i-2*s,n-2*s).pt,r-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=r-s,A.position.y=n-s,A.rotation.x=Math.PI;break;case"alp":A=getextrude(e,getshape().fromrect(n-2*s,i-2*s).pt,r-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=s,A.position.y=n-s,A.rotation.z=-Math.PI/2;break;case"apl":A=getextrude(e,getshape().fromrect(n-2*s,r-2*s).pt,i-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=s,A.position.y=s,A.rotation.y=Math.PI/2,A.rotation.z=Math.PI/2;break;case"pal":A=getextrude(e,getshape().fromrect(r-2*s,n-2*s).pt,i-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=r-s,A.position.y=s,A.rotation.y=Math.PI/2;break;case"pla":A=getextrude(e,getshape().fromrect(r-2*s,i-2*s).pt,n-2*s,[],o,{round:s,stonda:s}),A.rotation.z=-Math.PI/2,A.rotation.x=-Math.PI/2,A.position.x=s,A.position.z=s,A.position.y=s;break;default:A=getextrude(e,getshape().fromrect(i-2*s,r-2*s).pt,n-2*s,[],o,{round:s,stonda:s}),A.position.x=s,A.position.z=s,A.rotation.x=Math.PI/2,A.position.y=n-s}return A}function earcut(e,t,i=2){const n=t&&t.length,r=n?t[0]*i:e.length;let o=linkedList(e,0,r,i,!0);const s=[];if(!o||o.next===o.prev)return s;let A,a,l;if(n&&(o=function eliminateHoles(e,t,i,n){const r=[];for(let i=0,o=t.length;i<o;i++){const s=linkedList(e,t[i]*n,i<o-1?t[i+1]*n:e.length,n,!1);s===s.next&&(s.steiner=!0),r.push(getLeftmost(s))}r.sort(compareXYSlope);for(let e=0;e<r.length;e++)i=eliminateHole(r[e],i);return i}(e,t,o,i)),e.length>80*i){A=1/0,a=1/0;let t=-1/0,n=-1/0;for(let o=i;o<r;o+=i){const i=e[o],r=e[o+1];i<A&&(A=i),r<a&&(a=r),i>t&&(t=i),r>n&&(n=r)}l=Math.max(t-A,n-a),l=0!==l?32767/l:0}return earcutLinked(o,s,i,A,a,l,0),s}function linkedList(e,t,i,n,r){let o;if(r===function signedArea(e,t,i,n){let r=0;for(let o=t,s=i-n;o<i;o+=n)r+=(e[s]-e[o])*(e[o+1]+e[s+1]),s=o;return r}(e,t,i,n)>0)for(let r=t;r<i;r+=n)o=insertNode(r/n|0,e[r],e[r+1],o);else for(let r=i-n;r>=t;r-=n)o=insertNode(r/n|0,e[r],e[r+1],o);return o&&equals(o,o.next)&&(removeNode(o),o=o.next),o}function filterPoints(e,t){if(!e)return e;t||(t=e);let i,n=e;do{if(i=!1,n.steiner||!equals(n,n.next)&&0!==area(n.prev,n,n.next))n=n.next;else{if(removeNode(n),n=t=n.prev,n===n.next)break;i=!0}}while(i||n!==t);return t}function earcutLinked(e,t,i,n,r,o,s){if(!e)return;!s&&o&&function indexCurve(e,t,i,n){let r=e;do{0===r.z&&(r.z=zOrder(r.x,r.y,t,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function sortLinked(e){let t,i=1;do{let n,r=e;e=null;let o=null;for(t=0;r;){t++;let s=r,A=0;for(let e=0;e<i&&(A++,s=s.nextZ,s);e++);let a=i;for(;A>0||a>0&&s;)0!==A&&(0===a||!s||r.z<=s.z)?(n=r,r=r.nextZ,A--):(n=s,s=s.nextZ,a--),o?o.nextZ=n:e=n,n.prevZ=o,o=n;r=s}o.nextZ=null,i*=2}while(t>1);return e}(r)}(e,n,r,o);let A=e;for(;e.prev!==e.next;){const a=e.prev,l=e.next;if(o?isEarHashed(e,n,r,o):isEar(e))t.push(a.i,e.i,l.i),removeNode(e),e=l.next,A=l.next;else if((e=l)===A){s?1===s?earcutLinked(e=cureLocalIntersections(filterPoints(e),t),t,i,n,r,o,2):2===s&&splitEarcut(e,t,i,n,r,o):earcutLinked(filterPoints(e),t,i,n,r,o,1);break}}}function isEar(e){const t=e.prev,i=e,n=e.next;if(area(t,i,n)>=0)return!1;const r=t.x,o=i.x,s=n.x,A=t.y,a=i.y,l=n.y,c=Math.min(r,o,s),p=Math.min(A,a,l),h=Math.max(r,o,s),g=Math.max(A,a,l);let u=n.next;for(;u!==t;){if(u.x>=c&&u.x<=h&&u.y>=p&&u.y<=g&&pointInTriangleExceptFirst(r,A,o,a,s,l,u.x,u.y)&&area(u.prev,u,u.next)>=0)return!1;u=u.next}return!0}function isEarHashed(e,t,i,n){const r=e.prev,o=e,s=e.next;if(area(r,o,s)>=0)return!1;const A=r.x,a=o.x,l=s.x,c=r.y,p=o.y,h=s.y,g=Math.min(A,a,l),u=Math.min(c,p,h),d=Math.max(A,a,l),f=Math.max(c,p,h),I=zOrder(g,u,t,i,n),m=zOrder(d,f,t,i,n);let b=e.prevZ,C=e.nextZ;for(;b&&b.z>=I&&C&&C.z<=m;){if(b.x>=g&&b.x<=d&&b.y>=u&&b.y<=f&&b!==r&&b!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,C.x>=g&&C.x<=d&&C.y>=u&&C.y<=f&&C!==r&&C!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,C.x,C.y)&&area(C.prev,C,C.next)>=0)return!1;C=C.nextZ}for(;b&&b.z>=I;){if(b.x>=g&&b.x<=d&&b.y>=u&&b.y<=f&&b!==r&&b!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;C&&C.z<=m;){if(C.x>=g&&C.x<=d&&C.y>=u&&C.y<=f&&C!==r&&C!==s&&pointInTriangleExceptFirst(A,c,a,p,l,h,C.x,C.y)&&area(C.prev,C,C.next)>=0)return!1;C=C.nextZ}return!0}function cureLocalIntersections(e,t){let i=e;do{const n=i.prev,r=i.next.next;!equals(n,r)&&intersects(n,i,i.next,r)&&locallyInside(n,r)&&locallyInside(r,n)&&(t.push(n.i,i.i,r.i),removeNode(i),removeNode(i.next),i=e=r),i=i.next}while(i!==e);return filterPoints(i)}function splitEarcut(e,t,i,n,r,o){let s=e;do{let e=s.next.next;for(;e!==s.prev;){if(s.i!==e.i&&isValidDiagonal(s,e)){let A=splitPolygon(s,e);return s=filterPoints(s,s.next),A=filterPoints(A,A.next),earcutLinked(s,t,i,n,r,o,0),void earcutLinked(A,t,i,n,r,o,0)}e=e.next}s=s.next}while(s!==e)}function compareXYSlope(e,t){let i=e.x-t.x;if(0===i&&(i=e.y-t.y,0===i)){i=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}return i}function eliminateHole(e,t){const i=function findHoleBridge(e,t){let i=t;const n=e.x,r=e.y;let o,s=-1/0;if(equals(e,i))return i;do{if(equals(e,i.next))return i.next;if(r<=i.y&&r>=i.next.y&&i.next.y!==i.y){const e=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=n&&e>s&&(s=e,o=i.x<i.next.x?i:i.next,e===n))return o}i=i.next}while(i!==t);if(!o)return null;const A=o,a=o.x,l=o.y;let c=1/0;i=o;do{if(n>=i.x&&i.x>=a&&n!==i.x&&pointInTriangle(r<l?n:s,r,a,l,r<l?s:n,r,i.x,i.y)){const t=Math.abs(r-i.y)/(n-i.x);locallyInside(i,e)&&(t<c||t===c&&(i.x>o.x||i.x===o.x&&sectorContainsSector(o,i)))&&(o=i,c=t)}i=i.next}while(i!==A);return o}(e,t);if(!i)return t;const n=splitPolygon(i,e);return filterPoints(n,n.next),filterPoints(i,i.next)}function sectorContainsSector(e,t){return area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0}function zOrder(e,t,i,n,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function getLeftmost(e){let t=e,i=e;do{(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next}while(t!==e);return i}function pointInTriangle(e,t,i,n,r,o,s,A){return(r-s)*(t-A)>=(e-s)*(o-A)&&(e-s)*(n-A)>=(i-s)*(t-A)&&(i-s)*(o-A)>=(r-s)*(n-A)}function pointInTriangleExceptFirst(e,t,i,n,r,o,s,A){return!(e===s&&t===A)&&pointInTriangle(e,t,i,n,r,o,s,A)}function isValidDiagonal(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function intersectsPolygon(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&intersects(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(locallyInside(e,t)&&locallyInside(t,e)&&function middleInside(e,t){let i=e,n=!1;const r=(e.x+t.x)/2,o=(e.y+t.y)/2;do{i.y>o!=i.next.y>o&&i.next.y!==i.y&&r<(i.next.x-i.x)*(o-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==e);return n}(e,t)&&(area(e.prev,e,t.prev)||area(e,t.prev,t))||equals(e,t)&&area(e.prev,e,e.next)>0&&area(t.prev,t,t.next)>0)}function area(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function equals(e,t){return e.x===t.x&&e.y===t.y}function intersects(e,t,i,n){const r=sign(area(e,t,i)),o=sign(area(e,t,n)),s=sign(area(i,n,e)),A=sign(area(i,n,t));return r!==o&&s!==A||(!(0!==r||!onSegment(e,i,t))||(!(0!==o||!onSegment(e,n,t))||(!(0!==s||!onSegment(i,e,n))||!(0!==A||!onSegment(i,t,n)))))}function onSegment(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function sign(e){return e>0?1:e<0?-1:0}function locallyInside(e,t){return area(e.prev,e,e.next)<0?area(e,t,e.next)>=0&&area(e,e.prev,t)>=0:area(e,t,e.prev)<0||area(e,e.next,t)<0}function splitPolygon(e,t){const i=createNode(e.i,e.x,e.y),n=createNode(t.i,t.x,t.y),r=e.next,o=t.prev;return e.next=t,t.prev=e,i.next=r,r.prev=i,n.next=i,i.prev=n,o.next=n,n.prev=o,n}function insertNode(e,t,i,n){const r=createNode(e,t,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function removeNode(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function createNode(e,t,i){return{i:e,x:t,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function unifyVertices(e,t,i){const n=new Map,r=[],o=[],s=[];for(let A=0;A<i.length;A++){const a=i[A],l=e[3*a+0],c=e[3*a+1],p=e[3*a+2],h=t[2*a+0],g=t[2*a+1],u=`${l},${c},${p}|${h},${g}`;if(n.has(u))s.push(n.get(u));else{const e=r.length/3;n.set(u,e),r.push(l,c,p),o.push(h,g),s.push(e)}}return{vertices:r,uvs:o,indices:s}}function infoestrudi(e,t,i,n,r){n||(n={}),i||(i=[]);let o=n.p0||0,s=Math.tan(n.coeffbase1*Ue||0),A=Math.tan(n.coeffbase2*Ue||0),a=t||n.p1||20,l=Math.tan(n.coefftop1*Ue||0),c=Math.tan(n.coefftop2*Ue||0),{mi:p,ma:h}=e.pt.reduce(((e,t)=>(e.mi.x=Math.min(e.mi.x,t.x),e.mi.y=Math.min(e.mi.y,t.y),e.ma.x=Math.max(e.ma.x,t.x),e.ma.y=Math.max(e.ma.y,t.y),e)),{mi:{x:1e9,y:1e9},ma:{x:-1e9,y:-1e9}}),g=0,u=1e9;function getpars(e){e.z1=getzeta(e.x,e.y,o,s,A,r),e.z2=getzeta(e.x,e.y,a,l,c,r),e.l=Math.abs(e.z2-e.z1)}for(let e of i)getpars(e);getpars(p),getpars(h);let d=[{x:p.x,y:p.y},{x:h.x,y:p.y},{x:h.x,y:h.y},{x:p.x,y:h.y}];for(let e of d)getpars(e),e.l>g&&(g=e.l),e.l<u&&(u=e.l);return{aini:n.coeffbase1||0,aini2:n.coeffbase2||0,afin:n.coefftop1||0,afin2:n.coefftop2||0,pts:i,mi:p,ma:h,rect:d,dimx:h.x-p.x,dimy:h.y-p.y,lnom:a-o,lmax:g,lmin:u,lmed:(g+u)/2}}function getzeta(e,t,i,n,r,o,s=!1){let A=e*n+t*r+i;if(o){let e=o.xfromy(-t,0,!0);s?A-=e:A=e}return A}function sidegeomfromshapes(t,i,n,r,o=!1,s=!1,A=!1){if(n&&r){if(n.length!==r.length)throw new Error("shapes with different length");if(n.length<2)throw new Error("I percorsi devono contenere almeno due punti ciascuno.");if(!t.geo[i]){const a=[],l=[],c=[],p=n.length,addpts=e=>{for(const t of e)a.push(t.x,t.y,t.z),A?l.push(t.v/1e3,t.u/1e3):l.push(t.u/1e3,t.v/1e3)},equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z,addindexquad=(e,t,i,n)=>{o?c.push(e,i,t,i,n,t):c.push(e,t,i,i,t,n)};addpts(n),addpts(r);for(let e=0;e<p-1;e++){const t=e+1;equalpos(n[e],n[t])||addindexquad(e,t,e+p,t+p)}const h=new e.BufferGeometry;if(s){let t=unifyVertices(a,l,c);h.setAttribute("position",new e.Float32BufferAttribute(t.vertices,3)),h.setAttribute("uv",new e.Float32BufferAttribute(t.uvs,2)),h.setIndex(t.indices)}else h.setAttribute("position",new e.Float32BufferAttribute(a,3)),h.setAttribute("uv",new e.Float32BufferAttribute(l,2)),h.setIndex(c);h.computeVertexNormals(),h.computeTangents?.(),t.geo[i]=h}return t.geo[i]}}function bottomgeomfromshape(t,i,n,r,o=0,s=0,A=0,a=null,l=!1,c=!1){let p=`bg:${o}|${s}${A}|${n.key}|${i}|${a?.key||""}|${c?1:0}`;for(let h of r)p=`${p}|${h.key}`;if(p=hash(p),!t.geo[p]){let g,u=[],d=[],f=n.pt.length;u=n.vec;const I=new e.BufferGeometry,m=[],b=[],C=[];function addvertexes(e,t){let n=m.length/3;for(let n=0;n<e.length;n++){const r=e[n],l=t[2*r],p=-t[2*r+1],h=getzeta(l,p,o,s,A,a,i);m.push(l,p,h),c?b.push(p/1e3,l/1e3):b.push(l/1e3,p/1e3)}for(let t=0;t<e.length;t+=3)i?C.push(t+n,t+n+2,t+n+1):C.push(t+n,t+n+1,t+n+2)}if(a){let B=n.sliceony(a);for(let y of B){let E=y.flatMap((e=>[e.x,e.y]));addvertexes(earcut(E,[]),E)}}else if(Array.isArray(r)&&r.length){for(let x of r)d.push(f),f+=x.pt.length,u=[...u,...x.vec];g=earcut(u,d),addvertexes(g,u)}else g=earcut(u),addvertexes(g,u);if(l){let w=unifyVertices(m,b,C);I.setAttribute("position",new e.Float32BufferAttribute(w.vertices,3)),I.setAttribute("uv",new e.Float32BufferAttribute(w.uvs,2)),I.setIndex(w.indices)}else I.setAttribute("position",new e.Float32BufferAttribute(m,3)),I.setAttribute("uv",new e.Float32BufferAttribute(b,2)),I.setIndex(C);I.computeVertexNormals(),I.computeTangents?.(),t.geo[p]=I}return t.geo[p]}function estrusorotate(e,t,i=0){switch(e.trim().toUpperCase().slice(0,1)){case"A":t.rotation.x=-Math.PI/2;break;case"L":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI;break;case"P":t.rotation.z=Math.PI/2}return t}function estruso(t,i,n,r,o,s,A){A||(A={}),s||(s=[]),Array.isArray(s)||(s=[s,s,s]);let a=A.p0||0,l=Math.tan(A.coeffbase1*Ue||0),c=Math.tan(A.coeffbase2*Ue||0),p=n||A.p1||20,h=Math.tan(A.coefftop1*Ue||0),g=Math.tan(A.coefftop2*Ue||0),u=A.shapetop,d=A.shapebase||A.shapebottom;u&&(g=0),d&&(g=0);let f=d?d.key:"",I=u?u.key:"",m=A.notopholes||!1,b=A.nobottomholes||A.nobaseholes||!1,C=A.invert||!1,B=A.open||!1,y=new e.Group;if(r){if(!A.nobase){let e=o;b&&(e=Array.isArray(b)?e.filter(((e,t)=>!b[t])):[]);let i=bottomgeomfromshape(t,!A.notop,r,B?[]:e,a,l,c,d,!1,A.uvswap);A.nolines||y.add(edgesfromgeometry(i)),y.add(getmesh(i,s[0]||it))}if(!A.notop){let e=o;m&&(e=Array.isArray(m)?e.filter(((e,t)=>!m[t])):[]);let i=bottomgeomfromshape(t,!1,r,B?[]:e,p,h,g,u,!1,A.uvswap);y.add(getmesh(i,s[1]||s[0]||it)),A.nolines||y.add(edgesfromgeometry(i))}if(!A.nosides){let e=r.to3d(0,a,l,-c,B,d,!C),i=r.to3d(1,p,h,-g,B,u,C),n=`${r.key}${C?1:0}|${a}|${p}|${l}|${c||f}|${h}|${g||I}|${B}|${A.wvswap?1:0}`,E=sidegeomfromshapes(t,n,e,i,!1,!1,A.uvswap);if(A.nolines||A.nosidelines||y.add(edgesfromgeometry(E)),y.add(getmesh(E,s[2]||s[0]||it)),o&&!B)for(let r=0;r<o.length;r++){let u=o[r];if(Array.isArray(m)){if(m[r])continue}else if(m)continue;if(Array.isArray(b)){if(b[r])continue}else if(b)continue;e=u.to3d(0,a,l,c),i=u.to3d(0,p,h,g),n=`${u.key}|${a}|${p}|${l}|${c}|${h}|${g}`;let d=sidegeomfromshapes(t,n,e,i,!0);A.nolines||A.nosidelines||y.add(edgesfromgeometry(d)),y.add(getmesh(d,s[3]||s[0]||it))}}return estrusorotate(i,y,n)}return y}function revolve(t,i,n,r,o){o||(o={});let s=o.segmenti??12,A=hash(`rev|${i.key}|${n}|${s}|${o?.uvswap}`),a=t.geo[A],l=new e.Group;if(!a){const n=i.pt.map((t=>new e.Vector2(t.x,t.y)));a=new e.LatheGeometry(n,s,0,2*Math.PI),uvswap(a,o.uvswap,!0),t.geo[A]=a}const c=new e.Mesh(a,r);return l.add(c),o.nolines||o.nosidelines||l.add(edgesfromgeometry(a)),l}function estrusopat(t,i,n,r,o,s,A){A||(A={});let a=A.invert;s||(s=[]);let l=A.open,c=A.closepat;if(!n.pt?.length)return;let p=o.to3d(0,0,0,0,l),h=new e.Group;if(!A.nobase&&!A.open&&!c){let i=new e.Group,a=angle3point(r[0],n.pt[0],n.pt[1])+Math.PI/2,l=bottomgeomfromshape(t,!1,o,[],0,-Math.tan(a),0,null,!1,A.uvswap);i.add(getmesh(l,s[0]||it)),i.add(edgesfromgeometry(l));let c=n.infosegmento(0,!0);h.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!A.notop&&!A.open&&!c){let i=new e.Group,a=-(angle3point(n.pt[n.npt-2],n.pt[n.npt-1],r[n.npt-1])+Math.PI/2),l=bottomgeomfromshape(t,!0,o,[],0,-Math.tan(a),0,null,!1,A.uvswap);i.add(getmesh(l,s[1]||s[0]||it)),i.add(edgesfromgeometry(l));let c=n.infosegmento(n.pt.length-1,!0);h.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!A.nosides){const i=function sidegeomfrompat(t,i,n,r,o,s){let A=`bsg:${i.key}|${n.key}|${o}|${s}`;if(n.npt==r.length){if(A=hash(A),!t.geo[A]){const a=[],l=[],c=[],p=i.length,equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z;let h=0,g=n.pt,u=n.npt;const d=.001,addpts=(t,i,n,r)=>{for(const o of t){let t=new e.Vector3(o.x,o.y,o.x*r);t.applyMatrix4(i),a.push(t.x,t.y,t.z),l.push(o.u*d,(o.v+n)*d)}};let f=u;for(let t=0;t<u;t++){let o;o=t<u-1?angle3point(r[t],g[t],g[t+1])+Math.PI/2:-(angle3point(g[t-1],g[t],r[t])+Math.PI/2);let s=-Math.tan(o),A=n.infosegmento(t,!0),a=new e.Object3D;a.position.set(A.x,0,A.y),a.rotation.set(0,(90-A.ang)*Ue,0),a.updateMatrix(),addpts(i,a.matrix,h,s),h+=A.l}if(o){let t=n.infosegmento(0,!0),o=new e.Object3D;o.position.set(t.x,0,t.y),o.rotation.set(0,(90-t.ang)*Ue,0);let s=angle3point(g[u-1],g[0],r[0])+Math.PI/2,A=-Math.tan(s);o.updateMatrix(),addpts(i,o.matrix,h,A),h+=t.l,f++}for(let e=0;e<f-1;e++)for(let t=0;t<p-1;t++){const addindexquad=(e,t,i,n)=>{s?c.push(e,i,t,i,n,t):c.push(e,t,i,i,t,n)},n=t+1;equalpos(i[t],i[n])||addindexquad(t+e*p,n+e*p,t+(e+1)*p,n+(e+1)*p)}const I=new e.BufferGeometry;I.setAttribute("position",new e.Float32BufferAttribute(a,3)),I.setAttribute("uv",new e.Float32BufferAttribute(l,2)),I.setIndex(c),I.computeVertexNormals(),I.computeTangents?.(),t[A]=I}return t[A]}}(t,p,n,r,c?1:0,a?1:0,A.uvswap);i&&(A.nolines||A.nosidelines||h.add(edgesfromgeometry(i)),h.add(getmesh(i,s[2]||s[0]||it)))}return estrusorotate(i,h,0)}async function spritemat(t,i){try{let n={transparent:!0,depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1};if(i.startsWith("#"))n.color=i;else{let e=await t.tex(i,1e3,1e3);e?n.map=e:n.color="black"}return new e.SpriteMaterial(n)}catch(e){return it}}function getsprite0(t,i,n,r,o,s={}){s||(s={});let{size:A=50,pick:a=!1,screen:l=!1,sizex:c,sizey:p}=s;const h=new e.Sprite(o);h.position.set(0,0,0),h.userData.issprite=!0,h.userData.ispunto=t,h.userData.ispick=a,h.userData.isScreen=l,h.renderOrder=999,h.layers.set(29),h.name=t?"_punto":"_sprite";let g=new e.Group;return g.position.set(i,n,r),g.scale.set(c||A,p||c||A,1),g.add(h),g.traverse((e=>{e.material&&(e.material.depthTest=!1,e.material.depthWrite=!1)})),g.renderOrder=999,g}async function getpunto(t,i,n,r,o="yellow",s){s||(s={size:20}),s.screen=!0;const A=await function createCircleTexture(t,i=64,n="rgba(255,0,0,1)"){const r=`ct|${i}|${n}`;if(!t.textures[r]){const o=document.createElement("canvas");o.width=o.height=i;const s=o.getContext("2d"),A=i/2;s.clearRect(0,0,i,i),s.fillStyle=n,s.beginPath(),s.arc(A,A,A,0,2*Math.PI),s.fill();const a=new e.CanvasTexture(o);a.needsUpdate=!0,t.textures[r]=a}return t.textures[r]}(t,64,o);return getsprite0(!0,i,n,r,new e.SpriteMaterial({map:A,transparent:!0,fog:!1,toneMapped:!1}),s)}function getsprite(e,t,i,n,r,o={}){return getsprite0(!1,t,i,n,r,o)}class GLTFLoader extends r{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(e){return new GLTFMaterialsClearcoatExtension(e)})),this.register((function(e){return new GLTFMaterialsDispersionExtension(e)})),this.register((function(e){return new GLTFTextureBasisUExtension(e)})),this.register((function(e){return new GLTFTextureWebPExtension(e)})),this.register((function(e){return new GLTFTextureAVIFExtension(e)})),this.register((function(e){return new GLTFMaterialsSheenExtension(e)})),this.register((function(e){return new GLTFMaterialsTransmissionExtension(e)})),this.register((function(e){return new GLTFMaterialsVolumeExtension(e)})),this.register((function(e){return new GLTFMaterialsIorExtension(e)})),this.register((function(e){return new GLTFMaterialsEmissiveStrengthExtension(e)})),this.register((function(e){return new GLTFMaterialsSpecularExtension(e)})),this.register((function(e){return new GLTFMaterialsIridescenceExtension(e)})),this.register((function(e){return new GLTFMaterialsAnisotropyExtension(e)})),this.register((function(e){return new GLTFMaterialsBumpExtension(e)})),this.register((function(e){return new GLTFLightsExtension(e)})),this.register((function(e){return new GLTFMeshoptCompression(e)})),this.register((function(e){return new GLTFMeshGpuInstancing(e)}))}load(e,t,i,n){const r=this;let A;if(""!==this.resourcePath)A=this.resourcePath;else if(""!==this.path){const t=o.extractUrlBase(e);A=o.resolveURL(t,this.path)}else A=o.extractUrlBase(e);this.manager.itemStart(e);const _onError=function(t){n?n(t):console.error(t),r.manager.itemError(e),r.manager.itemEnd(e)},a=new s(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(i){try{r.parse(i,A,(function(i){t(i),r.manager.itemEnd(e)}),_onError)}catch(e){_onError(e)}}),i,_onError)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return-1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return-1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,n){let r;const o={},s={},A=new TextDecoder;if("string"==typeof e)r=JSON.parse(e);else if(e instanceof ArrayBuffer){if(A.decode(new Uint8Array(e,0,4))===ut){try{o[gt.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(n&&n(e))}r=JSON.parse(o[gt.KHR_BINARY_GLTF].content)}else r=JSON.parse(A.decode(e))}else r=e;if(void 0===r.asset||r.asset.version[0]<2)return void(n&&n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const a=new GLTFParser(r,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){const t=this.pluginCallbacks[e](a);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),s[t.name]=t,o[t.name]=!0}if(r.extensionsUsed)for(let e=0;e<r.extensionsUsed.length;++e){const t=r.extensionsUsed[e],i=r.extensionsRequired||[];switch(t){case gt.KHR_MATERIALS_UNLIT:o[t]=new GLTFMaterialsUnlitExtension;break;case gt.KHR_DRACO_MESH_COMPRESSION:o[t]=new GLTFDracoMeshCompressionExtension(r,this.dracoLoader);break;case gt.KHR_TEXTURE_TRANSFORM:o[t]=new GLTFTextureTransformExtension;break;case gt.KHR_MESH_QUANTIZATION:o[t]=new GLTFMeshQuantizationExtension;break;default:i.indexOf(t)>=0&&void 0===s[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}a.setExtensions(o),a.setPlugins(s),a.parse(i,n)}parseAsync(e,t){const i=this;return new Promise((function(n,r){i.parse(e,t,n,r)}))}}function GLTFRegistry(){let e={};return{get:function(t){return e[t]},add:function(t,i){e[t]=i},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const gt={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class GLTFLightsExtension{constructor(e){this.parser=e,this.name=gt.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i];n.extensions&&n.extensions[this.name]&&void 0!==n.extensions[this.name].light&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let n=t.cache.get(i);if(n)return n;const r=t.json,o=((r.extensions&&r.extensions[this.name]||{}).lights||[])[e];let s;const A=new l(16777215);void 0!==o.color&&A.setRGB(o.color[0],o.color[1],o.color[2],c);const a=void 0!==o.range?o.range:0;switch(o.type){case"directional":s=new u(A),s.target.position.set(0,0,-1),s.add(s.target);break;case"point":s=new g(A),s.distance=a;break;case"spot":s=new h(A),s.distance=a,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,s.angle=o.spot.outerConeAngle,s.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,s.target.position.set(0,0,-1),s.add(s.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return s.position.set(0,0,0),s.decay=2,assignExtrasToUserData(s,o),void 0!==o.intensity&&(s.intensity=o.intensity),s.name=t.createUniqueName(o.name||"light_"+e),n=Promise.resolve(s),t.cache.add(i,n),n}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,n=i.json.nodes[e],r=(n.extensions&&n.extensions[this.name]||{}).light;return void 0===r?null:this._loadLight(r).then((function(e){return i._getNodeRef(t.cache,r,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=gt.KHR_MATERIALS_UNLIT}getMaterialType(){return Y}extendParams(e,t,i){const n=[];e.color=new l(1,1,1),e.opacity=1;const r=t.pbrMetallicRoughness;if(r){if(Array.isArray(r.baseColorFactor)){const t=r.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],c),e.opacity=t[3]}void 0!==r.baseColorTexture&&n.push(i.assignTexture(e,"map",r.baseColorTexture,p))}return Promise.all(n)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name].emissiveStrength;return void 0!==n&&(t.emissiveIntensity=n),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];if(void 0!==o.clearcoatFactor&&(t.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&r.push(i.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&r.push(i.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(r.push(i.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const e=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new a(e,e)}return Promise.all(r)}}class GLTFMaterialsDispersionExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_DISPERSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.dispersion=void 0!==n.dispersion?n.dispersion:0,Promise.resolve()}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return void 0!==o.iridescenceFactor&&(t.iridescence=o.iridescenceFactor),void 0!==o.iridescenceTexture&&r.push(i.assignTexture(t,"iridescenceMap",o.iridescenceTexture)),void 0!==o.iridescenceIor&&(t.iridescenceIOR=o.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==o.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),void 0!==o.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),void 0!==o.iridescenceThicknessTexture&&r.push(i.assignTexture(t,"iridescenceThicknessMap",o.iridescenceThicknessTexture)),Promise.all(r)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[];t.sheenColor=new l(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=n.extensions[this.name];if(void 0!==o.sheenColorFactor){const e=o.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],c)}return void 0!==o.sheenRoughnessFactor&&(t.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&r.push(i.assignTexture(t,"sheenColorMap",o.sheenColorTexture,p)),void 0!==o.sheenRoughnessTexture&&r.push(i.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(r)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return void 0!==o.transmissionFactor&&(t.transmission=o.transmissionFactor),void 0!==o.transmissionTexture&&r.push(i.assignTexture(t,"transmissionMap",o.transmissionTexture)),Promise.all(r)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];t.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&r.push(i.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const s=o.attenuationColor||[1,1,1];return t.attenuationColor=(new l).setRGB(s[0],s[1],s[2],c),Promise.all(r)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.ior=void 0!==n.ior?n.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];t.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&r.push(i.assignTexture(t,"specularIntensityMap",o.specularTexture));const s=o.specularColorFactor||[1,1,1];return t.specularColor=(new l).setRGB(s[0],s[1],s[2],c),void 0!==o.specularColorTexture&&r.push(i.assignTexture(t,"specularColorMap",o.specularColorTexture,p)),Promise.all(r)}}class GLTFMaterialsBumpExtension{constructor(e){this.parser=e,this.name=gt.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return t.bumpScale=void 0!==o.bumpFactor?o.bumpFactor:1,void 0!==o.bumpTexture&&r.push(i.assignTexture(t,"bumpMap",o.bumpTexture)),Promise.all(r)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=gt.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],o=n.extensions[this.name];return void 0!==o.anisotropyStrength&&(t.anisotropy=o.anisotropyStrength),void 0!==o.anisotropyRotation&&(t.anisotropyRotation=o.anisotropyRotation),void 0!==o.anisotropyTexture&&r.push(i.assignTexture(t,"anisotropyMap",o.anisotropyTexture)),Promise.all(r)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=gt.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,n=i.textures[e];if(!n.extensions||!n.extensions[this.name])return null;const r=n.extensions[this.name],o=t.options.ktx2Loader;if(!o){if(i.extensionsRequired&&i.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,r.source,o)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=gt.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,r=n.textures[e];if(!r.extensions||!r.extensions[t])return null;const o=r.extensions[t],s=n.images[o.source];let A=i.textureLoader;if(s.uri){const e=i.options.manager.getHandler(s.uri);null!==e&&(A=e)}return this.detectSupport().then((function(r){if(r)return i.loadTextureImage(e,o.source,A);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFTextureAVIFExtension{constructor(e){this.parser=e,this.name=gt.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,r=n.textures[e];if(!r.extensions||!r.extensions[t])return null;const o=r.extensions[t],s=n.images[o.source];let A=i.textureLoader;if(s.uri){const e=i.options.manager.getHandler(s.uri);null!==e&&(A=e)}return this.detectSupport().then((function(r){if(r)return i.loadTextureImage(e,o.source,A);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFMeshoptCompression{constructor(e){this.name=gt.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const e=i.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return n.then((function(t){const i=e.byteOffset||0,n=e.byteLength||0,o=e.count,s=e.byteStride,A=new Uint8Array(t,i,n);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(o,s,A,e.mode,e.filter).then((function(e){return e.buffer})):r.ready.then((function(){const t=new ArrayBuffer(o*s);return r.decodeGltfBuffer(new Uint8Array(t),o,s,A,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=gt.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||void 0===i.mesh)return null;const n=t.meshes[i.mesh];for(const e of n.primitives)if(e.mode!==mt.TRIANGLES&&e.mode!==mt.TRIANGLE_STRIP&&e.mode!==mt.TRIANGLE_FAN&&void 0!==e.mode)return null;const r=i.extensions[this.name].attributes,o=[],s={};for(const e in r)o.push(this.parser.getDependency("accessor",r[e]).then((t=>(s[e]=t,s[e]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then((e=>{const t=e.pop(),i=t.isGroup?t.children:[t],n=e[0].count,r=[];for(const e of i){const t=new d,i=new f,o=new I,A=new f(1,1,1),a=new m(e.geometry,e.material,n);for(let e=0;e<n;e++)s.TRANSLATION&&i.fromBufferAttribute(s.TRANSLATION,e),s.ROTATION&&o.fromBufferAttribute(s.ROTATION,e),s.SCALE&&A.fromBufferAttribute(s.SCALE,e),a.setMatrixAt(e,t.compose(i,o,A));for(const t in s)if("_COLOR_0"===t){const e=s[t];a.instanceColor=new b(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,s[t]);C.prototype.copy.call(a,e),this.parser.assignFinalMaterial(a),r.push(a)}return t.isGroup?(t.clear(),t.add(...r),t):r[0]})))}}const ut="glTF",dt=1313821514,ft=5130562;class GLTFBinaryExtension{constructor(e){this.name=gt.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==ut)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const n=this.header.length-12,r=new DataView(e,12);let o=0;for(;o<n;){const t=r.getUint32(o,!0);o+=4;const n=r.getUint32(o,!0);if(o+=4,n===dt){const n=new Uint8Array(e,12+o,t);this.content=i.decode(n)}else if(n===ft){const i=12+o;this.body=e.slice(i,i+t)}o+=t}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class GLTFDracoMeshCompressionExtension{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=gt.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,n=this.dracoLoader,r=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,s={},A={},a={};for(const e in o){const t=Et[e]||e.toLowerCase();s[t]=o[e]}for(const t in e.attributes){const n=Et[t]||t.toLowerCase();if(void 0!==o[t]){const r=i.accessors[e.attributes[t]],o=bt[r.componentType];a[n]=o.name,A[n]=!0===r.normalized}}return t.getDependency("bufferView",r).then((function(e){return new Promise((function(t,i){n.decodeDracoFile(e,(function(e){for(const t in e.attributes){const i=e.attributes[t],n=A[t];void 0!==n&&(i.normalized=n)}t(e)}),s,a,c,i)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=gt.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return void 0!==t.texCoord&&t.texCoord!==e.channel||void 0!==t.offset||void 0!==t.rotation||void 0!==t.scale?(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e):e}}class GLTFMeshQuantizationExtension{constructor(){this.name=gt.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends pe{constructor(e,t,i,n){super(e,t,i,n)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,n=this.valueSize,r=e*n*3+n;for(let e=0;e!==n;e++)t[e]=i[r+e];return t}interpolate_(e,t,i,n){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,A=2*s,a=3*s,l=n-t,c=(i-t)/l,p=c*c,h=p*c,g=e*a,u=g-a,d=-2*h+3*p,f=h-p,I=1-d,m=f-p+c;for(let e=0;e!==s;e++){const t=o[u+e+s],i=o[u+e+A]*l,n=o[g+e+s],a=o[g+e]*l;r[e]=I*t+m*i+d*n+f*a}return r}}const It=new I;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,i,n){const r=super.interpolate_(e,t,i,n);return It.fromArray(r).normalize().toArray(r),r}}const mt={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},bt={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Ct={9728:L,9729:M,9984:S,9985:D,9986:v,9987:P},Bt={33071:k,33648:_,10497:T},yt={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Et={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},xt={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},Qt={CUBICSPLINE:void 0,LINEAR:re,STEP:ne},wt="OPAQUE",Pt="MASK",vt="BLEND";function addUnknownExtensionsToUserData(e,t,i){for(const n in i.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=i.extensions[n])}function assignExtrasToUserData(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function updateMorphTargets(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let i=0,n=t.weights.length;i<n;i++)e.morphTargetInfluences[i]=t.weights[i];if(t.extras&&Array.isArray(t.extras.targetNames)){const i=t.extras.targetNames;if(e.morphTargetInfluences.length===i.length){e.morphTargetDictionary={};for(let t=0,n=i.length;t<n;t++)e.morphTargetDictionary[i[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function createPrimitiveKey(e){let t;const i=e.extensions&&e.extensions[gt.KHR_DRACO_MESH_COMPRESSION];if(t=i?"draco:"+i.bufferView+":"+i.indices+":"+createAttributesKey(i.attributes):e.indices+":"+createAttributesKey(e.attributes)+":"+e.mode,void 0!==e.targets)for(let i=0,n=e.targets.length;i<n;i++)t+=":"+createAttributesKey(e.targets[i]);return t}function createAttributesKey(e){let t="";const i=Object.keys(e).sort();for(let n=0,r=i.length;n<r;n++)t+=i[n]+":"+e[i[n]]+";";return t}function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const Dt=new d;class GLTFParser{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new GLTFRegistry,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,n=-1,r=!1,o=-1;if("undefined"!=typeof navigator){const e=navigator.userAgent;i=!0===/^((?!chrome|android).)*safari/i.test(e);const t=e.match(/Version\/(\d+)/);n=i&&t?parseInt(t[1],10):-1,r=e.indexOf("Firefox")>-1,o=r?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||i&&n<17||r&&o<98?this.textureLoader=new B(this.options.manager):this.textureLoader=new y(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new s(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,n=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])})).then((function(t){const o={scene:t[0][n.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:n.asset,parser:i,userData:{}};return addUnknownExtensionsToUserData(r,o,n),assignExtrasToUserData(o,n),Promise.all(i._invokeAll((function(e){return e.afterRoot&&e.afterRoot(o)}))).then((function(){for(const e of o.scenes)e.updateMatrixWorld();e(o)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i].joints;for(let t=0,i=n.length;t<i;t++)e[n[t]].isBone=!0}for(let t=0,n=e.length;t<n;t++){const n=e[t];void 0!==n.mesh&&(this._addNodeRef(this.meshCache,n.mesh),void 0!==n.skin&&(i[n.mesh].isSkinnedMesh=!0)),void 0!==n.camera&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,i){if(e.refs[t]<=1)return i;const n=i.clone(),updateMappings=(e,t)=>{const i=this.associations.get(e);null!=i&&this.associations.set(t,i);for(const[i,n]of e.children.entries())updateMappings(n,t.children[i])};return updateMappings(i,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const n=e(t[i]);if(n)return n}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let n=0;n<t.length;n++){const r=e(t[n]);r&&i.push(r)}return i}getDependency(e,t){const i=e+":"+t;let n=this.cache.get(i);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":n=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":n=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":n=this.loadCamera(t);break;default:if(n=this._invokeOne((function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)})),!n)throw new Error("Unknown type: "+e)}this.cache.add(i,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,n=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(n.map((function(t,n){return i.getDependency(e,n)}))),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],i=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[gt.KHR_BINARY_GLTF].body);const n=this.options;return new Promise((function(e,r){i.load(o.resolveURL(t.uri,n.path),e,void 0,(function(){r(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then((function(e){const i=t.byteLength||0,n=t.byteOffset||0;return e.slice(n,n+i)}))}loadAccessor(e){const t=this,i=this.json,n=this.json.accessors[e];if(void 0===n.bufferView&&void 0===n.sparse){const e=yt[n.type],t=bt[n.componentType],i=!0===n.normalized,r=new t(n.count*e);return Promise.resolve(new E(r,e,i))}const r=[];return void 0!==n.bufferView?r.push(this.getDependency("bufferView",n.bufferView)):r.push(null),void 0!==n.sparse&&(r.push(this.getDependency("bufferView",n.sparse.indices.bufferView)),r.push(this.getDependency("bufferView",n.sparse.values.bufferView))),Promise.all(r).then((function(e){const r=e[0],o=yt[n.type],s=bt[n.componentType],A=s.BYTES_PER_ELEMENT,a=A*o,l=n.byteOffset||0,c=void 0!==n.bufferView?i.bufferViews[n.bufferView].byteStride:void 0,p=!0===n.normalized;let h,g;if(c&&c!==a){const e=Math.floor(l/c),i="InterleavedBuffer:"+n.bufferView+":"+n.componentType+":"+e+":"+n.count;let a=t.cache.get(i);a||(h=new s(r,e*c,n.count*c/A),a=new x(h,c/A),t.cache.add(i,a)),g=new w(a,o,l%c/A,p)}else h=null===r?new s(n.count*o):new s(r,l,n.count*o),g=new E(h,o,p);if(void 0!==n.sparse){const t=yt.SCALAR,i=bt[n.sparse.indices.componentType],A=n.sparse.indices.byteOffset||0,a=n.sparse.values.byteOffset||0,l=new i(e[1],A,n.sparse.count*t),c=new s(e[2],a,n.sparse.count*o);null!==r&&(g=new E(g.array.slice(),g.itemSize,g.normalized));for(let e=0,t=l.length;e<t;e++){const t=l[e];if(g.setX(t,c[e*o]),o>=2&&g.setY(t,c[e*o+1]),o>=3&&g.setZ(t,c[e*o+2]),o>=4&&g.setW(t,c[e*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return g}))}loadTexture(e){const t=this.json,i=this.options,n=t.textures[e].source,r=t.images[n];let o=this.textureLoader;if(r.uri){const e=i.manager.getHandler(r.uri);null!==e&&(o=e)}return this.loadTextureImage(e,n,o)}loadTextureImage(e,t,i){const n=this,r=this.json,o=r.textures[e],s=r.images[t],A=(s.uri||s.bufferView)+":"+o.sampler;if(this.textureCache[A])return this.textureCache[A];const a=this.loadImageSource(t,i).then((function(t){t.flipY=!1,t.name=o.name||s.name||"",""===t.name&&"string"==typeof s.uri&&!1===s.uri.startsWith("data:image/")&&(t.name=s.uri);const i=(r.samplers||{})[o.sampler]||{};return t.magFilter=Ct[i.magFilter]||M,t.minFilter=Ct[i.minFilter]||P,t.wrapS=Bt[i.wrapS]||T,t.wrapT=Bt[i.wrapT]||T,n.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[A]=a,a}loadImageSource(e,t){const i=this,n=this.json,r=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const s=n.images[e],A=self.URL||self.webkitURL;let a=s.uri||"",l=!1;if(void 0!==s.bufferView)a=i.getDependency("bufferView",s.bufferView).then((function(e){l=!0;const t=new Blob([e],{type:s.mimeType});return a=A.createObjectURL(t),a}));else if(void 0===s.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const c=Promise.resolve(a).then((function(e){return new Promise((function(i,n){let s=i;!0===t.isImageBitmapLoader&&(s=function(e){const t=new oe(e);t.needsUpdate=!0,i(t)}),t.load(o.resolveURL(e,r.path),s,void 0,n)}))})).then((function(e){return!0===l&&A.revokeObjectURL(a),assignExtrasToUserData(e,s),e.userData.mimeType=s.mimeType||function getImageURIMimeType(e){return e.search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"}(s.uri),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),e}));return this.sourceCache[e]=c,c}assignTexture(e,t,i,n){const r=this;return this.getDependency("texture",i.index).then((function(o){if(!o)return null;if(void 0!==i.texCoord&&i.texCoord>0&&((o=o.clone()).channel=i.texCoord),r.extensions[gt.KHR_TEXTURE_TRANSFORM]){const e=void 0!==i.extensions?i.extensions[gt.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=r.associations.get(o);o=r.extensions[gt.KHR_TEXTURE_TRANSFORM].extendTexture(o,e),r.associations.set(o,t)}}return void 0!==n&&(o.colorSpace=n),e[t]=o,o}))}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const n=void 0===t.attributes.tangent,r=void 0!==t.attributes.color,o=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new F,R.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,t.sizeAttenuation=!1,this.cache.add(e,t)),i=t}else if(e.isLine){const e="LineBasicMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new N,R.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,this.cache.add(e,t)),i=t}if(n||r||o){let e="ClonedMaterial:"+i.uuid+":";n&&(e+="derivative-tangents:"),r&&(e+="vertex-colors:"),o&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=i.clone(),r&&(t.vertexColors=!0),o&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(i))),i=t}e.material=i}getMaterialType(){return G}loadMaterial(e){const t=this,i=this.json,n=this.extensions,r=i.materials[e];let o;const s={},A=[];if((r.extensions||{})[gt.KHR_MATERIALS_UNLIT]){const e=n[gt.KHR_MATERIALS_UNLIT];o=e.getMaterialType(),A.push(e.extendParams(s,r,t))}else{const i=r.pbrMetallicRoughness||{};if(s.color=new l(1,1,1),s.opacity=1,Array.isArray(i.baseColorFactor)){const e=i.baseColorFactor;s.color.setRGB(e[0],e[1],e[2],c),s.opacity=e[3]}void 0!==i.baseColorTexture&&A.push(t.assignTexture(s,"map",i.baseColorTexture,p)),s.metalness=void 0!==i.metallicFactor?i.metallicFactor:1,s.roughness=void 0!==i.roughnessFactor?i.roughnessFactor:1,void 0!==i.metallicRoughnessTexture&&(A.push(t.assignTexture(s,"metalnessMap",i.metallicRoughnessTexture)),A.push(t.assignTexture(s,"roughnessMap",i.metallicRoughnessTexture))),o=this._invokeOne((function(t){return t.getMaterialType&&t.getMaterialType(e)})),A.push(Promise.all(this._invokeAll((function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,s)}))))}!0===r.doubleSided&&(s.side=O);const h=r.alphaMode||wt;if(h===vt?(s.transparent=!0,s.depthWrite=!1):(s.transparent=!1,h===Pt&&(s.alphaTest=void 0!==r.alphaCutoff?r.alphaCutoff:.5)),void 0!==r.normalTexture&&o!==Y&&(A.push(t.assignTexture(s,"normalMap",r.normalTexture)),s.normalScale=new a(1,1),void 0!==r.normalTexture.scale)){const e=r.normalTexture.scale;s.normalScale.set(e,e)}if(void 0!==r.occlusionTexture&&o!==Y&&(A.push(t.assignTexture(s,"aoMap",r.occlusionTexture)),void 0!==r.occlusionTexture.strength&&(s.aoMapIntensity=r.occlusionTexture.strength)),void 0!==r.emissiveFactor&&o!==Y){const e=r.emissiveFactor;s.emissive=(new l).setRGB(e[0],e[1],e[2],c)}return void 0!==r.emissiveTexture&&o!==Y&&A.push(t.assignTexture(s,"emissiveMap",r.emissiveTexture,p)),Promise.all(A).then((function(){const i=new o(s);return r.name&&(i.name=r.name),assignExtrasToUserData(i,r),t.associations.set(i,{materials:e}),r.extensions&&addUnknownExtensionsToUserData(n,i,r),i}))}createUniqueName(e){const t=U.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,n=this.primitiveCache;function createDracoPrimitive(e){return i[gt.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(i){return addPrimitiveAttributes(i,e,t)}))}const r=[];for(let i=0,o=e.length;i<o;i++){const o=e[i],s=createPrimitiveKey(o),A=n[s];if(A)r.push(A.promise);else{let e;e=o.extensions&&o.extensions[gt.KHR_DRACO_MESH_COMPRESSION]?createDracoPrimitive(o):addPrimitiveAttributes(new X,o,t),n[s]={primitive:o,promise:e},r.push(e)}}return Promise.all(r)}loadMesh(e){const t=this,r=this.json,o=this.extensions,s=r.meshes[e],A=s.primitives,a=[];for(let e=0,t=A.length;e<t;e++){const t=void 0===A[e].material?(void 0===(l=this.cache).DefaultMaterial&&(l.DefaultMaterial=new G({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:ce})),l.DefaultMaterial):this.getDependency("material",A[e].material);a.push(t)}var l;return a.push(t.loadGeometries(A)),Promise.all(a).then((function(r){const a=r.slice(0,r.length-1),l=r[r.length-1],c=[];for(let r=0,p=l.length;r<p;r++){const p=l[r],h=A[r];let g;const u=a[r];if(h.mode===mt.TRIANGLES||h.mode===mt.TRIANGLE_STRIP||h.mode===mt.TRIANGLE_FAN||void 0===h.mode)g=!0===s.isSkinnedMesh?new q(p,u):new H(p,u),!0===g.isSkinnedMesh&&g.normalizeSkinWeights(),h.mode===mt.TRIANGLE_STRIP?g.geometry=toTrianglesDrawMode(g.geometry,n):h.mode===mt.TRIANGLE_FAN&&(g.geometry=toTrianglesDrawMode(g.geometry,i));else if(h.mode===mt.LINES)g=new z(p,u);else if(h.mode===mt.LINE_STRIP)g=new j(p,u);else if(h.mode===mt.LINE_LOOP)g=new J(p,u);else{if(h.mode!==mt.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);g=new W(p,u)}Object.keys(g.geometry.morphAttributes).length>0&&updateMorphTargets(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),assignExtrasToUserData(g,s),h.extensions&&addUnknownExtensionsToUserData(o,g,h),t.assignFinalMaterial(g),c.push(g)}for(let i=0,n=c.length;i<n;i++)t.associations.set(c[i],{meshes:e,primitives:i});if(1===c.length)return s.extensions&&addUnknownExtensionsToUserData(o,c[0],s),c[0];const p=new K;s.extensions&&addUnknownExtensionsToUserData(o,p,s),t.associations.set(p,{meshes:e});for(let e=0,t=c.length;e<t;e++)p.add(c[e]);return p}))}loadCamera(e){let t;const i=this.json.cameras[e],n=i[i.type];if(n)return"perspective"===i.type?t=new V(Z.radToDeg(n.yfov),n.aspectRatio||1,n.znear||1,n.zfar||2e6):"orthographic"===i.type&&(t=new $(-n.xmag,n.xmag,n.ymag,-n.ymag,n.znear,n.zfar)),i.name&&(t.name=this.createUniqueName(i.name)),assignExtrasToUserData(t,i),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],i=[];for(let e=0,n=t.joints.length;e<n;e++)i.push(this._loadNodeShallow(t.joints[e]));return void 0!==t.inverseBindMatrices?i.push(this.getDependency("accessor",t.inverseBindMatrices)):i.push(null),Promise.all(i).then((function(e){const i=e.pop(),n=e,r=[],o=[];for(let e=0,s=n.length;e<s;e++){const s=n[e];if(s){r.push(s);const t=new d;null!==i&&t.fromArray(i.array,16*e),o.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new ee(r,o)}))}loadAnimation(e){const t=this.json,i=this,n=t.animations[e],r=n.name?n.name:"animation_"+e,o=[],s=[],A=[],a=[],l=[];for(let e=0,t=n.channels.length;e<t;e++){const t=n.channels[e],i=n.samplers[t.sampler],r=t.target,c=r.node,p=void 0!==n.parameters?n.parameters[i.input]:i.input,h=void 0!==n.parameters?n.parameters[i.output]:i.output;void 0!==r.node&&(o.push(this.getDependency("node",c)),s.push(this.getDependency("accessor",p)),A.push(this.getDependency("accessor",h)),a.push(i),l.push(r))}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(A),Promise.all(a),Promise.all(l)]).then((function(e){const t=e[0],n=e[1],o=e[2],s=e[3],A=e[4],a=[];for(let e=0,r=t.length;e<r;e++){const r=t[e],l=n[e],c=o[e],p=s[e],h=A[e];if(void 0===r)continue;r.updateMatrix&&r.updateMatrix();const g=i._createAnimationTracks(r,l,c,p,h);if(g)for(let e=0;e<g.length;e++)a.push(g[e])}return new te(r,void 0,a)}))}createNodeMesh(e){const t=this.json,i=this,n=t.nodes[e];return void 0===n.mesh?null:i.getDependency("mesh",n.mesh).then((function(e){const t=i._getNodeRef(i.meshCache,n.mesh,e);return void 0!==n.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,i=n.weights.length;t<i;t++)e.morphTargetInfluences[t]=n.weights[t]})),t}))}loadNode(e){const t=this,i=this.json.nodes[e],n=t._loadNodeShallow(e),r=[],o=i.children||[];for(let e=0,i=o.length;e<i;e++)r.push(t.getDependency("node",o[e]));const s=void 0===i.skin?Promise.resolve(null):t.getDependency("skin",i.skin);return Promise.all([n,Promise.all(r),s]).then((function(e){const t=e[0],i=e[1],n=e[2];null!==n&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(n,Dt)}));for(let e=0,n=i.length;e<n;e++)t.add(i[e]);return t}))}_loadNodeShallow(e){const t=this.json,i=this.extensions,n=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const r=t.nodes[e],o=r.name?n.createUniqueName(r.name):"",s=[],A=n._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return A&&s.push(A),void 0!==r.camera&&s.push(n.getDependency("camera",r.camera).then((function(e){return n._getNodeRef(n.cameraCache,r.camera,e)}))),n._invokeAll((function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)})).forEach((function(e){s.push(e)})),this.nodeCache[e]=Promise.all(s).then((function(t){let s;if(s=!0===r.isBone?new ie:t.length>1?new K:1===t.length?t[0]:new C,s!==t[0])for(let e=0,i=t.length;e<i;e++)s.add(t[e]);if(r.name&&(s.userData.name=r.name,s.name=o),assignExtrasToUserData(s,r),r.extensions&&addUnknownExtensionsToUserData(i,s,r),void 0!==r.matrix){const e=new d;e.fromArray(r.matrix),s.applyMatrix4(e)}else void 0!==r.translation&&s.position.fromArray(r.translation),void 0!==r.rotation&&s.quaternion.fromArray(r.rotation),void 0!==r.scale&&s.scale.fromArray(r.scale);return n.associations.has(s)||n.associations.set(s,{}),n.associations.get(s).nodes=e,s})),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],n=this,r=new K;i.name&&(r.name=n.createUniqueName(i.name)),assignExtrasToUserData(r,i),i.extensions&&addUnknownExtensionsToUserData(t,r,i);const o=i.nodes||[],s=[];for(let e=0,t=o.length;e<t;e++)s.push(n.getDependency("node",o[e]));return Promise.all(s).then((function(e){for(let t=0,i=e.length;t<i;t++)r.add(e[t]);return n.associations=(e=>{const t=new Map;for(const[e,i]of n.associations)(e instanceof R||e instanceof oe)&&t.set(e,i);return e.traverse((e=>{const i=n.associations.get(e);null!=i&&t.set(e,i)})),t})(r),r}))}_createAnimationTracks(e,t,i,n,r){const o=[],s=e.name?e.name:e.uuid,A=[];let a;switch(xt[r.path]===xt.weights?e.traverse((function(e){e.morphTargetInfluences&&A.push(e.name?e.name:e.uuid)})):A.push(s),xt[r.path]){case xt.weights:a=Ae;break;case xt.rotation:a=ae;break;case xt.position:case xt.scale:a=se;break;default:if(1===i.itemSize)a=Ae;else a=se}const l=void 0!==n.interpolation?Qt[n.interpolation]:re,c=this._getArrayFromAccessor(i);for(let e=0,i=A.length;e<i;e++){const i=new a(A[e]+"."+xt[r.path],t.array,c,l);"CUBICSPLINE"===n.interpolation&&this._createCubicSplineTrackInterpolant(i),o.push(i)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const e=getNormalizedComponentScale(t.constructor),i=new Float32Array(t.length);for(let n=0,r=t.length;n<r;n++)i[n]=t[n]*e;t=i}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function InterpolantFactoryMethodGLTFCubicSpline(e){return new(this instanceof ae?GLTFCubicSplineQuaternionInterpolant:GLTFCubicSplineInterpolant)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function addPrimitiveAttributes(e,t,i){const n=t.attributes,r=[];function assignAttributeAccessor(t,n){return i.getDependency("accessor",t).then((function(t){e.setAttribute(n,t)}))}for(const t in n){const i=Et[t]||t.toLowerCase();i in e.attributes||r.push(assignAttributeAccessor(n[t],i))}if(void 0!==t.indices&&!e.index){const n=i.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));r.push(n)}return le.workingColorSpace!==c&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function computeBounds(e,t,i){const n=t.attributes,r=new he;if(void 0===n.POSITION)return;{const e=i.json.accessors[n.POSITION],t=e.min,o=e.max;if(void 0===t||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(r.set(new f(t[0],t[1],t[2]),new f(o[0],o[1],o[2])),e.normalized){const t=getNormalizedComponentScale(bt[e.componentType]);r.min.multiplyScalar(t),r.max.multiplyScalar(t)}}const o=t.targets;if(void 0!==o){const e=new f,t=new f;for(let n=0,r=o.length;n<r;n++){const r=o[n];if(void 0!==r.POSITION){const n=i.json.accessors[r.POSITION],o=n.min,s=n.max;if(void 0!==o&&void 0!==s){if(t.setX(Math.max(Math.abs(o[0]),Math.abs(s[0]))),t.setY(Math.max(Math.abs(o[1]),Math.abs(s[1]))),t.setZ(Math.max(Math.abs(o[2]),Math.abs(s[2]))),n.normalized){const e=getNormalizedComponentScale(bt[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}r.expandByVector(e)}e.boundingBox=r;const s=new ge;r.getCenter(s.center),s.radius=r.min.distanceTo(r.max)/2,e.boundingSphere=s}(e,t,i),Promise.all(r).then((function(){return void 0!==t.targets?function addMorphTargets(e,t,i){let n=!1,r=!1,o=!1;for(let e=0,i=t.length;e<i;e++){const i=t[e];if(void 0!==i.POSITION&&(n=!0),void 0!==i.NORMAL&&(r=!0),void 0!==i.COLOR_0&&(o=!0),n&&r&&o)break}if(!n&&!r&&!o)return Promise.resolve(e);const s=[],A=[],a=[];for(let l=0,c=t.length;l<c;l++){const c=t[l];if(n){const t=void 0!==c.POSITION?i.getDependency("accessor",c.POSITION):e.attributes.position;s.push(t)}if(r){const t=void 0!==c.NORMAL?i.getDependency("accessor",c.NORMAL):e.attributes.normal;A.push(t)}if(o){const t=void 0!==c.COLOR_0?i.getDependency("accessor",c.COLOR_0):e.attributes.color;a.push(t)}}return Promise.all([Promise.all(s),Promise.all(A),Promise.all(a)]).then((function(t){const i=t[0],s=t[1],A=t[2];return n&&(e.morphAttributes.position=i),r&&(e.morphAttributes.normal=s),o&&(e.morphAttributes.color=A),e.morphTargetsRelative=!0,e}))}(e,t.targets,i):e}))}const St=new WeakMap;class DRACOLoader extends r{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,n){const r=new s(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,p,i).catch(i)}decodeDracoFile(e,t,i,n,r=c,o=()=>{}){const s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:r};return this.decodeGeometry(e,s).then(t).catch(o)}decodeGeometry(e,t){const i=JSON.stringify(t);if(St.has(e)){const t=St.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n;const r=this.workerNextTaskID++,o=e.byteLength,s=this._getWorker(r,o).then((i=>(n=i,new Promise(((i,o)=>{n._callbacks[r]={resolve:i,reject:o},n.postMessage({type:"decode",id:r,taskConfig:t,buffer:e},[e])}))))).then((e=>this._createGeometry(e.geometry)));return s.catch((()=>!0)).then((()=>{n&&r&&this._releaseTask(n,r)})),St.set(e,{key:i,promise:s}),s}_createGeometry(e){const t=new X;e.index&&t.setIndex(new E(e.index.array,1));for(let i=0;i<e.attributes.length;i++){const n=e.attributes[i],r=n.name,o=n.array,s=n.itemSize,A=new E(o,s);"color"===r&&(this._assignVertexColorSpace(A,n.vertexColorSpace),A.normalized=o instanceof Float32Array==!1),t.setAttribute(r,A)}return t}_assignVertexColorSpace(e,t){if(t!==p)return;const i=new l;for(let t=0,n=e.count;t<n;t++)i.fromBufferAttribute(e,t).convertSRGBToLinear(),e.setXYZ(t,i.r,i.g,i.b)}_loadLibrary(e,t){const i=new s(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise(((t,n)=>{i.load(e,t,void 0,n)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then((t=>{const i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);const n=DRACOWorker.toString(),r=["/* draco decoder */",i,"","/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r]))})),this.decoderPending}_getWorker(e,t){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){const i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort((function(e,t){return e._taskLoad>t._taskLoad?-1:1}));const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i}))}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map((e=>e._taskLoad)))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function DRACOWorker(){let e,t;function decodeAttribute(e,t,i,n,r,o){const s=o.num_components(),A=i.num_points()*s,a=A*r.BYTES_PER_ELEMENT,l=function getDracoDataType(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,r),c=e._malloc(a);t.GetAttributeDataArrayForAllPoints(i,o,l,a,c);const p=new r(e.HEAPF32.buffer,c,A).slice();return e._free(c),{name:n,array:p,itemSize:s}}onmessage=function(i){const n=i.data;switch(n.type){case"init":e=n.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const i=n.buffer,r=n.taskConfig;t.then((e=>{const t=e.draco,o=new t.Decoder;try{const e=function decodeGeometry(e,t,i,n){const r=n.attributeIDs,o=n.attributeTypes;let s,A;const a=t.GetEncodedGeometryType(i);if(a===e.TRIANGULAR_MESH)s=new e.Mesh,A=t.DecodeArrayToMesh(i,i.byteLength,s);else{if(a!==e.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");s=new e.PointCloud,A=t.DecodeArrayToPointCloud(i,i.byteLength,s)}if(!A.ok()||0===s.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+A.error_msg());const l={index:null,attributes:[]};for(const i in r){const A=self[o[i]];let a,c;if(n.useUniqueIDs)c=r[i],a=t.GetAttributeByUniqueId(s,c);else{if(c=t.GetAttributeId(s,e[r[i]]),-1===c)continue;a=t.GetAttribute(s,c)}const p=decodeAttribute(e,t,s,i,A,a);"color"===i&&(p.vertexColorSpace=n.vertexColorSpace),l.attributes.push(p)}a===e.TRIANGULAR_MESH&&(l.index=function decodeIndex(e,t,i){const n=i.num_faces(),r=3*n,o=4*r,s=e._malloc(o);t.GetTrianglesUInt32Array(i,o,s);const A=new Uint32Array(e.HEAPF32.buffer,s,r).slice();return e._free(s),{array:A,itemSize:1}}(e,t,s));return e.destroy(s),l}(t,o,new Int8Array(i),r),s=e.attributes.map((e=>e.array.buffer));e.index&&s.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(o)}}))}}}class WorkerPool{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const i=this.workersResolve[e];if(i&&i(t),this.queue.length){const{resolve:t,msg:i,transfer:n}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,n)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise((i=>{const n=this._getIdleWorker();-1!==n?(this._initWorker(n),this.workerStatus|=1<<n,this.workersResolve[n]=i,this.workers[n].postMessage(e,t)):this.queue.push({resolve:i,msg:e,transfer:t})}))}dispose(){this.workers.forEach((e=>e.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const Mt=9,Lt=15,Tt=16,_t=22,kt=37,Ft=43,Rt=76,Nt=83,Gt=97,Ot=100,Yt=103,Ut=109,Xt=165,qt=166;class Si{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Ii{constructor(e,t,i,n){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=n,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_skip(e){return this._offset+=e,this}_scan(e,t=0){const i=this._offset;let n=0;for(;this._dataView.getUint8(this._offset)!==t&&n<e;)n++,this._offset++;return n<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,n)}}const Ht=[171,75,84,88,32,50,48,187,13,10,26,10];function Ei(e){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(e):Buffer.from(e).toString("utf8")}let zt,jt,Jt;const Wt={env:{emscripten_notify_memory_growth:function(e){Jt=new Uint8Array(jt.exports.memory.buffer)}}};class Q{init(){return zt||(zt="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+Kt).then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,Wt))).then(this._init):WebAssembly.instantiate(Buffer.from(Kt,"base64"),Wt).then(this._init),zt)}_init(e){jt=e.instance,Wt.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!jt)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,n=jt.exports.malloc(i);Jt.set(e,n),t=t||Number(jt.exports.ZSTD_findDecompressedSize(n,i));const r=jt.exports.malloc(t),o=jt.exports.ZSTD_decompress(r,t,n,i),s=Jt.slice(r,r+o);return jt.exports.free(n),jt.exports.free(r),s}}const Kt="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",Vt=new WeakMap;let Zt,$t=0;class KTX2Loader extends r{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new WorkerPool,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),etc1Supported:await e.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return!0===e.isWebGPURenderer?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bptc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new s(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),i=new s(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const n=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,n]).then((([e,t])=>{const i=KTX2Loader.BasisWorker.toString(),n=["/* constants */","let _EngineFormat = "+JSON.stringify(KTX2Loader.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(KTX2Loader.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(KTX2Loader.BasisFormat),"/* basis_transcoder.js */",e,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([n])),this.transcoderBinary=t,this.workerPool.setWorkerCreator((()=>{const e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:"init",config:this.workerConfig,transcoderBinary:t},[t]),e}))})),$t>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),$t++}return this.transcoderPending}load(e,t,i,n){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const r=new s(this.manager);r.setResponseType("arraybuffer"),r.setWithCredentials(this.withCredentials),r.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Vt.has(e)){return Vt.get(e).promise.then(t).catch(i)}this._createTexture(e).then((e=>t?t(e):null)).catch(i)}_createTextureFrom(e,t){const{faces:i,width:n,height:r,format:o,type:s,error:A,dfdFlags:a}=e;if("error"===s)return Promise.reject(A);let l;if(6===t.faceCount)l=new ue(i,o,de);else{const e=i[0].mipmaps;l=t.layerCount>1?new fe(e,n,r,t.layerCount,o,de):new Ie(e,n,r,o,de)}return l.minFilter=1===i[0].mipmaps.length?M:P,l.magFilter=M,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=parseColorSpace(t),l.premultiplyAlpha=!!(1&a),l}async _createTexture(e,t={}){const i=function Pi(e){const t=new Uint8Array(e.buffer,e.byteOffset,Ht.length);if(t[0]!==Ht[0]||t[1]!==Ht[1]||t[2]!==Ht[2]||t[3]!==Ht[3]||t[4]!==Ht[4]||t[5]!==Ht[5]||t[6]!==Ht[6]||t[7]!==Ht[7]||t[8]!==Ht[8]||t[9]!==Ht[9]||t[10]!==Ht[10]||t[11]!==Ht[11])throw new Error("Missing KTX 2.0 identifier.");const i=new Si,n=17*Uint32Array.BYTES_PER_ELEMENT,r=new Ii(e,Ht.length,n,!0);i.vkFormat=r._nextUint32(),i.typeSize=r._nextUint32(),i.pixelWidth=r._nextUint32(),i.pixelHeight=r._nextUint32(),i.pixelDepth=r._nextUint32(),i.layerCount=r._nextUint32(),i.faceCount=r._nextUint32();const o=r._nextUint32();i.supercompressionScheme=r._nextUint32();const s=r._nextUint32(),A=r._nextUint32(),a=r._nextUint32(),l=r._nextUint32(),c=r._nextUint64(),p=r._nextUint64(),h=new Ii(e,Ht.length+n,3*o*8,!0);for(let t=0;t<o;t++)i.levels.push({levelData:new Uint8Array(e.buffer,e.byteOffset+h._nextUint64(),h._nextUint64()),uncompressedByteLength:h._nextUint64()});const g=new Ii(e,s,A,!0),u={vendorId:g._skip(4)._nextUint16(),descriptorType:g._nextUint16(),versionNumber:g._nextUint16(),descriptorBlockSize:g._nextUint16(),colorModel:g._nextUint8(),colorPrimaries:g._nextUint8(),transferFunction:g._nextUint8(),flags:g._nextUint8(),texelBlockDimension:[g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8()],bytesPlane:[g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8()],samples:[]},d=(u.descriptorBlockSize/4-6)/4;for(let e=0;e<d;e++){const t={bitOffset:g._nextUint16(),bitLength:g._nextUint8(),channelType:g._nextUint8(),samplePosition:[g._nextUint8(),g._nextUint8(),g._nextUint8(),g._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&t.channelType?(t.sampleLower=g._nextInt32(),t.sampleUpper=g._nextInt32()):(t.sampleLower=g._nextUint32(),t.sampleUpper=g._nextUint32()),u.samples[e]=t}i.dataFormatDescriptor.length=0,i.dataFormatDescriptor.push(u);const f=new Ii(e,a,l,!0);for(;f._offset<l;){const e=f._nextUint32(),t=f._scan(e),n=Ei(t),r=f._scan(e-t.byteLength);i.keyValue[n]=n.match(/^ktx/i)?Ei(r):r,f._offset%4&&f._skip(4-f._offset%4)}if(p<=0)return i;const I=new Ii(e,c,p,!0),m=I._nextUint16(),b=I._nextUint16(),C=I._nextUint32(),B=I._nextUint32(),y=I._nextUint32(),E=I._nextUint32(),x=[];for(let e=0;e<o;e++)x.push({imageFlags:I._nextUint32(),rgbSliceByteOffset:I._nextUint32(),rgbSliceByteLength:I._nextUint32(),alphaSliceByteOffset:I._nextUint32(),alphaSliceByteLength:I._nextUint32()});const w=c+I._offset,P=w+C,v=P+B,D=v+y,S=new Uint8Array(e.buffer,e.byteOffset+w,C),M=new Uint8Array(e.buffer,e.byteOffset+P,B),L=new Uint8Array(e.buffer,e.byteOffset+v,y),T=new Uint8Array(e.buffer,e.byteOffset+D,E);return i.globalData={endpointCount:m,selectorCount:b,imageDescs:x,endpointsData:S,selectorsData:M,tablesData:L,extendedData:T},i}(new Uint8Array(e));if(0!==i.vkFormat)return async function createRawTexture(e){const{vkFormat:t}=e;if(void 0===ti[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let i;2===e.supercompressionScheme&&(Zt||(Zt=new Promise((async e=>{const t=new Q;await t.init(),e(t)}))),i=await Zt);const n=[];for(let r=0;r<e.levels.length;r++){const o=Math.max(1,e.pixelWidth>>r),s=Math.max(1,e.pixelHeight>>r),A=e.pixelDepth?Math.max(1,e.pixelDepth>>r):0,a=e.levels[r];let l,c;if(0===e.supercompressionScheme)l=a.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");l=i.decode(a.levelData,a.uncompressedByteLength)}c=ii[t]===we?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):ii[t]===Qe?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,n.push({data:c,width:o,height:s,depth:A})}let r;if(ei.has(ti[t]))r=0===e.pixelDepth?new Pe(n[0].data,e.pixelWidth,e.pixelHeight):new ve(n[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");r=new Ie(n,e.pixelWidth,e.pixelHeight)}return r.mipmaps=n,r.type=ii[t],r.format=ti[t],r.colorSpace=parseColorSpace(e),r.needsUpdate=!0,Promise.resolve(r)}(i);const n=t,r=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:n},[e]))).then((e=>this._createTextureFrom(e.data,i)));return Vt.set(e,{promise:r}),r}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),$t--,this}}KTX2Loader.BasisFormat={ETC1S:0,UASTC_4x4:1},KTX2Loader.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},KTX2Loader.EngineFormat={RGBAFormat:xe,RGBA_ASTC_4x4_Format:Re,RGBA_BPTC_Format:Fe,RGBA_ETC2_EAC_Format:ke,RGBA_PVRTC_4BPPV1_Format:_e,RGBA_S3TC_DXT5_Format:Te,RGB_ETC1_Format:Le,RGB_ETC2_Format:Me,RGB_PVRTC_4BPPV1_Format:Se,RGBA_S3TC_DXT1_Format:De},KTX2Loader.BasisWorker=function(){let e,t,i;const n=_EngineFormat,r=_TranscoderFormat,o=_BasisFormat;self.addEventListener("message",(function(s){const l=s.data;switch(l.type){case"init":e=l.config,function init(e){t=new Promise((t=>{i={wasmBinary:e,onRuntimeInitialized:t},BASIS(i)})).then((()=>{i.initializeBasis(),void 0===i.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}))}(l.transcoderBinary);break;case"transcode":t.then((()=>{try{const{faces:t,buffers:s,width:c,height:p,hasAlpha:h,format:g,dfdFlags:u}=function transcode(t){const s=new i.KTX2File(new Uint8Array(t));function cleanup(){s.close(),s.delete()}if(!s.isValid())throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const l=s.isUASTC()?o.UASTC_4x4:o.ETC1S,c=s.getWidth(),p=s.getHeight(),h=s.getLayers()||1,g=s.getLevels(),u=s.getFaces(),d=s.getHasAlpha(),f=s.getDFDFlags(),{transcoderFormat:I,engineFormat:m}=function getTranscoderFormat(t,i,s,l){let c,p;const h=t===o.ETC1S?A:a;for(let n=0;n<h.length;n++){const r=h[n];if(e[r.if]&&(r.basisFormat.includes(t)&&!(l&&r.transcoderFormat.length<2)&&(!r.needsPowerOfTwo||isPowerOfTwo(i)&&isPowerOfTwo(s))))return c=r.transcoderFormat[l?1:0],p=r.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:p}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=r.RGBA32,p=n.RGBAFormat,{transcoderFormat:c,engineFormat:p}}(l,c,p,d);if(!c||!p||!g)throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!s.startTranscoding())throw cleanup(),new Error("THREE.KTX2Loader: .startTranscoding failed");const b=[],C=[];for(let e=0;e<u;e++){const t=[];for(let i=0;i<g;i++){const n=[];let r,o;for(let t=0;t<h;t++){const A=s.getImageLevelInfo(i,t,e);0!==e||0!==i||0!==t||A.origWidth%4==0&&A.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),g>1?(r=A.origWidth,o=A.origHeight):(r=A.width,o=A.height);const a=new Uint8Array(s.getImageTranscodedSizeInBytes(i,t,0,I));if(!s.transcodeImage(a,i,t,e,I,0,-1,-1))throw cleanup(),new Error("THREE.KTX2Loader: .transcodeImage failed.");n.push(a)}const A=concat(n);t.push({data:A,width:r,height:o}),C.push(A.buffer)}b.push({mipmaps:t,width:c,height:p,format:m})}return cleanup(),{faces:b,buffers:C,width:c,height:p,hasAlpha:d,format:m,dfdFlags:f}}(l.buffer);self.postMessage({type:"transcode",id:l.id,faces:t,width:c,height:p,hasAlpha:h,format:g,dfdFlags:u},s)}catch(e){console.error(e),self.postMessage({type:"error",id:l.id,error:e.message})}}))}}));const s=[{if:"astcSupported",basisFormat:[o.UASTC_4x4],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.BC1,r.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.ETC1],engineFormat:[n.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[o.ETC1S,o.UASTC_4x4],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],A=s.sort((function(e,t){return e.priorityETC1S-t.priorityETC1S})),a=s.sort((function(e,t){return e.priorityUASTC-t.priorityUASTC}));function isPowerOfTwo(e){return e<=2||!(e&e-1)&&0!==e}function concat(e){if(1===e.length)return e[0];let t=0;for(let i=0;i<e.length;i++){t+=e[i].byteLength}const i=new Uint8Array(t);let n=0;for(let t=0;t<e.length;t++){const r=e[t];i.set(r,n),n+=r.byteLength}return i}};const ei=new Set([xe,Ee,ye]),ti={[Ut]:xe,[Gt]:xe,[kt]:xe,[Ft]:xe,[Yt]:Ee,[Nt]:Ee,[Tt]:Ee,[_t]:Ee,[Ot]:ye,[Rt]:ye,[Lt]:ye,[Mt]:ye,[qt]:Be,[Xt]:Be},ii={[Ut]:we,[Gt]:Qe,[kt]:de,[Ft]:de,[Yt]:we,[Nt]:Qe,[Tt]:de,[_t]:de,[Ot]:we,[Rt]:Qe,[Lt]:de,[Mt]:de,[qt]:de,[Xt]:de};function parseColorSpace(e){const t=e.dataFormatDescriptor[0];return 1===t.colorPrimaries?2===t.transferFunction?p:c:10===t.colorPrimaries?2===t.transferFunction?me:be:(0===t.colorPrimaries||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),Ce)}var ni=function(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if("object"!=typeof WebAssembly)return{supported:!1};var i,n=WebAssembly.validate(e)?"b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb":"b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",r=WebAssembly.instantiate(unpack(n),{}).then((function(e){(i=e.instance).exports.__wasm_call_ctors()}));function unpack(e){for(var i=new Uint8Array(e.length),n=0;n<e.length;++n){var r=e.charCodeAt(n);i[n]=r>96?r-97:r>64?r-39:r+4}var o=0;for(n=0;n<e.length;++n)i[o++]=i[n]<60?t[i[n]]:64*(i[n]-60)+i[++n];return i.buffer.slice(0,o)}function decode(e,t,n,r,o,s){var A=i.exports.sbrk,a=n+3&-4,l=A(a*r),c=A(o.length),p=new Uint8Array(i.exports.memory.buffer);p.set(o,c);var h=e(l,n,r,c,o.length);if(0==h&&s&&s(l,a,r),t.set(p.subarray(l,l+n*r)),A(l-A(0)),0!=h)throw new Error("Malformed buffer data: "+h)}var o={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},s={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},A=[],a=0;function createWorker(e){var t={object:new Worker(e),pending:0,requests:{}};return t.object.onmessage=function(e){var i=e.data;t.pending-=i.count,t.requests[i.id][i.action](i.value),delete t.requests[i.id]},t}function initWorkers(e){for(var t="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(unpack(n))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+decode.toString()+workerProcess.toString(),i=new Blob([t],{type:"text/javascript"}),r=URL.createObjectURL(i),o=0;o<e;++o)A[o]=createWorker(r);URL.revokeObjectURL(r)}function workerProcess(e){r.then((function(){var t=e.data;try{var n=new Uint8Array(t.count*t.size);decode(i.exports[t.mode],n,t.count,t.size,t.source,i.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:"resolve",value:n},[n.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:"reject",value:e})}}))}return{ready:r,supported:!0,useWorkers:function(e){initWorkers(e)},decodeVertexBuffer:function(e,t,n,r,s){decode(i.exports.meshopt_decodeVertexBuffer,e,t,n,r,i.exports[o[s]])},decodeIndexBuffer:function(e,t,n,r){decode(i.exports.meshopt_decodeIndexBuffer,e,t,n,r)},decodeIndexSequence:function(e,t,n,r){decode(i.exports.meshopt_decodeIndexSequence,e,t,n,r)},decodeGltfBuffer:function(e,t,n,r,A,a){decode(i.exports[s[A]],e,t,n,r,i.exports[o[a]])},decodeGltfBufferAsync:function(e,t,n,l,c){return A.length>0?function decodeWorker(e,t,i,n,r){for(var o=A[0],s=1;s<A.length;++s)A[s].pending<o.pending&&(o=A[s]);return new Promise((function(s,A){var l=new Uint8Array(i),c=a++;o.pending+=e,o.requests[c]={resolve:s,reject:A},o.object.postMessage({id:c,count:e,size:t,source:l,mode:n,filter:r},[l.buffer])}))}(e,t,n,s[l],o[c]):r.then((function(){var r=new Uint8Array(e*t);return decode(i.exports[s[l]],r,e,t,n,i.exports[o[c]]),r}))}}}();class TDSLoader extends r{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,t,i,n){const r=this,A=""===this.path?o.extractUrlBase(e):this.path,a=new s(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(i){try{t(r.parse(i,A))}catch(t){n?n(t):console.error(t),r.manager.itemError(e)}}),i,n)}parse(e,t){this.group=new K,this.materials=[],this.meshes=[],this.readFile(e,t);for(let e=0;e<this.meshes.length;e++)this.group.add(this.meshes[e]);return this.group}readFile(e,t){const i=new DataView(e),n=new Chunk(i,0,this.debugMessage);if(n.id===oi||n.id===si||n.id===ri){let e=n.readChunk();for(;e;){if(e.id===Ai){const t=e.readDWord();this.debugMessage("3DS file version: "+t)}else e.id===ui?this.readMeshData(e,t):this.debugMessage("Unknown main chunk: "+e.hexId);e=n.readChunk()}}this.debugMessage("Parsed "+this.meshes.length+" meshes")}readMeshData(e,t){let i=e.readChunk();for(;i;){if(i.id===di){const e=+i.readDWord();this.debugMessage("Mesh Version: "+e)}else if(i.id===fi){const e=i.readFloat();this.debugMessage("Master scale: "+e),this.group.scale.set(e,e,e)}else i.id===Yi?(this.debugMessage("Named Object"),this.readNamedObject(i)):i.id===mi?(this.debugMessage("Material"),this.readMaterialEntry(i,t)):this.debugMessage("Unknown MDATA chunk: "+i.hexId);i=e.readChunk()}}readNamedObject(e){const t=e.readString();let i=e.readChunk();for(;i;){if(i.id===Ui){const e=this.readMesh(i);e.name=t,this.meshes.push(e)}else this.debugMessage("Unknown named object chunk: "+i.hexId);i=e.readChunk()}}readMaterialEntry(e,t){let i=e.readChunk();const n=new Ne;for(;i;){if(i.id===bi)n.name=i.readString(),this.debugMessage(" Name: "+n.name);else if(i.id===Di)this.debugMessage(" Wireframe"),n.wireframe=!0;else if(i.id===Mi){const e=i.readByte();n.wireframeLinewidth=e,this.debugMessage(" Wireframe Thickness: "+e)}else if(i.id===wi)n.side=O,this.debugMessage(" DoubleSided");else if(i.id===vi)this.debugMessage(" Additive Blending"),n.blending=Ge;else if(i.id===Bi)this.debugMessage(" Diffuse Color"),n.color=this.readColor(i);else if(i.id===yi)this.debugMessage(" Specular Color"),n.specular=this.readColor(i);else if(i.id===Ci)this.debugMessage(" Ambient color"),n.color=this.readColor(i);else if(i.id===xi){const e=this.readPercentage(i);n.shininess=100*e,this.debugMessage(" Shininess : "+e)}else if(i.id===Qi){const e=this.readPercentage(i);n.opacity=1-e,this.debugMessage(" Transparency : "+e),n.transparent=n.opacity<1}else i.id===Li?(this.debugMessage(" ColorMap"),n.map=this.readMap(i,t)):i.id===_i?(this.debugMessage(" BumpMap"),n.bumpMap=this.readMap(i,t)):i.id===Ti?(this.debugMessage(" OpacityMap"),n.alphaMap=this.readMap(i,t)):i.id===ki?(this.debugMessage(" SpecularMap"),n.specularMap=this.readMap(i,t)):this.debugMessage(" Unknown material chunk: "+i.hexId);i=e.readChunk()}this.materials[n.name]=n}readMesh(e){let t=e.readChunk();const i=new X,n=new Ne,r=new H(i,n);for(r.name="mesh";t;){if(t.id===Xi){const e=t.readWord();this.debugMessage(" Vertex: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("position",new Oe(n,3))}else if(t.id===qi)this.readFaceArray(t,r);else if(t.id===zi){const e=t.readWord();this.debugMessage(" UV: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("uv",new Oe(n,2))}else if(t.id===ji){this.debugMessage(" Tranformation Matrix (TODO)");const e=[];for(let i=0;i<12;i++)e[i]=t.readFloat();const n=new d;n.elements[0]=e[0],n.elements[1]=e[6],n.elements[2]=e[3],n.elements[3]=e[9],n.elements[4]=e[2],n.elements[5]=e[8],n.elements[6]=e[5],n.elements[7]=e[11],n.elements[8]=e[1],n.elements[9]=e[7],n.elements[10]=e[4],n.elements[11]=e[10],n.elements[12]=0,n.elements[13]=0,n.elements[14]=0,n.elements[15]=1,n.transpose();const o=new d;o.copy(n).invert(),i.applyMatrix4(o),n.decompose(r.position,r.quaternion,r.scale)}else this.debugMessage(" Unknown mesh chunk: "+t.hexId);t=e.readChunk()}return i.computeVertexNormals(),r}readFaceArray(e,t){const i=e.readWord();this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(n);let r=0,o=0;for(;!e.endOfChunk;){const i=e.readChunk();if(i.id===Hi){this.debugMessage(" Material Group");const e=this.readMaterialGroup(i),n=3*e.index.length;t.geometry.addGroup(o,n,r),o+=n,r++;const s=this.materials[e.name];!1===Array.isArray(t.material)&&(t.material=[]),void 0!==s&&t.material.push(s)}else this.debugMessage(" Unknown face array chunk: "+i.hexId)}1===t.material.length&&(t.material=t.material[0])}readMap(e,t){let i=e.readChunk(),n={};const r=new B(this.manager);for(r.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);i;){if(i.id===Fi){const e=i.readString();n=r.load(e),n.userData.name=e.split(".").slice(0,-1).join("."),this.debugMessage(" File: "+t+e)}else i.id===Gi?(n.offset.x=i.readFloat(),this.debugMessage(" OffsetX: "+n.offset.x)):i.id===Oi?(n.offset.y=i.readFloat(),this.debugMessage(" OffsetY: "+n.offset.y)):i.id===Ri?(n.repeat.x=i.readFloat(),this.debugMessage(" RepeatX: "+n.repeat.x)):i.id===Ni?(n.repeat.y=i.readFloat(),this.debugMessage(" RepeatY: "+n.repeat.y)):this.debugMessage(" Unknown map chunk: "+i.hexId);i=e.readChunk()}return n}readMaterialGroup(e){const t=e.readString(),i=e.readWord();this.debugMessage(" Name: "+t),this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord());return{name:t,index:n}}readColor(e){const t=e.readChunk(),i=new l;if(t.id===li||t.id===ci){const e=t.readByte(),n=t.readByte(),r=t.readByte();i.setRGB(e/255,n/255,r/255),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else if(t.id===ai||t.id===pi){const e=t.readFloat(),n=t.readFloat(),r=t.readFloat();i.setRGB(e,n,r),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else this.debugMessage(" Unknown color chunk: "+t.hexId);return i}readPercentage(e){const t=e.readChunk();switch(t.id){case hi:return t.readShort()/100;case gi:return t.readFloat();default:return this.debugMessage(" Unknown percentage chunk: "+t.hexId),0}}debugMessage(e){this.debug&&console.log(e)}}class Chunk{constructor(e,t,i){this.data=e,this.offset=t,this.position=t,this.debugMessage=i,this.debugMessage instanceof Function&&(this.debugMessage=function(){}),this.id=this.readWord(),this.size=this.readDWord(),this.end=this.offset+this.size,this.end>e.byteLength&&this.debugMessage("Bad chunk size for chunk at "+t)}readChunk(){if(this.endOfChunk)return null;try{const e=new Chunk(this.data,this.position,this.debugMessage);return this.position+=e.size,e}catch(e){return this.debugMessage("Unable to read chunk at "+this.position),null}}get hexId(){return this.id.toString(16)}get endOfChunk(){return this.position>=this.end}readByte(){const e=this.data.getUint8(this.position,!0);return this.position+=1,e}readFloat(){try{const e=this.data.getFloat32(this.position,!0);return this.position+=4,e}catch(e){return this.debugMessage(e+" "+this.position+" "+this.data.byteLength),0}}readInt(){const e=this.data.getInt32(this.position,!0);return this.position+=4,e}readShort(){const e=this.data.getInt16(this.position,!0);return this.position+=2,e}readDWord(){const e=this.data.getUint32(this.position,!0);return this.position+=4,e}readWord(){const e=this.data.getUint16(this.position,!0);return this.position+=2,e}readString(){let e="",t=this.readByte();for(;t;)e+=String.fromCharCode(t),t=this.readByte();return e}}const ri=19789,oi=15786,si=49725,Ai=2,ai=16,li=17,ci=18,pi=19,hi=48,gi=49,ui=15677,di=15678,fi=256,mi=45055,bi=40960,Ci=40976,Bi=40992,yi=41008,xi=41024,Qi=41040,wi=41089,vi=41091,Di=41093,Mi=41095,Li=41472,Ti=41488,_i=41520,ki=41476,Fi=41728,Ri=41812,Ni=41814,Gi=41816,Oi=41818,Yi=16384,Ui=16640,Xi=16656,qi=16672,Hi=16688,zi=16704,ji=16736;const to_std=(t,i)=>{if(!t||"MeshPhongMaterial"!==t.type)return t;if(i){const e=i.get(t);if(e)return e}const n=1-("number"==typeof t.shininess?Math.min(Math.max(t.shininess,0),100):30)/100,r=new e.MeshStandardMaterial({name:t.name,color:t.color,map:t.map,normalMap:t.normalMap,emissive:t.emissive,emissiveMap:t.emissiveMap,envMap:t.envMap,envMapIntensity:t.envMapIntensity??1,lightMap:t.lightMap,lightMapIntensity:t.lightMapIntensity,alphaTest:t.alphaTest,depthWrite:t.depthWrite,depthTest:t.depthTest,wireframe:t.wireframe,transparent:t.transparent,opacity:t.opacity,side:t.side,roughness:n,metalness:0});return i&&i.set(t,r),"function"==typeof t.dispose&&(t.dispose(),t.userData=t.userData||{},t.userData._replaced=!0),r.needsUpdate=!0,r};function newgcad(t,i,n,r=!0){let o={},s={},A={},a={},l={};const c=new Map;let p={},h={},g=new e.TextureLoader,u=new GLTFLoader,d=new TDSLoader;const f=new DRACOLoader;f.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"),u.setDRACOLoader(f);const I=new KTX2Loader;I.setTranscoderPath("https://unpkg.com/three@0.159.0/examples/jsm/libs/basis/"),u.setKTX2Loader(I),u.setMeshoptDecoder(ni);let m=[n],getcat=()=>m[m.length-1],b={};async function clearmat(){for(const e in s)if(s[e]){const t=await s[e];t?.dispose()}for(const e in p)p[e]&&p[e]?.dispose();for(const[e,t]of c.entries()){const e=t instanceof Promise?await t:t;e?.dispose&&e.dispose()}c.clear(),s={},p={}}function getdims(t){let i=(new e.Box3).setFromObject(t),n2=e=>Math.round(100*e)/100;return{zero:{x:n2(-i.min.x),y:n2(-i.min.y),z:n2(-i.min.z)},dim:{x:n2(i.max.x-i.min.x),y:n2(i.max.y-i.min.y),z:n2(i.max.z-i.min.z)},position:t.position,rotation:{x:t.rotation.x,y:t.rotation.y,z:t.rotation.z},scale:t.scale}}async function get3ds(e){e.endsWith(".3ds")&&(e=e.slice(0,-4));const i=hash(`${getcat()}|${e}.3ds`);return A[i]||(A[i]=await new Promise(((n,r)=>{let o,s="";e.startsWith("https://")?(o=`${e}.3ds`,s=o):t._cdn?(o=`${t._cdn}${getcat()}/3d/${e}.3ds`,s=`${t._cdn}${getcat()}/3d/${e}/`):(o=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:".3ds"}),s=o+"&tex="),d.setResourcePath(s),d.load(o,(e=>{const t=new WeakMap;e.traverse((e=>{e.isMesh&&e.material&&(e.material=Array.isArray(e.material)?e.material.map((e=>to_std(e,t))):to_std(e.material,t))})),e.userData||(e.userData={}),e.userData._ky=i,n(e)}),void 0,(e=>{console.log(e),delete A[i],n(void 0)}))}))),A[i]}async function getglb(e){const i=".glb";e.endsWith(i)&&(e=e.slice(0,-4)),e.startsWith("https://")||(e=e.replace(/\//g,"+"));let n=(e=e.split("+"))[1];e=e[0];const r=hash(`${getcat()}|${e}${i}`);A[r]||(A[r]=await new Promise(((n,o)=>{let s;s=e.startsWith("https://")?`${e}.glb`:t._cdn?`${t._cdn}${getcat()}/3d/${e}.glb`:t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:i}),u.setPath(""),u.setResourcePath((e=>(console.log("risorsa",e),`${s}&tex=${e}`))),u.load(s,(async e=>{const t=e.scene;t.userData||(t.userData={}),t.userData._ky=r,n(t)}),void 0,(e=>{console.log(e),delete A[r],n(void 0)}))})));let o=A[r];if(n){let e=o?.getObjectByName(n);e&&(o=e)}return o}return{clearmatricole:()=>{b={}},P:t,bus:i,tex:async function tex(i,n=1,r,o){let A;return r||(r=n),o||(o=0),"__alpha"==i?(A=i,s[A]||(s[A]=function getfortransparent(){const t=new e.CanvasTexture(function generateTexture(){const e=document.createElement("canvas");e.width=2,e.height=2;const t=e.getContext("2d");return t.fillStyle="white",t.fillRect(0,1,2,1),e}());return t.magFilter=e.NearestFilter,t.wrapT=e.RepeatWrapping,t.wrapS=e.RepeatWrapping,t.repeat.set(1,3.5),t}()),s[A]):(A=hash(`${getcat()}|${i}|${n}|${r}|${o}`),s[A]||(s[A]=new Promise(((a,l)=>{let p;if(i.startsWith("https://"))p=i;else if(t._cdn)if(i.includes("/")){let e=i.split("/");p=`${t._cdn}${e[0]}/textures/${e[1]}`}else p=`${t._cdn}${getcat()}/textures/${i}`;else p=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"textures",name:i,force:1});if(c.has(p)){const t=c.get(p).clone();return t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.center.set(.5,.5),t.repeat.set(n,r),t.rotation=o,void a(t)}g.load(p,(t=>{c.set(p,t),t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.repeat.set(n,r),t.center.set(.5,.5),t.rotation=o,a(t)}),void 0,(e=>{console.log(`Manca Texture ${i}!. questo rallenta molto il processo`),delete s[A],a(void 0)}))}))),s[A])},getglb:getglb,get3ds:get3ds,replacemats:function replacemats(e,t,i){if(!Array.isArray(t)||0==t.length)return e;const leggi_slot=e=>{if(!e)return-1;let t=(e?.map?.name||e?.name||e?.map?.userData?.name||"").toString().trim();if(i){const e=i(t);void 0!==e&&(t=e)}if(t.includes("_")&&(t=t.split("_").pop()),!t)return-1;const n=parseInt(t,10);return n>=1&&n<=9?n:-1};let n=!1,r=String(e.userData?._ky||"");if(e.traverse((e=>{if(!e.isMesh)return;const i=Array.isArray(e.material)?e.material:[e.material];for(const e of i){const i=leggi_slot(e);i>0&&t[i-1]&&(n=!0,r+="|"+(t[i-1].name||t[i-1].uuid))}})),n){if(r=hash(r),A[r])return A[r];const i=e.clone(!0);i.traverse((e=>{if(e.isMesh)if(Array.isArray(e.material))e.material=e.material.map((e=>{if(!e)return e;const i=leggi_slot(e);if(i>0&&t[i-1]){const e=t[i-1];return e.needsUpdate=!0,e}return e}));else{const i=e.material,n=leggi_slot(i);e.material=n>0&&t[n-1]?(t[n-1].needsUpdate=!0,t[n-1]):i}})),i.userData=i.userData||{},i.userData._ky=r,A[r]=i,e=i}return e},islog:r,clear:async function clear(){function destroymesh(e){function disposeMaterial(e){e.map&&e.map.dispose(),e.lightMap&&e.lightMap.dispose(),e.bumpMap&&e.bumpMap.dispose(),e.normalMap&&e.normalMap.dispose(),e.specularMap&&e.specularMap.dispose(),e.envMap&&e.envMap.dispose(),e.alphaMap&&e.alphaMap.dispose(),e.dispose()}e&&e.traverse((e=>{e.isMesh&&(e.onBeforeRender&&(e.onBeforeRender=null),e.onAfterRender&&(e.onAfterRender=null),e.geometry?.dispose&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(disposeMaterial):disposeMaterial(e.material)))}))}b={},l={},e.Cache.clear();for(const e in a)a[e]?.dispose();for(const e in A)if(A[e]){destroymesh(await A[e])}await clearmat(),o={},s={},A={},a={},p={},h={}},clearmat:clearmat,getdims:getdims,info3d:async function info3d(e,t=1,i=0,n=0){let r=(e||"").endsWith(".3ds")?await get3ds(e):await getglb(e);if(r)return t&&1!=t&&(r.scale.set(t||1,i||t||1,n||t||1),r.needsUpdate=!0),getdims(r)},getScript:async function getScript(e){e.endsWith(".custom")?e=e.slice(0,-7):e.endsWith(".js")&&(e=e.slice(0,-3));let i=hash(`${getcat()}|${e}`);if(!h[i]){let n;try{n=await t.fetch("mufiles/customfn",{id:getcat(),name:e,ispar:1})}catch(t){n=`log('undefined ${getcat()}/${e}: ${t.message}');`}h[i]=n}return h[i]},checkScripts:async function checkScripts(e){let i=[];if(!e||!Array.isArray(e))return;let n=getcat();e=[...e,"_ricalcolatop","_ricalcolaaltri","_ricalcolalinee"];for(let t of e){let e=hash(`${n}|${t}`);h[e]||i.push(t)}if(i?.length){let e=await t.fetch("mufiles/customfn",{id:n,name:i,ispar:1});if(e)for(let t of e){let e=hash(`${n}|${t.n}`);h[e]=t.v}}},get loaderGLTF(){return u},get gmats(){return b},scripts:()=>Object.keys(h),get geo(){return a},get movs(){return o},get textures(){return s},get smats(){return p},get meshes(){return A},get cacheFns(){return l},dump(){console.log(`SMATS:\n${Object.keys(p).join(" - ")};\nGEOMS:\n${Object.keys(a).join(" - ")};\nTEX:\n${Object.keys(s).join(" - ")};\nMESH:\n${Object.keys(A).join(" - ")};\n`)},get cat(){return getcat()},pushcat(e){m.push(e)},popcat:()=>(m.length>1&&m.length--,getcat())}}const Ji=new Map;function salvaMaterialiOriginali(e){e.traverse((e=>{if(!e.isMesh||e.layers.mask>1<<20)return;const t=e.material;if(!t)return;const i=Array.isArray(t)?t:[t];Ji.has(e)||Ji.set(e,i)}))}function ripristinaMaterialiOriginali(){for(let[e,t]of Ji.entries())e.material=Array.isArray(t)?[...t]:t;Ji.clear()}function applicaEvidenziazione(e,t,i,n){!function ricorsiva(e,r,o){const s=!!r||!!t&&t.includes(e?.userData?.mat),A=o||e.userData?.evidenziaMap;if(e.isMesh&&e.layers.mask<=1<<20){const t=Ji.get(e);if(!t)return;const r=t.map((e=>{const t=(s?n:i).clone();return A&&e.map&&(t.map=e.map),t.transparent=e.transparent,t.opacity=e.opacity,t}));e.material=Array.isArray(e.material)?r:r[0]}e.children.forEach((e=>ricorsiva(e,s,A)))}(e,!1,!1)}async function evidenziaColli(t,i,n){salvaMaterialiOriginali(t);const r=e.DoubleSide,o=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:r}),s=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:r});let A=0;try{for(let e of i)A++,e.name||(e.name=`collo_${A}`),applicaEvidenziazione(t,e.mats,o,s),await n(e)}catch(e){console.error("Errore durante evidenzia:",e)}finally{ripristinaMaterialiOriginali()}}async function runScript(t,i,n,r,o){let s=await t.getScript(i),A=s.script,a=[],l=function toCadPars(e){const t=muClComments(e),i=[];for(const e of t){const t=e.includes("(")||e.includes("[")?[e]:getcolonne(e,!0);let n=!1;for(const e of t)!e.startsWith('"')&&e.includes("=")?(i.push(e),n=!0):n&&(i[i.length-1]+=","+e)}const n={};for(const e of i){let{v:t,o:i}=getcouple(e,"=",!1);i=i||"",t&&(/^[-+]?\d*\.?\d+$/.test(i)&&(i=parseFloat(i)),n[t]=i)}return n}(s.pars+("string"==typeof r?"\n"+r:""));function setmatricola(e){return e?.userData&&(e.userData.mat=`${i}_${t.gmats[i]}`),e}r&&"object"==typeof r&&(l={...l,...r}),t.gmats[i]||(t.gmats[i]=0);let c=(new Date).valueOf(),p=c;try{function movimento(e,i=[]){return e=clean(e,!0),t.movs[e]||(t.movs[e]=getmovimento(e,i)),t.movs[e]}function addlog(...e){if(t?.islog){const t=e.map((e=>getOggetto(e)));console.log(...t),a.push(...t)}}function dbadd(e,r,o,s={}){s||(s={}),t.gmats[i]++;let A=`${i}_${t.gmats[i]}`,{qt:a=1,l:l=0,a:c=0,p:p=0,vars:h="",shape:g=null,model:u,lavs:d=null}=s;if(n.DB&&r){let t={lev:"string"==typeof e?clean(e,!0):"l"+(e+(n?._level??0)),mat:A,cod:r,note:o||"",qt:a,l:l,a:c,p:p,vars:h};g&&(t.shape=g),d&&(t.lavs=d),u&&(t.model=u),n.DB.push(t)}return A}function addtop(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"top",op:i,posfn:o})}function addhole(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"hole",op:i,posfn:o})}function addaltri(e,t,i={}){i||(i={}),n.TOPS.push({key:e,data:t,type:"altri",op:i,posfn:o})}function addlines(e,t,i={}){i||(i={}),t&&(Array.isArray(t)||(t=[t]),n.TOPS.push({key:e,lines:t,type:"lines",op:i,posfn:o}))}function dbdes(e,t){n.DES&&t&&n.DES.push({lev:e+(n?._level??0),description:t})}function geturltex(e){let i=t.cat;if(!e)return t.P.baseurl+"noimage.jpg";if(t.P._cdn){if(e.includes("/")){let t=e.split("/");i=t[0],e=t[1]}return e.endsWith(".webp")||e.endsWith(".png")||e.endsWith(".jpeg")||e.endsWith(".jpg")||(e+=".webp"),`${t.P._cdn}${i}/textures/${e}`}return t.P.fullget("mufiles/getfile",{id:i,subfolder:"textures",name:e})}l||(l={}),n||(n={});const h={GCAD:!0,...n,...l,THREE:e,TODEG:TODEG,TORAD:TORAD,dbadd:dbadd,addtop:addtop,addhole:addhole,addlines:addlines,addaltri:addaltri,dbdes:dbdes,addpivot:(e,i,n={},r=0,o=0,s=0)=>setmatricola(addmovpivot(t,e,i,n,r,o,s)),movimento:movimento,Math:Math,facesettile:facesettile,info3d:t.info3d,gcad:t,SIDE:$e,seeder:seeder,seedarray:seedarray,baseurl:t.P.baseurl,Vis2d:Vis2d,joinlinestoshapes:joinlinestoshapes,groupfromgeometry:groupfromgeometry,creategroup:creategroup,deletegroup:deletegroup,Matrix3D:Matrix3D,geturltex:geturltex,clamp:clamp,Punto2:Punto2,Linea2:Linea2,getptsoffset:getptsoffset,hash:hash,PIF:Ue,raccordabezier:raccordabezier,svuotanodo:svuotanodo,normal2:normal2,angle3point:angle3point,angle2vec:angle2vec,getshape:getshape,shapeclip:shapeclip,mgray1:nt,mgray2:rt,mwhite:it,mred:ot,mgreen:At,mblack:at,mblue:st,materialline1:et,materialline2:tt,scaleunit:lt,edgesfromgeometry:edgesfromgeometry,getmesh:getmesh,getcolonne:getcolonne,posiziona:posiziona,getbb:getbb,scalaoggetto:(e,i)=>scalaoggetto(t,e,i),setorigine:setorigine,SP:Ve,elaborapercorso:elaborapercorso,gettarghetta:(e,i,n)=>gettarghetta(t,e,i,n),getquota:(e,i,n,r,o,s={})=>getquota(t,e,i,n,r,o,s),getsprite:(e,t,i,n,r)=>getsprite(0,e,t,i,n,r),getpunto:(e,i,n,r,o,s)=>getpunto(t,e,i,n,r,o),spritemat:e=>spritemat(t,e),getemitter:getemitter,getreceiver:e=>setmatricola(getreceiver(t,e)),getriferimento:getriferimento,get3dshape:get3dshape,getline:getline,getpoint:getpoint,randombasemat:randombasemat,texgen:(e,i=256,n={})=>texgen(t,e,i,n),getcilindro:(e,i,n,r,o=it,s)=>setmatricola(getcilindro(t,e,i,n,r,o,s)),getbox:(e,t,i,n,r)=>setmatricola(getbox(0,e,t,i,n,r)),getsphere:(e,t,i)=>setmatricola(getsphere(0,e,t,i)),replacemats:t.replacemats,getluce:(e,i="#ffffff",n=1)=>getluce(t,e,i,n),getthorus:(e,t,i,n)=>setmatricola(getthorus(0,e,t,i,n)),getcyl:(e,t,i=it,n)=>setmatricola(getcyl(0,e,t,i,n)),getpannello:(e,i,n,r,o,s,A)=>setmatricola(getpannello(t,e,i,n,r,o,s,A)),getpannello2:(e,i,n,r,o,s)=>setmatricola(getpannello2(t,e,i,n,r,o,s)),getface:(e,i,n,r)=>setmatricola(getface(t,e,i,n,r)),pickvariant:(e,i,n,r,o,s={})=>pickvariant(t,e,i,n,r,o,s),getmarker:(e,i,n,r,o,s={})=>getmarker(t,e,i,n,r,o,s),getglb:e=>setmatricola(t.getglb(e)),get3ds:e=>setmatricola(t.get3ds(e)),estruso:(e,i,n,r,o,s)=>setmatricola(estruso(t,e,i,n,r,o,s)),getextrude:(e,i,n,r,o)=>setmatricola(getextrude(t,e,i,n,r,o)),estrusopat:(e,i,n,r,o,s)=>setmatricola(estrusopat(t,e,i,n,r,o,s)),infoestrudi:infoestrudi,getfakeshadow:(e,i)=>getfakeshadow(t,e,i),getfakeshadow2:getfakeshadow2,revolve:(e,i,n,r)=>setmatricola(revolve(t,e,i,n,r)),smat:(e,i)=>smat(t,e,i),log:addlog,clean:clean,logtime:e=>{if(t?.islog){let t=(new Date).valueOf();addlog(`time: ${e} => ${t-p}ms / ${t-c}ms`),p=t}}},g=[...Object.keys(h),...Object.keys(Xe)],u=[...Object.values(h),...Object.values(Xe)],d=`//# sourceURL=${i}\n return (async () => {\n${A}\n })();`;try{let f=hash(i+JSON.stringify(Object.keys(l)));t.cacheFns[f]||(t.cacheFns[f]=new Function(...g,d));const I=t.cacheFns[f];return{res:await I(...u),LOGS:a}}catch(m){let b=await errorescript(`// errore\n async function script() {\n ${A}\n }`,m);console.error(m),t?.bus?.errore(b)}}catch(C){t?.bus?.errore(`${C.message}\nscript: ${i}`),console.error(C)}}async function processatop(e,t,i){if(!t)return;let n=t.getObjectByName("_mtop");if(n)for(;n.children.length>0;)n.remove(n.children[0]);else n=creategroup("_mtop"),t.add(n);const uk=e=>`${e.key}|${Math.round(((e.ang||0)+180)%180)/5}|${e.pos.y}`;let r=shapeclip();const o=[...new Set(i.filter((e=>"top"==e.type)).map(uk))];let s=[],A=0;for(let t of o){let o=i.filter((e=>"top"==e.type&&uk(e)===t));if(o.length){let t=o[0],a=i.filter((e=>"hole"==e.type&&e.key==t.key)),l=[],c=[],p=[];for(let e of o)l.push(e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z));let h=[];for(let e of a){let t=e.op.ptrif,i=e.op.ptapplica,n=e.shape.dims();t=t?[n.p1,...t]:[n.p1,n.p2],i||(i=n.p1);let r=e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z),o=getshape().frompt(t).rotate(-e.ang).move(e.pos.x,e.pos.z);h.push({pt:o.pt,shape:r,op:e.op,width:n.width,height:n.height}),e.op?.hidden||c.push(r)}let g,u=r.unisci(l,c,p);for(let t of u){let i=o[0],r=t.shape.rebase(-i.ang),a=t.shape.dims(),l=getshape().fromrect(a.width,a.height,a.p1.x,a.p1.y);r.holes=[],r.cuts=[];for(let e of t.holes)r.holes.push(e.rebase(-i.ang,!0,r.origine.x,r.origine.y));const to2dec=e=>Math.round(100*(Number(e)||0))/100;let c=h.map((e=>{let t=getshape().frompt(e.pt),{shape:n}=t.rebase(-i.ang,!0,r.origine.x,r.origine.y);return{op:e.op,pt:n.pt,px:to2dec(n.pt[0].x),py:to2dec(n.pt[0].y),dx:to2dec(e.width),dy:to2dec(e.height)}})),p=c.filter((e=>{for(let t of e.pt)if(l.pointinshape(t))return!0;return!1}));p.forEach((e=>delete e.pt));let u=[];await runScript(e,"_ricalcolatop",{BOX:u,DB:s,TOPS:[],_level:800,processatop:{top:r,base:i,lavs:p,idt:A}},{}),A++;for(let e of u)g=posiziona(posiziona(e,{sa:i.pos.y||0,sl:r.origine.x,sp:r.origine.y}),{ay:i.ang}),n.add(g)}}}const a=i.filter((e=>"altri"==e.type));let l=[];await runScript(e,"_ricalcolaaltri",{BOX:l,DB:s,TOPS:[],_level:800,processatop:{altri:a,idt:A}},{}),A++;for(let e of l)n.add(e);const uk1=e=>`${e.key}|${e.pos.y}`,c=i.filter((e=>"lines"==e.type)),p=[...new Set(c.map(uk1))];for(let t of p){const i=c.filter((e=>uk1(e)===t)),n=joinlinestoshapes(i);for(let r of n){let n={sh:r,key:t,data:i[0].op||{},idt:A};await runScript(e,"_ricalcolalinee",{BOX:l,DB:s,TOPS:[],_level:800,processatop:n},{})}A++}for(let e of l)n.add(e);return s}function dumpscene(e,t={}){const{maxdepth:i=1/0}=t,r3=e=>Math.round(1e3*e)/1e3;function layerMaskToString(e){let t="";for(let i=0;i<32;i++)t=(e&1<<i?"x":"_")+t;return t}function filterUserData(e){if(!e)return{};const t={};for(const i in e){const n=e[i];if(null==n)continue;const r=typeof n;"string"!==r&&"number"!==r&&"boolean"!==r||(t[i]=n)}return t}return function scan(e,t=0){if(!e||t>i)return null;const n={type:e.type,name:e.name||"",layer:layerMaskToString(e.layers?.mask??0),userData:filterUserData(e.userData)};if(e.position&&function sigPos(e){return 0!==e.x||0!==e.y||0!==e.z}(e.position)&&(n.position={x:r3(e.position.x),y:r3(e.position.y),z:r3(e.position.z)}),e.rotation&&function sigRot(e){return 0!==e.x||0!==e.y||0!==e.z}(e.rotation)&&(n.rotation={x:r3(e.rotation.x),y:r3(e.rotation.y),z:r3(e.rotation.z)}),e.scale&&function sigScale(e){return 1!==e.x||1!==e.y||1!==e.z}(e.scale)&&(n.scale={x:r3(e.scale.x),y:r3(e.scale.y),z:r3(e.scale.z)}),e.isMesh&&e.geometry){n.geometry={type:e.geometry.type};const t=e.geometry.parameters;if(t)for(const e in t){const i=t[e];"number"==typeof i&&(n.geometry[e]=r3(i))}}return e.material&&(Array.isArray(e.material)?n.material=e.material.map((e=>e.type||e.name||"Material")):n.material=e.material.type||e.material.name||"Material"),e.children?.length&&(n.children=e.children.map((e=>scan(e,t+1))).filter(Boolean)),n}(e,0)}async function processamarker(t){t.updateMatrixWorld(!0);const i=new Map;!function traverse(n){if(n.userData?.markerid)i.set(n.userData.markerid,n);else if(n.name?.startsWith("#mk_")){const r=n.name,o=i.get(r);if(!o)return void t.remove(n);{o.updateMatrixWorld(!0);const i=o.matrixWorld.clone(),r=(new e.Matrix4).copy(t.matrixWorld).invert().multiply(i);n.matrix.copy(r),n.matrixAutoUpdate=!1,o.visible=!1,n.updateMatrixWorld(!0)}}for(const e of[...n.children])traverse(e)}(t)}async function processagruppo(e,t){Object.assign(t.userData,{SHAPES:[],DB:[],TOPS:[]});for(let i of t.userData.INFO.rows)if("fn"==i?.t){let n=creategroup(),r=[];await runScript(e,i.fn,{BOX:r,SHAPES:t.userData.SHAPES,DB:t.userData.DB,TOPS:t.userData.TOPS,_level:t.userData._level},i.pars,i.p2),r.length&&(r.forEach((e=>n.add(e))),Object.keys(i.p2).length&&(n=posiziona(n,i.p2)),t.add(n))}else if(i?.rows&&i.rows.length){let n=creategroup();i.iscad&&(n=posiziona(n,i.cadv)),n.name=i.id,Object.assign(n.userData,{INFO:i,_level:t.userData._level+1}),await processagruppo(e,n),t.add(n)}}function getalldb(t,i){let n=[],r=[],o=[];if(t){let i=new e.Matrix4,s=new e.Matrix4;t.updateMatrixWorld(),i.copy(t.matrixWorld);let A=i.clone().invert();t.traverse((t=>{if(t.userData?.DB&&Array.isArray(t.userData.DB)&&n.push(...t.userData.DB),t.userData?.TOPS&&t.userData.TOPS.length){t.updateMatrixWorld(),s.copy(t.matrixWorld);let i=s.clone().premultiply(A),n=new e.Vector3;n.setFromMatrixPosition(i),(new e.Euler).setFromRotationMatrix(i);let o=-e.MathUtils.radToDeg(Math.atan2(i.elements[2],i.elements[10]));for(let i of t.userData.TOPS){let{sl:t=0,sp:s=0,ay:A=0}=i?.posfn;if(t||s||A){let a=e.MathUtils.degToRad(-o),l=Math.cos(a),c=Math.sin(a),p=t*l-s*c,h=t*c+s*l,g=new e.Vector3(n.x+p,n.y,n.z+h),u=o-A;r.push({...i,pos:g,ang:u})}else r.push({...i,pos:n,ang:o})}}t.userData?.SHAPES&&Array.isArray(t.userData.SHAPES)&&o.push(...t.userData.SHAPES)}))}return i&&(i.DB=n,i.TOPS=r,i.SHAPES=o),{DB:n,TOPS:r,SHAPES:o}}async function evalcustomfunction(e,t,i,n){try{i||(i={}),n||(n={});const r={GCAD:!1,...i,A:e,V:e.vari,amb:e,info3d:async function info3d(t,i=1,n=0,r=0){if(e.gcad)return await e.gcad.info3d(t,i,n,r)},gcad:e.gcad,log:function addlog(...e){const t=e.map((e=>getOggetto(e)));console.log(...t)},Math:Math,getcolonne:getcolonne,clean:clean,SP:Ve,seeder:seeder,seedarray:seedarray,Punto2:Punto2,Linea2:Linea2,clamp:clamp,hash:hash,PIF:Ue,getshape:getshape,shapeclip:shapeclip,...n},o=[...Object.keys(r),...Object.keys(Xe)],s=[...Object.values(r),...Object.values(Xe)],A=new Function(...o,`\n try {\n return (async () => {\n ${t}\n })();\n } catch (err) {\n err.stack = '[SCRIPT] ' + err.stack;\n throw err;\n }`);return await A(...s)}catch(e){throw console.error("Errore durante l'esecuzione:",e),e}}function setLineColorMode(e,t){e?(et.color.set(16777215),tt.color.set(16777215)):t?(et.color.set(2501422),tt.color.set(8421504)):(et.color.set(6316128),tt.color.set(8421504)),et.needsUpdate=!0,tt.needsUpdate=!0}export{Linea2,Matrix3D,Ue as PIF,Punto2,$e as SIDE,Ve as SP,TODEG,TORAD,Vis2d,Vobject,Vscene,addmovpivot,angle2vec,angle3point,Xe as blocked,calcolatasks,clamp,clean,creategroup,deletegroup,dumpscene,dxfbulge,edgesfromgeometry,elaborapercorso,errorescript,estruso,estrusopat,evalcustomfunction,evidenziaColli,extractTextures,facesettile,get3dshape,getOggetto,getalldb,getbb,getbordi,getbox,getcilindro,getcyl,getdumpmacro,getemitter,getextrude,getface,getfakeshadow,getfakeshadow2,getline,getlinesgeom,getluce,getmarker,getmesh,getmovimento,getnodebyid,getpannello,getpannello2,getpoint,getptsoffset,getpunto,getquota,getreceiver,getriferimento,getshape,getsphere,getsprite,getsubrules,gettarghetta,getthorus,groupfromgeometry,hash,infoestrudi,isfn,ismacro,joinlinestoshapes,mapvertices,et as materialline1,tt as materialline2,at as mblack,st as mblue,nt as mgray1,rt as mgray2,At as mgreen,ot as mred,it as mwhite,newgcad,normal2,pickvariant,posiziona,processagruppo,processamarker,processatop,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,runScript,salvaMaterialiOriginali,scalaoggetto,lt as scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,texgen,valutagrafica};