@terra.gl/core 0.0.1-alpha.52 → 0.0.1-alpha.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +42 -146
- package/dist/index.js +34 -67
- package/dist/index.umd.cjs +3 -3
- package/package.json +1 -1
package/dist/index.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(q,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],p):(q=typeof globalThis<"u"?globalThis:q||self,p(q["terra-gl"]={},q.THREE))})(this,function(q,p){"use strict";function of(i){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const t in i)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>i[t]})}}return e.default=i,Object.freeze(e)}const lt=of(p),af="0.0.1-alpha.
|
|
1
|
+
(function(q,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],p):(q=typeof globalThis<"u"?globalThis:q||self,p(q["terra-gl"]={},q.THREE))})(this,function(q,p){"use strict";function of(i){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const t in i)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>i[t]})}}return e.default=i,Object.freeze(e)}const lt=of(p),af="0.0.1-alpha.54",yo={name:"Criska"};var ci=function(){var i=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(m){m.preventDefault(),n(++i%e.children.length)},!1);function t(m){return e.appendChild(m.dom),m}function n(m){for(var f=0;f<e.children.length;f++)e.children[f].style.display=f===m?"block":"none";i=m}var r=(performance||Date).now(),o=r,a=0,c=t(new ci.Panel("FPS","#0ff","#002")),u=t(new ci.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var d=t(new ci.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:e,addPanel:t,showPanel:n,begin:function(){r=(performance||Date).now()},end:function(){a++;var m=(performance||Date).now();if(u.update(m-r,200),m>=o+1e3&&(c.update(a*1e3/(m-o),100),o=m,a=0,d)){var f=performance.memory;d.update(f.usedJSHeapSize/1048576,f.jsHeapSizeLimit/1048576)}return m},update:function(){r=this.end()},domElement:e,setMode:n}};ci.Panel=function(i,e,t){var n=1/0,r=0,o=Math.round,a=o(window.devicePixelRatio||1),c=80*a,u=48*a,d=3*a,m=2*a,f=3*a,g=15*a,_=74*a,w=30*a,x=document.createElement("canvas");x.width=c,x.height=u,x.style.cssText="width:80px;height:48px";var b=x.getContext("2d");return b.font="bold "+9*a+"px Helvetica,Arial,sans-serif",b.textBaseline="top",b.fillStyle=t,b.fillRect(0,0,c,u),b.fillStyle=e,b.fillText(i,d,m),b.fillRect(f,g,_,w),b.fillStyle=t,b.globalAlpha=.9,b.fillRect(f,g,_,w),{dom:x,update:function(L,M){n=Math.min(n,L),r=Math.max(r,L),b.fillStyle=t,b.globalAlpha=1,b.fillRect(0,0,c,g),b.fillStyle=e,b.fillText(o(L)+" "+i+" ("+o(n)+"-"+o(r)+")",d,m),b.drawImage(x,f+a,g,_-a,w,f,g,_-a,w),b.fillRect(f+_-a,g,a,w),b.fillStyle=t,b.globalAlpha=.9,b.fillRect(f+_-a,g,a,o((1-L/M)*w))}}};const $i=parseInt(p.REVISION.replace(/\D+/g,"")),_o=$i>=125?"uv1":"uv2";function Il(i,e){if(e===p.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),i;if(e===p.TriangleFanDrawMode||e===p.TriangleStripDrawMode){let t=i.getIndex();if(t===null){const a=[],c=i.getAttribute("position");if(c!==void 0){for(let u=0;u<c.count;u++)a.push(u);i.setIndex(a),t=i.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),i}const n=t.count-2,r=[];if(t)if(e===p.TriangleFanDrawMode)for(let a=1;a<=n;a++)r.push(t.getX(0)),r.push(t.getX(a)),r.push(t.getX(a+1));else for(let a=0;a<n;a++)a%2===0?(r.push(t.getX(a)),r.push(t.getX(a+1)),r.push(t.getX(a+2))):(r.push(t.getX(a+2)),r.push(t.getX(a+1)),r.push(t.getX(a)));r.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=i.clone();return o.setIndex(r),o.clearGroups(),o}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),i}var Ut=Uint8Array,Dn=Uint16Array,vo=Uint32Array,Al=new Ut([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Fl=new Ut([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),lf=new Ut([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ol=function(i,e){for(var t=new Dn(31),n=0;n<31;++n)t[n]=e+=1<<i[n-1];for(var r=new vo(t[30]),n=1;n<30;++n)for(var o=t[n];o<t[n+1];++o)r[o]=o-t[n]<<5|n;return[t,r]},Dl=Ol(Al,2),zl=Dl[0],cf=Dl[1];zl[28]=258,cf[258]=28;for(var uf=Ol(Fl,0),hf=uf[0],wo=new Dn(32768),We=0;We<32768;++We){var zn=(We&43690)>>>1|(We&21845)<<1;zn=(zn&52428)>>>2|(zn&13107)<<2,zn=(zn&61680)>>>4|(zn&3855)<<4,wo[We]=((zn&65280)>>>8|(zn&255)<<8)>>>1}for(var ui=function(i,e,t){for(var n=i.length,r=0,o=new Dn(e);r<n;++r)++o[i[r]-1];var a=new Dn(e);for(r=0;r<e;++r)a[r]=a[r-1]+o[r-1]<<1;var c;if(t){c=new Dn(1<<e);var u=15-e;for(r=0;r<n;++r)if(i[r])for(var d=r<<4|i[r],m=e-i[r],f=a[i[r]-1]++<<m,g=f|(1<<m)-1;f<=g;++f)c[wo[f]>>>u]=d}else for(c=new Dn(n),r=0;r<n;++r)i[r]&&(c[r]=wo[a[i[r]-1]++]>>>15-i[r]);return c},hi=new Ut(288),We=0;We<144;++We)hi[We]=8;for(var We=144;We<256;++We)hi[We]=9;for(var We=256;We<280;++We)hi[We]=7;for(var We=280;We<288;++We)hi[We]=8;for(var Xl=new Ut(32),We=0;We<32;++We)Xl[We]=5;var df=ui(hi,9,1),ff=ui(Xl,5,1),bo=function(i){for(var e=i[0],t=1;t<i.length;++t)i[t]>e&&(e=i[t]);return e},qt=function(i,e,t){var n=e/8|0;return(i[n]|i[n+1]<<8)>>(e&7)&t},xo=function(i,e){var t=e/8|0;return(i[t]|i[t+1]<<8|i[t+2]<<16)>>(e&7)},pf=function(i){return(i/8|0)+(i&7&&1)},mf=function(i,e,t){(t==null||t>i.length)&&(t=i.length);var n=new(i instanceof Dn?Dn:i instanceof vo?vo:Ut)(t-e);return n.set(i.subarray(e,t)),n},gf=function(i,e,t){var n=i.length;if(!n||t&&!t.l&&n<5)return e||new Ut(0);var r=!e||t,o=!t||t.i;t||(t={}),e||(e=new Ut(n*3));var a=function(dt){var Je=e.length;if(dt>Je){var Be=new Ut(Math.max(Je*2,dt));Be.set(e),e=Be}},c=t.f||0,u=t.p||0,d=t.b||0,m=t.l,f=t.d,g=t.m,_=t.n,w=n*8;do{if(!m){t.f=c=qt(i,u,1);var x=qt(i,u+1,3);if(u+=3,x)if(x==1)m=df,f=ff,g=9,_=5;else if(x==2){var C=qt(i,u,31)+257,Z=qt(i,u+10,15)+4,z=C+qt(i,u+5,31)+1;u+=14;for(var D=new Ut(z),X=new Ut(19),I=0;I<Z;++I)X[lf[I]]=qt(i,u+I*3,7);u+=Z*3;for(var K=bo(X),V=(1<<K)-1,G=ui(X,K,1),I=0;I<z;){var k=G[qt(i,u,V)];u+=k&15;var b=k>>>4;if(b<16)D[I++]=b;else{var j=0,Y=0;for(b==16?(Y=3+qt(i,u,3),u+=2,j=D[I-1]):b==17?(Y=3+qt(i,u,7),u+=3):b==18&&(Y=11+qt(i,u,127),u+=7);Y--;)D[I++]=j}}var H=D.subarray(0,C),Q=D.subarray(C);g=bo(H),_=bo(Q),m=ui(H,g,1),f=ui(Q,_,1)}else throw"invalid block type";else{var b=pf(u)+4,L=i[b-4]|i[b-3]<<8,M=b+L;if(M>n){if(o)throw"unexpected EOF";break}r&&a(d+L),e.set(i.subarray(b,M),d),t.b=d+=L,t.p=u=M*8;continue}if(u>w){if(o)throw"unexpected EOF";break}}r&&a(d+131072);for(var ie=(1<<g)-1,re=(1<<_)-1,le=u;;le=u){var j=m[xo(i,u)&ie],de=j>>>4;if(u+=j&15,u>w){if(o)throw"unexpected EOF";break}if(!j)throw"invalid length/literal";if(de<256)e[d++]=de;else if(de==256){le=u,m=null;break}else{var ge=de-254;if(de>264){var I=de-257,fe=Al[I];ge=qt(i,u,(1<<fe)-1)+zl[I],u+=fe}var Se=f[xo(i,u)&re],nt=Se>>>4;if(!Se)throw"invalid distance";u+=Se&15;var Q=hf[nt];if(nt>3){var fe=Fl[nt];Q+=xo(i,u)&(1<<fe)-1,u+=fe}if(u>w){if(o)throw"unexpected EOF";break}r&&a(d+131072);for(var rt=d+ge;d<rt;d+=4)e[d]=e[d-Q],e[d+1]=e[d+1-Q],e[d+2]=e[d+2-Q],e[d+3]=e[d+3-Q];d=rt}}t.l=m,t.p=le,t.b=d,m&&(c=1,t.m=g,t.d=f,t.n=_)}while(!c);return d==e.length?e:mf(e,0,d)},yf=new Ut(0),_f=function(i){if((i[0]&15)!=8||i[0]>>>4>7||(i[0]<<8|i[1])%31)throw"invalid zlib data";if(i[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function vf(i,e){return gf((_f(i),i.subarray(2,-4)),e)}var wf=typeof TextDecoder<"u"&&new TextDecoder,bf=0;try{wf.decode(yf,{stream:!0}),bf=1}catch{}class xf extends p.Mesh{constructor(e,t={}){super(e),this.isWater=!0;const n=this,r=t.textureWidth!==void 0?t.textureWidth:512,o=t.textureHeight!==void 0?t.textureHeight:512,a=t.clipBias!==void 0?t.clipBias:0,c=t.alpha!==void 0?t.alpha:1,u=t.time!==void 0?t.time:0,d=t.waterNormals!==void 0?t.waterNormals:null,m=t.sunDirection!==void 0?t.sunDirection:new p.Vector3(.70707,.70707,0),f=new p.Color(t.sunColor!==void 0?t.sunColor:16777215),g=new p.Color(t.waterColor!==void 0?t.waterColor:8355711),_=t.eye!==void 0?t.eye:new p.Vector3(0,0,0),w=t.distortionScale!==void 0?t.distortionScale:20,x=t.side!==void 0?t.side:p.FrontSide,b=t.fog!==void 0?t.fog:!1,L=new p.Plane,M=new p.Vector3,C=new p.Vector3,Z=new p.Vector3,z=new p.Matrix4,D=new p.Vector3(0,0,-1),X=new p.Vector4,I=new p.Vector3,K=new p.Vector3,V=new p.Vector4,G=new p.Matrix4,k=new p.PerspectiveCamera,j=new p.WebGLRenderTarget(r,o),Y={uniforms:p.UniformsUtils.merge([p.UniformsLib.fog,p.UniformsLib.lights,{normalSampler:{value:null},mirrorSampler:{value:null},alpha:{value:1},time:{value:0},size:{value:1},distortionScale:{value:20},textureMatrix:{value:new p.Matrix4},sunColor:{value:new p.Color(8355711)},sunDirection:{value:new p.Vector3(.70707,.70707,0)},eye:{value:new p.Vector3},waterColor:{value:new p.Color(5592405)}}]),vertexShader:`
|
|
2
2
|
uniform mat4 textureMatrix;
|
|
3
3
|
uniform float time;
|
|
4
4
|
|
|
@@ -904,7 +904,7 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
904
904
|
}
|
|
905
905
|
`)}setDiffusionFromObject(e){if(!this.shaderOption.effects?.diffusion)return;const t=new lt.Box3().setFromObject(e);if(t.isEmpty())return;const n=new lt.Vector3;t.getCenter(n);const r=[new lt.Vector3(t.min.x,t.min.y,t.min.z),new lt.Vector3(t.max.x,t.max.y,t.max.z)];let o=0;r.forEach(a=>{const c=n.distanceTo(a);c>o&&(o=c)}),this.shaderOption.effects.diffusion={...this.shaderOption.effects.diffusion,center:n,maxDistance:o},this.needsUpdate=!0}updateBoundingBox(e,t){this.shaderOption.minY=e,this.shaderOption.maxY=t,this.needsUpdate=!0}updateEffects(e){this.shaderOption.effects={...this.shaderOption.effects,...e},this.needsUpdate=!0}animate(){requestAnimationFrame(()=>this.animate()),this.time.value=this.clock.getElapsedTime(),this.startTime.value<1&&(this.startTime.value+=.01)}}var K0=Object.defineProperty,N0=(i,e,t)=>e in i?K0(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,tn=(i,e,t)=>N0(i,typeof e!="symbol"?e+"":e,t);const B0={emissive:!1,emissiveIntensity:1,emissiveColor:"#ffffff"};class Ec extends en{constructor(e){super(e),tn(this,"_type","Model"),tn(this,"_emissive",!1),tn(this,"_emissiveIntensity",1),tn(this,"_emissiveColor","#ffffff"),tn(this,"_mixer",null),tn(this,"_currentAction",null),tn(this,"_animations",[]),tn(this,"_clock",new p.Clock),tn(this,"_autoUpdate",!0),tn(this,"_animationRequestId",null),tn(this,"_iscity",!1),this._emissive=e.emissive||!1,this._emissiveIntensity=e.emissiveIntensity||1,this._emissiveColor=e.emissiveColor||"#ffffff",this.castShadow=e.castShadow||!1,this.receiveShadow=e.receiveShadow||!1,this._iscity=e.iscity||!1}async _toThreeJSGeometry(){if(this._position=this._coordsTransform(),this._style){if(this._threeGeometry&&this._disposeGeometry(),this.modelunino=await this._createObject(this._style),this._threeGeometry=this.modelunino.model,!this._threeGeometry){console.error("Model load failed: model returned by _createObject is undefined"),console.error("模型加载失败:_createObject返回的model为undefined");return}this._threeGeometry.userData._type="Model",this.modelunino.animations&&this.modelunino.animations.length>0&&(this._animations=this.modelunino.animations,this._mixer=new p.AnimationMixer(this._threeGeometry),this._startAnimationLoop(),this.playAnimation({name:this._animations[0].name,loop:!0,speed:1.5,fadeInDuration:.5,fadeOutDuration:.3})),this._updateGeometry(),this.setShadows({cast:this.castShadow,receive:this.receiveShadow}),this._applyEmissionProperties(),this._iscity&&this._rendercity()}}async _createObject(e){switch(e.config.type){case"fbx":case"gltf":return ng(e.config,this._position);default:throw new Error(`Unsupported style type: ${e.config.type}`)}}_applyEmissionProperties(){this._threeGeometry&&this._threeGeometry.traverse(e=>{if("material"in e){const t=e.material;t&&(t.emissiveIntensity=this._emissive?this._emissiveIntensity:0,t.emissive&&t.emissive.setStyle(this._emissiveColor))}})}get emissive(){return this._emissive}set emissive(e){this._emissive=e,this._applyEmissionProperties()}get emissiveIntensity(){return this._emissiveIntensity}set emissiveIntensity(e){this._emissiveIntensity=e,this._applyEmissionProperties()}get emissiveColor(){return this._emissiveColor}set emissiveColor(e){this._emissiveColor=e,this._applyEmissionProperties()}setEmission(e,t,n){this._emissive=e,t!==void 0&&(this._emissiveIntensity=t),n!==void 0&&(this._emissiveColor=n),this._applyEmissionProperties()}async setShadows(e){this.castShadow=e.cast,this.receiveShadow=e.receive,this._threeGeometry&&this._threeGeometry.traverse(t=>{t.isMesh&&t.material&&(t.castShadow=e.cast,t.receiveShadow=e.receive)})}playAnimation(e){if(!this._mixer||this._animations.length===0){console.warn("No available animations for model"),console.warn("模型没有可用的动画");return}this._currentAction&&(e.fadeOutDuration&&e.fadeOutDuration>0?this._currentAction.fadeOut(e.fadeOutDuration):this._currentAction.stop());const t=typeof e.name=="number"?this._animations[e.name]:this._animations.find(n=>n.name===e.name);if(!t){console.warn(`Animation not found: ${e.name}`),console.warn(`找不到动画: ${e.name}`);return}this._currentAction=this._mixer.clipAction(t),this._currentAction.setLoop(e.loop?p.LoopRepeat:p.LoopOnce,e.loop?1/0:1),this._currentAction.timeScale=e.speed||1,this._currentAction.time=e.startAt||0,this._currentAction.setEffectiveWeight(e.weight||1),e.fadeInDuration&&e.fadeInDuration>0&&this._currentAction.fadeIn(e.fadeInDuration),this._currentAction.play(),this._autoUpdate&&this._animationRequestId===null&&this._startAnimationLoop()}stopAnimation(e={}){this._currentAction&&(e.fadeDuration&&e.fadeDuration>0?(this._currentAction.fadeOut(e.fadeDuration),setTimeout(()=>{this._currentAction&&(this._currentAction.stop(),this._currentAction=null)},e.fadeDuration*1e3)):(this._currentAction.stop(),this._currentAction=null))}setAnimationPaused(e){this._currentAction&&(this._currentAction.paused=e.paused)}setAnimationSpeed(e){this._currentAction&&(this._currentAction.timeScale=e.speed)}updateAnimation(e){this._mixer&&this._mixer.update(e.deltaTime)}getAnimationNames(){return this._animations.map(e=>e.name)}getCurrentAnimationName(){return this._currentAction?this._currentAction.getClip().name:null}getAnimationDuration(e){let t;return typeof e.name=="number"?t=this._animations[e.name]:t=this._animations.find(n=>n.name===e.name),t?t.duration:null}dispose(){this._stopAnimationLoop(),this._mixer&&(this._mixer.stopAllAction(),this._mixer.uncacheRoot(this._threeGeometry)),super.dispose()}_startAnimationLoop(){if(!this._autoUpdate||this._animationRequestId!==null)return;const e=()=>{if(this._mixer){const t=this._clock.getDelta();this._mixer.update(t)}this._animationRequestId=requestAnimationFrame(e)};this._clock.start(),this._animationRequestId=requestAnimationFrame(e)}_stopAnimationLoop(){this._animationRequestId!==null&&(cancelAnimationFrame(this._animationRequestId),this._animationRequestId=null),this._clock.stop()}setAutoUpdate(e){this._autoUpdate=e,e?this._startAnimationLoop():this._stopAnimationLoop()}_computeOverlayVertices(e){const t=e.feature;if(t&&Array.isArray(t._vertexPoints)&&t._vertexPoints.length>=6){const u=t.getMap?.()||this.getMap();if(u&&u.prjcenter){const d=u.prjcenter,m=t._vertexPoints,f=[];for(let g=0;g+2<m.length;g+=3){const _=m[g],w=m[g+2],x=d.x+_,b=d.z+w;f.push(new p.Vector2(x,b))}if(f.length>=3)return f}}const n=this.getMap();if(!n||!e.geometry)return null;const r=e.geometry;let o;if(r.type==="Polygon")o=r.coordinates;else if(r.type==="MultiPolygon"){if(!r.coordinates.length)return null;o=r.coordinates[0]}else return null;if(!o.length||!o[0].length)return null;const a=o[0],c=[];for(const u of a){const d=u[0],m=u[1],f=n.geo2world(new p.Vector3(d,m,0));c.push(new p.Vector2(f.x,f.z))}return c.length<3?null:c}_rendercity(){const e=this.getLayer();let t=null;if(e&&e.getRegionOverlays){const n=e.getRegionOverlays()||[];if(n.length){const r=n.filter(a=>(a.mode??"overlay")==="overlay").sort((a,c)=>(a.zIndex??0)-(c.zIndex??0)),o=r[r.length-1];if(o&&(o.geometry||o.feature)){const a=this._computeOverlayVertices(o);a&&a.length>=3&&(t={color:new p.Color(o.color??"#00FF88"),opacity:o.opacity??.3,vertices:a})}}}this.traverse(async n=>{if(n instanceof p.Mesh&&n.material){if(n.castShadow=!0,n.name==="building"){const r=new k0({color:new p.Color("#6BA7EC").multiplyScalar(1.8),opacity:.9,shaderOption:{minY:0,maxY:50,minRate:.3,maxRate:1.5,effects:{diffusion:{enabled:!0,color:new p.Color("#FFFFF"),width:300,speed:.05},flow:{enabled:!1,color:new p.Color("#FFFFF"),range:1e3,speed:3e3},sweep:{enabled:!0,color:new p.Color("#ffffff"),width:3,speed:5}}},regionOverlay:t||void 0}),o=new p.Box3().setFromObject(n);r.updateBoundingBox(o.min.y,o.max.y),r.setDiffusionFromObject(n),n.receiveShadow=!1,n.material=r,n.material.needsUpdate=!0}n.name==="grass"&&(n.castShadow=!1,n.receiveShadow=!0,n.material.color=new p.Color("#81e4d8ff)").multiplyScalar(.7),n.material.metalness=.2,n.material.roughness=.8,["metalnessMap","normalMap","roughnessMap","specularColorMap"].forEach(r=>{const o=n.material[r];o&&(o.wrapS=o.wrapT=p.RepeatWrapping,o.repeat.set(.3,.3),o.needsUpdate=!0)}),n.material.normalScale=new p.Vector2(3,3))}})}}Ec.mergeOptions(B0);var Y0=Object.defineProperty,R0=(i,e,t)=>e in i?Y0(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,j0=(i,e,t)=>R0(i,e+"",t);const J0={};class $c extends en{constructor(e){super(e),j0(this,"_type","Cloud")}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this._threeGeometry=await this._createObject(this._style),this._updateGeometry())}_updateGeometry(){this._disposeGeometry();const e=this.getLayer();this._threeGeometry&&(this._threeGeometry.position.copy(this._position),this._threeGeometry.renderOrder=99,e&&(e._clouds.add(this._threeGeometry),e._clouds.updateMatrixWorld()))}async _createObject(e){switch(e.config.type){case"cloud":return ag(e.config,this._position);default:throw new Error(`Unsupported style type: ${e.config.type}`)}}}$c.mergeOptions(J0);var Q0=Object.defineProperty,H0=(i,e,t)=>e in i?Q0(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,E0=(i,e,t)=>H0(i,e+"",t);const $0={};class qc extends en{constructor(e){super(e),E0(this,"_type","Label")}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this._threeGeometry=await this._createObject(this._style),this._updateGeometry())}_updateGeometryPositions(){this._position=this._coordsTransform(),this._threeGeometry?(this._threeGeometry.position.copy(this._position),this.children.includes(this._threeGeometry)||this.add(this._threeGeometry),this.updateMatrixWorld(!0),this._threeGeometry.updateMatrixWorld(!0)):this._toThreeJSGeometry()}async _createObject(e){switch(e.config.type){case"canvas-label-fixed":return cg(e.config,new p.Vector3(0,0,0),this.getMap());case"canvas-label":return lg(e.config,new p.Vector3(0,0,0));default:throw new Error(`Unsupported style type: ${e.config.type}`)}}}qc.mergeOptions($0);var q0=Object.defineProperty,ey=(i,e,t)=>e in i?q0(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,eu=(i,e,t)=>ey(i,typeof e!="symbol"?e+"":e,t);const ty={};class tu extends en{constructor(e){super(e),eu(this,"_type","TPoints"),eu(this,"_geometries"),this._geometries=e.geometries}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this._threeGeometry=await this._createObject(this._style),this._updateGeometry())}_updateGeometry(){this._threeGeometry&&(this._threeGeometry.points&&this.add(this._threeGeometry.points),this._threeGeometry.InstancedCol&&this.add(this._threeGeometry.InstancedCol),this.updateMatrixWorld(!0))}async _createObject(e){switch(e.config.type){case"light":return _g(e.config,this._geometries,this.getMap());default:throw new Error(`Unsupported style type: ${e.config.type}`)}}}tu.mergeOptions(ty);var ny=Object.defineProperty,ry=(i,e,t)=>e in i?ny(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Rn=(i,e,t)=>ry(i,typeof e!="symbol"?e+"":e,t);class Pi extends Kn(Object){constructor(e,t){super(),Rn(this,"options"),Rn(this,"map"),Rn(this,"_sprite",null),Rn(this,"_isDragging",!1),Rn(this,"_dragStartPosition",null),Rn(this,"_lastCoordinate",null),Rn(this,"_boundOnMouseMove",null),Rn(this,"_boundOnMouseUp",null),this.map=t,this.options={position:e.position,index:e.index,symbol:e.symbol??0,size:e.size??8,color:e.color??"#ffffff",opacity:e.opacity??.9,draggable:e.draggable??!0},this._createSprite(),this._boundOnMouseMove=this._onMouseMove.bind(this),this._boundOnMouseUp=this._onMouseUp.bind(this)}_createSprite(){const t=document.createElement("canvas"),n=t.getContext("2d");t.width=64,t.height=64;const r=64/2,o=64/2-2;n.clearRect(0,0,t.width,t.height),n.beginPath(),n.arc(r,r,o,0,2*Math.PI),n.fillStyle="#000000",n.fill(),n.beginPath(),n.arc(r,r,o-2,0,2*Math.PI),n.fillStyle=this.options.color,n.fill();const a=new p.CanvasTexture(t);a.needsUpdate=!0;const c=new p.SpriteMaterial({map:a,opacity:this.options.opacity,transparent:!0,depthTest:!1,depthWrite:!1,sizeAttenuation:!0});this._sprite=new p.Sprite(c),this._sprite.position.copy(this.options.position),this._sprite.renderOrder=999999;const u=new p.Vector2;this._sprite.onBeforeRender=(d,m,f)=>{if(!this._sprite||!f)return;const g=f.position.distanceTo(this._sprite.position);d.getSize(u);const _=d.getPixelRatio(),w=this.options.size*_;let x=1;if(f.isPerspectiveCamera){const b=f.fov*Math.PI/180,L=2*Math.tan(b/2)*g;x=w/u.y*L}else if(f.isOrthographicCamera){const b=f.top,L=f.bottom,M=Math.abs(b-L)/f.zoom;x=w/u.y*M}this._sprite.scale.set(x,x,1)},this._sprite._editHandle=this,this.map.viewer.scene.add(this._sprite)}updatePosition(e){this.options.position=e,this._sprite&&this._sprite.position.copy(e)}getPosition(){return this.options.position.clone()}getIndex(){return this.options.index}getSymbol(){return this.options.symbol}getSprite(){return this._sprite}intersect(e){return!this._sprite||!this.options.draggable?!1:e.intersectObject(this._sprite).length>0}startDrag(e){this.options.draggable&&(this._isDragging=!0,this._dragStartPosition=this.options.position.clone(),this._lastCoordinate=e,this.map.viewer.config("draggable",!1),this.map.on("mousemove",this._boundOnMouseMove),this.map.on("mouseup",this._boundOnMouseUp),this.trigger("dragstart",{target:this,coordinate:e,position:this.options.position.clone()}))}_onMouseMove(e){if(!this._isDragging||!this._lastCoordinate)return;const t=e.coordinate,n=t[0]-this._lastCoordinate[0],r=t[1]-this._lastCoordinate[1],o=this.map.world2geo(this.options.position),a=this.map.geo2world(new p.Vector3(t[0],t[1],o.z));this.updatePosition(a),this._lastCoordinate=t,this.trigger("dragging",{target:this,coordinate:t,position:this.options.position.clone(),offset:{dx:n,dy:r}})}_onMouseUp(e){this._isDragging&&(this._isDragging=!1,this.map.viewer.config("draggable",!0),this.map.off("mousemove",this._boundOnMouseMove),this.map.off("mouseup",this._boundOnMouseUp),this.trigger("dragend",{target:this,coordinate:e.coordinate,position:this.options.position.clone(),startPosition:this._dragStartPosition}),this._dragStartPosition=null,this._lastCoordinate=null)}show(){this._sprite&&(this._sprite.visible=!0)}hide(){this._sprite&&(this._sprite.visible=!1)}remove(){if(this._isDragging&&(this._isDragging=!1,this.map.viewer.config("draggable",!0),this.map.off("mousemove",this._boundOnMouseMove),this.map.off("mouseup",this._boundOnMouseUp)),this._sprite){this.map.viewer.scene.remove(this._sprite);const e=this._sprite.material;e.map&&e.map.dispose(),e.dispose(),this._sprite=null}this._dragStartPosition=null,this._lastCoordinate=null,this._boundOnMouseMove=null,this._boundOnMouseUp=null}}function ea(i,e,t){const{currentTarget:n,clientX:r,clientY:o}=i;if(n instanceof HTMLElement){const a=n.clientWidth,c=n.clientHeight,u=new p.Vector2(r/a*2-1,-(o/c)*2+1);return e.getLocalInfoFromScreen(t,u)?.location}else return}var iy=Object.defineProperty,sy=(i,e,t)=>e in i?iy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ut=(i,e,t)=>sy(i,typeof e!="symbol"?e+"":e,t);class oy extends ls{constructor(e,t){super(e),ut(this,"options"),ut(this,"_handles",[]),ut(this,"_middleHandles",[]),ut(this,"_middleHandleColor","rgba(255, 255, 255, 0.6)"),ut(this,"_editing",!1),ut(this,"_shadow",null),ut(this,"_shadowSnapshot",null),ut(this,"_updating",!1),ut(this,"_history",[]),ut(this,"_historyIndex",-1),ut(this,"_draggableOriginalState",!1),ut(this,"_boundOnMapMouseMove",null),ut(this,"_boundOnMapClick",null),ut(this,"_boundOnMapMouseDown",null),ut(this,"_boundOnFeatureDragging",null),ut(this,"_boundOnFeatureDragEnd",null),this.options={handleSize:t?.handleSize??8,handleColor:t?.handleColor??"#ffffff",showMiddleHandles:t?.showMiddleHandles??!1,maxHistorySize:t?.maxHistorySize??20,removeVertexOn:t?.removeVertexOn??"contextmenu"},this._boundOnMapMouseMove=this._onMapMouseMove.bind(this),this._boundOnMapClick=this._onMapClick.bind(this),this._boundOnMapMouseDown=this._onMapMouseDown.bind(this),this._boundOnFeatureDragging=this._onFeatureDragging.bind(this),this._boundOnFeatureDragEnd=this._onFeatureDragEnd.bind(this)}enable(){return this._editing?this:(super.enable(),this._editing=!0,this._createShadow(),this._saveSnapshot(),this._setFeatureEditingStyle(!0),this._createHandles(),this.target.trigger("editstart"),this._draggableOriginalState=this.target.options.draggable||!1,this._draggableOriginalState||(this.target.options.draggable=!0,this.target.draggable&&this.target.draggable.enable()),this)}disable(){return this._editing?(super.disable(),this._editing=!1,this._clearHandles(),this._setFeatureEditingStyle(!1),this._draggableOriginalState||(this.target.options.draggable=!1,this.target.draggable&&this.target.draggable.disable()),this._draggableOriginalState=!1,this._updateCoordFromShadow(),this._removeShadow(),this.target.trigger("editend"),this):this}addHooks(){const e=this._getMap();e&&(e.on("mousemove",this._boundOnMapMouseMove),e.on("click",this._boundOnMapClick),e.viewer.container&&e.viewer.container.addEventListener("mousedown",this._boundOnMapMouseDown,!0),this.options.removeVertexOn==="contextmenu"&&e.on("contextmenu",this._boundOnMapClick)),this.target.on("dragging",this._boundOnFeatureDragging),this.target.on("dragend",this._boundOnFeatureDragEnd)}removeHooks(){const e=this._getMap();e&&(e.off("mousemove",this._boundOnMapMouseMove),e.off("click",this._boundOnMapClick),e.viewer.container&&e.viewer.container.removeEventListener("mousedown",this._boundOnMapMouseDown,!0),this.options.removeVertexOn==="contextmenu"&&e.off("contextmenu",this._boundOnMapClick)),this.target.off("dragging",this._boundOnFeatureDragging),this.target.off("dragend",this._boundOnFeatureDragEnd)}isEditing(){return this._editing}_createShadow(){this._shadow=null}_removeShadow(){this._shadow&&(this._shadow=null),this._shadowSnapshot=null}_updateCoordFromShadow(e=!1){e&&!this._updating&&this.target._onPositionChanged(!0)}_saveSnapshot(){const e=this.target._geometry;this._shadowSnapshot={type:e.type,coordinates:JSON.parse(JSON.stringify(e.coordinates))},this._addHistory(e.coordinates)}_addHistory(e){this._historyIndex<this._history.length-1&&(this._history=this._history.slice(0,this._historyIndex+1)),this._history.push({coordinates:JSON.parse(JSON.stringify(e)),timestamp:Date.now()}),this._history.length>this.options.maxHistorySize?this._history.shift():this._historyIndex++}undo(){if(this._historyIndex>0){this._historyIndex--;const e=this._history[this._historyIndex];this._restoreCoordinates(e.coordinates),this.target.trigger("editundo")}return this}redo(){if(this._historyIndex<this._history.length-1){this._historyIndex++;const e=this._history[this._historyIndex];this._restoreCoordinates(e.coordinates),this.target.trigger("editredo")}return this}_restoreCoordinates(e){const t=this.target._geometry;t.coordinates=JSON.parse(JSON.stringify(e)),this.target._onPositionChanged(!0),this._updateHandlePositions()}cancel(){return this._shadowSnapshot&&this._restoreCoordinates(this._shadowSnapshot.coordinates),this.disable(),this}_createHandles(){const e=this.target._geometry,t=this._getMap();if(!t){console.warn("[FeatureEditHandler] No map found, cannot create handles");return}this.target instanceof en?this._createPointHandles(e,t):this.target instanceof xt?this._createLineStringHandles(e,t):this.target instanceof _n&&this._createPolygonHandles(e,t)}_createPointHandles(e,t){const n=e.coordinates,r=t.geo2world(new p.Vector3(n[0],n[1],n[2]||0)),o=new Pi({position:r,index:0,symbol:0,size:this.options.handleSize,color:this.options.handleColor},t);o.on("dragstart",a=>{this._onHandleDragStart(a,0)}),o.on("dragging",a=>{this._onHandleDragging(a,0)}),o.on("dragend",a=>{this._onHandleDragEnd(a,0)}),this._handles.push(o)}_createLineStringHandles(e,t){const n=e.coordinates;n.forEach((r,o)=>{const a=t.geo2world(new p.Vector3(r[0],r[1],r[2]||0)),c=new Pi({position:a,index:o,symbol:0,size:this.options.handleSize,color:this.options.handleColor},t);c.on("dragstart",u=>{this._onHandleDragStart(u,o)}),c.on("dragging",u=>{this._onHandleDragging(u,o)}),c.on("dragend",u=>{this._onHandleDragEnd(u,o)}),this._handles.push(c)}),this.options.showMiddleHandles&&this._createLineStringMiddleHandles(n,t)}_onHandleDragging(e,t){this._updating=!0;const r=e.target.getPosition();if(!this._getMap())return;const a=this._fixHandlePointCoordinates(r,t),c=this.target._geometry;this.target instanceof en?c.coordinates=[a.x,a.y,a.z]:this.target instanceof xt&&(c.coordinates[t]=[a.x,a.y,a.z]),this.target._onPositionChanged(!0),this.target.trigger("handledragging",{index:t,coordinate:[a.x,a.y,a.z]}),this.target.trigger("editing",{index:t,coordinate:[a.x,a.y,a.z]}),this._updating=!1}_onHandleDragStart(e,t){this._updating=!0,this.target.trigger("handledragstart",{index:t,coordinate:e.coordinate})}_onHandleDragEnd(e,t){this._updating=!1;const n=this.target._geometry;this._addHistory(n.coordinates),this.target.trigger("handledragend",{index:t,coordinate:this.target instanceof en?n.coordinates:n.coordinates[t]}),this.target.trigger("editvertex",{index:t,coordinate:this.target instanceof en?n.coordinates:n.coordinates[t]})}_createPolygonHandles(e,t){const n=e.coordinates;if(!n||!Array.isArray(n)||n.length===0){console.warn("[FeatureEditHandler] Invalid polygon coordinates");return}n.forEach((o,a)=>{if(!o||o.length<3)return;const c=o[0][0]===o[o.length-1][0]&&o[0][1]===o[o.length-1][1]?o.length-1:o.length;for(let u=0;u<c;u++){const d=o[u],m=t.geo2world(new p.Vector3(d[0],d[1],d[2]||0)),f=new Pi({position:m,index:u,symbol:0,size:this.options.handleSize,color:this.options.handleColor},t);f._ringIndex=a,f.on("dragstart",g=>{this._onPolygonHandleDragStart(g,u,a)}),f.on("dragging",g=>{this._onPolygonHandleDragging(g,u,a)}),f.on("dragend",g=>{this._onPolygonHandleDragEnd(g,u,a)}),this._handles.push(f)}this.options.showMiddleHandles&&this._createPolygonMiddleHandles(o,a,t)})}_onPolygonHandleDragStart(e,t,n){this._updating=!0,this.target.trigger("handledragstart",{index:t,ringIndex:n,coordinate:e.coordinate})}_onPolygonHandleDragging(e,t,n){const o=e.target.getPosition();if(!this._getMap())return;const c=this._fixHandlePointCoordinates(o,t,n),d=this.target._geometry.coordinates;if(d[n]&&d[n][t]&&(d[n][t]=[c.x,c.y,c.z],t===0&&d[n].length>1)){const m=d[n].length-1;d[n][m]=[c.x,c.y,c.z]}this.target._onPositionChanged(!0),this.target.trigger("handledragging",{index:t,ringIndex:n,coordinate:[c.x,c.y,c.z]}),this.target.trigger("editing",{index:t,ringIndex:n,coordinate:[c.x,c.y,c.z]})}_onPolygonHandleDragEnd(e,t,n){this._updating=!1;const r=this.target._geometry,o=r.coordinates;this._addHistory(r.coordinates),this.target.trigger("handledragend",{index:t,ringIndex:n,coordinate:o[n]?.[t]||null}),this.target.trigger("editvertex",{index:t,ringIndex:n,coordinate:o[n]?.[t]||null})}_updateHandlePositions(){const e=this.target._geometry,t=this._getMap();if(t){if(this.target instanceof en){const n=e.coordinates,r=t.geo2world(new p.Vector3(n[0],n[1],n[2]||0));this._handles[0]&&this._handles[0].updatePosition(r)}else if(this.target instanceof xt)e.coordinates.forEach((r,o)=>{const a=t.geo2world(new p.Vector3(r[0],r[1],r[2]||0));this._handles[o]&&this._handles[o].updatePosition(a)});else if(this.target instanceof _n){const n=e.coordinates;let r=0;n.forEach(o=>{const a=o[0][0]===o[o.length-1][0]&&o[0][1]===o[o.length-1][1]?o.length-1:o.length;for(let c=0;c<a;c++){const u=o[c],d=t.geo2world(new p.Vector3(u[0],u[1],u[2]||0));this._handles[r]&&this._handles[r].updatePosition(d),r++}})}}}_clearHandles(){this._handles.forEach(e=>e.remove()),this._handles=[],this._middleHandles.forEach(e=>e.remove()),this._middleHandles=[]}_onFeatureDragging(e){this._updateHandlePositions(),this.options.showMiddleHandles&&this._updateMiddleHandlePositions()}_onFeatureDragEnd(e){const t=this.target._geometry;this._addHistory(t.coordinates),this._updateHandlePositions(),this.options.showMiddleHandles&&this._updateMiddleHandlePositions()}_updateMiddleHandlePositions(){const e=this.target._geometry,t=this._getMap();if(!t)return;let n=0;if(this.target instanceof xt){const r=e.coordinates;for(let o=0;o<r.length-1&&!(n>=this._middleHandles.length);o++){const a=r[o],c=r[o+1],u=[(a[0]+c[0])/2,(a[1]+c[1])/2,((a[2]||0)+(c[2]||0))/2],d=t.geo2world(new p.Vector3(u[0],u[1],u[2]));this._middleHandles[n].updatePosition(d),n++}}else this.target instanceof _n&&e.coordinates.forEach(o=>{const a=o[0][0]===o[o.length-1][0]&&o[0][1]===o[o.length-1][1]?o.length-1:o.length;for(let c=0;c<a&&!(n>=this._middleHandles.length);c++){const u=(c+1)%a,d=o[c],m=o[u],f=[(d[0]+m[0])/2,(d[1]+m[1])/2,((d[2]||0)+(m[2]||0))/2],g=t.geo2world(new p.Vector3(f[0],f[1],f[2]));this._middleHandles[n].updatePosition(g),n++}})}_onMapMouseDown(e){const t=this._getMap();if(!t)return;const n=new p.Raycaster;n.params.Points={threshold:.5};const r=e,o=t.viewer.renderer.domElement,a=o.getBoundingClientRect(),c=new p.Vector2((r.clientX-a.left)/a.width*2-1,-((r.clientY-a.top)/a.height)*2+1);n.setFromCamera(c,t.viewer.camera);const u=[...this._handles,...this._middleHandles];for(const d of u)if(d.intersect(n)){const m=ea({currentTarget:o,clientX:r.clientX,clientY:r.clientY},t.tilemap,t.viewer.camera);m&&(d.startDrag([m.x,m.y]),r.stopPropagation&&r.stopPropagation(),r.stopImmediatePropagation&&r.stopImmediatePropagation(),r.preventDefault&&r.preventDefault());return}}_onMapMouseMove(e){}_onMapClick(e){if(!(e.type===this.options.removeVertexOn))return;const n=this._getMap();if(!n)return;const r=new p.Raycaster;r.params.Points={threshold:.5};const o=e.originEvent;if(!o)return;const a=new p.Vector2(o.offsetX/n.viewer.renderer.domElement.clientWidth*2-1,-(o.offsetY/n.viewer.renderer.domElement.clientHeight)*2+1);r.setFromCamera(a,n.viewer.camera);for(let c=0;c<this._handles.length;c++)if(this._handles[c].intersect(r)){this._removeVertex(c),o.stopPropagation&&o.stopPropagation(),o.preventDefault&&o.preventDefault();return}}_setFeatureEditingStyle(e){const t=this.target._threeGeometry;t&&t.traverse(n=>{n.material&&(e?Array.isArray(n.material)?n.material.forEach(r=>{r.userData._originalOpacity||(r.userData._originalOpacity=r.opacity),r.opacity=Math.min(r.opacity*.6,.6),r.transparent=!0}):(n.material.userData._originalOpacity||(n.material.userData._originalOpacity=n.material.opacity),n.material.opacity=Math.min(n.material.opacity*.6,.6),n.material.transparent=!0):Array.isArray(n.material)?n.material.forEach(r=>{r.userData._originalOpacity!==void 0&&(r.opacity=r.userData._originalOpacity,delete r.userData._originalOpacity)}):n.material.userData._originalOpacity!==void 0&&(n.material.opacity=n.material.userData._originalOpacity,delete n.material.userData._originalOpacity))})}_removeVertex(e){const t=this.target._geometry,n=this._handles[e],r=n.getIndex(),o=n._ringIndex||0;let a=null;if(this.target instanceof xt){const c=t.coordinates;if(c.length<=2){console.warn("[FeatureEditHandler] LineString requires at least 2 vertices");return}a=c[r],c.splice(r,1)}else if(this.target instanceof _n){const u=t.coordinates[o];if(!u)return;const d=u.length>1&&u[0][0]===u[u.length-1][0]&&u[0][1]===u[u.length-1][1],m=d?4:3;if(u.length<=m){console.warn("[FeatureEditHandler] Polygon ring requires at least 3 vertices");return}a=u[r],u.splice(r,1),d&&r===0&&u.length>0&&(u[u.length-1]=[...u[0]])}else return;this.target._onPositionChanged(!0),n.remove(),this._handles.splice(e,1),this._updateHandleIndices(),this._addHistory(t.coordinates),this.target.trigger("handleremove",{index:r,ringIndex:o,coordinate:a})}_createLineStringMiddleHandles(e,t){for(let n=0;n<e.length-1;n++){const r=e[n],o=e[n+1],a=[(r[0]+o[0])/2,(r[1]+o[1])/2,((r[2]||0)+(o[2]||0))/2],c=t.geo2world(new p.Vector3(a[0],a[1],a[2])),u=new Pi({position:c,index:n,symbol:1,size:this.options.handleSize,color:this._middleHandleColor,opacity:.6},t);u.on("dragstart",d=>{this._onMiddleHandleClick(n,"LineString",0)}),this._middleHandles.push(u)}}_createPolygonMiddleHandles(e,t,n){const r=e[0][0]===e[e.length-1][0]&&e[0][1]===e[e.length-1][1]?e.length-1:e.length;for(let o=0;o<r;o++){const a=(o+1)%r,c=e[o],u=e[a],d=[(c[0]+u[0])/2,(c[1]+u[1])/2,((c[2]||0)+(u[2]||0))/2],m=n.geo2world(new p.Vector3(d[0],d[1],d[2])),f=new Pi({position:m,index:o,symbol:1,size:this.options.handleSize,color:this._middleHandleColor,opacity:.6},n);f._ringIndex=t,f.on("dragstart",g=>{this._onMiddleHandleClick(o,"Polygon",t)}),this._middleHandles.push(f)}}_onMiddleHandleClick(e,t,n){const r=this.target._geometry;if(this._getMap()){if(t==="LineString"){const a=r.coordinates,c=a[e],u=a[e+1],d=[(c[0]+u[0])/2,(c[1]+u[1])/2,((c[2]||0)+(u[2]||0))/2];a.splice(e+1,0,d)}else if(t==="Polygon"){const c=r.coordinates[n];if(!c)return;const u=c[0][0]===c[c.length-1][0]&&c[0][1]===c[c.length-1][1]?c.length-1:c.length,d=(e+1)%u,m=c[e],f=c[d],g=[(m[0]+f[0])/2,(m[1]+f[1])/2,((m[2]||0)+(f[2]||0))/2];c.splice(e+1,0,g),c.length>1&&c[0][0]===c[c.length-1][0]&&c[0][1]===c[c.length-1][1]&&e===u-1&&(c[c.length-1]=[...c[0]])}this.target._onPositionChanged(!0),this._clearHandles(),this._createHandles(),this._addHistory(r.coordinates),this.target.trigger("vertexinsert",{index:e+1,ringIndex:n})}}_updateHandleIndices(){if(this.target instanceof xt)this._handles.forEach((e,t)=>{e._index=t});else if(this.target instanceof _n){let e=0;this.target._geometry.coordinates.forEach((r,o)=>{const a=r[0][0]===r[r.length-1][0]&&r[0][1]===r[r.length-1][1]?r.length-1:r.length;for(let c=0;c<a;c++)this._handles[e]&&(this._handles[e]._index=c,this._handles[e]._ringIndex=o),e++})}}_fixHandlePointCoordinates(e,t,n=0){const r=this._getMap();if(!r)return e;const o=this.target._geometry;let a=null;if(this.target instanceof en)a=o.coordinates;else if(this.target instanceof xt)a=o.coordinates[t];else if(this.target instanceof _n){const u=o.coordinates;u[n]&&u[n][t]&&(a=u[n][t])}if(!a||!a[2]||a[2]===0)return r.world2geo(e);const c=r.world2geo(e);return c.z=a[2],c}_getMap(){return this.target.getMap()}remove(){this.disable(),this._history=[],this._historyIndex=-1,this._shadow=null,this._shadowSnapshot=null,this._boundOnMapMouseMove=null,this._boundOnMapClick=null,this._boundOnMapMouseDown=null}}ct.prototype.startEdit=function(i){return this.options?.editable?(this._editor&&this.endEdit(),this._editor=new oy(this,i),this._editor.enable(),this):(console.warn("Feature is not editable. Set editable option to true."),this)},ct.prototype.endEdit=function(){return this._editor&&(this._editor.disable(),this._editor.remove(),delete this._editor),this},ct.prototype.isEditing=function(){return this._editor?this._editor.isEditing():!1},ct.prototype.cancelEdit=function(){return this._editor&&this._editor.cancel(),this},ct.prototype.undoEdit=function(){return this._editor&&this._editor.undo(),this},ct.prototype.redoEdit=function(){return this._editor&&this._editor.redo(),this};function ys(i,e){if(!i||i===!0)return!0;if(!Array.isArray(i))return!!i;switch(i[0]){case"all":return i.slice(1).every(n=>ys(n,e));case"any":return i.slice(1).some(n=>ys(n,e));case"!":return!ys(i[1],e);case"==":{const n=ht(i[1],e),r=ht(i[2],e);return _s(n)==_s(r)}case"!=":{const n=ht(i[1],e),r=ht(i[2],e);return _s(n)!=_s(r)}case">":{const n=ht(i[1],e),r=ht(i[2],e);return jn(n)>jn(r)}case"<":{const n=ht(i[1],e),r=ht(i[2],e);return jn(n)<jn(r)}case">=":{const n=ht(i[1],e),r=ht(i[2],e);return jn(n)>=jn(r)}case"<=":{const n=ht(i[1],e),r=ht(i[2],e);return jn(n)<=jn(r)}case"in":{const n=ht(i[1],e);return i.slice(2).map(o=>ht(o,e)).includes(n)}case"!in":{const n=ht(i[1],e);return!i.slice(2).map(o=>ht(o,e)).includes(n)}case"has":{const n=i[1];return e!=null&&Object.prototype.hasOwnProperty.call(e,n)}case"!has":{const n=i[1];return!(e!=null&&Object.prototype.hasOwnProperty.call(e,n))}default:return!0}}function ht(i,e){if(Array.isArray(i))switch(i[0]){case"get":return e?e[i[1]]:void 0;default:return i}return i}function _s(i){if(i==null)return null;if(typeof i=="string"){const e=Number(i);if(!isNaN(e)&&i.trim()!=="")return e}return typeof i=="boolean"?i?1:0:i}function jn(i){if(i==null)return 0;if(typeof i=="number")return i;if(typeof i=="boolean")return i?1:0;if(typeof i=="string"){const e=Number(i);return isNaN(e)?0:e}return Number(i)}var ay=Object.defineProperty,ly=(i,e,t)=>e in i?ay(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ci=(i,e,t)=>ly(i,typeof e!="symbol"?e+"":e,t);class ta extends Bn{constructor(e,t){super(e,t),Ci(this,"TILE_SIZE"),Ci(this,"EXTENT"),Ci(this,"style"),Ci(this,"_tileFeatureMap",new Map),Ci(this,"_activeFeatureFilter"),this.TILE_SIZE=t.tileSize??256,this.EXTENT=t.extent??4096,this.style=t.style||[],this._onMapUpdate=this._onMapUpdate.bind(this)}processTileData(e,t){const n=this.getMap(),r=`${e.z}-${e.x}-${e.y}`,o=this._tileFeatureMap.get(r);if(o&&o.length>0){o.forEach(d=>{d.visible=!0,this.children.some(m=>m&&d&&m.uuid===d.uuid)||d.addTo(this)});return}const a=t.vectorData;if(!a||!a.layers||!n||this.style.length===0)return;const c=[],u=this.style;Object.keys(a.layers).forEach(d=>{const m=a.layers[d];for(let f=0;f<m.length;f++){const g=m[f],_=g.geometry;if(this._activeFeatureFilter&&!this._activeFeatureFilter(g.properties))continue;let w=null;for(const x of u)if(this._evaluateFilter(x.filter,g.properties,d,g.geometry.type)){w=x.style;break}if(w){const x={isVectorTile:!0,tileZ:e.z,tileX:e.x,tileY:e.y,rawCoordinates:_,extent:this.EXTENT,tileSize:this.TILE_SIZE},b=this._createFeatureInstance(g.geometry,g.geometry.type,w,g.properties);b&&(b.userData.tileData=x,b.style=Gt.create(w),b.addTo(this),b.initializeGeometry(),c.push(b))}}}),this._tileFeatureMap.set(r,c)}_evaluateFilter(e,t,n,r){if(!e||e===!0)return!0;const o={...t,$layer:n,$type:r};return ys(e,o)}hideFeaturesByTileKey(e){const t=this._tileFeatureMap.get(e);t&&t.forEach(n=>{n.visible=!1})}removeFeaturesByTileKey(e){this._removeFeaturesByTileKey(e)}_removeFeaturesByTileKey(e){const t=this._tileFeatureMap.get(e);t&&(t.forEach(n=>{n._remove()}),this._tileFeatureMap.delete(e))}_createFeatureInstance(e,t,n,r){const a={geometry:{ismvt:!0,...e},style:n,userData:r};switch(t){case"Point":return new Pn(a);case"LineString":return new xt(a);default:return null}}setFeatureFilter(e){this._activeFeatureFilter=e}clearFeatureFilter(){this._activeFeatureFilter=void 0}setOpacity(e){this.opacity=e,this._tileFeatureMap.forEach(t=>{t.forEach(n=>{n.material&&(n.material.opacity=e,n.material.transparent=e<1)})})}_onMapUpdate(){}validateFeature(e){return e instanceof ct}dispose(){this._tileFeatureMap.forEach((e,t)=>{this._removeFeaturesByTileKey(t)}),super.dispose()}}var cy=Object.defineProperty,uy=(i,e,t)=>e in i?cy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Mt=(i,e,t)=>uy(i,typeof e!="symbol"?e+"":e,t);class nu extends ds{constructor(e,t){super(e,t),this.layerId=e,Mt(this,"isTileLayer",!0),Mt(this,"layerType","base"),Mt(this,"isBaseLayer",!1),Mt(this,"_enabled",!0),Mt(this,"_visible",!0),Mt(this,"_rootTile"),Mt(this,"_loader"),Mt(this,"_LODThreshold",1),Mt(this,"isSceneLayer",!1),Mt(this,"opacity",1),Mt(this,"source"),Mt(this,"projection"),Mt(this,"minLevel",2),Mt(this,"maxLevel",19),this.source=t.source,this.projection=t.projection,this.minLevel=t.minLevel??2,this.maxLevel=t.maxLevel??19,this._LODThreshold=t.LODThreshold??1,this.opacity=t.opacity??1,this.name=`Layer-${e}`,this._loader=this.createLoader(),this._rootTile=new Nn,this._rootTile.matrixAutoUpdate=!0,this._rootTile.scale.set(this.projection.mapWidth,this.projection.mapHeight,1),this.add(this._rootTile),this._rootTile.updateMatrix(),this.layerId=e,this.name==="Layer-label-layer"&&this.position.set(0,0,1)}get LODThreshold(){return this._LODThreshold}set LODThreshold(e){this._LODThreshold=e}get loader(){return this._loader}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._rootTile&&(this._rootTile.visible=e&&this._visible)}get ivisible(){return this._visible&&super._visible}set ivisible(e){this._visible=e,this._rootTile&&(this._rootTile.visible=e&&this._enabled)}update(e){if(!(!this._enabled||!this._visible)){try{this._rootTile.update({camera:e,loader:this._loader,minLevel:this.minLevel,maxLevel:this.maxLevel,LODThreshold:this.LODThreshold})}catch{}console.groupEnd()}}_debugTileTree(){this._rootTile.traverse(e=>{e.isTile&&(e.loaded,e.visible,e.inFrustum,e.loaded)})}_getLODThreshold(){return 1}_getCurrentTileLevel(){let e=0;return this._rootTile.traverse(t=>{t.isTile&&t.loaded&&(e=Math.max(e,t.z))}),`最大层级: ${e}`}dispose(){this.remove(this._rootTile),this._rootTile.reload(this._loader)}reload(){this._rootTile.reload(this._loader)}setElevation(e){this.position.y=e,this.updateMatrix(),this.updateMatrixWorld(!0)}raiseElevation(e){this.position.z+=e,this.updateMatrix(),this.updateMatrixWorld(!0)}getElevation(){return this.position.y}}var hy=Object.defineProperty,dy=(i,e,t)=>e in i?hy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,fy=(i,e,t)=>dy(i,e+"",t);class ru extends p.LoadingManager{constructor(){super(...arguments),fy(this,"onParseEnd")}parseEnd(e){this.onParseEnd&&this.onParseEnd(e)}}const Oe={manager:new ru,demLoaderMap:new Map,meshLoaderMap:new Map,imgLoaderMap:new Map,registerMaterialLoader(i){Oe.imgLoaderMap.set(i.dataType,i),i.info.author=i.info.author??yo.name},registerGeometryLoader(i){Oe.demLoaderMap.set(i.dataType,i),i.info.author=i.info.author??yo.name},registerMeshLoader(i){Oe.meshLoaderMap.set(i.dataType,i),i.info.author=i.info.author??yo.name},getMaterialLoader(i){const e=Oe.imgLoaderMap.get(i.dataType);if(e)return e;throw`Source dataType "${i.dataType}" is not support!`},getGeometryLoader(i){const e=Oe.demLoaderMap.get(i.dataType);if(e)return e;throw`Source dataType "${i.dataType}" is not support!`},getMeshLoader(i){const e=Oe.meshLoaderMap.get(i.dataType);if(e)return e;throw`Source dataType "${i.dataType}" is not support!`}};var py=Object.defineProperty,my=(i,e,t)=>e in i?py(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,gy=(i,e,t)=>my(i,e+"",t);class yy{constructor(e){gy(this,"worker"),this.worker=e()}async run(e,t){return new Promise(n=>{this.worker.onmessage=r=>{n(r.data)},this.worker.postMessage(e,t)})}terminate(){this.worker.terminate()}}const _y=4096,iu=Math.PI;function na(i,e){const t=Math.floor(i[0]*e),n=Math.floor(i[1]*e),r=Math.floor((i[2]-i[0])*e),o=Math.floor((i[3]-i[1])*e);return{sx:t,sy:n,sw:r,sh:o}}function ra(i,e,t,n){if(n<i.minLevel)return{url:void 0,clipBounds:[0,0,1,1]};if(n<=i.maxLevel)return{url:i._getUrl(e,t,n),clipBounds:[0,0,1,1]};const r=vy(e,t,n,i.maxLevel),o=r.parentNO;return{url:i._getUrl(o.x,o.y,o.z),clipBounds:r.bounds}}function vy(i,e,t,n){const r=t-n,o={x:i>>r,y:e>>r,z:t-r},a=Math.pow(2,r),c=Math.pow(.5,r),u=i%a/a-.5+c/2,d=e%a/a-.5+c/2,m=new p.Vector2(u,d),f=new p.Box2().setFromCenterAndSize(m,new p.Vector2(c,c)),g=[f.min.x+.5,f.min.y+.5,f.max.x+.5,f.max.y+.5];return{parentNO:o,bounds:g}}function ia(i,e,t,n,r=_y){const{x:o,y:a}=i,c=(e+o/r)/Math.pow(2,n),u=(t+a/r)/Math.pow(2,n),d=c*360-180,f=Math.atan(Math.sinh(iu*(1-2*u)))*180/iu;return[parseFloat(d.toFixed(8)),parseFloat(f.toFixed(8))]}function wy(i,e,t,n){if(!i||!i.coordinates)throw new Error("无效的geometry数据格式");const r={type:i.type,coordinates:null};function o(a){if(typeof a=="object"&&a.x!==void 0&&a.y!==void 0)return ia(a,e,t,n);if(Array.isArray(a)&&a.length>0){const c=a[0];return typeof c=="object"&&c.x!==void 0&&c.y!==void 0?a.map(u=>ia(u,e,t,n)):a.map(u=>o(u))}return a}return r.coordinates=o(i.coordinates),r}var by=Object.defineProperty,xy=(i,e,t)=>e in i?by(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,vs=(i,e,t)=>xy(i,typeof e!="symbol"?e+"":e,t);class ws{constructor(){vs(this,"_imgSource",[]),vs(this,"_demSource"),vs(this,"_vtSource"),vs(this,"manager",Oe.manager)}get imgSource(){return this._imgSource}set imgSource(e){this._imgSource=e}get demSource(){return this._demSource}set demSource(e){this._demSource=e}get vtSource(){return this._vtSource}set vtSource(e){this._vtSource=e}async load(e){const t=await this.loadGeometry(e),n=await this.loadMaterial(e);console.assert(!!n&&!!t);for(let r=0;r<n.length;r++)t.addGroup(0,1/0,r);return{materials:n,geometry:t}}unload(e){const t=e.material,n=e.geometry;for(let r=0;r<t.length;r++)t[r].dispose();n.dispose()}async loadGeometry(e){let t;if(this.demSource&&e.z>=this.demSource.minLevel&&this._isBoundsInSourceBounds(this.demSource,e.bounds)){const n=Oe.getGeometryLoader(this.demSource),r=this.demSource;t=await n.load({source:r,...e}).catch(o=>(console.error("Load material error",r.dataType,e.x,e.y,e.z),new p.PlaneGeometry)),t.addEventListener("dispose",()=>{n.unload&&n.unload(t)})}else if(this.vtSource&&e.z>=this.vtSource.minLevel&&this._isBoundsInSourceBounds(this.vtSource,e.bounds)){const n=Oe.getMeshLoader(this.vtSource),r=this.vtSource;t=await n.load({source:r,...e}).catch(o=>(console.error("Load geometry error",r.dataType,e.x,e.y,e.z),new p.PlaneGeometry)),t.addEventListener("dispose",()=>{n.unload&&n.unload(t)})}else t=new p.PlaneGeometry;return t}async loadMaterial(e){const n=this.imgSource.filter(r=>e.z>=r.minLevel&&this._isBoundsInSourceBounds(r,e.bounds)).map(async r=>{const o=Oe.getMaterialLoader(r),a=await o.load({source:r,...e}).catch(u=>(console.error("Load material error",r.dataType,e.x,e.y,e.z),new p.MeshBasicMaterial)),c=u=>{o.unload&&o.unload(u.target),u.target.removeEventListener("dispose",c)};return a instanceof p.MeshBasicMaterial||a.addEventListener("dispose",c),a});return Promise.all(n)}_isBoundsInSourceBounds(e,t){const n=e._projectionBounds;return!(t[2]<n[0]||t[3]<n[1]||t[0]>n[2]||t[1]>n[3])}}function Ti(...i){const e=i,t=e&&e.length>1&&e[0].constructor||null;if(!t)throw new Error("concatenateTypedArrays - incorrect quantity of arguments or arguments have incompatible data types");const n=e.reduce((a,c)=>a+c.length,0),r=new t(n);let o=0;for(const a of e)r.set(a,o),o+=a.length;return r}function su(i,e,t,n){const r=n?Sy(n,i.position.value):My(e),o=r.length,a=new Float32Array(o*6),c=new Float32Array(o*4),u=new e.constructor(o*6),d=new Float32Array(o*6);for(let f=0;f<o;f++)Ly({edge:r[f],edgeIndex:f,attributes:i,skirtHeight:t,newPosition:a,newTexcoord0:c,newTriangles:u,newNormals:d});i.position.value=Ti(i.position.value,a),i.texcoord.value=Ti(i.texcoord.value,c),i.normal.value=Ti(i.normal.value,d);const m=Ti(e,u);return{attributes:i,indices:m}}function My(i){const e=[],t=Array.isArray(i)?i:Array.from(i);for(let r=0;r<t.length;r+=3){const o=t[r],a=t[r+1],c=t[r+2];e.push([o,a],[a,c],[c,o])}e.sort(([r,o],[a,c])=>{const u=Math.min(r,o),d=Math.min(a,c);return u!==d?u-d:Math.max(r,o)-Math.max(a,c)});const n=[];for(let r=0;r<e.length;r++)r+1<e.length&&e[r][0]===e[r+1][1]&&e[r][1]===e[r+1][0]?r++:n.push(e[r]);return n}function Sy(i,e){const t=(r,o)=>{r.sort(o)};t(i.westIndices,(r,o)=>e[3*r+1]-e[3*o+1]),t(i.eastIndices,(r,o)=>e[3*o+1]-e[3*r+1]),t(i.southIndices,(r,o)=>e[3*o]-e[3*r]),t(i.northIndices,(r,o)=>e[3*r]-e[3*o]);const n=[];return Object.values(i).forEach(r=>{if(r.length>1)for(let o=0;o<r.length-1;o++)n.push([r[o],r[o+1]])}),n}function Ly({edge:i,edgeIndex:e,attributes:t,skirtHeight:n,newPosition:r,newTexcoord0:o,newTriangles:a,newNormals:c}){const u=t.position.value.length,d=e*2,m=d+1;r.set(t.position.value.subarray(i[0]*3,i[0]*3+3),d*3),r[d*3+2]=r[d*3+2]-n,r.set(t.position.value.subarray(i[1]*3,i[1]*3+3),m*3),r[m*3+2]=r[m*3+2]-n,o.set(t.texcoord.value.subarray(i[0]*2,i[0]*2+2),d*2),o.set(t.texcoord.value.subarray(i[1]*2,i[1]*2+2),m*2);const f=e*2*3;a[f]=i[0],a[f+1]=u/3+m,a[f+2]=i[1],a[f+3]=u/3+m,a[f+4]=i[0],a[f+5]=u/3+d,c[f]=0,c[f+1]=0,c[f+2]=1,c[f+3]=0,c[f+4]=0,c[f+5]=1}function ou(i){if(i.length<4)throw new Error(`DEM数组长度必须大于4,当前长度: ${i.length}!`);const e=Math.floor(Math.sqrt(i.length)),t=e,n=e,r=sa(n,t);return{attributes:Py(i,n,t),indices:r}}function Py(i,e,t){const n=t*e,r=new Float32Array(n*3),o=new Float32Array(n*2);let a=0;for(let c=0;c<e;c++)for(let u=0;u<t;u++){const d=u/(t-1),m=c/(e-1);o[a*2]=d,o[a*2+1]=m,r[a*3]=d-.5,r[a*3+1]=m-.5,r[a*3+2]=i[(e-c-1)*t+u],a++}return{position:{value:r,size:3},texcoord:{value:o,size:2},normal:{value:oa(r,sa(e,t)),size:3}}}function sa(i,e){const t=6*(e-1)*(i-1),n=new Uint16Array(t);let r=0;for(let o=0;o<i-1;o++)for(let a=0;a<e-1;a++){const c=o*e+a,u=c+1,d=c+e,m=d+1,f=r*6;n[f]=c,n[f+1]=u,n[f+2]=d,n[f+3]=d,n[f+4]=u,n[f+5]=m,r++}return n}function oa(i,e){const t=new Float32Array(i.length);for(let n=0;n<e.length;n+=3){const r=e[n]*3,o=e[n+1]*3,a=e[n+2]*3,c=i[r],u=i[r+1],d=i[r+2],m=i[o],f=i[o+1],g=i[o+2],_=i[a],w=i[a+1],x=i[a+2],b=m-c,L=f-u,M=g-d,C=_-c,Z=w-u,z=x-d,D=L*z-M*Z,X=M*C-b*z,I=b*Z-L*C,K=Math.sqrt(D*D+X*X+I*I),V=[0,0,1];if(K>0){const G=1/K;V[0]=D*G,V[1]=X*G,V[2]=I*G}for(let G=0;G<3;G++)t[r+G]=t[o+G]=t[a+G]=V[G]}return t}var Cy=Object.defineProperty,Ty=(i,e,t)=>e in i?Cy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Gy=(i,e,t)=>Ty(i,e+"",t);class Ur extends p.PlaneGeometry{constructor(){super(...arguments),Gy(this,"type","TileGeometry")}setData(e,t=1e3){let n=e instanceof Float32Array?ou(e):e;n=su(n.attributes,n.indices,t);const{attributes:r,indices:o}=n;return this.setIndex(new p.BufferAttribute(o,1)),this.setAttribute("position",new p.BufferAttribute(r.position.value,r.position.size)),this.setAttribute("uv",new p.BufferAttribute(r.texcoord.value,r.texcoord.size)),this.setAttribute("normal",new p.BufferAttribute(r.normal.value,r.normal.size)),this.computeBoundingBox(),this.computeBoundingSphere(),this}}var Zy=Object.defineProperty,Wy=(i,e,t)=>e in i?Zy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Jn=(i,e,t)=>Wy(i,typeof e!="symbol"?e+"":e,t);class au{constructor(e=257){Jn(this,"gridSize"),Jn(this,"numTriangles"),Jn(this,"numParentTriangles"),Jn(this,"indices"),Jn(this,"coords"),this.gridSize=e;const t=e-1;if(t&t-1)throw new Error(`Expected grid size to be 2^n+1, got ${e}.`);this.numTriangles=t*t*2-2,this.numParentTriangles=this.numTriangles-t*t,this.indices=new Uint32Array(this.gridSize*this.gridSize),this.coords=new Uint16Array(this.numTriangles*4);for(let n=0;n<this.numTriangles;n++){let r=n+2,o=0,a=0,c=0,u=0,d=0,m=0;for(r&1?c=u=d=t:o=a=m=t;(r>>=1)>1;){const g=o+c>>1,_=a+u>>1;r&1?(c=o,u=a,o=d,a=m):(o=c,a=u,c=d,u=m),d=g,m=_}const f=n*4;this.coords[f+0]=o,this.coords[f+1]=a,this.coords[f+2]=c,this.coords[f+3]=u}}createTile(e){return new Vy(e,this)}}class Vy{constructor(e,t){Jn(this,"martini"),Jn(this,"terrain"),Jn(this,"errors");const n=t.gridSize;if(e.length!==n*n)throw new Error(`Expected terrain data of length ${n*n} (${n} x ${n}), got ${e.length}.`);this.terrain=e,this.martini=t,this.errors=new Float32Array(e.length),this.update()}update(){const{numTriangles:e,numParentTriangles:t,coords:n,gridSize:r}=this.martini,{terrain:o,errors:a}=this;for(let c=e-1;c>=0;c--){const u=c*4,d=n[u+0],m=n[u+1],f=n[u+2],g=n[u+3],_=d+f>>1,w=m+g>>1,x=_+w-m,b=w+d-_,L=(o[m*r+d]+o[g*r+f])/2,M=w*r+_,C=Math.abs(L-o[M]);if(a[M]=Math.max(a[M],C),c<t){const Z=(m+b>>1)*r+(d+x>>1),z=(g+b>>1)*r+(f+x>>1);a[M]=Math.max(a[M],a[Z],a[z])}}}getGeometryData(e=0){const{gridSize:t,indices:n}=this.martini,{errors:r}=this;let o=0,a=0;const c=t-1;let u,d,m=0;n.fill(0);function f(M,C,Z,z,D,X){const I=M+Z>>1,K=C+z>>1;Math.abs(M-D)+Math.abs(C-X)>1&&r[K*t+I]>e?(f(D,X,M,C,I,K),f(Z,z,D,X,I,K)):(u=C*t+M,d=z*t+Z,m=X*t+D,n[u]===0&&(n[u]=++o),n[d]===0&&(n[d]=++o),n[m]===0&&(n[m]=++o),a++)}f(0,0,c,c,c,0),f(c,c,0,0,0,c);const g=o*2,_=a*3,w=new Uint16Array(g),x=new Uint32Array(_);let b=0;function L(M,C,Z,z,D,X){const I=M+Z>>1,K=C+z>>1;if(Math.abs(M-D)+Math.abs(C-X)>1&&r[K*t+I]>e)L(D,X,M,C,I,K),L(Z,z,D,X,I,K);else{const V=n[C*t+M]-1,G=n[z*t+Z]-1,k=n[X*t+D]-1;w[2*V]=M,w[2*V+1]=C,w[2*G]=Z,w[2*G+1]=z,w[2*k]=D,w[2*k+1]=X,x[b++]=V,x[b++]=G,x[b++]=k}}return L(0,0,c,c,c,0),L(c,c,0,0,0,c),{attributes:this._getMeshAttributes(this.terrain,w,x),indices:x}}_getMeshAttributes(e,t,n){const r=Math.floor(Math.sqrt(e.length)),o=r-1,a=t.length/2,c=new Float32Array(a*3),u=new Float32Array(a*2);for(let m=0;m<a;m++){const f=t[m*2],g=t[m*2+1],_=g*r+f;c[3*m+0]=f/o-.5,c[3*m+1]=.5-g/o,c[3*m+2]=e[_],u[2*m+0]=f/o,u[2*m+1]=1-g/o}const d=oa(c,n);return{position:{value:c,size:3},texcoord:{value:u,size:2},normal:{value:d,size:3}}}}var Iy=Object.defineProperty,Ay=(i,e,t)=>e in i?Iy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,lu=(i,e,t)=>Ay(i,typeof e!="symbol"?e+"":e,t);class aa{constructor(){lu(this,"info",{version:"0.10.0",description:"Terrain loader base class"}),lu(this,"dataType","")}async load(e){const{source:t,x:n,y:r,z:o}=e,{url:a,clipBounds:c}=ra(t,n,r,o);if(!a)return new Ur;const u=await this.doLoad(a,{source:t,x:n,y:r,z:o,bounds:c});return Oe.manager.parseEnd(a),u}}class la extends p.MeshStandardMaterial{constructor(e={}){super({transparent:!0,side:p.FrontSide,...e})}setTexture(e){this.map=e,this.needsUpdate=!0}dispose(){const e=this.map;e&&(e.image instanceof ImageBitmap&&e.image.close(),e.dispose())}}var tt=(i=>(i[i.Unknown=0]="Unknown",i[i.Point=1]="Point",i[i.Linestring=2]="Linestring",i[i.Polygon=3]="Polygon",i))(tt||{});class cu{render(e,t,n,r,o=1){switch(e.lineCap="round",e.lineJoin="round",(r.shadowBlur??0)>0&&(e.shadowBlur=r.shadowBlur??2,e.shadowColor=r.shadowColor??"black",e.shadowOffsetX=r.shadowOffset?r.shadowOffset[0]:0,e.shadowOffsetY=r.shadowOffset?r.shadowOffset[1]:0),t){case tt.Point:e.textAlign="center",e.textBaseline="middle",e.font=r.font??"14px Arial",e.fillStyle=r.fontColor??"white",this._renderPointText(e,n,o,r.textField??"name",r.fontOffset??[0,-8]);break;case tt.Linestring:this._renderLineString(e,n,o);break;case tt.Polygon:this._renderPolygon(e,n,o);break;default:console.warn(`Unknown feature type: ${t}`)}(r.fill||t===tt.Point)&&(e.globalAlpha=r.fillOpacity||.5,e.fillStyle=r.fillColor||r.color||"#3388ff",e.fill(r.fillRule||"evenodd")),(r.stroke??!0)&&(r.weight??1)>0&&(e.globalAlpha=r.opacity||1,e.lineWidth=r.weight||1,e.strokeStyle=r.color||"#3388ff",e.setLineDash(r.dashArray||[]),e.stroke())}_renderPointText(e,t,n=1,r="name",o=[0,0]){const a=t.geometry;e.beginPath();for(const u of a)for(let d=0;d<u.length;d++){const m=u[d];e.arc(m.x*n,m.y*n,2,0,2*Math.PI)}const c=t.properties;c&&c[r]&&e.fillText(c[r],a[0][0].x*n+o[0],a[0][0].y*n+o[1])}_renderLineString(e,t,n){const r=t.geometry;e.beginPath();for(const o of r)for(let a=0;a<o.length;a++){const{x:c,y:u}=o[a];a===0?e.moveTo(c*n,u*n):e.lineTo(c*n,u*n)}}_renderPolygon(e,t,n){const r=t.geometry;e.beginPath();for(let o=0;o<r.length;o++){const a=r[o];for(let c=0;c<a.length;c++){const{x:u,y:d}=a[c];c===0?e.moveTo(u*n,d*n):e.lineTo(u*n,d*n)}e.closePath()}}}var Fy=Object.defineProperty,Oy=(i,e,t)=>e in i?Fy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,uu=(i,e,t)=>Oy(i,typeof e!="symbol"?e+"":e,t);class ca{constructor(){uu(this,"info",{version:"0.10.0",description:"Image loader base class"}),uu(this,"dataType","")}async load(e){const{source:t,x:n,y:r,z:o}=e,a=new la({}),{url:c,clipBounds:u}=ra(t,n,r,o);if(c){const d=await this.doLoad(c,{source:t,x:n,y:r,z:o,bounds:u});a.map=d,Oe.manager.parseEnd(c)}return a}}var Dy=Object.defineProperty,zy=(i,e,t)=>e in i?Dy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,hu=(i,e,t)=>zy(i,typeof e!="symbol"?e+"":e,t);class Xy{constructor(){hu(this,"info",{version:"0.10.0",description:"Canvas tile abstract loader"}),hu(this,"dataType","")}async load(e){const t=this._creatCanvasContext(256,256);this.drawTile(t,e);const n=new p.CanvasTexture(t.canvas.transferToImageBitmap());return new la({transparent:!0,map:n,opacity:e.source.opacity})}_creatCanvasContext(e,t){const r=new OffscreenCanvas(e,t).getContext("2d");if(!r)throw new Error("create canvas context failed");return r.scale(1,-1),r.translate(0,-t),r}}var Uy=Object.defineProperty,ky=(i,e,t)=>e in i?Uy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ua=(i,e,t)=>ky(i,typeof e!="symbol"?e+"":e,t);class Ky extends ca{constructor(){super(...arguments),ua(this,"info",{version:"0.10.0",description:"Tile image loader. It can load xyz tile image."}),ua(this,"dataType","image"),ua(this,"loader",new p.ImageLoader(Oe.manager))}async doLoad(e,t){const n=await this.loader.loadAsync(e).catch(a=>new Image(1,1)),r=new p.Texture;r.colorSpace=p.SRGBColorSpace;const{bounds:o}=t;return o[2]-o[0]<1?r.image=Ny(n,o):r.image=n,r.needsUpdate=!0,r}}function Ny(i,e){const t=i.width,n=new OffscreenCanvas(t,t),r=n.getContext("2d"),{sx:o,sy:a,sw:c,sh:u}=na(e,i.width);return r.drawImage(i,o,a,c,u,0,0,t,t),n}const By=`{
|
|
906
906
|
"name": "@terra.gl/core",
|
|
907
|
-
"version": "0.0.1-alpha.
|
|
907
|
+
"version": "0.0.1-alpha.54",
|
|
908
908
|
"type": "module",
|
|
909
909
|
"files": [
|
|
910
910
|
"dist"
|
|
@@ -970,4 +970,4 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
970
970
|
"vue": "^3.5.18"
|
|
971
971
|
}
|
|
972
972
|
}
|
|
973
|
-
`;var Yy=Object.defineProperty,Ry=(i,e,t)=>e in i?Yy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Wt=(i,e,t)=>Ry(i,typeof e!="symbol"?e+"":e,t);class nn{constructor(e){Wt(this,"dataType","image"),Wt(this,"attribution","isource"),Wt(this,"minLevel",0),Wt(this,"maxLevel",18),Wt(this,"projectionID","3857"),Wt(this,"url",""),Wt(this,"subdomains",[]),Wt(this,"s",""),Wt(this,"opacity",1),Wt(this,"isTMS",!1),Wt(this,"bounds",[-180,-85,180,85]),Wt(this,"_projectionBounds",[-1/0,-1/0,1/0,1/0]),Wt(this,"tileMaterial"),Object.assign(this,e)}getUrl(e,t,n){const r={...this,x:e,y:t,z:n};return jy(this.url,r)}_getUrl(e,t,n){const r=this.subdomains.length;if(r>0){const a=Math.floor(Math.random()*r);this.s=this.subdomains[a]}const o=this.isTMS?Math.pow(2,n)-1-t:t;return this.getUrl(e,o,n)}static create(e){return new nn(e)}}function jy(i,e){const t=/\{ *([\w_-]+) *\}/g;return i.replace(t,(n,r)=>{const o=e[r]??(()=>{throw new Error(`source url template error, No value provided for variable: ${n}`)})();return typeof o=="function"?o(e):o})}const{version:Jy,author:Qy}=JSON.parse(By);function Hy(i,e=100){return new Promise(t=>{const n=setInterval(()=>{i&&(clearInterval(n),t())},e)})}function ha(i){return Oe.registerMaterialLoader(i),i}function da(i){return Oe.registerGeometryLoader(i),i}function du(i){return Oe.registerMeshLoader(i),i}ha(new Ky);const fu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEsoayxkKXtjb25zdCB5PW5ldyBGbG9hdDMyQXJyYXkoay5sZW5ndGgpO2ZvcihsZXQgVj0wO1Y8ZC5sZW5ndGg7Vis9Myl7Y29uc3QgYT1kW1ZdKjMsZT1kW1YrMV0qMyxyPWRbVisyXSozLHM9a1thXSx0PWtbYSsxXSxuPWtbYSsyXSxoPWtbZV0saT1rW2UrMV0sbz1rW2UrMl0sYz1rW3JdLHU9a1tyKzFdLG09a1tyKzJdLHc9aC1zLGw9aS10LGY9by1uLGc9Yy1zLE09dS10LEQ9bS1uLHA9bCpELWYqTSxVPWYqZy13KkQsST13Kk0tbCpnLHo9TWF0aC5zcXJ0KHAqcCtVKlUrSSpJKSx4PVswLDAsMV07aWYoej4wKXtjb25zdCB2PTEvejt4WzBdPXAqdix4WzFdPVUqdix4WzJdPUkqdn1mb3IobGV0IHY9MDt2PDM7disrKXlbYSt2XT15W2Urdl09eVtyK3ZdPXhbdl19cmV0dXJuIHl9dmFyIFc9T2JqZWN0LmRlZmluZVByb3BlcnR5LFA9KGssZCx5KT0+ZCBpbiBrP1coayxkLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSk6a1tkXT15LF89KGssZCx5KT0+UChrLHR5cGVvZiBkIT0ic3ltYm9sIj9kKyIiOmQseSk7Y2xhc3MgZWV7Y29uc3RydWN0b3IoZD0yNTcpe18odGhpcywiZ3JpZFNpemUiKSxfKHRoaXMsIm51bVRyaWFuZ2xlcyIpLF8odGhpcywibnVtUGFyZW50VHJpYW5nbGVzIiksXyh0aGlzLCJpbmRpY2VzIiksXyh0aGlzLCJjb29yZHMiKSx0aGlzLmdyaWRTaXplPWQ7Y29uc3QgeT1kLTE7aWYoeSZ5LTEpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBncmlkIHNpemUgdG8gYmUgMl5uKzEsIGdvdCAke2R9LmApO3RoaXMubnVtVHJpYW5nbGVzPXkqeSoyLTIsdGhpcy5udW1QYXJlbnRUcmlhbmdsZXM9dGhpcy5udW1UcmlhbmdsZXMteSp5LHRoaXMuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkodGhpcy5ncmlkU2l6ZSp0aGlzLmdyaWRTaXplKSx0aGlzLmNvb3Jkcz1uZXcgVWludDE2QXJyYXkodGhpcy5udW1UcmlhbmdsZXMqNCk7Zm9yKGxldCBWPTA7Vjx0aGlzLm51bVRyaWFuZ2xlcztWKyspe2xldCBhPVYrMixlPTAscj0wLHM9MCx0PTAsbj0wLGg9MDtmb3IoYSYxP3M9dD1uPXk6ZT1yPWg9eTsoYT4+PTEpPjE7KXtjb25zdCBvPWUrcz4+MSxjPXIrdD4+MTthJjE/KHM9ZSx0PXIsZT1uLHI9aCk6KGU9cyxyPXQscz1uLHQ9aCksbj1vLGg9Y31jb25zdCBpPVYqNDt0aGlzLmNvb3Jkc1tpKzBdPWUsdGhpcy5jb29yZHNbaSsxXT1yLHRoaXMuY29vcmRzW2krMl09cyx0aGlzLmNvb3Jkc1tpKzNdPXR9fWNyZWF0ZVRpbGUoZCl7cmV0dXJuIG5ldyByZShkLHRoaXMpfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihkLHkpe18odGhpcywibWFydGluaSIpLF8odGhpcywidGVycmFpbiIpLF8odGhpcywiZXJyb3JzIik7Y29uc3QgVj15LmdyaWRTaXplO2lmKGQubGVuZ3RoIT09VipWKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGVycmFpbiBkYXRhIG9mIGxlbmd0aCAke1YqVn0gKCR7Vn0geCAke1Z9KSwgZ290ICR7ZC5sZW5ndGh9LmApO3RoaXMudGVycmFpbj1kLHRoaXMubWFydGluaT15LHRoaXMuZXJyb3JzPW5ldyBGbG9hdDMyQXJyYXkoZC5sZW5ndGgpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7Y29uc3R7bnVtVHJpYW5nbGVzOmQsbnVtUGFyZW50VHJpYW5nbGVzOnksY29vcmRzOlYsZ3JpZFNpemU6YX09dGhpcy5tYXJ0aW5pLHt0ZXJyYWluOmUsZXJyb3JzOnJ9PXRoaXM7Zm9yKGxldCBzPWQtMTtzPj0wO3MtLSl7Y29uc3QgdD1zKjQsbj1WW3QrMF0saD1WW3QrMV0saT1WW3QrMl0sbz1WW3QrM10sYz1uK2k+PjEsdT1oK28+PjEsbT1jK3UtaCx3PXUrbi1jLGw9KGVbaCphK25dK2VbbyphK2ldKS8yLGY9dSphK2MsZz1NYXRoLmFicyhsLWVbZl0pO2lmKHJbZl09TWF0aC5tYXgocltmXSxnKSxzPHkpe2NvbnN0IE09KGgrdz4+MSkqYSsobittPj4xKSxEPShvK3c+PjEpKmErKGkrbT4+MSk7cltmXT1NYXRoLm1heChyW2ZdLHJbTV0scltEXSl9fX1nZXRHZW9tZXRyeURhdGEoZD0wKXtjb25zdHtncmlkU2l6ZTp5LGluZGljZXM6Vn09dGhpcy5tYXJ0aW5pLHtlcnJvcnM6YX09dGhpcztsZXQgZT0wLHI9MDtjb25zdCBzPXktMTtsZXQgdCxuLGg9MDtWLmZpbGwoMCk7ZnVuY3Rpb24gaShmLGcsTSxELHAsVSl7Y29uc3QgST1mK00+PjEsej1nK0Q+PjE7TWF0aC5hYnMoZi1wKStNYXRoLmFicyhnLVUpPjEmJmFbeip5K0ldPmQ/KGkocCxVLGYsZyxJLHopLGkoTSxELHAsVSxJLHopKToodD1nKnkrZixuPUQqeStNLGg9VSp5K3AsVlt0XT09PTAmJihWW3RdPSsrZSksVltuXT09PTAmJihWW25dPSsrZSksVltoXT09PTAmJihWW2hdPSsrZSkscisrKX1pKDAsMCxzLHMscywwKSxpKHMscywwLDAsMCxzKTtjb25zdCBvPWUqMixjPXIqMyx1PW5ldyBVaW50MTZBcnJheShvKSxtPW5ldyBVaW50MzJBcnJheShjKTtsZXQgdz0wO2Z1bmN0aW9uIGwoZixnLE0sRCxwLFUpe2NvbnN0IEk9ZitNPj4xLHo9ZytEPj4xO2lmKE1hdGguYWJzKGYtcCkrTWF0aC5hYnMoZy1VKT4xJiZhW3oqeStJXT5kKWwocCxVLGYsZyxJLHopLGwoTSxELHAsVSxJLHopO2Vsc2V7Y29uc3QgeD1WW2cqeStmXS0xLHY9VltEKnkrTV0tMSxBPVZbVSp5K3BdLTE7dVsyKnhdPWYsdVsyKngrMV09Zyx1WzIqdl09TSx1WzIqdisxXT1ELHVbMipBXT1wLHVbMipBKzFdPVUsbVt3KytdPXgsbVt3KytdPXYsbVt3KytdPUF9fXJldHVybiBsKDAsMCxzLHMscywwKSxsKHMscywwLDAsMCxzKSx7YXR0cmlidXRlczp0aGlzLl9nZXRNZXNoQXR0cmlidXRlcyh0aGlzLnRlcnJhaW4sdSxtKSxpbmRpY2VzOm19fV9nZXRNZXNoQXR0cmlidXRlcyhkLHksVil7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguc3FydChkLmxlbmd0aCkpLGU9YS0xLHI9eS5sZW5ndGgvMixzPW5ldyBGbG9hdDMyQXJyYXkociozKSx0PW5ldyBGbG9hdDMyQXJyYXkocioyKTtmb3IobGV0IGg9MDtoPHI7aCsrKXtjb25zdCBpPXlbaCoyXSxvPXlbaCoyKzFdLGM9byphK2k7c1szKmgrMF09aS9lLS41LHNbMypoKzFdPS41LW8vZSxzWzMqaCsyXT1kW2NdLHRbMipoKzBdPWkvZSx0WzIqaCsxXT0xLW8vZX1jb25zdCBuPUsocyxWKTtyZXR1cm57cG9zaXRpb246e3ZhbHVlOnMsc2l6ZTozfSx0ZXhjb29yZDp7dmFsdWU6dCxzaXplOjJ9LG5vcm1hbDp7dmFsdWU6bixzaXplOjN9fX19Y29uc3QgbmU9ZnVuY3Rpb24oKXt2YXIgaz17fTtrLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsay5kZWNvZGU9ZnVuY3Rpb24ocixzKXtzPXN8fHt9O3ZhciB0PXMuZW5jb2RlZE1hc2tEYXRhfHxzLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbj1hKHIscy5pbnB1dE9mZnNldHx8MCx0KSxoPXMubm9EYXRhVmFsdWUhPT1udWxsP3Mubm9EYXRhVmFsdWU6ay5kZWZhdWx0Tm9EYXRhVmFsdWUsaT1kKG4scy5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxzLmVuY29kZWRNYXNrRGF0YSxoLHMucmV0dXJuTWFzayksbz17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQscGl4ZWxEYXRhOmkucmVzdWx0UGl4ZWxzLG1pblZhbHVlOmkubWluVmFsdWUsbWF4VmFsdWU6bi5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6aH07cmV0dXJuIGkucmVzdWx0TWFzayYmKG8ubWFza0RhdGE9aS5yZXN1bHRNYXNrKSxzLnJldHVybkVuY29kZWRNYXNrJiZuLm1hc2smJihvLmVuY29kZWRNYXNrRGF0YT1uLm1hc2suYml0c2V0P24ubWFzay5iaXRzZXQ6bnVsbCkscy5yZXR1cm5GaWxlSW5mbyYmKG8uZmlsZUluZm89eShuKSxzLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoby5maWxlSW5mby5iaXREZXB0aHM9VihuKSkpLG99O3ZhciBkPWZ1bmN0aW9uKHIscyx0LG4saCl7dmFyIGk9MCxvPXIucGl4ZWxzLm51bUJsb2Nrc1gsYz1yLnBpeGVscy5udW1CbG9ja3NZLHU9TWF0aC5mbG9vcihyLndpZHRoL28pLG09TWF0aC5mbG9vcihyLmhlaWdodC9jKSx3PTIqci5tYXhaRXJyb3IsbD1OdW1iZXIuTUFYX1ZBTFVFLGY7dD10fHwoci5tYXNrP3IubWFzay5iaXRzZXQ6bnVsbCk7dmFyIGcsTTtnPW5ldyBzKHIud2lkdGgqci5oZWlnaHQpLGgmJnQmJihNPW5ldyBVaW50OEFycmF5KHIud2lkdGgqci5oZWlnaHQpKTtmb3IodmFyIEQ9bmV3IEZsb2F0MzJBcnJheSh1Km0pLHAsVSxJPTA7STw9YztJKyspe3ZhciB6PUkhPT1jP206ci5oZWlnaHQlYztpZih6IT09MClmb3IodmFyIHg9MDt4PD1vO3grKyl7dmFyIHY9eCE9PW8/dTpyLndpZHRoJW87aWYodiE9PTApe3ZhciBBPUkqci53aWR0aCptK3gqdSxUPXIud2lkdGgtdixTPXIucGl4ZWxzLmJsb2Nrc1tpXSxiLEwsRjtTLmVuY29kaW5nPDI/KFMuZW5jb2Rpbmc9PT0wP2I9Uy5yYXdEYXRhOihlKFMuc3R1ZmZlZERhdGEsUy5iaXRzUGVyUGl4ZWwsUy5udW1WYWxpZFBpeGVscyxTLm9mZnNldCx3LEQsci5waXhlbHMubWF4VmFsdWUpLGI9RCksTD0wKTpTLmVuY29kaW5nPT09Mj9GPTA6Rj1TLm9mZnNldDt2YXIgQjtpZih0KWZvcihVPTA7VTx6O1UrKyl7Zm9yKEEmNyYmKEI9dFtBPj4zXSxCPDw9QSY3KSxwPTA7cDx2O3ArKylBJjd8fChCPXRbQT4+M10pLEImMTI4PyhNJiYoTVtBXT0xKSxmPVMuZW5jb2Rpbmc8Mj9iW0wrK106RixsPWw+Zj9mOmwsZ1tBKytdPWYpOihNJiYoTVtBXT0wKSxnW0ErK109biksQjw8PTE7QSs9VH1lbHNlIGlmKFMuZW5jb2Rpbmc8Milmb3IoVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylmPWJbTCsrXSxsPWw+Zj9mOmwsZ1tBKytdPWY7QSs9VH1lbHNlIGZvcihsPWw+Rj9GOmwsVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylnW0ErK109RjtBKz1UfWlmKFMuZW5jb2Rpbmc9PT0xJiZMIT09Uy5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO2krK319fXJldHVybntyZXN1bHRQaXhlbHM6ZyxyZXN1bHRNYXNrOk0sbWluVmFsdWU6bH19LHk9ZnVuY3Rpb24ocil7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnIuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246ci5maWxlVmVyc2lvbixpbWFnZVR5cGU6ci5pbWFnZVR5cGUsaGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOnIud2lkdGgsbWF4WkVycm9yOnIubWF4WkVycm9yLGVvZk9mZnNldDpyLmVvZk9mZnNldCxtYXNrOnIubWFzaz97bnVtQmxvY2tzWDpyLm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOnIubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOnIubWFzay5udW1CeXRlcyxtYXhWYWx1ZTpyLm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnIucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpyLnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOnIucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOnIucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOnIubm9EYXRhVmFsdWV9fX0sVj1mdW5jdGlvbihyKXtmb3IodmFyIHM9ci5waXhlbHMubnVtQmxvY2tzWCpyLnBpeGVscy5udW1CbG9ja3NZLHQ9e30sbj0wO248cztuKyspe3ZhciBoPXIucGl4ZWxzLmJsb2Nrc1tuXTtoLmVuY29kaW5nPT09MD90LmZsb2F0MzI9ITA6aC5lbmNvZGluZz09PTE/dFtoLmJpdHNQZXJQaXhlbF09ITA6dFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXModCl9LGE9ZnVuY3Rpb24ocixzLHQpe3ZhciBuPXt9LGg9bmV3IFVpbnQ4QXJyYXkocixzLDEwKTtpZihuLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoKSxuLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIituLmZpbGVJZGVudGlmaWVyU3RyaW5nO3MrPTEwO3ZhciBpPW5ldyBEYXRhVmlldyhyLHMsMjQpO2lmKG4uZmlsZVZlcnNpb249aS5nZXRJbnQzMigwLCEwKSxuLmltYWdlVHlwZT1pLmdldEludDMyKDQsITApLG4uaGVpZ2h0PWkuZ2V0VWludDMyKDgsITApLG4ud2lkdGg9aS5nZXRVaW50MzIoMTIsITApLG4ubWF4WkVycm9yPWkuZ2V0RmxvYXQ2NCgxNiwhMCkscys9MjQsIXQpaWYoaT1uZXcgRGF0YVZpZXcocixzLDE2KSxuLm1hc2s9e30sbi5tYXNrLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5tYXNrLm51bUJsb2Nrc1g9aS5nZXRVaW50MzIoNCwhMCksbi5tYXNrLm51bUJ5dGVzPWkuZ2V0VWludDMyKDgsITApLG4ubWFzay5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2LG4ubWFzay5udW1CeXRlcz4wKXt2YXIgbz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobi53aWR0aCpuLmhlaWdodC84KSk7aT1uZXcgRGF0YVZpZXcocixzLG4ubWFzay5udW1CeXRlcyk7dmFyIGM9aS5nZXRJbnQxNigwLCEwKSx1PTIsbT0wO2Rve2lmKGM+MClmb3IoO2MtLTspb1ttKytdPWkuZ2V0VWludDgodSsrKTtlbHNle3ZhciB3PWkuZ2V0VWludDgodSsrKTtmb3IoYz0tYztjLS07KW9bbSsrXT13fWM9aS5nZXRJbnQxNih1LCEwKSx1Kz0yfXdoaWxlKHU8bi5tYXNrLm51bUJ5dGVzKTtpZihjIT09LTMyNzY4fHxtPG8ubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjtuLm1hc2suYml0c2V0PW8scys9bi5tYXNrLm51bUJ5dGVzfWVsc2Ugbi5tYXNrLm51bUJ5dGVzfG4ubWFzay5udW1CbG9ja3NZfG4ubWFzay5tYXhWYWx1ZXx8KG4ubWFzay5iaXRzZXQ9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKG4ud2lkdGgqbi5oZWlnaHQvOCkpKTtpPW5ldyBEYXRhVmlldyhyLHMsMTYpLG4ucGl4ZWxzPXt9LG4ucGl4ZWxzLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5waXhlbHMubnVtQmxvY2tzWD1pLmdldFVpbnQzMig0LCEwKSxuLnBpeGVscy5udW1CeXRlcz1pLmdldFVpbnQzMig4LCEwKSxuLnBpeGVscy5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2O3ZhciBsPW4ucGl4ZWxzLm51bUJsb2Nrc1gsZj1uLnBpeGVscy5udW1CbG9ja3NZLGc9bCsobi53aWR0aCVsPjA/MTowKSxNPWYrKG4uaGVpZ2h0JWY+MD8xOjApO24ucGl4ZWxzLmJsb2Nrcz1uZXcgQXJyYXkoZypNKTtmb3IodmFyIEQ9MCxwPTA7cDxNO3ArKylmb3IodmFyIFU9MDtVPGc7VSsrKXt2YXIgST0wLHo9ci5ieXRlTGVuZ3RoLXM7aT1uZXcgRGF0YVZpZXcocixzLE1hdGgubWluKDEwLHopKTt2YXIgeD17fTtuLnBpeGVscy5ibG9ja3NbRCsrXT14O3ZhciB2PWkuZ2V0VWludDgoMCk7aWYoSSsrLHguZW5jb2Rpbmc9diY2Myx4LmVuY29kaW5nPjMpdGhyb3ciSW52YWxpZCBibG9jayBlbmNvZGluZyAoIit4LmVuY29kaW5nKyIpIjtpZih4LmVuY29kaW5nPT09Mil7cysrO2NvbnRpbnVlfWlmKHYhPT0wJiZ2IT09Mil7aWYodj4+PTYseC5vZmZzZXRUeXBlPXYsdj09PTIpeC5vZmZzZXQ9aS5nZXRJbnQ4KDEpLEkrKztlbHNlIGlmKHY9PT0xKXgub2Zmc2V0PWkuZ2V0SW50MTYoMSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgub2Zmc2V0PWkuZ2V0RmxvYXQzMigxLCEwKSxJKz00O2Vsc2UgdGhyb3ciSW52YWxpZCBibG9jayBvZmZzZXQgdHlwZSI7aWYoeC5lbmNvZGluZz09PTEpaWYodj1pLmdldFVpbnQ4KEkpLEkrKyx4LmJpdHNQZXJQaXhlbD12JjYzLHY+Pj02LHgubnVtVmFsaWRQaXhlbHNUeXBlPXYsdj09PTIpeC5udW1WYWxpZFBpeGVscz1pLmdldFVpbnQ4KEkpLEkrKztlbHNlIGlmKHY9PT0xKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MTYoSSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MzIoSSwhMCksSSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSJ9aWYocys9SSx4LmVuY29kaW5nIT09Myl7dmFyIEEsVDtpZih4LmVuY29kaW5nPT09MCl7dmFyIFM9KG4ucGl4ZWxzLm51bUJ5dGVzLTEpLzQ7aWYoUyE9PU1hdGguZmxvb3IoUykpdGhyb3cidW5jb21wcmVzc2VkIGJsb2NrIGhhcyBpbnZhbGlkIGxlbmd0aCI7QT1uZXcgQXJyYXlCdWZmZXIoUyo0KSxUPW5ldyBVaW50OEFycmF5KEEpLFQuc2V0KG5ldyBVaW50OEFycmF5KHIscyxTKjQpKTt2YXIgYj1uZXcgRmxvYXQzMkFycmF5KEEpO3gucmF3RGF0YT1iLHMrPVMqNH1lbHNlIGlmKHguZW5jb2Rpbmc9PT0xKXt2YXIgTD1NYXRoLmNlaWwoeC5udW1WYWxpZFBpeGVscyp4LmJpdHNQZXJQaXhlbC84KSxGPU1hdGguY2VpbChMLzQpO0E9bmV3IEFycmF5QnVmZmVyKEYqNCksVD1uZXcgVWludDhBcnJheShBKSxULnNldChuZXcgVWludDhBcnJheShyLHMsTCkpLHguc3R1ZmZlZERhdGE9bmV3IFVpbnQzMkFycmF5KEEpLHMrPUx9fX1yZXR1cm4gbi5lb2ZPZmZzZXQ9cyxufSxlPWZ1bmN0aW9uKHIscyx0LG4saCxpLG8pe3ZhciBjPSgxPDxzKS0xLHU9MCxtLHc9MCxsLGYsZz1NYXRoLmNlaWwoKG8tbikvaCksTT1yLmxlbmd0aCo0LU1hdGguY2VpbChzKnQvOCk7Zm9yKHJbci5sZW5ndGgtMV08PD04Kk0sbT0wO208dDttKyspe2lmKHc9PT0wJiYoZj1yW3UrK10sdz0zMiksdz49cylsPWY+Pj53LXMmYyx3LT1zO2Vsc2V7dmFyIEQ9cy13O2w9KGYmYyk8PEQmYyxmPXJbdSsrXSx3PTMyLUQsbCs9Zj4+Pnd9aVttXT1sPGc/bitsKmg6b31yZXR1cm4gaX07cmV0dXJuIGt9KCksaWU9ZnVuY3Rpb24oKXt2YXIgaz17dW5zdHVmZjpmdW5jdGlvbihhLGUscixzLHQsbixoLGkpe3ZhciBvPSgxPDxyKS0xLGM9MCx1LG09MCx3LGwsZixnLE09YS5sZW5ndGgqNC1NYXRoLmNlaWwocipzLzgpO2lmKGFbYS5sZW5ndGgtMV08PD04Kk0sdClmb3IodT0wO3U8czt1KyspbT09PTAmJihsPWFbYysrXSxtPTMyKSxtPj1yPyh3PWw+Pj5tLXImbyxtLT1yKTooZj1yLW0sdz0obCZvKTw8ZiZvLGw9YVtjKytdLG09MzItZix3Kz1sPj4+bSksZVt1XT10W3ddO2Vsc2UgZm9yKGc9TWF0aC5jZWlsKChpLW4pL2gpLHU9MDt1PHM7dSsrKW09PT0wJiYobD1hW2MrK10sbT0zMiksbT49cj8odz1sPj4+bS1yJm8sbS09cik6KGY9ci1tLHc9KGwmbyk8PGYmbyxsPWFbYysrXSxtPTMyLWYsdys9bD4+Pm0pLGVbdV09dzxnP24rdypoOml9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24oYSxlLHIscyx0LG4pe3ZhciBoPSgxPDxlKS0xLGk9MCxvPTAsYz0wLHU9MCxtPTAsdyxsPVtdLGY9YS5sZW5ndGgqNC1NYXRoLmNlaWwoZSpyLzgpO2FbYS5sZW5ndGgtMV08PD04KmY7dmFyIGc9TWF0aC5jZWlsKChuLXMpL3QpO2ZvcihvPTA7bzxyO28rKyl1PT09MCYmKHc9YVtpKytdLHU9MzIpLHU+PWU/KG09dz4+PnUtZSZoLHUtPWUpOihjPWUtdSxtPSh3JmgpPDxjJmgsdz1hW2krK10sdT0zMi1jLG0rPXc+Pj51KSxsW29dPW08Zz9zK20qdDpuO3JldHVybiBsLnVuc2hpZnQocyksbH0sdW5zdHVmZjI6ZnVuY3Rpb24oYSxlLHIscyx0LG4saCxpKXt2YXIgbz0oMTw8ciktMSxjPTAsdSxtPTAsdz0wLGwsZixnO2lmKHQpZm9yKHU9MDt1PHM7dSsrKW09PT0wJiYoZj1hW2MrK10sbT0zMix3PTApLG0+PXI/KGw9Zj4+PncmbyxtLT1yLHcrPXIpOihnPXItbSxsPWY+Pj53Jm8sZj1hW2MrK10sbT0zMi1nLGx8PShmJigxPDxnKS0xKTw8ci1nLHc9ZyksZVt1XT10W2xdO2Vsc2V7dmFyIE09TWF0aC5jZWlsKChpLW4pL2gpO2Zvcih1PTA7dTxzO3UrKyltPT09MCYmKGY9YVtjKytdLG09MzIsdz0wKSxtPj1yPyhsPWY+Pj53Jm8sbS09cix3Kz1yKTooZz1yLW0sbD1mPj4+dyZvLGY9YVtjKytdLG09MzItZyxsfD0oZiYoMTw8ZyktMSk8PHItZyx3PWcpLGVbdV09bDxNP24rbCpoOml9cmV0dXJuIGV9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKGEsZSxyLHMsdCxuKXt2YXIgaD0oMTw8ZSktMSxpPTAsbz0wLGM9MCx1PTAsbT0wLHc9MCxsLGY9W10sZz1NYXRoLmNlaWwoKG4tcykvdCk7Zm9yKG89MDtvPHI7bysrKXU9PT0wJiYobD1hW2krK10sdT0zMix3PTApLHU+PWU/KG09bD4+PncmaCx1LT1lLHcrPWUpOihjPWUtdSxtPWw+Pj53JmgsbD1hW2krK10sdT0zMi1jLG18PShsJigxPDxjKS0xKTw8ZS1jLHc9YyksZltvXT1tPGc/cyttKnQ6bjtyZXR1cm4gZi51bnNoaWZ0KHMpLGZ9LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbihhLGUscixzKXt2YXIgdD0oMTw8ciktMSxuPTAsaCxpPTAsbyxjLHUsbT1hLmxlbmd0aCo0LU1hdGguY2VpbChyKnMvOCk7Zm9yKGFbYS5sZW5ndGgtMV08PD04Km0saD0wO2g8cztoKyspaT09PTAmJihjPWFbbisrXSxpPTMyKSxpPj1yPyhvPWM+Pj5pLXImdCxpLT1yKToodT1yLWksbz0oYyZ0KTw8dSZ0LGM9YVtuKytdLGk9MzItdSxvKz1jPj4+aSksZVtoXT1vO3JldHVybiBlfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PSgxPDxyKS0xLG49MCxoLGk9MCxvPTAsYyx1LG07Zm9yKGg9MDtoPHM7aCsrKWk9PT0wJiYodT1hW24rK10saT0zMixvPTApLGk+PXI/KGM9dT4+Pm8mdCxpLT1yLG8rPXIpOihtPXItaSxjPXU+Pj5vJnQsdT1hW24rK10saT0zMi1tLGN8PSh1JigxPDxtKS0xKTw8ci1tLG89bSksZVtoXT1jO3JldHVybiBlfX0sZD17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbihhKXtmb3IodmFyIGU9NjU1MzUscj02NTUzNSxzPWEubGVuZ3RoLHQ9TWF0aC5mbG9vcihzLzIpLG49MDt0Oyl7dmFyIGg9dD49MzU5PzM1OTp0O3QtPWg7ZG8gZSs9YVtuKytdPDw4LHIrPWUrPWFbbisrXTt3aGlsZSgtLWgpO2U9KGUmNjU1MzUpKyhlPj4+MTYpLHI9KHImNjU1MzUpKyhyPj4+MTYpfXJldHVybiBzJjEmJihyKz1lKz1hW25dPDw4KSxlPShlJjY1NTM1KSsoZT4+PjE2KSxyPShyJjY1NTM1KSsocj4+PjE2KSwocjw8MTZ8ZSk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbihhLGUpe3ZhciByPWUucHRyLHM9bmV3IFVpbnQ4QXJyYXkoYSxyLDYpLHQ9e307aWYodC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscyksdC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK3QuZmlsZUlkZW50aWZpZXJTdHJpbmc7cis9Njt2YXIgbj1uZXcgRGF0YVZpZXcoYSxyLDgpLGg9bi5nZXRJbnQzMigwLCEwKTt0LmZpbGVWZXJzaW9uPWgscis9NCxoPj0zJiYodC5jaGVja3N1bT1uLmdldFVpbnQzMig0LCEwKSxyKz00KSxuPW5ldyBEYXRhVmlldyhhLHIsMTIpLHQuaGVpZ2h0PW4uZ2V0VWludDMyKDAsITApLHQud2lkdGg9bi5nZXRVaW50MzIoNCwhMCkscis9OCxoPj00Pyh0Lm51bURpbXM9bi5nZXRVaW50MzIoOCwhMCkscis9NCk6dC5udW1EaW1zPTEsbj1uZXcgRGF0YVZpZXcoYSxyLDQwKSx0Lm51bVZhbGlkUGl4ZWw9bi5nZXRVaW50MzIoMCwhMCksdC5taWNyb0Jsb2NrU2l6ZT1uLmdldEludDMyKDQsITApLHQuYmxvYlNpemU9bi5nZXRJbnQzMig4LCEwKSx0LmltYWdlVHlwZT1uLmdldEludDMyKDEyLCEwKSx0Lm1heFpFcnJvcj1uLmdldEZsb2F0NjQoMTYsITApLHQuek1pbj1uLmdldEZsb2F0NjQoMjQsITApLHQuek1heD1uLmdldEZsb2F0NjQoMzIsITApLHIrPTQwLGUuaGVhZGVySW5mbz10LGUucHRyPXI7dmFyIGksbztpZihoPj0zJiYobz1oPj00PzUyOjQ4LGk9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KGEsci1vLHQuYmxvYlNpemUtMTQpKSxpIT09dC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5oZWFkZXJJbmZvLHM9dGhpcy5nZXREYXRhVHlwZUFycmF5KHIuaW1hZ2VUeXBlKSx0PXIubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZShyLmltYWdlVHlwZSksbj10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyLHMsdCksaD10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyK3Qscyx0KTtlLnB0cis9Mip0O3ZhciBpLG89ITA7Zm9yKGk9MDtpPHIubnVtRGltcztpKyspaWYobltpXSE9PWhbaV0pe289ITE7YnJlYWt9cmV0dXJuIHIubWluVmFsdWVzPW4sci5tYXhWYWx1ZXM9aCxvfSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ7aWYocj09PVVpbnQ4QXJyYXkpdD1uZXcgVWludDhBcnJheShhLGUscyk7ZWxzZXt2YXIgbj1uZXcgQXJyYXlCdWZmZXIocyksaD1uZXcgVWludDhBcnJheShuKTtoLnNldChuZXcgVWludDhBcnJheShhLGUscykpLHQ9bmV3IHIobil9cmV0dXJuIHR9LHJlYWRNYXNrOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5wdHIscz1lLmhlYWRlckluZm8sdD1zLndpZHRoKnMuaGVpZ2h0LG49cy5udW1WYWxpZFBpeGVsLGg9bmV3IERhdGFWaWV3KGEsciw0KSxpPXt9O2lmKGkubnVtQnl0ZXM9aC5nZXRVaW50MzIoMCwhMCkscis9NCwobj09PTB8fHQ9PT1uKSYmaS5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgbyxjO2lmKG49PT0wKW89bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHQvOCkpLGkuYml0c2V0PW8sYz1uZXcgVWludDhBcnJheSh0KSxlLnBpeGVscy5yZXN1bHRNYXNrPWMscis9aS5udW1CeXRlcztlbHNlIGlmKGkubnVtQnl0ZXM+MCl7bz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwodC84KSksaD1uZXcgRGF0YVZpZXcoYSxyLGkubnVtQnl0ZXMpO3ZhciB1PWguZ2V0SW50MTYoMCwhMCksbT0yLHc9MCxsPTA7ZG97aWYodT4wKWZvcig7dS0tOylvW3crK109aC5nZXRVaW50OChtKyspO2Vsc2UgZm9yKGw9aC5nZXRVaW50OChtKyspLHU9LXU7dS0tOylvW3crK109bDt1PWguZ2V0SW50MTYobSwhMCksbSs9Mn13aGlsZShtPGkubnVtQnl0ZXMpO2lmKHUhPT0tMzI3Njh8fHc8by5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO2M9bmV3IFVpbnQ4QXJyYXkodCk7dmFyIGY9MCxnPTA7Zm9yKGc9MDtnPHQ7ZysrKWcmNz8oZj1vW2c+PjNdLGY8PD1nJjcpOmY9b1tnPj4zXSxmJjEyOCYmKGNbZ109MSk7ZS5waXhlbHMucmVzdWx0TWFzaz1jLGkuYml0c2V0PW8scis9aS5udW1CeXRlc31yZXR1cm4gZS5wdHI9cixlLm1hc2s9aSwhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbihhLGUscixzKXt2YXIgdD1lLnB0cixuPWUuaGVhZGVySW5mbyxoPW4ubnVtRGltcyxpPW4ud2lkdGgqbi5oZWlnaHQsbz1uLmltYWdlVHlwZSxjPW4ubnVtVmFsaWRQaXhlbCpkLmdldERhdGFUeXBlU2l6ZShvKSpoLHUsbT1lLnBpeGVscy5yZXN1bHRNYXNrO2lmKHI9PT1VaW50OEFycmF5KXU9bmV3IFVpbnQ4QXJyYXkoYSx0LGMpO2Vsc2V7dmFyIHc9bmV3IEFycmF5QnVmZmVyKGMpLGw9bmV3IFVpbnQ4QXJyYXkodyk7bC5zZXQobmV3IFVpbnQ4QXJyYXkoYSx0LGMpKSx1PW5ldyByKHcpfWlmKHUubGVuZ3RoPT09aSpoKXM/ZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKHUsaSxoLHIsITApOmUucGl4ZWxzLnJlc3VsdFBpeGVscz11O2Vsc2V7ZS5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyByKGkqaCk7dmFyIGY9MCxnPTAsTT0wLEQ9MDtpZihoPjEpe2lmKHMpe2ZvcihnPTA7ZzxpO2crKylpZihtW2ddKWZvcihEPWcsTT0wO008aDtNKyssRCs9aSllLnBpeGVscy5yZXN1bHRQaXhlbHNbRF09dVtmKytdfWVsc2UgZm9yKGc9MDtnPGk7ZysrKWlmKG1bZ10pZm9yKEQ9ZypoLE09MDtNPGg7TSsrKWUucGl4ZWxzLnJlc3VsdFBpeGVsc1tEK01dPXVbZisrXX1lbHNlIGZvcihnPTA7ZzxpO2crKyltW2ddJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzW2ddPXVbZisrXSl9cmV0dXJuIHQrPWMsZS5wdHI9dCwhMH0scmVhZEh1ZmZtYW5UcmVlOmZ1bmN0aW9uKGEsZSl7dmFyIHI9dGhpcy5IVUZGTUFOX0xVVF9CSVRTX01BWCxzPW5ldyBEYXRhVmlldyhhLGUucHRyLDE2KTtlLnB0cis9MTY7dmFyIHQ9cy5nZXRJbnQzMigwLCEwKTtpZih0PDIpdGhyb3cidW5zdXBwb3J0ZWQgSHVmZm1hbiB2ZXJzaW9uIjt2YXIgbj1zLmdldEludDMyKDQsITApLGg9cy5nZXRJbnQzMig4LCEwKSxpPXMuZ2V0SW50MzIoMTIsITApO2lmKGg+PWkpcmV0dXJuITE7dmFyIG89bmV3IFVpbnQzMkFycmF5KGktaCk7ZC5kZWNvZGVCaXRzKGEsZSxvKTt2YXIgYz1bXSx1LG0sdyxsO2Zvcih1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGNbbV09e2ZpcnN0Om9bdS1oXSxzZWNvbmQ6bnVsbH07dmFyIGY9YS5ieXRlTGVuZ3RoLWUucHRyLGc9TWF0aC5jZWlsKGYvNCksTT1uZXcgQXJyYXlCdWZmZXIoZyo0KSxEPW5ldyBVaW50OEFycmF5KE0pO0Quc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsZikpO3ZhciBwPW5ldyBVaW50MzJBcnJheShNKSxVPTAsSSx6PTA7Zm9yKEk9cFswXSx1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjAmJihjW21dLnNlY29uZD1JPDxVPj4+MzItbCwzMi1VPj1sPyhVKz1sLFU9PT0zMiYmKFU9MCx6KyssST1wW3pdKSk6KFUrPWwtMzIseisrLEk9cFt6XSxjW21dLnNlY29uZHw9ST4+PjMyLVUpKTt2YXIgeD0wLHY9MCxBPW5ldyB5O2Zvcih1PTA7dTxjLmxlbmd0aDt1KyspY1t1XSE9PXZvaWQgMCYmKHg9TWF0aC5tYXgoeCxjW3VdLmZpcnN0KSk7eD49cj92PXI6dj14O3ZhciBUPVtdLFMsYixMLEYsQixDO2Zvcih1PWg7dTxpO3UrKylpZihtPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjApaWYoUz1bbCxtXSxsPD12KWZvcihiPWNbbV0uc2Vjb25kPDx2LWwsTD0xPDx2LWwsdz0wO3c8TDt3KyspVFtifHddPVM7ZWxzZSBmb3IoYj1jW21dLnNlY29uZCxDPUEsRj1sLTE7Rj49MDtGLS0pQj1iPj4+RiYxLEI/KEMucmlnaHR8fChDLnJpZ2h0PW5ldyB5KSxDPUMucmlnaHQpOihDLmxlZnR8fChDLmxlZnQ9bmV3IHkpLEM9Qy5sZWZ0KSxGPT09MCYmIUMudmFsJiYoQy52YWw9U1sxXSk7cmV0dXJue2RlY29kZUx1dDpULG51bUJpdHNMVVRRaWNrOnYsbnVtQml0c0xVVDp4LHRyZWU6QSxzdHVmZmVkRGF0YTpwLHNyY1B0cjp6LGJpdFBvczpVfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9ZS5oZWFkZXJJbmZvLG49dC5udW1EaW1zLGg9ZS5oZWFkZXJJbmZvLmhlaWdodCxpPWUuaGVhZGVySW5mby53aWR0aCxvPWkqaCxjPXRoaXMucmVhZEh1ZmZtYW5UcmVlKGEsZSksdT1jLmRlY29kZUx1dCxtPWMudHJlZSx3PWMuc3R1ZmZlZERhdGEsbD1jLnNyY1B0cixmPWMuYml0UG9zLGc9Yy5udW1CaXRzTFVUUWljayxNPWMubnVtQml0c0xVVCxEPWUuaGVhZGVySW5mby5pbWFnZVR5cGU9PT0wPzEyODowLHAsVSxJLHo9ZS5waXhlbHMucmVzdWx0TWFzayx4LHYsQSxULFMsYixMLEY9MDtmPjAmJihsKyssZj0wKTt2YXIgQj13W2xdLEM9ZS5lbmNvZGVNb2RlPT09MSxIPW5ldyByKG8qbiksTz1ILFg7aWYobjwyfHxDKXtmb3IoWD0wO1g8bjtYKyspaWYobj4xJiYoTz1uZXcgcihILmJ1ZmZlcixvKlgsbyksRj0wKSxlLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PWkqaClmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKyxiKyspe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MD9JKz1GOlQ+MD9JKz1PW2ItaV06SSs9RixJJj0yNTUsT1tiXT1JLEY9SSk6T1tiXT1JfWVsc2UgZm9yKGI9MCxUPTA7VDxoO1QrKylmb3IoUz0wO1M8aTtTKyssYisrKWlmKHpbYl0pe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MCYmeltiLTFdP0krPUY6VD4wJiZ6W2ItaV0/SSs9T1tiLWldOkkrPUYsSSY9MjU1LE9bYl09SSxGPUkpOk9bYl09SX19ZWxzZSBmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKylpZihiPVQqaStTLCF6fHx6W2JdKWZvcihYPTA7WDxuO1grKyxiKz1vKXtpZihVPTAseD1CPDxmPj4+MzItZyx2PXgsMzItZjxnJiYoeHw9d1tsKzFdPj4+NjQtZi1nLHY9eCksdVt2XSlVPXVbdl1bMV0sZis9dVt2XVswXTtlbHNlIGZvcih4PUI8PGY+Pj4zMi1NLHY9eCwzMi1mPE0mJih4fD13W2wrMV0+Pj42NC1mLU0sdj14KSxwPW0sTD0wO0w8TTtMKyspaWYoQT14Pj4+TS1MLTEmMSxwPUE/cC5yaWdodDpwLmxlZnQsIShwLmxlZnR8fHAucmlnaHQpKXtVPXAudmFsLGY9ZitMKzE7YnJlYWt9Zj49MzImJihmLT0zMixsKyssQj13W2xdKSxJPVUtRCxPW2JdPUl9ZS5wdHI9ZS5wdHIrKGwrMSkqNCsoZj4wPzQ6MCksZS5waXhlbHMucmVzdWx0UGl4ZWxzPUgsbj4xJiYhcyYmKGUucGl4ZWxzLnJlc3VsdFBpeGVscz1kLnN3YXBEaW1lbnNpb25PcmRlcihILG8sbixyKSl9LGRlY29kZUJpdHM6ZnVuY3Rpb24oYSxlLHIscyx0KXt7dmFyIG49ZS5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPTAsbz1hLmJ5dGVMZW5ndGgtZS5wdHI+PTU/NTphLmJ5dGVMZW5ndGgtZS5wdHIsYz1uZXcgRGF0YVZpZXcoYSxlLnB0cixvKSx1PWMuZ2V0VWludDgoMCk7aSsrO3ZhciBtPXU+PjYsdz1tPT09MD80OjMtbSxsPSh1JjMyKT4wLGY9dSYzMSxnPTA7aWYodz09PTEpZz1jLmdldFVpbnQ4KGkpLGkrKztlbHNlIGlmKHc9PT0yKWc9Yy5nZXRVaW50MTYoaSwhMCksaSs9MjtlbHNlIGlmKHc9PT00KWc9Yy5nZXRVaW50MzIoaSwhMCksaSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIE09MipuLm1heFpFcnJvcixELHAsVSxJLHoseCx2LEEsVCxTPW4ubnVtRGltcz4xP24ubWF4VmFsdWVzW3RdOm4uek1heDtpZihsKXtmb3IoZS5jb3VudGVyLmx1dCsrLEE9Yy5nZXRVaW50OChpKSxpKyssST1NYXRoLmNlaWwoKEEtMSkqZi84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxlLnB0cis9aSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSx2PW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxUPTA7QS0xPj4+VDspVCsrO0k9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3g9ay51bnN0dWZmTFVUMih2LGYsQS0xLHMsTSxTKTp4PWsudW5zdHVmZkxVVCh2LGYsQS0xLHMsTSxTKSxoPj0zP2sudW5zdHVmZjIoRCxyLFQsZyx4KTprLnVuc3R1ZmYoRCxyLFQsZyx4KX1lbHNlIGUuY291bnRlci5iaXRzdHVmZmVyKyssVD1mLGUucHRyKz1pLFQ+MCYmKEk9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3M9PW51bGw/ay5vcmlnaW5hbFVuc3R1ZmYyKEQscixULGcpOmsudW5zdHVmZjIoRCxyLFQsZywhMSxzLE0sUyk6cz09bnVsbD9rLm9yaWdpbmFsVW5zdHVmZihELHIsVCxnKTprLnVuc3R1ZmYoRCxyLFQsZywhMSxzLE0sUykpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PWUuaGVhZGVySW5mbyxuPXQud2lkdGgsaD10LmhlaWdodCxpPW4qaCxvPXQubWljcm9CbG9ja1NpemUsYz10LmltYWdlVHlwZSx1PWQuZ2V0RGF0YVR5cGVTaXplKGMpLG09TWF0aC5jZWlsKG4vbyksdz1NYXRoLmNlaWwoaC9vKTtlLnBpeGVscy5udW1CbG9ja3NZPXcsZS5waXhlbHMubnVtQmxvY2tzWD1tLGUucGl4ZWxzLnB0cj0wO3ZhciBsPTAsZj0wLGc9MCxNPTAsRD0wLHA9MCxVPTAsST0wLHo9MCx4PTAsdj0wLEE9MCxUPTAsUz0wLGI9MCxMPTAsRixCLEMsSCxPLFgsJD1uZXcgcihvKm8pLGhlPWglb3x8byxjZT1uJW98fG8sUSxSLHE9dC5udW1EaW1zLGosRT1lLnBpeGVscy5yZXN1bHRNYXNrLFk9ZS5waXhlbHMucmVzdWx0UGl4ZWxzLG1lPXQuZmlsZVZlcnNpb24sSj1tZT49NT8xNDoxNSxaLEc9dC56TWF4LE47Zm9yKGc9MDtnPHc7ZysrKWZvcihEPWchPT13LTE/bzpoZSxNPTA7TTxtO00rKylmb3IocD1NIT09bS0xP286Y2Usdj1nKm4qbytNKm8sQT1uLXAsaj0wO2o8cTtqKyspe2lmKHE+MT8oTj1ZLHY9ZypuKm8rTSpvLFk9bmV3IHIoZS5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixpKmoqdSxpKSxHPXQubWF4VmFsdWVzW2pdKTpOPW51bGwsVT1hLmJ5dGVMZW5ndGgtZS5wdHIsRj1uZXcgRGF0YVZpZXcoYSxlLnB0cixNYXRoLm1pbigxMCxVKSksQj17fSxMPTAsST1GLmdldFVpbnQ4KDApLEwrKyxaPXQuZmlsZVZlcnNpb24+PTU/SSY0OjAsej1JPj42JjI1NSx4PUk+PjImSix4IT09KE0qbz4+MyZKKXx8WiYmaj09PTApdGhyb3ciaW50ZWdyaXR5IGlzc3VlIjtpZihYPUkmMyxYPjMpdGhyb3cgZS5wdHIrPUwsIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrWCsiKSI7aWYoWD09PTIpe2lmKFopaWYoRSlmb3IobD0wO2w8RDtsKyspZm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPU5bdl0pLHYrKztlbHNlIGZvcihsPTA7bDxEO2wrKylmb3IoZj0wO2Y8cDtmKyspWVt2XT1OW3ZdLHYrKztlLmNvdW50ZXIuY29uc3RhbnQrKyxlLnB0cis9TDtjb250aW51ZX1lbHNlIGlmKFg9PT0wKXtpZihaKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYoZS5jb3VudGVyLnVuY29tcHJlc3NlZCsrLGUucHRyKz1MLFQ9RCpwKnUsUz1hLmJ5dGVMZW5ndGgtZS5wdHIsVD1UPFM/VDpTLEM9bmV3IEFycmF5QnVmZmVyKFQldT09PTA/VDpUK3UtVCV1KSxIPW5ldyBVaW50OEFycmF5KEMpLEguc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsVCkpLE89bmV3IHIoQyksYj0wLEUpZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspRVt2XSYmKFlbdl09T1tiKytdKSx2Kys7dis9QX1lbHNlIGZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKVlbdisrXT1PW2IrK107dis9QX1lLnB0cis9Yip1fWVsc2UgaWYoUT1kLmdldERhdGFUeXBlVXNlZChaJiZjPDY/NDpjLHopLFI9ZC5nZXRPbmVQaXhlbChCLEwsUSxGKSxMKz1kLmdldERhdGFUeXBlU2l6ZShRKSxYPT09MylpZihlLnB0cis9TCxlLmNvdW50ZXIuY29uc3RhbnRvZmZzZXQrKyxFKWZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPVo/TWF0aC5taW4oRyxOW3ZdK1IpOlIpLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2XT1aP01hdGgubWluKEcsTlt2XStSKTpSLHYrKzt2Kz1BfWVsc2UgaWYoZS5wdHIrPUwsZC5kZWNvZGVCaXRzKGEsZSwkLFIsaiksTD0wLFopaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10rTlt2XSksdisrO3YrPUF9ZWxzZSBmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylZW3ZdPSRbTCsrXStOW3ZdLHYrKzt2Kz1BfWVsc2UgaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10pLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2KytdPSRbTCsrXTt2Kz1BfX1xPjEmJiFzJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKGUucGl4ZWxzLnJlc3VsdFBpeGVscyxpLHEscikpfSxmb3JtYXRGaWxlSW5mbzpmdW5jdGlvbihhKXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6YS5oZWFkZXJJbmZvLmZpbGVJZGVudGlmaWVyU3RyaW5nLGZpbGVWZXJzaW9uOmEuaGVhZGVySW5mby5maWxlVmVyc2lvbixpbWFnZVR5cGU6YS5oZWFkZXJJbmZvLmltYWdlVHlwZSxoZWlnaHQ6YS5oZWFkZXJJbmZvLmhlaWdodCx3aWR0aDphLmhlYWRlckluZm8ud2lkdGgsbnVtVmFsaWRQaXhlbDphLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbCxtaWNyb0Jsb2NrU2l6ZTphLmhlYWRlckluZm8ubWljcm9CbG9ja1NpemUsYmxvYlNpemU6YS5oZWFkZXJJbmZvLmJsb2JTaXplLG1heFpFcnJvcjphLmhlYWRlckluZm8ubWF4WkVycm9yLHBpeGVsVHlwZTpkLmdldFBpeGVsVHlwZShhLmhlYWRlckluZm8uaW1hZ2VUeXBlKSxlb2ZPZmZzZXQ6YS5lb2ZPZmZzZXQsbWFzazphLm1hc2s/e251bUJ5dGVzOmEubWFzay5udW1CeXRlc306bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6YS5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOmEucGl4ZWxzLm51bUJsb2Nrc1ksbWF4VmFsdWU6YS5oZWFkZXJJbmZvLnpNYXgsbWluVmFsdWU6YS5oZWFkZXJJbmZvLnpNaW4sbm9EYXRhVmFsdWU6YS5ub0RhdGFWYWx1ZX19fSxjb25zdHJ1Y3RDb25zdGFudFN1cmZhY2U6ZnVuY3Rpb24oYSxlKXt2YXIgcj1hLmhlYWRlckluZm8uek1heCxzPWEuaGVhZGVySW5mby56TWluLHQ9YS5oZWFkZXJJbmZvLm1heFZhbHVlcyxuPWEuaGVhZGVySW5mby5udW1EaW1zLGg9YS5oZWFkZXJJbmZvLmhlaWdodCphLmhlYWRlckluZm8ud2lkdGgsaT0wLG89MCxjPTAsdT1hLnBpeGVscy5yZXN1bHRNYXNrLG09YS5waXhlbHMucmVzdWx0UGl4ZWxzO2lmKHUpaWYobj4xKXtpZihlKWZvcihpPTA7aTxuO2krKylmb3IoYz1pKmgscj10W2ldLG89MDtvPGg7bysrKXVbb10mJihtW2Mrb109cik7ZWxzZSBmb3Iobz0wO288aDtvKyspaWYodVtvXSlmb3IoYz1vKm4saT0wO2k8bjtpKyspbVtjK25dPXRbaV19ZWxzZSBmb3Iobz0wO288aDtvKyspdVtvXSYmKG1bb109cik7ZWxzZSBpZihuPjEmJnMhPT1yKWlmKGUpZm9yKGk9MDtpPG47aSsrKWZvcihjPWkqaCxyPXRbaV0sbz0wO288aDtvKyspbVtjK29dPXI7ZWxzZSBmb3Iobz0wO288aDtvKyspZm9yKGM9bypuLGk9MDtpPG47aSsrKW1bYytpXT10W2ldO2Vsc2UgZm9yKG89MDtvPGgqbjtvKyspbVtvXT1yfSxnZXREYXRhVHlwZUFycmF5OmZ1bmN0aW9uKGEpe3ZhciBlO3N3aXRjaChhKXtjYXNlIDA6ZT1JbnQ4QXJyYXk7YnJlYWs7Y2FzZSAxOmU9VWludDhBcnJheTticmVhaztjYXNlIDI6ZT1JbnQxNkFycmF5O2JyZWFrO2Nhc2UgMzplPVVpbnQxNkFycmF5O2JyZWFrO2Nhc2UgNDplPUludDMyQXJyYXk7YnJlYWs7Y2FzZSA1OmU9VWludDMyQXJyYXk7YnJlYWs7Y2FzZSA2OmU9RmxvYXQzMkFycmF5O2JyZWFrO2Nhc2UgNzplPUZsb2F0NjRBcnJheTticmVhaztkZWZhdWx0OmU9RmxvYXQzMkFycmF5fXJldHVybiBlfSxnZXRQaXhlbFR5cGU6ZnVuY3Rpb24oYSl7dmFyIGU7c3dpdGNoKGEpe2Nhc2UgMDplPSJTOCI7YnJlYWs7Y2FzZSAxOmU9IlU4IjticmVhaztjYXNlIDI6ZT0iUzE2IjticmVhaztjYXNlIDM6ZT0iVTE2IjticmVhaztjYXNlIDQ6ZT0iUzMyIjticmVhaztjYXNlIDU6ZT0iVTMyIjticmVhaztjYXNlIDY6ZT0iRjMyIjticmVhaztjYXNlIDc6ZT0iRjY0IjticmVhaztkZWZhdWx0OmU9IkYzMiJ9cmV0dXJuIGV9LGlzVmFsaWRQaXhlbFZhbHVlOmZ1bmN0aW9uKGEsZSl7aWYoZT09bnVsbClyZXR1cm4hMTt2YXIgcjtzd2l0Y2goYSl7Y2FzZSAwOnI9ZT49LTEyOCYmZTw9MTI3O2JyZWFrO2Nhc2UgMTpyPWU+PTAmJmU8PTI1NTticmVhaztjYXNlIDI6cj1lPj0tMzI3NjgmJmU8PTMyNzY3O2JyZWFrO2Nhc2UgMzpyPWU+PTAmJmU8PTY1NTM2O2JyZWFrO2Nhc2UgNDpyPWU+PS0yMTQ3NDgzNjQ4JiZlPD0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2UgNTpyPWU+PTAmJmU8PTQyOTQ5NjcyOTY7YnJlYWs7Y2FzZSA2OnI9ZT49LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyJiZlPD0zNDAyNzk5OTM4NzkwMTQ4NGUyMjticmVhaztjYXNlIDc6cj1lPj0tMTc5NzY5MzEzNDg2MjMxNTdlMjkyJiZlPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDpyPSExfXJldHVybiByfSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24oYSl7dmFyIGU9MDtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMTplPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzplPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6ZT00O2JyZWFrO2Nhc2UgNzplPTg7YnJlYWs7ZGVmYXVsdDplPWF9cmV0dXJuIGV9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbihhLGUpe3ZhciByPWE7c3dpdGNoKGEpe2Nhc2UgMjpjYXNlIDQ6cj1hLWU7YnJlYWs7Y2FzZSAzOmNhc2UgNTpyPWEtMiplO2JyZWFrO2Nhc2UgNjplPT09MD9yPWE6ZT09PTE/cj0yOnI9MTticmVhaztjYXNlIDc6ZT09PTA/cj1hOnI9YS0yKmUrMTticmVhaztkZWZhdWx0OnI9YTticmVha31yZXR1cm4gcn0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9MDtzd2l0Y2gocil7Y2FzZSAwOnQ9cy5nZXRJbnQ4KGUpO2JyZWFrO2Nhc2UgMTp0PXMuZ2V0VWludDgoZSk7YnJlYWs7Y2FzZSAyOnQ9cy5nZXRJbnQxNihlLCEwKTticmVhaztjYXNlIDM6dD1zLmdldFVpbnQxNihlLCEwKTticmVhaztjYXNlIDQ6dD1zLmdldEludDMyKGUsITApO2JyZWFrO2Nhc2UgNTp0PXMuZ2V0VUludDMyKGUsITApO2JyZWFrO2Nhc2UgNjp0PXMuZ2V0RmxvYXQzMihlLCEwKTticmVhaztjYXNlIDc6dD1zLmdldEZsb2F0NjQoZSwhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIHR9LHN3YXBEaW1lbnNpb25PcmRlcjpmdW5jdGlvbihhLGUscixzLHQpe3ZhciBuPTAsaD0wLGk9MCxvPTAsYz1hO2lmKHI+MSlpZihjPW5ldyBzKGUqciksdClmb3Iobj0wO248ZTtuKyspZm9yKG89bixpPTA7aTxyO2krKyxvKz1lKWNbb109YVtoKytdO2Vsc2UgZm9yKG49MDtuPGU7bisrKWZvcihvPW4saT0wO2k8cjtpKyssbys9ZSljW2grK109YVtvXTtyZXR1cm4gY319LHk9ZnVuY3Rpb24oYSxlLHIpe3RoaXMudmFsPWEsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yfSxWPXtkZWNvZGU6ZnVuY3Rpb24oYSxlKXtlPWV8fHt9O3ZhciByPWUubm9EYXRhVmFsdWUscz0wLHQ9e307aWYodC5wdHI9ZS5pbnB1dE9mZnNldHx8MCx0LnBpeGVscz17fSwhIWQucmVhZEhlYWRlckluZm8oYSx0KSl7dmFyIG49dC5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPWQuZ2V0RGF0YVR5cGVBcnJheShuLmltYWdlVHlwZSk7aWYoaD41KXRocm93InVuc3VwcG9ydGVkIGxlcmMgdmVyc2lvbiAyLiIraDtkLnJlYWRNYXNrKGEsdCksbi5udW1WYWxpZFBpeGVsIT09bi53aWR0aCpuLmhlaWdodCYmIXQucGl4ZWxzLnJlc3VsdE1hc2smJih0LnBpeGVscy5yZXN1bHRNYXNrPWUubWFza0RhdGEpO3ZhciBvPW4ud2lkdGgqbi5oZWlnaHQ7dC5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBpKG8qbi5udW1EaW1zKSx0LmNvdW50ZXI9e29uZXN3ZWVwOjAsdW5jb21wcmVzc2VkOjAsbHV0OjAsYml0c3R1ZmZlcjowLGNvbnN0YW50OjAsY29uc3RhbnRvZmZzZXQ6MH07dmFyIGM9IWUucmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM7aWYobi5udW1WYWxpZFBpeGVsIT09MClpZihuLnpNYXg9PT1uLnpNaW4pZC5jb25zdHJ1Y3RDb25zdGFudFN1cmZhY2UodCxjKTtlbHNlIGlmKGg+PTQmJmQuY2hlY2tNaW5NYXhSYW5nZXMoYSx0KSlkLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZSh0LGMpO2Vsc2V7dmFyIHU9bmV3IERhdGFWaWV3KGEsdC5wdHIsMiksbT11LmdldFVpbnQ4KDApO2lmKHQucHRyKyssbSlkLnJlYWREYXRhT25lU3dlZXAoYSx0LGksYyk7ZWxzZSBpZihoPjEmJm4uaW1hZ2VUeXBlPD0xJiZNYXRoLmFicyhuLm1heFpFcnJvci0uNSk8MWUtNSl7dmFyIHc9dS5nZXRVaW50OCgxKTtpZih0LnB0cisrLHQuZW5jb2RlTW9kZT13LHc+Mnx8aDw0JiZ3PjEpdGhyb3ciSW52YWxpZCBIdWZmbWFuIGZsYWcgIit3O3c/ZC5yZWFkSHVmZm1hbihhLHQsaSxjKTpkLnJlYWRUaWxlcyhhLHQsaSxjKX1lbHNlIGQucmVhZFRpbGVzKGEsdCxpLGMpfXQuZW9mT2Zmc2V0PXQucHRyO3ZhciBsO2UuaW5wdXRPZmZzZXQ/KGw9dC5oZWFkZXJJbmZvLmJsb2JTaXplK2UuaW5wdXRPZmZzZXQtdC5wdHIsTWF0aC5hYnMobCk+PTEmJih0LmVvZk9mZnNldD1lLmlucHV0T2Zmc2V0K3QuaGVhZGVySW5mby5ibG9iU2l6ZSkpOihsPXQuaGVhZGVySW5mby5ibG9iU2l6ZS10LnB0cixNYXRoLmFicyhsKT49MSYmKHQuZW9mT2Zmc2V0PXQuaGVhZGVySW5mby5ibG9iU2l6ZSkpO3ZhciBmPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxwaXhlbERhdGE6dC5waXhlbHMucmVzdWx0UGl4ZWxzLG1pblZhbHVlOm4uek1pbixtYXhWYWx1ZTpuLnpNYXgsdmFsaWRQaXhlbENvdW50Om4ubnVtVmFsaWRQaXhlbCxkaW1Db3VudDpuLm51bURpbXMsZGltU3RhdHM6e21pblZhbHVlczpuLm1pblZhbHVlcyxtYXhWYWx1ZXM6bi5tYXhWYWx1ZXN9LG1hc2tEYXRhOnQucGl4ZWxzLnJlc3VsdE1hc2t9O2lmKHQucGl4ZWxzLnJlc3VsdE1hc2smJmQuaXNWYWxpZFBpeGVsVmFsdWUobi5pbWFnZVR5cGUscikpe3ZhciBnPXQucGl4ZWxzLnJlc3VsdE1hc2s7Zm9yKHM9MDtzPG87cysrKWdbc118fChmLnBpeGVsRGF0YVtzXT1yKTtmLm5vRGF0YVZhbHVlPXJ9cmV0dXJuIHQubm9EYXRhVmFsdWU9cixlLnJldHVybkZpbGVJbmZvJiYoZi5maWxlSW5mbz1kLmZvcm1hdEZpbGVJbmZvKHQpKSxmfX0sZ2V0QmFuZENvdW50OmZ1bmN0aW9uKGEpe3ZhciBlPTAscj0wLHM9e307Zm9yKHMucHRyPTAscy5waXhlbHM9e307cjxhLmJ5dGVMZW5ndGgtNTg7KWQucmVhZEhlYWRlckluZm8oYSxzKSxyKz1zLmhlYWRlckluZm8uYmxvYlNpemUsZSsrLHMucHRyPXI7cmV0dXJuIGV9fTtyZXR1cm4gVn0oKTt2YXIgdGU9ZnVuY3Rpb24oKXt2YXIgaz1uZXcgQXJyYXlCdWZmZXIoNCksZD1uZXcgVWludDhBcnJheShrKSx5PW5ldyBVaW50MzJBcnJheShrKTtyZXR1cm4geVswXT0xLGRbMF09PT0xfSgpLGFlPXtkZWNvZGU6ZnVuY3Rpb24oayxkKXtpZighdGUpdGhyb3ciQmlnIGVuZGlhbiBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZC4iO2Q9ZHx8e307dmFyIHk9ZC5pbnB1dE9mZnNldHx8MCxWPW5ldyBVaW50OEFycmF5KGsseSwxMCksYT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsViksZSxyO2lmKGEudHJpbSgpPT09IkNudFpJbWFnZSIpZT1uZSxyPTE7ZWxzZSBpZihhLnN1YnN0cmluZygwLDUpPT09IkxlcmMyIillPWllLHI9MjtlbHNlIHRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIithO2Zvcih2YXIgcz0wLHQ9ay5ieXRlTGVuZ3RoLTEwLG4saD1bXSxpLG8sYz17d2lkdGg6MCxoZWlnaHQ6MCxwaXhlbHM6W10scGl4ZWxUeXBlOmQucGl4ZWxUeXBlLG1hc2s6bnVsbCxzdGF0aXN0aWNzOltdfSx1PTA7eTx0Oyl7dmFyIG09ZS5kZWNvZGUoayx7aW5wdXRPZmZzZXQ6eSxlbmNvZGVkTWFza0RhdGE6bixtYXNrRGF0YTpvLHJldHVybk1hc2s6cz09PTAscmV0dXJuRW5jb2RlZE1hc2s6cz09PTAscmV0dXJuRmlsZUluZm86ITAscmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM6ZC5yZXR1cm5QaXhlbEludGVybGVhdmVkRGltcyxwaXhlbFR5cGU6ZC5waXhlbFR5cGV8fG51bGwsbm9EYXRhVmFsdWU6ZC5ub0RhdGFWYWx1ZXx8bnVsbH0pO3k9bS5maWxlSW5mby5lb2ZPZmZzZXQsbz1tLm1hc2tEYXRhLHM9PT0wJiYobj1tLmVuY29kZWRNYXNrRGF0YSxjLndpZHRoPW0ud2lkdGgsYy5oZWlnaHQ9bS5oZWlnaHQsYy5kaW1Db3VudD1tLmRpbUNvdW50fHwxLGMucGl4ZWxUeXBlPW0ucGl4ZWxUeXBlfHxtLmZpbGVJbmZvLnBpeGVsVHlwZSxjLm1hc2s9bykscj4xJiYobyYmaC5wdXNoKG8pLG0uZmlsZUluZm8ubWFzayYmbS5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJnUrKykscysrLGMucGl4ZWxzLnB1c2gobS5waXhlbERhdGEpLGMuc3RhdGlzdGljcy5wdXNoKHttaW5WYWx1ZTptLm1pblZhbHVlLG1heFZhbHVlOm0ubWF4VmFsdWUsbm9EYXRhVmFsdWU6bS5ub0RhdGFWYWx1ZSxkaW1TdGF0czptLmRpbVN0YXRzfSl9dmFyIHcsbCxmO2lmKHI+MSYmdT4xKXtmb3IoZj1jLndpZHRoKmMuaGVpZ2h0LGMuYmFuZE1hc2tzPWgsbz1uZXcgVWludDhBcnJheShmKSxvLnNldChoWzBdKSx3PTE7dzxoLmxlbmd0aDt3KyspZm9yKGk9aFt3XSxsPTA7bDxmO2wrKylvW2xdPW9bbF0maVtsXTtjLm1hc2tEYXRhPW99cmV0dXJuIGN9fTtjb25zdCBzZT17MDo3ZTMsMTo2ZTMsMjo1ZTMsMzo0ZTMsNDozZTMsNToyNTAwLDY6MmUzLDc6MTUwMCw4OjgwMCw5OjUwMCwxMDoyMDAsMTE6MTAwLDEyOjQwLDEzOjEyLDE0OjUsMTU6MiwxNjoxLDE3Oi41LDE4Oi4yLDE5Oi4xLDIwOi4wMX07ZnVuY3Rpb24gZmUoayl7Y29uc3R7aGVpZ2h0OmQsd2lkdGg6eSxwaXhlbHM6Vn09YWUuZGVjb2RlKGspLGE9bmV3IEZsb2F0MzJBcnJheShkKnkpO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKWFbZV09VlswXVtlXTtyZXR1cm57YXJyYXk6YSx3aWR0aDp5LGhlaWdodDpkfX1mdW5jdGlvbiBvZShrLGQseSl7bGV0IFY9ZmUoayk7eVsyXS15WzBdPDEmJihWPWxlKFYseSkpO2NvbnN0e2FycmF5OmEsd2lkdGg6ZX09VixzPW5ldyBlZShlKS5jcmVhdGVUaWxlKGEpLHQ9c2VbZF18fDA7cmV0dXJuIHMuZ2V0R2VvbWV0cnlEYXRhKHQpfWZ1bmN0aW9uIGxlKGssZCl7ZnVuY3Rpb24geShzLHQsbixoLGksbyxjLHUpe2NvbnN0IG09bmV3IEZsb2F0MzJBcnJheShpKm8pO2ZvcihsZXQgbD0wO2w8bztsKyspZm9yKGxldCBmPTA7ZjxpO2YrKyl7Y29uc3QgZz0obCtoKSp0KyhmK24pLE09bCppK2Y7bVtNXT1zW2ddfWNvbnN0IHc9bmV3IEZsb2F0MzJBcnJheSh1KmMpO2ZvcihsZXQgbD0wO2w8dTtsKyspZm9yKGxldCBmPTA7ZjxjO2YrKyl7Y29uc3QgZz1sKnUrZixNPU1hdGgucm91bmQoZipvL3UpLHA9TWF0aC5yb3VuZChsKmkvYykqaStNO3dbZ109bVtwXX1yZXR1cm4gd31jb25zdCBWPXVlKGQsay53aWR0aCksYT1WLnN3KzEsZT1WLnNoKzE7cmV0dXJue2FycmF5Onkoay5hcnJheSxrLndpZHRoLFYuc3gsVi5zeSxWLnN3LFYuc2gsYSxlKSx3aWR0aDphLGhlaWdodDplfX1mdW5jdGlvbiB1ZShrLGQpe2NvbnN0IHk9TWF0aC5mbG9vcihrWzBdKmQpLFY9TWF0aC5mbG9vcihrWzFdKmQpLGE9TWF0aC5mbG9vcigoa1syXS1rWzBdKSpkKSxlPU1hdGguZmxvb3IoKGtbM10ta1sxXSkqZCk7cmV0dXJue3N4Onksc3k6VixzdzphLHNoOmV9fXNlbGYub25tZXNzYWdlPWs9Pntjb25zdCBkPWsuZGF0YSx5PW9lKGQuZGVtRGF0YSxkLnosZC5jbGlwQm91bmRzKTtzZWxmLnBvc3RNZXNzYWdlKHkpfX0pKCk7Cg==",Ey=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),pu=typeof self<"u"&&self.Blob&&new Blob([Ey(fu)],{type:"text/javascript;charset=utf-8"});function $y(i){let e;try{if(e=pu&&(self.URL||self.webkitURL).createObjectURL(pu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+fu,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const qy=function(){var i={};i.defaultNoDataValue=-34027999387901484e22,i.decode=function(a,c){c=c||{};var u=c.encodedMaskData||c.encodedMaskData===null,d=r(a,c.inputOffset||0,u),m=c.noDataValue!==null?c.noDataValue:i.defaultNoDataValue,f=e(d,c.pixelType||Float32Array,c.encodedMaskData,m,c.returnMask),g={width:d.width,height:d.height,pixelData:f.resultPixels,minValue:f.minValue,maxValue:d.pixels.maxValue,noDataValue:m};return f.resultMask&&(g.maskData=f.resultMask),c.returnEncodedMask&&d.mask&&(g.encodedMaskData=d.mask.bitset?d.mask.bitset:null),c.returnFileInfo&&(g.fileInfo=t(d),c.computeUsedBitDepths&&(g.fileInfo.bitDepths=n(d))),g};var e=function(a,c,u,d,m){var f=0,g=a.pixels.numBlocksX,_=a.pixels.numBlocksY,w=Math.floor(a.width/g),x=Math.floor(a.height/_),b=2*a.maxZError,L=Number.MAX_VALUE,M;u=u||(a.mask?a.mask.bitset:null);var C,Z;C=new c(a.width*a.height),m&&u&&(Z=new Uint8Array(a.width*a.height));for(var z=new Float32Array(w*x),D,X,I=0;I<=_;I++){var K=I!==_?x:a.height%_;if(K!==0)for(var V=0;V<=g;V++){var G=V!==g?w:a.width%g;if(G!==0){var k=I*a.width*x+V*w,j=a.width-G,Y=a.pixels.blocks[f],H,Q,ie;Y.encoding<2?(Y.encoding===0?H=Y.rawData:(o(Y.stuffedData,Y.bitsPerPixel,Y.numValidPixels,Y.offset,b,z,a.pixels.maxValue),H=z),Q=0):Y.encoding===2?ie=0:ie=Y.offset;var re;if(u)for(X=0;X<K;X++){for(k&7&&(re=u[k>>3],re<<=k&7),D=0;D<G;D++)k&7||(re=u[k>>3]),re&128?(Z&&(Z[k]=1),M=Y.encoding<2?H[Q++]:ie,L=L>M?M:L,C[k++]=M):(Z&&(Z[k]=0),C[k++]=d),re<<=1;k+=j}else if(Y.encoding<2)for(X=0;X<K;X++){for(D=0;D<G;D++)M=H[Q++],L=L>M?M:L,C[k++]=M;k+=j}else for(L=L>ie?ie:L,X=0;X<K;X++){for(D=0;D<G;D++)C[k++]=ie;k+=j}if(Y.encoding===1&&Q!==Y.numValidPixels)throw"Block and Mask do not match";f++}}}return{resultPixels:C,resultMask:Z,minValue:L}},t=function(a){return{fileIdentifierString:a.fileIdentifierString,fileVersion:a.fileVersion,imageType:a.imageType,height:a.height,width:a.width,maxZError:a.maxZError,eofOffset:a.eofOffset,mask:a.mask?{numBlocksX:a.mask.numBlocksX,numBlocksY:a.mask.numBlocksY,numBytes:a.mask.numBytes,maxValue:a.mask.maxValue}:null,pixels:{numBlocksX:a.pixels.numBlocksX,numBlocksY:a.pixels.numBlocksY,numBytes:a.pixels.numBytes,maxValue:a.pixels.maxValue,noDataValue:a.noDataValue}}},n=function(a){for(var c=a.pixels.numBlocksX*a.pixels.numBlocksY,u={},d=0;d<c;d++){var m=a.pixels.blocks[d];m.encoding===0?u.float32=!0:m.encoding===1?u[m.bitsPerPixel]=!0:u[0]=!0}return Object.keys(u)},r=function(a,c,u){var d={},m=new Uint8Array(a,c,10);if(d.fileIdentifierString=String.fromCharCode.apply(null,m),d.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+d.fileIdentifierString;c+=10;var f=new DataView(a,c,24);if(d.fileVersion=f.getInt32(0,!0),d.imageType=f.getInt32(4,!0),d.height=f.getUint32(8,!0),d.width=f.getUint32(12,!0),d.maxZError=f.getFloat64(16,!0),c+=24,!u)if(f=new DataView(a,c,16),d.mask={},d.mask.numBlocksY=f.getUint32(0,!0),d.mask.numBlocksX=f.getUint32(4,!0),d.mask.numBytes=f.getUint32(8,!0),d.mask.maxValue=f.getFloat32(12,!0),c+=16,d.mask.numBytes>0){var g=new Uint8Array(Math.ceil(d.width*d.height/8));f=new DataView(a,c,d.mask.numBytes);var _=f.getInt16(0,!0),w=2,x=0;do{if(_>0)for(;_--;)g[x++]=f.getUint8(w++);else{var b=f.getUint8(w++);for(_=-_;_--;)g[x++]=b}_=f.getInt16(w,!0),w+=2}while(w<d.mask.numBytes);if(_!==-32768||x<g.length)throw"Unexpected end of mask RLE encoding";d.mask.bitset=g,c+=d.mask.numBytes}else d.mask.numBytes|d.mask.numBlocksY|d.mask.maxValue||(d.mask.bitset=new Uint8Array(Math.ceil(d.width*d.height/8)));f=new DataView(a,c,16),d.pixels={},d.pixels.numBlocksY=f.getUint32(0,!0),d.pixels.numBlocksX=f.getUint32(4,!0),d.pixels.numBytes=f.getUint32(8,!0),d.pixels.maxValue=f.getFloat32(12,!0),c+=16;var L=d.pixels.numBlocksX,M=d.pixels.numBlocksY,C=L+(d.width%L>0?1:0),Z=M+(d.height%M>0?1:0);d.pixels.blocks=new Array(C*Z);for(var z=0,D=0;D<Z;D++)for(var X=0;X<C;X++){var I=0,K=a.byteLength-c;f=new DataView(a,c,Math.min(10,K));var V={};d.pixels.blocks[z++]=V;var G=f.getUint8(0);if(I++,V.encoding=G&63,V.encoding>3)throw"Invalid block encoding ("+V.encoding+")";if(V.encoding===2){c++;continue}if(G!==0&&G!==2){if(G>>=6,V.offsetType=G,G===2)V.offset=f.getInt8(1),I++;else if(G===1)V.offset=f.getInt16(1,!0),I+=2;else if(G===0)V.offset=f.getFloat32(1,!0),I+=4;else throw"Invalid block offset type";if(V.encoding===1)if(G=f.getUint8(I),I++,V.bitsPerPixel=G&63,G>>=6,V.numValidPixelsType=G,G===2)V.numValidPixels=f.getUint8(I),I++;else if(G===1)V.numValidPixels=f.getUint16(I,!0),I+=2;else if(G===0)V.numValidPixels=f.getUint32(I,!0),I+=4;else throw"Invalid valid pixel count type"}if(c+=I,V.encoding!==3){var k,j;if(V.encoding===0){var Y=(d.pixels.numBytes-1)/4;if(Y!==Math.floor(Y))throw"uncompressed block has invalid length";k=new ArrayBuffer(Y*4),j=new Uint8Array(k),j.set(new Uint8Array(a,c,Y*4));var H=new Float32Array(k);V.rawData=H,c+=Y*4}else if(V.encoding===1){var Q=Math.ceil(V.numValidPixels*V.bitsPerPixel/8),ie=Math.ceil(Q/4);k=new ArrayBuffer(ie*4),j=new Uint8Array(k),j.set(new Uint8Array(a,c,Q)),V.stuffedData=new Uint32Array(k),c+=Q}}}return d.eofOffset=c,d},o=function(a,c,u,d,m,f,g){var _=(1<<c)-1,w=0,x,b=0,L,M,C=Math.ceil((g-d)/m),Z=a.length*4-Math.ceil(c*u/8);for(a[a.length-1]<<=8*Z,x=0;x<u;x++){if(b===0&&(M=a[w++],b=32),b>=c)L=M>>>b-c&_,b-=c;else{var z=c-b;L=(M&_)<<z&_,M=a[w++],b=32-z,L+=M>>>b}f[x]=L<C?d+L*m:g}return f};return i}(),e_=function(){var i={unstuff:function(r,o,a,c,u,d,m,f){var g=(1<<a)-1,_=0,w,x=0,b,L,M,C,Z=r.length*4-Math.ceil(a*c/8);if(r[r.length-1]<<=8*Z,u)for(w=0;w<c;w++)x===0&&(L=r[_++],x=32),x>=a?(b=L>>>x-a&g,x-=a):(M=a-x,b=(L&g)<<M&g,L=r[_++],x=32-M,b+=L>>>x),o[w]=u[b];else for(C=Math.ceil((f-d)/m),w=0;w<c;w++)x===0&&(L=r[_++],x=32),x>=a?(b=L>>>x-a&g,x-=a):(M=a-x,b=(L&g)<<M&g,L=r[_++],x=32-M,b+=L>>>x),o[w]=b<C?d+b*m:f},unstuffLUT:function(r,o,a,c,u,d){var m=(1<<o)-1,f=0,g=0,_=0,w=0,x=0,b,L=[],M=r.length*4-Math.ceil(o*a/8);r[r.length-1]<<=8*M;var C=Math.ceil((d-c)/u);for(g=0;g<a;g++)w===0&&(b=r[f++],w=32),w>=o?(x=b>>>w-o&m,w-=o):(_=o-w,x=(b&m)<<_&m,b=r[f++],w=32-_,x+=b>>>w),L[g]=x<C?c+x*u:d;return L.unshift(c),L},unstuff2:function(r,o,a,c,u,d,m,f){var g=(1<<a)-1,_=0,w,x=0,b=0,L,M,C;if(u)for(w=0;w<c;w++)x===0&&(M=r[_++],x=32,b=0),x>=a?(L=M>>>b&g,x-=a,b+=a):(C=a-x,L=M>>>b&g,M=r[_++],x=32-C,L|=(M&(1<<C)-1)<<a-C,b=C),o[w]=u[L];else{var Z=Math.ceil((f-d)/m);for(w=0;w<c;w++)x===0&&(M=r[_++],x=32,b=0),x>=a?(L=M>>>b&g,x-=a,b+=a):(C=a-x,L=M>>>b&g,M=r[_++],x=32-C,L|=(M&(1<<C)-1)<<a-C,b=C),o[w]=L<Z?d+L*m:f}return o},unstuffLUT2:function(r,o,a,c,u,d){var m=(1<<o)-1,f=0,g=0,_=0,w=0,x=0,b=0,L,M=[],C=Math.ceil((d-c)/u);for(g=0;g<a;g++)w===0&&(L=r[f++],w=32,b=0),w>=o?(x=L>>>b&m,w-=o,b+=o):(_=o-w,x=L>>>b&m,L=r[f++],w=32-_,x|=(L&(1<<_)-1)<<o-_,b=_),M[g]=x<C?c+x*u:d;return M.unshift(c),M},originalUnstuff:function(r,o,a,c){var u=(1<<a)-1,d=0,m,f=0,g,_,w,x=r.length*4-Math.ceil(a*c/8);for(r[r.length-1]<<=8*x,m=0;m<c;m++)f===0&&(_=r[d++],f=32),f>=a?(g=_>>>f-a&u,f-=a):(w=a-f,g=(_&u)<<w&u,_=r[d++],f=32-w,g+=_>>>f),o[m]=g;return o},originalUnstuff2:function(r,o,a,c){var u=(1<<a)-1,d=0,m,f=0,g=0,_,w,x;for(m=0;m<c;m++)f===0&&(w=r[d++],f=32,g=0),f>=a?(_=w>>>g&u,f-=a,g+=a):(x=a-f,_=w>>>g&u,w=r[d++],f=32-x,_|=(w&(1<<x)-1)<<a-x,g=x),o[m]=_;return o}},e={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(r){for(var o=65535,a=65535,c=r.length,u=Math.floor(c/2),d=0;u;){var m=u>=359?359:u;u-=m;do o+=r[d++]<<8,a+=o+=r[d++];while(--m);o=(o&65535)+(o>>>16),a=(a&65535)+(a>>>16)}return c&1&&(a+=o+=r[d]<<8),o=(o&65535)+(o>>>16),a=(a&65535)+(a>>>16),(a<<16|o)>>>0},readHeaderInfo:function(r,o){var a=o.ptr,c=new Uint8Array(r,a,6),u={};if(u.fileIdentifierString=String.fromCharCode.apply(null,c),u.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+u.fileIdentifierString;a+=6;var d=new DataView(r,a,8),m=d.getInt32(0,!0);u.fileVersion=m,a+=4,m>=3&&(u.checksum=d.getUint32(4,!0),a+=4),d=new DataView(r,a,12),u.height=d.getUint32(0,!0),u.width=d.getUint32(4,!0),a+=8,m>=4?(u.numDims=d.getUint32(8,!0),a+=4):u.numDims=1,d=new DataView(r,a,40),u.numValidPixel=d.getUint32(0,!0),u.microBlockSize=d.getInt32(4,!0),u.blobSize=d.getInt32(8,!0),u.imageType=d.getInt32(12,!0),u.maxZError=d.getFloat64(16,!0),u.zMin=d.getFloat64(24,!0),u.zMax=d.getFloat64(32,!0),a+=40,o.headerInfo=u,o.ptr=a;var f,g;if(m>=3&&(g=m>=4?52:48,f=this.computeChecksumFletcher32(new Uint8Array(r,a-g,u.blobSize-14)),f!==u.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(r,o){var a=o.headerInfo,c=this.getDataTypeArray(a.imageType),u=a.numDims*this.getDataTypeSize(a.imageType),d=this.readSubArray(r,o.ptr,c,u),m=this.readSubArray(r,o.ptr+u,c,u);o.ptr+=2*u;var f,g=!0;for(f=0;f<a.numDims;f++)if(d[f]!==m[f]){g=!1;break}return a.minValues=d,a.maxValues=m,g},readSubArray:function(r,o,a,c){var u;if(a===Uint8Array)u=new Uint8Array(r,o,c);else{var d=new ArrayBuffer(c),m=new Uint8Array(d);m.set(new Uint8Array(r,o,c)),u=new a(d)}return u},readMask:function(r,o){var a=o.ptr,c=o.headerInfo,u=c.width*c.height,d=c.numValidPixel,m=new DataView(r,a,4),f={};if(f.numBytes=m.getUint32(0,!0),a+=4,(d===0||u===d)&&f.numBytes!==0)throw"invalid mask";var g,_;if(d===0)g=new Uint8Array(Math.ceil(u/8)),f.bitset=g,_=new Uint8Array(u),o.pixels.resultMask=_,a+=f.numBytes;else if(f.numBytes>0){g=new Uint8Array(Math.ceil(u/8)),m=new DataView(r,a,f.numBytes);var w=m.getInt16(0,!0),x=2,b=0,L=0;do{if(w>0)for(;w--;)g[b++]=m.getUint8(x++);else for(L=m.getUint8(x++),w=-w;w--;)g[b++]=L;w=m.getInt16(x,!0),x+=2}while(x<f.numBytes);if(w!==-32768||b<g.length)throw"Unexpected end of mask RLE encoding";_=new Uint8Array(u);var M=0,C=0;for(C=0;C<u;C++)C&7?(M=g[C>>3],M<<=C&7):M=g[C>>3],M&128&&(_[C]=1);o.pixels.resultMask=_,f.bitset=g,a+=f.numBytes}return o.ptr=a,o.mask=f,!0},readDataOneSweep:function(r,o,a,c){var u=o.ptr,d=o.headerInfo,m=d.numDims,f=d.width*d.height,g=d.imageType,_=d.numValidPixel*e.getDataTypeSize(g)*m,w,x=o.pixels.resultMask;if(a===Uint8Array)w=new Uint8Array(r,u,_);else{var b=new ArrayBuffer(_),L=new Uint8Array(b);L.set(new Uint8Array(r,u,_)),w=new a(b)}if(w.length===f*m)c?o.pixels.resultPixels=e.swapDimensionOrder(w,f,m,a,!0):o.pixels.resultPixels=w;else{o.pixels.resultPixels=new a(f*m);var M=0,C=0,Z=0,z=0;if(m>1){if(c){for(C=0;C<f;C++)if(x[C])for(z=C,Z=0;Z<m;Z++,z+=f)o.pixels.resultPixels[z]=w[M++]}else for(C=0;C<f;C++)if(x[C])for(z=C*m,Z=0;Z<m;Z++)o.pixels.resultPixels[z+Z]=w[M++]}else for(C=0;C<f;C++)x[C]&&(o.pixels.resultPixels[C]=w[M++])}return u+=_,o.ptr=u,!0},readHuffmanTree:function(r,o){var a=this.HUFFMAN_LUT_BITS_MAX,c=new DataView(r,o.ptr,16);o.ptr+=16;var u=c.getInt32(0,!0);if(u<2)throw"unsupported Huffman version";var d=c.getInt32(4,!0),m=c.getInt32(8,!0),f=c.getInt32(12,!0);if(m>=f)return!1;var g=new Uint32Array(f-m);e.decodeBits(r,o,g);var _=[],w,x,b,L;for(w=m;w<f;w++)x=w-(w<d?0:d),_[x]={first:g[w-m],second:null};var M=r.byteLength-o.ptr,C=Math.ceil(M/4),Z=new ArrayBuffer(C*4),z=new Uint8Array(Z);z.set(new Uint8Array(r,o.ptr,M));var D=new Uint32Array(Z),X=0,I,K=0;for(I=D[0],w=m;w<f;w++)x=w-(w<d?0:d),L=_[x].first,L>0&&(_[x].second=I<<X>>>32-L,32-X>=L?(X+=L,X===32&&(X=0,K++,I=D[K])):(X+=L-32,K++,I=D[K],_[x].second|=I>>>32-X));var V=0,G=0,k=new t;for(w=0;w<_.length;w++)_[w]!==void 0&&(V=Math.max(V,_[w].first));V>=a?G=a:G=V;var j=[],Y,H,Q,ie,re,le;for(w=m;w<f;w++)if(x=w-(w<d?0:d),L=_[x].first,L>0)if(Y=[L,x],L<=G)for(H=_[x].second<<G-L,Q=1<<G-L,b=0;b<Q;b++)j[H|b]=Y;else for(H=_[x].second,le=k,ie=L-1;ie>=0;ie--)re=H>>>ie&1,re?(le.right||(le.right=new t),le=le.right):(le.left||(le.left=new t),le=le.left),ie===0&&!le.val&&(le.val=Y[1]);return{decodeLut:j,numBitsLUTQick:G,numBitsLUT:V,tree:k,stuffedData:D,srcPtr:K,bitPos:X}},readHuffman:function(r,o,a,c){var u=o.headerInfo,d=u.numDims,m=o.headerInfo.height,f=o.headerInfo.width,g=f*m,_=this.readHuffmanTree(r,o),w=_.decodeLut,x=_.tree,b=_.stuffedData,L=_.srcPtr,M=_.bitPos,C=_.numBitsLUTQick,Z=_.numBitsLUT,z=o.headerInfo.imageType===0?128:0,D,X,I,K=o.pixels.resultMask,V,G,k,j,Y,H,Q,ie=0;M>0&&(L++,M=0);var re=b[L],le=o.encodeMode===1,de=new a(g*d),ge=de,fe;if(d<2||le){for(fe=0;fe<d;fe++)if(d>1&&(ge=new a(de.buffer,g*fe,g),ie=0),o.headerInfo.numValidPixel===f*m)for(H=0,j=0;j<m;j++)for(Y=0;Y<f;Y++,H++){if(X=0,V=re<<M>>>32-C,G=V,32-M<C&&(V|=b[L+1]>>>64-M-C,G=V),w[G])X=w[G][1],M+=w[G][0];else for(V=re<<M>>>32-Z,G=V,32-M<Z&&(V|=b[L+1]>>>64-M-Z,G=V),D=x,Q=0;Q<Z;Q++)if(k=V>>>Z-Q-1&1,D=k?D.right:D.left,!(D.left||D.right)){X=D.val,M=M+Q+1;break}M>=32&&(M-=32,L++,re=b[L]),I=X-z,le?(Y>0?I+=ie:j>0?I+=ge[H-f]:I+=ie,I&=255,ge[H]=I,ie=I):ge[H]=I}else for(H=0,j=0;j<m;j++)for(Y=0;Y<f;Y++,H++)if(K[H]){if(X=0,V=re<<M>>>32-C,G=V,32-M<C&&(V|=b[L+1]>>>64-M-C,G=V),w[G])X=w[G][1],M+=w[G][0];else for(V=re<<M>>>32-Z,G=V,32-M<Z&&(V|=b[L+1]>>>64-M-Z,G=V),D=x,Q=0;Q<Z;Q++)if(k=V>>>Z-Q-1&1,D=k?D.right:D.left,!(D.left||D.right)){X=D.val,M=M+Q+1;break}M>=32&&(M-=32,L++,re=b[L]),I=X-z,le?(Y>0&&K[H-1]?I+=ie:j>0&&K[H-f]?I+=ge[H-f]:I+=ie,I&=255,ge[H]=I,ie=I):ge[H]=I}}else for(H=0,j=0;j<m;j++)for(Y=0;Y<f;Y++)if(H=j*f+Y,!K||K[H])for(fe=0;fe<d;fe++,H+=g){if(X=0,V=re<<M>>>32-C,G=V,32-M<C&&(V|=b[L+1]>>>64-M-C,G=V),w[G])X=w[G][1],M+=w[G][0];else for(V=re<<M>>>32-Z,G=V,32-M<Z&&(V|=b[L+1]>>>64-M-Z,G=V),D=x,Q=0;Q<Z;Q++)if(k=V>>>Z-Q-1&1,D=k?D.right:D.left,!(D.left||D.right)){X=D.val,M=M+Q+1;break}M>=32&&(M-=32,L++,re=b[L]),I=X-z,ge[H]=I}o.ptr=o.ptr+(L+1)*4+(M>0?4:0),o.pixels.resultPixels=de,d>1&&!c&&(o.pixels.resultPixels=e.swapDimensionOrder(de,g,d,a))},decodeBits:function(r,o,a,c,u){{var d=o.headerInfo,m=d.fileVersion,f=0,g=r.byteLength-o.ptr>=5?5:r.byteLength-o.ptr,_=new DataView(r,o.ptr,g),w=_.getUint8(0);f++;var x=w>>6,b=x===0?4:3-x,L=(w&32)>0,M=w&31,C=0;if(b===1)C=_.getUint8(f),f++;else if(b===2)C=_.getUint16(f,!0),f+=2;else if(b===4)C=_.getUint32(f,!0),f+=4;else throw"Invalid valid pixel count type";var Z=2*d.maxZError,z,D,X,I,K,V,G,k,j,Y=d.numDims>1?d.maxValues[u]:d.zMax;if(L){for(o.counter.lut++,k=_.getUint8(f),f++,I=Math.ceil((k-1)*M/8),K=Math.ceil(I/4),D=new ArrayBuffer(K*4),X=new Uint8Array(D),o.ptr+=f,X.set(new Uint8Array(r,o.ptr,I)),G=new Uint32Array(D),o.ptr+=I,j=0;k-1>>>j;)j++;I=Math.ceil(C*j/8),K=Math.ceil(I/4),D=new ArrayBuffer(K*4),X=new Uint8Array(D),X.set(new Uint8Array(r,o.ptr,I)),z=new Uint32Array(D),o.ptr+=I,m>=3?V=i.unstuffLUT2(G,M,k-1,c,Z,Y):V=i.unstuffLUT(G,M,k-1,c,Z,Y),m>=3?i.unstuff2(z,a,j,C,V):i.unstuff(z,a,j,C,V)}else o.counter.bitstuffer++,j=M,o.ptr+=f,j>0&&(I=Math.ceil(C*j/8),K=Math.ceil(I/4),D=new ArrayBuffer(K*4),X=new Uint8Array(D),X.set(new Uint8Array(r,o.ptr,I)),z=new Uint32Array(D),o.ptr+=I,m>=3?c==null?i.originalUnstuff2(z,a,j,C):i.unstuff2(z,a,j,C,!1,c,Z,Y):c==null?i.originalUnstuff(z,a,j,C):i.unstuff(z,a,j,C,!1,c,Z,Y))}},readTiles:function(r,o,a,c){var u=o.headerInfo,d=u.width,m=u.height,f=d*m,g=u.microBlockSize,_=u.imageType,w=e.getDataTypeSize(_),x=Math.ceil(d/g),b=Math.ceil(m/g);o.pixels.numBlocksY=b,o.pixels.numBlocksX=x,o.pixels.ptr=0;var L=0,M=0,C=0,Z=0,z=0,D=0,X=0,I=0,K=0,V=0,G=0,k=0,j=0,Y=0,H=0,Q=0,ie,re,le,de,ge,fe,Se=new a(g*g),nt=m%g||g,rt=d%g||g,dt,Je,Be=u.numDims,Ye,it=o.pixels.resultMask,De=o.pixels.resultPixels,Vt=u.fileVersion,Nt=Vt>=5?14:15,Ce,st=u.zMax,ft;for(C=0;C<b;C++)for(z=C!==b-1?g:nt,Z=0;Z<x;Z++)for(D=Z!==x-1?g:rt,G=C*d*g+Z*g,k=d-D,Ye=0;Ye<Be;Ye++){if(Be>1?(ft=De,G=C*d*g+Z*g,De=new a(o.pixels.resultPixels.buffer,f*Ye*w,f),st=u.maxValues[Ye]):ft=null,X=r.byteLength-o.ptr,ie=new DataView(r,o.ptr,Math.min(10,X)),re={},Q=0,I=ie.getUint8(0),Q++,Ce=u.fileVersion>=5?I&4:0,K=I>>6&255,V=I>>2&Nt,V!==(Z*g>>3&Nt)||Ce&&Ye===0)throw"integrity issue";if(fe=I&3,fe>3)throw o.ptr+=Q,"Invalid block encoding ("+fe+")";if(fe===2){if(Ce)if(it)for(L=0;L<z;L++)for(M=0;M<D;M++)it[G]&&(De[G]=ft[G]),G++;else for(L=0;L<z;L++)for(M=0;M<D;M++)De[G]=ft[G],G++;o.counter.constant++,o.ptr+=Q;continue}else if(fe===0){if(Ce)throw"integrity issue";if(o.counter.uncompressed++,o.ptr+=Q,j=z*D*w,Y=r.byteLength-o.ptr,j=j<Y?j:Y,le=new ArrayBuffer(j%w===0?j:j+w-j%w),de=new Uint8Array(le),de.set(new Uint8Array(r,o.ptr,j)),ge=new a(le),H=0,it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=ge[H++]),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G++]=ge[H++];G+=k}o.ptr+=H*w}else if(dt=e.getDataTypeUsed(Ce&&_<6?4:_,K),Je=e.getOnePixel(re,Q,dt,ie),Q+=e.getDataTypeSize(dt),fe===3)if(o.ptr+=Q,o.counter.constantoffset++,it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=Ce?Math.min(st,ft[G]+Je):Je),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G]=Ce?Math.min(st,ft[G]+Je):Je,G++;G+=k}else if(o.ptr+=Q,e.decodeBits(r,o,Se,Je,Ye),Q=0,Ce)if(it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=Se[Q++]+ft[G]),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G]=Se[Q++]+ft[G],G++;G+=k}else if(it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=Se[Q++]),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G++]=Se[Q++];G+=k}}Be>1&&!c&&(o.pixels.resultPixels=e.swapDimensionOrder(o.pixels.resultPixels,f,Be,a))},formatFileInfo:function(r){return{fileIdentifierString:r.headerInfo.fileIdentifierString,fileVersion:r.headerInfo.fileVersion,imageType:r.headerInfo.imageType,height:r.headerInfo.height,width:r.headerInfo.width,numValidPixel:r.headerInfo.numValidPixel,microBlockSize:r.headerInfo.microBlockSize,blobSize:r.headerInfo.blobSize,maxZError:r.headerInfo.maxZError,pixelType:e.getPixelType(r.headerInfo.imageType),eofOffset:r.eofOffset,mask:r.mask?{numBytes:r.mask.numBytes}:null,pixels:{numBlocksX:r.pixels.numBlocksX,numBlocksY:r.pixels.numBlocksY,maxValue:r.headerInfo.zMax,minValue:r.headerInfo.zMin,noDataValue:r.noDataValue}}},constructConstantSurface:function(r,o){var a=r.headerInfo.zMax,c=r.headerInfo.zMin,u=r.headerInfo.maxValues,d=r.headerInfo.numDims,m=r.headerInfo.height*r.headerInfo.width,f=0,g=0,_=0,w=r.pixels.resultMask,x=r.pixels.resultPixels;if(w)if(d>1){if(o)for(f=0;f<d;f++)for(_=f*m,a=u[f],g=0;g<m;g++)w[g]&&(x[_+g]=a);else for(g=0;g<m;g++)if(w[g])for(_=g*d,f=0;f<d;f++)x[_+d]=u[f]}else for(g=0;g<m;g++)w[g]&&(x[g]=a);else if(d>1&&c!==a)if(o)for(f=0;f<d;f++)for(_=f*m,a=u[f],g=0;g<m;g++)x[_+g]=a;else for(g=0;g<m;g++)for(_=g*d,f=0;f<d;f++)x[_+f]=u[f];else for(g=0;g<m*d;g++)x[g]=a},getDataTypeArray:function(r){var o;switch(r){case 0:o=Int8Array;break;case 1:o=Uint8Array;break;case 2:o=Int16Array;break;case 3:o=Uint16Array;break;case 4:o=Int32Array;break;case 5:o=Uint32Array;break;case 6:o=Float32Array;break;case 7:o=Float64Array;break;default:o=Float32Array}return o},getPixelType:function(r){var o;switch(r){case 0:o="S8";break;case 1:o="U8";break;case 2:o="S16";break;case 3:o="U16";break;case 4:o="S32";break;case 5:o="U32";break;case 6:o="F32";break;case 7:o="F64";break;default:o="F32"}return o},isValidPixelValue:function(r,o){if(o==null)return!1;var a;switch(r){case 0:a=o>=-128&&o<=127;break;case 1:a=o>=0&&o<=255;break;case 2:a=o>=-32768&&o<=32767;break;case 3:a=o>=0&&o<=65536;break;case 4:a=o>=-2147483648&&o<=2147483647;break;case 5:a=o>=0&&o<=4294967296;break;case 6:a=o>=-34027999387901484e22&&o<=34027999387901484e22;break;case 7:a=o>=-17976931348623157e292&&o<=17976931348623157e292;break;default:a=!1}return a},getDataTypeSize:function(r){var o=0;switch(r){case 0:case 1:o=1;break;case 2:case 3:o=2;break;case 4:case 5:case 6:o=4;break;case 7:o=8;break;default:o=r}return o},getDataTypeUsed:function(r,o){var a=r;switch(r){case 2:case 4:a=r-o;break;case 3:case 5:a=r-2*o;break;case 6:o===0?a=r:o===1?a=2:a=1;break;case 7:o===0?a=r:a=r-2*o+1;break;default:a=r;break}return a},getOnePixel:function(r,o,a,c){var u=0;switch(a){case 0:u=c.getInt8(o);break;case 1:u=c.getUint8(o);break;case 2:u=c.getInt16(o,!0);break;case 3:u=c.getUint16(o,!0);break;case 4:u=c.getInt32(o,!0);break;case 5:u=c.getUInt32(o,!0);break;case 6:u=c.getFloat32(o,!0);break;case 7:u=c.getFloat64(o,!0);break;default:throw"the decoder does not understand this pixel type"}return u},swapDimensionOrder:function(r,o,a,c,u){var d=0,m=0,f=0,g=0,_=r;if(a>1)if(_=new c(o*a),u)for(d=0;d<o;d++)for(g=d,f=0;f<a;f++,g+=o)_[g]=r[m++];else for(d=0;d<o;d++)for(g=d,f=0;f<a;f++,g+=o)_[m++]=r[g];return _}},t=function(r,o,a){this.val=r,this.left=o,this.right=a},n={decode:function(r,o){o=o||{};var a=o.noDataValue,c=0,u={};if(u.ptr=o.inputOffset||0,u.pixels={},!!e.readHeaderInfo(r,u)){var d=u.headerInfo,m=d.fileVersion,f=e.getDataTypeArray(d.imageType);if(m>5)throw"unsupported lerc version 2."+m;e.readMask(r,u),d.numValidPixel!==d.width*d.height&&!u.pixels.resultMask&&(u.pixels.resultMask=o.maskData);var g=d.width*d.height;u.pixels.resultPixels=new f(g*d.numDims),u.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0};var _=!o.returnPixelInterleavedDims;if(d.numValidPixel!==0)if(d.zMax===d.zMin)e.constructConstantSurface(u,_);else if(m>=4&&e.checkMinMaxRanges(r,u))e.constructConstantSurface(u,_);else{var w=new DataView(r,u.ptr,2),x=w.getUint8(0);if(u.ptr++,x)e.readDataOneSweep(r,u,f,_);else if(m>1&&d.imageType<=1&&Math.abs(d.maxZError-.5)<1e-5){var b=w.getUint8(1);if(u.ptr++,u.encodeMode=b,b>2||m<4&&b>1)throw"Invalid Huffman flag "+b;b?e.readHuffman(r,u,f,_):e.readTiles(r,u,f,_)}else e.readTiles(r,u,f,_)}u.eofOffset=u.ptr;var L;o.inputOffset?(L=u.headerInfo.blobSize+o.inputOffset-u.ptr,Math.abs(L)>=1&&(u.eofOffset=o.inputOffset+u.headerInfo.blobSize)):(L=u.headerInfo.blobSize-u.ptr,Math.abs(L)>=1&&(u.eofOffset=u.headerInfo.blobSize));var M={width:d.width,height:d.height,pixelData:u.pixels.resultPixels,minValue:d.zMin,maxValue:d.zMax,validPixelCount:d.numValidPixel,dimCount:d.numDims,dimStats:{minValues:d.minValues,maxValues:d.maxValues},maskData:u.pixels.resultMask};if(u.pixels.resultMask&&e.isValidPixelValue(d.imageType,a)){var C=u.pixels.resultMask;for(c=0;c<g;c++)C[c]||(M.pixelData[c]=a);M.noDataValue=a}return u.noDataValue=a,o.returnFileInfo&&(M.fileInfo=e.formatFileInfo(u)),M}},getBandCount:function(r){var o=0,a=0,c={};for(c.ptr=0,c.pixels={};a<r.byteLength-58;)e.readHeaderInfo(r,c),a+=c.headerInfo.blobSize,o++,c.ptr=a;return o}};return n}();var t_=function(){var i=new ArrayBuffer(4),e=new Uint8Array(i),t=new Uint32Array(i);return t[0]=1,e[0]===1}(),n_={decode:function(i,e){if(!t_)throw"Big endian system is not supported.";e=e||{};var t=e.inputOffset||0,n=new Uint8Array(i,t,10),r=String.fromCharCode.apply(null,n),o,a;if(r.trim()==="CntZImage")o=qy,a=1;else if(r.substring(0,5)==="Lerc2")o=e_,a=2;else throw"Unexpected file identifier string: "+r;for(var c=0,u=i.byteLength-10,d,m=[],f,g,_={width:0,height:0,pixels:[],pixelType:e.pixelType,mask:null,statistics:[]},w=0;t<u;){var x=o.decode(i,{inputOffset:t,encodedMaskData:d,maskData:g,returnMask:c===0,returnEncodedMask:c===0,returnFileInfo:!0,returnPixelInterleavedDims:e.returnPixelInterleavedDims,pixelType:e.pixelType||null,noDataValue:e.noDataValue||null});t=x.fileInfo.eofOffset,g=x.maskData,c===0&&(d=x.encodedMaskData,_.width=x.width,_.height=x.height,_.dimCount=x.dimCount||1,_.pixelType=x.pixelType||x.fileInfo.pixelType,_.mask=g),a>1&&(g&&m.push(g),x.fileInfo.mask&&x.fileInfo.mask.numBytes>0&&w++),c++,_.pixels.push(x.pixelData),_.statistics.push({minValue:x.minValue,maxValue:x.maxValue,noDataValue:x.noDataValue,dimStats:x.dimStats})}var b,L,M;if(a>1&&w>1){for(M=_.width*_.height,_.bandMasks=m,g=new Uint8Array(M),g.set(m[0]),b=1;b<m.length;b++)for(f=m[b],L=0;L<M;L++)g[L]=g[L]&f[L];_.maskData=g}return _}};const r_={0:7e3,1:6e3,2:5e3,3:4e3,4:3e3,5:2500,6:2e3,7:1500,8:800,9:500,10:200,11:100,12:40,13:12,14:5,15:2,16:1,17:.5,18:.2,19:.1,20:.01};function i_(i){const{height:e,width:t,pixels:n}=n_.decode(i),r=new Float32Array(e*t);for(let o=0;o<r.length;o++)r[o]=n[0][o];return{array:r,width:t,height:e}}function s_(i,e,t){let n=i_(i);t[2]-t[0]<1&&(n=o_(n,t));const{array:r,width:o}=n,c=new au(o).createTile(r),u=r_[e]||0;return c.getGeometryData(u)}function o_(i,e){function t(c,u,d,m,f,g,_,w){const x=new Float32Array(f*g);for(let L=0;L<g;L++)for(let M=0;M<f;M++){const C=(L+m)*u+(M+d),Z=L*f+M;x[Z]=c[C]}const b=new Float32Array(w*_);for(let L=0;L<w;L++)for(let M=0;M<_;M++){const C=L*w+M,Z=Math.round(M*g/w),D=Math.round(L*f/_)*f+Z;b[C]=x[D]}return b}const n=a_(e,i.width),r=n.sw+1,o=n.sh+1;return{array:t(i.array,i.width,n.sx,n.sy,n.sw,n.sh,r,o),width:r,height:o}}function a_(i,e){const t=Math.floor(i[0]*e),n=Math.floor(i[1]*e),r=Math.floor((i[2]-i[0])*e),o=Math.floor((i[3]-i[1])*e);return{sx:t,sy:n,sw:r,sh:o}}var l_=Object.defineProperty,c_=(i,e,t)=>e in i?l_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,bs=(i,e,t)=>c_(i,typeof e!="symbol"?e+"":e,t);const u_=10;class h_ extends aa{constructor(){super(),bs(this,"info",{version:"0.10.0",description:"Tile LERC terrain loader. It can load ArcGis-lerc format terrain data."}),bs(this,"dataType","lerc"),bs(this,"fileLoader",new p.FileLoader(Oe.manager)),bs(this,"_workerPool",new Ro(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new $y)}async doLoad(e,t){this._workerPool.pool===0&&this._workerPool.setWorkerLimit(u_);const{z:n,bounds:r}=t,o=await this.fileLoader.loadAsync(e).catch(()=>new Float32Array(256*256)),a=s_(o,n,r);return new Ur().setData(a)}}da(new h_);const mu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGModCl7cmV0dXJuIGEodC5kYXRhKX1mdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIG4oZSx1KXtjb25zdCByPXUqNCxbaSxmLGcsbF09ZS5zbGljZShyLHIrNCk7cmV0dXJuIGw9PT0wPzA6LTFlNCsoaTw8MTZ8Zjw8OHxnKSouMX1jb25zdCBvPXQubGVuZ3RoPj4+MixzPW5ldyBGbG9hdDMyQXJyYXkobyk7Zm9yKGxldCBlPTA7ZTxvO2UrKylzW2VdPW4odCxlKTtyZXR1cm4gc31zZWxmLm9ubWVzc2FnZT10PT57Y29uc3Qgbj1jKHQuZGF0YS5pbWdEYXRhKTtzZWxmLnBvc3RNZXNzYWdlKG4pfX0pKCk7Cg==",d_=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),gu=typeof self<"u"&&self.Blob&&new Blob([d_(mu)],{type:"text/javascript;charset=utf-8"});function f_(i){let e;try{if(e=gu&&(self.URL||self.webkitURL).createObjectURL(gu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+mu,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var p_=Object.defineProperty,m_=(i,e,t)=>e in i?p_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,xs=(i,e,t)=>m_(i,typeof e!="symbol"?e+"":e,t);const g_=10;class y_ extends aa{constructor(){super(),xs(this,"info",{version:"0.10.0",description:"Mapbox-RGB terrain loader, It can load Mapbox-RGB terrain data."}),xs(this,"dataType","terrain-rgb"),xs(this,"imageLoader",new p.ImageLoader(Oe.manager)),xs(this,"_workerPool",new Ro(0)),this._workerPool.setWorkerCreator(()=>new f_)}async doLoad(e,t){const n=await this.imageLoader.loadAsync(e).catch(u=>new Image),r=p.MathUtils.clamp((t.z+2)*3,2,64),o=__(n,t.bounds,r);let a;this._workerPool.pool===0&&this._workerPool.setWorkerLimit(g_),a=(await this._workerPool.postMessage({imgData:o},[o.data.buffer])).data;const c=new Ur;return c.setData(a),c}}function __(i,e,t){const n=na(e,i.width);t=Math.min(t,n.sw);const o=new OffscreenCanvas(t,t).getContext("2d");return o.imageSmoothingEnabled=!1,o.drawImage(i,n.sx,n.sy,n.sw,n.sh,0,0,t,t),o.getImageData(0,0,t,t)}da(new y_);function Qn(i,e){this.x=i,this.y=e}Qn.prototype={clone(){return new Qn(this.x,this.y)},add(i){return this.clone()._add(i)},sub(i){return this.clone()._sub(i)},multByPoint(i){return this.clone()._multByPoint(i)},divByPoint(i){return this.clone()._divByPoint(i)},mult(i){return this.clone()._mult(i)},div(i){return this.clone()._div(i)},rotate(i){return this.clone()._rotate(i)},rotateAround(i,e){return this.clone()._rotateAround(i,e)},matMult(i){return this.clone()._matMult(i)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(i){return this.x===i.x&&this.y===i.y},dist(i){return Math.sqrt(this.distSqr(i))},distSqr(i){const e=i.x-this.x,t=i.y-this.y;return e*e+t*t},angle(){return Math.atan2(this.y,this.x)},angleTo(i){return Math.atan2(this.y-i.y,this.x-i.x)},angleWith(i){return this.angleWithSep(i.x,i.y)},angleWithSep(i,e){return Math.atan2(this.x*e-this.y*i,this.x*i+this.y*e)},_matMult(i){const e=i[0]*this.x+i[1]*this.y,t=i[2]*this.x+i[3]*this.y;return this.x=e,this.y=t,this},_add(i){return this.x+=i.x,this.y+=i.y,this},_sub(i){return this.x-=i.x,this.y-=i.y,this},_mult(i){return this.x*=i,this.y*=i,this},_div(i){return this.x/=i,this.y/=i,this},_multByPoint(i){return this.x*=i.x,this.y*=i.y,this},_divByPoint(i){return this.x/=i.x,this.y/=i.y,this},_unit(){return this._div(this.mag()),this},_perp(){const i=this.y;return this.y=this.x,this.x=-i,this},_rotate(i){const e=Math.cos(i),t=Math.sin(i),n=e*this.x-t*this.y,r=t*this.x+e*this.y;return this.x=n,this.y=r,this},_rotateAround(i,e){const t=Math.cos(i),n=Math.sin(i),r=e.x+t*(this.x-e.x)-n*(this.y-e.y),o=e.y+n*(this.x-e.x)+t*(this.y-e.y);return this.x=r,this.y=o,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:Qn},Qn.convert=function(i){if(i instanceof Qn)return i;if(Array.isArray(i))return new Qn(+i[0],+i[1]);if(i.x!==void 0&&i.y!==void 0)return new Qn(+i.x,+i.y);throw new Error("Expected [x, y] or {x, y} point format")};class yu{constructor(e,t,n,r,o){this.properties={},this.extent=n,this.type=0,this.id=void 0,this._pbf=e,this._geometry=-1,this._keys=r,this._values=o,e.readFields(v_,this,t)}loadGeometry(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos,n=[];let r,o=1,a=0,c=0,u=0;for(;e.pos<t;){if(a<=0){const d=e.readVarint();o=d&7,a=d>>3}if(a--,o===1||o===2)c+=e.readSVarint(),u+=e.readSVarint(),o===1&&(r&&n.push(r),r=[]),r&&r.push(new Qn(c,u));else if(o===7)r&&r.push(r[0].clone());else throw new Error(`unknown command ${o}`)}return r&&n.push(r),n}bbox(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos;let n=1,r=0,o=0,a=0,c=1/0,u=-1/0,d=1/0,m=-1/0;for(;e.pos<t;){if(r<=0){const f=e.readVarint();n=f&7,r=f>>3}if(r--,n===1||n===2)o+=e.readSVarint(),a+=e.readSVarint(),o<c&&(c=o),o>u&&(u=o),a<d&&(d=a),a>m&&(m=a);else if(n!==7)throw new Error(`unknown command ${n}`)}return[c,d,u,m]}toGeoJSON(e,t,n){const r=this.extent*Math.pow(2,n),o=this.extent*e,a=this.extent*t,c=this.loadGeometry();function u(g){return[(g.x+o)*360/r-180,360/Math.PI*Math.atan(Math.exp((1-(g.y+a)*2/r)*Math.PI))-90]}function d(g){return g.map(u)}let m;if(this.type===1){const g=[];for(const w of c)g.push(w[0]);const _=d(g);m=g.length===1?{type:"Point",coordinates:_[0]}:{type:"MultiPoint",coordinates:_}}else if(this.type===2){const g=c.map(d);m=g.length===1?{type:"LineString",coordinates:g[0]}:{type:"MultiLineString",coordinates:g}}else if(this.type===3){const g=b_(c),_=[];for(const w of g)_.push(w.map(d));m=_.length===1?{type:"Polygon",coordinates:_[0]}:{type:"MultiPolygon",coordinates:_}}else throw new Error("unknown feature type");const f={type:"Feature",geometry:m,properties:this.properties};return this.id!=null&&(f.id=this.id),f}}yu.types=["Unknown","Point","LineString","Polygon"];function v_(i,e,t){i===1?e.id=t.readVarint():i===2?w_(t,e):i===3?e.type=t.readVarint():i===4&&(e._geometry=t.pos)}function w_(i,e){const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=e._keys[i.readVarint()],r=e._values[i.readVarint()];e.properties[n]=r}}function b_(i){const e=i.length;if(e<=1)return[i];const t=[];let n,r;for(let o=0;o<e;o++){const a=x_(i[o]);a!==0&&(r===void 0&&(r=a<0),r===a<0?(n&&t.push(n),n=[i[o]]):n&&n.push(i[o]))}return n&&t.push(n),t}function x_(i){let e=0;for(let t=0,n=i.length,r=n-1,o,a;t<n;r=t++)o=i[t],a=i[r],e+=(a.x-o.x)*(o.y+a.y);return e}let M_=class{constructor(e,t){this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=e,this._keys=[],this._values=[],this._features=[],e.readFields(S_,this,t),this.length=this._features.length}feature(e){if(e<0||e>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[e];const t=this._pbf.readVarint()+this._pbf.pos;return new yu(this._pbf,t,this.extent,this._keys,this._values)}};function S_(i,e,t){i===15?e.version=t.readVarint():i===1?e.name=t.readString():i===5?e.extent=t.readVarint():i===2?e._features.push(t.pos):i===3?e._keys.push(t.readString()):i===4&&e._values.push(L_(t))}function L_(i){let e=null;const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=i.readVarint()>>3;e=n===1?i.readString():n===2?i.readFloat():n===3?i.readDouble():n===4?i.readVarint64():n===5?i.readVarint():n===6?i.readSVarint():n===7?i.readBoolean():null}if(e==null)throw new Error("unknown feature value");return e}class P_{constructor(e,t){this.layers=e.readFields(C_,{},t)}}function C_(i,e,t){if(i===3){const n=new M_(t,t.readVarint()+t.pos);n.length&&(e[n.name]=n)}}const fa=65536*65536,_u=1/fa,T_=12,vu=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),pa=0,Ms=1,Gi=2,Ss=5;class G_{constructor(e=new Uint8Array(16)){this.buf=ArrayBuffer.isView(e)?e:new Uint8Array(e),this.dataView=new DataView(this.buf.buffer),this.pos=0,this.type=0,this.length=this.buf.length}readFields(e,t,n=this.length){for(;this.pos<n;){const r=this.readVarint(),o=r>>3,a=this.pos;this.type=r&7,e(o,t,this),this.pos===a&&this.skip(r)}return t}readMessage(e,t){return this.readFields(e,t,this.readVarint()+this.pos)}readFixed32(){const e=this.dataView.getUint32(this.pos,!0);return this.pos+=4,e}readSFixed32(){const e=this.dataView.getInt32(this.pos,!0);return this.pos+=4,e}readFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*fa;return this.pos+=8,e}readSFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*fa;return this.pos+=8,e}readFloat(){const e=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,e}readDouble(){const e=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,e}readVarint(e){const t=this.buf;let n,r;return r=t[this.pos++],n=r&127,r<128||(r=t[this.pos++],n|=(r&127)<<7,r<128)||(r=t[this.pos++],n|=(r&127)<<14,r<128)||(r=t[this.pos++],n|=(r&127)<<21,r<128)?n:(r=t[this.pos],n|=(r&15)<<28,Z_(n,e,this))}readVarint64(){return this.readVarint(!0)}readSVarint(){const e=this.readVarint();return e%2===1?(e+1)/-2:e/2}readBoolean(){return!!this.readVarint()}readString(){const e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=T_&&vu?vu.decode(this.buf.subarray(t,e)):N_(this.buf,t,e)}readBytes(){const e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t}readPackedVarint(e=[],t){const n=this.readPackedEnd();for(;this.pos<n;)e.push(this.readVarint(t));return e}readPackedSVarint(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSVarint());return e}readPackedBoolean(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readBoolean());return e}readPackedFloat(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFloat());return e}readPackedDouble(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readDouble());return e}readPackedFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed32());return e}readPackedSFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed32());return e}readPackedFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed64());return e}readPackedSFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed64());return e}readPackedEnd(){return this.type===Gi?this.readVarint()+this.pos:this.pos+1}skip(e){const t=e&7;if(t===pa)for(;this.buf[this.pos++]>127;);else if(t===Gi)this.pos=this.readVarint()+this.pos;else if(t===Ss)this.pos+=4;else if(t===Ms)this.pos+=8;else throw new Error(`Unimplemented type: ${t}`)}writeTag(e,t){this.writeVarint(e<<3|t)}realloc(e){let t=this.length||16;for(;t<this.pos+e;)t*=2;if(t!==this.length){const n=new Uint8Array(t);n.set(this.buf),this.buf=n,this.dataView=new DataView(n.buffer),this.length=t}}finish(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)}writeFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeSFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*_u),!0),this.pos+=8}writeSFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*_u),!0),this.pos+=8}writeVarint(e){if(e=+e||0,e>268435455||e<0){W_(e,this);return}this.realloc(4),this.buf[this.pos++]=e&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=e>>>7&127)))}writeSVarint(e){this.writeVarint(e<0?-e*2-1:e*2)}writeBoolean(e){this.writeVarint(+e)}writeString(e){e=String(e),this.realloc(e.length*4),this.pos++;const t=this.pos;this.pos=B_(this.buf,e,this.pos);const n=this.pos-t;n>=128&&wu(t,n,this),this.pos=t-1,this.writeVarint(n),this.pos+=n}writeFloat(e){this.realloc(4),this.dataView.setFloat32(this.pos,e,!0),this.pos+=4}writeDouble(e){this.realloc(8),this.dataView.setFloat64(this.pos,e,!0),this.pos+=8}writeBytes(e){const t=e.length;this.writeVarint(t),this.realloc(t);for(let n=0;n<t;n++)this.buf[this.pos++]=e[n]}writeRawMessage(e,t){this.pos++;const n=this.pos;e(t,this);const r=this.pos-n;r>=128&&wu(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r}writeMessage(e,t,n){this.writeTag(e,Gi),this.writeRawMessage(t,n)}writePackedVarint(e,t){t.length&&this.writeMessage(e,A_,t)}writePackedSVarint(e,t){t.length&&this.writeMessage(e,F_,t)}writePackedBoolean(e,t){t.length&&this.writeMessage(e,z_,t)}writePackedFloat(e,t){t.length&&this.writeMessage(e,O_,t)}writePackedDouble(e,t){t.length&&this.writeMessage(e,D_,t)}writePackedFixed32(e,t){t.length&&this.writeMessage(e,X_,t)}writePackedSFixed32(e,t){t.length&&this.writeMessage(e,U_,t)}writePackedFixed64(e,t){t.length&&this.writeMessage(e,k_,t)}writePackedSFixed64(e,t){t.length&&this.writeMessage(e,K_,t)}writeBytesField(e,t){this.writeTag(e,Gi),this.writeBytes(t)}writeFixed32Field(e,t){this.writeTag(e,Ss),this.writeFixed32(t)}writeSFixed32Field(e,t){this.writeTag(e,Ss),this.writeSFixed32(t)}writeFixed64Field(e,t){this.writeTag(e,Ms),this.writeFixed64(t)}writeSFixed64Field(e,t){this.writeTag(e,Ms),this.writeSFixed64(t)}writeVarintField(e,t){this.writeTag(e,pa),this.writeVarint(t)}writeSVarintField(e,t){this.writeTag(e,pa),this.writeSVarint(t)}writeStringField(e,t){this.writeTag(e,Gi),this.writeString(t)}writeFloatField(e,t){this.writeTag(e,Ss),this.writeFloat(t)}writeDoubleField(e,t){this.writeTag(e,Ms),this.writeDouble(t)}writeBooleanField(e,t){this.writeVarintField(e,+t)}}function Z_(i,e,t){const n=t.buf;let r,o;if(o=n[t.pos++],r=(o&112)>>4,o<128||(o=n[t.pos++],r|=(o&127)<<3,o<128)||(o=n[t.pos++],r|=(o&127)<<10,o<128)||(o=n[t.pos++],r|=(o&127)<<17,o<128)||(o=n[t.pos++],r|=(o&127)<<24,o<128)||(o=n[t.pos++],r|=(o&1)<<31,o<128))return kr(i,r,e);throw new Error("Expected varint not more than 10 bytes")}function kr(i,e,t){return t?e*4294967296+(i>>>0):(e>>>0)*4294967296+(i>>>0)}function W_(i,e){let t,n;if(i>=0?(t=i%4294967296|0,n=i/4294967296|0):(t=~(-i%4294967296),n=~(-i/4294967296),t^4294967295?t=t+1|0:(t=0,n=n+1|0)),i>=18446744073709552e3||i<-18446744073709552e3)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),V_(t,n,e),I_(n,e)}function V_(i,e,t){t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos]=i&127}function I_(i,e){const t=(i&7)<<4;e.buf[e.pos++]|=t|((i>>>=3)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127)))))}function wu(i,e,t){const n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(Math.LN2*7));t.realloc(n);for(let r=t.pos-1;r>=i;r--)t.buf[r+n]=t.buf[r]}function A_(i,e){for(let t=0;t<i.length;t++)e.writeVarint(i[t])}function F_(i,e){for(let t=0;t<i.length;t++)e.writeSVarint(i[t])}function O_(i,e){for(let t=0;t<i.length;t++)e.writeFloat(i[t])}function D_(i,e){for(let t=0;t<i.length;t++)e.writeDouble(i[t])}function z_(i,e){for(let t=0;t<i.length;t++)e.writeBoolean(i[t])}function X_(i,e){for(let t=0;t<i.length;t++)e.writeFixed32(i[t])}function U_(i,e){for(let t=0;t<i.length;t++)e.writeSFixed32(i[t])}function k_(i,e){for(let t=0;t<i.length;t++)e.writeFixed64(i[t])}function K_(i,e){for(let t=0;t<i.length;t++)e.writeSFixed64(i[t])}function N_(i,e,t){let n="",r=e;for(;r<t;){const o=i[r];let a=null,c=o>239?4:o>223?3:o>191?2:1;if(r+c>t)break;let u,d,m;c===1?o<128&&(a=o):c===2?(u=i[r+1],(u&192)===128&&(a=(o&31)<<6|u&63,a<=127&&(a=null))):c===3?(u=i[r+1],d=i[r+2],(u&192)===128&&(d&192)===128&&(a=(o&15)<<12|(u&63)<<6|d&63,(a<=2047||a>=55296&&a<=57343)&&(a=null))):c===4&&(u=i[r+1],d=i[r+2],m=i[r+3],(u&192)===128&&(d&192)===128&&(m&192)===128&&(a=(o&15)<<18|(u&63)<<12|(d&63)<<6|m&63,(a<=65535||a>=1114112)&&(a=null))),a===null?(a=65533,c=1):a>65535&&(a-=65536,n+=String.fromCharCode(a>>>10&1023|55296),a=56320|a&1023),n+=String.fromCharCode(a),r+=c}return n}function B_(i,e,t){for(let n=0,r,o;n<e.length;n++){if(r=e.charCodeAt(n),r>55295&&r<57344)if(o)if(r<56320){i[t++]=239,i[t++]=191,i[t++]=189,o=r;continue}else r=o-55296<<10|r-56320|65536,o=null;else{r>56319||n+1===e.length?(i[t++]=239,i[t++]=191,i[t++]=189):o=r;continue}else o&&(i[t++]=239,i[t++]=191,i[t++]=189,o=null);r<128?i[t++]=r:(r<2048?i[t++]=r>>6|192:(r<65536?i[t++]=r>>12|224:(i[t++]=r>>18|240,i[t++]=r>>12&63|128),i[t++]=r>>6&63|128),i[t++]=r&63|128)}return t}var Y_=Object.defineProperty,R_=(i,e,t)=>e in i?Y_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ma=(i,e,t)=>R_(i,typeof e!="symbol"?e+"":e,t);class j_ extends ca{constructor(){super(),ma(this,"dataType","mvt"),ma(this,"_loader",new p.FileLoader(Oe.manager)),ma(this,"_render",new cu),this._loader.setResponseType("arraybuffer")}async doLoad(e,t){const n=await this._loader.loadAsync(e),r=new P_(new G_(n)),o=this.drawTile(r,t.source.style,t.z);return new p.CanvasTexture(o)}drawTile(e,t,n){const c=new OffscreenCanvas(256,256).getContext("2d");if(c){if(t)for(const u in t.layer){const d=t.layer[u];if(t&&(n<(d.minLevel??1)||n>(d.maxLevel??20)))continue;const m=e.layers[u];if(m){const f=256/m.extent;this._renderLayer(c,m,d,f)}}else for(const u in e.layers){const d=e.layers[u],m=256/d.extent;this._renderLayer(c,d,void 0,m)}return c.canvas}else throw new Error("Canvas context is not available")}_renderLayer(e,t,n,r=1){e.save();for(let o=0;o<t.length;o++){const a=t.feature(o);this._renderFeature(e,a,n,r)}return e.restore(),this}_renderFeature(e,t,n={},r=1){const o=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][t.type],a={geometry:t.loadGeometry(),properties:t.properties};this._render.render(e,o,a,n,r)}_convertToGeoJSONFeature(e,t){const n=this._convertGeometryToGeoJSON(e.geometry,t);return n?{type:"Feature",geometry:n,properties:e.properties||{},id:e.id}:null}_convertGeometryToGeoJSON(e,t){switch(t){case tt.Point:return this._convertPointGeometry(e);case tt.Linestring:return this._convertLineGeometry(e);case tt.Polygon:return this._convertPolygonGeometry(e);default:return console.warn("未知的几何类型:",t),null}}_convertPointGeometry(e){const t=[];for(const n of e)for(const r of n)t.push([r.x,r.y]);return t.length===0?null:t.length===1?{type:"Point",coordinates:t[0]}:{type:"MultiPoint",coordinates:t}}_convertLineGeometry(e){const t=[];for(const n of e){const r=[];for(const o of n)r.push([o.x,o.y]);r.length>=2&&t.push(r)}return t.length===0?null:t.length===1?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}}_convertPolygonGeometry(e){const t=[];let n=[];for(const r of e){const o=[];for(const a of r)o.push([a.x,a.y]);o.length>=4&&(this._isRingClockwise(o)||n.length===0?(n.length>0&&t.push(n),n=[o]):n.push(o))}return n.length>0&&t.push(n),t.length===0?null:t.length===1?{type:"Polygon",coordinates:t[0]}:{type:"MultiPolygon",coordinates:t}}_isRingClockwise(e){let t=0;for(let n=0;n<e.length-1;n++){const[r,o]=e[n],[a,c]=e[n+1];t+=(a-r)*(c+o)}return t>0}convertVectorTileToGeoJSON(e){const t=[];for(const n in e.layers){const r=e.layers[n];for(let o=0;o<r.length;o++){const a=r.feature(o),c=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][a.type],u={geometry:a.loadGeometry(),properties:a.properties},d=this._convertToGeoJSONFeature(u,c);d&&(d.properties._layer=n,t.push(d))}}return{type:"FeatureCollection",features:t}}}ha(new j_);const bu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IF89MjMyODMwNjQzNjUzODY5NjNlLTI2LG09MTIsUD10eXBlb2YgVGV4dERlY29kZXI+InUiP251bGw6bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLGc9MCx5PTEsRj0yLHA9NTtjbGFzcyBNe2NvbnN0cnVjdG9yKHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0KSx0aGlzLmRhdGFWaWV3PW5ldyBEYXRhVmlldyh0aGlzLmJ1Zi5idWZmZXIpLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofXJlYWRGaWVsZHModCxlLHI9dGhpcy5sZW5ndGgpe2Zvcig7dGhpcy5wb3M8cjspe2NvbnN0IHM9dGhpcy5yZWFkVmFyaW50KCksbj1zPj4zLG89dGhpcy5wb3M7dGhpcy50eXBlPXMmNyx0KG4sZSx0aGlzKSx0aGlzLnBvcz09PW8mJnRoaXMuc2tpcChzKX1yZXR1cm4gZX1yZWFkTWVzc2FnZSh0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX1yZWFkRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApO3JldHVybiB0aGlzLnBvcys9NCx0fXJlYWRTRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRJbnQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZEZpeGVkNjQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMucG9zLCEwKSt0aGlzLmRhdGFWaWV3LmdldFVpbnQzMih0aGlzLnBvcys0LCEwKSo0Mjk0OTY3Mjk2O3JldHVybiB0aGlzLnBvcys9OCx0fXJlYWRTRml4ZWQ2NCgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApK3RoaXMuZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5wb3MrNCwhMCkqNDI5NDk2NzI5NjtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkRmxvYXQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZERvdWJsZSgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRGbG9hdDY0KHRoaXMucG9zLCEwKTtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkVmFyaW50KHQpe2NvbnN0IGU9dGhpcy5idWY7bGV0IHIscztyZXR1cm4gcz1lW3RoaXMucG9zKytdLHI9cyYxMjcsczwxMjh8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8NyxzPDEyOCl8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8MTQsczwxMjgpfHwocz1lW3RoaXMucG9zKytdLHJ8PShzJjEyNyk8PDIxLHM8MTI4KT9yOihzPWVbdGhpcy5wb3NdLHJ8PShzJjE1KTw8MjgsRShyLHQsdGhpcykpfXJlYWRWYXJpbnQ2NCgpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfXJlYWRTVmFyaW50KCl7Y29uc3QgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT09MT8odCsxKS8tMjp0LzJ9cmVhZEJvb2xlYW4oKXtyZXR1cm4hIXRoaXMucmVhZFZhcmludCgpfXJlYWRTdHJpbmcoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj1tJiZQP1AuZGVjb2RlKHRoaXMuYnVmLnN1YmFycmF5KGUsdCkpOlIodGhpcy5idWYsZSx0KX1yZWFkQnl0ZXMoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX1yZWFkUGFja2VkVmFyaW50KHQ9W10sZSl7Y29uc3Qgcj10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fXJlYWRQYWNrZWRTVmFyaW50KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH1yZWFkUGFja2VkQm9vbGVhbih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZsb2F0KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZERvdWJsZSh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH1yZWFkUGFja2VkRml4ZWQzMih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZFNGaXhlZDMyKHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZpeGVkNjQodD1bXSl7Y29uc3QgZT10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRTRml4ZWQ2NCh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRFbmQoKXtyZXR1cm4gdGhpcy50eXBlPT09Rj90aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvczp0aGlzLnBvcysxfXNraXAodCl7Y29uc3QgZT10Jjc7aWYoZT09PWcpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1GKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PXApdGhpcy5wb3MrPTQ7ZWxzZSBpZihlPT09eSl0aGlzLnBvcys9ODtlbHNlIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlOiAke2V9YCl9d3JpdGVUYWcodCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9cmVhbGxvYyh0KXtsZXQgZT10aGlzLmxlbmd0aHx8MTY7Zm9yKDtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMuZGF0YVZpZXc9bmV3IERhdGFWaWV3KHIuYnVmZmVyKSx0aGlzLmxlbmd0aD1lfX1maW5pc2goKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX13cml0ZUZpeGVkMzIodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCwhMCksdGhpcy5wb3MrPTR9d3JpdGVTRml4ZWQzMih0KXt0aGlzLnJlYWxsb2MoNCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZUZpeGVkNjQodCl7dGhpcy5yZWFsbG9jKDgpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCYtMSwhMCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcys0LE1hdGguZmxvb3IodCpfKSwhMCksdGhpcy5wb3MrPTh9d3JpdGVTRml4ZWQ2NCh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0Ji0xLCEwKSx0aGlzLmRhdGFWaWV3LnNldEludDMyKHRoaXMucG9zKzQsTWF0aC5mbG9vcih0Kl8pLCEwKSx0aGlzLnBvcys9OH13cml0ZVZhcmludCh0KXtpZih0PSt0fHwwLHQ+MjY4NDM1NDU1fHx0PDApe0IodCx0aGlzKTtyZXR1cm59dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPXQmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpfXdyaXRlU1ZhcmludCh0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8tdCoyLTE6dCoyKX13cml0ZUJvb2xlYW4odCl7dGhpcy53cml0ZVZhcmludCgrdCl9d3JpdGVTdHJpbmcodCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKHQubGVuZ3RoKjQpLHRoaXMucG9zKys7Y29uc3QgZT10aGlzLnBvczt0aGlzLnBvcz1xKHRoaXMuYnVmLHQsdGhpcy5wb3MpO2NvbnN0IHI9dGhpcy5wb3MtZTtyPj0xMjgmJlMoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfXdyaXRlRmxvYXQodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZURvdWJsZSh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0KHRoaXMucG9zLHQsITApLHRoaXMucG9zKz04fXdyaXRlQnl0ZXModCl7Y29uc3QgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IobGV0IHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19d3JpdGVSYXdNZXNzYWdlKHQsZSl7dGhpcy5wb3MrKztjb25zdCByPXRoaXMucG9zO3QoZSx0aGlzKTtjb25zdCBzPXRoaXMucG9zLXI7cz49MTI4JiZTKHIscyx0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChzKSx0aGlzLnBvcys9c313cml0ZU1lc3NhZ2UodCxlLHIpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfXdyaXRlUGFja2VkVmFyaW50KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSSxlKX13cml0ZVBhY2tlZFNWYXJpbnQodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxDLGUpfXdyaXRlUGFja2VkQm9vbGVhbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LFUsZSl9d3JpdGVQYWNrZWRGbG9hdCh0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LEwsZSl9d3JpdGVQYWNrZWREb3VibGUodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxBLGUpfXdyaXRlUGFja2VkRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHYsZSl9d3JpdGVQYWNrZWRTRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LE4sZSl9d3JpdGVQYWNrZWRGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsRyxlKX13cml0ZVBhY2tlZFNGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSCxlKX13cml0ZUJ5dGVzRmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsRiksdGhpcy53cml0ZUJ5dGVzKGUpfXdyaXRlRml4ZWQzMkZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHApLHRoaXMud3JpdGVGaXhlZDMyKGUpfXdyaXRlU0ZpeGVkMzJGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9d3JpdGVGaXhlZDY0RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQseSksdGhpcy53cml0ZUZpeGVkNjQoZSl9d3JpdGVTRml4ZWQ2NEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHkpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX13cml0ZVZhcmludEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LGcpLHRoaXMud3JpdGVWYXJpbnQoZSl9d3JpdGVTVmFyaW50RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsZyksdGhpcy53cml0ZVNWYXJpbnQoZSl9d3JpdGVTdHJpbmdGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlU3RyaW5nKGUpfXdyaXRlRmxvYXRGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlRmxvYXQoZSl9d3JpdGVEb3VibGVGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCx5KSx0aGlzLndyaXRlRG91YmxlKGUpfXdyaXRlQm9vbGVhbkZpZWxkKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsK2UpfX1mdW5jdGlvbiBFKGksdCxlKXtjb25zdCByPWUuYnVmO2xldCBzLG47aWYobj1yW2UucG9zKytdLHM9KG4mMTEyKT4+NCxuPDEyOHx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwzLG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwxMCxuPDEyOCl8fChuPXJbZS5wb3MrK10sc3w9KG4mMTI3KTw8MTcsbjwxMjgpfHwobj1yW2UucG9zKytdLHN8PShuJjEyNyk8PDI0LG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxKTw8MzEsbjwxMjgpKXJldHVybiBmKGkscyx0KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9ZnVuY3Rpb24gZihpLHQsZSl7cmV0dXJuIGU/dCo0Mjk0OTY3Mjk2KyhpPj4+MCk6KHQ+Pj4wKSo0Mjk0OTY3Mjk2KyhpPj4+MCl9ZnVuY3Rpb24gQihpLHQpe2xldCBlLHI7aWYoaT49MD8oZT1pJTQyOTQ5NjcyOTZ8MCxyPWkvNDI5NDk2NzI5NnwwKTooZT1+KC1pJTQyOTQ5NjcyOTYpLHI9figtaS80Mjk0OTY3Mjk2KSxlXjQyOTQ5NjcyOTU/ZT1lKzF8MDooZT0wLHI9cisxfDApKSxpPj0xODQ0Njc0NDA3MzcwOTU1MmUzfHxpPC0xODQ0Njc0NDA3MzcwOTU1MmUzKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTt0LnJlYWxsb2MoMTApLFQoZSxyLHQpLEQocix0KX1mdW5jdGlvbiBUKGksdCxlKXtlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zKytdPWkmMTI3fDEyOCxpPj4+PTcsZS5idWZbZS5wb3MrK109aSYxMjd8MTI4LGk+Pj49NyxlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zXT1pJjEyN31mdW5jdGlvbiBEKGksdCl7Y29uc3QgZT0oaSY3KTw8NDt0LmJ1Zlt0LnBvcysrXXw9ZXwoKGk+Pj49Myk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyNykpKSkpfWZ1bmN0aW9uIFMoaSx0LGUpe2NvbnN0IHI9dDw9MTYzODM/MTp0PD0yMDk3MTUxPzI6dDw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyh0KS8oTWF0aC5MTjIqNykpO2UucmVhbGxvYyhyKTtmb3IobGV0IHM9ZS5wb3MtMTtzPj1pO3MtLSllLmJ1ZltzK3JdPWUuYnVmW3NdfWZ1bmN0aW9uIEkoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlVmFyaW50KGlbZV0pfWZ1bmN0aW9uIEMoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlU1ZhcmludChpW2VdKX1mdW5jdGlvbiBMKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZsb2F0KGlbZV0pfWZ1bmN0aW9uIEEoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlRG91YmxlKGlbZV0pfWZ1bmN0aW9uIFUoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlQm9vbGVhbihpW2VdKX1mdW5jdGlvbiB2KGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkMzIoaVtlXSl9ZnVuY3Rpb24gTihpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQzMihpW2VdKX1mdW5jdGlvbiBHKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkNjQoaVtlXSl9ZnVuY3Rpb24gSChpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQ2NChpW2VdKX1mdW5jdGlvbiBSKGksdCxlKXtsZXQgcj0iIixzPXQ7Zm9yKDtzPGU7KXtjb25zdCBuPWlbc107bGV0IG89bnVsbCxoPW4+MjM5PzQ6bj4yMjM/MzpuPjE5MT8yOjE7aWYocytoPmUpYnJlYWs7bGV0IGEsZCx1O2g9PT0xP248MTI4JiYobz1uKTpoPT09Mj8oYT1pW3MrMV0sKGEmMTkyKT09PTEyOCYmKG89KG4mMzEpPDw2fGEmNjMsbzw9MTI3JiYobz1udWxsKSkpOmg9PT0zPyhhPWlbcysxXSxkPWlbcysyXSwoYSYxOTIpPT09MTI4JiYoZCYxOTIpPT09MTI4JiYobz0obiYxNSk8PDEyfChhJjYzKTw8NnxkJjYzLChvPD0yMDQ3fHxvPj01NTI5NiYmbzw9NTczNDMpJiYobz1udWxsKSkpOmg9PT00JiYoYT1pW3MrMV0sZD1pW3MrMl0sdT1pW3MrM10sKGEmMTkyKT09PTEyOCYmKGQmMTkyKT09PTEyOCYmKHUmMTkyKT09PTEyOCYmKG89KG4mMTUpPDwxOHwoYSY2Myk8PDEyfChkJjYzKTw8Nnx1JjYzLChvPD02NTUzNXx8bz49MTExNDExMikmJihvPW51bGwpKSksbz09PW51bGw/KG89NjU1MzMsaD0xKTpvPjY1NTM1JiYoby09NjU1MzYscis9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4+MTAmMTAyM3w1NTI5Niksbz01NjMyMHxvJjEwMjMpLHIrPVN0cmluZy5mcm9tQ2hhckNvZGUobykscys9aH1yZXR1cm4gcn1mdW5jdGlvbiBxKGksdCxlKXtmb3IobGV0IHI9MCxzLG47cjx0Lmxlbmd0aDtyKyspe2lmKHM9dC5jaGFyQ29kZUF0KHIpLHM+NTUyOTUmJnM8NTczNDQpaWYobilpZihzPDU2MzIwKXtpW2UrK109MjM5LGlbZSsrXT0xOTEsaVtlKytdPTE4OSxuPXM7Y29udGludWV9ZWxzZSBzPW4tNTUyOTY8PDEwfHMtNTYzMjB8NjU1MzYsbj1udWxsO2Vsc2V7cz41NjMxOXx8cisxPT09dC5sZW5ndGg/KGlbZSsrXT0yMzksaVtlKytdPTE5MSxpW2UrK109MTg5KTpuPXM7Y29udGludWV9ZWxzZSBuJiYoaVtlKytdPTIzOSxpW2UrK109MTkxLGlbZSsrXT0xODksbj1udWxsKTtzPDEyOD9pW2UrK109czooczwyMDQ4P2lbZSsrXT1zPj42fDE5Mjooczw2NTUzNj9pW2UrK109cz4+MTJ8MjI0OihpW2UrK109cz4+MTh8MjQwLGlbZSsrXT1zPj4xMiY2M3wxMjgpLGlbZSsrXT1zPj42JjYzfDEyOCksaVtlKytdPXMmNjN8MTI4KX1yZXR1cm4gZX1mdW5jdGlvbiB4KGksdCl7dGhpcy54PWksdGhpcy55PXR9eC5wcm90b3R5cGU9e2Nsb25lKCl7cmV0dXJuIG5ldyB4KHRoaXMueCx0aGlzLnkpfSxhZGQoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKGkpfSxzdWIoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKGkpfSxtdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludChpKX0sZGl2QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KGkpfSxtdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQoaSl9LGRpdihpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYoaSl9LHJvdGF0ZShpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUoaSl9LHJvdGF0ZUFyb3VuZChpLHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChpLHQpfSxtYXRNdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQoaSl9LHVuaXQoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnAoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHMoaSl7cmV0dXJuIHRoaXMueD09PWkueCYmdGhpcy55PT09aS55fSxkaXN0KGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKGkpKX0sZGlzdFNxcihpKXtjb25zdCB0PWkueC10aGlzLngsZT1pLnktdGhpcy55O3JldHVybiB0KnQrZSplfSxhbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvKGkpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS1pLnksdGhpcy54LWkueCl9LGFuZ2xlV2l0aChpKXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoaS54LGkueSl9LGFuZ2xlV2l0aFNlcChpLHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCp0LXRoaXMueSppLHRoaXMueCppK3RoaXMueSp0KX0sX21hdE11bHQoaSl7Y29uc3QgdD1pWzBdKnRoaXMueCtpWzFdKnRoaXMueSxlPWlbMl0qdGhpcy54K2lbM10qdGhpcy55O3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfSxfYWRkKGkpe3JldHVybiB0aGlzLngrPWkueCx0aGlzLnkrPWkueSx0aGlzfSxfc3ViKGkpe3JldHVybiB0aGlzLngtPWkueCx0aGlzLnktPWkueSx0aGlzfSxfbXVsdChpKXtyZXR1cm4gdGhpcy54Kj1pLHRoaXMueSo9aSx0aGlzfSxfZGl2KGkpe3JldHVybiB0aGlzLngvPWksdGhpcy55Lz1pLHRoaXN9LF9tdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy54Kj1pLngsdGhpcy55Kj1pLnksdGhpc30sX2RpdkJ5UG9pbnQoaSl7cmV0dXJuIHRoaXMueC89aS54LHRoaXMueS89aS55LHRoaXN9LF91bml0KCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycCgpe2NvbnN0IGk9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0taSx0aGlzfSxfcm90YXRlKGkpe2NvbnN0IHQ9TWF0aC5jb3MoaSksZT1NYXRoLnNpbihpKSxyPXQqdGhpcy54LWUqdGhpcy55LHM9ZSp0aGlzLngrdCp0aGlzLnk7cmV0dXJuIHRoaXMueD1yLHRoaXMueT1zLHRoaXN9LF9yb3RhdGVBcm91bmQoaSx0KXtjb25zdCBlPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkscz10LngrZSoodGhpcy54LXQueCktcioodGhpcy55LXQueSksbj10LnkrcioodGhpcy54LXQueCkrZSoodGhpcy55LXQueSk7cmV0dXJuIHRoaXMueD1zLHRoaXMueT1uLHRoaXN9LF9yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sY29uc3RydWN0b3I6eH0seC5jb252ZXJ0PWZ1bmN0aW9uKGkpe2lmKGkgaW5zdGFuY2VvZiB4KXJldHVybiBpO2lmKEFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIG5ldyB4KCtpWzBdLCtpWzFdKTtpZihpLnghPT12b2lkIDAmJmkueSE9PXZvaWQgMClyZXR1cm4gbmV3IHgoK2kueCwraS55KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIFt4LCB5XSBvciB7eCwgeX0gcG9pbnQgZm9ybWF0Iil9O2NsYXNzIGt7Y29uc3RydWN0b3IodCxlLHIscyxuKXt0aGlzLnByb3BlcnRpZXM9e30sdGhpcy5leHRlbnQ9cix0aGlzLnR5cGU9MCx0aGlzLmlkPXZvaWQgMCx0aGlzLl9wYmY9dCx0aGlzLl9nZW9tZXRyeT0tMSx0aGlzLl9rZXlzPXMsdGhpcy5fdmFsdWVzPW4sdC5yZWFkRmllbGRzKGosdGhpcyxlKX1sb2FkR2VvbWV0cnkoKXtjb25zdCB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtjb25zdCBlPXQucmVhZFZhcmludCgpK3QucG9zLHI9W107bGV0IHMsbj0xLG89MCxoPTAsYT0wO2Zvcig7dC5wb3M8ZTspe2lmKG88PTApe2NvbnN0IGQ9dC5yZWFkVmFyaW50KCk7bj1kJjcsbz1kPj4zfWlmKG8tLSxuPT09MXx8bj09PTIpaCs9dC5yZWFkU1ZhcmludCgpLGErPXQucmVhZFNWYXJpbnQoKSxuPT09MSYmKHMmJnIucHVzaChzKSxzPVtdKSxzJiZzLnB1c2gobmV3IHgoaCxhKSk7ZWxzZSBpZihuPT09NylzJiZzLnB1c2goc1swXS5jbG9uZSgpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7bn1gKX1yZXR1cm4gcyYmci5wdXNoKHMpLHJ9YmJveCgpe2NvbnN0IHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2NvbnN0IGU9dC5yZWFkVmFyaW50KCkrdC5wb3M7bGV0IHI9MSxzPTAsbj0wLG89MCxoPTEvMCxhPS0xLzAsZD0xLzAsdT0tMS8wO2Zvcig7dC5wb3M8ZTspe2lmKHM8PTApe2NvbnN0IHc9dC5yZWFkVmFyaW50KCk7cj13Jjcscz13Pj4zfWlmKHMtLSxyPT09MXx8cj09PTIpbis9dC5yZWFkU1ZhcmludCgpLG8rPXQucmVhZFNWYXJpbnQoKSxuPGgmJihoPW4pLG4+YSYmKGE9biksbzxkJiYoZD1vKSxvPnUmJih1PW8pO2Vsc2UgaWYociE9PTcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGNvbW1hbmQgJHtyfWApfXJldHVybltoLGQsYSx1XX10b0dlb0pTT04odCxlLHIpe2NvbnN0IHM9dGhpcy5leHRlbnQqTWF0aC5wb3coMixyKSxuPXRoaXMuZXh0ZW50KnQsbz10aGlzLmV4dGVudCplLGg9dGhpcy5sb2FkR2VvbWV0cnkoKTtmdW5jdGlvbiBhKGwpe3JldHVyblsobC54K24pKjM2MC9zLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoKDEtKGwueStvKSoyL3MpKk1hdGguUEkpKS05MF19ZnVuY3Rpb24gZChsKXtyZXR1cm4gbC5tYXAoYSl9bGV0IHU7aWYodGhpcy50eXBlPT09MSl7Y29uc3QgbD1bXTtmb3IoY29uc3QgViBvZiBoKWwucHVzaChWWzBdKTtjb25zdCBjPWQobCk7dT1sLmxlbmd0aD09PTE/e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpjWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6Y319ZWxzZSBpZih0aGlzLnR5cGU9PT0yKXtjb25zdCBsPWgubWFwKGQpO3U9bC5sZW5ndGg9PT0xP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpsWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpsfX1lbHNlIGlmKHRoaXMudHlwZT09PTMpe2NvbnN0IGw9VyhoKSxjPVtdO2Zvcihjb25zdCBWIG9mIGwpYy5wdXNoKFYubWFwKGQpKTt1PWMubGVuZ3RoPT09MT97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6Y1swXX06e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6Y319ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB0eXBlIik7Y29uc3Qgdz17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6dSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuIHRoaXMuaWQhPW51bGwmJih3LmlkPXRoaXMuaWQpLHd9fWsudHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdO2Z1bmN0aW9uIGooaSx0LGUpe2k9PT0xP3QuaWQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/TyhlLHQpOmk9PT0zP3QudHlwZT1lLnJlYWRWYXJpbnQoKTppPT09NCYmKHQuX2dlb21ldHJ5PWUucG9zKX1mdW5jdGlvbiBPKGksdCl7Y29uc3QgZT1pLnJlYWRWYXJpbnQoKStpLnBvcztmb3IoO2kucG9zPGU7KXtjb25zdCByPXQuX2tleXNbaS5yZWFkVmFyaW50KCldLHM9dC5fdmFsdWVzW2kucmVhZFZhcmludCgpXTt0LnByb3BlcnRpZXNbcl09c319ZnVuY3Rpb24gVyhpKXtjb25zdCB0PWkubGVuZ3RoO2lmKHQ8PTEpcmV0dXJuW2ldO2NvbnN0IGU9W107bGV0IHIscztmb3IobGV0IG49MDtuPHQ7bisrKXtjb25zdCBvPUooaVtuXSk7byE9PTAmJihzPT09dm9pZCAwJiYocz1vPDApLHM9PT1vPDA/KHImJmUucHVzaChyKSxyPVtpW25dXSk6ciYmci5wdXNoKGlbbl0pKX1yZXR1cm4gciYmZS5wdXNoKHIpLGV9ZnVuY3Rpb24gSihpKXtsZXQgdD0wO2ZvcihsZXQgZT0wLHI9aS5sZW5ndGgscz1yLTEsbixvO2U8cjtzPWUrKyluPWlbZV0sbz1pW3NdLHQrPShvLngtbi54KSoobi55K28ueSk7cmV0dXJuIHR9Y2xhc3MgWHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT0iIix0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKCQsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZmVhdHVyZSh0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07Y29uc3QgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBrKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX19ZnVuY3Rpb24gJChpLHQsZSl7aT09PTE1P3QudmVyc2lvbj1lLnJlYWRWYXJpbnQoKTppPT09MT90Lm5hbWU9ZS5yZWFkU3RyaW5nKCk6aT09PTU/dC5leHRlbnQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/dC5fZmVhdHVyZXMucHVzaChlLnBvcyk6aT09PTM/dC5fa2V5cy5wdXNoKGUucmVhZFN0cmluZygpKTppPT09NCYmdC5fdmFsdWVzLnB1c2goYihlKSl9ZnVuY3Rpb24gYihpKXtsZXQgdD1udWxsO2NvbnN0IGU9aS5yZWFkVmFyaW50KCkraS5wb3M7Zm9yKDtpLnBvczxlOyl7Y29uc3Qgcj1pLnJlYWRWYXJpbnQoKT4+Mzt0PXI9PT0xP2kucmVhZFN0cmluZygpOnI9PT0yP2kucmVhZEZsb2F0KCk6cj09PTM/aS5yZWFkRG91YmxlKCk6cj09PTQ/aS5yZWFkVmFyaW50NjQoKTpyPT09NT9pLnJlYWRWYXJpbnQoKTpyPT09Nj9pLnJlYWRTVmFyaW50KCk6cj09PTc/aS5yZWFkQm9vbGVhbigpOm51bGx9aWYodD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB2YWx1ZSIpO3JldHVybiB0fWNsYXNzIHp7Y29uc3RydWN0b3IodCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoWSx7fSxlKX19ZnVuY3Rpb24gWShpLHQsZSl7aWYoaT09PTMpe2NvbnN0IHI9bmV3IFgoZSxlLnJlYWRWYXJpbnQoKStlLnBvcyk7ci5sZW5ndGgmJih0W3IubmFtZV09cil9fWFzeW5jIGZ1bmN0aW9uIEsoaSx0LGUscil7dHJ5e2NvbnN0IHM9UShpLHQsZSxyKTtyZXR1cm57eDp0LHk6ZSx6OnIsbGF5ZXJzOnMsdGltZXN0YW1wOkRhdGUubm93KCksZGF0YUZvcm1hdDoibXZ0In19Y2F0Y2gocyl7dGhyb3cgY29uc29sZS5lcnJvcigi6Kej5p6Q55+i6YeP55Om54mH5pWw5o2u5pe25Ye66ZSZOiIscyksc319ZnVuY3Rpb24gUShpLHQsZSxyKXtjb25zdCBzPW5ldyBNKGkpLG49bmV3IHoocyksbz17fTtmb3IoY29uc3QgaCBpbiBuLmxheWVycyl7Y29uc3QgYT1uLmxheWVyc1toXSxkPVtdO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7dSsrKXtjb25zdCBsPWEuZmVhdHVyZSh1KS50b0dlb0pTT04odCxlLHIpO2QucHVzaChsKX1vW2hdPWR9cmV0dXJuIG99c2VsZi5vbm1lc3NhZ2U9YXN5bmMgaT0+e2NvbnN0IHQ9aS5kYXRhO3RyeXtjb25zdCBlPWF3YWl0IEsodC5hcnJheUJ1ZmZlcix0LngsdC55LHQueik7c2VsZi5wb3N0TWVzc2FnZShlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKCJXb3JrZXIgTVZUIOino+aekOWksei0pToiLGUpLHNlbGYucG9zdE1lc3NhZ2Uoe2Vycm9yOmUubWVzc2FnZX0pfX19KSgpOwo=",J_=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),xu=typeof self<"u"&&self.Blob&&new Blob([J_(bu)],{type:"text/javascript;charset=utf-8"});function Q_(i){let e;try{if(e=xu&&(self.URL||self.webkitURL).createObjectURL(xu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+bu,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var H_=Object.defineProperty,E_=(i,e,t)=>e in i?H_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ls=(i,e,t)=>E_(i,typeof e!="symbol"?e+"":e,t);const $_=10;class q_{constructor(){Ls(this,"info",{version:"1.0.0",description:"Vector Tile loader for Mapbox Vector Tile format. It can load and parse MVT data."}),Ls(this,"dataType","VectorTile"),Ls(this,"fileLoader",new p.FileLoader(Oe.manager)),Ls(this,"_workerPool",new Ro(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new Q_)}async load(e){const{source:t,x:n,y:r,z:o}=e,a=typeof t._getUrl=="function"?t._getUrl(n,r,o):this.buildTileUrl(t.url,n,r,o);if(!a)return this.createErrorGeometry(n,r,o,new Error("VectorTileLoader: source._getUrl 返回空 URL"));this._workerPool.pool===0&&this._workerPool.setWorkerLimit($_);try{const c=await this.fetchVectorData(a),u={arrayBuffer:c,x:n,y:r,z:o},m=(await this._workerPool.postMessage(u,[c])).data;if(m.error)throw new Error(m.error);const f=this.createGeometryWithVectorData(m,e);return Oe.manager.parseEnd(a),f}catch(c){return this.createErrorGeometry(n,r,o,c)}}async fetchVectorData(e){try{const t=await this.fileLoader.loadAsync(e);if(!t||t.byteLength===0)throw new Error("Empty response");return t}catch(t){throw new Error(`Failed to fetch vector tile: ${t.message}`)}}calculateTileBounds(e,t,n){const r=4007501668557849e-8/Math.pow(2,n),o=-20037508342789244e-9+e*r,a=o+r,c=20037508342789244e-9-(t+1)*r,u=c+r;return{min:new p.Vector2(o,c),max:new p.Vector2(a,u),world:new p.Vector2(r,r)}}buildTileUrl(e,t,n,r){return e.replace("{x}",t.toString()).replace("{y}",n.toString()).replace("{z}",r.toString()).replace("{-y}",(Math.pow(2,r)-1-n).toString())}createGeometryWithVectorData(e,t){const n=new Ur;return n.userData={vectorData:e,tileInfo:{x:t.x,y:t.y,z:t.z,bounds:t.bounds},metadata:{dataType:"vector-tile",version:"1.0.0",loadedAt:Date.now()}},n}createErrorGeometry(e,t,n,r){const o=new Ur;return o.userData={vectorData:{x:e,y:t,z:n,layers:{},totalFeatures:0,bounds:this.calculateTileBounds(e,t,n),error:r.message,timestamp:Date.now(),dataFormat:"error"},tileInfo:{x:e,y:t,z:n,bounds:[0,0,0,0]},metadata:{dataType:"vector-tile-error",error:!0,errorMessage:r.message}},o}unload(e){e.userData?.vectorData&&(e.userData.vectorData=null),e.dispose&&e.dispose()}static getVectorData(e){return e.userData?.vectorData||null}static hasValidVectorData(e){const t=this.getVectorData(e);return t&&!t.error&&t.totalFeatures>0}static getLayerNames(e){const t=this.getVectorData(e);return t?Object.keys(t.layers||{}):[]}static getFeaturesByLayer(e,t){return this.getVectorData(e)?.layers?.[t]?.convertedFeatures||[]}}du(new q_);var ev=Object.defineProperty,tv=(i,e,t)=>e in i?ev(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_r=(i,e,t)=>tv(i,typeof e!="symbol"?e+"":e,t);class ga extends nu{constructor(e,t){if(super(e,t),_r(this,"layerType","vector"),_r(this,"_tileDataMap",new Map),_r(this,"_renderer"),_r(this,"_style"),_r(this,"_feaList",[]),_r(this,"_collision",!1),_r(this,"_renderAltitude",0),!t.style)throw new Error("VectorTileLayer must provide style configuration! VectorTileLayer 必须提供样式配置");this._style=t.style,this._collision=t.collision||!1,this._featureFilter=t.featureFilter,this._renderAltitude=t.altitude||0,this._rootTile.setDataOnlyMode(!0),this._setupDataModeAndListenersForChildren(),this._setupLifeCycleListeners()}_setupDataModeAndListenersForChildren(){const e=t=>{t!==this._rootTile&&t.setDataOnlyMode(!0),this._addShownListenerToTile(t),this._addUnloadListenerToTile(t)};this._rootTile.addEventListener("tile-created",t=>{const n=t.tile;e(n)}),this._rootTile.traverse(t=>{t.isTile&&e(t)})}_addShownListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`,a=!!this._renderer,c=this._tileDataMap.get(o);a&&c&&this._renderer.processTileData(r,c.data)};e.addEventListener("tile-shown",t)}_addUnloadListenerToTile(e){const t=n=>{const r=n.tile||n.target,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.removeFeaturesByTileKey(o)}catch{}this._tileDataMap.delete(o)};e.addEventListener("unload",t)}setAltitude(e){return super.setAltitude(0),this._renderAltitude=e,this._renderer&&this._renderer.setAltitude(e),this}getAltitude(){return this._renderAltitude}_addHiddenListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.hideFeaturesByTileKey(o)}catch{}};e.addEventListener("tile-hidden",t)}_setupLifeCycleListeners(){this._rootTile.addEventListener("tile-loaded",e=>{const t=e.tile,n=`${t.z}-${t.x}-${t.y}`,r=this.getVectorDataFromTile(t);if(!r){console.warn(`[VectorTileLayer] Tile ${n} loaded but has no vector data.`);return}if(r.vectorData?.dataFormat==="mvt"&&this._tileDataMap.set(n,{data:r,tile:t,timestamp:Date.now(),pending:!1}),t.showing&&this._renderer&&r.vectorData?.dataFormat==="mvt")try{this._renderer.processTileData(t,r)}catch{}})}getVectorDataFromTile(e){return!e.geometry||!e.getVectorData()?null:e.getVectorData()}createLoader(){const e=new ws;return e.vtSource=this.source,e}getVisibleVectorTiles(){const e=[];return this._rootTile.traverse(t=>{if(t.isTile&&t.loaded&&t.inFrustum){const n=`${t.z}-${t.x}-${t.y}`,r=this._tileDataMap.get(n);r&&e.push({tileKey:n,data:r.data,tile:r.tile})}}),e}getAllVectorData(){return new Map(this._tileDataMap)}getVectorData(e,t,n){const r=`${n}-${e}-${t}`,o=this._tileDataMap.get(r);return o?o.data:null}setFeatureFilter(e){this._featureFilter=e,this._renderer&&this._renderer.setFeatureFilter(e)}clearFeatureFilter(){this._featureFilter=void 0,this._renderer&&this._renderer.clearFeatureFilter()}setOpacity(e){this.opacity=e,this._renderer&&this._renderer.setOpacity(e)}update(e){!this.enabled||!this.visible||super.update(e)}dispose(){this._renderer&&this._renderer.dispose(),super.dispose()}_setRenderer(e){this._renderer=e}_getRenderer(){return this._renderer||null}getStyle(){return this._style}}var nv=Object.defineProperty,rv=(i,e,t)=>e in i?nv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ke=(i,e,t)=>rv(i,typeof e!="symbol"?e+"":e,t);class iv{constructor(...e){}}const sv={};let vr=class sf extends Bo(Kn(mr(iv))){constructor(e,t){zo(e,"container","Map container element must be specified");const n=["center","basemap"];for(const Z of n)mc(t,Z);const o={...t,viewer:{...{viewer:{antialias:!0,stencil:!0,logarithmicDepthBuffer:!0}}.viewer,...t.viewer}};super(o),Ke(this,"viewer"),Ke(this,"tilemap"),Ke(this,"center"),Ke(this,"prjcenter"),Ke(this,"_layerContainer"),Ke(this,"_EventMap",{loaded:{listened:!1}}),Ke(this,"_canvasManager",new zg),Ke(this,"collisionEngine"),Ke(this,"_onLoadHooks"),Ke(this,"_minZoom",0),Ke(this,"_maxZoom",22),Ke(this,"_ZOOM_MIN_CONST",0),Ke(this,"_ZOOM_MAX_CONST",22),Ke(this,"_minZoomDistance",500),Ke(this,"_maxZoomDistance",8e4),Ke(this,"_isZooming",!1),Ke(this,"_zoomStartValue",0),Ke(this,"_lastZoomForControls",0),Ke(this,"_overZoom",0),Ke(this,"_lastCameraDistance",0),this.tilemap=this.initTileMap(o.basemap),this.center=this.options.center,this.viewer=new vc(e,{...o.viewer,map:this}),this.tilemap.receiveShadow=!0,this.viewer.scene.add(this.tilemap);const a=this.tilemap.geo2world(new p.Vector3(this.center[0],this.center[1],0));this.prjcenter=a;const c=this.options.viewer??{};this.viewer.flyToPoint({center:this.center,distance:typeof this.center[2]=="number"?this.center[2]:void 0,polarDeg:typeof c.polarDeg=="number"?c.polarDeg:void 0,azimuthDeg:typeof c.azimuthDeg=="number"?c.azimuthDeg:void 0,polarAngle:c.polarAngle,azimuthAngle:c.azimuthAngle,duration:0,curvePath:!1}),this._minZoomDistance=this.viewer.controls.minDistance,this._maxZoomDistance=this.viewer.controls.maxDistance;const u=this._getCameraDistance();this._lastCameraDistance=u,this._layerContainer=new Ag,this.viewer.scene.add(this._layerContainer);const d=this.viewer.controls;this._minZoomDistance=typeof d?.minDistance=="number"?d.minDistance:500,this._maxZoomDistance=typeof d?.maxDistance=="number"?d.maxDistance:8e4;const f=this.tilemap.getLayers().find(Z=>Z.isBaseLayer===!0)?.minLevel??this.tilemap.minLevel;this._minZoom=Math.max(this._ZOOM_MIN_CONST,Math.min(this._ZOOM_MAX_CONST,f)),this._maxZoom=this._ZOOM_MAX_CONST;const g=this.prjcenter,w=this.viewer.camera.position.clone().clone().sub(g).normalize(),b=as(t.zoom)?13:t.zoom,L=Math.max(this._minZoom,Math.min(this._maxZoom,b)),M=this._computeDistanceFromZoom(L);a.clone().addScaledVector(w,M);const C=this.getZoom();this._lastZoomForControls=C,this._zoomStartValue=C,this.collisionEngine=new p0(this.viewer.renderer,{padding:8,updateInterval:16,animationDuration:200,maxFeaturesPerFrame:2e4,strategies:{priority:!0,grouping:!0,proximity:!0}}),this.on("control-change",m0.debounce(Z=>{if(!this.tilemap||!this.collisionEngine)return;const z=this.tilemap,D=z.getDataZoom(),I=z.getLayers().find(H=>H.isBaseLayer===!0)?.maxLevel??z.maxLevel,K=this._getCameraDistance(),V=K-this._lastCameraDistance;this._lastCameraDistance=K;const{max:G}=this._getViewZoomRange(),k=Math.max(0,G-I);D<I?this._overZoom=0:V<-.001?this._overZoom=Math.min(this._overZoom+1,k):V>.001&&(this._overZoom=Math.max(this._overZoom-1,0));const j=this.getZoom();Math.abs(j-this._lastZoomForControls)>.001&&(this._isZooming?this.trigger("zooming",{from:this._zoomStartValue,to:j}):(this._isZooming=!0,this._zoomStartValue=this._lastZoomForControls,this.trigger("zoomstart",{from:this._zoomStartValue,to:j})),this._lastZoomForControls=j),this.collisionEngine.update(Z.camera)},10,{leading:!1,trailing:!0})),this.on("control-end",()=>{this._isZooming&&(this._isZooming=!1,this.trigger("zoomend",{from:this._zoomStartValue,to:this.getZoom()}))}),this._callOnLoadHooks()}static addOnLoadHook(e,...t){const n=typeof e=="function"?e:function(){this[e].apply(this,t)},r=this.prototype;return r._onLoadHooks=r._onLoadHooks||[],r._onLoadHooks.push(n),this}_callOnLoadHooks(){const e=sf.prototype;if(e._onLoadHooks)for(let t=0,n=e._onLoadHooks.length;t<n;t++)e._onLoadHooks[t].call(this)}getZoom(){const e=this.tilemap,t=e.getDataZoom(),r=e.getLayers().find(o=>o.isBaseLayer===!0)?.maxLevel??e.maxLevel;return t<r?t:r+this._overZoom}getDataZoom(){return this.tilemap.getDataZoom()}getMinZoom(){return this._minZoom}getMaxZoom(){return this._maxZoom}setZoomRange(e,t){if(e>t){const r=e;e=t,t=r}this._minZoom=e,this._maxZoom=t;const n=this.viewer.controls;if(n){const r=this._computeDistanceFromZoom(this._maxZoom),o=this._computeDistanceFromZoom(this._minZoom);n.minDistance=r,n.maxDistance=o}return this}setMinZoom(e){return this.setZoomRange(e,this._maxZoom)}setMaxZoom(e){return this.setZoomRange(this._minZoom,e)}setZoom(e){const t=this.getMinZoom(),n=this.getMaxZoom(),r=Math.max(t,Math.min(n,e)),o=this.getZoom(),a=this._computeDistanceFromZoom(r),c=this.viewer.controls,u=c?.target??this.prjcenter,d=this.viewer.camera,m=d.position.clone().sub(u).normalize();return d.position.copy(u).addScaledVector(m,a),d.updateProjectionMatrix(),typeof c?.update=="function"&&c.update(),this._lastZoomForControls=r,this.trigger("zoomend",{from:o,to:this.getZoom()}),this}zoomIn(e=1){return this.setZoom(this.getZoom()+e)}zoomOut(e=1){return this.setZoom(this.getZoom()-e)}_computeDistanceFromZoom(e){const t=this._ZOOM_MIN_CONST,n=this._ZOOM_MAX_CONST,r=this._minZoomDistance,o=this._maxZoomDistance;if(r<=0||r>=o){const m=Math.max(t,Math.min(n,e)),f=(n-m)/(n-t);return r+f*(o-r)}const c=(Math.max(t,Math.min(n,e))-t)/(n-t),u=r/o;return o*Math.pow(u,c)}initTileMap(e){const t=new hs({...e});try{if(e.Baselayers?.length)for(const n of e.Baselayers)n.isBaseLayer=!0,t.addLayer(n)}catch(n){console.error("💥 Diagnostic failed 诊断失败:",n)}return t.rotateX(-Math.PI/2),t.receiveShadow=!0,setTimeout(()=>{const n={timestamp:lm(),targrt:this};this._EventMap.loaded={listened:!0},this.trigger("loaded",n)},0),t}addLayer(e,...t){if(!e)return this;Array.isArray(e)||(e=[e]),t?.length&&(e=e.concat(t)),t?.length&&(e=e.concat(t));for(let n=0,r=e.length;n<r;n++){const o=e[n],a=o.getId();if(as(a))throw new Error("Invalid id for the layer: "+a);o.isTileLayer?this.addTileLayer(o):this.addRegularLayer(o)}return this}removeLayer(e){const t=this.tilemap.getLayer(e);if(t){if(t instanceof ga){const r=t._getRenderer();r&&this._layerContainer.remove(r)}return this.tilemap.removeLayer(e),!0}const n=this._layerContainer.getLayerById(e);return n?(this._layerContainer.remove(n),n instanceof Bn&&n?._collision,!0):(console.warn(`⚠️ Layer does not exist 图层不存在: ${e}`),!1)}addRegularLayer(e){this._layerContainer.add(e),e._bindMap(this),e instanceof Bn&&e?._collision&&(this.collisionEngine.registerLayer(e),e.setCollisionEngine(this.collisionEngine))}addTileLayer(e){if(this.tilemap.addLayer(e),e._bindMap(this),e instanceof ga){const t=e.options||{},n=new ta(e.getId()+"-vtrender",{altitude:e.getAltitude(),style:e.getStyle(),collision:e._collision,zIndex:typeof t.zIndex=="number"?t.zIndex:void 0,depthOffset:typeof t.depthOffset=="number"?t.depthOffset:void 0});e._setRenderer(n),this.addRegularLayer(n)}return this}clearLayers(){return this._layerContainer.clear(),this.tilemap.clearLayers(),this}getLayers(){const e=this._layerContainer.getLayers().filter(n=>!(n instanceof ta)),t=this.tilemap.getLayers();return[...e,...t]}getLayerById(e){const t=this._layerContainer.getLayerById(e);return t?t instanceof ta?void 0:t:this.tilemap.getLayer(e)}geo2world(e){return this.tilemap.geo2world(e)}world2geo(e){return this.tilemap.world2geo(e)}geo2map(e){return this.tilemap.geo2map(e)}_getCanvas(e=40,t=30,n){return this._canvasManager.getCanvas(e,t,1,n)}getContainer(){return this.viewer.container}getRenderer(){return this.viewer.renderer}getCamera(){return this.viewer.camera}_findFeaturesAt(e){const t=this,n=t.getRenderer(),r=t.getCamera(),o=n.domElement.getBoundingClientRect(),a=e.x/o.width*2-1,c=-(e.y/o.height)*2+1,u=new p.Raycaster;u.setFromCamera(new p.Vector2(a,c),r);const d=t.getLayers().filter(g=>!g?.isSceneLayer&&g?.visible===!0),f=u.intersectObjects(d,!0).map(g=>{let _=g.object,w=null;for(;_;){if(_ instanceof ct){w=_;break}_=_.parent}return!w||w.visible===!1?null:{feature:w,distance:g.distance,object:g.object}}).filter(g=>!!g);return f.length?f.sort((g,_)=>g.distance-_.distance):[]}getCenter(){const e=this.viewer.controls.target.clone(),t=this.world2geo(e);return[t.x,t.y,t.z]}_getEventPosition(e){let t,n;if("touches"in e){if(e.touches.length===0)return null;t=e.touches[0].clientX,n=e.touches[0].clientY}else t=e.clientX,n=e.clientY;const r=this.getContainer();if(!r)return null;const o=r.getBoundingClientRect();return{x:t-o.left,y:n-o.top}}get isInteracting(){return this.viewer?this.viewer.isInteracting:!1}_getCameraDistance(){const e=this.viewer.controls,t=this.viewer.camera,n=e?.target??this.prjcenter;return e&&typeof e.getDistance=="function"?e.getDistance():t.position.distanceTo(n)}_getViewZoomRange(){const e=this.viewer.controls,t=typeof e?.minDistance=="number"?e.minDistance:this._minZoomDistance,n=typeof e?.maxDistance=="number"?e.maxDistance:this._maxZoomDistance;if(t<=0||t>=n){const f=this.tilemap.getDataZoom();return{min:f,max:f}}const r=n/t,o=Math.log2(r),a=this.tilemap.getLayers().find(f=>f.isBaseLayer===!0),c=a?.minLevel??this.tilemap.minLevel,u=a?.maxLevel??this.tilemap.maxLevel,d=c,m=u+o;return{min:d,max:m}}flyTo(e){this.viewer.flyToAdvanced(e)}flyToPoint(e){this.viewer.flyToPoint(e)}destroy(){try{this._clearHandlers(),["control-change","control-start","control-end","zoomstart","zooming","zoomend","loaded"].forEach(t=>{const n=this._listenerMap?.get(t);n&&n.forEach((r,o)=>{this.off(t,o)})}),this.clearLayers(),Pc.clearCache(),this.collisionEngine&&(this.collisionEngine=null),this._layerContainer&&(this._layerContainer.clear(),this._layerContainer=null),this.tilemap&&(this.tilemap.dispose(),this.tilemap=null),this._canvasManager&&(this._canvasManager=null),this.viewer&&(this.viewer.destroy(),this.viewer=null),this._EventMap={loaded:{listened:!1}}}catch(e){console.error("Error destroying map 销毁地图时出错:",e)}}};vr.mergeOptions(sv);const ov=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout"];vr.prototype._removeDomEvents=function(){},vr.prototype._registerDomEvents=function(){const i=this.viewer.container;if(i){let t=null;ov.forEach(n=>{i.addEventListener(n,r=>{if(!this.viewer||!this.tilemap)return;if(n==="mousedown"&&(t={x:r.clientX,y:r.clientY}),n==="click"&&t){const c=r.clientX-t.x,u=r.clientY-t.y;if(Math.sqrt(c*c+u*u)>5)return}let o=ea(r,this.tilemap,this.viewer.camera),a={target:this,originEvent:r,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}};if(o){let c=[o.x,o.y,o.z];a={target:this,originEvent:r,coordinate:c,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}}}this.trigger(n,a)})})}},vr.addOnLoadHook("_registerDomEvents");var av=Object.defineProperty,lv=(i,e,t)=>e in i?av(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ya=(i,e,t)=>lv(i,typeof e!="symbol"?e+"":e,t);const cv=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout","contextmenu","touchstart","touchmove","touchend"];class uv extends ls{constructor(){super(...arguments),ya(this,"_registeredEvents",[]),ya(this,"_mouseDownTime",0),ya(this,"_eventCommon",e=>{(e.type==="mousedown"||e.type==="touchstart")&&(this._mouseDownTime=Date.now()),!(e.type==="click"&&Date.now()-this._mouseDownTime>300)&&this._handleEvent(e,e.type)})}addHooks(){const t=this.target.getContainer();t&&cv.forEach(n=>{t.addEventListener(n,this._eventCommon),this._registeredEvents.push(n)})}removeHooks(){const t=this.target.getContainer();t&&this._registeredEvents.length>0&&(this._registeredEvents.forEach(n=>{const r=n;t.removeEventListener(r,this._eventCommon)}),this._registeredEvents=[])}_handleEvent(e,t){const n=this.target;if(!n||!n.viewer||this._shouldIgnoreEvent(t)||(t==="mousemove"||t==="mouseenter"||t==="mouseleave"||t==="mouseover"||t==="mouseout"||t==="touchmove")&&!n.getLayers().some(u=>!u.isSceneLayer&&u._feaList?.length>0))return;const r=n._getEventPosition(e);if(!r)return;const o=n._findFeaturesAt(r);if(o.length===0)return;const a=o[0].feature;switch(t){case"click":this._handleClickEvent(a,e);break;case"mousemove":case"mouseenter":case"mouseleave":case"mouseover":case"mouseout":case"touchmove":this.handleMoveEvent(a,e);break;default:if(a){this._fireFeatureEvent(a,t,e);const c=a.getLayer();c&&c.trigger("feature"+t,{feature:a,domEvent:e,type:"feature"+t})}}}_handleClickEvent(e,t){if(!e)return;this._fireFeatureEvent(e,"click",t);const n=e.getLayer();n&&n.trigger("featureclick",{feature:e,domEvent:t,type:"featureclick"})}handleMoveEvent(e,t){if(!e)return;this._fireFeatureEvent(e,t.type,t);const n=e.getLayer();n&&n.trigger("feature"+t.type,{feature:e,domEvent:t,type:"feature"+t.type})}_fireFeatureEvent(e,t,n){const r=this.target;if(!r||!r.tilemap||!r.viewer)return;let o=n,a,c;if("touches"in n){const f=n.touches[0]||n.changedTouches[0];if(!f)return;o={currentTarget:n.currentTarget,clientX:f.clientX,clientY:f.clientY},a=f.screenX,c=f.screenY}else{const f=n;o=f,a=f.screenX,c=f.screenY}const u=ea(o,r.tilemap,r.viewer.camera);if(!u)return;const d=[u.x,u.y,u.z],m={target:e,originEvent:n,coordinate:d,eventName:t,screenXY:{X:a,Y:c}};e.trigger(t,m)}_shouldIgnoreEvent(e){const t=this.target;return t.viewer?e==="mousedown"||e==="touchstart"?!1:!!t.isInteracting:!0}}vr.mergeOptions({FeatureEvents:!0,onlyVisibleFeatureEvents:!0}),vr.addOnLoadHook("addHandler","FeatureEvents",uv);var hv=Object.defineProperty,dv=(i,e,t)=>e in i?hv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,vn=(i,e,t)=>dv(i,typeof e!="symbol"?e+"":e,t);let fv=class{constructor(...e){}};const Mu=class li extends Kn(mr(fv)){constructor(e={}){super(e),vn(this,"_owner"),vn(this,"_map"),vn(this,"_worldPosition"),vn(this,"_coordinate"),vn(this,"_dom"),vn(this,"_visible",!1),vn(this,"_boundMapHandlers",new Map),vn(this,"_viewerUpdateHandler"),vn(this,"_positionedOnce",!1)}_getClassName(){return"UIComponent"}getOffset(){return{x:this.options.dx??0,y:this.options.dy??0}}addTo(e){if(!e)return this;this._owner=e;const t=typeof e.getMap=="function"?e.getMap():e;return t?(this._map=t,this._bindMapEvents(!0),this.options.single&&(li._singletons.forEach(n=>{n!==this&&n.options.single&&n._map===t&&n.hide()}),li._singletons.add(this)),this.onAdd&&this.onAdd(),this.trigger("add",{owner:e,map:t}),this):this}remove(){const e=this._map;return this.hideDom(),this._bindMapEvents(!1),this.options.single&&li._singletons.delete(this),this.onRemove&&this.onRemove(),this.trigger("remove",{owner:this._owner,map:e}),this._owner=void 0,this._map=void 0,this}show(e){const t=this._map??(this._owner&&typeof this._owner.getMap=="function"?this._owner.getMap():void 0);if(!t)return this;if(this._map=t,this.options.single&&(li._singletons.forEach(n=>{n!==this&&n.options.single&&n._map===t&&n.isVisible()&&n.hide()}),li._singletons.add(this)),!this._dom){const n=this.buildOn();this._dom=n,n.style.position="absolute",typeof this.options.zIndex=="number"&&(n.style.zIndex=String(this.options.zIndex));const r=t.getContainer();if(!r)return this;r.appendChild(n)}return this._coordinate=e?[...e]:void 0,this._visible=!0,this._positionedOnce=!1,this._dom&&(this._dom.style.display="none"),this.trigger("show",{owner:this._owner,map:t}),this}hide(){return this._visible=!1,this._dom&&(this._dom.style.display="none"),this._coordinate=void 0,this.trigger("hide",{owner:this._owner,map:this._map}),this}hideDom(){return this._dom&&this._dom.parentElement&&(this._dom.parentElement.removeChild(this._dom),this.onDomRemove&&this.onDomRemove()),this._dom=void 0,this._visible=!1,this._coordinate=void 0,this}getMap(){return this._map}isVisible(){return this._visible}_bindMapEvents(e){const t=this._map;if(!t)return;const n=t,r=e?"on":"off",o=(a,c)=>{e?this._boundMapHandlers.set(a,c):this._boundMapHandlers.delete(a)};if(e){const a=()=>{this._visible&&this._updatePosition()};n[r]("control-change",a),o("control-change",a);const c=t.viewer;if(c&&!this._viewerUpdateHandler){const u=()=>{this._visible&&this._updatePosition()};this._viewerUpdateHandler=u,c.addEventListener("update",u)}}else{this._boundMapHandlers.forEach((c,u)=>{n[r](u,c)}),this._boundMapHandlers.clear();const a=t.viewer;a&&this._viewerUpdateHandler&&(a.removeEventListener("update",this._viewerUpdateHandler),this._viewerUpdateHandler=void 0)}}_resolveWorldPosition(){const e=this._map;if(!e)return;if(this._coordinate){const[n,r,o=0]=this._coordinate,a=new p.Vector3(n,r,o);return e.geo2world(a)}const t=this._owner;if(t&&t._geometry){const n=t._geometry;if(n&&(n.type==="Point"||n.type==="MultiPoint")){let r;if(n.type==="Point"?r=n.coordinates:n.type==="MultiPoint"&&Array.isArray(n.coordinates)&&n.coordinates.length>0&&(r=n.coordinates[0]),r&&r.length>=2){const o=new p.Vector3(r[0],r[1],r[2]??0);return e.geo2world(o)}}if(t._threeGeometry&&typeof t._threeGeometry.getWorldPosition=="function"){const r=new p.Vector3;if(t._threeGeometry.getWorldPosition(r),!(r.x===0&&r.y===0&&r.z===0))return r}if(t._position instanceof p.Vector3){const r=t._position;if(!(r.x===0&&r.y===0&&r.z===0))return r.clone()}}if(t&&typeof t.getWorldPosition=="function"){const n=new p.Vector3;return t.getWorldPosition(n),n}return e.prjcenter?.clone?.()??void 0}_updatePosition(){if(!this._dom||!this._map)return;if(this._visible){const u=this._resolveWorldPosition();if(!u){this._dom.style.display="none";return}this._worldPosition=u}if(!this._worldPosition)return;const e=this._map.viewer,t=e.camera,n=this._dom.style.display==="none";n&&(this._dom.style.visibility="hidden",this._dom.style.display=""),t.updateMatrixWorld();const r=this._worldPosition.clone().project(t);if(r.x<-1.1||r.x>1.1||r.y<-1.1||r.y>1.1||r.z<-1||r.z>1){this._dom.style.display="none",n&&(this._dom.style.visibility="");return}const o=(r.x*.5+.5)*e.width,a=(-r.y*.5+.5)*e.height,c=this.getOffset();if(this._dom.style.left=`${o+c.x}px`,this._dom.style.top=`${a+c.y}px`,n&&(this._dom.style.visibility=""),!this._positionedOnce){this._positionedOnce=!0,this._dom.style.display="none";return}this._dom.style.display=""}};vn(Mu,"_singletons",new Set);let Su=Mu;var pv=Object.defineProperty,mv=(i,e,t)=>e in i?pv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Lu=(i,e,t)=>mv(i,typeof e!="symbol"?e+"":e,t);class _a extends Su{constructor(e){super({single:!0,...e}),Lu(this,"_titleEl"),Lu(this,"_contentEl")}_getClassName(){return"InfoWindow"}buildOn(){if(this.options.custom){let c;this.options.content instanceof HTMLElement?c=this.options.content:(c=document.createElement("div"),typeof this.options.content=="string"&&(c.innerHTML=this.options.content));const u=this.options.containerClass;return u&&(Array.isArray(u)?u:[u]).forEach(m=>{c.classList.add(m)}),this.options.minWidth&&(c.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(c.style.minHeight=`${this.options.minHeight}px`),this._titleEl=void 0,this._contentEl=c,c}const e=document.createElement("div");e.className="terra-infowindow";const t=this.options.containerClass;t&&(Array.isArray(t)?t:[t]).forEach(u=>{e.classList.add(u)}),typeof this.options.zIndex=="number"&&(e.style.zIndex=String(this.options.zIndex)),this.options.minWidth&&(e.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(e.style.minHeight=`${this.options.minHeight}px`);const n=document.createElement("div");n.className="terra-infowindow-header";const r=document.createElement("div");r.className="terra-infowindow-title",this.options.title&&(r.innerText=this.options.title);const o=document.createElement("span");o.className="terra-infowindow-close",o.innerHTML="×",o.title="关闭",o.addEventListener("click",c=>{c.stopPropagation(),c.preventDefault(),this.close()}),o.addEventListener("mousedown",c=>{c.preventDefault()}),o.style.cursor="pointer",o.style.userSelect="none",n.appendChild(r),n.appendChild(o);const a=document.createElement("div");return a.className="terra-infowindow-content",this.options.content instanceof HTMLElement?a.appendChild(this.options.content):typeof this.options.content=="string"&&(a.innerHTML=this.options.content),e.appendChild(n),e.appendChild(a),this._titleEl=r,this._contentEl=a,e}getOffset(){const e=super.getOffset(),t=this._dom;if(!t)return e;const n=t.offsetWidth,r=t.offsetHeight,o=10;let a=e.x-n/2,c=e.y-r-o;const u=this._owner,d=this.getMap();if(u&&typeof u.getStyle=="function"&&d?.viewer){const f=u.getStyle?.()?.config,g=f?.type;if(f&&(g==="icon-point"||g==="icon-label-point")){const _=Array.isArray(f.anchor)?f.anchor:[.5,.5],w=typeof _[1]=="number"?_[1]:.5;let x=0;const b=u._threeGeometry;if(b&&b instanceof p.Sprite&&(x=this._getSpriteScreenHeight(b,d.viewer)),x<=0){let L=0;if(g==="icon-point"){const M=f.size;Array.isArray(M)?L=M[1]:typeof M=="number"&&(L=M)}else if(g==="icon-label-point"){const M=f.size??f.iconSize;Array.isArray(M)?L=M[1]:typeof M=="number"&&(L=M)}x=L*(1-w)}else x=x*(1-w);x>0&&(c-=x)}}return{x:a,y:c}}_getSpriteScreenHeight(e,t){try{const n=t.camera,r=t.renderer;if(!n||!r)return 0;const o=t.height||r.domElement.clientHeight;if(!(e.material.sizeAttenuation!==!1)){const z=n.projectionMatrix.elements[5];return e.scale.y*z*o/2}const u=new p.Vector3;e.getWorldPosition(u);const d=n.position.clone(),m=u.clone().sub(d).normalize(),f=new p.Vector3;f.crossVectors(n.up,m).normalize();const g=new p.Vector3;g.crossVectors(m,f).normalize();const _=e.scale.y*(1-e.center.y),w=e.scale.y*e.center.y,x=u.clone().add(g.clone().multiplyScalar(_)),b=u.clone().sub(g.clone().multiplyScalar(w)),L=x.clone().project(n),M=b.clone().project(n),C=(-L.y*.5+.5)*o,Z=(-M.y*.5+.5)*o;return Math.abs(Z-C)}catch(n){return console.warn("Failed to calculate sprite screen height: // 计算 sprite 屏幕高度失败:",n),0}}setTitle(e){return this.options.title=e,this._titleEl&&(this._titleEl.innerText=e??""),this}setContent(e){return this.options.content=e,this._contentEl?(this._contentEl.innerHTML="",e instanceof HTMLElement?this._contentEl.appendChild(e):this._contentEl.innerHTML=e,this):this}open(e){super.show(e);const t=this,n=()=>{!t._dom||!t._map||!t._visible||(t._positionedOnce=!0,t._updatePosition())},o=this.getMap()?.viewer;if(o&&typeof o.addEventListener=="function"){const a=()=>{o.removeEventListener("update",a),n()};o.addEventListener("update",a)}else requestAnimationFrame(n);return this}close(){return this.hide()}}ct.include({setInfoWindow(i){this.removeInfoWindow();let e;return i instanceof _a?e=i:e=new _a(i),this._infoWindow=e,this.getMap()&&e.addTo(this),this},getInfoWindow(){return this._infoWindow},openInfoWindow(i){const e=this._infoWindow;return e?(e.getMap()||this.getMap()&&e.addTo(this),requestAnimationFrame(()=>{e.open(i)}),this):this},closeInfoWindow(){return this._infoWindow&&this._infoWindow.close(),this},removeInfoWindow(){return this._infoWindow&&(this._infoWindow.remove(),this._infoWindow=void 0),this}});var gv=Object.defineProperty,yv=(i,e,t)=>e in i?gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,va=(i,e,t)=>yv(i,typeof e!="symbol"?e+"":e,t);class _v{constructor(...e){}}class Pu extends Kn(mr(_v)){constructor(e={}){super(e),va(this,"_map"),va(this,"_enabled",!1),va(this,"_boundHandlers",new Map)}addTo(e){if(!e)return this;const t=e;return t._activeMapTool&&t._activeMapTool!==this&&t._activeMapTool.disable(),t._activeMapTool=this,this._map=e,this.onAdd&&this.onAdd(),this.enable(),this.trigger("add",{map:e}),this}getMap(){return this._map}enable(){return!this._map||this._enabled?this:(this._enabled=!0,this._bindEvents(),this.onEnable&&this.onEnable(),this.trigger("enable",{map:this._map}),this)}disable(){return!this._map||!this._enabled?this:(this._enabled=!1,this._unbindEvents(),this.onDisable&&this.onDisable(),this.trigger("disable",{map:this._map}),this)}remove(){if(!this._map)return this;this.disable(),this.onRemove&&this.onRemove();const e=this._map;return e._activeMapTool===this&&(e._activeMapTool=null),this.trigger("remove",{map:this._map}),this._map=void 0,this}_bindEvents(){this._map}_unbindEvents(){this._map&&(this._boundHandlers.forEach((e,t)=>{this._map.off(t,e)}),this._boundHandlers.clear())}addMapEvent(e,t,n){if(!this._map)return;const r=n?t.bind(n):t;this._boundHandlers.set(e,r),this._map.on(e,r)}}var vv=Object.defineProperty,wv=(i,e,t)=>e in i?vv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Zi=(i,e,t)=>wv(i,typeof e!="symbol"?e+"":e,t);class bv extends Bn{constructor(e){super(e,{altitude:1})}validateFeature(e){return!!e}}const Cu={};class Kr extends Pu{constructor(e){super(e),Zi(this,"_modeDef"),Zi(this,"_clickCoords",[]),Zi(this,"_isDrawing",!1),Zi(this,"_geometry"),Zi(this,"_draftLayer"),this.options.once=this.options.once??!1,this._ensureMode()}static registerMode(e,t){Cu[e.toLowerCase()]=t}static getModeDefinition(e){return Cu[e.toLowerCase()]}getMode(){return(this.options.mode||"").toLowerCase()}setMode(e){return this._finishDrawingSilently(),this.options.mode=e,this._ensureMode(),this}setStyle(e){return e.geometryStyle!==void 0&&(this.options.geometryStyle=e.geometryStyle),Object.prototype.hasOwnProperty.call(e,"vertexStyle")&&(this.options.vertexStyle=e.vertexStyle??null),this}getEvents(){return{click:this._handleClick.bind(this),mousemove:this._handleMouseMove.bind(this),dblclick:this._handleDblClick.bind(this)}}onEnable(){this._ensureMode()}onDisable(){this._finishDrawingSilently(),this._destroyDraftLayer()}_ensureMode(){const e=this.getMode(),t=Kr.getModeDefinition(e);if(!t)throw new Error(`DrawTool: mode "${e}" Not registered, please call DrawTool.registerMode first 未注册,请先调用 DrawTool.registerMode`);this._modeDef=t}_handleClick(e){if(!this._modeDef||!e.coordinate)return;const t=e.coordinate,n=this._modeDef,r={...e,drawTool:this};this._isDrawing?(this._clickCoords.push(t),n.update(this._clickCoords,this._geometry,r),this.trigger("drawvertex",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})):(this._isDrawing=!0,this._clickCoords=[t],this._geometry=n.create(t,r),this.trigger("drawstart",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})),n.clickLimit&&this._clickCoords.length>=n.clickLimit&&this._finishDrawing(r)}_handleMouseMove(e){if(!this._modeDef||!this._isDrawing||!e.coordinate)return;const t=this._modeDef,n=[...this._clickCoords,e.coordinate],r={...e,drawTool:this};t.update(n,this._geometry,r),this.trigger("drawing",{coordinate:e.coordinate,geometry:this._geometry,coords:n,originEvent:r})}_handleDblClick(e){if(!this._modeDef||!this._isDrawing)return;const t={...e,drawTool:this};this._finishDrawing(t)}_finishDrawing(e){if(!this._modeDef||!this._isDrawing)return;const n=this._modeDef.generate(this._geometry,[...this._clickCoords]);this.trigger("drawend",{geometry:n,coords:[...this._clickCoords],originEvent:e}),this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0,this.options.once&&this.disable()}_finishDrawingSilently(){this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0}_getOrCreateDraftLayer(){if(this._draftLayer)return this._draftLayer;const e=this.getMap();if(!e)throw new Error("DrawTool: map not bound, please call addTo(map) first 尚未绑定地图,请先调用 addTo(map)");const t=`__draw_draft_${Date.now().toString(36)}`,n=new bv(t);return e.addLayer(n),this._draftLayer=n,n}_destroyDraftLayer(){const e=this.getMap();e&&this._draftLayer&&e.removeLayer(this._draftLayer.getId()),this._draftLayer=void 0}}const xv={actions:["click","mousemove"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Hn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),o={type:"Point",coordinates:i},a=new Pn({geometry:o,style:r});return a.addTo(n),a.initializeGeometry(),{tool:t,draftLayer:n,draftMarker:a}},update(i,e,t){const n=e?.draftMarker;if(!n)return;const r=i[i.length-1];n._geometry={type:"Point",coordinates:r},n._position=n._coordsTransform(),n._toThreeJSGeometry&&n._toThreeJSGeometry()},generate(i,e){const t=i.tool;if(!e.length)return null;i.draftMarker&&(i.draftMarker._remove(),i.draftMarker=null);const n=Hn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),r=e[e.length-1];return new Pn({geometry:{type:"Point",coordinates:r},style:n})},clickLimit:1},Mv={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Hn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2}),o=t.options.vertexStyle===null?void 0:Hn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),a={type:"LineString",coordinates:[i]},c=new xt({geometry:a,style:r});c.addTo(n);const u=[];if(o){const d={type:"Point",coordinates:i},m=new Pn({geometry:d,style:o});m.addTo(n),u.push(m)}return{tool:t,draftLayer:n,draftLine:c,draftAnchors:u,lineStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(!i||i.length<2)return;e.draftLine&&(e.draftLine._remove(),e.draftLine=null);const r={type:"LineString",coordinates:i},o=new xt({geometry:r,style:e.lineStyle});if(o.addTo(n),e.draftLine=o,t.eventName==="click"&&e.vertexStyle){const c={type:"Point",coordinates:i[i.length-1]},u=new Pn({geometry:c,style:e.vertexStyle});u.addTo(n),e.draftAnchors.push(u)}},generate(i,e){const t=i.tool;if(!e.length)return null;if(i.draftLine&&(i.draftLine._remove(),i.draftLine=null),Array.isArray(i.draftAnchors)){for(const o of i.draftAnchors)o?._remove();i.draftAnchors=[]}const n=Hn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2});return new xt({geometry:{type:"LineString",coordinates:e},style:n})}},Sv={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Hn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),o=t.options.vertexStyle===null?void 0:Hn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),a=[];if(o){const c={type:"Point",coordinates:i},u=new Pn({geometry:c,style:o});u.addTo(n),u.initializeGeometry(),a.push(u)}return{tool:t,draftLayer:n,draftPolygon:null,draftEdgeLine:null,draftAnchors:a,polygonStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(t.eventName==="click"&&e.vertexStyle){const m={type:"Point",coordinates:i[i.length-1]},f=new Pn({geometry:m,style:e.vertexStyle});f.addTo(n),f.initializeGeometry(),e.draftAnchors.push(f)}if(!i||i.length<2){e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);return}if(i.length===2){e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null),e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const d={type:"LineString",coordinates:i},m=e.polygonStyle?.config&&e.polygonStyle.config.color||"#00ff00",f=new Gt({type:"basic-line",color:m,width:2}),g=new xt({geometry:d,style:f});g.addTo(n),e.draftEdgeLine=g;return}e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const r=i.slice(),o=r[0],a=r[r.length-1];(o[0]!==a[0]||o[1]!==a[1]||(o[2]||0)!==(a[2]||0))&&r.push(o),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);const c={type:"Polygon",coordinates:[r]},u=new _n({geometry:c,style:e.polygonStyle});u.addTo(n),e.draftPolygon=u},generate(i,e){const t=i.tool;if(e.length<3)return null;if(i.draftPolygon&&(i.draftPolygon._remove(),i.draftPolygon=null),i.draftEdgeLine&&(i.draftEdgeLine._remove(),i.draftEdgeLine=null),Array.isArray(i.draftAnchors)){for(const u of i.draftAnchors)u?._remove();i.draftAnchors=[]}const n=Hn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),r=e.slice(),o=r[0],a=r[r.length-1];return(o[0]!==a[0]||o[1]!==a[1]||(o[2]||0)!==(a[2]||0))&&r.push(o),new _n({geometry:{type:"Polygon",coordinates:[r]},style:n})}};Kr.registerMode("point",xv),Kr.registerMode("line",Mv),Kr.registerMode("polygon",Sv);function Hn(i,e){return Gt.create(i||e)}var Lv=Object.defineProperty,Pv=(i,e,t)=>e in i?Lv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,rn=(i,e,t)=>Pv(i,typeof e!="symbol"?e+"":e,t);class Cv extends nn{constructor(e){if(super(e),rn(this,"dataType","image"),rn(this,"attribution","天地图"),rn(this,"token",""),rn(this,"style","img_w"),rn(this,"subdomains","01234"),rn(this,"url","https://t{s}.tianditu.gov.cn/DataServer?T={style}&x={x}&y={y}&l={z}&tk={token}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}class Tv extends nn{constructor(e){if(super(e),rn(this,"dataType","quantized-mesh"),rn(this,"attribution","天地图"),rn(this,"token",""),rn(this,"subdomains","01234"),rn(this,"url","https://t{s}.tianditu.gov.cn/mapservice/swdx?T=elv_c&tk={token}&x={x}&y={y}&l={z}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}var Gv=Object.defineProperty,Zv=(i,e,t)=>e in i?Gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Tu=(i,e,t)=>Zv(i,typeof e!="symbol"?e+"":e,t);class Wv extends nn{constructor(e){super({...e,url:e.urlTemplate,isTMS:e.isTMS||!1}),Tu(this,"minLevel",2),Tu(this,"maxLevel",24)}getUrl(e,t,n){const r=this.isTMS?Math.pow(2,n)-1-t:t;return am(this.url,{...this,x:e,y:r,z:n,tileMatrix:n,tileRow:r,tileCol:e})}}var Vv=Object.defineProperty,Iv=(i,e,t)=>e in i?Vv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Cn=(i,e,t)=>Iv(i,typeof e!="symbol"?e+"":e,t);class Av extends nn{constructor(e){super(e),Cn(this,"dataType","image"),Cn(this,"attribution","ArcGIS"),Cn(this,"style","World_Imagery"),Cn(this,"url","https://services.arcgisonline.com/arcgis/rest/services/{style}/MapServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}class Fv extends nn{constructor(e){super(e),Cn(this,"dataType","lerc"),Cn(this,"attribution","ArcGIS"),Cn(this,"minLevel",6),Cn(this,"maxLevel",13),Cn(this,"url","https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}var Ov=Object.defineProperty,Dv=(i,e,t)=>e in i?Ov(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Nr=(i,e,t)=>Dv(i,typeof e!="symbol"?e+"":e,t);class zv extends nn{constructor(e){if(super(e),Nr(this,"token",""),Nr(this,"format","webp"),Nr(this,"style","cm2myr6qx001t01pi0sf7estf"),Nr(this,"attribution","MapBox"),Nr(this,"maxLevel",25),Nr(this,"url","https://api.mapbox.com/styles/v1/criska/cm2myr6qx001t01pi0sf7estf/tiles/256/{z}/{x}/{y}?access_token={token}&format={format}"),Object.assign(this,e),!this.token)throw new Error("MapBox访问令牌(token)是必填参数")}}var Xv=Object.defineProperty,Uv=(i,e,t)=>e in i?Xv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Gu=(i,e,t)=>Uv(i,typeof e!="symbol"?e+"":e,t);class kv extends nn{constructor(e){super(e),Gu(this,"dataType","mvt"),Gu(this,"style",{layer:[]}),Object.assign(this,e)}}var Kv=Object.defineProperty,Nv=(i,e,t)=>e in i?Kv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Wi=(i,e,t)=>Nv(i,typeof e!="symbol"?e+"":e,t);class Bv extends nn{constructor(e){super(e),Wi(this,"dataType","VectorTile"),Wi(this,"attribution","ArcGIS"),Wi(this,"minLevel",1),Wi(this,"maxLevel",21),Wi(this,"url","https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=uKYsZQZpm72WlbSgH9B7"),Object.assign(this,e)}}class Yv extends Bn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Line"}}class Rv extends Bn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Point"}}class jv extends Bn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Surface"}}var Jv=Object.defineProperty,Qv=(i,e,t)=>e in i?Jv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Hv=(i,e,t)=>Qv(i,e+"",t);class Ev extends Bn{constructor(e,t){super(e,t),Hv(this,"_clouds",null);const n=["texture"];for(const r of n)mc(t,r);this._createClouds(t.texture)}async _createClouds(e){const t=await Gt._loadTexture(e),n=new $m({texture:t,material:p.MeshBasicMaterial});n.castShadow=!0,this._clouds=n}validateFeature(e){return e._type==="Cloud"}animate(e,t){this._clouds&&this._clouds.update(this.map.viewer.camera,t,e)}}var $v=Object.defineProperty,qv=(i,e,t)=>e in i?$v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ew=(i,e,t)=>qv(i,e+"",t);class tw extends nu{constructor(e,t){super(e,t),ew(this,"layerType","raster")}createLoader(){const e=new ws;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}}var nw=Object.defineProperty,rw=(i,e,t)=>e in i?nw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ps=(i,e,t)=>rw(i,typeof e!="symbol"?e+"":e,t);class iw extends tw{constructor(e,t){super(e,t),Ps(this,"layerType","wmts"),Ps(this,"_layerName"),Ps(this,"_style"),Ps(this,"_matrixSet"),this._layerName=t.layerName,this._style=t.style||"default",this._matrixSet=t.matrixSet||"GoogleMapsCompatible"}get layerName(){return this._layerName}get style(){return this._style}get matrixSet(){return this._matrixSet}createLoader(){const e=new ws;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}update(e){this.loader&&super.update(e)}}console.log("%c✨ terra.gl V"+af+" ","color:rgb(255, 255, 255); font-weight: bold; background: linear-gradient(90deg, #ffb6c1, #ff69b4); padding: 5px; border-radius: 5px;"),q.ArcGisDemSource=Fv,q.ArcGisSource=Av,q.CloudsLayer=Ev,q.DrawTool=Kr,q.EventClass=Xo,q.Feature=ct,q.ICloud=$c,q.InfoWindow=_a,q.Label=qc,q.LineLayer=Yv,q.LineString=xt,q.LoaderFactory=Oe,q.MVTGeoSource=Bv,q.MVTSource=kv,q.Map=vr,q.MapBoxSource=zv,q.MapTool=Pu,q.Marker=Pn,q.Martini=au,q.Model=Ec,q.MultiLineString=Hc,q.PointLayer=Rv,q.Polygon=_n,q.PolygonLayer=jv,q.ProjectFactory=zm,q.PromiseWorker=yy,q.Style=Gt,q.TDTQMSource=Tv,q.TDTSource=Cv,q.TPoints=tu,q.Tile=Nn,q.TileCanvasLoader=Xy,q.TileGeometry=Ur,q.TileGeometryLoader=aa,q.TileLoader=ws,q.TileLoadingManager=ru,q.TileMap=hs,q.TileMaterial=la,q.TileMaterialLoader=ca,q.TileSource=nn,q.UIComponent=Su,q.VectorFeatureTypes=tt,q.VectorTileLayer=ga,q.VectorTileRender=cu,q.Viewer=vc,q.WMTSSource=Wv,q.WMTSTileLayer=iw,q.addSkirt=su,q.author=Qy,q.concatenateTypedArrays=Ti,q.convertGeometryToWGS84=wy,q.createBillboards=Um,q.getBoundsCoord=na,q.getGeometryDataFromDem=ou,q.getGridIndices=sa,q.getLocalInfoFromRay=Ko,q.getLocalInfoFromScreen=Sc,q.getLocalInfoFromWorld=No,q.getNormals=oa,q.getSafeTileUrlAndBounds=ra,q.registerDEMLoader=da,q.registerImgLoader=ha,q.registerMeshLoader=du,q.vector2ToWGS84=ia,q.version=Jy,q.waitFor=Hy,Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})});
|
|
973
|
+
`;var Yy=Object.defineProperty,Ry=(i,e,t)=>e in i?Yy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Wt=(i,e,t)=>Ry(i,typeof e!="symbol"?e+"":e,t);class nn{constructor(e){Wt(this,"dataType","image"),Wt(this,"attribution","isource"),Wt(this,"minLevel",0),Wt(this,"maxLevel",18),Wt(this,"projectionID","3857"),Wt(this,"url",""),Wt(this,"subdomains",[]),Wt(this,"s",""),Wt(this,"opacity",1),Wt(this,"isTMS",!1),Wt(this,"bounds",[-180,-85,180,85]),Wt(this,"_projectionBounds",[-1/0,-1/0,1/0,1/0]),Wt(this,"tileMaterial"),Object.assign(this,e)}getUrl(e,t,n){const r={...this,x:e,y:t,z:n};return jy(this.url,r)}_getUrl(e,t,n){const r=this.subdomains.length;if(r>0){const a=Math.floor(Math.random()*r);this.s=this.subdomains[a]}const o=this.isTMS?Math.pow(2,n)-1-t:t;return this.getUrl(e,o,n)}static create(e){return new nn(e)}}function jy(i,e){const t=/\{ *([\w_-]+) *\}/g;return i.replace(t,(n,r)=>{const o=e[r]??(()=>{throw new Error(`source url template error, No value provided for variable: ${n}`)})();return typeof o=="function"?o(e):o})}const{version:Jy,author:Qy}=JSON.parse(By);function Hy(i,e=100){return new Promise(t=>{const n=setInterval(()=>{i&&(clearInterval(n),t())},e)})}function ha(i){return Oe.registerMaterialLoader(i),i}function da(i){return Oe.registerGeometryLoader(i),i}function du(i){return Oe.registerMeshLoader(i),i}ha(new Ky);const fu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEsoayxkKXtjb25zdCB5PW5ldyBGbG9hdDMyQXJyYXkoay5sZW5ndGgpO2ZvcihsZXQgVj0wO1Y8ZC5sZW5ndGg7Vis9Myl7Y29uc3QgYT1kW1ZdKjMsZT1kW1YrMV0qMyxyPWRbVisyXSozLHM9a1thXSx0PWtbYSsxXSxuPWtbYSsyXSxoPWtbZV0saT1rW2UrMV0sbz1rW2UrMl0sYz1rW3JdLHU9a1tyKzFdLG09a1tyKzJdLHc9aC1zLGw9aS10LGY9by1uLGc9Yy1zLE09dS10LEQ9bS1uLHA9bCpELWYqTSxVPWYqZy13KkQsST13Kk0tbCpnLHo9TWF0aC5zcXJ0KHAqcCtVKlUrSSpJKSx4PVswLDAsMV07aWYoej4wKXtjb25zdCB2PTEvejt4WzBdPXAqdix4WzFdPVUqdix4WzJdPUkqdn1mb3IobGV0IHY9MDt2PDM7disrKXlbYSt2XT15W2Urdl09eVtyK3ZdPXhbdl19cmV0dXJuIHl9dmFyIFc9T2JqZWN0LmRlZmluZVByb3BlcnR5LFA9KGssZCx5KT0+ZCBpbiBrP1coayxkLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSk6a1tkXT15LF89KGssZCx5KT0+UChrLHR5cGVvZiBkIT0ic3ltYm9sIj9kKyIiOmQseSk7Y2xhc3MgZWV7Y29uc3RydWN0b3IoZD0yNTcpe18odGhpcywiZ3JpZFNpemUiKSxfKHRoaXMsIm51bVRyaWFuZ2xlcyIpLF8odGhpcywibnVtUGFyZW50VHJpYW5nbGVzIiksXyh0aGlzLCJpbmRpY2VzIiksXyh0aGlzLCJjb29yZHMiKSx0aGlzLmdyaWRTaXplPWQ7Y29uc3QgeT1kLTE7aWYoeSZ5LTEpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBncmlkIHNpemUgdG8gYmUgMl5uKzEsIGdvdCAke2R9LmApO3RoaXMubnVtVHJpYW5nbGVzPXkqeSoyLTIsdGhpcy5udW1QYXJlbnRUcmlhbmdsZXM9dGhpcy5udW1UcmlhbmdsZXMteSp5LHRoaXMuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkodGhpcy5ncmlkU2l6ZSp0aGlzLmdyaWRTaXplKSx0aGlzLmNvb3Jkcz1uZXcgVWludDE2QXJyYXkodGhpcy5udW1UcmlhbmdsZXMqNCk7Zm9yKGxldCBWPTA7Vjx0aGlzLm51bVRyaWFuZ2xlcztWKyspe2xldCBhPVYrMixlPTAscj0wLHM9MCx0PTAsbj0wLGg9MDtmb3IoYSYxP3M9dD1uPXk6ZT1yPWg9eTsoYT4+PTEpPjE7KXtjb25zdCBvPWUrcz4+MSxjPXIrdD4+MTthJjE/KHM9ZSx0PXIsZT1uLHI9aCk6KGU9cyxyPXQscz1uLHQ9aCksbj1vLGg9Y31jb25zdCBpPVYqNDt0aGlzLmNvb3Jkc1tpKzBdPWUsdGhpcy5jb29yZHNbaSsxXT1yLHRoaXMuY29vcmRzW2krMl09cyx0aGlzLmNvb3Jkc1tpKzNdPXR9fWNyZWF0ZVRpbGUoZCl7cmV0dXJuIG5ldyByZShkLHRoaXMpfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihkLHkpe18odGhpcywibWFydGluaSIpLF8odGhpcywidGVycmFpbiIpLF8odGhpcywiZXJyb3JzIik7Y29uc3QgVj15LmdyaWRTaXplO2lmKGQubGVuZ3RoIT09VipWKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGVycmFpbiBkYXRhIG9mIGxlbmd0aCAke1YqVn0gKCR7Vn0geCAke1Z9KSwgZ290ICR7ZC5sZW5ndGh9LmApO3RoaXMudGVycmFpbj1kLHRoaXMubWFydGluaT15LHRoaXMuZXJyb3JzPW5ldyBGbG9hdDMyQXJyYXkoZC5sZW5ndGgpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7Y29uc3R7bnVtVHJpYW5nbGVzOmQsbnVtUGFyZW50VHJpYW5nbGVzOnksY29vcmRzOlYsZ3JpZFNpemU6YX09dGhpcy5tYXJ0aW5pLHt0ZXJyYWluOmUsZXJyb3JzOnJ9PXRoaXM7Zm9yKGxldCBzPWQtMTtzPj0wO3MtLSl7Y29uc3QgdD1zKjQsbj1WW3QrMF0saD1WW3QrMV0saT1WW3QrMl0sbz1WW3QrM10sYz1uK2k+PjEsdT1oK28+PjEsbT1jK3UtaCx3PXUrbi1jLGw9KGVbaCphK25dK2VbbyphK2ldKS8yLGY9dSphK2MsZz1NYXRoLmFicyhsLWVbZl0pO2lmKHJbZl09TWF0aC5tYXgocltmXSxnKSxzPHkpe2NvbnN0IE09KGgrdz4+MSkqYSsobittPj4xKSxEPShvK3c+PjEpKmErKGkrbT4+MSk7cltmXT1NYXRoLm1heChyW2ZdLHJbTV0scltEXSl9fX1nZXRHZW9tZXRyeURhdGEoZD0wKXtjb25zdHtncmlkU2l6ZTp5LGluZGljZXM6Vn09dGhpcy5tYXJ0aW5pLHtlcnJvcnM6YX09dGhpcztsZXQgZT0wLHI9MDtjb25zdCBzPXktMTtsZXQgdCxuLGg9MDtWLmZpbGwoMCk7ZnVuY3Rpb24gaShmLGcsTSxELHAsVSl7Y29uc3QgST1mK00+PjEsej1nK0Q+PjE7TWF0aC5hYnMoZi1wKStNYXRoLmFicyhnLVUpPjEmJmFbeip5K0ldPmQ/KGkocCxVLGYsZyxJLHopLGkoTSxELHAsVSxJLHopKToodD1nKnkrZixuPUQqeStNLGg9VSp5K3AsVlt0XT09PTAmJihWW3RdPSsrZSksVltuXT09PTAmJihWW25dPSsrZSksVltoXT09PTAmJihWW2hdPSsrZSkscisrKX1pKDAsMCxzLHMscywwKSxpKHMscywwLDAsMCxzKTtjb25zdCBvPWUqMixjPXIqMyx1PW5ldyBVaW50MTZBcnJheShvKSxtPW5ldyBVaW50MzJBcnJheShjKTtsZXQgdz0wO2Z1bmN0aW9uIGwoZixnLE0sRCxwLFUpe2NvbnN0IEk9ZitNPj4xLHo9ZytEPj4xO2lmKE1hdGguYWJzKGYtcCkrTWF0aC5hYnMoZy1VKT4xJiZhW3oqeStJXT5kKWwocCxVLGYsZyxJLHopLGwoTSxELHAsVSxJLHopO2Vsc2V7Y29uc3QgeD1WW2cqeStmXS0xLHY9VltEKnkrTV0tMSxBPVZbVSp5K3BdLTE7dVsyKnhdPWYsdVsyKngrMV09Zyx1WzIqdl09TSx1WzIqdisxXT1ELHVbMipBXT1wLHVbMipBKzFdPVUsbVt3KytdPXgsbVt3KytdPXYsbVt3KytdPUF9fXJldHVybiBsKDAsMCxzLHMscywwKSxsKHMscywwLDAsMCxzKSx7YXR0cmlidXRlczp0aGlzLl9nZXRNZXNoQXR0cmlidXRlcyh0aGlzLnRlcnJhaW4sdSxtKSxpbmRpY2VzOm19fV9nZXRNZXNoQXR0cmlidXRlcyhkLHksVil7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguc3FydChkLmxlbmd0aCkpLGU9YS0xLHI9eS5sZW5ndGgvMixzPW5ldyBGbG9hdDMyQXJyYXkociozKSx0PW5ldyBGbG9hdDMyQXJyYXkocioyKTtmb3IobGV0IGg9MDtoPHI7aCsrKXtjb25zdCBpPXlbaCoyXSxvPXlbaCoyKzFdLGM9byphK2k7c1szKmgrMF09aS9lLS41LHNbMypoKzFdPS41LW8vZSxzWzMqaCsyXT1kW2NdLHRbMipoKzBdPWkvZSx0WzIqaCsxXT0xLW8vZX1jb25zdCBuPUsocyxWKTtyZXR1cm57cG9zaXRpb246e3ZhbHVlOnMsc2l6ZTozfSx0ZXhjb29yZDp7dmFsdWU6dCxzaXplOjJ9LG5vcm1hbDp7dmFsdWU6bixzaXplOjN9fX19Y29uc3QgbmU9ZnVuY3Rpb24oKXt2YXIgaz17fTtrLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsay5kZWNvZGU9ZnVuY3Rpb24ocixzKXtzPXN8fHt9O3ZhciB0PXMuZW5jb2RlZE1hc2tEYXRhfHxzLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbj1hKHIscy5pbnB1dE9mZnNldHx8MCx0KSxoPXMubm9EYXRhVmFsdWUhPT1udWxsP3Mubm9EYXRhVmFsdWU6ay5kZWZhdWx0Tm9EYXRhVmFsdWUsaT1kKG4scy5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxzLmVuY29kZWRNYXNrRGF0YSxoLHMucmV0dXJuTWFzayksbz17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQscGl4ZWxEYXRhOmkucmVzdWx0UGl4ZWxzLG1pblZhbHVlOmkubWluVmFsdWUsbWF4VmFsdWU6bi5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6aH07cmV0dXJuIGkucmVzdWx0TWFzayYmKG8ubWFza0RhdGE9aS5yZXN1bHRNYXNrKSxzLnJldHVybkVuY29kZWRNYXNrJiZuLm1hc2smJihvLmVuY29kZWRNYXNrRGF0YT1uLm1hc2suYml0c2V0P24ubWFzay5iaXRzZXQ6bnVsbCkscy5yZXR1cm5GaWxlSW5mbyYmKG8uZmlsZUluZm89eShuKSxzLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoby5maWxlSW5mby5iaXREZXB0aHM9VihuKSkpLG99O3ZhciBkPWZ1bmN0aW9uKHIscyx0LG4saCl7dmFyIGk9MCxvPXIucGl4ZWxzLm51bUJsb2Nrc1gsYz1yLnBpeGVscy5udW1CbG9ja3NZLHU9TWF0aC5mbG9vcihyLndpZHRoL28pLG09TWF0aC5mbG9vcihyLmhlaWdodC9jKSx3PTIqci5tYXhaRXJyb3IsbD1OdW1iZXIuTUFYX1ZBTFVFLGY7dD10fHwoci5tYXNrP3IubWFzay5iaXRzZXQ6bnVsbCk7dmFyIGcsTTtnPW5ldyBzKHIud2lkdGgqci5oZWlnaHQpLGgmJnQmJihNPW5ldyBVaW50OEFycmF5KHIud2lkdGgqci5oZWlnaHQpKTtmb3IodmFyIEQ9bmV3IEZsb2F0MzJBcnJheSh1Km0pLHAsVSxJPTA7STw9YztJKyspe3ZhciB6PUkhPT1jP206ci5oZWlnaHQlYztpZih6IT09MClmb3IodmFyIHg9MDt4PD1vO3grKyl7dmFyIHY9eCE9PW8/dTpyLndpZHRoJW87aWYodiE9PTApe3ZhciBBPUkqci53aWR0aCptK3gqdSxUPXIud2lkdGgtdixTPXIucGl4ZWxzLmJsb2Nrc1tpXSxiLEwsRjtTLmVuY29kaW5nPDI/KFMuZW5jb2Rpbmc9PT0wP2I9Uy5yYXdEYXRhOihlKFMuc3R1ZmZlZERhdGEsUy5iaXRzUGVyUGl4ZWwsUy5udW1WYWxpZFBpeGVscyxTLm9mZnNldCx3LEQsci5waXhlbHMubWF4VmFsdWUpLGI9RCksTD0wKTpTLmVuY29kaW5nPT09Mj9GPTA6Rj1TLm9mZnNldDt2YXIgQjtpZih0KWZvcihVPTA7VTx6O1UrKyl7Zm9yKEEmNyYmKEI9dFtBPj4zXSxCPDw9QSY3KSxwPTA7cDx2O3ArKylBJjd8fChCPXRbQT4+M10pLEImMTI4PyhNJiYoTVtBXT0xKSxmPVMuZW5jb2Rpbmc8Mj9iW0wrK106RixsPWw+Zj9mOmwsZ1tBKytdPWYpOihNJiYoTVtBXT0wKSxnW0ErK109biksQjw8PTE7QSs9VH1lbHNlIGlmKFMuZW5jb2Rpbmc8Milmb3IoVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylmPWJbTCsrXSxsPWw+Zj9mOmwsZ1tBKytdPWY7QSs9VH1lbHNlIGZvcihsPWw+Rj9GOmwsVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylnW0ErK109RjtBKz1UfWlmKFMuZW5jb2Rpbmc9PT0xJiZMIT09Uy5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO2krK319fXJldHVybntyZXN1bHRQaXhlbHM6ZyxyZXN1bHRNYXNrOk0sbWluVmFsdWU6bH19LHk9ZnVuY3Rpb24ocil7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnIuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246ci5maWxlVmVyc2lvbixpbWFnZVR5cGU6ci5pbWFnZVR5cGUsaGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOnIud2lkdGgsbWF4WkVycm9yOnIubWF4WkVycm9yLGVvZk9mZnNldDpyLmVvZk9mZnNldCxtYXNrOnIubWFzaz97bnVtQmxvY2tzWDpyLm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOnIubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOnIubWFzay5udW1CeXRlcyxtYXhWYWx1ZTpyLm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnIucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpyLnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOnIucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOnIucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOnIubm9EYXRhVmFsdWV9fX0sVj1mdW5jdGlvbihyKXtmb3IodmFyIHM9ci5waXhlbHMubnVtQmxvY2tzWCpyLnBpeGVscy5udW1CbG9ja3NZLHQ9e30sbj0wO248cztuKyspe3ZhciBoPXIucGl4ZWxzLmJsb2Nrc1tuXTtoLmVuY29kaW5nPT09MD90LmZsb2F0MzI9ITA6aC5lbmNvZGluZz09PTE/dFtoLmJpdHNQZXJQaXhlbF09ITA6dFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXModCl9LGE9ZnVuY3Rpb24ocixzLHQpe3ZhciBuPXt9LGg9bmV3IFVpbnQ4QXJyYXkocixzLDEwKTtpZihuLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoKSxuLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIituLmZpbGVJZGVudGlmaWVyU3RyaW5nO3MrPTEwO3ZhciBpPW5ldyBEYXRhVmlldyhyLHMsMjQpO2lmKG4uZmlsZVZlcnNpb249aS5nZXRJbnQzMigwLCEwKSxuLmltYWdlVHlwZT1pLmdldEludDMyKDQsITApLG4uaGVpZ2h0PWkuZ2V0VWludDMyKDgsITApLG4ud2lkdGg9aS5nZXRVaW50MzIoMTIsITApLG4ubWF4WkVycm9yPWkuZ2V0RmxvYXQ2NCgxNiwhMCkscys9MjQsIXQpaWYoaT1uZXcgRGF0YVZpZXcocixzLDE2KSxuLm1hc2s9e30sbi5tYXNrLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5tYXNrLm51bUJsb2Nrc1g9aS5nZXRVaW50MzIoNCwhMCksbi5tYXNrLm51bUJ5dGVzPWkuZ2V0VWludDMyKDgsITApLG4ubWFzay5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2LG4ubWFzay5udW1CeXRlcz4wKXt2YXIgbz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobi53aWR0aCpuLmhlaWdodC84KSk7aT1uZXcgRGF0YVZpZXcocixzLG4ubWFzay5udW1CeXRlcyk7dmFyIGM9aS5nZXRJbnQxNigwLCEwKSx1PTIsbT0wO2Rve2lmKGM+MClmb3IoO2MtLTspb1ttKytdPWkuZ2V0VWludDgodSsrKTtlbHNle3ZhciB3PWkuZ2V0VWludDgodSsrKTtmb3IoYz0tYztjLS07KW9bbSsrXT13fWM9aS5nZXRJbnQxNih1LCEwKSx1Kz0yfXdoaWxlKHU8bi5tYXNrLm51bUJ5dGVzKTtpZihjIT09LTMyNzY4fHxtPG8ubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjtuLm1hc2suYml0c2V0PW8scys9bi5tYXNrLm51bUJ5dGVzfWVsc2Ugbi5tYXNrLm51bUJ5dGVzfG4ubWFzay5udW1CbG9ja3NZfG4ubWFzay5tYXhWYWx1ZXx8KG4ubWFzay5iaXRzZXQ9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKG4ud2lkdGgqbi5oZWlnaHQvOCkpKTtpPW5ldyBEYXRhVmlldyhyLHMsMTYpLG4ucGl4ZWxzPXt9LG4ucGl4ZWxzLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5waXhlbHMubnVtQmxvY2tzWD1pLmdldFVpbnQzMig0LCEwKSxuLnBpeGVscy5udW1CeXRlcz1pLmdldFVpbnQzMig4LCEwKSxuLnBpeGVscy5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2O3ZhciBsPW4ucGl4ZWxzLm51bUJsb2Nrc1gsZj1uLnBpeGVscy5udW1CbG9ja3NZLGc9bCsobi53aWR0aCVsPjA/MTowKSxNPWYrKG4uaGVpZ2h0JWY+MD8xOjApO24ucGl4ZWxzLmJsb2Nrcz1uZXcgQXJyYXkoZypNKTtmb3IodmFyIEQ9MCxwPTA7cDxNO3ArKylmb3IodmFyIFU9MDtVPGc7VSsrKXt2YXIgST0wLHo9ci5ieXRlTGVuZ3RoLXM7aT1uZXcgRGF0YVZpZXcocixzLE1hdGgubWluKDEwLHopKTt2YXIgeD17fTtuLnBpeGVscy5ibG9ja3NbRCsrXT14O3ZhciB2PWkuZ2V0VWludDgoMCk7aWYoSSsrLHguZW5jb2Rpbmc9diY2Myx4LmVuY29kaW5nPjMpdGhyb3ciSW52YWxpZCBibG9jayBlbmNvZGluZyAoIit4LmVuY29kaW5nKyIpIjtpZih4LmVuY29kaW5nPT09Mil7cysrO2NvbnRpbnVlfWlmKHYhPT0wJiZ2IT09Mil7aWYodj4+PTYseC5vZmZzZXRUeXBlPXYsdj09PTIpeC5vZmZzZXQ9aS5nZXRJbnQ4KDEpLEkrKztlbHNlIGlmKHY9PT0xKXgub2Zmc2V0PWkuZ2V0SW50MTYoMSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgub2Zmc2V0PWkuZ2V0RmxvYXQzMigxLCEwKSxJKz00O2Vsc2UgdGhyb3ciSW52YWxpZCBibG9jayBvZmZzZXQgdHlwZSI7aWYoeC5lbmNvZGluZz09PTEpaWYodj1pLmdldFVpbnQ4KEkpLEkrKyx4LmJpdHNQZXJQaXhlbD12JjYzLHY+Pj02LHgubnVtVmFsaWRQaXhlbHNUeXBlPXYsdj09PTIpeC5udW1WYWxpZFBpeGVscz1pLmdldFVpbnQ4KEkpLEkrKztlbHNlIGlmKHY9PT0xKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MTYoSSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MzIoSSwhMCksSSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSJ9aWYocys9SSx4LmVuY29kaW5nIT09Myl7dmFyIEEsVDtpZih4LmVuY29kaW5nPT09MCl7dmFyIFM9KG4ucGl4ZWxzLm51bUJ5dGVzLTEpLzQ7aWYoUyE9PU1hdGguZmxvb3IoUykpdGhyb3cidW5jb21wcmVzc2VkIGJsb2NrIGhhcyBpbnZhbGlkIGxlbmd0aCI7QT1uZXcgQXJyYXlCdWZmZXIoUyo0KSxUPW5ldyBVaW50OEFycmF5KEEpLFQuc2V0KG5ldyBVaW50OEFycmF5KHIscyxTKjQpKTt2YXIgYj1uZXcgRmxvYXQzMkFycmF5KEEpO3gucmF3RGF0YT1iLHMrPVMqNH1lbHNlIGlmKHguZW5jb2Rpbmc9PT0xKXt2YXIgTD1NYXRoLmNlaWwoeC5udW1WYWxpZFBpeGVscyp4LmJpdHNQZXJQaXhlbC84KSxGPU1hdGguY2VpbChMLzQpO0E9bmV3IEFycmF5QnVmZmVyKEYqNCksVD1uZXcgVWludDhBcnJheShBKSxULnNldChuZXcgVWludDhBcnJheShyLHMsTCkpLHguc3R1ZmZlZERhdGE9bmV3IFVpbnQzMkFycmF5KEEpLHMrPUx9fX1yZXR1cm4gbi5lb2ZPZmZzZXQ9cyxufSxlPWZ1bmN0aW9uKHIscyx0LG4saCxpLG8pe3ZhciBjPSgxPDxzKS0xLHU9MCxtLHc9MCxsLGYsZz1NYXRoLmNlaWwoKG8tbikvaCksTT1yLmxlbmd0aCo0LU1hdGguY2VpbChzKnQvOCk7Zm9yKHJbci5sZW5ndGgtMV08PD04Kk0sbT0wO208dDttKyspe2lmKHc9PT0wJiYoZj1yW3UrK10sdz0zMiksdz49cylsPWY+Pj53LXMmYyx3LT1zO2Vsc2V7dmFyIEQ9cy13O2w9KGYmYyk8PEQmYyxmPXJbdSsrXSx3PTMyLUQsbCs9Zj4+Pnd9aVttXT1sPGc/bitsKmg6b31yZXR1cm4gaX07cmV0dXJuIGt9KCksaWU9ZnVuY3Rpb24oKXt2YXIgaz17dW5zdHVmZjpmdW5jdGlvbihhLGUscixzLHQsbixoLGkpe3ZhciBvPSgxPDxyKS0xLGM9MCx1LG09MCx3LGwsZixnLE09YS5sZW5ndGgqNC1NYXRoLmNlaWwocipzLzgpO2lmKGFbYS5sZW5ndGgtMV08PD04Kk0sdClmb3IodT0wO3U8czt1KyspbT09PTAmJihsPWFbYysrXSxtPTMyKSxtPj1yPyh3PWw+Pj5tLXImbyxtLT1yKTooZj1yLW0sdz0obCZvKTw8ZiZvLGw9YVtjKytdLG09MzItZix3Kz1sPj4+bSksZVt1XT10W3ddO2Vsc2UgZm9yKGc9TWF0aC5jZWlsKChpLW4pL2gpLHU9MDt1PHM7dSsrKW09PT0wJiYobD1hW2MrK10sbT0zMiksbT49cj8odz1sPj4+bS1yJm8sbS09cik6KGY9ci1tLHc9KGwmbyk8PGYmbyxsPWFbYysrXSxtPTMyLWYsdys9bD4+Pm0pLGVbdV09dzxnP24rdypoOml9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24oYSxlLHIscyx0LG4pe3ZhciBoPSgxPDxlKS0xLGk9MCxvPTAsYz0wLHU9MCxtPTAsdyxsPVtdLGY9YS5sZW5ndGgqNC1NYXRoLmNlaWwoZSpyLzgpO2FbYS5sZW5ndGgtMV08PD04KmY7dmFyIGc9TWF0aC5jZWlsKChuLXMpL3QpO2ZvcihvPTA7bzxyO28rKyl1PT09MCYmKHc9YVtpKytdLHU9MzIpLHU+PWU/KG09dz4+PnUtZSZoLHUtPWUpOihjPWUtdSxtPSh3JmgpPDxjJmgsdz1hW2krK10sdT0zMi1jLG0rPXc+Pj51KSxsW29dPW08Zz9zK20qdDpuO3JldHVybiBsLnVuc2hpZnQocyksbH0sdW5zdHVmZjI6ZnVuY3Rpb24oYSxlLHIscyx0LG4saCxpKXt2YXIgbz0oMTw8ciktMSxjPTAsdSxtPTAsdz0wLGwsZixnO2lmKHQpZm9yKHU9MDt1PHM7dSsrKW09PT0wJiYoZj1hW2MrK10sbT0zMix3PTApLG0+PXI/KGw9Zj4+PncmbyxtLT1yLHcrPXIpOihnPXItbSxsPWY+Pj53Jm8sZj1hW2MrK10sbT0zMi1nLGx8PShmJigxPDxnKS0xKTw8ci1nLHc9ZyksZVt1XT10W2xdO2Vsc2V7dmFyIE09TWF0aC5jZWlsKChpLW4pL2gpO2Zvcih1PTA7dTxzO3UrKyltPT09MCYmKGY9YVtjKytdLG09MzIsdz0wKSxtPj1yPyhsPWY+Pj53Jm8sbS09cix3Kz1yKTooZz1yLW0sbD1mPj4+dyZvLGY9YVtjKytdLG09MzItZyxsfD0oZiYoMTw8ZyktMSk8PHItZyx3PWcpLGVbdV09bDxNP24rbCpoOml9cmV0dXJuIGV9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKGEsZSxyLHMsdCxuKXt2YXIgaD0oMTw8ZSktMSxpPTAsbz0wLGM9MCx1PTAsbT0wLHc9MCxsLGY9W10sZz1NYXRoLmNlaWwoKG4tcykvdCk7Zm9yKG89MDtvPHI7bysrKXU9PT0wJiYobD1hW2krK10sdT0zMix3PTApLHU+PWU/KG09bD4+PncmaCx1LT1lLHcrPWUpOihjPWUtdSxtPWw+Pj53JmgsbD1hW2krK10sdT0zMi1jLG18PShsJigxPDxjKS0xKTw8ZS1jLHc9YyksZltvXT1tPGc/cyttKnQ6bjtyZXR1cm4gZi51bnNoaWZ0KHMpLGZ9LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbihhLGUscixzKXt2YXIgdD0oMTw8ciktMSxuPTAsaCxpPTAsbyxjLHUsbT1hLmxlbmd0aCo0LU1hdGguY2VpbChyKnMvOCk7Zm9yKGFbYS5sZW5ndGgtMV08PD04Km0saD0wO2g8cztoKyspaT09PTAmJihjPWFbbisrXSxpPTMyKSxpPj1yPyhvPWM+Pj5pLXImdCxpLT1yKToodT1yLWksbz0oYyZ0KTw8dSZ0LGM9YVtuKytdLGk9MzItdSxvKz1jPj4+aSksZVtoXT1vO3JldHVybiBlfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PSgxPDxyKS0xLG49MCxoLGk9MCxvPTAsYyx1LG07Zm9yKGg9MDtoPHM7aCsrKWk9PT0wJiYodT1hW24rK10saT0zMixvPTApLGk+PXI/KGM9dT4+Pm8mdCxpLT1yLG8rPXIpOihtPXItaSxjPXU+Pj5vJnQsdT1hW24rK10saT0zMi1tLGN8PSh1JigxPDxtKS0xKTw8ci1tLG89bSksZVtoXT1jO3JldHVybiBlfX0sZD17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbihhKXtmb3IodmFyIGU9NjU1MzUscj02NTUzNSxzPWEubGVuZ3RoLHQ9TWF0aC5mbG9vcihzLzIpLG49MDt0Oyl7dmFyIGg9dD49MzU5PzM1OTp0O3QtPWg7ZG8gZSs9YVtuKytdPDw4LHIrPWUrPWFbbisrXTt3aGlsZSgtLWgpO2U9KGUmNjU1MzUpKyhlPj4+MTYpLHI9KHImNjU1MzUpKyhyPj4+MTYpfXJldHVybiBzJjEmJihyKz1lKz1hW25dPDw4KSxlPShlJjY1NTM1KSsoZT4+PjE2KSxyPShyJjY1NTM1KSsocj4+PjE2KSwocjw8MTZ8ZSk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbihhLGUpe3ZhciByPWUucHRyLHM9bmV3IFVpbnQ4QXJyYXkoYSxyLDYpLHQ9e307aWYodC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscyksdC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK3QuZmlsZUlkZW50aWZpZXJTdHJpbmc7cis9Njt2YXIgbj1uZXcgRGF0YVZpZXcoYSxyLDgpLGg9bi5nZXRJbnQzMigwLCEwKTt0LmZpbGVWZXJzaW9uPWgscis9NCxoPj0zJiYodC5jaGVja3N1bT1uLmdldFVpbnQzMig0LCEwKSxyKz00KSxuPW5ldyBEYXRhVmlldyhhLHIsMTIpLHQuaGVpZ2h0PW4uZ2V0VWludDMyKDAsITApLHQud2lkdGg9bi5nZXRVaW50MzIoNCwhMCkscis9OCxoPj00Pyh0Lm51bURpbXM9bi5nZXRVaW50MzIoOCwhMCkscis9NCk6dC5udW1EaW1zPTEsbj1uZXcgRGF0YVZpZXcoYSxyLDQwKSx0Lm51bVZhbGlkUGl4ZWw9bi5nZXRVaW50MzIoMCwhMCksdC5taWNyb0Jsb2NrU2l6ZT1uLmdldEludDMyKDQsITApLHQuYmxvYlNpemU9bi5nZXRJbnQzMig4LCEwKSx0LmltYWdlVHlwZT1uLmdldEludDMyKDEyLCEwKSx0Lm1heFpFcnJvcj1uLmdldEZsb2F0NjQoMTYsITApLHQuek1pbj1uLmdldEZsb2F0NjQoMjQsITApLHQuek1heD1uLmdldEZsb2F0NjQoMzIsITApLHIrPTQwLGUuaGVhZGVySW5mbz10LGUucHRyPXI7dmFyIGksbztpZihoPj0zJiYobz1oPj00PzUyOjQ4LGk9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KGEsci1vLHQuYmxvYlNpemUtMTQpKSxpIT09dC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5oZWFkZXJJbmZvLHM9dGhpcy5nZXREYXRhVHlwZUFycmF5KHIuaW1hZ2VUeXBlKSx0PXIubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZShyLmltYWdlVHlwZSksbj10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyLHMsdCksaD10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyK3Qscyx0KTtlLnB0cis9Mip0O3ZhciBpLG89ITA7Zm9yKGk9MDtpPHIubnVtRGltcztpKyspaWYobltpXSE9PWhbaV0pe289ITE7YnJlYWt9cmV0dXJuIHIubWluVmFsdWVzPW4sci5tYXhWYWx1ZXM9aCxvfSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ7aWYocj09PVVpbnQ4QXJyYXkpdD1uZXcgVWludDhBcnJheShhLGUscyk7ZWxzZXt2YXIgbj1uZXcgQXJyYXlCdWZmZXIocyksaD1uZXcgVWludDhBcnJheShuKTtoLnNldChuZXcgVWludDhBcnJheShhLGUscykpLHQ9bmV3IHIobil9cmV0dXJuIHR9LHJlYWRNYXNrOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5wdHIscz1lLmhlYWRlckluZm8sdD1zLndpZHRoKnMuaGVpZ2h0LG49cy5udW1WYWxpZFBpeGVsLGg9bmV3IERhdGFWaWV3KGEsciw0KSxpPXt9O2lmKGkubnVtQnl0ZXM9aC5nZXRVaW50MzIoMCwhMCkscis9NCwobj09PTB8fHQ9PT1uKSYmaS5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgbyxjO2lmKG49PT0wKW89bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHQvOCkpLGkuYml0c2V0PW8sYz1uZXcgVWludDhBcnJheSh0KSxlLnBpeGVscy5yZXN1bHRNYXNrPWMscis9aS5udW1CeXRlcztlbHNlIGlmKGkubnVtQnl0ZXM+MCl7bz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwodC84KSksaD1uZXcgRGF0YVZpZXcoYSxyLGkubnVtQnl0ZXMpO3ZhciB1PWguZ2V0SW50MTYoMCwhMCksbT0yLHc9MCxsPTA7ZG97aWYodT4wKWZvcig7dS0tOylvW3crK109aC5nZXRVaW50OChtKyspO2Vsc2UgZm9yKGw9aC5nZXRVaW50OChtKyspLHU9LXU7dS0tOylvW3crK109bDt1PWguZ2V0SW50MTYobSwhMCksbSs9Mn13aGlsZShtPGkubnVtQnl0ZXMpO2lmKHUhPT0tMzI3Njh8fHc8by5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO2M9bmV3IFVpbnQ4QXJyYXkodCk7dmFyIGY9MCxnPTA7Zm9yKGc9MDtnPHQ7ZysrKWcmNz8oZj1vW2c+PjNdLGY8PD1nJjcpOmY9b1tnPj4zXSxmJjEyOCYmKGNbZ109MSk7ZS5waXhlbHMucmVzdWx0TWFzaz1jLGkuYml0c2V0PW8scis9aS5udW1CeXRlc31yZXR1cm4gZS5wdHI9cixlLm1hc2s9aSwhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbihhLGUscixzKXt2YXIgdD1lLnB0cixuPWUuaGVhZGVySW5mbyxoPW4ubnVtRGltcyxpPW4ud2lkdGgqbi5oZWlnaHQsbz1uLmltYWdlVHlwZSxjPW4ubnVtVmFsaWRQaXhlbCpkLmdldERhdGFUeXBlU2l6ZShvKSpoLHUsbT1lLnBpeGVscy5yZXN1bHRNYXNrO2lmKHI9PT1VaW50OEFycmF5KXU9bmV3IFVpbnQ4QXJyYXkoYSx0LGMpO2Vsc2V7dmFyIHc9bmV3IEFycmF5QnVmZmVyKGMpLGw9bmV3IFVpbnQ4QXJyYXkodyk7bC5zZXQobmV3IFVpbnQ4QXJyYXkoYSx0LGMpKSx1PW5ldyByKHcpfWlmKHUubGVuZ3RoPT09aSpoKXM/ZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKHUsaSxoLHIsITApOmUucGl4ZWxzLnJlc3VsdFBpeGVscz11O2Vsc2V7ZS5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyByKGkqaCk7dmFyIGY9MCxnPTAsTT0wLEQ9MDtpZihoPjEpe2lmKHMpe2ZvcihnPTA7ZzxpO2crKylpZihtW2ddKWZvcihEPWcsTT0wO008aDtNKyssRCs9aSllLnBpeGVscy5yZXN1bHRQaXhlbHNbRF09dVtmKytdfWVsc2UgZm9yKGc9MDtnPGk7ZysrKWlmKG1bZ10pZm9yKEQ9ZypoLE09MDtNPGg7TSsrKWUucGl4ZWxzLnJlc3VsdFBpeGVsc1tEK01dPXVbZisrXX1lbHNlIGZvcihnPTA7ZzxpO2crKyltW2ddJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzW2ddPXVbZisrXSl9cmV0dXJuIHQrPWMsZS5wdHI9dCwhMH0scmVhZEh1ZmZtYW5UcmVlOmZ1bmN0aW9uKGEsZSl7dmFyIHI9dGhpcy5IVUZGTUFOX0xVVF9CSVRTX01BWCxzPW5ldyBEYXRhVmlldyhhLGUucHRyLDE2KTtlLnB0cis9MTY7dmFyIHQ9cy5nZXRJbnQzMigwLCEwKTtpZih0PDIpdGhyb3cidW5zdXBwb3J0ZWQgSHVmZm1hbiB2ZXJzaW9uIjt2YXIgbj1zLmdldEludDMyKDQsITApLGg9cy5nZXRJbnQzMig4LCEwKSxpPXMuZ2V0SW50MzIoMTIsITApO2lmKGg+PWkpcmV0dXJuITE7dmFyIG89bmV3IFVpbnQzMkFycmF5KGktaCk7ZC5kZWNvZGVCaXRzKGEsZSxvKTt2YXIgYz1bXSx1LG0sdyxsO2Zvcih1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGNbbV09e2ZpcnN0Om9bdS1oXSxzZWNvbmQ6bnVsbH07dmFyIGY9YS5ieXRlTGVuZ3RoLWUucHRyLGc9TWF0aC5jZWlsKGYvNCksTT1uZXcgQXJyYXlCdWZmZXIoZyo0KSxEPW5ldyBVaW50OEFycmF5KE0pO0Quc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsZikpO3ZhciBwPW5ldyBVaW50MzJBcnJheShNKSxVPTAsSSx6PTA7Zm9yKEk9cFswXSx1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjAmJihjW21dLnNlY29uZD1JPDxVPj4+MzItbCwzMi1VPj1sPyhVKz1sLFU9PT0zMiYmKFU9MCx6KyssST1wW3pdKSk6KFUrPWwtMzIseisrLEk9cFt6XSxjW21dLnNlY29uZHw9ST4+PjMyLVUpKTt2YXIgeD0wLHY9MCxBPW5ldyB5O2Zvcih1PTA7dTxjLmxlbmd0aDt1KyspY1t1XSE9PXZvaWQgMCYmKHg9TWF0aC5tYXgoeCxjW3VdLmZpcnN0KSk7eD49cj92PXI6dj14O3ZhciBUPVtdLFMsYixMLEYsQixDO2Zvcih1PWg7dTxpO3UrKylpZihtPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjApaWYoUz1bbCxtXSxsPD12KWZvcihiPWNbbV0uc2Vjb25kPDx2LWwsTD0xPDx2LWwsdz0wO3c8TDt3KyspVFtifHddPVM7ZWxzZSBmb3IoYj1jW21dLnNlY29uZCxDPUEsRj1sLTE7Rj49MDtGLS0pQj1iPj4+RiYxLEI/KEMucmlnaHR8fChDLnJpZ2h0PW5ldyB5KSxDPUMucmlnaHQpOihDLmxlZnR8fChDLmxlZnQ9bmV3IHkpLEM9Qy5sZWZ0KSxGPT09MCYmIUMudmFsJiYoQy52YWw9U1sxXSk7cmV0dXJue2RlY29kZUx1dDpULG51bUJpdHNMVVRRaWNrOnYsbnVtQml0c0xVVDp4LHRyZWU6QSxzdHVmZmVkRGF0YTpwLHNyY1B0cjp6LGJpdFBvczpVfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9ZS5oZWFkZXJJbmZvLG49dC5udW1EaW1zLGg9ZS5oZWFkZXJJbmZvLmhlaWdodCxpPWUuaGVhZGVySW5mby53aWR0aCxvPWkqaCxjPXRoaXMucmVhZEh1ZmZtYW5UcmVlKGEsZSksdT1jLmRlY29kZUx1dCxtPWMudHJlZSx3PWMuc3R1ZmZlZERhdGEsbD1jLnNyY1B0cixmPWMuYml0UG9zLGc9Yy5udW1CaXRzTFVUUWljayxNPWMubnVtQml0c0xVVCxEPWUuaGVhZGVySW5mby5pbWFnZVR5cGU9PT0wPzEyODowLHAsVSxJLHo9ZS5waXhlbHMucmVzdWx0TWFzayx4LHYsQSxULFMsYixMLEY9MDtmPjAmJihsKyssZj0wKTt2YXIgQj13W2xdLEM9ZS5lbmNvZGVNb2RlPT09MSxIPW5ldyByKG8qbiksTz1ILFg7aWYobjwyfHxDKXtmb3IoWD0wO1g8bjtYKyspaWYobj4xJiYoTz1uZXcgcihILmJ1ZmZlcixvKlgsbyksRj0wKSxlLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PWkqaClmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKyxiKyspe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MD9JKz1GOlQ+MD9JKz1PW2ItaV06SSs9RixJJj0yNTUsT1tiXT1JLEY9SSk6T1tiXT1JfWVsc2UgZm9yKGI9MCxUPTA7VDxoO1QrKylmb3IoUz0wO1M8aTtTKyssYisrKWlmKHpbYl0pe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MCYmeltiLTFdP0krPUY6VD4wJiZ6W2ItaV0/SSs9T1tiLWldOkkrPUYsSSY9MjU1LE9bYl09SSxGPUkpOk9bYl09SX19ZWxzZSBmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKylpZihiPVQqaStTLCF6fHx6W2JdKWZvcihYPTA7WDxuO1grKyxiKz1vKXtpZihVPTAseD1CPDxmPj4+MzItZyx2PXgsMzItZjxnJiYoeHw9d1tsKzFdPj4+NjQtZi1nLHY9eCksdVt2XSlVPXVbdl1bMV0sZis9dVt2XVswXTtlbHNlIGZvcih4PUI8PGY+Pj4zMi1NLHY9eCwzMi1mPE0mJih4fD13W2wrMV0+Pj42NC1mLU0sdj14KSxwPW0sTD0wO0w8TTtMKyspaWYoQT14Pj4+TS1MLTEmMSxwPUE/cC5yaWdodDpwLmxlZnQsIShwLmxlZnR8fHAucmlnaHQpKXtVPXAudmFsLGY9ZitMKzE7YnJlYWt9Zj49MzImJihmLT0zMixsKyssQj13W2xdKSxJPVUtRCxPW2JdPUl9ZS5wdHI9ZS5wdHIrKGwrMSkqNCsoZj4wPzQ6MCksZS5waXhlbHMucmVzdWx0UGl4ZWxzPUgsbj4xJiYhcyYmKGUucGl4ZWxzLnJlc3VsdFBpeGVscz1kLnN3YXBEaW1lbnNpb25PcmRlcihILG8sbixyKSl9LGRlY29kZUJpdHM6ZnVuY3Rpb24oYSxlLHIscyx0KXt7dmFyIG49ZS5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPTAsbz1hLmJ5dGVMZW5ndGgtZS5wdHI+PTU/NTphLmJ5dGVMZW5ndGgtZS5wdHIsYz1uZXcgRGF0YVZpZXcoYSxlLnB0cixvKSx1PWMuZ2V0VWludDgoMCk7aSsrO3ZhciBtPXU+PjYsdz1tPT09MD80OjMtbSxsPSh1JjMyKT4wLGY9dSYzMSxnPTA7aWYodz09PTEpZz1jLmdldFVpbnQ4KGkpLGkrKztlbHNlIGlmKHc9PT0yKWc9Yy5nZXRVaW50MTYoaSwhMCksaSs9MjtlbHNlIGlmKHc9PT00KWc9Yy5nZXRVaW50MzIoaSwhMCksaSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIE09MipuLm1heFpFcnJvcixELHAsVSxJLHoseCx2LEEsVCxTPW4ubnVtRGltcz4xP24ubWF4VmFsdWVzW3RdOm4uek1heDtpZihsKXtmb3IoZS5jb3VudGVyLmx1dCsrLEE9Yy5nZXRVaW50OChpKSxpKyssST1NYXRoLmNlaWwoKEEtMSkqZi84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxlLnB0cis9aSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSx2PW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxUPTA7QS0xPj4+VDspVCsrO0k9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3g9ay51bnN0dWZmTFVUMih2LGYsQS0xLHMsTSxTKTp4PWsudW5zdHVmZkxVVCh2LGYsQS0xLHMsTSxTKSxoPj0zP2sudW5zdHVmZjIoRCxyLFQsZyx4KTprLnVuc3R1ZmYoRCxyLFQsZyx4KX1lbHNlIGUuY291bnRlci5iaXRzdHVmZmVyKyssVD1mLGUucHRyKz1pLFQ+MCYmKEk9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3M9PW51bGw/ay5vcmlnaW5hbFVuc3R1ZmYyKEQscixULGcpOmsudW5zdHVmZjIoRCxyLFQsZywhMSxzLE0sUyk6cz09bnVsbD9rLm9yaWdpbmFsVW5zdHVmZihELHIsVCxnKTprLnVuc3R1ZmYoRCxyLFQsZywhMSxzLE0sUykpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PWUuaGVhZGVySW5mbyxuPXQud2lkdGgsaD10LmhlaWdodCxpPW4qaCxvPXQubWljcm9CbG9ja1NpemUsYz10LmltYWdlVHlwZSx1PWQuZ2V0RGF0YVR5cGVTaXplKGMpLG09TWF0aC5jZWlsKG4vbyksdz1NYXRoLmNlaWwoaC9vKTtlLnBpeGVscy5udW1CbG9ja3NZPXcsZS5waXhlbHMubnVtQmxvY2tzWD1tLGUucGl4ZWxzLnB0cj0wO3ZhciBsPTAsZj0wLGc9MCxNPTAsRD0wLHA9MCxVPTAsST0wLHo9MCx4PTAsdj0wLEE9MCxUPTAsUz0wLGI9MCxMPTAsRixCLEMsSCxPLFgsJD1uZXcgcihvKm8pLGhlPWglb3x8byxjZT1uJW98fG8sUSxSLHE9dC5udW1EaW1zLGosRT1lLnBpeGVscy5yZXN1bHRNYXNrLFk9ZS5waXhlbHMucmVzdWx0UGl4ZWxzLG1lPXQuZmlsZVZlcnNpb24sSj1tZT49NT8xNDoxNSxaLEc9dC56TWF4LE47Zm9yKGc9MDtnPHc7ZysrKWZvcihEPWchPT13LTE/bzpoZSxNPTA7TTxtO00rKylmb3IocD1NIT09bS0xP286Y2Usdj1nKm4qbytNKm8sQT1uLXAsaj0wO2o8cTtqKyspe2lmKHE+MT8oTj1ZLHY9ZypuKm8rTSpvLFk9bmV3IHIoZS5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixpKmoqdSxpKSxHPXQubWF4VmFsdWVzW2pdKTpOPW51bGwsVT1hLmJ5dGVMZW5ndGgtZS5wdHIsRj1uZXcgRGF0YVZpZXcoYSxlLnB0cixNYXRoLm1pbigxMCxVKSksQj17fSxMPTAsST1GLmdldFVpbnQ4KDApLEwrKyxaPXQuZmlsZVZlcnNpb24+PTU/SSY0OjAsej1JPj42JjI1NSx4PUk+PjImSix4IT09KE0qbz4+MyZKKXx8WiYmaj09PTApdGhyb3ciaW50ZWdyaXR5IGlzc3VlIjtpZihYPUkmMyxYPjMpdGhyb3cgZS5wdHIrPUwsIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrWCsiKSI7aWYoWD09PTIpe2lmKFopaWYoRSlmb3IobD0wO2w8RDtsKyspZm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPU5bdl0pLHYrKztlbHNlIGZvcihsPTA7bDxEO2wrKylmb3IoZj0wO2Y8cDtmKyspWVt2XT1OW3ZdLHYrKztlLmNvdW50ZXIuY29uc3RhbnQrKyxlLnB0cis9TDtjb250aW51ZX1lbHNlIGlmKFg9PT0wKXtpZihaKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYoZS5jb3VudGVyLnVuY29tcHJlc3NlZCsrLGUucHRyKz1MLFQ9RCpwKnUsUz1hLmJ5dGVMZW5ndGgtZS5wdHIsVD1UPFM/VDpTLEM9bmV3IEFycmF5QnVmZmVyKFQldT09PTA/VDpUK3UtVCV1KSxIPW5ldyBVaW50OEFycmF5KEMpLEguc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsVCkpLE89bmV3IHIoQyksYj0wLEUpZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspRVt2XSYmKFlbdl09T1tiKytdKSx2Kys7dis9QX1lbHNlIGZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKVlbdisrXT1PW2IrK107dis9QX1lLnB0cis9Yip1fWVsc2UgaWYoUT1kLmdldERhdGFUeXBlVXNlZChaJiZjPDY/NDpjLHopLFI9ZC5nZXRPbmVQaXhlbChCLEwsUSxGKSxMKz1kLmdldERhdGFUeXBlU2l6ZShRKSxYPT09MylpZihlLnB0cis9TCxlLmNvdW50ZXIuY29uc3RhbnRvZmZzZXQrKyxFKWZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPVo/TWF0aC5taW4oRyxOW3ZdK1IpOlIpLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2XT1aP01hdGgubWluKEcsTlt2XStSKTpSLHYrKzt2Kz1BfWVsc2UgaWYoZS5wdHIrPUwsZC5kZWNvZGVCaXRzKGEsZSwkLFIsaiksTD0wLFopaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10rTlt2XSksdisrO3YrPUF9ZWxzZSBmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylZW3ZdPSRbTCsrXStOW3ZdLHYrKzt2Kz1BfWVsc2UgaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10pLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2KytdPSRbTCsrXTt2Kz1BfX1xPjEmJiFzJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKGUucGl4ZWxzLnJlc3VsdFBpeGVscyxpLHEscikpfSxmb3JtYXRGaWxlSW5mbzpmdW5jdGlvbihhKXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6YS5oZWFkZXJJbmZvLmZpbGVJZGVudGlmaWVyU3RyaW5nLGZpbGVWZXJzaW9uOmEuaGVhZGVySW5mby5maWxlVmVyc2lvbixpbWFnZVR5cGU6YS5oZWFkZXJJbmZvLmltYWdlVHlwZSxoZWlnaHQ6YS5oZWFkZXJJbmZvLmhlaWdodCx3aWR0aDphLmhlYWRlckluZm8ud2lkdGgsbnVtVmFsaWRQaXhlbDphLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbCxtaWNyb0Jsb2NrU2l6ZTphLmhlYWRlckluZm8ubWljcm9CbG9ja1NpemUsYmxvYlNpemU6YS5oZWFkZXJJbmZvLmJsb2JTaXplLG1heFpFcnJvcjphLmhlYWRlckluZm8ubWF4WkVycm9yLHBpeGVsVHlwZTpkLmdldFBpeGVsVHlwZShhLmhlYWRlckluZm8uaW1hZ2VUeXBlKSxlb2ZPZmZzZXQ6YS5lb2ZPZmZzZXQsbWFzazphLm1hc2s/e251bUJ5dGVzOmEubWFzay5udW1CeXRlc306bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6YS5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOmEucGl4ZWxzLm51bUJsb2Nrc1ksbWF4VmFsdWU6YS5oZWFkZXJJbmZvLnpNYXgsbWluVmFsdWU6YS5oZWFkZXJJbmZvLnpNaW4sbm9EYXRhVmFsdWU6YS5ub0RhdGFWYWx1ZX19fSxjb25zdHJ1Y3RDb25zdGFudFN1cmZhY2U6ZnVuY3Rpb24oYSxlKXt2YXIgcj1hLmhlYWRlckluZm8uek1heCxzPWEuaGVhZGVySW5mby56TWluLHQ9YS5oZWFkZXJJbmZvLm1heFZhbHVlcyxuPWEuaGVhZGVySW5mby5udW1EaW1zLGg9YS5oZWFkZXJJbmZvLmhlaWdodCphLmhlYWRlckluZm8ud2lkdGgsaT0wLG89MCxjPTAsdT1hLnBpeGVscy5yZXN1bHRNYXNrLG09YS5waXhlbHMucmVzdWx0UGl4ZWxzO2lmKHUpaWYobj4xKXtpZihlKWZvcihpPTA7aTxuO2krKylmb3IoYz1pKmgscj10W2ldLG89MDtvPGg7bysrKXVbb10mJihtW2Mrb109cik7ZWxzZSBmb3Iobz0wO288aDtvKyspaWYodVtvXSlmb3IoYz1vKm4saT0wO2k8bjtpKyspbVtjK25dPXRbaV19ZWxzZSBmb3Iobz0wO288aDtvKyspdVtvXSYmKG1bb109cik7ZWxzZSBpZihuPjEmJnMhPT1yKWlmKGUpZm9yKGk9MDtpPG47aSsrKWZvcihjPWkqaCxyPXRbaV0sbz0wO288aDtvKyspbVtjK29dPXI7ZWxzZSBmb3Iobz0wO288aDtvKyspZm9yKGM9bypuLGk9MDtpPG47aSsrKW1bYytpXT10W2ldO2Vsc2UgZm9yKG89MDtvPGgqbjtvKyspbVtvXT1yfSxnZXREYXRhVHlwZUFycmF5OmZ1bmN0aW9uKGEpe3ZhciBlO3N3aXRjaChhKXtjYXNlIDA6ZT1JbnQ4QXJyYXk7YnJlYWs7Y2FzZSAxOmU9VWludDhBcnJheTticmVhaztjYXNlIDI6ZT1JbnQxNkFycmF5O2JyZWFrO2Nhc2UgMzplPVVpbnQxNkFycmF5O2JyZWFrO2Nhc2UgNDplPUludDMyQXJyYXk7YnJlYWs7Y2FzZSA1OmU9VWludDMyQXJyYXk7YnJlYWs7Y2FzZSA2OmU9RmxvYXQzMkFycmF5O2JyZWFrO2Nhc2UgNzplPUZsb2F0NjRBcnJheTticmVhaztkZWZhdWx0OmU9RmxvYXQzMkFycmF5fXJldHVybiBlfSxnZXRQaXhlbFR5cGU6ZnVuY3Rpb24oYSl7dmFyIGU7c3dpdGNoKGEpe2Nhc2UgMDplPSJTOCI7YnJlYWs7Y2FzZSAxOmU9IlU4IjticmVhaztjYXNlIDI6ZT0iUzE2IjticmVhaztjYXNlIDM6ZT0iVTE2IjticmVhaztjYXNlIDQ6ZT0iUzMyIjticmVhaztjYXNlIDU6ZT0iVTMyIjticmVhaztjYXNlIDY6ZT0iRjMyIjticmVhaztjYXNlIDc6ZT0iRjY0IjticmVhaztkZWZhdWx0OmU9IkYzMiJ9cmV0dXJuIGV9LGlzVmFsaWRQaXhlbFZhbHVlOmZ1bmN0aW9uKGEsZSl7aWYoZT09bnVsbClyZXR1cm4hMTt2YXIgcjtzd2l0Y2goYSl7Y2FzZSAwOnI9ZT49LTEyOCYmZTw9MTI3O2JyZWFrO2Nhc2UgMTpyPWU+PTAmJmU8PTI1NTticmVhaztjYXNlIDI6cj1lPj0tMzI3NjgmJmU8PTMyNzY3O2JyZWFrO2Nhc2UgMzpyPWU+PTAmJmU8PTY1NTM2O2JyZWFrO2Nhc2UgNDpyPWU+PS0yMTQ3NDgzNjQ4JiZlPD0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2UgNTpyPWU+PTAmJmU8PTQyOTQ5NjcyOTY7YnJlYWs7Y2FzZSA2OnI9ZT49LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyJiZlPD0zNDAyNzk5OTM4NzkwMTQ4NGUyMjticmVhaztjYXNlIDc6cj1lPj0tMTc5NzY5MzEzNDg2MjMxNTdlMjkyJiZlPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDpyPSExfXJldHVybiByfSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24oYSl7dmFyIGU9MDtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMTplPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzplPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6ZT00O2JyZWFrO2Nhc2UgNzplPTg7YnJlYWs7ZGVmYXVsdDplPWF9cmV0dXJuIGV9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbihhLGUpe3ZhciByPWE7c3dpdGNoKGEpe2Nhc2UgMjpjYXNlIDQ6cj1hLWU7YnJlYWs7Y2FzZSAzOmNhc2UgNTpyPWEtMiplO2JyZWFrO2Nhc2UgNjplPT09MD9yPWE6ZT09PTE/cj0yOnI9MTticmVhaztjYXNlIDc6ZT09PTA/cj1hOnI9YS0yKmUrMTticmVhaztkZWZhdWx0OnI9YTticmVha31yZXR1cm4gcn0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9MDtzd2l0Y2gocil7Y2FzZSAwOnQ9cy5nZXRJbnQ4KGUpO2JyZWFrO2Nhc2UgMTp0PXMuZ2V0VWludDgoZSk7YnJlYWs7Y2FzZSAyOnQ9cy5nZXRJbnQxNihlLCEwKTticmVhaztjYXNlIDM6dD1zLmdldFVpbnQxNihlLCEwKTticmVhaztjYXNlIDQ6dD1zLmdldEludDMyKGUsITApO2JyZWFrO2Nhc2UgNTp0PXMuZ2V0VUludDMyKGUsITApO2JyZWFrO2Nhc2UgNjp0PXMuZ2V0RmxvYXQzMihlLCEwKTticmVhaztjYXNlIDc6dD1zLmdldEZsb2F0NjQoZSwhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIHR9LHN3YXBEaW1lbnNpb25PcmRlcjpmdW5jdGlvbihhLGUscixzLHQpe3ZhciBuPTAsaD0wLGk9MCxvPTAsYz1hO2lmKHI+MSlpZihjPW5ldyBzKGUqciksdClmb3Iobj0wO248ZTtuKyspZm9yKG89bixpPTA7aTxyO2krKyxvKz1lKWNbb109YVtoKytdO2Vsc2UgZm9yKG49MDtuPGU7bisrKWZvcihvPW4saT0wO2k8cjtpKyssbys9ZSljW2grK109YVtvXTtyZXR1cm4gY319LHk9ZnVuY3Rpb24oYSxlLHIpe3RoaXMudmFsPWEsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yfSxWPXtkZWNvZGU6ZnVuY3Rpb24oYSxlKXtlPWV8fHt9O3ZhciByPWUubm9EYXRhVmFsdWUscz0wLHQ9e307aWYodC5wdHI9ZS5pbnB1dE9mZnNldHx8MCx0LnBpeGVscz17fSwhIWQucmVhZEhlYWRlckluZm8oYSx0KSl7dmFyIG49dC5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPWQuZ2V0RGF0YVR5cGVBcnJheShuLmltYWdlVHlwZSk7aWYoaD41KXRocm93InVuc3VwcG9ydGVkIGxlcmMgdmVyc2lvbiAyLiIraDtkLnJlYWRNYXNrKGEsdCksbi5udW1WYWxpZFBpeGVsIT09bi53aWR0aCpuLmhlaWdodCYmIXQucGl4ZWxzLnJlc3VsdE1hc2smJih0LnBpeGVscy5yZXN1bHRNYXNrPWUubWFza0RhdGEpO3ZhciBvPW4ud2lkdGgqbi5oZWlnaHQ7dC5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBpKG8qbi5udW1EaW1zKSx0LmNvdW50ZXI9e29uZXN3ZWVwOjAsdW5jb21wcmVzc2VkOjAsbHV0OjAsYml0c3R1ZmZlcjowLGNvbnN0YW50OjAsY29uc3RhbnRvZmZzZXQ6MH07dmFyIGM9IWUucmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM7aWYobi5udW1WYWxpZFBpeGVsIT09MClpZihuLnpNYXg9PT1uLnpNaW4pZC5jb25zdHJ1Y3RDb25zdGFudFN1cmZhY2UodCxjKTtlbHNlIGlmKGg+PTQmJmQuY2hlY2tNaW5NYXhSYW5nZXMoYSx0KSlkLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZSh0LGMpO2Vsc2V7dmFyIHU9bmV3IERhdGFWaWV3KGEsdC5wdHIsMiksbT11LmdldFVpbnQ4KDApO2lmKHQucHRyKyssbSlkLnJlYWREYXRhT25lU3dlZXAoYSx0LGksYyk7ZWxzZSBpZihoPjEmJm4uaW1hZ2VUeXBlPD0xJiZNYXRoLmFicyhuLm1heFpFcnJvci0uNSk8MWUtNSl7dmFyIHc9dS5nZXRVaW50OCgxKTtpZih0LnB0cisrLHQuZW5jb2RlTW9kZT13LHc+Mnx8aDw0JiZ3PjEpdGhyb3ciSW52YWxpZCBIdWZmbWFuIGZsYWcgIit3O3c/ZC5yZWFkSHVmZm1hbihhLHQsaSxjKTpkLnJlYWRUaWxlcyhhLHQsaSxjKX1lbHNlIGQucmVhZFRpbGVzKGEsdCxpLGMpfXQuZW9mT2Zmc2V0PXQucHRyO3ZhciBsO2UuaW5wdXRPZmZzZXQ/KGw9dC5oZWFkZXJJbmZvLmJsb2JTaXplK2UuaW5wdXRPZmZzZXQtdC5wdHIsTWF0aC5hYnMobCk+PTEmJih0LmVvZk9mZnNldD1lLmlucHV0T2Zmc2V0K3QuaGVhZGVySW5mby5ibG9iU2l6ZSkpOihsPXQuaGVhZGVySW5mby5ibG9iU2l6ZS10LnB0cixNYXRoLmFicyhsKT49MSYmKHQuZW9mT2Zmc2V0PXQuaGVhZGVySW5mby5ibG9iU2l6ZSkpO3ZhciBmPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxwaXhlbERhdGE6dC5waXhlbHMucmVzdWx0UGl4ZWxzLG1pblZhbHVlOm4uek1pbixtYXhWYWx1ZTpuLnpNYXgsdmFsaWRQaXhlbENvdW50Om4ubnVtVmFsaWRQaXhlbCxkaW1Db3VudDpuLm51bURpbXMsZGltU3RhdHM6e21pblZhbHVlczpuLm1pblZhbHVlcyxtYXhWYWx1ZXM6bi5tYXhWYWx1ZXN9LG1hc2tEYXRhOnQucGl4ZWxzLnJlc3VsdE1hc2t9O2lmKHQucGl4ZWxzLnJlc3VsdE1hc2smJmQuaXNWYWxpZFBpeGVsVmFsdWUobi5pbWFnZVR5cGUscikpe3ZhciBnPXQucGl4ZWxzLnJlc3VsdE1hc2s7Zm9yKHM9MDtzPG87cysrKWdbc118fChmLnBpeGVsRGF0YVtzXT1yKTtmLm5vRGF0YVZhbHVlPXJ9cmV0dXJuIHQubm9EYXRhVmFsdWU9cixlLnJldHVybkZpbGVJbmZvJiYoZi5maWxlSW5mbz1kLmZvcm1hdEZpbGVJbmZvKHQpKSxmfX0sZ2V0QmFuZENvdW50OmZ1bmN0aW9uKGEpe3ZhciBlPTAscj0wLHM9e307Zm9yKHMucHRyPTAscy5waXhlbHM9e307cjxhLmJ5dGVMZW5ndGgtNTg7KWQucmVhZEhlYWRlckluZm8oYSxzKSxyKz1zLmhlYWRlckluZm8uYmxvYlNpemUsZSsrLHMucHRyPXI7cmV0dXJuIGV9fTtyZXR1cm4gVn0oKTt2YXIgdGU9ZnVuY3Rpb24oKXt2YXIgaz1uZXcgQXJyYXlCdWZmZXIoNCksZD1uZXcgVWludDhBcnJheShrKSx5PW5ldyBVaW50MzJBcnJheShrKTtyZXR1cm4geVswXT0xLGRbMF09PT0xfSgpLGFlPXtkZWNvZGU6ZnVuY3Rpb24oayxkKXtpZighdGUpdGhyb3ciQmlnIGVuZGlhbiBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZC4iO2Q9ZHx8e307dmFyIHk9ZC5pbnB1dE9mZnNldHx8MCxWPW5ldyBVaW50OEFycmF5KGsseSwxMCksYT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsViksZSxyO2lmKGEudHJpbSgpPT09IkNudFpJbWFnZSIpZT1uZSxyPTE7ZWxzZSBpZihhLnN1YnN0cmluZygwLDUpPT09IkxlcmMyIillPWllLHI9MjtlbHNlIHRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIithO2Zvcih2YXIgcz0wLHQ9ay5ieXRlTGVuZ3RoLTEwLG4saD1bXSxpLG8sYz17d2lkdGg6MCxoZWlnaHQ6MCxwaXhlbHM6W10scGl4ZWxUeXBlOmQucGl4ZWxUeXBlLG1hc2s6bnVsbCxzdGF0aXN0aWNzOltdfSx1PTA7eTx0Oyl7dmFyIG09ZS5kZWNvZGUoayx7aW5wdXRPZmZzZXQ6eSxlbmNvZGVkTWFza0RhdGE6bixtYXNrRGF0YTpvLHJldHVybk1hc2s6cz09PTAscmV0dXJuRW5jb2RlZE1hc2s6cz09PTAscmV0dXJuRmlsZUluZm86ITAscmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM6ZC5yZXR1cm5QaXhlbEludGVybGVhdmVkRGltcyxwaXhlbFR5cGU6ZC5waXhlbFR5cGV8fG51bGwsbm9EYXRhVmFsdWU6ZC5ub0RhdGFWYWx1ZXx8bnVsbH0pO3k9bS5maWxlSW5mby5lb2ZPZmZzZXQsbz1tLm1hc2tEYXRhLHM9PT0wJiYobj1tLmVuY29kZWRNYXNrRGF0YSxjLndpZHRoPW0ud2lkdGgsYy5oZWlnaHQ9bS5oZWlnaHQsYy5kaW1Db3VudD1tLmRpbUNvdW50fHwxLGMucGl4ZWxUeXBlPW0ucGl4ZWxUeXBlfHxtLmZpbGVJbmZvLnBpeGVsVHlwZSxjLm1hc2s9bykscj4xJiYobyYmaC5wdXNoKG8pLG0uZmlsZUluZm8ubWFzayYmbS5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJnUrKykscysrLGMucGl4ZWxzLnB1c2gobS5waXhlbERhdGEpLGMuc3RhdGlzdGljcy5wdXNoKHttaW5WYWx1ZTptLm1pblZhbHVlLG1heFZhbHVlOm0ubWF4VmFsdWUsbm9EYXRhVmFsdWU6bS5ub0RhdGFWYWx1ZSxkaW1TdGF0czptLmRpbVN0YXRzfSl9dmFyIHcsbCxmO2lmKHI+MSYmdT4xKXtmb3IoZj1jLndpZHRoKmMuaGVpZ2h0LGMuYmFuZE1hc2tzPWgsbz1uZXcgVWludDhBcnJheShmKSxvLnNldChoWzBdKSx3PTE7dzxoLmxlbmd0aDt3KyspZm9yKGk9aFt3XSxsPTA7bDxmO2wrKylvW2xdPW9bbF0maVtsXTtjLm1hc2tEYXRhPW99cmV0dXJuIGN9fTtjb25zdCBzZT17MDo3ZTMsMTo2ZTMsMjo1ZTMsMzo0ZTMsNDozZTMsNToyNTAwLDY6MmUzLDc6MTUwMCw4OjgwMCw5OjUwMCwxMDoyMDAsMTE6MTAwLDEyOjQwLDEzOjEyLDE0OjUsMTU6MiwxNjoxLDE3Oi41LDE4Oi4yLDE5Oi4xLDIwOi4wMX07ZnVuY3Rpb24gZmUoayl7Y29uc3R7aGVpZ2h0OmQsd2lkdGg6eSxwaXhlbHM6Vn09YWUuZGVjb2RlKGspLGE9bmV3IEZsb2F0MzJBcnJheShkKnkpO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKWFbZV09VlswXVtlXTtyZXR1cm57YXJyYXk6YSx3aWR0aDp5LGhlaWdodDpkfX1mdW5jdGlvbiBvZShrLGQseSl7bGV0IFY9ZmUoayk7eVsyXS15WzBdPDEmJihWPWxlKFYseSkpO2NvbnN0e2FycmF5OmEsd2lkdGg6ZX09VixzPW5ldyBlZShlKS5jcmVhdGVUaWxlKGEpLHQ9c2VbZF18fDA7cmV0dXJuIHMuZ2V0R2VvbWV0cnlEYXRhKHQpfWZ1bmN0aW9uIGxlKGssZCl7ZnVuY3Rpb24geShzLHQsbixoLGksbyxjLHUpe2NvbnN0IG09bmV3IEZsb2F0MzJBcnJheShpKm8pO2ZvcihsZXQgbD0wO2w8bztsKyspZm9yKGxldCBmPTA7ZjxpO2YrKyl7Y29uc3QgZz0obCtoKSp0KyhmK24pLE09bCppK2Y7bVtNXT1zW2ddfWNvbnN0IHc9bmV3IEZsb2F0MzJBcnJheSh1KmMpO2ZvcihsZXQgbD0wO2w8dTtsKyspZm9yKGxldCBmPTA7ZjxjO2YrKyl7Y29uc3QgZz1sKnUrZixNPU1hdGgucm91bmQoZipvL3UpLHA9TWF0aC5yb3VuZChsKmkvYykqaStNO3dbZ109bVtwXX1yZXR1cm4gd31jb25zdCBWPXVlKGQsay53aWR0aCksYT1WLnN3KzEsZT1WLnNoKzE7cmV0dXJue2FycmF5Onkoay5hcnJheSxrLndpZHRoLFYuc3gsVi5zeSxWLnN3LFYuc2gsYSxlKSx3aWR0aDphLGhlaWdodDplfX1mdW5jdGlvbiB1ZShrLGQpe2NvbnN0IHk9TWF0aC5mbG9vcihrWzBdKmQpLFY9TWF0aC5mbG9vcihrWzFdKmQpLGE9TWF0aC5mbG9vcigoa1syXS1rWzBdKSpkKSxlPU1hdGguZmxvb3IoKGtbM10ta1sxXSkqZCk7cmV0dXJue3N4Onksc3k6VixzdzphLHNoOmV9fXNlbGYub25tZXNzYWdlPWs9Pntjb25zdCBkPWsuZGF0YSx5PW9lKGQuZGVtRGF0YSxkLnosZC5jbGlwQm91bmRzKTtzZWxmLnBvc3RNZXNzYWdlKHkpfX0pKCk7Cg==",Ey=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),pu=typeof self<"u"&&self.Blob&&new Blob([Ey(fu)],{type:"text/javascript;charset=utf-8"});function $y(i){let e;try{if(e=pu&&(self.URL||self.webkitURL).createObjectURL(pu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+fu,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const qy=function(){var i={};i.defaultNoDataValue=-34027999387901484e22,i.decode=function(a,c){c=c||{};var u=c.encodedMaskData||c.encodedMaskData===null,d=r(a,c.inputOffset||0,u),m=c.noDataValue!==null?c.noDataValue:i.defaultNoDataValue,f=e(d,c.pixelType||Float32Array,c.encodedMaskData,m,c.returnMask),g={width:d.width,height:d.height,pixelData:f.resultPixels,minValue:f.minValue,maxValue:d.pixels.maxValue,noDataValue:m};return f.resultMask&&(g.maskData=f.resultMask),c.returnEncodedMask&&d.mask&&(g.encodedMaskData=d.mask.bitset?d.mask.bitset:null),c.returnFileInfo&&(g.fileInfo=t(d),c.computeUsedBitDepths&&(g.fileInfo.bitDepths=n(d))),g};var e=function(a,c,u,d,m){var f=0,g=a.pixels.numBlocksX,_=a.pixels.numBlocksY,w=Math.floor(a.width/g),x=Math.floor(a.height/_),b=2*a.maxZError,L=Number.MAX_VALUE,M;u=u||(a.mask?a.mask.bitset:null);var C,Z;C=new c(a.width*a.height),m&&u&&(Z=new Uint8Array(a.width*a.height));for(var z=new Float32Array(w*x),D,X,I=0;I<=_;I++){var K=I!==_?x:a.height%_;if(K!==0)for(var V=0;V<=g;V++){var G=V!==g?w:a.width%g;if(G!==0){var k=I*a.width*x+V*w,j=a.width-G,Y=a.pixels.blocks[f],H,Q,ie;Y.encoding<2?(Y.encoding===0?H=Y.rawData:(o(Y.stuffedData,Y.bitsPerPixel,Y.numValidPixels,Y.offset,b,z,a.pixels.maxValue),H=z),Q=0):Y.encoding===2?ie=0:ie=Y.offset;var re;if(u)for(X=0;X<K;X++){for(k&7&&(re=u[k>>3],re<<=k&7),D=0;D<G;D++)k&7||(re=u[k>>3]),re&128?(Z&&(Z[k]=1),M=Y.encoding<2?H[Q++]:ie,L=L>M?M:L,C[k++]=M):(Z&&(Z[k]=0),C[k++]=d),re<<=1;k+=j}else if(Y.encoding<2)for(X=0;X<K;X++){for(D=0;D<G;D++)M=H[Q++],L=L>M?M:L,C[k++]=M;k+=j}else for(L=L>ie?ie:L,X=0;X<K;X++){for(D=0;D<G;D++)C[k++]=ie;k+=j}if(Y.encoding===1&&Q!==Y.numValidPixels)throw"Block and Mask do not match";f++}}}return{resultPixels:C,resultMask:Z,minValue:L}},t=function(a){return{fileIdentifierString:a.fileIdentifierString,fileVersion:a.fileVersion,imageType:a.imageType,height:a.height,width:a.width,maxZError:a.maxZError,eofOffset:a.eofOffset,mask:a.mask?{numBlocksX:a.mask.numBlocksX,numBlocksY:a.mask.numBlocksY,numBytes:a.mask.numBytes,maxValue:a.mask.maxValue}:null,pixels:{numBlocksX:a.pixels.numBlocksX,numBlocksY:a.pixels.numBlocksY,numBytes:a.pixels.numBytes,maxValue:a.pixels.maxValue,noDataValue:a.noDataValue}}},n=function(a){for(var c=a.pixels.numBlocksX*a.pixels.numBlocksY,u={},d=0;d<c;d++){var m=a.pixels.blocks[d];m.encoding===0?u.float32=!0:m.encoding===1?u[m.bitsPerPixel]=!0:u[0]=!0}return Object.keys(u)},r=function(a,c,u){var d={},m=new Uint8Array(a,c,10);if(d.fileIdentifierString=String.fromCharCode.apply(null,m),d.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+d.fileIdentifierString;c+=10;var f=new DataView(a,c,24);if(d.fileVersion=f.getInt32(0,!0),d.imageType=f.getInt32(4,!0),d.height=f.getUint32(8,!0),d.width=f.getUint32(12,!0),d.maxZError=f.getFloat64(16,!0),c+=24,!u)if(f=new DataView(a,c,16),d.mask={},d.mask.numBlocksY=f.getUint32(0,!0),d.mask.numBlocksX=f.getUint32(4,!0),d.mask.numBytes=f.getUint32(8,!0),d.mask.maxValue=f.getFloat32(12,!0),c+=16,d.mask.numBytes>0){var g=new Uint8Array(Math.ceil(d.width*d.height/8));f=new DataView(a,c,d.mask.numBytes);var _=f.getInt16(0,!0),w=2,x=0;do{if(_>0)for(;_--;)g[x++]=f.getUint8(w++);else{var b=f.getUint8(w++);for(_=-_;_--;)g[x++]=b}_=f.getInt16(w,!0),w+=2}while(w<d.mask.numBytes);if(_!==-32768||x<g.length)throw"Unexpected end of mask RLE encoding";d.mask.bitset=g,c+=d.mask.numBytes}else d.mask.numBytes|d.mask.numBlocksY|d.mask.maxValue||(d.mask.bitset=new Uint8Array(Math.ceil(d.width*d.height/8)));f=new DataView(a,c,16),d.pixels={},d.pixels.numBlocksY=f.getUint32(0,!0),d.pixels.numBlocksX=f.getUint32(4,!0),d.pixels.numBytes=f.getUint32(8,!0),d.pixels.maxValue=f.getFloat32(12,!0),c+=16;var L=d.pixels.numBlocksX,M=d.pixels.numBlocksY,C=L+(d.width%L>0?1:0),Z=M+(d.height%M>0?1:0);d.pixels.blocks=new Array(C*Z);for(var z=0,D=0;D<Z;D++)for(var X=0;X<C;X++){var I=0,K=a.byteLength-c;f=new DataView(a,c,Math.min(10,K));var V={};d.pixels.blocks[z++]=V;var G=f.getUint8(0);if(I++,V.encoding=G&63,V.encoding>3)throw"Invalid block encoding ("+V.encoding+")";if(V.encoding===2){c++;continue}if(G!==0&&G!==2){if(G>>=6,V.offsetType=G,G===2)V.offset=f.getInt8(1),I++;else if(G===1)V.offset=f.getInt16(1,!0),I+=2;else if(G===0)V.offset=f.getFloat32(1,!0),I+=4;else throw"Invalid block offset type";if(V.encoding===1)if(G=f.getUint8(I),I++,V.bitsPerPixel=G&63,G>>=6,V.numValidPixelsType=G,G===2)V.numValidPixels=f.getUint8(I),I++;else if(G===1)V.numValidPixels=f.getUint16(I,!0),I+=2;else if(G===0)V.numValidPixels=f.getUint32(I,!0),I+=4;else throw"Invalid valid pixel count type"}if(c+=I,V.encoding!==3){var k,j;if(V.encoding===0){var Y=(d.pixels.numBytes-1)/4;if(Y!==Math.floor(Y))throw"uncompressed block has invalid length";k=new ArrayBuffer(Y*4),j=new Uint8Array(k),j.set(new Uint8Array(a,c,Y*4));var H=new Float32Array(k);V.rawData=H,c+=Y*4}else if(V.encoding===1){var Q=Math.ceil(V.numValidPixels*V.bitsPerPixel/8),ie=Math.ceil(Q/4);k=new ArrayBuffer(ie*4),j=new Uint8Array(k),j.set(new Uint8Array(a,c,Q)),V.stuffedData=new Uint32Array(k),c+=Q}}}return d.eofOffset=c,d},o=function(a,c,u,d,m,f,g){var _=(1<<c)-1,w=0,x,b=0,L,M,C=Math.ceil((g-d)/m),Z=a.length*4-Math.ceil(c*u/8);for(a[a.length-1]<<=8*Z,x=0;x<u;x++){if(b===0&&(M=a[w++],b=32),b>=c)L=M>>>b-c&_,b-=c;else{var z=c-b;L=(M&_)<<z&_,M=a[w++],b=32-z,L+=M>>>b}f[x]=L<C?d+L*m:g}return f};return i}(),e_=function(){var i={unstuff:function(r,o,a,c,u,d,m,f){var g=(1<<a)-1,_=0,w,x=0,b,L,M,C,Z=r.length*4-Math.ceil(a*c/8);if(r[r.length-1]<<=8*Z,u)for(w=0;w<c;w++)x===0&&(L=r[_++],x=32),x>=a?(b=L>>>x-a&g,x-=a):(M=a-x,b=(L&g)<<M&g,L=r[_++],x=32-M,b+=L>>>x),o[w]=u[b];else for(C=Math.ceil((f-d)/m),w=0;w<c;w++)x===0&&(L=r[_++],x=32),x>=a?(b=L>>>x-a&g,x-=a):(M=a-x,b=(L&g)<<M&g,L=r[_++],x=32-M,b+=L>>>x),o[w]=b<C?d+b*m:f},unstuffLUT:function(r,o,a,c,u,d){var m=(1<<o)-1,f=0,g=0,_=0,w=0,x=0,b,L=[],M=r.length*4-Math.ceil(o*a/8);r[r.length-1]<<=8*M;var C=Math.ceil((d-c)/u);for(g=0;g<a;g++)w===0&&(b=r[f++],w=32),w>=o?(x=b>>>w-o&m,w-=o):(_=o-w,x=(b&m)<<_&m,b=r[f++],w=32-_,x+=b>>>w),L[g]=x<C?c+x*u:d;return L.unshift(c),L},unstuff2:function(r,o,a,c,u,d,m,f){var g=(1<<a)-1,_=0,w,x=0,b=0,L,M,C;if(u)for(w=0;w<c;w++)x===0&&(M=r[_++],x=32,b=0),x>=a?(L=M>>>b&g,x-=a,b+=a):(C=a-x,L=M>>>b&g,M=r[_++],x=32-C,L|=(M&(1<<C)-1)<<a-C,b=C),o[w]=u[L];else{var Z=Math.ceil((f-d)/m);for(w=0;w<c;w++)x===0&&(M=r[_++],x=32,b=0),x>=a?(L=M>>>b&g,x-=a,b+=a):(C=a-x,L=M>>>b&g,M=r[_++],x=32-C,L|=(M&(1<<C)-1)<<a-C,b=C),o[w]=L<Z?d+L*m:f}return o},unstuffLUT2:function(r,o,a,c,u,d){var m=(1<<o)-1,f=0,g=0,_=0,w=0,x=0,b=0,L,M=[],C=Math.ceil((d-c)/u);for(g=0;g<a;g++)w===0&&(L=r[f++],w=32,b=0),w>=o?(x=L>>>b&m,w-=o,b+=o):(_=o-w,x=L>>>b&m,L=r[f++],w=32-_,x|=(L&(1<<_)-1)<<o-_,b=_),M[g]=x<C?c+x*u:d;return M.unshift(c),M},originalUnstuff:function(r,o,a,c){var u=(1<<a)-1,d=0,m,f=0,g,_,w,x=r.length*4-Math.ceil(a*c/8);for(r[r.length-1]<<=8*x,m=0;m<c;m++)f===0&&(_=r[d++],f=32),f>=a?(g=_>>>f-a&u,f-=a):(w=a-f,g=(_&u)<<w&u,_=r[d++],f=32-w,g+=_>>>f),o[m]=g;return o},originalUnstuff2:function(r,o,a,c){var u=(1<<a)-1,d=0,m,f=0,g=0,_,w,x;for(m=0;m<c;m++)f===0&&(w=r[d++],f=32,g=0),f>=a?(_=w>>>g&u,f-=a,g+=a):(x=a-f,_=w>>>g&u,w=r[d++],f=32-x,_|=(w&(1<<x)-1)<<a-x,g=x),o[m]=_;return o}},e={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(r){for(var o=65535,a=65535,c=r.length,u=Math.floor(c/2),d=0;u;){var m=u>=359?359:u;u-=m;do o+=r[d++]<<8,a+=o+=r[d++];while(--m);o=(o&65535)+(o>>>16),a=(a&65535)+(a>>>16)}return c&1&&(a+=o+=r[d]<<8),o=(o&65535)+(o>>>16),a=(a&65535)+(a>>>16),(a<<16|o)>>>0},readHeaderInfo:function(r,o){var a=o.ptr,c=new Uint8Array(r,a,6),u={};if(u.fileIdentifierString=String.fromCharCode.apply(null,c),u.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+u.fileIdentifierString;a+=6;var d=new DataView(r,a,8),m=d.getInt32(0,!0);u.fileVersion=m,a+=4,m>=3&&(u.checksum=d.getUint32(4,!0),a+=4),d=new DataView(r,a,12),u.height=d.getUint32(0,!0),u.width=d.getUint32(4,!0),a+=8,m>=4?(u.numDims=d.getUint32(8,!0),a+=4):u.numDims=1,d=new DataView(r,a,40),u.numValidPixel=d.getUint32(0,!0),u.microBlockSize=d.getInt32(4,!0),u.blobSize=d.getInt32(8,!0),u.imageType=d.getInt32(12,!0),u.maxZError=d.getFloat64(16,!0),u.zMin=d.getFloat64(24,!0),u.zMax=d.getFloat64(32,!0),a+=40,o.headerInfo=u,o.ptr=a;var f,g;if(m>=3&&(g=m>=4?52:48,f=this.computeChecksumFletcher32(new Uint8Array(r,a-g,u.blobSize-14)),f!==u.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(r,o){var a=o.headerInfo,c=this.getDataTypeArray(a.imageType),u=a.numDims*this.getDataTypeSize(a.imageType),d=this.readSubArray(r,o.ptr,c,u),m=this.readSubArray(r,o.ptr+u,c,u);o.ptr+=2*u;var f,g=!0;for(f=0;f<a.numDims;f++)if(d[f]!==m[f]){g=!1;break}return a.minValues=d,a.maxValues=m,g},readSubArray:function(r,o,a,c){var u;if(a===Uint8Array)u=new Uint8Array(r,o,c);else{var d=new ArrayBuffer(c),m=new Uint8Array(d);m.set(new Uint8Array(r,o,c)),u=new a(d)}return u},readMask:function(r,o){var a=o.ptr,c=o.headerInfo,u=c.width*c.height,d=c.numValidPixel,m=new DataView(r,a,4),f={};if(f.numBytes=m.getUint32(0,!0),a+=4,(d===0||u===d)&&f.numBytes!==0)throw"invalid mask";var g,_;if(d===0)g=new Uint8Array(Math.ceil(u/8)),f.bitset=g,_=new Uint8Array(u),o.pixels.resultMask=_,a+=f.numBytes;else if(f.numBytes>0){g=new Uint8Array(Math.ceil(u/8)),m=new DataView(r,a,f.numBytes);var w=m.getInt16(0,!0),x=2,b=0,L=0;do{if(w>0)for(;w--;)g[b++]=m.getUint8(x++);else for(L=m.getUint8(x++),w=-w;w--;)g[b++]=L;w=m.getInt16(x,!0),x+=2}while(x<f.numBytes);if(w!==-32768||b<g.length)throw"Unexpected end of mask RLE encoding";_=new Uint8Array(u);var M=0,C=0;for(C=0;C<u;C++)C&7?(M=g[C>>3],M<<=C&7):M=g[C>>3],M&128&&(_[C]=1);o.pixels.resultMask=_,f.bitset=g,a+=f.numBytes}return o.ptr=a,o.mask=f,!0},readDataOneSweep:function(r,o,a,c){var u=o.ptr,d=o.headerInfo,m=d.numDims,f=d.width*d.height,g=d.imageType,_=d.numValidPixel*e.getDataTypeSize(g)*m,w,x=o.pixels.resultMask;if(a===Uint8Array)w=new Uint8Array(r,u,_);else{var b=new ArrayBuffer(_),L=new Uint8Array(b);L.set(new Uint8Array(r,u,_)),w=new a(b)}if(w.length===f*m)c?o.pixels.resultPixels=e.swapDimensionOrder(w,f,m,a,!0):o.pixels.resultPixels=w;else{o.pixels.resultPixels=new a(f*m);var M=0,C=0,Z=0,z=0;if(m>1){if(c){for(C=0;C<f;C++)if(x[C])for(z=C,Z=0;Z<m;Z++,z+=f)o.pixels.resultPixels[z]=w[M++]}else for(C=0;C<f;C++)if(x[C])for(z=C*m,Z=0;Z<m;Z++)o.pixels.resultPixels[z+Z]=w[M++]}else for(C=0;C<f;C++)x[C]&&(o.pixels.resultPixels[C]=w[M++])}return u+=_,o.ptr=u,!0},readHuffmanTree:function(r,o){var a=this.HUFFMAN_LUT_BITS_MAX,c=new DataView(r,o.ptr,16);o.ptr+=16;var u=c.getInt32(0,!0);if(u<2)throw"unsupported Huffman version";var d=c.getInt32(4,!0),m=c.getInt32(8,!0),f=c.getInt32(12,!0);if(m>=f)return!1;var g=new Uint32Array(f-m);e.decodeBits(r,o,g);var _=[],w,x,b,L;for(w=m;w<f;w++)x=w-(w<d?0:d),_[x]={first:g[w-m],second:null};var M=r.byteLength-o.ptr,C=Math.ceil(M/4),Z=new ArrayBuffer(C*4),z=new Uint8Array(Z);z.set(new Uint8Array(r,o.ptr,M));var D=new Uint32Array(Z),X=0,I,K=0;for(I=D[0],w=m;w<f;w++)x=w-(w<d?0:d),L=_[x].first,L>0&&(_[x].second=I<<X>>>32-L,32-X>=L?(X+=L,X===32&&(X=0,K++,I=D[K])):(X+=L-32,K++,I=D[K],_[x].second|=I>>>32-X));var V=0,G=0,k=new t;for(w=0;w<_.length;w++)_[w]!==void 0&&(V=Math.max(V,_[w].first));V>=a?G=a:G=V;var j=[],Y,H,Q,ie,re,le;for(w=m;w<f;w++)if(x=w-(w<d?0:d),L=_[x].first,L>0)if(Y=[L,x],L<=G)for(H=_[x].second<<G-L,Q=1<<G-L,b=0;b<Q;b++)j[H|b]=Y;else for(H=_[x].second,le=k,ie=L-1;ie>=0;ie--)re=H>>>ie&1,re?(le.right||(le.right=new t),le=le.right):(le.left||(le.left=new t),le=le.left),ie===0&&!le.val&&(le.val=Y[1]);return{decodeLut:j,numBitsLUTQick:G,numBitsLUT:V,tree:k,stuffedData:D,srcPtr:K,bitPos:X}},readHuffman:function(r,o,a,c){var u=o.headerInfo,d=u.numDims,m=o.headerInfo.height,f=o.headerInfo.width,g=f*m,_=this.readHuffmanTree(r,o),w=_.decodeLut,x=_.tree,b=_.stuffedData,L=_.srcPtr,M=_.bitPos,C=_.numBitsLUTQick,Z=_.numBitsLUT,z=o.headerInfo.imageType===0?128:0,D,X,I,K=o.pixels.resultMask,V,G,k,j,Y,H,Q,ie=0;M>0&&(L++,M=0);var re=b[L],le=o.encodeMode===1,de=new a(g*d),ge=de,fe;if(d<2||le){for(fe=0;fe<d;fe++)if(d>1&&(ge=new a(de.buffer,g*fe,g),ie=0),o.headerInfo.numValidPixel===f*m)for(H=0,j=0;j<m;j++)for(Y=0;Y<f;Y++,H++){if(X=0,V=re<<M>>>32-C,G=V,32-M<C&&(V|=b[L+1]>>>64-M-C,G=V),w[G])X=w[G][1],M+=w[G][0];else for(V=re<<M>>>32-Z,G=V,32-M<Z&&(V|=b[L+1]>>>64-M-Z,G=V),D=x,Q=0;Q<Z;Q++)if(k=V>>>Z-Q-1&1,D=k?D.right:D.left,!(D.left||D.right)){X=D.val,M=M+Q+1;break}M>=32&&(M-=32,L++,re=b[L]),I=X-z,le?(Y>0?I+=ie:j>0?I+=ge[H-f]:I+=ie,I&=255,ge[H]=I,ie=I):ge[H]=I}else for(H=0,j=0;j<m;j++)for(Y=0;Y<f;Y++,H++)if(K[H]){if(X=0,V=re<<M>>>32-C,G=V,32-M<C&&(V|=b[L+1]>>>64-M-C,G=V),w[G])X=w[G][1],M+=w[G][0];else for(V=re<<M>>>32-Z,G=V,32-M<Z&&(V|=b[L+1]>>>64-M-Z,G=V),D=x,Q=0;Q<Z;Q++)if(k=V>>>Z-Q-1&1,D=k?D.right:D.left,!(D.left||D.right)){X=D.val,M=M+Q+1;break}M>=32&&(M-=32,L++,re=b[L]),I=X-z,le?(Y>0&&K[H-1]?I+=ie:j>0&&K[H-f]?I+=ge[H-f]:I+=ie,I&=255,ge[H]=I,ie=I):ge[H]=I}}else for(H=0,j=0;j<m;j++)for(Y=0;Y<f;Y++)if(H=j*f+Y,!K||K[H])for(fe=0;fe<d;fe++,H+=g){if(X=0,V=re<<M>>>32-C,G=V,32-M<C&&(V|=b[L+1]>>>64-M-C,G=V),w[G])X=w[G][1],M+=w[G][0];else for(V=re<<M>>>32-Z,G=V,32-M<Z&&(V|=b[L+1]>>>64-M-Z,G=V),D=x,Q=0;Q<Z;Q++)if(k=V>>>Z-Q-1&1,D=k?D.right:D.left,!(D.left||D.right)){X=D.val,M=M+Q+1;break}M>=32&&(M-=32,L++,re=b[L]),I=X-z,ge[H]=I}o.ptr=o.ptr+(L+1)*4+(M>0?4:0),o.pixels.resultPixels=de,d>1&&!c&&(o.pixels.resultPixels=e.swapDimensionOrder(de,g,d,a))},decodeBits:function(r,o,a,c,u){{var d=o.headerInfo,m=d.fileVersion,f=0,g=r.byteLength-o.ptr>=5?5:r.byteLength-o.ptr,_=new DataView(r,o.ptr,g),w=_.getUint8(0);f++;var x=w>>6,b=x===0?4:3-x,L=(w&32)>0,M=w&31,C=0;if(b===1)C=_.getUint8(f),f++;else if(b===2)C=_.getUint16(f,!0),f+=2;else if(b===4)C=_.getUint32(f,!0),f+=4;else throw"Invalid valid pixel count type";var Z=2*d.maxZError,z,D,X,I,K,V,G,k,j,Y=d.numDims>1?d.maxValues[u]:d.zMax;if(L){for(o.counter.lut++,k=_.getUint8(f),f++,I=Math.ceil((k-1)*M/8),K=Math.ceil(I/4),D=new ArrayBuffer(K*4),X=new Uint8Array(D),o.ptr+=f,X.set(new Uint8Array(r,o.ptr,I)),G=new Uint32Array(D),o.ptr+=I,j=0;k-1>>>j;)j++;I=Math.ceil(C*j/8),K=Math.ceil(I/4),D=new ArrayBuffer(K*4),X=new Uint8Array(D),X.set(new Uint8Array(r,o.ptr,I)),z=new Uint32Array(D),o.ptr+=I,m>=3?V=i.unstuffLUT2(G,M,k-1,c,Z,Y):V=i.unstuffLUT(G,M,k-1,c,Z,Y),m>=3?i.unstuff2(z,a,j,C,V):i.unstuff(z,a,j,C,V)}else o.counter.bitstuffer++,j=M,o.ptr+=f,j>0&&(I=Math.ceil(C*j/8),K=Math.ceil(I/4),D=new ArrayBuffer(K*4),X=new Uint8Array(D),X.set(new Uint8Array(r,o.ptr,I)),z=new Uint32Array(D),o.ptr+=I,m>=3?c==null?i.originalUnstuff2(z,a,j,C):i.unstuff2(z,a,j,C,!1,c,Z,Y):c==null?i.originalUnstuff(z,a,j,C):i.unstuff(z,a,j,C,!1,c,Z,Y))}},readTiles:function(r,o,a,c){var u=o.headerInfo,d=u.width,m=u.height,f=d*m,g=u.microBlockSize,_=u.imageType,w=e.getDataTypeSize(_),x=Math.ceil(d/g),b=Math.ceil(m/g);o.pixels.numBlocksY=b,o.pixels.numBlocksX=x,o.pixels.ptr=0;var L=0,M=0,C=0,Z=0,z=0,D=0,X=0,I=0,K=0,V=0,G=0,k=0,j=0,Y=0,H=0,Q=0,ie,re,le,de,ge,fe,Se=new a(g*g),nt=m%g||g,rt=d%g||g,dt,Je,Be=u.numDims,Ye,it=o.pixels.resultMask,De=o.pixels.resultPixels,Vt=u.fileVersion,Nt=Vt>=5?14:15,Ce,st=u.zMax,ft;for(C=0;C<b;C++)for(z=C!==b-1?g:nt,Z=0;Z<x;Z++)for(D=Z!==x-1?g:rt,G=C*d*g+Z*g,k=d-D,Ye=0;Ye<Be;Ye++){if(Be>1?(ft=De,G=C*d*g+Z*g,De=new a(o.pixels.resultPixels.buffer,f*Ye*w,f),st=u.maxValues[Ye]):ft=null,X=r.byteLength-o.ptr,ie=new DataView(r,o.ptr,Math.min(10,X)),re={},Q=0,I=ie.getUint8(0),Q++,Ce=u.fileVersion>=5?I&4:0,K=I>>6&255,V=I>>2&Nt,V!==(Z*g>>3&Nt)||Ce&&Ye===0)throw"integrity issue";if(fe=I&3,fe>3)throw o.ptr+=Q,"Invalid block encoding ("+fe+")";if(fe===2){if(Ce)if(it)for(L=0;L<z;L++)for(M=0;M<D;M++)it[G]&&(De[G]=ft[G]),G++;else for(L=0;L<z;L++)for(M=0;M<D;M++)De[G]=ft[G],G++;o.counter.constant++,o.ptr+=Q;continue}else if(fe===0){if(Ce)throw"integrity issue";if(o.counter.uncompressed++,o.ptr+=Q,j=z*D*w,Y=r.byteLength-o.ptr,j=j<Y?j:Y,le=new ArrayBuffer(j%w===0?j:j+w-j%w),de=new Uint8Array(le),de.set(new Uint8Array(r,o.ptr,j)),ge=new a(le),H=0,it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=ge[H++]),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G++]=ge[H++];G+=k}o.ptr+=H*w}else if(dt=e.getDataTypeUsed(Ce&&_<6?4:_,K),Je=e.getOnePixel(re,Q,dt,ie),Q+=e.getDataTypeSize(dt),fe===3)if(o.ptr+=Q,o.counter.constantoffset++,it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=Ce?Math.min(st,ft[G]+Je):Je),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G]=Ce?Math.min(st,ft[G]+Je):Je,G++;G+=k}else if(o.ptr+=Q,e.decodeBits(r,o,Se,Je,Ye),Q=0,Ce)if(it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=Se[Q++]+ft[G]),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G]=Se[Q++]+ft[G],G++;G+=k}else if(it)for(L=0;L<z;L++){for(M=0;M<D;M++)it[G]&&(De[G]=Se[Q++]),G++;G+=k}else for(L=0;L<z;L++){for(M=0;M<D;M++)De[G++]=Se[Q++];G+=k}}Be>1&&!c&&(o.pixels.resultPixels=e.swapDimensionOrder(o.pixels.resultPixels,f,Be,a))},formatFileInfo:function(r){return{fileIdentifierString:r.headerInfo.fileIdentifierString,fileVersion:r.headerInfo.fileVersion,imageType:r.headerInfo.imageType,height:r.headerInfo.height,width:r.headerInfo.width,numValidPixel:r.headerInfo.numValidPixel,microBlockSize:r.headerInfo.microBlockSize,blobSize:r.headerInfo.blobSize,maxZError:r.headerInfo.maxZError,pixelType:e.getPixelType(r.headerInfo.imageType),eofOffset:r.eofOffset,mask:r.mask?{numBytes:r.mask.numBytes}:null,pixels:{numBlocksX:r.pixels.numBlocksX,numBlocksY:r.pixels.numBlocksY,maxValue:r.headerInfo.zMax,minValue:r.headerInfo.zMin,noDataValue:r.noDataValue}}},constructConstantSurface:function(r,o){var a=r.headerInfo.zMax,c=r.headerInfo.zMin,u=r.headerInfo.maxValues,d=r.headerInfo.numDims,m=r.headerInfo.height*r.headerInfo.width,f=0,g=0,_=0,w=r.pixels.resultMask,x=r.pixels.resultPixels;if(w)if(d>1){if(o)for(f=0;f<d;f++)for(_=f*m,a=u[f],g=0;g<m;g++)w[g]&&(x[_+g]=a);else for(g=0;g<m;g++)if(w[g])for(_=g*d,f=0;f<d;f++)x[_+d]=u[f]}else for(g=0;g<m;g++)w[g]&&(x[g]=a);else if(d>1&&c!==a)if(o)for(f=0;f<d;f++)for(_=f*m,a=u[f],g=0;g<m;g++)x[_+g]=a;else for(g=0;g<m;g++)for(_=g*d,f=0;f<d;f++)x[_+f]=u[f];else for(g=0;g<m*d;g++)x[g]=a},getDataTypeArray:function(r){var o;switch(r){case 0:o=Int8Array;break;case 1:o=Uint8Array;break;case 2:o=Int16Array;break;case 3:o=Uint16Array;break;case 4:o=Int32Array;break;case 5:o=Uint32Array;break;case 6:o=Float32Array;break;case 7:o=Float64Array;break;default:o=Float32Array}return o},getPixelType:function(r){var o;switch(r){case 0:o="S8";break;case 1:o="U8";break;case 2:o="S16";break;case 3:o="U16";break;case 4:o="S32";break;case 5:o="U32";break;case 6:o="F32";break;case 7:o="F64";break;default:o="F32"}return o},isValidPixelValue:function(r,o){if(o==null)return!1;var a;switch(r){case 0:a=o>=-128&&o<=127;break;case 1:a=o>=0&&o<=255;break;case 2:a=o>=-32768&&o<=32767;break;case 3:a=o>=0&&o<=65536;break;case 4:a=o>=-2147483648&&o<=2147483647;break;case 5:a=o>=0&&o<=4294967296;break;case 6:a=o>=-34027999387901484e22&&o<=34027999387901484e22;break;case 7:a=o>=-17976931348623157e292&&o<=17976931348623157e292;break;default:a=!1}return a},getDataTypeSize:function(r){var o=0;switch(r){case 0:case 1:o=1;break;case 2:case 3:o=2;break;case 4:case 5:case 6:o=4;break;case 7:o=8;break;default:o=r}return o},getDataTypeUsed:function(r,o){var a=r;switch(r){case 2:case 4:a=r-o;break;case 3:case 5:a=r-2*o;break;case 6:o===0?a=r:o===1?a=2:a=1;break;case 7:o===0?a=r:a=r-2*o+1;break;default:a=r;break}return a},getOnePixel:function(r,o,a,c){var u=0;switch(a){case 0:u=c.getInt8(o);break;case 1:u=c.getUint8(o);break;case 2:u=c.getInt16(o,!0);break;case 3:u=c.getUint16(o,!0);break;case 4:u=c.getInt32(o,!0);break;case 5:u=c.getUInt32(o,!0);break;case 6:u=c.getFloat32(o,!0);break;case 7:u=c.getFloat64(o,!0);break;default:throw"the decoder does not understand this pixel type"}return u},swapDimensionOrder:function(r,o,a,c,u){var d=0,m=0,f=0,g=0,_=r;if(a>1)if(_=new c(o*a),u)for(d=0;d<o;d++)for(g=d,f=0;f<a;f++,g+=o)_[g]=r[m++];else for(d=0;d<o;d++)for(g=d,f=0;f<a;f++,g+=o)_[m++]=r[g];return _}},t=function(r,o,a){this.val=r,this.left=o,this.right=a},n={decode:function(r,o){o=o||{};var a=o.noDataValue,c=0,u={};if(u.ptr=o.inputOffset||0,u.pixels={},!!e.readHeaderInfo(r,u)){var d=u.headerInfo,m=d.fileVersion,f=e.getDataTypeArray(d.imageType);if(m>5)throw"unsupported lerc version 2."+m;e.readMask(r,u),d.numValidPixel!==d.width*d.height&&!u.pixels.resultMask&&(u.pixels.resultMask=o.maskData);var g=d.width*d.height;u.pixels.resultPixels=new f(g*d.numDims),u.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0};var _=!o.returnPixelInterleavedDims;if(d.numValidPixel!==0)if(d.zMax===d.zMin)e.constructConstantSurface(u,_);else if(m>=4&&e.checkMinMaxRanges(r,u))e.constructConstantSurface(u,_);else{var w=new DataView(r,u.ptr,2),x=w.getUint8(0);if(u.ptr++,x)e.readDataOneSweep(r,u,f,_);else if(m>1&&d.imageType<=1&&Math.abs(d.maxZError-.5)<1e-5){var b=w.getUint8(1);if(u.ptr++,u.encodeMode=b,b>2||m<4&&b>1)throw"Invalid Huffman flag "+b;b?e.readHuffman(r,u,f,_):e.readTiles(r,u,f,_)}else e.readTiles(r,u,f,_)}u.eofOffset=u.ptr;var L;o.inputOffset?(L=u.headerInfo.blobSize+o.inputOffset-u.ptr,Math.abs(L)>=1&&(u.eofOffset=o.inputOffset+u.headerInfo.blobSize)):(L=u.headerInfo.blobSize-u.ptr,Math.abs(L)>=1&&(u.eofOffset=u.headerInfo.blobSize));var M={width:d.width,height:d.height,pixelData:u.pixels.resultPixels,minValue:d.zMin,maxValue:d.zMax,validPixelCount:d.numValidPixel,dimCount:d.numDims,dimStats:{minValues:d.minValues,maxValues:d.maxValues},maskData:u.pixels.resultMask};if(u.pixels.resultMask&&e.isValidPixelValue(d.imageType,a)){var C=u.pixels.resultMask;for(c=0;c<g;c++)C[c]||(M.pixelData[c]=a);M.noDataValue=a}return u.noDataValue=a,o.returnFileInfo&&(M.fileInfo=e.formatFileInfo(u)),M}},getBandCount:function(r){var o=0,a=0,c={};for(c.ptr=0,c.pixels={};a<r.byteLength-58;)e.readHeaderInfo(r,c),a+=c.headerInfo.blobSize,o++,c.ptr=a;return o}};return n}();var t_=function(){var i=new ArrayBuffer(4),e=new Uint8Array(i),t=new Uint32Array(i);return t[0]=1,e[0]===1}(),n_={decode:function(i,e){if(!t_)throw"Big endian system is not supported.";e=e||{};var t=e.inputOffset||0,n=new Uint8Array(i,t,10),r=String.fromCharCode.apply(null,n),o,a;if(r.trim()==="CntZImage")o=qy,a=1;else if(r.substring(0,5)==="Lerc2")o=e_,a=2;else throw"Unexpected file identifier string: "+r;for(var c=0,u=i.byteLength-10,d,m=[],f,g,_={width:0,height:0,pixels:[],pixelType:e.pixelType,mask:null,statistics:[]},w=0;t<u;){var x=o.decode(i,{inputOffset:t,encodedMaskData:d,maskData:g,returnMask:c===0,returnEncodedMask:c===0,returnFileInfo:!0,returnPixelInterleavedDims:e.returnPixelInterleavedDims,pixelType:e.pixelType||null,noDataValue:e.noDataValue||null});t=x.fileInfo.eofOffset,g=x.maskData,c===0&&(d=x.encodedMaskData,_.width=x.width,_.height=x.height,_.dimCount=x.dimCount||1,_.pixelType=x.pixelType||x.fileInfo.pixelType,_.mask=g),a>1&&(g&&m.push(g),x.fileInfo.mask&&x.fileInfo.mask.numBytes>0&&w++),c++,_.pixels.push(x.pixelData),_.statistics.push({minValue:x.minValue,maxValue:x.maxValue,noDataValue:x.noDataValue,dimStats:x.dimStats})}var b,L,M;if(a>1&&w>1){for(M=_.width*_.height,_.bandMasks=m,g=new Uint8Array(M),g.set(m[0]),b=1;b<m.length;b++)for(f=m[b],L=0;L<M;L++)g[L]=g[L]&f[L];_.maskData=g}return _}};const r_={0:7e3,1:6e3,2:5e3,3:4e3,4:3e3,5:2500,6:2e3,7:1500,8:800,9:500,10:200,11:100,12:40,13:12,14:5,15:2,16:1,17:.5,18:.2,19:.1,20:.01};function i_(i){const{height:e,width:t,pixels:n}=n_.decode(i),r=new Float32Array(e*t);for(let o=0;o<r.length;o++)r[o]=n[0][o];return{array:r,width:t,height:e}}function s_(i,e,t){let n=i_(i);t[2]-t[0]<1&&(n=o_(n,t));const{array:r,width:o}=n,c=new au(o).createTile(r),u=r_[e]||0;return c.getGeometryData(u)}function o_(i,e){function t(c,u,d,m,f,g,_,w){const x=new Float32Array(f*g);for(let L=0;L<g;L++)for(let M=0;M<f;M++){const C=(L+m)*u+(M+d),Z=L*f+M;x[Z]=c[C]}const b=new Float32Array(w*_);for(let L=0;L<w;L++)for(let M=0;M<_;M++){const C=L*w+M,Z=Math.round(M*g/w),D=Math.round(L*f/_)*f+Z;b[C]=x[D]}return b}const n=a_(e,i.width),r=n.sw+1,o=n.sh+1;return{array:t(i.array,i.width,n.sx,n.sy,n.sw,n.sh,r,o),width:r,height:o}}function a_(i,e){const t=Math.floor(i[0]*e),n=Math.floor(i[1]*e),r=Math.floor((i[2]-i[0])*e),o=Math.floor((i[3]-i[1])*e);return{sx:t,sy:n,sw:r,sh:o}}var l_=Object.defineProperty,c_=(i,e,t)=>e in i?l_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,bs=(i,e,t)=>c_(i,typeof e!="symbol"?e+"":e,t);const u_=10;class h_ extends aa{constructor(){super(),bs(this,"info",{version:"0.10.0",description:"Tile LERC terrain loader. It can load ArcGis-lerc format terrain data."}),bs(this,"dataType","lerc"),bs(this,"fileLoader",new p.FileLoader(Oe.manager)),bs(this,"_workerPool",new Ro(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new $y)}async doLoad(e,t){this._workerPool.pool===0&&this._workerPool.setWorkerLimit(u_);const{z:n,bounds:r}=t,o=await this.fileLoader.loadAsync(e).catch(()=>new Float32Array(256*256)),a=s_(o,n,r);return new Ur().setData(a)}}da(new h_);const mu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGModCl7cmV0dXJuIGEodC5kYXRhKX1mdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIG4oZSx1KXtjb25zdCByPXUqNCxbaSxmLGcsbF09ZS5zbGljZShyLHIrNCk7cmV0dXJuIGw9PT0wPzA6LTFlNCsoaTw8MTZ8Zjw8OHxnKSouMX1jb25zdCBvPXQubGVuZ3RoPj4+MixzPW5ldyBGbG9hdDMyQXJyYXkobyk7Zm9yKGxldCBlPTA7ZTxvO2UrKylzW2VdPW4odCxlKTtyZXR1cm4gc31zZWxmLm9ubWVzc2FnZT10PT57Y29uc3Qgbj1jKHQuZGF0YS5pbWdEYXRhKTtzZWxmLnBvc3RNZXNzYWdlKG4pfX0pKCk7Cg==",d_=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),gu=typeof self<"u"&&self.Blob&&new Blob([d_(mu)],{type:"text/javascript;charset=utf-8"});function f_(i){let e;try{if(e=gu&&(self.URL||self.webkitURL).createObjectURL(gu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+mu,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var p_=Object.defineProperty,m_=(i,e,t)=>e in i?p_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,xs=(i,e,t)=>m_(i,typeof e!="symbol"?e+"":e,t);const g_=10;class y_ extends aa{constructor(){super(),xs(this,"info",{version:"0.10.0",description:"Mapbox-RGB terrain loader, It can load Mapbox-RGB terrain data."}),xs(this,"dataType","terrain-rgb"),xs(this,"imageLoader",new p.ImageLoader(Oe.manager)),xs(this,"_workerPool",new Ro(0)),this._workerPool.setWorkerCreator(()=>new f_)}async doLoad(e,t){const n=await this.imageLoader.loadAsync(e).catch(u=>new Image),r=p.MathUtils.clamp((t.z+2)*3,2,64),o=__(n,t.bounds,r);let a;this._workerPool.pool===0&&this._workerPool.setWorkerLimit(g_),a=(await this._workerPool.postMessage({imgData:o},[o.data.buffer])).data;const c=new Ur;return c.setData(a),c}}function __(i,e,t){const n=na(e,i.width);t=Math.min(t,n.sw);const o=new OffscreenCanvas(t,t).getContext("2d");return o.imageSmoothingEnabled=!1,o.drawImage(i,n.sx,n.sy,n.sw,n.sh,0,0,t,t),o.getImageData(0,0,t,t)}da(new y_);function Qn(i,e){this.x=i,this.y=e}Qn.prototype={clone(){return new Qn(this.x,this.y)},add(i){return this.clone()._add(i)},sub(i){return this.clone()._sub(i)},multByPoint(i){return this.clone()._multByPoint(i)},divByPoint(i){return this.clone()._divByPoint(i)},mult(i){return this.clone()._mult(i)},div(i){return this.clone()._div(i)},rotate(i){return this.clone()._rotate(i)},rotateAround(i,e){return this.clone()._rotateAround(i,e)},matMult(i){return this.clone()._matMult(i)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(i){return this.x===i.x&&this.y===i.y},dist(i){return Math.sqrt(this.distSqr(i))},distSqr(i){const e=i.x-this.x,t=i.y-this.y;return e*e+t*t},angle(){return Math.atan2(this.y,this.x)},angleTo(i){return Math.atan2(this.y-i.y,this.x-i.x)},angleWith(i){return this.angleWithSep(i.x,i.y)},angleWithSep(i,e){return Math.atan2(this.x*e-this.y*i,this.x*i+this.y*e)},_matMult(i){const e=i[0]*this.x+i[1]*this.y,t=i[2]*this.x+i[3]*this.y;return this.x=e,this.y=t,this},_add(i){return this.x+=i.x,this.y+=i.y,this},_sub(i){return this.x-=i.x,this.y-=i.y,this},_mult(i){return this.x*=i,this.y*=i,this},_div(i){return this.x/=i,this.y/=i,this},_multByPoint(i){return this.x*=i.x,this.y*=i.y,this},_divByPoint(i){return this.x/=i.x,this.y/=i.y,this},_unit(){return this._div(this.mag()),this},_perp(){const i=this.y;return this.y=this.x,this.x=-i,this},_rotate(i){const e=Math.cos(i),t=Math.sin(i),n=e*this.x-t*this.y,r=t*this.x+e*this.y;return this.x=n,this.y=r,this},_rotateAround(i,e){const t=Math.cos(i),n=Math.sin(i),r=e.x+t*(this.x-e.x)-n*(this.y-e.y),o=e.y+n*(this.x-e.x)+t*(this.y-e.y);return this.x=r,this.y=o,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:Qn},Qn.convert=function(i){if(i instanceof Qn)return i;if(Array.isArray(i))return new Qn(+i[0],+i[1]);if(i.x!==void 0&&i.y!==void 0)return new Qn(+i.x,+i.y);throw new Error("Expected [x, y] or {x, y} point format")};class yu{constructor(e,t,n,r,o){this.properties={},this.extent=n,this.type=0,this.id=void 0,this._pbf=e,this._geometry=-1,this._keys=r,this._values=o,e.readFields(v_,this,t)}loadGeometry(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos,n=[];let r,o=1,a=0,c=0,u=0;for(;e.pos<t;){if(a<=0){const d=e.readVarint();o=d&7,a=d>>3}if(a--,o===1||o===2)c+=e.readSVarint(),u+=e.readSVarint(),o===1&&(r&&n.push(r),r=[]),r&&r.push(new Qn(c,u));else if(o===7)r&&r.push(r[0].clone());else throw new Error(`unknown command ${o}`)}return r&&n.push(r),n}bbox(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos;let n=1,r=0,o=0,a=0,c=1/0,u=-1/0,d=1/0,m=-1/0;for(;e.pos<t;){if(r<=0){const f=e.readVarint();n=f&7,r=f>>3}if(r--,n===1||n===2)o+=e.readSVarint(),a+=e.readSVarint(),o<c&&(c=o),o>u&&(u=o),a<d&&(d=a),a>m&&(m=a);else if(n!==7)throw new Error(`unknown command ${n}`)}return[c,d,u,m]}toGeoJSON(e,t,n){const r=this.extent*Math.pow(2,n),o=this.extent*e,a=this.extent*t,c=this.loadGeometry();function u(g){return[(g.x+o)*360/r-180,360/Math.PI*Math.atan(Math.exp((1-(g.y+a)*2/r)*Math.PI))-90]}function d(g){return g.map(u)}let m;if(this.type===1){const g=[];for(const w of c)g.push(w[0]);const _=d(g);m=g.length===1?{type:"Point",coordinates:_[0]}:{type:"MultiPoint",coordinates:_}}else if(this.type===2){const g=c.map(d);m=g.length===1?{type:"LineString",coordinates:g[0]}:{type:"MultiLineString",coordinates:g}}else if(this.type===3){const g=b_(c),_=[];for(const w of g)_.push(w.map(d));m=_.length===1?{type:"Polygon",coordinates:_[0]}:{type:"MultiPolygon",coordinates:_}}else throw new Error("unknown feature type");const f={type:"Feature",geometry:m,properties:this.properties};return this.id!=null&&(f.id=this.id),f}}yu.types=["Unknown","Point","LineString","Polygon"];function v_(i,e,t){i===1?e.id=t.readVarint():i===2?w_(t,e):i===3?e.type=t.readVarint():i===4&&(e._geometry=t.pos)}function w_(i,e){const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=e._keys[i.readVarint()],r=e._values[i.readVarint()];e.properties[n]=r}}function b_(i){const e=i.length;if(e<=1)return[i];const t=[];let n,r;for(let o=0;o<e;o++){const a=x_(i[o]);a!==0&&(r===void 0&&(r=a<0),r===a<0?(n&&t.push(n),n=[i[o]]):n&&n.push(i[o]))}return n&&t.push(n),t}function x_(i){let e=0;for(let t=0,n=i.length,r=n-1,o,a;t<n;r=t++)o=i[t],a=i[r],e+=(a.x-o.x)*(o.y+a.y);return e}let M_=class{constructor(e,t){this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=e,this._keys=[],this._values=[],this._features=[],e.readFields(S_,this,t),this.length=this._features.length}feature(e){if(e<0||e>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[e];const t=this._pbf.readVarint()+this._pbf.pos;return new yu(this._pbf,t,this.extent,this._keys,this._values)}};function S_(i,e,t){i===15?e.version=t.readVarint():i===1?e.name=t.readString():i===5?e.extent=t.readVarint():i===2?e._features.push(t.pos):i===3?e._keys.push(t.readString()):i===4&&e._values.push(L_(t))}function L_(i){let e=null;const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=i.readVarint()>>3;e=n===1?i.readString():n===2?i.readFloat():n===3?i.readDouble():n===4?i.readVarint64():n===5?i.readVarint():n===6?i.readSVarint():n===7?i.readBoolean():null}if(e==null)throw new Error("unknown feature value");return e}class P_{constructor(e,t){this.layers=e.readFields(C_,{},t)}}function C_(i,e,t){if(i===3){const n=new M_(t,t.readVarint()+t.pos);n.length&&(e[n.name]=n)}}const fa=65536*65536,_u=1/fa,T_=12,vu=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),pa=0,Ms=1,Gi=2,Ss=5;class G_{constructor(e=new Uint8Array(16)){this.buf=ArrayBuffer.isView(e)?e:new Uint8Array(e),this.dataView=new DataView(this.buf.buffer),this.pos=0,this.type=0,this.length=this.buf.length}readFields(e,t,n=this.length){for(;this.pos<n;){const r=this.readVarint(),o=r>>3,a=this.pos;this.type=r&7,e(o,t,this),this.pos===a&&this.skip(r)}return t}readMessage(e,t){return this.readFields(e,t,this.readVarint()+this.pos)}readFixed32(){const e=this.dataView.getUint32(this.pos,!0);return this.pos+=4,e}readSFixed32(){const e=this.dataView.getInt32(this.pos,!0);return this.pos+=4,e}readFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*fa;return this.pos+=8,e}readSFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*fa;return this.pos+=8,e}readFloat(){const e=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,e}readDouble(){const e=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,e}readVarint(e){const t=this.buf;let n,r;return r=t[this.pos++],n=r&127,r<128||(r=t[this.pos++],n|=(r&127)<<7,r<128)||(r=t[this.pos++],n|=(r&127)<<14,r<128)||(r=t[this.pos++],n|=(r&127)<<21,r<128)?n:(r=t[this.pos],n|=(r&15)<<28,Z_(n,e,this))}readVarint64(){return this.readVarint(!0)}readSVarint(){const e=this.readVarint();return e%2===1?(e+1)/-2:e/2}readBoolean(){return!!this.readVarint()}readString(){const e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=T_&&vu?vu.decode(this.buf.subarray(t,e)):N_(this.buf,t,e)}readBytes(){const e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t}readPackedVarint(e=[],t){const n=this.readPackedEnd();for(;this.pos<n;)e.push(this.readVarint(t));return e}readPackedSVarint(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSVarint());return e}readPackedBoolean(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readBoolean());return e}readPackedFloat(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFloat());return e}readPackedDouble(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readDouble());return e}readPackedFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed32());return e}readPackedSFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed32());return e}readPackedFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed64());return e}readPackedSFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed64());return e}readPackedEnd(){return this.type===Gi?this.readVarint()+this.pos:this.pos+1}skip(e){const t=e&7;if(t===pa)for(;this.buf[this.pos++]>127;);else if(t===Gi)this.pos=this.readVarint()+this.pos;else if(t===Ss)this.pos+=4;else if(t===Ms)this.pos+=8;else throw new Error(`Unimplemented type: ${t}`)}writeTag(e,t){this.writeVarint(e<<3|t)}realloc(e){let t=this.length||16;for(;t<this.pos+e;)t*=2;if(t!==this.length){const n=new Uint8Array(t);n.set(this.buf),this.buf=n,this.dataView=new DataView(n.buffer),this.length=t}}finish(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)}writeFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeSFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*_u),!0),this.pos+=8}writeSFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*_u),!0),this.pos+=8}writeVarint(e){if(e=+e||0,e>268435455||e<0){W_(e,this);return}this.realloc(4),this.buf[this.pos++]=e&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=e>>>7&127)))}writeSVarint(e){this.writeVarint(e<0?-e*2-1:e*2)}writeBoolean(e){this.writeVarint(+e)}writeString(e){e=String(e),this.realloc(e.length*4),this.pos++;const t=this.pos;this.pos=B_(this.buf,e,this.pos);const n=this.pos-t;n>=128&&wu(t,n,this),this.pos=t-1,this.writeVarint(n),this.pos+=n}writeFloat(e){this.realloc(4),this.dataView.setFloat32(this.pos,e,!0),this.pos+=4}writeDouble(e){this.realloc(8),this.dataView.setFloat64(this.pos,e,!0),this.pos+=8}writeBytes(e){const t=e.length;this.writeVarint(t),this.realloc(t);for(let n=0;n<t;n++)this.buf[this.pos++]=e[n]}writeRawMessage(e,t){this.pos++;const n=this.pos;e(t,this);const r=this.pos-n;r>=128&&wu(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r}writeMessage(e,t,n){this.writeTag(e,Gi),this.writeRawMessage(t,n)}writePackedVarint(e,t){t.length&&this.writeMessage(e,A_,t)}writePackedSVarint(e,t){t.length&&this.writeMessage(e,F_,t)}writePackedBoolean(e,t){t.length&&this.writeMessage(e,z_,t)}writePackedFloat(e,t){t.length&&this.writeMessage(e,O_,t)}writePackedDouble(e,t){t.length&&this.writeMessage(e,D_,t)}writePackedFixed32(e,t){t.length&&this.writeMessage(e,X_,t)}writePackedSFixed32(e,t){t.length&&this.writeMessage(e,U_,t)}writePackedFixed64(e,t){t.length&&this.writeMessage(e,k_,t)}writePackedSFixed64(e,t){t.length&&this.writeMessage(e,K_,t)}writeBytesField(e,t){this.writeTag(e,Gi),this.writeBytes(t)}writeFixed32Field(e,t){this.writeTag(e,Ss),this.writeFixed32(t)}writeSFixed32Field(e,t){this.writeTag(e,Ss),this.writeSFixed32(t)}writeFixed64Field(e,t){this.writeTag(e,Ms),this.writeFixed64(t)}writeSFixed64Field(e,t){this.writeTag(e,Ms),this.writeSFixed64(t)}writeVarintField(e,t){this.writeTag(e,pa),this.writeVarint(t)}writeSVarintField(e,t){this.writeTag(e,pa),this.writeSVarint(t)}writeStringField(e,t){this.writeTag(e,Gi),this.writeString(t)}writeFloatField(e,t){this.writeTag(e,Ss),this.writeFloat(t)}writeDoubleField(e,t){this.writeTag(e,Ms),this.writeDouble(t)}writeBooleanField(e,t){this.writeVarintField(e,+t)}}function Z_(i,e,t){const n=t.buf;let r,o;if(o=n[t.pos++],r=(o&112)>>4,o<128||(o=n[t.pos++],r|=(o&127)<<3,o<128)||(o=n[t.pos++],r|=(o&127)<<10,o<128)||(o=n[t.pos++],r|=(o&127)<<17,o<128)||(o=n[t.pos++],r|=(o&127)<<24,o<128)||(o=n[t.pos++],r|=(o&1)<<31,o<128))return kr(i,r,e);throw new Error("Expected varint not more than 10 bytes")}function kr(i,e,t){return t?e*4294967296+(i>>>0):(e>>>0)*4294967296+(i>>>0)}function W_(i,e){let t,n;if(i>=0?(t=i%4294967296|0,n=i/4294967296|0):(t=~(-i%4294967296),n=~(-i/4294967296),t^4294967295?t=t+1|0:(t=0,n=n+1|0)),i>=18446744073709552e3||i<-18446744073709552e3)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),V_(t,n,e),I_(n,e)}function V_(i,e,t){t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos]=i&127}function I_(i,e){const t=(i&7)<<4;e.buf[e.pos++]|=t|((i>>>=3)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127)))))}function wu(i,e,t){const n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(Math.LN2*7));t.realloc(n);for(let r=t.pos-1;r>=i;r--)t.buf[r+n]=t.buf[r]}function A_(i,e){for(let t=0;t<i.length;t++)e.writeVarint(i[t])}function F_(i,e){for(let t=0;t<i.length;t++)e.writeSVarint(i[t])}function O_(i,e){for(let t=0;t<i.length;t++)e.writeFloat(i[t])}function D_(i,e){for(let t=0;t<i.length;t++)e.writeDouble(i[t])}function z_(i,e){for(let t=0;t<i.length;t++)e.writeBoolean(i[t])}function X_(i,e){for(let t=0;t<i.length;t++)e.writeFixed32(i[t])}function U_(i,e){for(let t=0;t<i.length;t++)e.writeSFixed32(i[t])}function k_(i,e){for(let t=0;t<i.length;t++)e.writeFixed64(i[t])}function K_(i,e){for(let t=0;t<i.length;t++)e.writeSFixed64(i[t])}function N_(i,e,t){let n="",r=e;for(;r<t;){const o=i[r];let a=null,c=o>239?4:o>223?3:o>191?2:1;if(r+c>t)break;let u,d,m;c===1?o<128&&(a=o):c===2?(u=i[r+1],(u&192)===128&&(a=(o&31)<<6|u&63,a<=127&&(a=null))):c===3?(u=i[r+1],d=i[r+2],(u&192)===128&&(d&192)===128&&(a=(o&15)<<12|(u&63)<<6|d&63,(a<=2047||a>=55296&&a<=57343)&&(a=null))):c===4&&(u=i[r+1],d=i[r+2],m=i[r+3],(u&192)===128&&(d&192)===128&&(m&192)===128&&(a=(o&15)<<18|(u&63)<<12|(d&63)<<6|m&63,(a<=65535||a>=1114112)&&(a=null))),a===null?(a=65533,c=1):a>65535&&(a-=65536,n+=String.fromCharCode(a>>>10&1023|55296),a=56320|a&1023),n+=String.fromCharCode(a),r+=c}return n}function B_(i,e,t){for(let n=0,r,o;n<e.length;n++){if(r=e.charCodeAt(n),r>55295&&r<57344)if(o)if(r<56320){i[t++]=239,i[t++]=191,i[t++]=189,o=r;continue}else r=o-55296<<10|r-56320|65536,o=null;else{r>56319||n+1===e.length?(i[t++]=239,i[t++]=191,i[t++]=189):o=r;continue}else o&&(i[t++]=239,i[t++]=191,i[t++]=189,o=null);r<128?i[t++]=r:(r<2048?i[t++]=r>>6|192:(r<65536?i[t++]=r>>12|224:(i[t++]=r>>18|240,i[t++]=r>>12&63|128),i[t++]=r>>6&63|128),i[t++]=r&63|128)}return t}var Y_=Object.defineProperty,R_=(i,e,t)=>e in i?Y_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ma=(i,e,t)=>R_(i,typeof e!="symbol"?e+"":e,t);class j_ extends ca{constructor(){super(),ma(this,"dataType","mvt"),ma(this,"_loader",new p.FileLoader(Oe.manager)),ma(this,"_render",new cu),this._loader.setResponseType("arraybuffer")}async doLoad(e,t){const n=await this._loader.loadAsync(e),r=new P_(new G_(n)),o=this.drawTile(r,t.source.style,t.z);return new p.CanvasTexture(o)}drawTile(e,t,n){const c=new OffscreenCanvas(256,256).getContext("2d");if(c){if(t)for(const u in t.layer){const d=t.layer[u];if(t&&(n<(d.minLevel??1)||n>(d.maxLevel??20)))continue;const m=e.layers[u];if(m){const f=256/m.extent;this._renderLayer(c,m,d,f)}}else for(const u in e.layers){const d=e.layers[u],m=256/d.extent;this._renderLayer(c,d,void 0,m)}return c.canvas}else throw new Error("Canvas context is not available")}_renderLayer(e,t,n,r=1){e.save();for(let o=0;o<t.length;o++){const a=t.feature(o);this._renderFeature(e,a,n,r)}return e.restore(),this}_renderFeature(e,t,n={},r=1){const o=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][t.type],a={geometry:t.loadGeometry(),properties:t.properties};this._render.render(e,o,a,n,r)}_convertToGeoJSONFeature(e,t){const n=this._convertGeometryToGeoJSON(e.geometry,t);return n?{type:"Feature",geometry:n,properties:e.properties||{},id:e.id}:null}_convertGeometryToGeoJSON(e,t){switch(t){case tt.Point:return this._convertPointGeometry(e);case tt.Linestring:return this._convertLineGeometry(e);case tt.Polygon:return this._convertPolygonGeometry(e);default:return console.warn("未知的几何类型:",t),null}}_convertPointGeometry(e){const t=[];for(const n of e)for(const r of n)t.push([r.x,r.y]);return t.length===0?null:t.length===1?{type:"Point",coordinates:t[0]}:{type:"MultiPoint",coordinates:t}}_convertLineGeometry(e){const t=[];for(const n of e){const r=[];for(const o of n)r.push([o.x,o.y]);r.length>=2&&t.push(r)}return t.length===0?null:t.length===1?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}}_convertPolygonGeometry(e){const t=[];let n=[];for(const r of e){const o=[];for(const a of r)o.push([a.x,a.y]);o.length>=4&&(this._isRingClockwise(o)||n.length===0?(n.length>0&&t.push(n),n=[o]):n.push(o))}return n.length>0&&t.push(n),t.length===0?null:t.length===1?{type:"Polygon",coordinates:t[0]}:{type:"MultiPolygon",coordinates:t}}_isRingClockwise(e){let t=0;for(let n=0;n<e.length-1;n++){const[r,o]=e[n],[a,c]=e[n+1];t+=(a-r)*(c+o)}return t>0}convertVectorTileToGeoJSON(e){const t=[];for(const n in e.layers){const r=e.layers[n];for(let o=0;o<r.length;o++){const a=r.feature(o),c=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][a.type],u={geometry:a.loadGeometry(),properties:a.properties},d=this._convertToGeoJSONFeature(u,c);d&&(d.properties._layer=n,t.push(d))}}return{type:"FeatureCollection",features:t}}}ha(new j_);const bu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IF89MjMyODMwNjQzNjUzODY5NjNlLTI2LG09MTIsUD10eXBlb2YgVGV4dERlY29kZXI+InUiP251bGw6bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLGc9MCx5PTEsRj0yLHA9NTtjbGFzcyBNe2NvbnN0cnVjdG9yKHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0KSx0aGlzLmRhdGFWaWV3PW5ldyBEYXRhVmlldyh0aGlzLmJ1Zi5idWZmZXIpLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofXJlYWRGaWVsZHModCxlLHI9dGhpcy5sZW5ndGgpe2Zvcig7dGhpcy5wb3M8cjspe2NvbnN0IHM9dGhpcy5yZWFkVmFyaW50KCksbj1zPj4zLG89dGhpcy5wb3M7dGhpcy50eXBlPXMmNyx0KG4sZSx0aGlzKSx0aGlzLnBvcz09PW8mJnRoaXMuc2tpcChzKX1yZXR1cm4gZX1yZWFkTWVzc2FnZSh0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX1yZWFkRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApO3JldHVybiB0aGlzLnBvcys9NCx0fXJlYWRTRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRJbnQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZEZpeGVkNjQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMucG9zLCEwKSt0aGlzLmRhdGFWaWV3LmdldFVpbnQzMih0aGlzLnBvcys0LCEwKSo0Mjk0OTY3Mjk2O3JldHVybiB0aGlzLnBvcys9OCx0fXJlYWRTRml4ZWQ2NCgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApK3RoaXMuZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5wb3MrNCwhMCkqNDI5NDk2NzI5NjtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkRmxvYXQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZERvdWJsZSgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRGbG9hdDY0KHRoaXMucG9zLCEwKTtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkVmFyaW50KHQpe2NvbnN0IGU9dGhpcy5idWY7bGV0IHIscztyZXR1cm4gcz1lW3RoaXMucG9zKytdLHI9cyYxMjcsczwxMjh8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8NyxzPDEyOCl8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8MTQsczwxMjgpfHwocz1lW3RoaXMucG9zKytdLHJ8PShzJjEyNyk8PDIxLHM8MTI4KT9yOihzPWVbdGhpcy5wb3NdLHJ8PShzJjE1KTw8MjgsRShyLHQsdGhpcykpfXJlYWRWYXJpbnQ2NCgpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfXJlYWRTVmFyaW50KCl7Y29uc3QgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT09MT8odCsxKS8tMjp0LzJ9cmVhZEJvb2xlYW4oKXtyZXR1cm4hIXRoaXMucmVhZFZhcmludCgpfXJlYWRTdHJpbmcoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj1tJiZQP1AuZGVjb2RlKHRoaXMuYnVmLnN1YmFycmF5KGUsdCkpOlIodGhpcy5idWYsZSx0KX1yZWFkQnl0ZXMoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX1yZWFkUGFja2VkVmFyaW50KHQ9W10sZSl7Y29uc3Qgcj10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fXJlYWRQYWNrZWRTVmFyaW50KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH1yZWFkUGFja2VkQm9vbGVhbih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZsb2F0KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZERvdWJsZSh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH1yZWFkUGFja2VkRml4ZWQzMih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZFNGaXhlZDMyKHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZpeGVkNjQodD1bXSl7Y29uc3QgZT10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRTRml4ZWQ2NCh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRFbmQoKXtyZXR1cm4gdGhpcy50eXBlPT09Rj90aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvczp0aGlzLnBvcysxfXNraXAodCl7Y29uc3QgZT10Jjc7aWYoZT09PWcpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1GKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PXApdGhpcy5wb3MrPTQ7ZWxzZSBpZihlPT09eSl0aGlzLnBvcys9ODtlbHNlIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlOiAke2V9YCl9d3JpdGVUYWcodCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9cmVhbGxvYyh0KXtsZXQgZT10aGlzLmxlbmd0aHx8MTY7Zm9yKDtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMuZGF0YVZpZXc9bmV3IERhdGFWaWV3KHIuYnVmZmVyKSx0aGlzLmxlbmd0aD1lfX1maW5pc2goKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX13cml0ZUZpeGVkMzIodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCwhMCksdGhpcy5wb3MrPTR9d3JpdGVTRml4ZWQzMih0KXt0aGlzLnJlYWxsb2MoNCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZUZpeGVkNjQodCl7dGhpcy5yZWFsbG9jKDgpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCYtMSwhMCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcys0LE1hdGguZmxvb3IodCpfKSwhMCksdGhpcy5wb3MrPTh9d3JpdGVTRml4ZWQ2NCh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0Ji0xLCEwKSx0aGlzLmRhdGFWaWV3LnNldEludDMyKHRoaXMucG9zKzQsTWF0aC5mbG9vcih0Kl8pLCEwKSx0aGlzLnBvcys9OH13cml0ZVZhcmludCh0KXtpZih0PSt0fHwwLHQ+MjY4NDM1NDU1fHx0PDApe0IodCx0aGlzKTtyZXR1cm59dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPXQmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpfXdyaXRlU1ZhcmludCh0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8tdCoyLTE6dCoyKX13cml0ZUJvb2xlYW4odCl7dGhpcy53cml0ZVZhcmludCgrdCl9d3JpdGVTdHJpbmcodCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKHQubGVuZ3RoKjQpLHRoaXMucG9zKys7Y29uc3QgZT10aGlzLnBvczt0aGlzLnBvcz1xKHRoaXMuYnVmLHQsdGhpcy5wb3MpO2NvbnN0IHI9dGhpcy5wb3MtZTtyPj0xMjgmJlMoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfXdyaXRlRmxvYXQodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZURvdWJsZSh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0KHRoaXMucG9zLHQsITApLHRoaXMucG9zKz04fXdyaXRlQnl0ZXModCl7Y29uc3QgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IobGV0IHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19d3JpdGVSYXdNZXNzYWdlKHQsZSl7dGhpcy5wb3MrKztjb25zdCByPXRoaXMucG9zO3QoZSx0aGlzKTtjb25zdCBzPXRoaXMucG9zLXI7cz49MTI4JiZTKHIscyx0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChzKSx0aGlzLnBvcys9c313cml0ZU1lc3NhZ2UodCxlLHIpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfXdyaXRlUGFja2VkVmFyaW50KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSSxlKX13cml0ZVBhY2tlZFNWYXJpbnQodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxDLGUpfXdyaXRlUGFja2VkQm9vbGVhbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LFUsZSl9d3JpdGVQYWNrZWRGbG9hdCh0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LEwsZSl9d3JpdGVQYWNrZWREb3VibGUodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxBLGUpfXdyaXRlUGFja2VkRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHYsZSl9d3JpdGVQYWNrZWRTRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LE4sZSl9d3JpdGVQYWNrZWRGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsRyxlKX13cml0ZVBhY2tlZFNGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSCxlKX13cml0ZUJ5dGVzRmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsRiksdGhpcy53cml0ZUJ5dGVzKGUpfXdyaXRlRml4ZWQzMkZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHApLHRoaXMud3JpdGVGaXhlZDMyKGUpfXdyaXRlU0ZpeGVkMzJGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9d3JpdGVGaXhlZDY0RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQseSksdGhpcy53cml0ZUZpeGVkNjQoZSl9d3JpdGVTRml4ZWQ2NEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHkpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX13cml0ZVZhcmludEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LGcpLHRoaXMud3JpdGVWYXJpbnQoZSl9d3JpdGVTVmFyaW50RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsZyksdGhpcy53cml0ZVNWYXJpbnQoZSl9d3JpdGVTdHJpbmdGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlU3RyaW5nKGUpfXdyaXRlRmxvYXRGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlRmxvYXQoZSl9d3JpdGVEb3VibGVGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCx5KSx0aGlzLndyaXRlRG91YmxlKGUpfXdyaXRlQm9vbGVhbkZpZWxkKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsK2UpfX1mdW5jdGlvbiBFKGksdCxlKXtjb25zdCByPWUuYnVmO2xldCBzLG47aWYobj1yW2UucG9zKytdLHM9KG4mMTEyKT4+NCxuPDEyOHx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwzLG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwxMCxuPDEyOCl8fChuPXJbZS5wb3MrK10sc3w9KG4mMTI3KTw8MTcsbjwxMjgpfHwobj1yW2UucG9zKytdLHN8PShuJjEyNyk8PDI0LG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxKTw8MzEsbjwxMjgpKXJldHVybiBmKGkscyx0KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9ZnVuY3Rpb24gZihpLHQsZSl7cmV0dXJuIGU/dCo0Mjk0OTY3Mjk2KyhpPj4+MCk6KHQ+Pj4wKSo0Mjk0OTY3Mjk2KyhpPj4+MCl9ZnVuY3Rpb24gQihpLHQpe2xldCBlLHI7aWYoaT49MD8oZT1pJTQyOTQ5NjcyOTZ8MCxyPWkvNDI5NDk2NzI5NnwwKTooZT1+KC1pJTQyOTQ5NjcyOTYpLHI9figtaS80Mjk0OTY3Mjk2KSxlXjQyOTQ5NjcyOTU/ZT1lKzF8MDooZT0wLHI9cisxfDApKSxpPj0xODQ0Njc0NDA3MzcwOTU1MmUzfHxpPC0xODQ0Njc0NDA3MzcwOTU1MmUzKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTt0LnJlYWxsb2MoMTApLFQoZSxyLHQpLEQocix0KX1mdW5jdGlvbiBUKGksdCxlKXtlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zKytdPWkmMTI3fDEyOCxpPj4+PTcsZS5idWZbZS5wb3MrK109aSYxMjd8MTI4LGk+Pj49NyxlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zXT1pJjEyN31mdW5jdGlvbiBEKGksdCl7Y29uc3QgZT0oaSY3KTw8NDt0LmJ1Zlt0LnBvcysrXXw9ZXwoKGk+Pj49Myk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyNykpKSkpfWZ1bmN0aW9uIFMoaSx0LGUpe2NvbnN0IHI9dDw9MTYzODM/MTp0PD0yMDk3MTUxPzI6dDw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyh0KS8oTWF0aC5MTjIqNykpO2UucmVhbGxvYyhyKTtmb3IobGV0IHM9ZS5wb3MtMTtzPj1pO3MtLSllLmJ1ZltzK3JdPWUuYnVmW3NdfWZ1bmN0aW9uIEkoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlVmFyaW50KGlbZV0pfWZ1bmN0aW9uIEMoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlU1ZhcmludChpW2VdKX1mdW5jdGlvbiBMKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZsb2F0KGlbZV0pfWZ1bmN0aW9uIEEoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlRG91YmxlKGlbZV0pfWZ1bmN0aW9uIFUoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlQm9vbGVhbihpW2VdKX1mdW5jdGlvbiB2KGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkMzIoaVtlXSl9ZnVuY3Rpb24gTihpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQzMihpW2VdKX1mdW5jdGlvbiBHKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkNjQoaVtlXSl9ZnVuY3Rpb24gSChpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQ2NChpW2VdKX1mdW5jdGlvbiBSKGksdCxlKXtsZXQgcj0iIixzPXQ7Zm9yKDtzPGU7KXtjb25zdCBuPWlbc107bGV0IG89bnVsbCxoPW4+MjM5PzQ6bj4yMjM/MzpuPjE5MT8yOjE7aWYocytoPmUpYnJlYWs7bGV0IGEsZCx1O2g9PT0xP248MTI4JiYobz1uKTpoPT09Mj8oYT1pW3MrMV0sKGEmMTkyKT09PTEyOCYmKG89KG4mMzEpPDw2fGEmNjMsbzw9MTI3JiYobz1udWxsKSkpOmg9PT0zPyhhPWlbcysxXSxkPWlbcysyXSwoYSYxOTIpPT09MTI4JiYoZCYxOTIpPT09MTI4JiYobz0obiYxNSk8PDEyfChhJjYzKTw8NnxkJjYzLChvPD0yMDQ3fHxvPj01NTI5NiYmbzw9NTczNDMpJiYobz1udWxsKSkpOmg9PT00JiYoYT1pW3MrMV0sZD1pW3MrMl0sdT1pW3MrM10sKGEmMTkyKT09PTEyOCYmKGQmMTkyKT09PTEyOCYmKHUmMTkyKT09PTEyOCYmKG89KG4mMTUpPDwxOHwoYSY2Myk8PDEyfChkJjYzKTw8Nnx1JjYzLChvPD02NTUzNXx8bz49MTExNDExMikmJihvPW51bGwpKSksbz09PW51bGw/KG89NjU1MzMsaD0xKTpvPjY1NTM1JiYoby09NjU1MzYscis9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4+MTAmMTAyM3w1NTI5Niksbz01NjMyMHxvJjEwMjMpLHIrPVN0cmluZy5mcm9tQ2hhckNvZGUobykscys9aH1yZXR1cm4gcn1mdW5jdGlvbiBxKGksdCxlKXtmb3IobGV0IHI9MCxzLG47cjx0Lmxlbmd0aDtyKyspe2lmKHM9dC5jaGFyQ29kZUF0KHIpLHM+NTUyOTUmJnM8NTczNDQpaWYobilpZihzPDU2MzIwKXtpW2UrK109MjM5LGlbZSsrXT0xOTEsaVtlKytdPTE4OSxuPXM7Y29udGludWV9ZWxzZSBzPW4tNTUyOTY8PDEwfHMtNTYzMjB8NjU1MzYsbj1udWxsO2Vsc2V7cz41NjMxOXx8cisxPT09dC5sZW5ndGg/KGlbZSsrXT0yMzksaVtlKytdPTE5MSxpW2UrK109MTg5KTpuPXM7Y29udGludWV9ZWxzZSBuJiYoaVtlKytdPTIzOSxpW2UrK109MTkxLGlbZSsrXT0xODksbj1udWxsKTtzPDEyOD9pW2UrK109czooczwyMDQ4P2lbZSsrXT1zPj42fDE5Mjooczw2NTUzNj9pW2UrK109cz4+MTJ8MjI0OihpW2UrK109cz4+MTh8MjQwLGlbZSsrXT1zPj4xMiY2M3wxMjgpLGlbZSsrXT1zPj42JjYzfDEyOCksaVtlKytdPXMmNjN8MTI4KX1yZXR1cm4gZX1mdW5jdGlvbiB4KGksdCl7dGhpcy54PWksdGhpcy55PXR9eC5wcm90b3R5cGU9e2Nsb25lKCl7cmV0dXJuIG5ldyB4KHRoaXMueCx0aGlzLnkpfSxhZGQoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKGkpfSxzdWIoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKGkpfSxtdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludChpKX0sZGl2QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KGkpfSxtdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQoaSl9LGRpdihpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYoaSl9LHJvdGF0ZShpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUoaSl9LHJvdGF0ZUFyb3VuZChpLHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChpLHQpfSxtYXRNdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQoaSl9LHVuaXQoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnAoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHMoaSl7cmV0dXJuIHRoaXMueD09PWkueCYmdGhpcy55PT09aS55fSxkaXN0KGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKGkpKX0sZGlzdFNxcihpKXtjb25zdCB0PWkueC10aGlzLngsZT1pLnktdGhpcy55O3JldHVybiB0KnQrZSplfSxhbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvKGkpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS1pLnksdGhpcy54LWkueCl9LGFuZ2xlV2l0aChpKXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoaS54LGkueSl9LGFuZ2xlV2l0aFNlcChpLHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCp0LXRoaXMueSppLHRoaXMueCppK3RoaXMueSp0KX0sX21hdE11bHQoaSl7Y29uc3QgdD1pWzBdKnRoaXMueCtpWzFdKnRoaXMueSxlPWlbMl0qdGhpcy54K2lbM10qdGhpcy55O3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfSxfYWRkKGkpe3JldHVybiB0aGlzLngrPWkueCx0aGlzLnkrPWkueSx0aGlzfSxfc3ViKGkpe3JldHVybiB0aGlzLngtPWkueCx0aGlzLnktPWkueSx0aGlzfSxfbXVsdChpKXtyZXR1cm4gdGhpcy54Kj1pLHRoaXMueSo9aSx0aGlzfSxfZGl2KGkpe3JldHVybiB0aGlzLngvPWksdGhpcy55Lz1pLHRoaXN9LF9tdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy54Kj1pLngsdGhpcy55Kj1pLnksdGhpc30sX2RpdkJ5UG9pbnQoaSl7cmV0dXJuIHRoaXMueC89aS54LHRoaXMueS89aS55LHRoaXN9LF91bml0KCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycCgpe2NvbnN0IGk9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0taSx0aGlzfSxfcm90YXRlKGkpe2NvbnN0IHQ9TWF0aC5jb3MoaSksZT1NYXRoLnNpbihpKSxyPXQqdGhpcy54LWUqdGhpcy55LHM9ZSp0aGlzLngrdCp0aGlzLnk7cmV0dXJuIHRoaXMueD1yLHRoaXMueT1zLHRoaXN9LF9yb3RhdGVBcm91bmQoaSx0KXtjb25zdCBlPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkscz10LngrZSoodGhpcy54LXQueCktcioodGhpcy55LXQueSksbj10LnkrcioodGhpcy54LXQueCkrZSoodGhpcy55LXQueSk7cmV0dXJuIHRoaXMueD1zLHRoaXMueT1uLHRoaXN9LF9yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sY29uc3RydWN0b3I6eH0seC5jb252ZXJ0PWZ1bmN0aW9uKGkpe2lmKGkgaW5zdGFuY2VvZiB4KXJldHVybiBpO2lmKEFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIG5ldyB4KCtpWzBdLCtpWzFdKTtpZihpLnghPT12b2lkIDAmJmkueSE9PXZvaWQgMClyZXR1cm4gbmV3IHgoK2kueCwraS55KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIFt4LCB5XSBvciB7eCwgeX0gcG9pbnQgZm9ybWF0Iil9O2NsYXNzIGt7Y29uc3RydWN0b3IodCxlLHIscyxuKXt0aGlzLnByb3BlcnRpZXM9e30sdGhpcy5leHRlbnQ9cix0aGlzLnR5cGU9MCx0aGlzLmlkPXZvaWQgMCx0aGlzLl9wYmY9dCx0aGlzLl9nZW9tZXRyeT0tMSx0aGlzLl9rZXlzPXMsdGhpcy5fdmFsdWVzPW4sdC5yZWFkRmllbGRzKGosdGhpcyxlKX1sb2FkR2VvbWV0cnkoKXtjb25zdCB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtjb25zdCBlPXQucmVhZFZhcmludCgpK3QucG9zLHI9W107bGV0IHMsbj0xLG89MCxoPTAsYT0wO2Zvcig7dC5wb3M8ZTspe2lmKG88PTApe2NvbnN0IGQ9dC5yZWFkVmFyaW50KCk7bj1kJjcsbz1kPj4zfWlmKG8tLSxuPT09MXx8bj09PTIpaCs9dC5yZWFkU1ZhcmludCgpLGErPXQucmVhZFNWYXJpbnQoKSxuPT09MSYmKHMmJnIucHVzaChzKSxzPVtdKSxzJiZzLnB1c2gobmV3IHgoaCxhKSk7ZWxzZSBpZihuPT09NylzJiZzLnB1c2goc1swXS5jbG9uZSgpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7bn1gKX1yZXR1cm4gcyYmci5wdXNoKHMpLHJ9YmJveCgpe2NvbnN0IHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2NvbnN0IGU9dC5yZWFkVmFyaW50KCkrdC5wb3M7bGV0IHI9MSxzPTAsbj0wLG89MCxoPTEvMCxhPS0xLzAsZD0xLzAsdT0tMS8wO2Zvcig7dC5wb3M8ZTspe2lmKHM8PTApe2NvbnN0IHc9dC5yZWFkVmFyaW50KCk7cj13Jjcscz13Pj4zfWlmKHMtLSxyPT09MXx8cj09PTIpbis9dC5yZWFkU1ZhcmludCgpLG8rPXQucmVhZFNWYXJpbnQoKSxuPGgmJihoPW4pLG4+YSYmKGE9biksbzxkJiYoZD1vKSxvPnUmJih1PW8pO2Vsc2UgaWYociE9PTcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGNvbW1hbmQgJHtyfWApfXJldHVybltoLGQsYSx1XX10b0dlb0pTT04odCxlLHIpe2NvbnN0IHM9dGhpcy5leHRlbnQqTWF0aC5wb3coMixyKSxuPXRoaXMuZXh0ZW50KnQsbz10aGlzLmV4dGVudCplLGg9dGhpcy5sb2FkR2VvbWV0cnkoKTtmdW5jdGlvbiBhKGwpe3JldHVyblsobC54K24pKjM2MC9zLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoKDEtKGwueStvKSoyL3MpKk1hdGguUEkpKS05MF19ZnVuY3Rpb24gZChsKXtyZXR1cm4gbC5tYXAoYSl9bGV0IHU7aWYodGhpcy50eXBlPT09MSl7Y29uc3QgbD1bXTtmb3IoY29uc3QgViBvZiBoKWwucHVzaChWWzBdKTtjb25zdCBjPWQobCk7dT1sLmxlbmd0aD09PTE/e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpjWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6Y319ZWxzZSBpZih0aGlzLnR5cGU9PT0yKXtjb25zdCBsPWgubWFwKGQpO3U9bC5sZW5ndGg9PT0xP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpsWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpsfX1lbHNlIGlmKHRoaXMudHlwZT09PTMpe2NvbnN0IGw9VyhoKSxjPVtdO2Zvcihjb25zdCBWIG9mIGwpYy5wdXNoKFYubWFwKGQpKTt1PWMubGVuZ3RoPT09MT97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6Y1swXX06e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6Y319ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB0eXBlIik7Y29uc3Qgdz17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6dSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuIHRoaXMuaWQhPW51bGwmJih3LmlkPXRoaXMuaWQpLHd9fWsudHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdO2Z1bmN0aW9uIGooaSx0LGUpe2k9PT0xP3QuaWQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/TyhlLHQpOmk9PT0zP3QudHlwZT1lLnJlYWRWYXJpbnQoKTppPT09NCYmKHQuX2dlb21ldHJ5PWUucG9zKX1mdW5jdGlvbiBPKGksdCl7Y29uc3QgZT1pLnJlYWRWYXJpbnQoKStpLnBvcztmb3IoO2kucG9zPGU7KXtjb25zdCByPXQuX2tleXNbaS5yZWFkVmFyaW50KCldLHM9dC5fdmFsdWVzW2kucmVhZFZhcmludCgpXTt0LnByb3BlcnRpZXNbcl09c319ZnVuY3Rpb24gVyhpKXtjb25zdCB0PWkubGVuZ3RoO2lmKHQ8PTEpcmV0dXJuW2ldO2NvbnN0IGU9W107bGV0IHIscztmb3IobGV0IG49MDtuPHQ7bisrKXtjb25zdCBvPUooaVtuXSk7byE9PTAmJihzPT09dm9pZCAwJiYocz1vPDApLHM9PT1vPDA/KHImJmUucHVzaChyKSxyPVtpW25dXSk6ciYmci5wdXNoKGlbbl0pKX1yZXR1cm4gciYmZS5wdXNoKHIpLGV9ZnVuY3Rpb24gSihpKXtsZXQgdD0wO2ZvcihsZXQgZT0wLHI9aS5sZW5ndGgscz1yLTEsbixvO2U8cjtzPWUrKyluPWlbZV0sbz1pW3NdLHQrPShvLngtbi54KSoobi55K28ueSk7cmV0dXJuIHR9Y2xhc3MgWHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT0iIix0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKCQsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZmVhdHVyZSh0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07Y29uc3QgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBrKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX19ZnVuY3Rpb24gJChpLHQsZSl7aT09PTE1P3QudmVyc2lvbj1lLnJlYWRWYXJpbnQoKTppPT09MT90Lm5hbWU9ZS5yZWFkU3RyaW5nKCk6aT09PTU/dC5leHRlbnQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/dC5fZmVhdHVyZXMucHVzaChlLnBvcyk6aT09PTM/dC5fa2V5cy5wdXNoKGUucmVhZFN0cmluZygpKTppPT09NCYmdC5fdmFsdWVzLnB1c2goYihlKSl9ZnVuY3Rpb24gYihpKXtsZXQgdD1udWxsO2NvbnN0IGU9aS5yZWFkVmFyaW50KCkraS5wb3M7Zm9yKDtpLnBvczxlOyl7Y29uc3Qgcj1pLnJlYWRWYXJpbnQoKT4+Mzt0PXI9PT0xP2kucmVhZFN0cmluZygpOnI9PT0yP2kucmVhZEZsb2F0KCk6cj09PTM/aS5yZWFkRG91YmxlKCk6cj09PTQ/aS5yZWFkVmFyaW50NjQoKTpyPT09NT9pLnJlYWRWYXJpbnQoKTpyPT09Nj9pLnJlYWRTVmFyaW50KCk6cj09PTc/aS5yZWFkQm9vbGVhbigpOm51bGx9aWYodD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB2YWx1ZSIpO3JldHVybiB0fWNsYXNzIHp7Y29uc3RydWN0b3IodCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoWSx7fSxlKX19ZnVuY3Rpb24gWShpLHQsZSl7aWYoaT09PTMpe2NvbnN0IHI9bmV3IFgoZSxlLnJlYWRWYXJpbnQoKStlLnBvcyk7ci5sZW5ndGgmJih0W3IubmFtZV09cil9fWFzeW5jIGZ1bmN0aW9uIEsoaSx0LGUscil7dHJ5e2NvbnN0IHM9UShpLHQsZSxyKTtyZXR1cm57eDp0LHk6ZSx6OnIsbGF5ZXJzOnMsdGltZXN0YW1wOkRhdGUubm93KCksZGF0YUZvcm1hdDoibXZ0In19Y2F0Y2gocyl7dGhyb3cgY29uc29sZS5lcnJvcigi6Kej5p6Q55+i6YeP55Om54mH5pWw5o2u5pe25Ye66ZSZOiIscyksc319ZnVuY3Rpb24gUShpLHQsZSxyKXtjb25zdCBzPW5ldyBNKGkpLG49bmV3IHoocyksbz17fTtmb3IoY29uc3QgaCBpbiBuLmxheWVycyl7Y29uc3QgYT1uLmxheWVyc1toXSxkPVtdO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7dSsrKXtjb25zdCBsPWEuZmVhdHVyZSh1KS50b0dlb0pTT04odCxlLHIpO2QucHVzaChsKX1vW2hdPWR9cmV0dXJuIG99c2VsZi5vbm1lc3NhZ2U9YXN5bmMgaT0+e2NvbnN0IHQ9aS5kYXRhO3RyeXtjb25zdCBlPWF3YWl0IEsodC5hcnJheUJ1ZmZlcix0LngsdC55LHQueik7c2VsZi5wb3N0TWVzc2FnZShlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKCJXb3JrZXIgTVZUIOino+aekOWksei0pToiLGUpLHNlbGYucG9zdE1lc3NhZ2Uoe2Vycm9yOmUubWVzc2FnZX0pfX19KSgpOwo=",J_=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),xu=typeof self<"u"&&self.Blob&&new Blob([J_(bu)],{type:"text/javascript;charset=utf-8"});function Q_(i){let e;try{if(e=xu&&(self.URL||self.webkitURL).createObjectURL(xu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+bu,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var H_=Object.defineProperty,E_=(i,e,t)=>e in i?H_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ls=(i,e,t)=>E_(i,typeof e!="symbol"?e+"":e,t);const $_=10;class q_{constructor(){Ls(this,"info",{version:"1.0.0",description:"Vector Tile loader for Mapbox Vector Tile format. It can load and parse MVT data."}),Ls(this,"dataType","VectorTile"),Ls(this,"fileLoader",new p.FileLoader(Oe.manager)),Ls(this,"_workerPool",new Ro(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new Q_)}async load(e){const{source:t,x:n,y:r,z:o}=e,a=typeof t._getUrl=="function"?t._getUrl(n,r,o):this.buildTileUrl(t.url,n,r,o);if(!a)return this.createErrorGeometry(n,r,o,new Error("VectorTileLoader: source._getUrl 返回空 URL"));this._workerPool.pool===0&&this._workerPool.setWorkerLimit($_);try{const c=await this.fetchVectorData(a),u={arrayBuffer:c,x:n,y:r,z:o},m=(await this._workerPool.postMessage(u,[c])).data;if(m.error)throw new Error(m.error);const f=this.createGeometryWithVectorData(m,e);return Oe.manager.parseEnd(a),f}catch(c){return this.createErrorGeometry(n,r,o,c)}}async fetchVectorData(e){try{const t=await this.fileLoader.loadAsync(e);if(!t||t.byteLength===0)throw new Error("Empty response");return t}catch(t){throw new Error(`Failed to fetch vector tile: ${t.message}`)}}calculateTileBounds(e,t,n){const r=4007501668557849e-8/Math.pow(2,n),o=-20037508342789244e-9+e*r,a=o+r,c=20037508342789244e-9-(t+1)*r,u=c+r;return{min:new p.Vector2(o,c),max:new p.Vector2(a,u),world:new p.Vector2(r,r)}}buildTileUrl(e,t,n,r){return e.replace("{x}",t.toString()).replace("{y}",n.toString()).replace("{z}",r.toString()).replace("{-y}",(Math.pow(2,r)-1-n).toString())}createGeometryWithVectorData(e,t){const n=new Ur;return n.userData={vectorData:e,tileInfo:{x:t.x,y:t.y,z:t.z,bounds:t.bounds},metadata:{dataType:"vector-tile",version:"1.0.0",loadedAt:Date.now()}},n}createErrorGeometry(e,t,n,r){const o=new Ur;return o.userData={vectorData:{x:e,y:t,z:n,layers:{},totalFeatures:0,bounds:this.calculateTileBounds(e,t,n),error:r.message,timestamp:Date.now(),dataFormat:"error"},tileInfo:{x:e,y:t,z:n,bounds:[0,0,0,0]},metadata:{dataType:"vector-tile-error",error:!0,errorMessage:r.message}},o}unload(e){e.userData?.vectorData&&(e.userData.vectorData=null),e.dispose&&e.dispose()}static getVectorData(e){return e.userData?.vectorData||null}static hasValidVectorData(e){const t=this.getVectorData(e);return t&&!t.error&&t.totalFeatures>0}static getLayerNames(e){const t=this.getVectorData(e);return t?Object.keys(t.layers||{}):[]}static getFeaturesByLayer(e,t){return this.getVectorData(e)?.layers?.[t]?.convertedFeatures||[]}}du(new q_);var ev=Object.defineProperty,tv=(i,e,t)=>e in i?ev(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_r=(i,e,t)=>tv(i,typeof e!="symbol"?e+"":e,t);class ga extends nu{constructor(e,t){if(super(e,t),_r(this,"layerType","vector"),_r(this,"_tileDataMap",new Map),_r(this,"_renderer"),_r(this,"_style"),_r(this,"_feaList",[]),_r(this,"_collision",!1),_r(this,"_renderAltitude",0),!t.style)throw new Error("VectorTileLayer must provide style configuration! VectorTileLayer 必须提供样式配置");this._style=t.style,this._collision=t.collision||!1,this._featureFilter=t.featureFilter,this._renderAltitude=t.altitude||0,this._rootTile.setDataOnlyMode(!0),this._setupDataModeAndListenersForChildren(),this._setupLifeCycleListeners()}_setupDataModeAndListenersForChildren(){const e=t=>{t!==this._rootTile&&t.setDataOnlyMode(!0),this._addShownListenerToTile(t),this._addUnloadListenerToTile(t)};this._rootTile.addEventListener("tile-created",t=>{const n=t.tile;e(n)}),this._rootTile.traverse(t=>{t.isTile&&e(t)})}_addShownListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`,a=!!this._renderer,c=this._tileDataMap.get(o);a&&c&&this._renderer.processTileData(r,c.data)};e.addEventListener("tile-shown",t)}_addUnloadListenerToTile(e){const t=n=>{const r=n.tile||n.target,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.removeFeaturesByTileKey(o)}catch{}this._tileDataMap.delete(o)};e.addEventListener("unload",t)}setAltitude(e){return super.setAltitude(0),this._renderAltitude=e,this._renderer&&this._renderer.setAltitude(e),this}getAltitude(){return this._renderAltitude}_addHiddenListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.hideFeaturesByTileKey(o)}catch{}};e.addEventListener("tile-hidden",t)}_setupLifeCycleListeners(){this._rootTile.addEventListener("tile-loaded",e=>{const t=e.tile,n=`${t.z}-${t.x}-${t.y}`,r=this.getVectorDataFromTile(t);if(!r){console.warn(`[VectorTileLayer] Tile ${n} loaded but has no vector data.`);return}if(r.vectorData?.dataFormat==="mvt"&&this._tileDataMap.set(n,{data:r,tile:t,timestamp:Date.now(),pending:!1}),t.showing&&this._renderer&&r.vectorData?.dataFormat==="mvt")try{this._renderer.processTileData(t,r)}catch{}})}getVectorDataFromTile(e){return!e.geometry||!e.getVectorData()?null:e.getVectorData()}createLoader(){const e=new ws;return e.vtSource=this.source,e}getVisibleVectorTiles(){const e=[];return this._rootTile.traverse(t=>{if(t.isTile&&t.loaded&&t.inFrustum){const n=`${t.z}-${t.x}-${t.y}`,r=this._tileDataMap.get(n);r&&e.push({tileKey:n,data:r.data,tile:r.tile})}}),e}getAllVectorData(){return new Map(this._tileDataMap)}getVectorData(e,t,n){const r=`${n}-${e}-${t}`,o=this._tileDataMap.get(r);return o?o.data:null}setFeatureFilter(e){this._featureFilter=e,this._renderer&&this._renderer.setFeatureFilter(e)}clearFeatureFilter(){this._featureFilter=void 0,this._renderer&&this._renderer.clearFeatureFilter()}setOpacity(e){this.opacity=e,this._renderer&&this._renderer.setOpacity(e)}update(e){!this.enabled||!this.visible||super.update(e)}dispose(){this._renderer&&this._renderer.dispose(),super.dispose()}_setRenderer(e){this._renderer=e}_getRenderer(){return this._renderer||null}getStyle(){return this._style}}var nv=Object.defineProperty,rv=(i,e,t)=>e in i?nv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ke=(i,e,t)=>rv(i,typeof e!="symbol"?e+"":e,t);class iv{constructor(...e){}}const sv={};let vr=class sf extends Bo(Kn(mr(iv))){constructor(e,t){zo(e,"container","Map container element must be specified");const n=["center","basemap"];for(const Z of n)mc(t,Z);const o={...t,viewer:{...{viewer:{antialias:!0,stencil:!0,logarithmicDepthBuffer:!0}}.viewer,...t.viewer}};super(o),Ke(this,"viewer"),Ke(this,"tilemap"),Ke(this,"center"),Ke(this,"prjcenter"),Ke(this,"_layerContainer"),Ke(this,"_EventMap",{loaded:{listened:!1}}),Ke(this,"_canvasManager",new zg),Ke(this,"collisionEngine"),Ke(this,"_onLoadHooks"),Ke(this,"_minZoom",0),Ke(this,"_maxZoom",22),Ke(this,"_ZOOM_MIN_CONST",0),Ke(this,"_ZOOM_MAX_CONST",22),Ke(this,"_minZoomDistance",500),Ke(this,"_maxZoomDistance",8e4),Ke(this,"_isZooming",!1),Ke(this,"_zoomStartValue",0),Ke(this,"_lastZoomForControls",0),Ke(this,"_overZoom",0),Ke(this,"_lastCameraDistance",0),this.tilemap=this.initTileMap(o.basemap),this.center=this.options.center,this.viewer=new vc(e,{...o.viewer,map:this}),this.tilemap.receiveShadow=!0,this.viewer.scene.add(this.tilemap);const a=this.tilemap.geo2world(new p.Vector3(this.center[0],this.center[1],0));this.prjcenter=a;const c=this.options.viewer??{};this.viewer.flyToPoint({center:this.center,distance:typeof this.center[2]=="number"?this.center[2]:void 0,polarDeg:typeof c.polarDeg=="number"?c.polarDeg:void 0,azimuthDeg:typeof c.azimuthDeg=="number"?c.azimuthDeg:void 0,polarAngle:c.polarAngle,azimuthAngle:c.azimuthAngle,duration:0,curvePath:!1}),this._minZoomDistance=this.viewer.controls.minDistance,this._maxZoomDistance=this.viewer.controls.maxDistance;const u=this._getCameraDistance();this._lastCameraDistance=u,this._layerContainer=new Ag,this.viewer.scene.add(this._layerContainer);const d=this.viewer.controls;this._minZoomDistance=typeof d?.minDistance=="number"?d.minDistance:500,this._maxZoomDistance=typeof d?.maxDistance=="number"?d.maxDistance:8e4;const f=this.tilemap.getLayers().find(Z=>Z.isBaseLayer===!0)?.minLevel??this.tilemap.minLevel;this._minZoom=Math.max(this._ZOOM_MIN_CONST,Math.min(this._ZOOM_MAX_CONST,f)),this._maxZoom=this._ZOOM_MAX_CONST;const g=this.prjcenter,w=this.viewer.camera.position.clone().clone().sub(g).normalize(),b=as(t.zoom)?13:t.zoom,L=Math.max(this._minZoom,Math.min(this._maxZoom,b)),M=this._computeDistanceFromZoom(L);a.clone().addScaledVector(w,M);const C=this.getZoom();this._lastZoomForControls=C,this._zoomStartValue=C,this.collisionEngine=new p0(this.viewer.renderer,{padding:8,updateInterval:16,animationDuration:200,maxFeaturesPerFrame:2e4,strategies:{priority:!0,grouping:!0,proximity:!0}}),this.on("control-change",m0.debounce(Z=>{if(!this.tilemap||!this.collisionEngine)return;const z=this.tilemap,D=z.getDataZoom(),I=z.getLayers().find(H=>H.isBaseLayer===!0)?.maxLevel??z.maxLevel,K=this._getCameraDistance(),V=K-this._lastCameraDistance;this._lastCameraDistance=K;const{max:G}=this._getViewZoomRange(),k=Math.max(0,G-I);D<I?this._overZoom=0:V<-.001?this._overZoom=Math.min(this._overZoom+1,k):V>.001&&(this._overZoom=Math.max(this._overZoom-1,0));const j=this.getZoom();Math.abs(j-this._lastZoomForControls)>.001&&(this._isZooming?this.trigger("zooming",{from:this._zoomStartValue,to:j}):(this._isZooming=!0,this._zoomStartValue=this._lastZoomForControls,this.trigger("zoomstart",{from:this._zoomStartValue,to:j})),this._lastZoomForControls=j),this.collisionEngine.update(Z.camera)},10,{leading:!1,trailing:!0})),this.on("control-end",()=>{this._isZooming&&(this._isZooming=!1,this.trigger("zoomend",{from:this._zoomStartValue,to:this.getZoom()}))}),this._callOnLoadHooks()}static addOnLoadHook(e,...t){const n=typeof e=="function"?e:function(){this[e].apply(this,t)},r=this.prototype;return r._onLoadHooks=r._onLoadHooks||[],r._onLoadHooks.push(n),this}_callOnLoadHooks(){const e=sf.prototype;if(e._onLoadHooks)for(let t=0,n=e._onLoadHooks.length;t<n;t++)e._onLoadHooks[t].call(this)}getZoom(){const e=this.tilemap,t=e.getDataZoom(),r=e.getLayers().find(o=>o.isBaseLayer===!0)?.maxLevel??e.maxLevel;return t<r?t:r+this._overZoom}getDataZoom(){return this.tilemap.getDataZoom()}getMinZoom(){return this._minZoom}getMaxZoom(){return this._maxZoom}setZoomRange(e,t){if(e>t){const r=e;e=t,t=r}this._minZoom=e,this._maxZoom=t;const n=this.viewer.controls;if(n){const r=this._computeDistanceFromZoom(this._maxZoom),o=this._computeDistanceFromZoom(this._minZoom);n.minDistance=r,n.maxDistance=o}return this}setMinZoom(e){return this.setZoomRange(e,this._maxZoom)}setMaxZoom(e){return this.setZoomRange(this._minZoom,e)}setZoom(e){const t=this.getMinZoom(),n=this.getMaxZoom(),r=Math.max(t,Math.min(n,e)),o=this.getZoom(),a=this._computeDistanceFromZoom(r),c=this.viewer.controls,u=c?.target??this.prjcenter,d=this.viewer.camera,m=d.position.clone().sub(u).normalize();return d.position.copy(u).addScaledVector(m,a),d.updateProjectionMatrix(),typeof c?.update=="function"&&c.update(),this._lastZoomForControls=r,this.trigger("zoomend",{from:o,to:this.getZoom()}),this}zoomIn(e=1){return this.setZoom(this.getZoom()+e)}zoomOut(e=1){return this.setZoom(this.getZoom()-e)}_computeDistanceFromZoom(e){const t=this._ZOOM_MIN_CONST,n=this._ZOOM_MAX_CONST,r=this._minZoomDistance,o=this._maxZoomDistance;if(r<=0||r>=o){const m=Math.max(t,Math.min(n,e)),f=(n-m)/(n-t);return r+f*(o-r)}const c=(Math.max(t,Math.min(n,e))-t)/(n-t),u=r/o;return o*Math.pow(u,c)}initTileMap(e){const t=new hs({...e});try{if(e.Baselayers?.length)for(const n of e.Baselayers)n.isBaseLayer=!0,t.addLayer(n)}catch(n){console.error("💥 Diagnostic failed 诊断失败:",n)}return t.rotateX(-Math.PI/2),t.receiveShadow=!0,setTimeout(()=>{const n={timestamp:lm(),targrt:this};this._EventMap.loaded={listened:!0},this.trigger("loaded",n)},0),t}addLayer(e,...t){if(!e)return this;Array.isArray(e)||(e=[e]),t?.length&&(e=e.concat(t)),t?.length&&(e=e.concat(t));for(let n=0,r=e.length;n<r;n++){const o=e[n],a=o.getId();if(as(a))throw new Error("Invalid id for the layer: "+a);o.isTileLayer?this.addTileLayer(o):this.addRegularLayer(o)}return this}removeLayer(e){const t=this.tilemap.getLayer(e);if(t){if(t instanceof ga){const r=t._getRenderer();r&&this._layerContainer.remove(r)}return this.tilemap.removeLayer(e),!0}const n=this._layerContainer.getLayerById(e);return n?(this._layerContainer.remove(n),n instanceof Bn&&n?._collision,!0):(console.warn(`⚠️ Layer does not exist 图层不存在: ${e}`),!1)}addRegularLayer(e){this._layerContainer.add(e),e._bindMap(this),e instanceof Bn&&e?._collision&&(this.collisionEngine.registerLayer(e),e.setCollisionEngine(this.collisionEngine))}addTileLayer(e){if(this.tilemap.addLayer(e),e._bindMap(this),e instanceof ga){const t=e.options||{},n=new ta(e.getId()+"-vtrender",{altitude:e.getAltitude(),style:e.getStyle(),collision:e._collision,zIndex:typeof t.zIndex=="number"?t.zIndex:void 0,depthOffset:typeof t.depthOffset=="number"?t.depthOffset:void 0});e._setRenderer(n),this.addRegularLayer(n)}return this}clearLayers(){return this._layerContainer.clear(),this.tilemap.clearLayers(),this}getLayers(){const e=this._layerContainer.getLayers().filter(n=>!(n instanceof ta)),t=this.tilemap.getLayers();return[...e,...t]}getLayerById(e){const t=this._layerContainer.getLayerById(e);return t?t instanceof ta?void 0:t:this.tilemap.getLayer(e)}geo2world(e){return this.tilemap.geo2world(e)}world2geo(e){return this.tilemap.world2geo(e)}geo2map(e){return this.tilemap.geo2map(e)}_getCanvas(e=40,t=30,n){return this._canvasManager.getCanvas(e,t,1,n)}getContainer(){return this.viewer.container}getRenderer(){return this.viewer.renderer}getCamera(){return this.viewer.camera}_findFeaturesAt(e){const t=this,n=t.getRenderer(),r=t.getCamera(),o=n.domElement.getBoundingClientRect(),a=e.x/o.width*2-1,c=-(e.y/o.height)*2+1,u=new p.Raycaster;u.setFromCamera(new p.Vector2(a,c),r);const d=t.getLayers().filter(g=>!g?.isSceneLayer&&g?.visible===!0),f=u.intersectObjects(d,!0).map(g=>{let _=g.object,w=null;for(;_;){if(_ instanceof ct){w=_;break}_=_.parent}return!w||w.visible===!1?null:{feature:w,distance:g.distance,object:g.object}}).filter(g=>!!g);return f.length?f.sort((g,_)=>g.distance-_.distance):[]}getCenter(){const e=this.viewer.controls.target.clone(),t=this.world2geo(e);return[t.x,t.y,t.z]}_getEventPosition(e){let t,n;if("touches"in e){if(e.touches.length===0)return null;t=e.touches[0].clientX,n=e.touches[0].clientY}else t=e.clientX,n=e.clientY;const r=this.getContainer();if(!r)return null;const o=r.getBoundingClientRect();return{x:t-o.left,y:n-o.top}}get isInteracting(){return this.viewer?this.viewer.isInteracting:!1}_getCameraDistance(){const e=this.viewer.controls,t=this.viewer.camera,n=e?.target??this.prjcenter;return e&&typeof e.getDistance=="function"?e.getDistance():t.position.distanceTo(n)}_getViewZoomRange(){const e=this.viewer.controls,t=typeof e?.minDistance=="number"?e.minDistance:this._minZoomDistance,n=typeof e?.maxDistance=="number"?e.maxDistance:this._maxZoomDistance;if(t<=0||t>=n){const f=this.tilemap.getDataZoom();return{min:f,max:f}}const r=n/t,o=Math.log2(r),a=this.tilemap.getLayers().find(f=>f.isBaseLayer===!0),c=a?.minLevel??this.tilemap.minLevel,u=a?.maxLevel??this.tilemap.maxLevel,d=c,m=u+o;return{min:d,max:m}}flyTo(e){this.viewer.flyToAdvanced(e)}flyToPoint(e){this.viewer.flyToPoint(e)}destroy(){try{this._clearHandlers(),["control-change","control-start","control-end","zoomstart","zooming","zoomend","loaded"].forEach(t=>{const n=this._listenerMap?.get(t);n&&n.forEach((r,o)=>{this.off(t,o)})}),this.clearLayers(),Pc.clearCache(),this.collisionEngine&&(this.collisionEngine=null),this._layerContainer&&(this._layerContainer.clear(),this._layerContainer=null),this.tilemap&&(this.tilemap.dispose(),this.tilemap=null),this._canvasManager&&(this._canvasManager=null),this.viewer&&(this.viewer.destroy(),this.viewer=null),this._EventMap={loaded:{listened:!1}}}catch(e){console.error("Error destroying map 销毁地图时出错:",e)}}};vr.mergeOptions(sv);const ov=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout"];vr.prototype._removeDomEvents=function(){},vr.prototype._registerDomEvents=function(){const i=this.viewer.container;if(i){let t=null;ov.forEach(n=>{i.addEventListener(n,r=>{if(!this.viewer||!this.tilemap)return;if(n==="mousedown"&&(t={x:r.clientX,y:r.clientY}),n==="click"&&t){const c=r.clientX-t.x,u=r.clientY-t.y;if(Math.sqrt(c*c+u*u)>5)return}let o=ea(r,this.tilemap,this.viewer.camera),a={target:this,originEvent:r,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}};if(o){let c=[o.x,o.y,o.z];a={target:this,originEvent:r,coordinate:c,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}}}this.trigger(n,a)})})}},vr.addOnLoadHook("_registerDomEvents");var av=Object.defineProperty,lv=(i,e,t)=>e in i?av(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ya=(i,e,t)=>lv(i,typeof e!="symbol"?e+"":e,t);const cv=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout","contextmenu","touchstart","touchmove","touchend"];class uv extends ls{constructor(){super(...arguments),ya(this,"_registeredEvents",[]),ya(this,"_mouseDownTime",0),ya(this,"_eventCommon",e=>{(e.type==="mousedown"||e.type==="touchstart")&&(this._mouseDownTime=Date.now()),!(e.type==="click"&&Date.now()-this._mouseDownTime>300)&&this._handleEvent(e,e.type)})}addHooks(){const t=this.target.getContainer();t&&cv.forEach(n=>{t.addEventListener(n,this._eventCommon),this._registeredEvents.push(n)})}removeHooks(){const t=this.target.getContainer();t&&this._registeredEvents.length>0&&(this._registeredEvents.forEach(n=>{const r=n;t.removeEventListener(r,this._eventCommon)}),this._registeredEvents=[])}_handleEvent(e,t){const n=this.target;if(!n||!n.viewer||this._shouldIgnoreEvent(t)||(t==="mousemove"||t==="mouseenter"||t==="mouseleave"||t==="mouseover"||t==="mouseout"||t==="touchmove")&&!n.getLayers().some(u=>!u.isSceneLayer&&u._feaList?.length>0))return;const r=n._getEventPosition(e);if(!r)return;const o=n._findFeaturesAt(r);if(o.length===0)return;const a=o[0].feature;switch(t){case"click":this._handleClickEvent(a,e);break;case"mousemove":case"mouseenter":case"mouseleave":case"mouseover":case"mouseout":case"touchmove":this.handleMoveEvent(a,e);break;default:if(a){this._fireFeatureEvent(a,t,e);const c=a.getLayer();c&&c.trigger("feature"+t,{feature:a,domEvent:e,type:"feature"+t})}}}_handleClickEvent(e,t){if(!e)return;this._fireFeatureEvent(e,"click",t);const n=e.getLayer();n&&n.trigger("featureclick",{feature:e,domEvent:t,type:"featureclick"})}handleMoveEvent(e,t){if(!e)return;this._fireFeatureEvent(e,t.type,t);const n=e.getLayer();n&&n.trigger("feature"+t.type,{feature:e,domEvent:t,type:"feature"+t.type})}_fireFeatureEvent(e,t,n){const r=this.target;if(!r||!r.tilemap||!r.viewer)return;let o=n,a,c;if("touches"in n){const f=n.touches[0]||n.changedTouches[0];if(!f)return;o={currentTarget:n.currentTarget,clientX:f.clientX,clientY:f.clientY},a=f.screenX,c=f.screenY}else{const f=n;o=f,a=f.screenX,c=f.screenY}const u=ea(o,r.tilemap,r.viewer.camera);if(!u)return;const d=[u.x,u.y,u.z],m={target:e,originEvent:n,coordinate:d,eventName:t,screenXY:{X:a,Y:c}};e.trigger(t,m)}_shouldIgnoreEvent(e){const t=this.target;return t.viewer?e==="mousedown"||e==="touchstart"?!1:!!t.isInteracting:!0}}vr.mergeOptions({FeatureEvents:!0,onlyVisibleFeatureEvents:!0}),vr.addOnLoadHook("addHandler","FeatureEvents",uv);var hv=Object.defineProperty,dv=(i,e,t)=>e in i?hv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,vn=(i,e,t)=>dv(i,typeof e!="symbol"?e+"":e,t);let fv=class{constructor(...e){}};const Mu=class li extends Kn(mr(fv)){constructor(e={}){super(e),vn(this,"_owner"),vn(this,"_map"),vn(this,"_worldPosition"),vn(this,"_coordinate"),vn(this,"_dom"),vn(this,"_visible",!1),vn(this,"_boundMapHandlers",new Map),vn(this,"_viewerUpdateHandler"),vn(this,"_positionedOnce",!1)}_getClassName(){return"UIComponent"}getOffset(){return{x:this.options.dx??0,y:this.options.dy??0}}addTo(e){if(!e)return this;this._owner=e;const t=typeof e.getMap=="function"?e.getMap():e;return t?(this._map=t,this._bindMapEvents(!0),this.options.single&&(li._singletons.forEach(n=>{n!==this&&n.options.single&&n._map===t&&n.hide()}),li._singletons.add(this)),this.onAdd&&this.onAdd(),this.trigger("add",{owner:e,map:t}),this):this}remove(){const e=this._map;return this.hideDom(),this._bindMapEvents(!1),this.options.single&&li._singletons.delete(this),this.onRemove&&this.onRemove(),this.trigger("remove",{owner:this._owner,map:e}),this._owner=void 0,this._map=void 0,this}show(e){const t=this._map??(this._owner&&typeof this._owner.getMap=="function"?this._owner.getMap():void 0);if(!t)return this;if(this._map=t,this.options.single&&(li._singletons.forEach(n=>{n!==this&&n.options.single&&n._map===t&&n.isVisible()&&n.hide()}),li._singletons.add(this)),!this._dom){const n=this.buildOn();this._dom=n,n.style.position="absolute",typeof this.options.zIndex=="number"&&(n.style.zIndex=String(this.options.zIndex));const r=t.getContainer();if(!r)return this;r.appendChild(n)}return this._coordinate=e?[...e]:void 0,this._visible=!0,this._positionedOnce=!1,this._dom&&(this._dom.style.display="none"),this.trigger("show",{owner:this._owner,map:t}),this}hide(){return this._visible=!1,this._dom&&(this._dom.style.display="none"),this._coordinate=void 0,this.trigger("hide",{owner:this._owner,map:this._map}),this}hideDom(){return this._dom&&this._dom.parentElement&&(this._dom.parentElement.removeChild(this._dom),this.onDomRemove&&this.onDomRemove()),this._dom=void 0,this._visible=!1,this._coordinate=void 0,this}getMap(){return this._map}isVisible(){return this._visible}_bindMapEvents(e){const t=this._map;if(!t)return;const n=t,r=e?"on":"off",o=(a,c)=>{e?this._boundMapHandlers.set(a,c):this._boundMapHandlers.delete(a)};if(e){const a=()=>{this._visible&&this._updatePosition()};n[r]("control-change",a),o("control-change",a);const c=t.viewer;if(c&&!this._viewerUpdateHandler){const u=()=>{this._visible&&this._updatePosition()};this._viewerUpdateHandler=u,c.addEventListener("update",u)}}else{this._boundMapHandlers.forEach((c,u)=>{n[r](u,c)}),this._boundMapHandlers.clear();const a=t.viewer;a&&this._viewerUpdateHandler&&(a.removeEventListener("update",this._viewerUpdateHandler),this._viewerUpdateHandler=void 0)}}_resolveWorldPosition(){const e=this._map;if(!e)return;if(this._coordinate){const[n,r,o=0]=this._coordinate,a=new p.Vector3(n,r,o);return e.geo2world(a)}const t=this._owner;if(t&&t._geometry){const n=t._geometry;if(n&&(n.type==="Point"||n.type==="MultiPoint")){let r;if(n.type==="Point"?r=n.coordinates:n.type==="MultiPoint"&&Array.isArray(n.coordinates)&&n.coordinates.length>0&&(r=n.coordinates[0]),r&&r.length>=2){const o=new p.Vector3(r[0],r[1],r[2]??0);return e.geo2world(o)}}if(t._threeGeometry&&typeof t._threeGeometry.getWorldPosition=="function"){const r=new p.Vector3;if(t._threeGeometry.getWorldPosition(r),!(r.x===0&&r.y===0&&r.z===0))return r}if(t._position instanceof p.Vector3){const r=t._position;if(!(r.x===0&&r.y===0&&r.z===0))return r.clone()}}if(t&&typeof t.getWorldPosition=="function"){const n=new p.Vector3;return t.getWorldPosition(n),n}return e.prjcenter?.clone?.()??void 0}_updatePosition(){if(!this._dom||!this._map)return;if(this._visible){const u=this._resolveWorldPosition();if(!u){this._dom.style.display="none";return}this._worldPosition=u}if(!this._worldPosition)return;const e=this._map.viewer,t=e.camera,n=this._dom.style.display==="none";n&&(this._dom.style.visibility="hidden",this._dom.style.display=""),t.updateMatrixWorld();const r=this._worldPosition.clone().project(t);if(r.x<-1.1||r.x>1.1||r.y<-1.1||r.y>1.1||r.z<-1||r.z>1){this._dom.style.display="none",n&&(this._dom.style.visibility="");return}const o=(r.x*.5+.5)*e.width,a=(-r.y*.5+.5)*e.height,c=this.getOffset();if(this._dom.style.left=`${o+c.x}px`,this._dom.style.top=`${a+c.y}px`,n&&(this._dom.style.visibility=""),!this._positionedOnce){this._positionedOnce=!0,this._dom.style.display="none";return}this._dom.style.display=""}};vn(Mu,"_singletons",new Set);let Su=Mu;var pv=Object.defineProperty,mv=(i,e,t)=>e in i?pv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Lu=(i,e,t)=>mv(i,typeof e!="symbol"?e+"":e,t);class _a extends Su{constructor(e){super({single:!0,...e}),Lu(this,"_titleEl"),Lu(this,"_contentEl")}_getClassName(){return"InfoWindow"}buildOn(){if(this.options.custom){let c;this.options.content instanceof HTMLElement?c=this.options.content:(c=document.createElement("div"),typeof this.options.content=="string"&&(c.innerHTML=this.options.content));const u=this.options.containerClass;return u&&(Array.isArray(u)?u:[u]).forEach(m=>{c.classList.add(m)}),this.options.minWidth&&(c.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(c.style.minHeight=`${this.options.minHeight}px`),this._titleEl=void 0,this._contentEl=c,c}const e=document.createElement("div");e.className="terra-infowindow";const t=this.options.containerClass;t&&(Array.isArray(t)?t:[t]).forEach(u=>{e.classList.add(u)}),typeof this.options.zIndex=="number"&&(e.style.zIndex=String(this.options.zIndex)),this.options.minWidth&&(e.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(e.style.minHeight=`${this.options.minHeight}px`);const n=document.createElement("div");n.className="terra-infowindow-header";const r=document.createElement("div");r.className="terra-infowindow-title",this.options.title&&(r.innerText=this.options.title);const o=document.createElement("span");o.className="terra-infowindow-close",o.innerHTML="×",o.title="关闭",o.addEventListener("click",c=>{c.stopPropagation(),c.preventDefault(),this.close()}),o.addEventListener("mousedown",c=>{c.preventDefault()}),o.style.cursor="pointer",o.style.userSelect="none",n.appendChild(r),n.appendChild(o);const a=document.createElement("div");return a.className="terra-infowindow-content",this.options.content instanceof HTMLElement?a.appendChild(this.options.content):typeof this.options.content=="string"&&(a.innerHTML=this.options.content),e.appendChild(n),e.appendChild(a),this._titleEl=r,this._contentEl=a,e}getOffset(){const e=super.getOffset(),t=this._dom;if(!t)return e;const n=t.offsetWidth,r=t.offsetHeight,o=10;let a=e.x-n/2,c=e.y-r-o;const u=this._owner,d=this.getMap();if(u&&typeof u.getStyle=="function"&&d?.viewer){const f=u.getStyle?.()?.config,g=f?.type;if(f&&(g==="icon-point"||g==="icon-label-point")){const _=Array.isArray(f.anchor)?f.anchor:[.5,.5],w=typeof _[1]=="number"?_[1]:.5;let x=0;const b=u._threeGeometry;if(b&&b instanceof p.Sprite&&(x=this._getSpriteScreenHeight(b,d.viewer)),x<=0){let L=0;if(g==="icon-point"){const M=f.size;Array.isArray(M)?L=M[1]:typeof M=="number"&&(L=M)}else if(g==="icon-label-point"){const M=f.size??f.iconSize;Array.isArray(M)?L=M[1]:typeof M=="number"&&(L=M)}x=L*(1-w)}else x=x*(1-w);x>0&&(c-=x)}}return{x:a,y:c}}_getSpriteScreenHeight(e,t){try{const n=t.camera,r=t.renderer;if(!n||!r)return 0;const o=t.height||r.domElement.clientHeight;if(!(e.material.sizeAttenuation!==!1)){const z=n.projectionMatrix.elements[5];return e.scale.y*z*o/2}const u=new p.Vector3;e.getWorldPosition(u);const d=n.position.clone(),m=u.clone().sub(d).normalize(),f=new p.Vector3;f.crossVectors(n.up,m).normalize();const g=new p.Vector3;g.crossVectors(m,f).normalize();const _=e.scale.y*(1-e.center.y),w=e.scale.y*e.center.y,x=u.clone().add(g.clone().multiplyScalar(_)),b=u.clone().sub(g.clone().multiplyScalar(w)),L=x.clone().project(n),M=b.clone().project(n),C=(-L.y*.5+.5)*o,Z=(-M.y*.5+.5)*o;return Math.abs(Z-C)}catch(n){return console.warn("Failed to calculate sprite screen height: // 计算 sprite 屏幕高度失败:",n),0}}setTitle(e){return this.options.title=e,this._titleEl&&(this._titleEl.innerText=e??""),this}setContent(e){return this.options.content=e,this._contentEl?(this._contentEl.innerHTML="",e instanceof HTMLElement?this._contentEl.appendChild(e):this._contentEl.innerHTML=e,this):this}open(e){super.show(e);const t=this,n=()=>{!t._dom||!t._map||!t._visible||(t._positionedOnce=!0,t._updatePosition())},o=this.getMap()?.viewer;if(o&&typeof o.addEventListener=="function"){const a=()=>{o.removeEventListener("update",a),n()};o.addEventListener("update",a)}else requestAnimationFrame(n);return this}close(){return this.hide()}}ct.include({setInfoWindow(i){this.removeInfoWindow();let e;return i instanceof _a?e=i:e=new _a(i),this._infoWindow=e,this.getMap()&&e.addTo(this),this},getInfoWindow(){return this._infoWindow},openInfoWindow(i){const e=this._infoWindow;return e?(e.getMap()||this.getMap()&&e.addTo(this),requestAnimationFrame(()=>{e.open(i)}),this):this},closeInfoWindow(){return this._infoWindow&&this._infoWindow.close(),this},removeInfoWindow(){return this._infoWindow&&(this._infoWindow.remove(),this._infoWindow=void 0),this}});var gv=Object.defineProperty,yv=(i,e,t)=>e in i?gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,va=(i,e,t)=>yv(i,typeof e!="symbol"?e+"":e,t);class _v{constructor(...e){}}class Pu extends Kn(mr(_v)){constructor(e={}){super(e),va(this,"_map"),va(this,"_enabled",!1),va(this,"_boundHandlers",new Map)}addTo(e){if(!e)return this;const t=e;return t._activeMapTool&&t._activeMapTool!==this&&t._activeMapTool.disable(),t._activeMapTool=this,this._map=e,this.onAdd&&this.onAdd(),this.enable(),this.trigger("add",{map:e}),this}getMap(){return this._map}enable(){return!this._map||this._enabled?this:(this._enabled=!0,this._bindEvents(),this.onEnable&&this.onEnable(),this.trigger("enable",{map:this._map}),this)}disable(){return!this._map||!this._enabled?this:(this._enabled=!1,this._unbindEvents(),this.onDisable&&this.onDisable(),this.trigger("disable",{map:this._map}),this)}isEnabled(){return!!this._enabled}remove(){if(!this._map)return this;this.disable();const e=this._map;return e._activeMapTool===this&&delete e._activeMapTool,this._map=void 0,this.trigger("remove"),this}_bindEvents(){const e=this._map;if(!e)return;const t=this.getEvents()||{};Object.keys(t).forEach(n=>{const r=t[n];if(!r)return;const o=a=>r.call(this,a);this._boundHandlers.set(n,o),e.on(n,o)})}_unbindEvents(){const e=this._map;e&&(this._boundHandlers.forEach((t,n)=>{e.off(n,t)}),this._boundHandlers.clear())}}var vv=Object.defineProperty,wv=(i,e,t)=>e in i?vv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Zi=(i,e,t)=>wv(i,typeof e!="symbol"?e+"":e,t);class bv extends Bn{constructor(e){super(e,{altitude:1})}validateFeature(e){return!!e}}const Cu={};class Kr extends Pu{constructor(e){super(e),Zi(this,"_modeDef"),Zi(this,"_clickCoords",[]),Zi(this,"_isDrawing",!1),Zi(this,"_geometry"),Zi(this,"_draftLayer"),this.options.once=this.options.once??!1,this._ensureMode()}static registerMode(e,t){Cu[e.toLowerCase()]=t}static getModeDefinition(e){return Cu[e.toLowerCase()]}getMode(){return(this.options.mode||"").toLowerCase()}setMode(e){return this._finishDrawingSilently(),this.options.mode=e,this._ensureMode(),this}setStyle(e){return e.geometryStyle!==void 0&&(this.options.geometryStyle=e.geometryStyle),Object.prototype.hasOwnProperty.call(e,"vertexStyle")&&(this.options.vertexStyle=e.vertexStyle??null),this}getEvents(){return{click:this._handleClick.bind(this),mousemove:this._handleMouseMove.bind(this),dblclick:this._handleDblClick.bind(this)}}onEnable(){this._ensureMode()}onDisable(){this._finishDrawingSilently(),this._destroyDraftLayer()}_ensureMode(){const e=this.getMode(),t=Kr.getModeDefinition(e);if(!t)throw new Error(`DrawTool: mode "${e}" 未注册,请先调用 DrawTool.registerMode`);this._modeDef=t}_handleClick(e){if(!this._modeDef||!e.coordinate)return;const t=e.coordinate,n=this._modeDef,r={...e,drawTool:this};this._isDrawing?(this._clickCoords.push(t),n.update(this._clickCoords,this._geometry,r),this.trigger("drawvertex",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})):(this._isDrawing=!0,this._clickCoords=[t],this._geometry=n.create(t,r),this.trigger("drawstart",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})),n.clickLimit&&this._clickCoords.length>=n.clickLimit&&this._finishDrawing(r)}_handleMouseMove(e){if(!this._modeDef||!this._isDrawing||!e.coordinate)return;const t=this._modeDef,n=[...this._clickCoords,e.coordinate],r={...e,drawTool:this};t.update(n,this._geometry,r),this.trigger("drawing",{coordinate:e.coordinate,geometry:this._geometry,coords:n,originEvent:r})}_handleDblClick(e){if(!this._modeDef||!this._isDrawing)return;const t={...e,drawTool:this};this._finishDrawing(t)}_finishDrawing(e){if(!this._modeDef||!this._isDrawing)return;const n=this._modeDef.generate(this._geometry,[...this._clickCoords]);this.trigger("drawend",{geometry:n,coords:[...this._clickCoords],originEvent:e}),this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0,this.options.once&&this.disable()}_finishDrawingSilently(){this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0}_getOrCreateDraftLayer(){if(this._draftLayer)return this._draftLayer;const e=this.getMap();if(!e)throw new Error("DrawTool: 尚未绑定地图,请先调用 addTo(map)");const t=`__draw_draft_${Date.now().toString(36)}`,n=new bv(t);return e.addLayer(n),this._draftLayer=n,n}_destroyDraftLayer(){const e=this.getMap();e&&this._draftLayer&&e.removeLayer(this._draftLayer.getId()),this._draftLayer=void 0}}const xv={actions:["click","mousemove"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Hn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),o={type:"Point",coordinates:i},a=new Pn({geometry:o,style:r});return a.addTo(n),a.initializeGeometry(),{tool:t,draftLayer:n,draftMarker:a}},update(i,e,t){const n=e?.draftMarker;if(!n)return;const r=i[i.length-1];n._geometry={type:"Point",coordinates:r},n._position=n._coordsTransform(),n._toThreeJSGeometry&&n._toThreeJSGeometry()},generate(i,e){const t=i.tool;if(!e.length)return null;i.draftMarker&&(i.draftMarker._remove(),i.draftMarker=null);const n=Hn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),r=e[e.length-1];return new Pn({geometry:{type:"Point",coordinates:r},style:n})},clickLimit:1},Mv={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Hn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2}),o=t.options.vertexStyle===null?void 0:Hn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),a={type:"LineString",coordinates:[i]},c=new xt({geometry:a,style:r});c.addTo(n);const u=[];if(o){const d={type:"Point",coordinates:i},m=new Pn({geometry:d,style:o});m.addTo(n),u.push(m)}return{tool:t,draftLayer:n,draftLine:c,draftAnchors:u,lineStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(!i||i.length<2)return;e.draftLine&&(e.draftLine._remove(),e.draftLine=null);const r={type:"LineString",coordinates:i},o=new xt({geometry:r,style:e.lineStyle});if(o.addTo(n),e.draftLine=o,t.eventName==="click"&&e.vertexStyle){const c={type:"Point",coordinates:i[i.length-1]},u=new Pn({geometry:c,style:e.vertexStyle});u.addTo(n),e.draftAnchors.push(u)}},generate(i,e){const t=i.tool;if(!e.length)return null;if(i.draftLine&&(i.draftLine._remove(),i.draftLine=null),Array.isArray(i.draftAnchors)){for(const o of i.draftAnchors)o?._remove();i.draftAnchors=[]}const n=Hn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2});return new xt({geometry:{type:"LineString",coordinates:e},style:n})}},Sv={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Hn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),o=t.options.vertexStyle===null?void 0:Hn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),a=[];if(o){const c={type:"Point",coordinates:i},u=new Pn({geometry:c,style:o});u.addTo(n),u.initializeGeometry(),a.push(u)}return{tool:t,draftLayer:n,draftPolygon:null,draftEdgeLine:null,draftAnchors:a,polygonStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(t.eventName==="click"&&e.vertexStyle){const m={type:"Point",coordinates:i[i.length-1]},f=new Pn({geometry:m,style:e.vertexStyle});f.addTo(n),f.initializeGeometry(),e.draftAnchors.push(f)}if(!i||i.length<2){e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);return}if(i.length===2){e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null),e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const d={type:"LineString",coordinates:i},m=e.polygonStyle?.config&&e.polygonStyle.config.color||"#00ff00",f=new Gt({type:"basic-line",color:m,width:2}),g=new xt({geometry:d,style:f});g.addTo(n),e.draftEdgeLine=g;return}e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const r=i.slice(),o=r[0],a=r[r.length-1];(o[0]!==a[0]||o[1]!==a[1]||(o[2]||0)!==(a[2]||0))&&r.push(o),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);const c={type:"Polygon",coordinates:[r]},u=new _n({geometry:c,style:e.polygonStyle});u.addTo(n),e.draftPolygon=u},generate(i,e){const t=i.tool;if(e.length<3)return null;if(i.draftPolygon&&(i.draftPolygon._remove(),i.draftPolygon=null),i.draftEdgeLine&&(i.draftEdgeLine._remove(),i.draftEdgeLine=null),Array.isArray(i.draftAnchors)){for(const u of i.draftAnchors)u?._remove();i.draftAnchors=[]}const n=Hn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),r=e.slice(),o=r[0],a=r[r.length-1];return(o[0]!==a[0]||o[1]!==a[1]||(o[2]||0)!==(a[2]||0))&&r.push(o),new _n({geometry:{type:"Polygon",coordinates:[r]},style:n})}};Kr.registerMode("point",xv),Kr.registerMode("line",Mv),Kr.registerMode("polygon",Sv);function Hn(i,e){return Gt.create(i||e)}var Lv=Object.defineProperty,Pv=(i,e,t)=>e in i?Lv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,rn=(i,e,t)=>Pv(i,typeof e!="symbol"?e+"":e,t);class Cv extends nn{constructor(e){if(super(e),rn(this,"dataType","image"),rn(this,"attribution","天地图"),rn(this,"token",""),rn(this,"style","img_w"),rn(this,"subdomains","01234"),rn(this,"url","https://t{s}.tianditu.gov.cn/DataServer?T={style}&x={x}&y={y}&l={z}&tk={token}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}class Tv extends nn{constructor(e){if(super(e),rn(this,"dataType","quantized-mesh"),rn(this,"attribution","天地图"),rn(this,"token",""),rn(this,"subdomains","01234"),rn(this,"url","https://t{s}.tianditu.gov.cn/mapservice/swdx?T=elv_c&tk={token}&x={x}&y={y}&l={z}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}var Gv=Object.defineProperty,Zv=(i,e,t)=>e in i?Gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Tu=(i,e,t)=>Zv(i,typeof e!="symbol"?e+"":e,t);class Wv extends nn{constructor(e){super({...e,url:e.urlTemplate,isTMS:e.isTMS||!1}),Tu(this,"minLevel",2),Tu(this,"maxLevel",24)}getUrl(e,t,n){const r=this.isTMS?Math.pow(2,n)-1-t:t;return am(this.url,{...this,x:e,y:r,z:n,tileMatrix:n,tileRow:r,tileCol:e})}}var Vv=Object.defineProperty,Iv=(i,e,t)=>e in i?Vv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Cn=(i,e,t)=>Iv(i,typeof e!="symbol"?e+"":e,t);class Av extends nn{constructor(e){super(e),Cn(this,"dataType","image"),Cn(this,"attribution","ArcGIS"),Cn(this,"style","World_Imagery"),Cn(this,"url","https://services.arcgisonline.com/arcgis/rest/services/{style}/MapServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}class Fv extends nn{constructor(e){super(e),Cn(this,"dataType","lerc"),Cn(this,"attribution","ArcGIS"),Cn(this,"minLevel",6),Cn(this,"maxLevel",13),Cn(this,"url","https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}var Ov=Object.defineProperty,Dv=(i,e,t)=>e in i?Ov(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Nr=(i,e,t)=>Dv(i,typeof e!="symbol"?e+"":e,t);class zv extends nn{constructor(e){if(super(e),Nr(this,"token",""),Nr(this,"format","webp"),Nr(this,"style","cm2myr6qx001t01pi0sf7estf"),Nr(this,"attribution","MapBox"),Nr(this,"maxLevel",25),Nr(this,"url","https://api.mapbox.com/styles/v1/criska/cm2myr6qx001t01pi0sf7estf/tiles/256/{z}/{x}/{y}?access_token={token}&format={format}"),Object.assign(this,e),!this.token)throw new Error("MapBox访问令牌(token)是必填参数")}}var Xv=Object.defineProperty,Uv=(i,e,t)=>e in i?Xv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Gu=(i,e,t)=>Uv(i,typeof e!="symbol"?e+"":e,t);class kv extends nn{constructor(e){super(e),Gu(this,"dataType","mvt"),Gu(this,"style",{layer:[]}),Object.assign(this,e)}}var Kv=Object.defineProperty,Nv=(i,e,t)=>e in i?Kv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Wi=(i,e,t)=>Nv(i,typeof e!="symbol"?e+"":e,t);class Bv extends nn{constructor(e){super(e),Wi(this,"dataType","VectorTile"),Wi(this,"attribution","ArcGIS"),Wi(this,"minLevel",1),Wi(this,"maxLevel",21),Wi(this,"url","https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=uKYsZQZpm72WlbSgH9B7"),Object.assign(this,e)}}class Yv extends Bn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Line"}}class Rv extends Bn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Point"}}class jv extends Bn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Surface"}}var Jv=Object.defineProperty,Qv=(i,e,t)=>e in i?Jv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Hv=(i,e,t)=>Qv(i,e+"",t);class Ev extends Bn{constructor(e,t){super(e,t),Hv(this,"_clouds",null);const n=["texture"];for(const r of n)mc(t,r);this._createClouds(t.texture)}async _createClouds(e){const t=await Gt._loadTexture(e),n=new $m({texture:t,material:p.MeshBasicMaterial});n.castShadow=!0,this._clouds=n}validateFeature(e){return e._type==="Cloud"}animate(e,t){this._clouds&&this._clouds.update(this.map.viewer.camera,t,e)}}var $v=Object.defineProperty,qv=(i,e,t)=>e in i?$v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ew=(i,e,t)=>qv(i,e+"",t);class tw extends nu{constructor(e,t){super(e,t),ew(this,"layerType","raster")}createLoader(){const e=new ws;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}}var nw=Object.defineProperty,rw=(i,e,t)=>e in i?nw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ps=(i,e,t)=>rw(i,typeof e!="symbol"?e+"":e,t);class iw extends tw{constructor(e,t){super(e,t),Ps(this,"layerType","wmts"),Ps(this,"_layerName"),Ps(this,"_style"),Ps(this,"_matrixSet"),this._layerName=t.layerName,this._style=t.style||"default",this._matrixSet=t.matrixSet||"GoogleMapsCompatible"}get layerName(){return this._layerName}get style(){return this._style}get matrixSet(){return this._matrixSet}createLoader(){const e=new ws;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}update(e){this.loader&&super.update(e)}}console.log("%c✨ terra.gl V"+af+" ","color:rgb(255, 255, 255); font-weight: bold; background: linear-gradient(90deg, #ffb6c1, #ff69b4); padding: 5px; border-radius: 5px;"),q.ArcGisDemSource=Fv,q.ArcGisSource=Av,q.CloudsLayer=Ev,q.DrawTool=Kr,q.EventClass=Xo,q.Feature=ct,q.ICloud=$c,q.InfoWindow=_a,q.Label=qc,q.LineLayer=Yv,q.LineString=xt,q.LoaderFactory=Oe,q.MVTGeoSource=Bv,q.MVTSource=kv,q.Map=vr,q.MapBoxSource=zv,q.MapTool=Pu,q.Marker=Pn,q.Martini=au,q.Model=Ec,q.MultiLineString=Hc,q.PointLayer=Rv,q.Polygon=_n,q.PolygonLayer=jv,q.ProjectFactory=zm,q.PromiseWorker=yy,q.Style=Gt,q.TDTQMSource=Tv,q.TDTSource=Cv,q.TPoints=tu,q.Tile=Nn,q.TileCanvasLoader=Xy,q.TileGeometry=Ur,q.TileGeometryLoader=aa,q.TileLoader=ws,q.TileLoadingManager=ru,q.TileMap=hs,q.TileMaterial=la,q.TileMaterialLoader=ca,q.TileSource=nn,q.UIComponent=Su,q.VectorFeatureTypes=tt,q.VectorTileLayer=ga,q.VectorTileRender=cu,q.Viewer=vc,q.WMTSSource=Wv,q.WMTSTileLayer=iw,q.addSkirt=su,q.author=Qy,q.concatenateTypedArrays=Ti,q.convertGeometryToWGS84=wy,q.createBillboards=Um,q.getBoundsCoord=na,q.getGeometryDataFromDem=ou,q.getGridIndices=sa,q.getLocalInfoFromRay=Ko,q.getLocalInfoFromScreen=Sc,q.getLocalInfoFromWorld=No,q.getNormals=oa,q.getSafeTileUrlAndBounds=ra,q.registerDEMLoader=da,q.registerImgLoader=ha,q.registerMeshLoader=du,q.vector2ToWGS84=ia,q.version=Jy,q.waitFor=Hy,Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})});
|