@giro3d/piero 1.0.0-beta.4 → 1.0.0-beta.5

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.cjs.js CHANGED
@@ -1,17 +1,17 @@
1
- "use strict";var ra=Object.defineProperty;var la=(e,t,i)=>t in e?ra(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var y=(e,t,i)=>la(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const wt=require("pinia"),n=require("vue"),A=require("./Components.cjs.js"),gi=require("@giro3d/giro3d/core/geographic/Extent"),ha=require("@giro3d/giro3d/entities/FeatureCollection"),ca=require("ol/format"),ga=require("ol/loadingstrategy.js"),da=require("ol/source/Vector"),ua=require("ol/tilegrid.js"),Aa=require("@giro3d/giro3d/sources/COPCSource"),Ca=require("@giro3d/giro3d/sources/LASSource"),ma=require("@giro3d/giro3d/core/OperationCounter"),fa=require("@giro3d/giro3d/entities/PointCloud"),Ia=require("@giro3d/giro3d/sources/PointCloudSource"),di=require("@loaders.gl/core"),pa=require("@loaders.gl/csv"),va=require("@giro3d/giro3d/entities/Tiles3D"),ya=require("@giro3d/giro3d/renderer/PointCloudMaterial"),ba=require("@loaders.gl/geopackage"),Ei=require("@giro3d/giro3d/core/FeatureTypes"),ui=require("@giro3d/giro3d/entities/Entity3D"),Ma=require("ol/format/GeoJSON"),Ea=require("ol/format/GPX"),wa=require("ol/format/KML"),ce=require("@giro3d/giro3d/core/geographic/Coordinates"),Oa=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),cs=require("@giro3d/giro3d/core/Instance"),xa=require("@loaders.gl/shapefile"),_a=require("@giro3d/giro3d/utils/ColorUtils"),ft=require("@giro3d/giro3d/entities/Shape");require("@giro3d/giro3d/utils/HttpConfiguration");const ka=require("@giro3d/giro3d/core/picking/PickTilesAt"),Ot=require("@giro3d/giro3d/interactions/DrawTool"),Sa=require("@giro3d/giro3d/gui/Panel"),wi=require("@giro3d/giro3d/core/layer/MaskLayer"),Na=require("@giro3d/giro3d/entities/AxisGrid"),Oi=require("@giro3d/giro3d/entities/Map"),Pa=require("@giro3d/giro3d/sources/VectorSource"),Ta=require("ol/Feature"),La=require("ol/geom/Polygon"),xi=require("ol/style");require("@giro3d/giro3d/utils/Fetcher");const Da=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const Ba=require("@trevoreyre/autocomplete-vue");function Va(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const Ra=Va(Da);class Ua{constructor(t){this.store=t}registerTool(t){this.store.registerTool(t)}}class Fa{constructor(t){y(this,"_store");this._store=t}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(t){this._store.clear();for(const i of t)this._store.add(i)}}let ze=null;function gs(){return ze||(ze=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:A.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),ze}const be=new Map,ds={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},us={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class za extends ha{constructor(t){const i=t.featureProjection;let s;switch(t.source){case"bdtopo":s="BDTOPO_V3:batiment";break;default:return t.source}const a=new da({format:new ca.GeoJSON,strategy:ga.tile(ua.createXYZ({tileSize:512})),url:function(u){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${i}&startIndex=0&bbox=`}${u.join(",")},${i}`}}),o=t.extent??new gi("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),l=t.extrusionOffset??(c=>{const d=-c.getProperties().hauteur;return Number.isNaN(d)?0:d}),r=t.style??(c=>{const u=c.getProperties();let g="#FFFFFF";switch(u.usage_1){case"Agricole":g="#96ff0d";break;case"Commercial et services":g="#d8ffd4";break;case"Industriel":g="#f0bb41";break;case"Religieux":g="#41b5f0";break;case"Résidentiel":g="#cec8be";break;case"Sportif":g="#ff0d45";break}return{fill:{color:new A.Color(g),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),h={extent:o,extrusionOffset:l,maxLevel:t.maxLevel??11,minLevel:t.minLevel??11,source:a,style:r};super(h),this.name=t.source,A.fillObject3DUserData(this,{filename:s})}}const ja=e=>{const t=e.dataset.config,i=new za({...t,featureProjection:e.instance.referenceCrs});return Promise.resolve(i)};class Ga extends Ia.PointCloudSourceBase{constructor(i){super();y(this,"dataProjection");y(this,"isCSVPointCloudSource",!0);y(this,"type","CSVPointCloudSource");y(this,"url");y(this,"_localVolume",null);y(this,"_metadata",null);y(this,"_opCounter",new ma);y(this,"_origin",null);y(this,"_points",null);y(this,"_root",null);y(this,"_zArray",null);this.url=i.url,this.dataProjection=i.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(i){this._points!=null&&i.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(i){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let s;return i.attribute!=null&&i.attribute.name==="Z"&&(s=new A.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:s,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:i.position?new A.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const i=await di.load(this.url,pa.CSVLoader,{csv:{shape:"array-row-table"},fetch:A.Fetcher.fetch}),s=new Float32Array(i.data.length*3),a=new Float32Array(i.data.length),o=new A.Box3().makeEmpty(),l=new A.Box3().makeEmpty(),r=new A.Vector3,h=new A.Vector3(i.data[0][0],i.data[0][1],i.data[0][2]);for(let g=0;g<i.data.length;g+=1){const d=i.data[g][0],C=i.data[g][1],f=i.data[g][2],m=d-h.x,v=C-h.y,I=f-h.z;o.expandByPoint(r.set(d,C,f)),l.expandByPoint(r.set(m,v,I)),s[g*3+0]=m,s[g*3+1]=v,s[g*3+2]=I,a[g]=f}this._points=s,this._zArray=a,this._origin=h,this._localVolume=l;const c=s.length/3,u={center:o.getCenter(new A.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:c,sourceId:this.id,volume:o};return this._root=u,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:o.max.z,min:o.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:c,volume:o},this._opCounter.decrement(),this}}class Ha extends fa{constructor(i){super(i);y(this,"isPointCloudEntity",!0);const s=A.getConfig();if(this.colorMap=A.getColorMap(s.pointcloud),"url"in i.source){const a=A.Fetcher.getContext(i.source.url);A.fillObject3DUserData(this,{filename:a.filename})}}async initialize(i){await super.initialize(i),this.setActiveAttribute("Z")}}const Za=e=>{const{dataset:t}=e,i=t.config;let s;switch(i.source.type){case"copc":s=new Aa({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async(o,l)=>{const c=await i.source.url.slice(o,l).arrayBuffer();return new Uint8Array(c)}});break;case"csv":s=new Ga({...i.source});break;case"las":s=new Ca({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async()=>{const o=await A.Fetcher.fetchArrayBuffer(i.source.url);return new Uint8Array(o.slice(0))}});break;default:return i.source}const a=new Ha({source:s});return Promise.resolve(a)};class As extends va{constructor(t,i){super({...t,...i}),A.fillObject3DUserData(this,{filename:t.url})}}const Wa=e=>{const t=e.dataset.config,i=new As({...t.source,url:A.getPublicFolderUrl(t.source.url)});return Promise.resolve(i)};class qa extends As{constructor(t){const i=A.getConfig();super(t,{colorMap:A.getColorMap(i.pointcloud),pointCloudMode:ya.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const Ya=e=>{const{dataset:t}=e,i=t.config,s=new qa({...i.source,name:i.name,url:A.getPublicFolderUrl(i.source.url)});return Promise.resolve(s)},je=new ce("EPSG:4326",0,0,0);async function Ja(e,t){const s=[];for(let o=0;o<e.length;o+=200){const l=e.slice(o,o+200),r=t.slice(o,o+200);s.push(Xa(l,r))}return(await Promise.all(s)).flat()}async function Xa(e,t){return(await A.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${e.join("|")}&lat=${t.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const Ka={async alticode(e){const t=[],i=[];e.forEach(a=>{a.as("EPSG:4326",je),t.push(je.longitude),i.push(je.latitude)}),(await Ja(t,i)).forEach((a,o)=>{e[o]._values[2]=a})}},_i=e=>Ka.alticode(e),Qa=e=>{const t=e.getEntities(s=>s.isMap).at(0);if(t==null)throw new Error("No map attached to the instance");return async s=>(s.forEach(a=>{const o=t.getElevation({coordinates:a}).samples.sort((l,r)=>l.resolution-r.resolution).at(0);o!=null&&(a._values[2]=o.elevation)}),Promise.resolve())},$a=(e,t=0)=>async s=>{let a=s.filter(o=>o._values[2]===t);for(const o of e)if(await o(a),a=a.filter(l=>l._values[2]===t),a.length===0)break},Cs=(e,t,i=0)=>t?$a([Qa(e),_i],i):_i;function tn(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}var St=1,Nt=2,jt=3,en=4,oi=5,ki=6378137,sn=6356752314e-3,Si=.0066943799901413165,oe=484813681109536e-20,E=Math.PI/2,an=.16666666666666666,nn=.04722222222222222,on=.022156084656084655,x=1e-10,q=.017453292519943295,At=57.29577951308232,F=Math.PI/4,re=Math.PI*2,Z=3.14159265359,it={};it.greenwich=0;it.lisbon=-9.131906111111;it.paris=2.337229166667;it.bogota=-74.080916666667;it.madrid=-3.687938888889;it.rome=12.452333333333;it.bern=7.439583333333;it.jakarta=106.807719444444;it.ferro=-17.666666666667;it.brussels=4.367975;it.stockholm=18.058277777778;it.athens=23.7163375;it.oslo=10.722916666667;const rn={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var Ni=/[\s_\-\/\(\)]/g;function Mt(e,t){if(e[t])return e[t];for(var i=Object.keys(e),s=t.toLowerCase().replace(Ni,""),a=-1,o,l;++a<i.length;)if(o=i[a],l=o.toLowerCase().replace(Ni,""),l===s)return e[o]}function ri(e){var t={},i=e.split("+").map(function(r){return r.trim()}).filter(function(r){return r}).reduce(function(r,h){var c=h.split("=");return c.push(!0),r[c[0].toLowerCase()]=c[1],r},{}),s,a,o,l={proj:"projName",datum:"datumCode",rf:function(r){t.rf=parseFloat(r)},lat_0:function(r){t.lat0=r*q},lat_1:function(r){t.lat1=r*q},lat_2:function(r){t.lat2=r*q},lat_ts:function(r){t.lat_ts=r*q},lon_0:function(r){t.long0=r*q},lon_1:function(r){t.long1=r*q},lon_2:function(r){t.long2=r*q},alpha:function(r){t.alpha=parseFloat(r)*q},gamma:function(r){t.rectified_grid_angle=parseFloat(r)},lonc:function(r){t.longc=r*q},x_0:function(r){t.x0=parseFloat(r)},y_0:function(r){t.y0=parseFloat(r)},k_0:function(r){t.k0=parseFloat(r)},k:function(r){t.k0=parseFloat(r)},a:function(r){t.a=parseFloat(r)},b:function(r){t.b=parseFloat(r)},r_a:function(){t.R_A=!0},zone:function(r){t.zone=parseInt(r,10)},south:function(){t.utmSouth=!0},towgs84:function(r){t.datum_params=r.split(",").map(function(h){return parseFloat(h)})},to_meter:function(r){t.to_meter=parseFloat(r)},units:function(r){t.units=r;var h=Mt(rn,r);h&&(t.to_meter=h.to_meter)},from_greenwich:function(r){t.from_greenwich=r*q},pm:function(r){var h=Mt(it,r);t.from_greenwich=(h||parseFloat(r))*q},nadgrids:function(r){r==="@null"?t.datumCode="none":t.nadgrids=r},axis:function(r){var h="ewnsud";r.length===3&&h.indexOf(r.substr(0,1))!==-1&&h.indexOf(r.substr(1,1))!==-1&&h.indexOf(r.substr(2,1))!==-1&&(t.axis=r)},approx:function(){t.approx=!0}};for(s in i)a=i[s],s in l?(o=l[s],typeof o=="function"?o(a):t[o]=a):t[s]=a;return typeof t.datumCode=="string"&&t.datumCode!=="WGS84"&&(t.datumCode=t.datumCode.toLowerCase()),t}class ms{static getId(t){const i=t.find(s=>Array.isArray(s)&&s[0]==="ID");return i&&i.length>=3?{authority:i[1],code:parseInt(i[2],10)}:null}static convertUnit(t,i="unit"){if(!t||t.length<3)return{type:i,name:"unknown",conversion_factor:null};const s=t[1],a=parseFloat(t[2])||null,o=t.find(r=>Array.isArray(r)&&r[0]==="ID"),l=o?{authority:o[1],code:parseInt(o[2],10)}:null;return{type:i,name:s,conversion_factor:a,id:l}}static convertAxis(t){const i=t[1]||"Unknown";let s;const a=i.match(/^\((.)\)$/);if(a){const c=a[1].toUpperCase();if(c==="E")s="east";else if(c==="N")s="north";else if(c==="U")s="up";else throw new Error(`Unknown axis abbreviation: ${c}`)}else s=t[2]?t[2].toLowerCase():"unknown";const o=t.find(c=>Array.isArray(c)&&c[0]==="ORDER"),l=o?parseInt(o[1],10):null,r=t.find(c=>Array.isArray(c)&&(c[0]==="LENGTHUNIT"||c[0]==="ANGLEUNIT"||c[0]==="SCALEUNIT")),h=this.convertUnit(r);return{name:i,direction:s,unit:h,order:l}}static extractAxes(t){return t.filter(i=>Array.isArray(i)&&i[0]==="AXIS").map(i=>this.convertAxis(i)).sort((i,s)=>(i.order||0)-(s.order||0))}static convert(t,i={}){switch(t[0]){case"PROJCRS":i.type="ProjectedCRS",i.name=t[1],i.base_crs=t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")):null,i.conversion=t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")):null;const s=t.find(d=>Array.isArray(d)&&d[0]==="CS");s&&(i.coordinate_system={type:s[1],axis:this.extractAxes(t)});const a=t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT");if(a){const d=this.convertUnit(a);i.coordinate_system.unit=d}i.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":i.type="GeographicCRS",i.name=t[1];const o=t.find(d=>Array.isArray(d)&&(d[0]==="DATUM"||d[0]==="ENSEMBLE"));if(o){const d=this.convert(o);o[0]==="ENSEMBLE"?i.datum_ensemble=d:i.datum=d;const C=t.find(f=>Array.isArray(f)&&f[0]==="PRIMEM");C&&C[1]!=="Greenwich"&&(d.prime_meridian={name:C[1],longitude:parseFloat(C[2])})}i.coordinate_system={type:"ellipsoidal",axis:this.extractAxes(t)},i.id=this.getId(t);break;case"DATUM":i.type="GeodeticReferenceFrame",i.name=t[1],i.ellipsoid=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":i.type="DatumEnsemble",i.name=t[1],i.members=t.filter(d=>Array.isArray(d)&&d[0]==="MEMBER").map(d=>({type:"DatumEnsembleMember",name:d[1],id:this.getId(d)}));const l=t.find(d=>Array.isArray(d)&&d[0]==="ENSEMBLEACCURACY");l&&(i.accuracy=parseFloat(l[1]));const r=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID");r&&(i.ellipsoid=this.convert(r)),i.id=this.getId(t);break;case"ELLIPSOID":i.type="Ellipsoid",i.name=t[1],i.semi_major_axis=parseFloat(t[2]),i.inverse_flattening=parseFloat(t[3]),t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT")&&this.convert(t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT"),i);break;case"CONVERSION":i.type="Conversion",i.name=t[1],i.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,i.parameters=t.filter(d=>Array.isArray(d)&&d[0]==="PARAMETER").map(d=>this.convert(d));break;case"METHOD":i.type="Method",i.name=t[1],i.id=this.getId(t);break;case"PARAMETER":i.type="Parameter",i.name=t[1],i.value=parseFloat(t[2]),i.unit=this.convertUnit(t.find(d=>Array.isArray(d)&&(d[0]==="LENGTHUNIT"||d[0]==="ANGLEUNIT"||d[0]==="SCALEUNIT"))),i.id=this.getId(t);break;case"BOUNDCRS":i.type="BoundCRS";const h=t.find(d=>Array.isArray(d)&&d[0]==="SOURCECRS");if(h){const d=h.find(C=>Array.isArray(C));i.source_crs=d?this.convert(d):null}const c=t.find(d=>Array.isArray(d)&&d[0]==="TARGETCRS");if(c){const d=c.find(C=>Array.isArray(C));i.target_crs=d?this.convert(d):null}const u=t.find(d=>Array.isArray(d)&&d[0]==="ABRIDGEDTRANSFORMATION");u?i.transformation=this.convert(u):i.transformation=null;break;case"ABRIDGEDTRANSFORMATION":if(i.type="Transformation",i.name=t[1],i.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,i.parameters=t.filter(d=>Array.isArray(d)&&(d[0]==="PARAMETER"||d[0]==="PARAMETERFILE")).map(d=>{if(d[0]==="PARAMETER")return this.convert(d);if(d[0]==="PARAMETERFILE")return{name:d[1],value:d[2],id:{authority:"EPSG",code:8656}}}),i.parameters.length===7){const d=i.parameters[6];d.name==="Scale difference"&&(d.value=Math.round((d.value-1)*1e12)/1e6)}i.id=this.getId(t);break;case"AXIS":i.coordinate_system||(i.coordinate_system={type:"unspecified",axis:[]}),i.coordinate_system.axis.push(this.convertAxis(t));break;case"LENGTHUNIT":const g=this.convertUnit(t,"LinearUnit");i.coordinate_system&&i.coordinate_system.axis&&i.coordinate_system.axis.forEach(d=>{d.unit||(d.unit=g)}),g.conversion_factor&&g.conversion_factor!==1&&i.semi_major_axis&&(i.semi_major_axis={value:i.semi_major_axis,unit:g});break;default:i.keyword=t[0];break}return i}}class ln extends ms{static convert(t,i={}){return super.convert(t,i),i.coordinate_system&&i.coordinate_system.subtype==="Cartesian"&&delete i.coordinate_system,i.usage&&delete i.usage,i}}class hn extends ms{static convert(t,i={}){super.convert(t,i);const s=t.find(o=>Array.isArray(o)&&o[0]==="CS");s&&(i.coordinate_system={subtype:s[1],axis:this.extractAxes(t)});const a=t.find(o=>Array.isArray(o)&&o[0]==="USAGE");if(a){const o=a.find(h=>Array.isArray(h)&&h[0]==="SCOPE"),l=a.find(h=>Array.isArray(h)&&h[0]==="AREA"),r=a.find(h=>Array.isArray(h)&&h[0]==="BBOX");i.usage={},o&&(i.usage.scope=o[1]),l&&(i.usage.area=l[1]),r&&(i.usage.bbox=r.slice(1))}return i}}function cn(e){return e.find(t=>Array.isArray(t)&&t[0]==="USAGE")?"2019":(e.find(t=>Array.isArray(t)&&t[0]==="CS")||e[0]==="BOUNDCRS"||e[0]==="PROJCRS"||e[0]==="GEOGCRS","2015")}function gn(e){return(cn(e)==="2019"?hn:ln).convert(e)}function dn(e){const t=e.toUpperCase();return t.includes("PROJCRS")||t.includes("GEOGCRS")||t.includes("BOUNDCRS")||t.includes("VERTCRS")||t.includes("LENGTHUNIT")||t.includes("ANGLEUNIT")||t.includes("SCALEUNIT")?"WKT2":(t.includes("PROJCS")||t.includes("GEOGCS")||t.includes("LOCAL_CS")||t.includes("VERT_CS")||t.includes("UNIT"),"WKT1")}var le=1,fs=2,Is=3,xe=4,ps=5,Ai=-1,un=/\s/,An=/[A-Za-z]/,Cn=/[A-Za-z84_]/,Le=/[,\]]/,vs=/[\d\.E\-\+]/;function pt(e){if(typeof e!="string")throw new Error("not a string");this.text=e.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=le}pt.prototype.readCharicter=function(){var e=this.text[this.place++];if(this.state!==xe)for(;un.test(e);){if(this.place>=this.text.length)return;e=this.text[this.place++]}switch(this.state){case le:return this.neutral(e);case fs:return this.keyword(e);case xe:return this.quoted(e);case ps:return this.afterquote(e);case Is:return this.number(e);case Ai:return}};pt.prototype.afterquote=function(e){if(e==='"'){this.word+='"',this.state=xe;return}if(Le.test(e)){this.word=this.word.trim(),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in afterquote yet, index '+this.place)};pt.prototype.afterItem=function(e){if(e===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=le;return}if(e==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=le,this.currentObject=this.stack.pop(),this.currentObject||(this.state=Ai);return}};pt.prototype.number=function(e){if(vs.test(e)){this.word+=e;return}if(Le.test(e)){this.word=parseFloat(this.word),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in number yet, index '+this.place)};pt.prototype.quoted=function(e){if(e==='"'){this.state=ps;return}this.word+=e};pt.prototype.keyword=function(e){if(Cn.test(e)){this.word+=e;return}if(e==="["){var t=[];t.push(this.word),this.level++,this.root===null?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,this.state=le;return}if(Le.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in keyword yet, index '+this.place)};pt.prototype.neutral=function(e){if(An.test(e)){this.word=e,this.state=fs;return}if(e==='"'){this.word="",this.state=xe;return}if(vs.test(e)){this.word=e,this.state=Is;return}if(Le.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in neutral yet, index '+this.place)};pt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===Ai)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function mn(e){var t=new pt(e);return t.output()}function Ge(e,t,i){Array.isArray(t)&&(i.unshift(t),t=null);var s=t?{}:e,a=i.reduce(function(o,l){return Rt(l,o),o},s);t&&(e[t]=a)}function Rt(e,t){if(!Array.isArray(e)){t[e]=!0;return}var i=e.shift();if(i==="PARAMETER"&&(i=e.shift()),e.length===1){if(Array.isArray(e[0])){t[i]={},Rt(e[0],t[i]);return}t[i]=e[0];return}if(!e.length){t[i]=!0;return}if(i==="TOWGS84"){t[i]=e;return}if(i==="AXIS"){i in t||(t[i]=[]),t[i].push(e);return}Array.isArray(i)||(t[i]={});var s;switch(i){case"UNIT":case"PRIMEM":case"VERT_DATUM":t[i]={name:e[0].toLowerCase(),convert:e[1]},e.length===3&&Rt(e[2],t[i]);return;case"SPHEROID":case"ELLIPSOID":t[i]={name:e[0],a:e[1],rf:e[2]},e.length===4&&Rt(e[3],t[i]);return;case"EDATUM":case"ENGINEERINGDATUM":case"LOCAL_DATUM":case"DATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":e[0]=["name",e[0]],Ge(t,i,e);return;case"COMPD_CS":case"COMPOUNDCRS":case"FITTED_CS":case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"ENGCRS":case"ENGINEERINGCRS":e[0]=["name",e[0]],Ge(t,i,e),t[i].type=i;return;default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return Rt(e,t[i]);return Ge(t,i,e)}}var fn=.017453292519943295;function ht(e){return e*fn}function ys(e){const t=(e.projName||"").toLowerCase().replace(/_/g," ");!e.long0&&e.longc&&(t==="albers conic equal area"||t==="lambert azimuthal equal area")&&(e.long0=e.longc),!e.lat_ts&&e.lat1&&(t==="stereographic south pole"||t==="polar stereographic (variant b)")?(e.lat0=ht(e.lat1>0?90:-90),e.lat_ts=e.lat1,delete e.lat1):!e.lat_ts&&e.lat0&&(t==="polar stereographic"||t==="polar stereographic (variant a)")&&(e.lat_ts=e.lat0,e.lat0=ht(e.lat0>0?90:-90),delete e.lat1)}function Pi(e){let t={units:null,to_meter:void 0};return typeof e=="string"?(t.units=e.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.units==="meter"&&(t.to_meter=1)):e&&e.name&&(t.units=e.name.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.to_meter=e.conversion_factor),t}function Ti(e){return typeof e=="object"?e.value*e.unit.conversion_factor:e}function Li(e,t){e.ellipsoid.radius?(t.a=e.ellipsoid.radius,t.rf=0):(t.a=Ti(e.ellipsoid.semi_major_axis),e.ellipsoid.inverse_flattening!==void 0?t.rf=e.ellipsoid.inverse_flattening:e.ellipsoid.semi_major_axis!==void 0&&e.ellipsoid.semi_minor_axis!==void 0&&(t.rf=t.a/(t.a-Ti(e.ellipsoid.semi_minor_axis))))}function _e(e,t={}){return!e||typeof e!="object"?e:e.type==="BoundCRS"?(_e(e.source_crs,t),e.transformation&&(e.transformation.method&&e.transformation.method.name==="NTv2"?t.nadgrids=e.transformation.parameters[0].value:t.datum_params=e.transformation.parameters.map(i=>i.value)),t):(Object.keys(e).forEach(i=>{const s=e[i];if(s!==null)switch(i){case"name":if(t.srsCode)break;t.name=s,t.srsCode=s;break;case"type":s==="GeographicCRS"?t.projName="longlat":s==="ProjectedCRS"&&e.conversion&&e.conversion.method&&(t.projName=e.conversion.method.name);break;case"datum":case"datum_ensemble":s.ellipsoid&&(t.ellps=s.ellipsoid.name,Li(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,Li(s,t);break;case"prime_meridian":t.long0=(s.longitude||0)*Math.PI/180;break;case"coordinate_system":if(s.axis){if(t.axis=s.axis.map(a=>{const o=a.direction;if(o==="east")return"e";if(o==="north")return"n";if(o==="west")return"w";if(o==="south")return"s";throw new Error(`Unknown axis direction: ${o}`)}).join("")+"u",s.unit){const{units:a,to_meter:o}=Pi(s.unit);t.units=a,t.to_meter=o}else if(s.axis[0]&&s.axis[0].unit){const{units:a,to_meter:o}=Pi(s.axis[0].unit);t.units=a,t.to_meter=o}}break;case"id":s.authority&&s.code&&(t.title=s.authority+":"+s.code);break;case"conversion":s.method&&s.method.name&&(t.projName=s.method.name),s.parameters&&s.parameters.forEach(a=>{const o=a.name.toLowerCase().replace(/\s+/g,"_"),l=a.value;a.unit&&a.unit.conversion_factor?t[o]=l*a.unit.conversion_factor:a.unit==="degree"?t[o]=l*Math.PI/180:t[o]=l});break;case"unit":s.name&&(t.units=s.name.toLowerCase(),t.units==="metre"&&(t.units="meter")),s.conversion_factor&&(t.to_meter=s.conversion_factor);break;case"base_crs":_e(s,t),t.datumCode=s.id?s.id.authority+"_"+s.id.code:s.name;break}}),t.latitude_of_false_origin!==void 0&&(t.lat0=t.latitude_of_false_origin),t.longitude_of_false_origin!==void 0&&(t.long0=t.longitude_of_false_origin),t.latitude_of_standard_parallel!==void 0&&(t.lat0=t.latitude_of_standard_parallel,t.lat1=t.latitude_of_standard_parallel),t.latitude_of_1st_standard_parallel!==void 0&&(t.lat1=t.latitude_of_1st_standard_parallel),t.latitude_of_2nd_standard_parallel!==void 0&&(t.lat2=t.latitude_of_2nd_standard_parallel),t.latitude_of_projection_centre!==void 0&&(t.lat0=t.latitude_of_projection_centre),t.longitude_of_projection_centre!==void 0&&(t.longc=t.longitude_of_projection_centre),t.easting_at_false_origin!==void 0&&(t.x0=t.easting_at_false_origin),t.northing_at_false_origin!==void 0&&(t.y0=t.northing_at_false_origin),t.latitude_of_natural_origin!==void 0&&(t.lat0=t.latitude_of_natural_origin),t.longitude_of_natural_origin!==void 0&&(t.long0=t.longitude_of_natural_origin),t.longitude_of_origin!==void 0&&(t.long0=t.longitude_of_origin),t.false_easting!==void 0&&(t.x0=t.false_easting),t.easting_at_projection_centre&&(t.x0=t.easting_at_projection_centre),t.false_northing!==void 0&&(t.y0=t.false_northing),t.northing_at_projection_centre&&(t.y0=t.northing_at_projection_centre),t.standard_parallel_1!==void 0&&(t.lat1=t.standard_parallel_1),t.standard_parallel_2!==void 0&&(t.lat2=t.standard_parallel_2),t.scale_factor_at_natural_origin!==void 0&&(t.k0=t.scale_factor_at_natural_origin),t.scale_factor_at_projection_centre!==void 0&&(t.k0=t.scale_factor_at_projection_centre),t.scale_factor_on_pseudo_standard_parallel!==void 0&&(t.k0=t.scale_factor_on_pseudo_standard_parallel),t.azimuth!==void 0&&(t.alpha=t.azimuth),t.azimuth_at_projection_centre!==void 0&&(t.alpha=t.azimuth_at_projection_centre),t.angle_from_rectified_to_skew_grid&&(t.rectified_grid_angle=t.angle_from_rectified_to_skew_grid),ys(t),t)}var In=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function pn(e,t){var i=t[0],s=t[1];!(i in e)&&s in e&&(e[i]=e[s],t.length===3&&(e[i]=t[2](e[i])))}function bs(e){for(var t=Object.keys(e),i=0,s=t.length;i<s;++i){var a=t[i];In.indexOf(a)!==-1&&vn(e[a]),typeof e[a]=="object"&&bs(e[a])}}function vn(e){if(e.AUTHORITY){var t=Object.keys(e.AUTHORITY)[0];t&&t in e.AUTHORITY&&(e.title=t+":"+e.AUTHORITY[t])}if(e.type==="GEOGCS"?e.projName="longlat":e.type==="LOCAL_CS"?(e.projName="identity",e.local=!0):typeof e.PROJECTION=="object"?e.projName=Object.keys(e.PROJECTION)[0]:e.projName=e.PROJECTION,e.AXIS){for(var i="",s=0,a=e.AXIS.length;s<a;++s){var o=[e.AXIS[s][0].toLowerCase(),e.AXIS[s][1].toLowerCase()];o[0].indexOf("north")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="north"?i+="n":o[0].indexOf("south")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="south"?i+="s":o[0].indexOf("east")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="east"?i+="e":(o[0].indexOf("west")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="west")&&(i+="w")}i.length===2&&(i+="u"),i.length===3&&(e.axis=i)}e.UNIT&&(e.units=e.UNIT.name.toLowerCase(),e.units==="metre"&&(e.units="meter"),e.UNIT.convert&&(e.type==="GEOGCS"?e.DATUM&&e.DATUM.SPHEROID&&(e.to_meter=e.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter=e.UNIT.convert));var l=e.GEOGCS;e.type==="GEOGCS"&&(l=e),l&&(l.DATUM?e.datumCode=l.DATUM.name.toLowerCase():e.datumCode=l.name.toLowerCase(),e.datumCode.slice(0,2)==="d_"&&(e.datumCode=e.datumCode.slice(2)),e.datumCode==="new_zealand_1949"&&(e.datumCode="nzgd49"),(e.datumCode==="wgs_1984"||e.datumCode==="world_geodetic_system_1984")&&(e.PROJECTION==="Mercator_Auxiliary_Sphere"&&(e.sphere=!0),e.datumCode="wgs84"),e.datumCode==="belge_1972"&&(e.datumCode="rnb72"),l.DATUM&&l.DATUM.SPHEROID&&(e.ellps=l.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),e.ellps.toLowerCase().slice(0,13)==="international"&&(e.ellps="intl"),e.a=l.DATUM.SPHEROID.a,e.rf=parseFloat(l.DATUM.SPHEROID.rf,10)),l.DATUM&&l.DATUM.TOWGS84&&(e.datum_params=l.DATUM.TOWGS84),~e.datumCode.indexOf("osgb_1936")&&(e.datumCode="osgb36"),~e.datumCode.indexOf("osni_1952")&&(e.datumCode="osni52"),(~e.datumCode.indexOf("tm65")||~e.datumCode.indexOf("geodetic_datum_of_1965"))&&(e.datumCode="ire65"),e.datumCode==="ch1903+"&&(e.datumCode="ch1903"),~e.datumCode.indexOf("israel")&&(e.datumCode="isr93")),e.b&&!isFinite(e.b)&&(e.b=e.a),e.rectified_grid_angle&&(e.rectified_grid_angle=ht(e.rectified_grid_angle));function r(u){var g=e.to_meter||1;return u*g}var h=function(u){return pn(e,u)},c=[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_1","Latitude of 1st standard parallel"],["standard_parallel_2","Standard_Parallel_2"],["standard_parallel_2","Latitude of 2nd standard parallel"],["false_easting","False_Easting"],["false_easting","False easting"],["false-easting","Easting at false origin"],["false_northing","False_Northing"],["false_northing","False northing"],["false_northing","Northing at false origin"],["central_meridian","Central_Meridian"],["central_meridian","Longitude of natural origin"],["central_meridian","Longitude of false origin"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["latitude_of_origin","Latitude of natural origin"],["latitude_of_origin","Latitude of false origin"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",ht],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",ht],["x0","false_easting",r],["y0","false_northing",r],["long0","central_meridian",ht],["lat0","latitude_of_origin",ht],["lat0","standard_parallel_1",ht],["lat1","standard_parallel_1",ht],["lat2","standard_parallel_2",ht],["azimuth","Azimuth"],["alpha","azimuth",ht],["srsCode","name"]];c.forEach(h),ys(e)}function Ms(e){if(typeof e=="object")return _e(e);const t=dn(e);var i=mn(e);if(t==="WKT2"){const o=gn(i);return _e(o)}var s=i[0],a={};return Rt(i,a),bs(a),a[s]}function Q(e){var t=this;if(arguments.length===2){var i=arguments[1];typeof i=="string"?i.charAt(0)==="+"?Q[e]=ri(arguments[1]):Q[e]=Ms(arguments[1]):Q[e]=i}else if(arguments.length===1){if(Array.isArray(e))return e.map(function(s){Array.isArray(s)?Q.apply(t,s):Q(s)});if(typeof e=="string"){if(e in Q)return Q[e]}else"EPSG"in e?Q["EPSG:"+e.EPSG]=e:"ESRI"in e?Q["ESRI:"+e.ESRI]=e:"IAU2000"in e?Q["IAU2000:"+e.IAU2000]=e:console.log(e);return}}tn(Q);function yn(e){return typeof e=="string"}function bn(e){return e in Q}var Mn=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function En(e){return Mn.some(function(t){return e.indexOf(t)>-1})}var wn=["3857","900913","3785","102113"];function On(e){var t=Mt(e,"authority");if(t){var i=Mt(t,"epsg");return i&&wn.indexOf(i)>-1}}function xn(e){var t=Mt(e,"extension");if(t)return Mt(t,"proj4")}function _n(e){return e[0]==="+"}function kn(e){if(yn(e)){if(bn(e))return Q[e];if(En(e)){var t=Ms(e);if(On(t))return Q["EPSG:3857"];var i=xn(t);return i?ri(i):t}if(_n(e))return ri(e)}else return e}function Di(e,t){e=e||{};var i,s;if(!t)return e;for(s in t)i=t[s],i!==void 0&&(e[s]=i);return e}function mt(e,t,i){var s=e*t;return i/Math.sqrt(1-s*s)}function ge(e){return e<0?-1:1}function k(e){return Math.abs(e)<=Z?e:e-ge(e)*re}function gt(e,t,i){var s=e*i,a=.5*e;return s=Math.pow((1-s)/(1+s),a),Math.tan(.5*(E-t))/s}function he(e,t){for(var i=.5*e,s,a,o=E-2*Math.atan(t),l=0;l<=15;l++)if(s=e*Math.sin(o),a=E-2*Math.atan(t*Math.pow((1-s)/(1+s),i))-o,o+=a,Math.abs(a)<=1e-10)return o;return-9999}function Sn(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=mt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function Nn(e){var t=e.x,i=e.y;if(i*At>90&&i*At<-90&&t*At>180&&t*At<-180)return null;var s,a;if(Math.abs(Math.abs(i)-E)<=x)return null;if(this.sphere)s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0+this.a*this.k0*Math.log(Math.tan(F+.5*i));else{var o=Math.sin(i),l=gt(this.e,i,o);s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0-this.a*this.k0*Math.log(l)}return e.x=s,e.y=a,e}function Pn(e){var t=e.x-this.x0,i=e.y-this.y0,s,a;if(this.sphere)a=E-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(a=he(this.e,o),a===-9999)return null}return s=k(this.long0+t/(this.a*this.k0)),e.x=s,e.y=a,e}var Tn=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const Ln={init:Sn,forward:Nn,inverse:Pn,names:Tn};function Dn(){}function Bi(e){return e}var Bn=["longlat","identity"];const Vn={init:Dn,forward:Bi,inverse:Bi,names:Bn};var Rn=[Ln,Vn],Me={},ke=[];function Es(e,t){var i=ke.length;return e.names?(ke[i]=e,e.names.forEach(function(s){Me[s.toLowerCase()]=i}),this):(console.log(t),!0)}function Un(e){if(!e)return!1;var t=e.toLowerCase();if(typeof Me[t]<"u"&&ke[Me[t]])return ke[Me[t]]}function Fn(){Rn.forEach(Es)}const zn={start:Fn,add:Es,get:Un};var P={};P.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};P.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};P.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};P.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};P.airy={a:6377563396e-3,b:635625691e-2,ellipseName:"Airy 1830"};P.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};P.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};P.mod_airy={a:6377340189e-3,b:6356034446e-3,ellipseName:"Modified Airy"};P.andrae={a:637710443e-2,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};P.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};P.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};P.bessel={a:6377397155e-3,rf:299.1528128,ellipseName:"Bessel 1841"};P.bess_nam={a:6377483865e-3,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};P.clrk66={a:63782064e-1,b:63565838e-1,ellipseName:"Clarke 1866"};P.clrk80={a:6378249145e-3,rf:293.4663,ellipseName:"Clarke 1880 mod."};P.clrk80ign={a:63782492e-1,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"};P.clrk58={a:6378293645208759e-9,rf:294.2606763692654,ellipseName:"Clarke 1858"};P.CPM={a:63757387e-1,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};P.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};P.engelis={a:637813605e-2,rf:298.2566,ellipseName:"Engelis 1985"};P.evrst30={a:6377276345e-3,rf:300.8017,ellipseName:"Everest 1830"};P.evrst48={a:6377304063e-3,rf:300.8017,ellipseName:"Everest 1948"};P.evrst56={a:6377301243e-3,rf:300.8017,ellipseName:"Everest 1956"};P.evrst69={a:6377295664e-3,rf:300.8017,ellipseName:"Everest 1969"};P.evrstSS={a:6377298556e-3,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};P.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};P.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};P.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};P.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};P.hough={a:6378270,rf:297,ellipseName:"Hough"};P.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};P.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};P.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};P.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};P.new_intl={a:63781575e-1,b:63567722e-1,ellipseName:"New International 1967"};P.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};P.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};P.SEasia={a:6378155,b:63567733205e-4,ellipseName:"Southeast Asia"};P.walbeck={a:6376896,b:63558348467e-4,ellipseName:"Walbeck"};P.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};P.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};P.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};var jn=P.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};P.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function Gn(e,t,i,s){var a=e*e,o=t*t,l=(a-o)/a,r=0;s?(e*=1-l*(an+l*(nn+l*on)),a=e*e,l=0):r=Math.sqrt(l);var h=(a-o)/o;return{es:l,e:r,ep2:h}}function Hn(e,t,i,s,a){if(!e){var o=Mt(P,s);o||(o=jn),e=o.a,t=o.b,i=o.rf}return i&&!t&&(t=(1-1/i)*e),(i===0||Math.abs(e-t)<x)&&(a=!0,t=e),{a:e,b:t,rf:i,sphere:a}}var W={};W.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};W.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};W.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};W.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};W.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};W.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};W.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};W.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};W.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};W.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};W.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};W.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};W.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};W.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};W.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};W.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};W.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function Zn(e,t,i,s,a,o,l){var r={};return e===void 0||e==="none"?r.datum_type=oi:r.datum_type=en,t&&(r.datum_params=t.map(parseFloat),(r.datum_params[0]!==0||r.datum_params[1]!==0||r.datum_params[2]!==0)&&(r.datum_type=St),r.datum_params.length>3&&(r.datum_params[3]!==0||r.datum_params[4]!==0||r.datum_params[5]!==0||r.datum_params[6]!==0)&&(r.datum_type=Nt,r.datum_params[3]*=oe,r.datum_params[4]*=oe,r.datum_params[5]*=oe,r.datum_params[6]=r.datum_params[6]/1e6+1)),l&&(r.datum_type=jt,r.grids=l),r.a=i,r.b=s,r.es=a,r.ep2=o,r}var ws={};function Wn(e,t){var i=new DataView(t),s=Jn(i),a=Xn(i,s);a.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var o=Kn(i,a,s),l={header:a,subgrids:o};return ws[e]=l,l}function qn(e){if(e===void 0)return null;var t=e.split(",");return t.map(Yn)}function Yn(e){if(e.length===0)return null;var t=e[0]==="@";return t&&(e=e.slice(1)),e==="null"?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:ws[e]||null,isNull:!1}}function Ut(e){return e/3600*Math.PI/180}function Jn(e){var t=e.getInt32(8,!1);return t===11?!1:(t=e.getInt32(8,!0),t!==11&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"),!0)}function Xn(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:li(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}function li(e,t,i){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,i)))}function Kn(e,t,i){for(var s=176,a=[],o=0;o<t.nSubgrids;o++){var l=$n(e,s,i),r=to(e,s,l,i),h=Math.round(1+(l.upperLongitude-l.lowerLongitude)/l.longitudeInterval),c=Math.round(1+(l.upperLatitude-l.lowerLatitude)/l.latitudeInterval);a.push({ll:[Ut(l.lowerLongitude),Ut(l.lowerLatitude)],del:[Ut(l.longitudeInterval),Ut(l.latitudeInterval)],lim:[h,c],count:l.gridNodeCount,cvs:Qn(r)})}return a}function Qn(e){return e.map(function(t){return[Ut(t.longitudeShift),Ut(t.latitudeShift)]})}function $n(e,t,i){return{name:li(e,t+8,t+16).trim(),parent:li(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,i),upperLatitude:e.getFloat64(t+88,i),lowerLongitude:e.getFloat64(t+104,i),upperLongitude:e.getFloat64(t+120,i),latitudeInterval:e.getFloat64(t+136,i),longitudeInterval:e.getFloat64(t+152,i),gridNodeCount:e.getInt32(t+168,i)}}function to(e,t,i,s){for(var a=t+176,o=16,l=[],r=0;r<i.gridNodeCount;r++){var h={latitudeShift:e.getFloat32(a+r*o,s),longitudeShift:e.getFloat32(a+r*o+4,s),latitudeAccuracy:e.getFloat32(a+r*o+8,s),longitudeAccuracy:e.getFloat32(a+r*o+12,s)};l.push(h)}return l}function Ct(e,t){if(!(this instanceof Ct))return new Ct(e);t=t||function(c){if(c)throw c};var i=kn(e);if(typeof i!="object"){t(e);return}var s=Ct.projections.get(i.projName);if(!s){t(e);return}if(i.datumCode&&i.datumCode!=="none"){var a=Mt(W,i.datumCode);a&&(i.datum_params=i.datum_params||(a.towgs84?a.towgs84.split(","):null),i.ellps=a.ellipse,i.datumName=a.datumName?a.datumName:i.datumCode)}i.k0=i.k0||1,i.axis=i.axis||"enu",i.ellps=i.ellps||"wgs84",i.lat1=i.lat1||i.lat0;var o=Hn(i.a,i.b,i.rf,i.ellps,i.sphere),l=Gn(o.a,o.b,o.rf,i.R_A),r=qn(i.nadgrids),h=i.datum||Zn(i.datumCode,i.datum_params,o.a,o.b,l.es,l.ep2,r);Di(this,i),Di(this,s),this.a=o.a,this.b=o.b,this.rf=o.rf,this.sphere=o.sphere,this.es=l.es,this.e=l.e,this.ep2=l.ep2,this.datum=h,this.init(),t(null,this)}Ct.projections=zn;Ct.projections.start();function eo(e,t){return e.datum_type!==t.datum_type||e.a!==t.a||Math.abs(e.es-t.es)>5e-11?!1:e.datum_type===St?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:e.datum_type===Nt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6]:!0}function Os(e,t,i){var s=e.x,a=e.y,o=e.z?e.z:0,l,r,h,c;if(a<-E&&a>-1.001*E)a=-E;else if(a>E&&a<1.001*E)a=E;else{if(a<-E)return{x:-1/0,y:-1/0,z:e.z};if(a>E)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),r=Math.sin(a),c=Math.cos(a),h=r*r,l=i/Math.sqrt(1-t*h),{x:(l+o)*c*Math.cos(s),y:(l+o)*c*Math.sin(s),z:(l*(1-t)+o)*r}}function xs(e,t,i,s){var a=1e-12,o=a*a,l=30,r,h,c,u,g,d,C,f,m,v,I,b,M,O=e.x,_=e.y,w=e.z?e.z:0,S,D,T;if(r=Math.sqrt(O*O+_*_),h=Math.sqrt(O*O+_*_+w*w),r/i<a){if(S=0,h/i<a)return D=E,T=-s,{x:e.x,y:e.y,z:e.z}}else S=Math.atan2(_,O);c=w/h,u=r/h,g=1/Math.sqrt(1-t*(2-t)*u*u),f=u*(1-t)*g,m=c*g,M=0;do M++,C=i/Math.sqrt(1-t*m*m),T=r*f+w*m-C*(1-t*m*m),d=t*C/(C+T),g=1/Math.sqrt(1-d*(2-d)*u*u),v=u*(1-d)*g,I=c*g,b=I*f-v*m,f=v,m=I;while(b*b>o&&M<l);return D=Math.atan(I/Math.abs(v)),{x:S,y:D,z:T}}function io(e,t,i){if(t===St)return{x:e.x+i[0],y:e.y+i[1],z:e.z+i[2]};if(t===Nt){var s=i[0],a=i[1],o=i[2],l=i[3],r=i[4],h=i[5],c=i[6];return{x:c*(e.x-h*e.y+r*e.z)+s,y:c*(h*e.x+e.y-l*e.z)+a,z:c*(-r*e.x+l*e.y+e.z)+o}}}function so(e,t,i){if(t===St)return{x:e.x-i[0],y:e.y-i[1],z:e.z-i[2]};if(t===Nt){var s=i[0],a=i[1],o=i[2],l=i[3],r=i[4],h=i[5],c=i[6],u=(e.x-s)/c,g=(e.y-a)/c,d=(e.z-o)/c;return{x:u+h*g-r*d,y:-h*u+g+l*d,z:r*u-l*g+d}}}function me(e){return e===St||e===Nt}function ao(e,t,i){if(eo(e,t)||e.datum_type===oi||t.datum_type===oi)return i;var s=e.a,a=e.es;if(e.datum_type===jt){var o=Vi(e,!1,i);if(o!==0)return;s=ki,a=Si}var l=t.a,r=t.b,h=t.es;if(t.datum_type===jt&&(l=ki,r=sn,h=Si),a===h&&s===l&&!me(e.datum_type)&&!me(t.datum_type))return i;if(i=Os(i,a,s),me(e.datum_type)&&(i=io(i,e.datum_type,e.datum_params)),me(t.datum_type)&&(i=so(i,t.datum_type,t.datum_params)),i=xs(i,h,l,r),t.datum_type===jt){var c=Vi(t,!0,i);if(c!==0)return}return i}function Vi(e,t,i){if(e.grids===null||e.grids.length===0)return console.log("Grid shift grids not found"),-1;for(var s={x:-i.x,y:i.y},a={x:Number.NaN,y:Number.NaN},o=[],l=0;l<e.grids.length;l++){var r=e.grids[l];if(o.push(r.name),r.isNull){a=s;break}if(r.mandatory,r.grid===null){if(r.mandatory)return console.log("Unable to find mandatory grid '"+r.name+"'"),-1;continue}var h=r.grid.subgrids[0],c=(Math.abs(h.del[1])+Math.abs(h.del[0]))/1e4,u=h.ll[0]-c,g=h.ll[1]-c,d=h.ll[0]+(h.lim[0]-1)*h.del[0]+c,C=h.ll[1]+(h.lim[1]-1)*h.del[1]+c;if(!(g>s.y||u>s.x||C<s.y||d<s.x)&&(a=no(s,t,h),!isNaN(a.x)))break}return isNaN(a.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*At+" "+s.y*At+" tried: '"+o+"'"),-1):(i.x=-a.x,i.y=a.y,0)}function no(e,t,i){var s={x:Number.NaN,y:Number.NaN};if(isNaN(e.x))return s;var a={x:e.x,y:e.y};a.x-=i.ll[0],a.y-=i.ll[1],a.x=k(a.x-Math.PI)+Math.PI;var o=Ri(a,i);if(t){if(isNaN(o.x))return s;o.x=a.x-o.x,o.y=a.y-o.y;var l=9,r=1e-12,h,c;do{if(c=Ri(o,i),isNaN(c.x)){console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");break}h={x:a.x-(c.x+o.x),y:a.y-(c.y+o.y)},o.x+=h.x,o.y+=h.y}while(l--&&Math.abs(h.x)>r&&Math.abs(h.y)>r);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),s;s.x=k(o.x+i.ll[0]),s.y=o.y+i.ll[1]}else isNaN(o.x)||(s.x=e.x+o.x,s.y=e.y+o.y);return s}function Ri(e,t){var i={x:e.x/t.del[0],y:e.y/t.del[1]},s={x:Math.floor(i.x),y:Math.floor(i.y)},a={x:i.x-1*s.x,y:i.y-1*s.y},o={x:Number.NaN,y:Number.NaN},l;if(s.x<0||s.x>=t.lim[0]||s.y<0||s.y>=t.lim[1])return o;l=s.y*t.lim[0]+s.x;var r={x:t.cvs[l][0],y:t.cvs[l][1]};l++;var h={x:t.cvs[l][0],y:t.cvs[l][1]};l+=t.lim[0];var c={x:t.cvs[l][0],y:t.cvs[l][1]};l--;var u={x:t.cvs[l][0],y:t.cvs[l][1]},g=a.x*a.y,d=a.x*(1-a.y),C=(1-a.x)*(1-a.y),f=(1-a.x)*a.y;return o.x=C*r.x+d*h.x+f*u.x+g*c.x,o.y=C*r.y+d*h.y+f*u.y+g*c.y,o}function Ui(e,t,i){var s=i.x,a=i.y,o=i.z||0,l,r,h,c={};for(h=0;h<3;h++)if(!(t&&h===2&&i.z===void 0))switch(h===0?(l=s,"ew".indexOf(e.axis[h])!==-1?r="x":r="y"):h===1?(l=a,"ns".indexOf(e.axis[h])!==-1?r="y":r="x"):(l=o,r="z"),e.axis[h]){case"e":c[r]=l;break;case"w":c[r]=-l;break;case"n":c[r]=l;break;case"s":c[r]=-l;break;case"u":i[r]!==void 0&&(c.z=l);break;case"d":i[r]!==void 0&&(c.z=-l);break;default:return null}return c}function _s(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function oo(e){Fi(e.x),Fi(e.y)}function Fi(e){if(typeof Number.isFinite=="function"){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if(typeof e!="number"||e!==e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function ro(e,t){return(e.datum.datum_type===St||e.datum.datum_type===Nt||e.datum.datum_type===jt)&&t.datumCode!=="WGS84"||(t.datum.datum_type===St||t.datum.datum_type===Nt||t.datum.datum_type===jt)&&e.datumCode!=="WGS84"}function Se(e,t,i,s){var a;Array.isArray(i)?i=_s(i):i={x:i.x,y:i.y,z:i.z,m:i.m};var o=i.z!==void 0;if(oo(i),e.datum&&t.datum&&ro(e,t)&&(a=new Ct("WGS84"),i=Se(e,a,i,s),e=a),s&&e.axis!=="enu"&&(i=Ui(e,!1,i)),e.projName==="longlat")i={x:i.x*q,y:i.y*q,z:i.z||0};else if(e.to_meter&&(i={x:i.x*e.to_meter,y:i.y*e.to_meter,z:i.z||0}),i=e.inverse(i),!i)return;if(e.from_greenwich&&(i.x+=e.from_greenwich),i=ao(e.datum,t.datum,i),!!i)return t.from_greenwich&&(i={x:i.x-t.from_greenwich,y:i.y,z:i.z||0}),t.projName==="longlat"?i={x:i.x*At,y:i.y*At,z:i.z||0}:(i=t.forward(i),t.to_meter&&(i={x:i.x/t.to_meter,y:i.y/t.to_meter,z:i.z||0})),s&&t.axis!=="enu"?Ui(t,!0,i):(o||delete i.z,i)}var zi=Ct("WGS84");function He(e,t,i,s){var a,o,l;return Array.isArray(i)?(a=Se(e,t,i,s)||{x:NaN,y:NaN},i.length>2?typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"?typeof a.z=="number"?[a.x,a.y,a.z].concat(i.splice(3)):[a.x,a.y,i[2]].concat(i.splice(3)):[a.x,a.y].concat(i.splice(2)):[a.x,a.y]):(o=Se(e,t,i,s),l=Object.keys(i),l.length===2||l.forEach(function(r){if(typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"){if(r==="x"||r==="y"||r==="z")return}else if(r==="x"||r==="y")return;o[r]=i[r]}),o)}function ji(e){return e instanceof Ct?e:e.oProj?e.oProj:Ct(e)}function at(e,t,i){e=ji(e);var s=!1,a;return typeof t>"u"?(t=e,e=zi,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(i=t,t=e,e=zi,s=!0),t=ji(t),i?He(e,t,i):(a={forward:function(o,l){return He(e,t,o,l)},inverse:function(o,l){return He(t,e,o,l)}},s&&(a.oProj=t),a)}var Gi=6,ks="AJSAJS",Ss="AFAFAF",Ft=65,et=73,ot=79,se=86,ae=90;const lo={forward:Ns,inverse:ho,toPoint:Ps};function Ns(e,t){return t=t||5,uo(co({lat:e[1],lon:e[0]}),t)}function ho(e){var t=Ci(Ls(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function Ps(e){var t=Ci(Ls(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function Ze(e){return e*(Math.PI/180)}function Hi(e){return 180*(e/Math.PI)}function co(e){var t=e.lat,i=e.lon,s=6378137,a=.00669438,o=.9996,l,r,h,c,u,g,d,C=Ze(t),f=Ze(i),m,v;v=Math.floor((i+180)/6)+1,i===180&&(v=60),t>=56&&t<64&&i>=3&&i<12&&(v=32),t>=72&&t<84&&(i>=0&&i<9?v=31:i>=9&&i<21?v=33:i>=21&&i<33?v=35:i>=33&&i<42&&(v=37)),l=(v-1)*6-180+3,m=Ze(l),r=a/(1-a),h=s/Math.sqrt(1-a*Math.sin(C)*Math.sin(C)),c=Math.tan(C)*Math.tan(C),u=r*Math.cos(C)*Math.cos(C),g=Math.cos(C)*(f-m),d=s*((1-a/4-3*a*a/64-5*a*a*a/256)*C-(3*a/8+3*a*a/32+45*a*a*a/1024)*Math.sin(2*C)+(15*a*a/256+45*a*a*a/1024)*Math.sin(4*C)-35*a*a*a/3072*Math.sin(6*C));var I=o*h*(g+(1-c+u)*g*g*g/6+(5-18*c+c*c+72*u-58*r)*g*g*g*g*g/120)+5e5,b=o*(d+h*Math.tan(C)*(g*g/2+(5-c+9*u+4*u*u)*g*g*g*g/24+(61-58*c+c*c+600*u-330*r)*g*g*g*g*g*g/720));return t<0&&(b+=1e7),{northing:Math.round(b),easting:Math.round(I),zoneNumber:v,zoneLetter:go(t)}}function Ci(e){var t=e.northing,i=e.easting,s=e.zoneLetter,a=e.zoneNumber;if(a<0||a>60)return null;var o=.9996,l=6378137,r=.00669438,h,c=(1-Math.sqrt(1-r))/(1+Math.sqrt(1-r)),u,g,d,C,f,m,v,I,b,M=i-5e5,O=t;s<"N"&&(O-=1e7),v=(a-1)*6-180+3,h=r/(1-r),m=O/o,I=m/(l*(1-r/4-3*r*r/64-5*r*r*r/256)),b=I+(3*c/2-27*c*c*c/32)*Math.sin(2*I)+(21*c*c/16-55*c*c*c*c/32)*Math.sin(4*I)+151*c*c*c/96*Math.sin(6*I),u=l/Math.sqrt(1-r*Math.sin(b)*Math.sin(b)),g=Math.tan(b)*Math.tan(b),d=h*Math.cos(b)*Math.cos(b),C=l*(1-r)/Math.pow(1-r*Math.sin(b)*Math.sin(b),1.5),f=M/(u*o);var _=b-u*Math.tan(b)/C*(f*f/2-(5+3*g+10*d-4*d*d-9*h)*f*f*f*f/24+(61+90*g+298*d+45*g*g-252*h-3*d*d)*f*f*f*f*f*f/720);_=Hi(_);var w=(f-(1+2*g+d)*f*f*f/6+(5-2*d+28*g-3*d*d+8*h+24*g*g)*f*f*f*f*f/120)/Math.cos(b);w=v+Hi(w);var S;if(e.accuracy){var D=Ci({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});S={top:D.lat,right:D.lon,bottom:_,left:w}}else S={lat:_,lon:w};return S}function go(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function uo(e,t){var i="00000"+e.easting,s="00000"+e.northing;return e.zoneNumber+e.zoneLetter+Ao(e.easting,e.northing,e.zoneNumber)+i.substr(i.length-5,t)+s.substr(s.length-5,t)}function Ao(e,t,i){var s=Ts(i),a=Math.floor(e/1e5),o=Math.floor(t/1e5)%20;return Co(a,o,s)}function Ts(e){var t=e%Gi;return t===0&&(t=Gi),t}function Co(e,t,i){var s=i-1,a=ks.charCodeAt(s),o=Ss.charCodeAt(s),l=a+e-1,r=o+t,h=!1;l>ae&&(l=l-ae+Ft-1,h=!0),(l===et||a<et&&l>et||(l>et||a<et)&&h)&&l++,(l===ot||a<ot&&l>ot||(l>ot||a<ot)&&h)&&(l++,l===et&&l++),l>ae&&(l=l-ae+Ft-1),r>se?(r=r-se+Ft-1,h=!0):h=!1,(r===et||o<et&&r>et||(r>et||o<et)&&h)&&r++,(r===ot||o<ot&&r>ot||(r>ot||o<ot)&&h)&&(r++,r===et&&r++),r>se&&(r=r-se+Ft-1);var c=String.fromCharCode(l)+String.fromCharCode(r);return c}function Ls(e){if(e&&e.length===0)throw"MGRSPoint coverting from nothing";for(var t=e.length,i=null,s="",a,o=0;!/[A-Z]/.test(a=e.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+e;s+=a,o++}var l=parseInt(s,10);if(o===0||o+3>t)throw"MGRSPoint bad conversion from: "+e;var r=e.charAt(o++);if(r<="A"||r==="B"||r==="Y"||r>="Z"||r==="I"||r==="O")throw"MGRSPoint zone letter "+r+" not handled: "+e;i=e.substring(o,o+=2);for(var h=Ts(l),c=mo(i.charAt(0),h),u=fo(i.charAt(1),h);u<Io(r);)u+=2e6;var g=t-o;if(g%2!==0)throw`MGRSPoint has to have an even number
1
+ "use strict";var ra=Object.defineProperty;var la=(e,t,i)=>t in e?ra(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var y=(e,t,i)=>la(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ot=require("pinia"),n=require("vue"),A=require("./Components.cjs.js"),di=require("@giro3d/giro3d/core/geographic/Extent"),ha=require("@giro3d/giro3d/entities/FeatureCollection"),ca=require("ol/format"),ga=require("ol/loadingstrategy.js"),da=require("ol/source/Vector"),ua=require("ol/tilegrid.js"),Aa=require("@giro3d/giro3d/sources/COPCSource"),Ca=require("@giro3d/giro3d/sources/LASSource"),ma=require("@giro3d/giro3d/core/OperationCounter"),fa=require("@giro3d/giro3d/entities/PointCloud"),Ia=require("@giro3d/giro3d/sources/PointCloudSource"),ui=require("@loaders.gl/core"),pa=require("@loaders.gl/csv"),va=require("@giro3d/giro3d/entities/Tiles3D"),ya=require("@giro3d/giro3d/renderer/PointCloudMaterial"),ba=require("@loaders.gl/geopackage"),Oi=require("@giro3d/giro3d/core/FeatureTypes"),Ai=require("@giro3d/giro3d/entities/Entity3D"),Ma=require("ol/format/GeoJSON"),Ea=require("ol/format/GPX"),wa=require("ol/format/KML"),Yt=require("@giro3d/giro3d/core/geographic/Coordinates"),Oa=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),ds=require("@giro3d/giro3d/core/Instance"),xa=require("@loaders.gl/shapefile"),ka=require("@giro3d/giro3d/utils/ColorUtils"),pt=require("@giro3d/giro3d/entities/Shape");require("@giro3d/giro3d/utils/HttpConfiguration");const _a=require("@giro3d/giro3d/core/picking/PickTilesAt"),xt=require("@giro3d/giro3d/interactions/DrawTool"),Sa=require("@giro3d/giro3d/gui/Panel"),xi=require("@giro3d/giro3d/core/layer/MaskLayer"),Na=require("@giro3d/giro3d/entities/AxisGrid"),ki=require("@giro3d/giro3d/entities/Map"),Pa=require("@giro3d/giro3d/sources/VectorSource"),Ta=require("ol/Feature"),La=require("ol/geom/Polygon"),_i=require("ol/style");require("@giro3d/giro3d/utils/Fetcher");require("@giro3d/giro3d/core/ColorMap");require("chroma-js");const Da=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const Ba=require("@trevoreyre/autocomplete-vue");function Va(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const Ra=Va(Da);class Ua{constructor(t){this.store=t}registerTool(t){this.store.registerTool(t)}}class Fa{constructor(t){y(this,"_store");this._store=t}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(t){this._store.clear();for(const i of t)this._store.add(i)}}let je=null;function us(){return je||(je=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:A.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),je}const Me=new Map,As={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},Cs={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class za extends ha{constructor(t){const i=t.featureProjection;let s;switch(t.source){case"bdtopo":s="BDTOPO_V3:batiment";break;default:return t.source}const a=new da({format:new ca.GeoJSON,strategy:ga.tile(ua.createXYZ({tileSize:512})),url:function(u){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${i}&startIndex=0&bbox=`}${u.join(",")},${i}`}}),o=t.extent??new di("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),l=t.extrusionOffset??(c=>{const d=-c.getProperties().hauteur;return Number.isNaN(d)?0:d}),r=t.style??(c=>{const u=c.getProperties();let g="#FFFFFF";switch(u.usage_1){case"Agricole":g="#96ff0d";break;case"Commercial et services":g="#d8ffd4";break;case"Industriel":g="#f0bb41";break;case"Religieux":g="#41b5f0";break;case"Résidentiel":g="#cec8be";break;case"Sportif":g="#ff0d45";break}return{fill:{color:new A.Color(g),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),h={extent:o,extrusionOffset:l,maxLevel:t.maxLevel??11,minLevel:t.minLevel??11,source:a,style:r};super(h),this.name=t.source,A.fillObject3DUserData(this,{filename:s})}}const ja=e=>{const t=e.dataset.config,i=new za({...t,featureProjection:e.instance.referenceCrs});return Promise.resolve(i)};class Ga extends Ia.PointCloudSourceBase{constructor(i){super();y(this,"dataProjection");y(this,"isCSVPointCloudSource",!0);y(this,"type","CSVPointCloudSource");y(this,"url");y(this,"_localVolume",null);y(this,"_metadata",null);y(this,"_opCounter",new ma);y(this,"_origin",null);y(this,"_points",null);y(this,"_root",null);y(this,"_zArray",null);this.url=i.url,this.dataProjection=i.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(i){this._points!=null&&i.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(i){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let s;return i.attribute!=null&&i.attribute.name==="Z"&&(s=new A.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:s,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:i.position?new A.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const i=await ui.load(this.url,pa.CSVLoader,{csv:{shape:"array-row-table"},fetch:A.Fetcher.fetch}),s=new Float32Array(i.data.length*3),a=new Float32Array(i.data.length),o=new A.Box3().makeEmpty(),l=new A.Box3().makeEmpty(),r=new A.Vector3,h=new A.Vector3(i.data[0][0],i.data[0][1],i.data[0][2]);for(let g=0;g<i.data.length;g+=1){const d=i.data[g][0],C=i.data[g][1],m=i.data[g][2],p=d-h.x,I=C-h.y,f=m-h.z;o.expandByPoint(r.set(d,C,m)),l.expandByPoint(r.set(p,I,f)),s[g*3+0]=p,s[g*3+1]=I,s[g*3+2]=f,a[g]=m}this._points=s,this._zArray=a,this._origin=h,this._localVolume=l;const c=s.length/3,u={center:o.getCenter(new A.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:c,sourceId:this.id,volume:o};return this._root=u,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:o.max.z,min:o.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:c,volume:o},this._opCounter.decrement(),this}}class Ha extends fa{constructor(i){super(i);y(this,"isPointCloudEntity",!0);const s=A.getConfig();if(this.colorMap=A.getColorMap(s.pointcloud),"url"in i.source){const a=A.Fetcher.getContext(i.source.url);A.fillObject3DUserData(this,{filename:a.filename})}}async initialize(i){await super.initialize(i),this.setActiveAttribute("Z")}}const Za=e=>{const{dataset:t}=e,i=t.config;let s;switch(i.source.type){case"copc":s=new Aa({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async(o,l)=>{const c=await i.source.url.slice(o,l).arrayBuffer();return new Uint8Array(c)}});break;case"csv":s=new Ga({...i.source});break;case"las":s=new Ca({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async()=>{const o=await A.Fetcher.fetchArrayBuffer(i.source.url);return new Uint8Array(o.slice(0))}});break;default:return i.source}const a=new Ha({source:s});return Promise.resolve(a)};class ms extends va{constructor(t,i){super({...t,...i}),A.fillObject3DUserData(this,{filename:t.url})}}const Wa=e=>{const t=e.dataset.config,i=new ms({...t.source,url:A.getPublicFolderUrl(t.source.url)});return Promise.resolve(i)};class qa extends ms{constructor(t){const i=A.getConfig();super(t,{colorMap:A.getColorMap(i.pointcloud),pointCloudMode:ya.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const Ya=e=>{const{dataset:t}=e,i=t.config,s=new qa({...i.source,name:i.name,url:A.getPublicFolderUrl(i.source.url)});return Promise.resolve(s)},Ge=new Yt("EPSG:4326",0,0,0);async function Ja(e,t){const s=[];for(let o=0;o<e.length;o+=200){const l=e.slice(o,o+200),r=t.slice(o,o+200);s.push(Xa(l,r))}return(await Promise.all(s)).flat()}async function Xa(e,t){return(await A.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${e.join("|")}&lat=${t.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const Ka={async alticode(e){const t=[],i=[];e.forEach(a=>{a.as("EPSG:4326",Ge),t.push(Ge.longitude),i.push(Ge.latitude)}),(await Ja(t,i)).forEach((a,o)=>{e[o]._values[2]=a})}},Si=e=>Ka.alticode(e),Qa=e=>{const t=e.getEntities(s=>s.isMap).at(0);if(t==null)throw new Error("No map attached to the instance");return async s=>(s.forEach(a=>{const o=t.getElevation({coordinates:a}).samples.sort((l,r)=>l.resolution-r.resolution).at(0);o!=null&&(a._values[2]=o.elevation)}),Promise.resolve())},$a=(e,t=0)=>async s=>{let a=s.filter(o=>o._values[2]===t);for(const o of e)if(await o(a),a=a.filter(l=>l._values[2]===t),a.length===0)break},fs=(e,t,i=0)=>t?$a([Qa(e),Si],i):Si;function tn(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}var Nt=1,Pt=2,Gt=3,en=4,ri=5,Ni=6378137,sn=6356752314e-3,Pi=.0066943799901413165,le=484813681109536e-20,E=Math.PI/2,an=.16666666666666666,nn=.04722222222222222,on=.022156084656084655,x=1e-10,J=.017453292519943295,mt=57.29577951308232,U=Math.PI/4,he=Math.PI*2,Z=3.14159265359,st={};st.greenwich=0;st.lisbon=-9.131906111111;st.paris=2.337229166667;st.bogota=-74.080916666667;st.madrid=-3.687938888889;st.rome=12.452333333333;st.bern=7.439583333333;st.jakarta=106.807719444444;st.ferro=-17.666666666667;st.brussels=4.367975;st.stockholm=18.058277777778;st.athens=23.7163375;st.oslo=10.722916666667;const rn={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var Ti=/[\s_\-\/\(\)]/g;function Et(e,t){if(e[t])return e[t];for(var i=Object.keys(e),s=t.toLowerCase().replace(Ti,""),a=-1,o,l;++a<i.length;)if(o=i[a],l=o.toLowerCase().replace(Ti,""),l===s)return e[o]}function li(e){var t={},i=e.split("+").map(function(r){return r.trim()}).filter(function(r){return r}).reduce(function(r,h){var c=h.split("=");return c.push(!0),r[c[0].toLowerCase()]=c[1],r},{}),s,a,o,l={proj:"projName",datum:"datumCode",rf:function(r){t.rf=parseFloat(r)},lat_0:function(r){t.lat0=r*J},lat_1:function(r){t.lat1=r*J},lat_2:function(r){t.lat2=r*J},lat_ts:function(r){t.lat_ts=r*J},lon_0:function(r){t.long0=r*J},lon_1:function(r){t.long1=r*J},lon_2:function(r){t.long2=r*J},alpha:function(r){t.alpha=parseFloat(r)*J},gamma:function(r){t.rectified_grid_angle=parseFloat(r)},lonc:function(r){t.longc=r*J},x_0:function(r){t.x0=parseFloat(r)},y_0:function(r){t.y0=parseFloat(r)},k_0:function(r){t.k0=parseFloat(r)},k:function(r){t.k0=parseFloat(r)},a:function(r){t.a=parseFloat(r)},b:function(r){t.b=parseFloat(r)},r_a:function(){t.R_A=!0},zone:function(r){t.zone=parseInt(r,10)},south:function(){t.utmSouth=!0},towgs84:function(r){t.datum_params=r.split(",").map(function(h){return parseFloat(h)})},to_meter:function(r){t.to_meter=parseFloat(r)},units:function(r){t.units=r;var h=Et(rn,r);h&&(t.to_meter=h.to_meter)},from_greenwich:function(r){t.from_greenwich=r*J},pm:function(r){var h=Et(st,r);t.from_greenwich=(h||parseFloat(r))*J},nadgrids:function(r){r==="@null"?t.datumCode="none":t.nadgrids=r},axis:function(r){var h="ewnsud";r.length===3&&h.indexOf(r.substr(0,1))!==-1&&h.indexOf(r.substr(1,1))!==-1&&h.indexOf(r.substr(2,1))!==-1&&(t.axis=r)},approx:function(){t.approx=!0}};for(s in i)a=i[s],s in l?(o=l[s],typeof o=="function"?o(a):t[o]=a):t[s]=a;return typeof t.datumCode=="string"&&t.datumCode!=="WGS84"&&(t.datumCode=t.datumCode.toLowerCase()),t}class Is{static getId(t){const i=t.find(s=>Array.isArray(s)&&s[0]==="ID");return i&&i.length>=3?{authority:i[1],code:parseInt(i[2],10)}:null}static convertUnit(t,i="unit"){if(!t||t.length<3)return{type:i,name:"unknown",conversion_factor:null};const s=t[1],a=parseFloat(t[2])||null,o=t.find(r=>Array.isArray(r)&&r[0]==="ID"),l=o?{authority:o[1],code:parseInt(o[2],10)}:null;return{type:i,name:s,conversion_factor:a,id:l}}static convertAxis(t){const i=t[1]||"Unknown";let s;const a=i.match(/^\((.)\)$/);if(a){const c=a[1].toUpperCase();if(c==="E")s="east";else if(c==="N")s="north";else if(c==="U")s="up";else throw new Error(`Unknown axis abbreviation: ${c}`)}else s=t[2]?t[2].toLowerCase():"unknown";const o=t.find(c=>Array.isArray(c)&&c[0]==="ORDER"),l=o?parseInt(o[1],10):null,r=t.find(c=>Array.isArray(c)&&(c[0]==="LENGTHUNIT"||c[0]==="ANGLEUNIT"||c[0]==="SCALEUNIT")),h=this.convertUnit(r);return{name:i,direction:s,unit:h,order:l}}static extractAxes(t){return t.filter(i=>Array.isArray(i)&&i[0]==="AXIS").map(i=>this.convertAxis(i)).sort((i,s)=>(i.order||0)-(s.order||0))}static convert(t,i={}){switch(t[0]){case"PROJCRS":i.type="ProjectedCRS",i.name=t[1],i.base_crs=t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")):null,i.conversion=t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")):null;const s=t.find(d=>Array.isArray(d)&&d[0]==="CS");s&&(i.coordinate_system={type:s[1],axis:this.extractAxes(t)});const a=t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT");if(a){const d=this.convertUnit(a);i.coordinate_system.unit=d}i.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":i.type="GeographicCRS",i.name=t[1];const o=t.find(d=>Array.isArray(d)&&(d[0]==="DATUM"||d[0]==="ENSEMBLE"));if(o){const d=this.convert(o);o[0]==="ENSEMBLE"?i.datum_ensemble=d:i.datum=d;const C=t.find(m=>Array.isArray(m)&&m[0]==="PRIMEM");C&&C[1]!=="Greenwich"&&(d.prime_meridian={name:C[1],longitude:parseFloat(C[2])})}i.coordinate_system={type:"ellipsoidal",axis:this.extractAxes(t)},i.id=this.getId(t);break;case"DATUM":i.type="GeodeticReferenceFrame",i.name=t[1],i.ellipsoid=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":i.type="DatumEnsemble",i.name=t[1],i.members=t.filter(d=>Array.isArray(d)&&d[0]==="MEMBER").map(d=>({type:"DatumEnsembleMember",name:d[1],id:this.getId(d)}));const l=t.find(d=>Array.isArray(d)&&d[0]==="ENSEMBLEACCURACY");l&&(i.accuracy=parseFloat(l[1]));const r=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID");r&&(i.ellipsoid=this.convert(r)),i.id=this.getId(t);break;case"ELLIPSOID":i.type="Ellipsoid",i.name=t[1],i.semi_major_axis=parseFloat(t[2]),i.inverse_flattening=parseFloat(t[3]),t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT")&&this.convert(t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT"),i);break;case"CONVERSION":i.type="Conversion",i.name=t[1],i.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,i.parameters=t.filter(d=>Array.isArray(d)&&d[0]==="PARAMETER").map(d=>this.convert(d));break;case"METHOD":i.type="Method",i.name=t[1],i.id=this.getId(t);break;case"PARAMETER":i.type="Parameter",i.name=t[1],i.value=parseFloat(t[2]),i.unit=this.convertUnit(t.find(d=>Array.isArray(d)&&(d[0]==="LENGTHUNIT"||d[0]==="ANGLEUNIT"||d[0]==="SCALEUNIT"))),i.id=this.getId(t);break;case"BOUNDCRS":i.type="BoundCRS";const h=t.find(d=>Array.isArray(d)&&d[0]==="SOURCECRS");if(h){const d=h.find(C=>Array.isArray(C));i.source_crs=d?this.convert(d):null}const c=t.find(d=>Array.isArray(d)&&d[0]==="TARGETCRS");if(c){const d=c.find(C=>Array.isArray(C));i.target_crs=d?this.convert(d):null}const u=t.find(d=>Array.isArray(d)&&d[0]==="ABRIDGEDTRANSFORMATION");u?i.transformation=this.convert(u):i.transformation=null;break;case"ABRIDGEDTRANSFORMATION":if(i.type="Transformation",i.name=t[1],i.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,i.parameters=t.filter(d=>Array.isArray(d)&&(d[0]==="PARAMETER"||d[0]==="PARAMETERFILE")).map(d=>{if(d[0]==="PARAMETER")return this.convert(d);if(d[0]==="PARAMETERFILE")return{name:d[1],value:d[2],id:{authority:"EPSG",code:8656}}}),i.parameters.length===7){const d=i.parameters[6];d.name==="Scale difference"&&(d.value=Math.round((d.value-1)*1e12)/1e6)}i.id=this.getId(t);break;case"AXIS":i.coordinate_system||(i.coordinate_system={type:"unspecified",axis:[]}),i.coordinate_system.axis.push(this.convertAxis(t));break;case"LENGTHUNIT":const g=this.convertUnit(t,"LinearUnit");i.coordinate_system&&i.coordinate_system.axis&&i.coordinate_system.axis.forEach(d=>{d.unit||(d.unit=g)}),g.conversion_factor&&g.conversion_factor!==1&&i.semi_major_axis&&(i.semi_major_axis={value:i.semi_major_axis,unit:g});break;default:i.keyword=t[0];break}return i}}class ln extends Is{static convert(t,i={}){return super.convert(t,i),i.coordinate_system&&i.coordinate_system.subtype==="Cartesian"&&delete i.coordinate_system,i.usage&&delete i.usage,i}}class hn extends Is{static convert(t,i={}){super.convert(t,i);const s=t.find(o=>Array.isArray(o)&&o[0]==="CS");s&&(i.coordinate_system={subtype:s[1],axis:this.extractAxes(t)});const a=t.find(o=>Array.isArray(o)&&o[0]==="USAGE");if(a){const o=a.find(h=>Array.isArray(h)&&h[0]==="SCOPE"),l=a.find(h=>Array.isArray(h)&&h[0]==="AREA"),r=a.find(h=>Array.isArray(h)&&h[0]==="BBOX");i.usage={},o&&(i.usage.scope=o[1]),l&&(i.usage.area=l[1]),r&&(i.usage.bbox=r.slice(1))}return i}}function cn(e){return e.find(t=>Array.isArray(t)&&t[0]==="USAGE")?"2019":(e.find(t=>Array.isArray(t)&&t[0]==="CS")||e[0]==="BOUNDCRS"||e[0]==="PROJCRS"||e[0]==="GEOGCRS","2015")}function gn(e){return(cn(e)==="2019"?hn:ln).convert(e)}function dn(e){const t=e.toUpperCase();return t.includes("PROJCRS")||t.includes("GEOGCRS")||t.includes("BOUNDCRS")||t.includes("VERTCRS")||t.includes("LENGTHUNIT")||t.includes("ANGLEUNIT")||t.includes("SCALEUNIT")?"WKT2":(t.includes("PROJCS")||t.includes("GEOGCS")||t.includes("LOCAL_CS")||t.includes("VERT_CS")||t.includes("UNIT"),"WKT1")}var ce=1,ps=2,vs=3,ke=4,ys=5,Ci=-1,un=/\s/,An=/[A-Za-z]/,Cn=/[A-Za-z84_]/,De=/[,\]]/,bs=/[\d\.E\-\+]/;function vt(e){if(typeof e!="string")throw new Error("not a string");this.text=e.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=ce}vt.prototype.readCharicter=function(){var e=this.text[this.place++];if(this.state!==ke)for(;un.test(e);){if(this.place>=this.text.length)return;e=this.text[this.place++]}switch(this.state){case ce:return this.neutral(e);case ps:return this.keyword(e);case ke:return this.quoted(e);case ys:return this.afterquote(e);case vs:return this.number(e);case Ci:return}};vt.prototype.afterquote=function(e){if(e==='"'){this.word+='"',this.state=ke;return}if(De.test(e)){this.word=this.word.trim(),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in afterquote yet, index '+this.place)};vt.prototype.afterItem=function(e){if(e===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=ce;return}if(e==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=ce,this.currentObject=this.stack.pop(),this.currentObject||(this.state=Ci);return}};vt.prototype.number=function(e){if(bs.test(e)){this.word+=e;return}if(De.test(e)){this.word=parseFloat(this.word),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in number yet, index '+this.place)};vt.prototype.quoted=function(e){if(e==='"'){this.state=ys;return}this.word+=e};vt.prototype.keyword=function(e){if(Cn.test(e)){this.word+=e;return}if(e==="["){var t=[];t.push(this.word),this.level++,this.root===null?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,this.state=ce;return}if(De.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in keyword yet, index '+this.place)};vt.prototype.neutral=function(e){if(An.test(e)){this.word=e,this.state=ps;return}if(e==='"'){this.word="",this.state=ke;return}if(bs.test(e)){this.word=e,this.state=vs;return}if(De.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in neutral yet, index '+this.place)};vt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===Ci)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function mn(e){var t=new vt(e);return t.output()}function He(e,t,i){Array.isArray(t)&&(i.unshift(t),t=null);var s=t?{}:e,a=i.reduce(function(o,l){return Ut(l,o),o},s);t&&(e[t]=a)}function Ut(e,t){if(!Array.isArray(e)){t[e]=!0;return}var i=e.shift();if(i==="PARAMETER"&&(i=e.shift()),e.length===1){if(Array.isArray(e[0])){t[i]={},Ut(e[0],t[i]);return}t[i]=e[0];return}if(!e.length){t[i]=!0;return}if(i==="TOWGS84"){t[i]=e;return}if(i==="AXIS"){i in t||(t[i]=[]),t[i].push(e);return}Array.isArray(i)||(t[i]={});var s;switch(i){case"UNIT":case"PRIMEM":case"VERT_DATUM":t[i]={name:e[0].toLowerCase(),convert:e[1]},e.length===3&&Ut(e[2],t[i]);return;case"SPHEROID":case"ELLIPSOID":t[i]={name:e[0],a:e[1],rf:e[2]},e.length===4&&Ut(e[3],t[i]);return;case"EDATUM":case"ENGINEERINGDATUM":case"LOCAL_DATUM":case"DATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":e[0]=["name",e[0]],He(t,i,e);return;case"COMPD_CS":case"COMPOUNDCRS":case"FITTED_CS":case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"ENGCRS":case"ENGINEERINGCRS":e[0]=["name",e[0]],He(t,i,e),t[i].type=i;return;default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return Ut(e,t[i]);return He(t,i,e)}}var fn=.017453292519943295;function ct(e){return e*fn}function Ms(e){const t=(e.projName||"").toLowerCase().replace(/_/g," ");!e.long0&&e.longc&&(t==="albers conic equal area"||t==="lambert azimuthal equal area")&&(e.long0=e.longc),!e.lat_ts&&e.lat1&&(t==="stereographic south pole"||t==="polar stereographic (variant b)")?(e.lat0=ct(e.lat1>0?90:-90),e.lat_ts=e.lat1,delete e.lat1):!e.lat_ts&&e.lat0&&(t==="polar stereographic"||t==="polar stereographic (variant a)")&&(e.lat_ts=e.lat0,e.lat0=ct(e.lat0>0?90:-90),delete e.lat1)}function Li(e){let t={units:null,to_meter:void 0};return typeof e=="string"?(t.units=e.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.units==="meter"&&(t.to_meter=1)):e&&e.name&&(t.units=e.name.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.to_meter=e.conversion_factor),t}function Di(e){return typeof e=="object"?e.value*e.unit.conversion_factor:e}function Bi(e,t){e.ellipsoid.radius?(t.a=e.ellipsoid.radius,t.rf=0):(t.a=Di(e.ellipsoid.semi_major_axis),e.ellipsoid.inverse_flattening!==void 0?t.rf=e.ellipsoid.inverse_flattening:e.ellipsoid.semi_major_axis!==void 0&&e.ellipsoid.semi_minor_axis!==void 0&&(t.rf=t.a/(t.a-Di(e.ellipsoid.semi_minor_axis))))}function _e(e,t={}){return!e||typeof e!="object"?e:e.type==="BoundCRS"?(_e(e.source_crs,t),e.transformation&&(e.transformation.method&&e.transformation.method.name==="NTv2"?t.nadgrids=e.transformation.parameters[0].value:t.datum_params=e.transformation.parameters.map(i=>i.value)),t):(Object.keys(e).forEach(i=>{const s=e[i];if(s!==null)switch(i){case"name":if(t.srsCode)break;t.name=s,t.srsCode=s;break;case"type":s==="GeographicCRS"?t.projName="longlat":s==="ProjectedCRS"&&e.conversion&&e.conversion.method&&(t.projName=e.conversion.method.name);break;case"datum":case"datum_ensemble":s.ellipsoid&&(t.ellps=s.ellipsoid.name,Bi(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,Bi(s,t);break;case"prime_meridian":t.long0=(s.longitude||0)*Math.PI/180;break;case"coordinate_system":if(s.axis){if(t.axis=s.axis.map(a=>{const o=a.direction;if(o==="east")return"e";if(o==="north")return"n";if(o==="west")return"w";if(o==="south")return"s";throw new Error(`Unknown axis direction: ${o}`)}).join("")+"u",s.unit){const{units:a,to_meter:o}=Li(s.unit);t.units=a,t.to_meter=o}else if(s.axis[0]&&s.axis[0].unit){const{units:a,to_meter:o}=Li(s.axis[0].unit);t.units=a,t.to_meter=o}}break;case"id":s.authority&&s.code&&(t.title=s.authority+":"+s.code);break;case"conversion":s.method&&s.method.name&&(t.projName=s.method.name),s.parameters&&s.parameters.forEach(a=>{const o=a.name.toLowerCase().replace(/\s+/g,"_"),l=a.value;a.unit&&a.unit.conversion_factor?t[o]=l*a.unit.conversion_factor:a.unit==="degree"?t[o]=l*Math.PI/180:t[o]=l});break;case"unit":s.name&&(t.units=s.name.toLowerCase(),t.units==="metre"&&(t.units="meter")),s.conversion_factor&&(t.to_meter=s.conversion_factor);break;case"base_crs":_e(s,t),t.datumCode=s.id?s.id.authority+"_"+s.id.code:s.name;break}}),t.latitude_of_false_origin!==void 0&&(t.lat0=t.latitude_of_false_origin),t.longitude_of_false_origin!==void 0&&(t.long0=t.longitude_of_false_origin),t.latitude_of_standard_parallel!==void 0&&(t.lat0=t.latitude_of_standard_parallel,t.lat1=t.latitude_of_standard_parallel),t.latitude_of_1st_standard_parallel!==void 0&&(t.lat1=t.latitude_of_1st_standard_parallel),t.latitude_of_2nd_standard_parallel!==void 0&&(t.lat2=t.latitude_of_2nd_standard_parallel),t.latitude_of_projection_centre!==void 0&&(t.lat0=t.latitude_of_projection_centre),t.longitude_of_projection_centre!==void 0&&(t.longc=t.longitude_of_projection_centre),t.easting_at_false_origin!==void 0&&(t.x0=t.easting_at_false_origin),t.northing_at_false_origin!==void 0&&(t.y0=t.northing_at_false_origin),t.latitude_of_natural_origin!==void 0&&(t.lat0=t.latitude_of_natural_origin),t.longitude_of_natural_origin!==void 0&&(t.long0=t.longitude_of_natural_origin),t.longitude_of_origin!==void 0&&(t.long0=t.longitude_of_origin),t.false_easting!==void 0&&(t.x0=t.false_easting),t.easting_at_projection_centre&&(t.x0=t.easting_at_projection_centre),t.false_northing!==void 0&&(t.y0=t.false_northing),t.northing_at_projection_centre&&(t.y0=t.northing_at_projection_centre),t.standard_parallel_1!==void 0&&(t.lat1=t.standard_parallel_1),t.standard_parallel_2!==void 0&&(t.lat2=t.standard_parallel_2),t.scale_factor_at_natural_origin!==void 0&&(t.k0=t.scale_factor_at_natural_origin),t.scale_factor_at_projection_centre!==void 0&&(t.k0=t.scale_factor_at_projection_centre),t.scale_factor_on_pseudo_standard_parallel!==void 0&&(t.k0=t.scale_factor_on_pseudo_standard_parallel),t.azimuth!==void 0&&(t.alpha=t.azimuth),t.azimuth_at_projection_centre!==void 0&&(t.alpha=t.azimuth_at_projection_centre),t.angle_from_rectified_to_skew_grid&&(t.rectified_grid_angle=t.angle_from_rectified_to_skew_grid),Ms(t),t)}var In=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function pn(e,t){var i=t[0],s=t[1];!(i in e)&&s in e&&(e[i]=e[s],t.length===3&&(e[i]=t[2](e[i])))}function Es(e){for(var t=Object.keys(e),i=0,s=t.length;i<s;++i){var a=t[i];In.indexOf(a)!==-1&&vn(e[a]),typeof e[a]=="object"&&Es(e[a])}}function vn(e){if(e.AUTHORITY){var t=Object.keys(e.AUTHORITY)[0];t&&t in e.AUTHORITY&&(e.title=t+":"+e.AUTHORITY[t])}if(e.type==="GEOGCS"?e.projName="longlat":e.type==="LOCAL_CS"?(e.projName="identity",e.local=!0):typeof e.PROJECTION=="object"?e.projName=Object.keys(e.PROJECTION)[0]:e.projName=e.PROJECTION,e.AXIS){for(var i="",s=0,a=e.AXIS.length;s<a;++s){var o=[e.AXIS[s][0].toLowerCase(),e.AXIS[s][1].toLowerCase()];o[0].indexOf("north")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="north"?i+="n":o[0].indexOf("south")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="south"?i+="s":o[0].indexOf("east")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="east"?i+="e":(o[0].indexOf("west")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="west")&&(i+="w")}i.length===2&&(i+="u"),i.length===3&&(e.axis=i)}e.UNIT&&(e.units=e.UNIT.name.toLowerCase(),e.units==="metre"&&(e.units="meter"),e.UNIT.convert&&(e.type==="GEOGCS"?e.DATUM&&e.DATUM.SPHEROID&&(e.to_meter=e.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter=e.UNIT.convert));var l=e.GEOGCS;e.type==="GEOGCS"&&(l=e),l&&(l.DATUM?e.datumCode=l.DATUM.name.toLowerCase():e.datumCode=l.name.toLowerCase(),e.datumCode.slice(0,2)==="d_"&&(e.datumCode=e.datumCode.slice(2)),e.datumCode==="new_zealand_1949"&&(e.datumCode="nzgd49"),(e.datumCode==="wgs_1984"||e.datumCode==="world_geodetic_system_1984")&&(e.PROJECTION==="Mercator_Auxiliary_Sphere"&&(e.sphere=!0),e.datumCode="wgs84"),e.datumCode==="belge_1972"&&(e.datumCode="rnb72"),l.DATUM&&l.DATUM.SPHEROID&&(e.ellps=l.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),e.ellps.toLowerCase().slice(0,13)==="international"&&(e.ellps="intl"),e.a=l.DATUM.SPHEROID.a,e.rf=parseFloat(l.DATUM.SPHEROID.rf,10)),l.DATUM&&l.DATUM.TOWGS84&&(e.datum_params=l.DATUM.TOWGS84),~e.datumCode.indexOf("osgb_1936")&&(e.datumCode="osgb36"),~e.datumCode.indexOf("osni_1952")&&(e.datumCode="osni52"),(~e.datumCode.indexOf("tm65")||~e.datumCode.indexOf("geodetic_datum_of_1965"))&&(e.datumCode="ire65"),e.datumCode==="ch1903+"&&(e.datumCode="ch1903"),~e.datumCode.indexOf("israel")&&(e.datumCode="isr93")),e.b&&!isFinite(e.b)&&(e.b=e.a),e.rectified_grid_angle&&(e.rectified_grid_angle=ct(e.rectified_grid_angle));function r(u){var g=e.to_meter||1;return u*g}var h=function(u){return pn(e,u)},c=[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_1","Latitude of 1st standard parallel"],["standard_parallel_2","Standard_Parallel_2"],["standard_parallel_2","Latitude of 2nd standard parallel"],["false_easting","False_Easting"],["false_easting","False easting"],["false-easting","Easting at false origin"],["false_northing","False_Northing"],["false_northing","False northing"],["false_northing","Northing at false origin"],["central_meridian","Central_Meridian"],["central_meridian","Longitude of natural origin"],["central_meridian","Longitude of false origin"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["latitude_of_origin","Latitude of natural origin"],["latitude_of_origin","Latitude of false origin"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",ct],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",ct],["x0","false_easting",r],["y0","false_northing",r],["long0","central_meridian",ct],["lat0","latitude_of_origin",ct],["lat0","standard_parallel_1",ct],["lat1","standard_parallel_1",ct],["lat2","standard_parallel_2",ct],["azimuth","Azimuth"],["alpha","azimuth",ct],["srsCode","name"]];c.forEach(h),Ms(e)}function ws(e){if(typeof e=="object")return _e(e);const t=dn(e);var i=mn(e);if(t==="WKT2"){const o=gn(i);return _e(o)}var s=i[0],a={};return Ut(i,a),Es(a),a[s]}function $(e){var t=this;if(arguments.length===2){var i=arguments[1];typeof i=="string"?i.charAt(0)==="+"?$[e]=li(arguments[1]):$[e]=ws(arguments[1]):$[e]=i}else if(arguments.length===1){if(Array.isArray(e))return e.map(function(s){Array.isArray(s)?$.apply(t,s):$(s)});if(typeof e=="string"){if(e in $)return $[e]}else"EPSG"in e?$["EPSG:"+e.EPSG]=e:"ESRI"in e?$["ESRI:"+e.ESRI]=e:"IAU2000"in e?$["IAU2000:"+e.IAU2000]=e:console.log(e);return}}tn($);function yn(e){return typeof e=="string"}function bn(e){return e in $}var Mn=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function En(e){return Mn.some(function(t){return e.indexOf(t)>-1})}var wn=["3857","900913","3785","102113"];function On(e){var t=Et(e,"authority");if(t){var i=Et(t,"epsg");return i&&wn.indexOf(i)>-1}}function xn(e){var t=Et(e,"extension");if(t)return Et(t,"proj4")}function kn(e){return e[0]==="+"}function _n(e){if(yn(e)){if(bn(e))return $[e];if(En(e)){var t=ws(e);if(On(t))return $["EPSG:3857"];var i=xn(t);return i?li(i):t}if(kn(e))return li(e)}else return e}function Vi(e,t){e=e||{};var i,s;if(!t)return e;for(s in t)i=t[s],i!==void 0&&(e[s]=i);return e}function It(e,t,i){var s=e*t;return i/Math.sqrt(1-s*s)}function de(e){return e<0?-1:1}function _(e){return Math.abs(e)<=Z?e:e-de(e)*he}function ut(e,t,i){var s=e*i,a=.5*e;return s=Math.pow((1-s)/(1+s),a),Math.tan(.5*(E-t))/s}function ge(e,t){for(var i=.5*e,s,a,o=E-2*Math.atan(t),l=0;l<=15;l++)if(s=e*Math.sin(o),a=E-2*Math.atan(t*Math.pow((1-s)/(1+s),i))-o,o+=a,Math.abs(a)<=1e-10)return o;return-9999}function Sn(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=It(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function Nn(e){var t=e.x,i=e.y;if(i*mt>90&&i*mt<-90&&t*mt>180&&t*mt<-180)return null;var s,a;if(Math.abs(Math.abs(i)-E)<=x)return null;if(this.sphere)s=this.x0+this.a*this.k0*_(t-this.long0),a=this.y0+this.a*this.k0*Math.log(Math.tan(U+.5*i));else{var o=Math.sin(i),l=ut(this.e,i,o);s=this.x0+this.a*this.k0*_(t-this.long0),a=this.y0-this.a*this.k0*Math.log(l)}return e.x=s,e.y=a,e}function Pn(e){var t=e.x-this.x0,i=e.y-this.y0,s,a;if(this.sphere)a=E-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(a=ge(this.e,o),a===-9999)return null}return s=_(this.long0+t/(this.a*this.k0)),e.x=s,e.y=a,e}var Tn=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const Ln={init:Sn,forward:Nn,inverse:Pn,names:Tn};function Dn(){}function Ri(e){return e}var Bn=["longlat","identity"];const Vn={init:Dn,forward:Ri,inverse:Ri,names:Bn};var Rn=[Ln,Vn],Ee={},Se=[];function Os(e,t){var i=Se.length;return e.names?(Se[i]=e,e.names.forEach(function(s){Ee[s.toLowerCase()]=i}),this):(console.log(t),!0)}function Un(e){if(!e)return!1;var t=e.toLowerCase();if(typeof Ee[t]<"u"&&Se[Ee[t]])return Se[Ee[t]]}function Fn(){Rn.forEach(Os)}const zn={start:Fn,add:Os,get:Un};var P={};P.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};P.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};P.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};P.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};P.airy={a:6377563396e-3,b:635625691e-2,ellipseName:"Airy 1830"};P.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};P.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};P.mod_airy={a:6377340189e-3,b:6356034446e-3,ellipseName:"Modified Airy"};P.andrae={a:637710443e-2,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};P.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};P.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};P.bessel={a:6377397155e-3,rf:299.1528128,ellipseName:"Bessel 1841"};P.bess_nam={a:6377483865e-3,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};P.clrk66={a:63782064e-1,b:63565838e-1,ellipseName:"Clarke 1866"};P.clrk80={a:6378249145e-3,rf:293.4663,ellipseName:"Clarke 1880 mod."};P.clrk80ign={a:63782492e-1,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"};P.clrk58={a:6378293645208759e-9,rf:294.2606763692654,ellipseName:"Clarke 1858"};P.CPM={a:63757387e-1,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};P.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};P.engelis={a:637813605e-2,rf:298.2566,ellipseName:"Engelis 1985"};P.evrst30={a:6377276345e-3,rf:300.8017,ellipseName:"Everest 1830"};P.evrst48={a:6377304063e-3,rf:300.8017,ellipseName:"Everest 1948"};P.evrst56={a:6377301243e-3,rf:300.8017,ellipseName:"Everest 1956"};P.evrst69={a:6377295664e-3,rf:300.8017,ellipseName:"Everest 1969"};P.evrstSS={a:6377298556e-3,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};P.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};P.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};P.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};P.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};P.hough={a:6378270,rf:297,ellipseName:"Hough"};P.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};P.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};P.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};P.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};P.new_intl={a:63781575e-1,b:63567722e-1,ellipseName:"New International 1967"};P.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};P.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};P.SEasia={a:6378155,b:63567733205e-4,ellipseName:"Southeast Asia"};P.walbeck={a:6376896,b:63558348467e-4,ellipseName:"Walbeck"};P.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};P.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};P.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};var jn=P.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};P.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function Gn(e,t,i,s){var a=e*e,o=t*t,l=(a-o)/a,r=0;s?(e*=1-l*(an+l*(nn+l*on)),a=e*e,l=0):r=Math.sqrt(l);var h=(a-o)/o;return{es:l,e:r,ep2:h}}function Hn(e,t,i,s,a){if(!e){var o=Et(P,s);o||(o=jn),e=o.a,t=o.b,i=o.rf}return i&&!t&&(t=(1-1/i)*e),(i===0||Math.abs(e-t)<x)&&(a=!0,t=e),{a:e,b:t,rf:i,sphere:a}}var Y={};Y.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};Y.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};Y.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};Y.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};Y.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};Y.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};Y.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};Y.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};Y.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};Y.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};Y.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};Y.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};Y.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};Y.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};Y.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};Y.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};Y.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function Zn(e,t,i,s,a,o,l){var r={};return e===void 0||e==="none"?r.datum_type=ri:r.datum_type=en,t&&(r.datum_params=t.map(parseFloat),(r.datum_params[0]!==0||r.datum_params[1]!==0||r.datum_params[2]!==0)&&(r.datum_type=Nt),r.datum_params.length>3&&(r.datum_params[3]!==0||r.datum_params[4]!==0||r.datum_params[5]!==0||r.datum_params[6]!==0)&&(r.datum_type=Pt,r.datum_params[3]*=le,r.datum_params[4]*=le,r.datum_params[5]*=le,r.datum_params[6]=r.datum_params[6]/1e6+1)),l&&(r.datum_type=Gt,r.grids=l),r.a=i,r.b=s,r.es=a,r.ep2=o,r}var xs={};function Wn(e,t){var i=new DataView(t),s=Jn(i),a=Xn(i,s);a.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var o=Kn(i,a,s),l={header:a,subgrids:o};return xs[e]=l,l}function qn(e){if(e===void 0)return null;var t=e.split(",");return t.map(Yn)}function Yn(e){if(e.length===0)return null;var t=e[0]==="@";return t&&(e=e.slice(1)),e==="null"?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:xs[e]||null,isNull:!1}}function Ft(e){return e/3600*Math.PI/180}function Jn(e){var t=e.getInt32(8,!1);return t===11?!1:(t=e.getInt32(8,!0),t!==11&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"),!0)}function Xn(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:hi(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}function hi(e,t,i){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,i)))}function Kn(e,t,i){for(var s=176,a=[],o=0;o<t.nSubgrids;o++){var l=$n(e,s,i),r=to(e,s,l,i),h=Math.round(1+(l.upperLongitude-l.lowerLongitude)/l.longitudeInterval),c=Math.round(1+(l.upperLatitude-l.lowerLatitude)/l.latitudeInterval);a.push({ll:[Ft(l.lowerLongitude),Ft(l.lowerLatitude)],del:[Ft(l.longitudeInterval),Ft(l.latitudeInterval)],lim:[h,c],count:l.gridNodeCount,cvs:Qn(r)})}return a}function Qn(e){return e.map(function(t){return[Ft(t.longitudeShift),Ft(t.latitudeShift)]})}function $n(e,t,i){return{name:hi(e,t+8,t+16).trim(),parent:hi(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,i),upperLatitude:e.getFloat64(t+88,i),lowerLongitude:e.getFloat64(t+104,i),upperLongitude:e.getFloat64(t+120,i),latitudeInterval:e.getFloat64(t+136,i),longitudeInterval:e.getFloat64(t+152,i),gridNodeCount:e.getInt32(t+168,i)}}function to(e,t,i,s){for(var a=t+176,o=16,l=[],r=0;r<i.gridNodeCount;r++){var h={latitudeShift:e.getFloat32(a+r*o,s),longitudeShift:e.getFloat32(a+r*o+4,s),latitudeAccuracy:e.getFloat32(a+r*o+8,s),longitudeAccuracy:e.getFloat32(a+r*o+12,s)};l.push(h)}return l}function ft(e,t){if(!(this instanceof ft))return new ft(e);t=t||function(c){if(c)throw c};var i=_n(e);if(typeof i!="object"){t(e);return}var s=ft.projections.get(i.projName);if(!s){t(e);return}if(i.datumCode&&i.datumCode!=="none"){var a=Et(Y,i.datumCode);a&&(i.datum_params=i.datum_params||(a.towgs84?a.towgs84.split(","):null),i.ellps=a.ellipse,i.datumName=a.datumName?a.datumName:i.datumCode)}i.k0=i.k0||1,i.axis=i.axis||"enu",i.ellps=i.ellps||"wgs84",i.lat1=i.lat1||i.lat0;var o=Hn(i.a,i.b,i.rf,i.ellps,i.sphere),l=Gn(o.a,o.b,o.rf,i.R_A),r=qn(i.nadgrids),h=i.datum||Zn(i.datumCode,i.datum_params,o.a,o.b,l.es,l.ep2,r);Vi(this,i),Vi(this,s),this.a=o.a,this.b=o.b,this.rf=o.rf,this.sphere=o.sphere,this.es=l.es,this.e=l.e,this.ep2=l.ep2,this.datum=h,this.init(),t(null,this)}ft.projections=zn;ft.projections.start();function eo(e,t){return e.datum_type!==t.datum_type||e.a!==t.a||Math.abs(e.es-t.es)>5e-11?!1:e.datum_type===Nt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:e.datum_type===Pt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6]:!0}function ks(e,t,i){var s=e.x,a=e.y,o=e.z?e.z:0,l,r,h,c;if(a<-E&&a>-1.001*E)a=-E;else if(a>E&&a<1.001*E)a=E;else{if(a<-E)return{x:-1/0,y:-1/0,z:e.z};if(a>E)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),r=Math.sin(a),c=Math.cos(a),h=r*r,l=i/Math.sqrt(1-t*h),{x:(l+o)*c*Math.cos(s),y:(l+o)*c*Math.sin(s),z:(l*(1-t)+o)*r}}function _s(e,t,i,s){var a=1e-12,o=a*a,l=30,r,h,c,u,g,d,C,m,p,I,f,b,M,O=e.x,k=e.y,w=e.z?e.z:0,S,L,W;if(r=Math.sqrt(O*O+k*k),h=Math.sqrt(O*O+k*k+w*w),r/i<a){if(S=0,h/i<a)return L=E,W=-s,{x:e.x,y:e.y,z:e.z}}else S=Math.atan2(k,O);c=w/h,u=r/h,g=1/Math.sqrt(1-t*(2-t)*u*u),m=u*(1-t)*g,p=c*g,M=0;do M++,C=i/Math.sqrt(1-t*p*p),W=r*m+w*p-C*(1-t*p*p),d=t*C/(C+W),g=1/Math.sqrt(1-d*(2-d)*u*u),I=u*(1-d)*g,f=c*g,b=f*m-I*p,m=I,p=f;while(b*b>o&&M<l);return L=Math.atan(f/Math.abs(I)),{x:S,y:L,z:W}}function io(e,t,i){if(t===Nt)return{x:e.x+i[0],y:e.y+i[1],z:e.z+i[2]};if(t===Pt){var s=i[0],a=i[1],o=i[2],l=i[3],r=i[4],h=i[5],c=i[6];return{x:c*(e.x-h*e.y+r*e.z)+s,y:c*(h*e.x+e.y-l*e.z)+a,z:c*(-r*e.x+l*e.y+e.z)+o}}}function so(e,t,i){if(t===Nt)return{x:e.x-i[0],y:e.y-i[1],z:e.z-i[2]};if(t===Pt){var s=i[0],a=i[1],o=i[2],l=i[3],r=i[4],h=i[5],c=i[6],u=(e.x-s)/c,g=(e.y-a)/c,d=(e.z-o)/c;return{x:u+h*g-r*d,y:-h*u+g+l*d,z:r*u-l*g+d}}}function fe(e){return e===Nt||e===Pt}function ao(e,t,i){if(eo(e,t)||e.datum_type===ri||t.datum_type===ri)return i;var s=e.a,a=e.es;if(e.datum_type===Gt){var o=Ui(e,!1,i);if(o!==0)return;s=Ni,a=Pi}var l=t.a,r=t.b,h=t.es;if(t.datum_type===Gt&&(l=Ni,r=sn,h=Pi),a===h&&s===l&&!fe(e.datum_type)&&!fe(t.datum_type))return i;if(i=ks(i,a,s),fe(e.datum_type)&&(i=io(i,e.datum_type,e.datum_params)),fe(t.datum_type)&&(i=so(i,t.datum_type,t.datum_params)),i=_s(i,h,l,r),t.datum_type===Gt){var c=Ui(t,!0,i);if(c!==0)return}return i}function Ui(e,t,i){if(e.grids===null||e.grids.length===0)return console.log("Grid shift grids not found"),-1;for(var s={x:-i.x,y:i.y},a={x:Number.NaN,y:Number.NaN},o=[],l=0;l<e.grids.length;l++){var r=e.grids[l];if(o.push(r.name),r.isNull){a=s;break}if(r.mandatory,r.grid===null){if(r.mandatory)return console.log("Unable to find mandatory grid '"+r.name+"'"),-1;continue}var h=r.grid.subgrids[0],c=(Math.abs(h.del[1])+Math.abs(h.del[0]))/1e4,u=h.ll[0]-c,g=h.ll[1]-c,d=h.ll[0]+(h.lim[0]-1)*h.del[0]+c,C=h.ll[1]+(h.lim[1]-1)*h.del[1]+c;if(!(g>s.y||u>s.x||C<s.y||d<s.x)&&(a=no(s,t,h),!isNaN(a.x)))break}return isNaN(a.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*mt+" "+s.y*mt+" tried: '"+o+"'"),-1):(i.x=-a.x,i.y=a.y,0)}function no(e,t,i){var s={x:Number.NaN,y:Number.NaN};if(isNaN(e.x))return s;var a={x:e.x,y:e.y};a.x-=i.ll[0],a.y-=i.ll[1],a.x=_(a.x-Math.PI)+Math.PI;var o=Fi(a,i);if(t){if(isNaN(o.x))return s;o.x=a.x-o.x,o.y=a.y-o.y;var l=9,r=1e-12,h,c;do{if(c=Fi(o,i),isNaN(c.x)){console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");break}h={x:a.x-(c.x+o.x),y:a.y-(c.y+o.y)},o.x+=h.x,o.y+=h.y}while(l--&&Math.abs(h.x)>r&&Math.abs(h.y)>r);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),s;s.x=_(o.x+i.ll[0]),s.y=o.y+i.ll[1]}else isNaN(o.x)||(s.x=e.x+o.x,s.y=e.y+o.y);return s}function Fi(e,t){var i={x:e.x/t.del[0],y:e.y/t.del[1]},s={x:Math.floor(i.x),y:Math.floor(i.y)},a={x:i.x-1*s.x,y:i.y-1*s.y},o={x:Number.NaN,y:Number.NaN},l;if(s.x<0||s.x>=t.lim[0]||s.y<0||s.y>=t.lim[1])return o;l=s.y*t.lim[0]+s.x;var r={x:t.cvs[l][0],y:t.cvs[l][1]};l++;var h={x:t.cvs[l][0],y:t.cvs[l][1]};l+=t.lim[0];var c={x:t.cvs[l][0],y:t.cvs[l][1]};l--;var u={x:t.cvs[l][0],y:t.cvs[l][1]},g=a.x*a.y,d=a.x*(1-a.y),C=(1-a.x)*(1-a.y),m=(1-a.x)*a.y;return o.x=C*r.x+d*h.x+m*u.x+g*c.x,o.y=C*r.y+d*h.y+m*u.y+g*c.y,o}function zi(e,t,i){var s=i.x,a=i.y,o=i.z||0,l,r,h,c={};for(h=0;h<3;h++)if(!(t&&h===2&&i.z===void 0))switch(h===0?(l=s,"ew".indexOf(e.axis[h])!==-1?r="x":r="y"):h===1?(l=a,"ns".indexOf(e.axis[h])!==-1?r="y":r="x"):(l=o,r="z"),e.axis[h]){case"e":c[r]=l;break;case"w":c[r]=-l;break;case"n":c[r]=l;break;case"s":c[r]=-l;break;case"u":i[r]!==void 0&&(c.z=l);break;case"d":i[r]!==void 0&&(c.z=-l);break;default:return null}return c}function Ss(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function oo(e){ji(e.x),ji(e.y)}function ji(e){if(typeof Number.isFinite=="function"){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if(typeof e!="number"||e!==e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function ro(e,t){return(e.datum.datum_type===Nt||e.datum.datum_type===Pt||e.datum.datum_type===Gt)&&t.datumCode!=="WGS84"||(t.datum.datum_type===Nt||t.datum.datum_type===Pt||t.datum.datum_type===Gt)&&e.datumCode!=="WGS84"}function Ne(e,t,i,s){var a;Array.isArray(i)?i=Ss(i):i={x:i.x,y:i.y,z:i.z,m:i.m};var o=i.z!==void 0;if(oo(i),e.datum&&t.datum&&ro(e,t)&&(a=new ft("WGS84"),i=Ne(e,a,i,s),e=a),s&&e.axis!=="enu"&&(i=zi(e,!1,i)),e.projName==="longlat")i={x:i.x*J,y:i.y*J,z:i.z||0};else if(e.to_meter&&(i={x:i.x*e.to_meter,y:i.y*e.to_meter,z:i.z||0}),i=e.inverse(i),!i)return;if(e.from_greenwich&&(i.x+=e.from_greenwich),i=ao(e.datum,t.datum,i),!!i)return t.from_greenwich&&(i={x:i.x-t.from_greenwich,y:i.y,z:i.z||0}),t.projName==="longlat"?i={x:i.x*mt,y:i.y*mt,z:i.z||0}:(i=t.forward(i),t.to_meter&&(i={x:i.x/t.to_meter,y:i.y/t.to_meter,z:i.z||0})),s&&t.axis!=="enu"?zi(t,!0,i):(o||delete i.z,i)}var Gi=ft("WGS84");function Ze(e,t,i,s){var a,o,l;return Array.isArray(i)?(a=Ne(e,t,i,s)||{x:NaN,y:NaN},i.length>2?typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"?typeof a.z=="number"?[a.x,a.y,a.z].concat(i.splice(3)):[a.x,a.y,i[2]].concat(i.splice(3)):[a.x,a.y].concat(i.splice(2)):[a.x,a.y]):(o=Ne(e,t,i,s),l=Object.keys(i),l.length===2||l.forEach(function(r){if(typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"){if(r==="x"||r==="y"||r==="z")return}else if(r==="x"||r==="y")return;o[r]=i[r]}),o)}function Hi(e){return e instanceof ft?e:e.oProj?e.oProj:ft(e)}function nt(e,t,i){e=Hi(e);var s=!1,a;return typeof t>"u"?(t=e,e=Gi,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(i=t,t=e,e=Gi,s=!0),t=Hi(t),i?Ze(e,t,i):(a={forward:function(o,l){return Ze(e,t,o,l)},inverse:function(o,l){return Ze(t,e,o,l)}},s&&(a.oProj=t),a)}var Zi=6,Ns="AJSAJS",Ps="AFAFAF",zt=65,it=73,rt=79,ne=86,oe=90;const lo={forward:Ts,inverse:ho,toPoint:Ls};function Ts(e,t){return t=t||5,uo(co({lat:e[1],lon:e[0]}),t)}function ho(e){var t=mi(Bs(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function Ls(e){var t=mi(Bs(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function We(e){return e*(Math.PI/180)}function Wi(e){return 180*(e/Math.PI)}function co(e){var t=e.lat,i=e.lon,s=6378137,a=.00669438,o=.9996,l,r,h,c,u,g,d,C=We(t),m=We(i),p,I;I=Math.floor((i+180)/6)+1,i===180&&(I=60),t>=56&&t<64&&i>=3&&i<12&&(I=32),t>=72&&t<84&&(i>=0&&i<9?I=31:i>=9&&i<21?I=33:i>=21&&i<33?I=35:i>=33&&i<42&&(I=37)),l=(I-1)*6-180+3,p=We(l),r=a/(1-a),h=s/Math.sqrt(1-a*Math.sin(C)*Math.sin(C)),c=Math.tan(C)*Math.tan(C),u=r*Math.cos(C)*Math.cos(C),g=Math.cos(C)*(m-p),d=s*((1-a/4-3*a*a/64-5*a*a*a/256)*C-(3*a/8+3*a*a/32+45*a*a*a/1024)*Math.sin(2*C)+(15*a*a/256+45*a*a*a/1024)*Math.sin(4*C)-35*a*a*a/3072*Math.sin(6*C));var f=o*h*(g+(1-c+u)*g*g*g/6+(5-18*c+c*c+72*u-58*r)*g*g*g*g*g/120)+5e5,b=o*(d+h*Math.tan(C)*(g*g/2+(5-c+9*u+4*u*u)*g*g*g*g/24+(61-58*c+c*c+600*u-330*r)*g*g*g*g*g*g/720));return t<0&&(b+=1e7),{northing:Math.round(b),easting:Math.round(f),zoneNumber:I,zoneLetter:go(t)}}function mi(e){var t=e.northing,i=e.easting,s=e.zoneLetter,a=e.zoneNumber;if(a<0||a>60)return null;var o=.9996,l=6378137,r=.00669438,h,c=(1-Math.sqrt(1-r))/(1+Math.sqrt(1-r)),u,g,d,C,m,p,I,f,b,M=i-5e5,O=t;s<"N"&&(O-=1e7),I=(a-1)*6-180+3,h=r/(1-r),p=O/o,f=p/(l*(1-r/4-3*r*r/64-5*r*r*r/256)),b=f+(3*c/2-27*c*c*c/32)*Math.sin(2*f)+(21*c*c/16-55*c*c*c*c/32)*Math.sin(4*f)+151*c*c*c/96*Math.sin(6*f),u=l/Math.sqrt(1-r*Math.sin(b)*Math.sin(b)),g=Math.tan(b)*Math.tan(b),d=h*Math.cos(b)*Math.cos(b),C=l*(1-r)/Math.pow(1-r*Math.sin(b)*Math.sin(b),1.5),m=M/(u*o);var k=b-u*Math.tan(b)/C*(m*m/2-(5+3*g+10*d-4*d*d-9*h)*m*m*m*m/24+(61+90*g+298*d+45*g*g-252*h-3*d*d)*m*m*m*m*m*m/720);k=Wi(k);var w=(m-(1+2*g+d)*m*m*m/6+(5-2*d+28*g-3*d*d+8*h+24*g*g)*m*m*m*m*m/120)/Math.cos(b);w=I+Wi(w);var S;if(e.accuracy){var L=mi({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});S={top:L.lat,right:L.lon,bottom:k,left:w}}else S={lat:k,lon:w};return S}function go(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function uo(e,t){var i="00000"+e.easting,s="00000"+e.northing;return e.zoneNumber+e.zoneLetter+Ao(e.easting,e.northing,e.zoneNumber)+i.substr(i.length-5,t)+s.substr(s.length-5,t)}function Ao(e,t,i){var s=Ds(i),a=Math.floor(e/1e5),o=Math.floor(t/1e5)%20;return Co(a,o,s)}function Ds(e){var t=e%Zi;return t===0&&(t=Zi),t}function Co(e,t,i){var s=i-1,a=Ns.charCodeAt(s),o=Ps.charCodeAt(s),l=a+e-1,r=o+t,h=!1;l>oe&&(l=l-oe+zt-1,h=!0),(l===it||a<it&&l>it||(l>it||a<it)&&h)&&l++,(l===rt||a<rt&&l>rt||(l>rt||a<rt)&&h)&&(l++,l===it&&l++),l>oe&&(l=l-oe+zt-1),r>ne?(r=r-ne+zt-1,h=!0):h=!1,(r===it||o<it&&r>it||(r>it||o<it)&&h)&&r++,(r===rt||o<rt&&r>rt||(r>rt||o<rt)&&h)&&(r++,r===it&&r++),r>ne&&(r=r-ne+zt-1);var c=String.fromCharCode(l)+String.fromCharCode(r);return c}function Bs(e){if(e&&e.length===0)throw"MGRSPoint coverting from nothing";for(var t=e.length,i=null,s="",a,o=0;!/[A-Z]/.test(a=e.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+e;s+=a,o++}var l=parseInt(s,10);if(o===0||o+3>t)throw"MGRSPoint bad conversion from: "+e;var r=e.charAt(o++);if(r<="A"||r==="B"||r==="Y"||r>="Z"||r==="I"||r==="O")throw"MGRSPoint zone letter "+r+" not handled: "+e;i=e.substring(o,o+=2);for(var h=Ds(l),c=mo(i.charAt(0),h),u=fo(i.charAt(1),h);u<Io(r);)u+=2e6;var g=t-o;if(g%2!==0)throw`MGRSPoint has to have an even number
2
2
  of digits after the zone letter and two 100km letters - front
3
3
  half for easting meters, second half for
4
- northing meters`+e;var d=g/2,C=0,f=0,m,v,I,b,M;return d>0&&(m=1e5/Math.pow(10,d),v=e.substring(o,o+d),C=parseFloat(v)*m,I=e.substring(o+d),f=parseFloat(I)*m),b=C+c,M=f+u,{easting:b,northing:M,zoneLetter:r,zoneNumber:l,accuracy:m}}function mo(e,t){for(var i=ks.charCodeAt(t-1),s=1e5,a=!1;i!==e.charCodeAt(0);){if(i++,i===et&&i++,i===ot&&i++,i>ae){if(a)throw"Bad character: "+e;i=Ft,a=!0}s+=1e5}return s}function fo(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;for(var i=Ss.charCodeAt(t-1),s=0,a=!1;i!==e.charCodeAt(0);){if(i++,i===et&&i++,i===ot&&i++,i>se){if(a)throw"Bad character: "+e;i=Ft,a=!0}s+=1e5}return s}function Io(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function Ht(e,t,i){if(!(this instanceof Ht))return new Ht(e,t,i);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if(typeof e=="object")this.x=e.x,this.y=e.y,this.z=e.z||0;else if(typeof e=="string"&&typeof t>"u"){var s=e.split(",");this.x=parseFloat(s[0],10),this.y=parseFloat(s[1],10),this.z=parseFloat(s[2],10)||0}else this.x=e,this.y=t,this.z=i||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Ht.fromMGRS=function(e){return new Ht(Ps(e))};Ht.prototype.toMGRS=function(e){return Ns([this.x,this.y],e)};var po=1,vo=.25,Zi=.046875,Wi=.01953125,qi=.01068115234375,yo=.75,bo=.46875,Mo=.013020833333333334,Eo=.007120768229166667,wo=.3645833333333333,Oo=.005696614583333333,xo=.3076171875;function Ds(e){var t=[];t[0]=po-e*(vo+e*(Zi+e*(Wi+e*qi))),t[1]=e*(yo-e*(Zi+e*(Wi+e*qi)));var i=e*e;return t[2]=i*(bo-e*(Mo+e*Eo)),i*=e,t[3]=i*(wo-e*Oo),t[4]=i*e*xo,t}function De(e,t,i,s){return i*=t,t*=t,s[0]*e-i*(s[1]+t*(s[2]+t*(s[3]+t*s[4])))}var _o=20;function Bs(e,t,i){for(var s=1/(1-t),a=e,o=_o;o;--o){var l=Math.sin(a),r=1-t*l*l;if(r=(De(a,l,Math.cos(a),i)-e)*(r*Math.sqrt(r))*s,a-=r,Math.abs(r)<x)return a}return a}function ko(){this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.es&&(this.en=Ds(this.es),this.ml0=De(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function So(e){var t=e.x,i=e.y,s=k(t-this.long0),a,o,l,r=Math.sin(i),h=Math.cos(i);if(this.es){var u=h*s,g=Math.pow(u,2),d=this.ep2*Math.pow(h,2),C=Math.pow(d,2),f=Math.abs(h)>x?Math.tan(i):0,m=Math.pow(f,2),v=Math.pow(m,2);a=1-this.es*Math.pow(r,2),u=u/Math.sqrt(a);var I=De(i,r,h,this.en);o=this.a*(this.k0*u*(1+g/6*(1-m+d+g/20*(5-18*m+v+14*d-58*m*d+g/42*(61+179*v-v*m-479*m)))))+this.x0,l=this.a*(this.k0*(I-this.ml0+r*s*u/2*(1+g/12*(5-m+9*d+4*C+g/30*(61+v-58*m+270*d-330*m*d+g/56*(1385+543*v-v*m-3111*m))))))+this.y0}else{var c=h*Math.sin(s);if(Math.abs(Math.abs(c)-1)<x)return 93;if(o=.5*this.a*this.k0*Math.log((1+c)/(1-c))+this.x0,l=h*Math.cos(s)/Math.sqrt(1-Math.pow(c,2)),c=Math.abs(l),c>=1){if(c-1>x)return 93;l=0}else l=Math.acos(l);i<0&&(l=-l),l=this.a*this.k0*(l-this.lat0)+this.y0}return e.x=o,e.y=l,e}function No(e){var t,i,s,a,o=(e.x-this.x0)*(1/this.a),l=(e.y-this.y0)*(1/this.a);if(this.es)if(t=this.ml0+l/this.k0,i=Bs(t,this.es,this.en),Math.abs(i)<E){var g=Math.sin(i),d=Math.cos(i),C=Math.abs(d)>x?Math.tan(i):0,f=this.ep2*Math.pow(d,2),m=Math.pow(f,2),v=Math.pow(C,2),I=Math.pow(v,2);t=1-this.es*Math.pow(g,2);var b=o*Math.sqrt(t)/this.k0,M=Math.pow(b,2);t=t*C,s=i-t*M/(1-this.es)*.5*(1-M/12*(5+3*v-9*f*v+f-4*m-M/30*(61+90*v-252*f*v+45*I+46*f-M/56*(1385+3633*v+4095*I+1574*I*v)))),a=k(this.long0+b*(1-M/6*(1+2*v+f-M/20*(5+28*v+24*I+8*f*v+6*f-M/42*(61+662*v+1320*I+720*I*v))))/d)}else s=E*ge(l),a=0;else{var r=Math.exp(o/this.k0),h=.5*(r-1/r),c=this.lat0+l/this.k0,u=Math.cos(c);t=Math.sqrt((1-Math.pow(u,2))/(1+Math.pow(h,2))),s=Math.asin(t),l<0&&(s=-s),h===0&&u===0?a=0:a=k(Math.atan2(h,u)+this.long0)}return e.x=a,e.y=s,e}var Po=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const Ee={init:ko,forward:So,inverse:No,names:Po};function Vs(e){var t=Math.exp(e);return t=(t-1/t)/2,t}function ct(e,t){e=Math.abs(e),t=Math.abs(t);var i=Math.max(e,t),s=Math.min(e,t)/(i||1);return i*Math.sqrt(1+Math.pow(s,2))}function To(e){var t=1+e,i=t-1;return i===0?e:e*Math.log(t)/i}function Lo(e){var t=Math.abs(e);return t=To(t*(1+t/(ct(1,t)+1))),e<0?-t:t}function mi(e,t){for(var i=2*Math.cos(2*t),s=e.length-1,a=e[s],o=0,l;--s>=0;)l=-o+i*a+e[s],o=a,a=l;return t+l*Math.sin(2*t)}function Do(e,t){for(var i=2*Math.cos(t),s=e.length-1,a=e[s],o=0,l;--s>=0;)l=-o+i*a+e[s],o=a,a=l;return Math.sin(t)*l}function Bo(e){var t=Math.exp(e);return t=(t+1/t)/2,t}function Rs(e,t,i){for(var s=Math.sin(t),a=Math.cos(t),o=Vs(i),l=Bo(i),r=2*a*l,h=-2*s*o,c=e.length-1,u=e[c],g=0,d=0,C=0,f,m;--c>=0;)f=d,m=g,d=u,g=C,u=-f+r*d-h*g+e[c],C=-m+h*d+r*g;return r=s*l,h=a*o,[r*u-h*C,r*C+h*u]}function Vo(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Ee.init.apply(this),this.forward=Ee.forward,this.inverse=Ee.inverse),this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),i=t;this.cgb[0]=t*(2+t*(-2/3+t*(-2+t*(116/45+t*(26/45+t*(-2854/675)))))),this.cbg[0]=t*(-2+t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))),i=i*t,this.cgb[1]=i*(7/3+t*(-8/5+t*(-227/45+t*(2704/315+t*(2323/945))))),this.cbg[1]=i*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),i=i*t,this.cgb[2]=i*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=i*(-26/15+t*(34/21+t*(8/5+t*(-12686/2835)))),i=i*t,this.cgb[3]=i*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=i*(1237/630+t*(-12/5+t*(-24832/14175))),i=i*t,this.cgb[4]=i*(4174/315+t*(-144838/6237)),this.cbg[4]=i*(-734/315+t*(109598/31185)),i=i*t,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+i*(1/4+i*(1/64+i/256))),this.utg[0]=t*(-.5+t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=i*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=i*(13/48+t*(-3/5+t*(557/1440+t*(281/630+t*(-1983433/1935360))))),i=i*t,this.utg[2]=i*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=i*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),i=i*t,this.utg[3]=i*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=i*(49561/161280+t*(-179/168+t*(6601661/7257600))),i=i*t,this.utg[4]=i*(-4583/161280+t*(108847/3991680)),this.gtu[4]=i*(34729/80640+t*(-3418889/1995840)),i=i*t,this.utg[5]=i*(-20648693/638668800),this.gtu[5]=i*(212378941/319334400);var s=mi(this.cbg,this.lat0);this.Zb=-this.Qn*(s+Do(this.gtu,2*s))}function Ro(e){var t=k(e.x-this.long0),i=e.y;i=mi(this.cbg,i);var s=Math.sin(i),a=Math.cos(i),o=Math.sin(t),l=Math.cos(t);i=Math.atan2(s,l*a),t=Math.atan2(o*a,ct(s,a*l)),t=Lo(Math.tan(t));var r=Rs(this.gtu,2*i,2*t);i=i+r[0],t=t+r[1];var h,c;return Math.abs(t)<=2.623395162778?(h=this.a*(this.Qn*t)+this.x0,c=this.a*(this.Qn*i+this.Zb)+this.y0):(h=1/0,c=1/0),e.x=h,e.y=c,e}function Uo(e){var t=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);i=(i-this.Zb)/this.Qn,t=t/this.Qn;var s,a;if(Math.abs(t)<=2.623395162778){var o=Rs(this.utg,2*i,2*t);i=i+o[0],t=t+o[1],t=Math.atan(Vs(t));var l=Math.sin(i),r=Math.cos(i),h=Math.sin(t),c=Math.cos(t);i=Math.atan2(l*c,ct(h,c*r)),t=Math.atan2(h,c*r),s=k(t+this.long0),a=mi(this.cgb,i)}else s=1/0,a=1/0;return e.x=s,e.y=a,e}var Fo=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const we={init:Vo,forward:Ro,inverse:Uo,names:Fo};function zo(e,t){if(e===void 0){if(e=Math.floor((k(t)+Math.PI)*30/Math.PI)+1,e<0)return 0;if(e>60)return 60}return e}var jo="etmerc";function Go(){var e=zo(this.zone,this.long0);if(e===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*q,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,we.init.apply(this),this.forward=we.forward,this.inverse=we.inverse}var Ho=["Universal Transverse Mercator System","utm"];const Zo={init:Go,names:Ho,dependsOn:jo};function fi(e,t){return Math.pow((1-e)/(1+e),t)}var Wo=20;function qo(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+F)/(Math.pow(Math.tan(.5*this.lat0+F),this.C)*fi(this.e*e,this.ratexp))}function Yo(e){var t=e.x,i=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+F),this.C)*fi(this.e*Math.sin(i),this.ratexp))-E,e.x=this.C*t,e}function Jo(e){for(var t=1e-14,i=e.x/this.C,s=e.y,a=Math.pow(Math.tan(.5*s+F)/this.K,1/this.C),o=Wo;o>0&&(s=2*Math.atan(a*fi(this.e*Math.sin(e.y),-.5*this.e))-E,!(Math.abs(s-e.y)<t));--o)e.y=s;return o?(e.x=i,e.y=s,e):null}const Ii={init:qo,forward:Yo,inverse:Jo};function Xo(){Ii.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))}function Ko(e){var t,i,s,a;return e.x=k(e.x-this.long0),Ii.forward.apply(this,[e]),t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*i*s),e.x=a*i*Math.sin(e.x),e.y=a*(this.cosc0*t-this.sinc0*i*s),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e}function Qo(e){var t,i,s,a,o;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,o=Math.sqrt(e.x*e.x+e.y*e.y)){var l=2*Math.atan2(o,this.R2);t=Math.sin(l),i=Math.cos(l),a=Math.asin(i*this.sinc0+e.y*t*this.cosc0/o),s=Math.atan2(e.x*t,o*this.cosc0*i-e.y*this.sinc0*t)}else a=this.phic0,s=0;return e.x=s,e.y=a,Ii.inverse.apply(this,[e]),e.x=k(e.x+this.long0),e}var $o=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const tr={init:Xo,forward:Ko,inverse:Qo,names:$o};function er(e,t,i){return t*=i,Math.tan(.5*(E+e))*Math.pow((1-t)/(1+t),.5*i)}function ir(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=x&&(this.k0=.5*(1+ge(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=x&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=x&&(this.k0=.5*this.cons*mt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/gt(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=mt(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-E,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function sr(e){var t=e.x,i=e.y,s=Math.sin(i),a=Math.cos(i),o,l,r,h,c,u,g=k(t-this.long0);return Math.abs(Math.abs(t-this.long0)-Math.PI)<=x&&Math.abs(i+this.lat0)<=x?(e.x=NaN,e.y=NaN,e):this.sphere?(o=2*this.k0/(1+this.sinlat0*s+this.coslat0*a*Math.cos(g)),e.x=this.a*o*a*Math.sin(g)+this.x0,e.y=this.a*o*(this.coslat0*s-this.sinlat0*a*Math.cos(g))+this.y0,e):(l=2*Math.atan(this.ssfn_(i,s,this.e))-E,h=Math.cos(l),r=Math.sin(l),Math.abs(this.coslat0)<=x?(c=gt(this.e,i*this.con,this.con*s),u=2*this.a*this.k0*c/this.cons,e.x=this.x0+u*Math.sin(t-this.long0),e.y=this.y0-this.con*u*Math.cos(t-this.long0),e):(Math.abs(this.sinlat0)<x?(o=2*this.a*this.k0/(1+h*Math.cos(g)),e.y=o*r):(o=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*r+this.cosX0*h*Math.cos(g))),e.y=o*(this.cosX0*r-this.sinX0*h*Math.cos(g))+this.y0),e.x=o*h*Math.sin(g)+this.x0,e))}function ar(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,o,l=Math.sqrt(e.x*e.x+e.y*e.y);if(this.sphere){var r=2*Math.atan(l/(2*this.a*this.k0));return t=this.long0,i=this.lat0,l<=x?(e.x=t,e.y=i,e):(i=Math.asin(Math.cos(r)*this.sinlat0+e.y*Math.sin(r)*this.coslat0/l),Math.abs(this.coslat0)<x?this.lat0>0?t=k(this.long0+Math.atan2(e.x,-1*e.y)):t=k(this.long0+Math.atan2(e.x,e.y)):t=k(this.long0+Math.atan2(e.x*Math.sin(r),l*this.coslat0*Math.cos(r)-e.y*this.sinlat0*Math.sin(r))),e.x=t,e.y=i,e)}else if(Math.abs(this.coslat0)<=x){if(l<=x)return i=this.lat0,t=this.long0,e.x=t,e.y=i,e;e.x*=this.con,e.y*=this.con,s=l*this.cons/(2*this.a*this.k0),i=this.con*he(this.e,s),t=this.con*k(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else a=2*Math.atan(l*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,l<=x?o=this.X0:(o=Math.asin(Math.cos(a)*this.sinX0+e.y*Math.sin(a)*this.cosX0/l),t=k(this.long0+Math.atan2(e.x*Math.sin(a),l*this.cosX0*Math.cos(a)-e.y*this.sinX0*Math.sin(a)))),i=-1*he(this.e,Math.tan(.5*(E+o)));return e.x=t,e.y=i,e}var nr=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const or={init:ir,forward:sr,inverse:ar,names:nr,ssfn_:er};function rr(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),i=this.a,s=this.rf,a=1/s,o=2*a-Math.pow(a,2),l=this.e=Math.sqrt(o);this.R=this.k0*i*Math.sqrt(1-o)/(1-o*Math.pow(t,2)),this.alpha=Math.sqrt(1+o/(1-o)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var r=Math.log(Math.tan(Math.PI/4+this.b0/2)),h=Math.log(Math.tan(Math.PI/4+e/2)),c=Math.log((1+l*t)/(1-l*t));this.K=r-this.alpha*h+this.alpha*l/2*c}function lr(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),i=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),s=-this.alpha*(t+i)+this.K,a=2*(Math.atan(Math.exp(s))-Math.PI/4),o=this.alpha*(e.x-this.lambda0),l=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(a)+Math.cos(this.b0)*Math.cos(o))),r=Math.asin(Math.cos(this.b0)*Math.sin(a)-Math.sin(this.b0)*Math.cos(a)*Math.cos(o));return e.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,e.x=this.R*l+this.x0,e}function hr(e){for(var t=e.x-this.x0,i=e.y-this.y0,s=t/this.R,a=2*(Math.atan(Math.exp(i/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(a)+Math.sin(this.b0)*Math.cos(a)*Math.cos(s)),l=Math.atan(Math.sin(s)/(Math.cos(this.b0)*Math.cos(s)-Math.sin(this.b0)*Math.tan(a))),r=this.lambda0+l/this.alpha,h=0,c=o,u=-1e3,g=0;Math.abs(c-u)>1e-7;){if(++g>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),u=c,c=2*Math.atan(Math.exp(h))-Math.PI/2}return e.x=r,e.y=c,e}var cr=["somerc"];const gr={init:rr,forward:lr,inverse:hr,names:cr};var Vt=1e-7;function dr(e){var t=["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],i=typeof e.PROJECTION=="object"?Object.keys(e.PROJECTION)[0]:e.PROJECTION;return"no_uoff"in e||"no_off"in e||t.indexOf(i)!==-1}function ur(){var e,t,i,s,a,o,l,r,h,c,u=0,g,d=0,C=0,f=0,m=0,v=0,I=0;this.no_off=dr(this),this.no_rot="no_rot"in this;var b=!1;"alpha"in this&&(b=!0);var M=!1;if("rectified_grid_angle"in this&&(M=!0),b&&(I=this.alpha),M&&(u=this.rectified_grid_angle*q),b||M)d=this.longc;else if(C=this.long1,m=this.lat1,f=this.long2,v=this.lat2,Math.abs(m-v)<=Vt||(e=Math.abs(m))<=Vt||Math.abs(e-E)<=Vt||Math.abs(Math.abs(this.lat0)-E)<=Vt||Math.abs(Math.abs(v)-E)<=Vt)throw new Error;var O=1-this.es;t=Math.sqrt(O),Math.abs(this.lat0)>x?(r=Math.sin(this.lat0),i=Math.cos(this.lat0),e=1-this.es*r*r,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/O),this.A=this.B*this.k0*t/e,s=this.B*t/(i*Math.sqrt(e)),a=s*s-1,a<=0?a=0:(a=Math.sqrt(a),this.lat0<0&&(a=-a)),this.E=a+=s,this.E*=Math.pow(gt(this.e,this.lat0,r),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=a=1),b||M?(b?(g=Math.asin(Math.sin(I)/s),M||(u=I)):(g=u,I=Math.asin(s*Math.sin(g))),this.lam0=d-Math.asin(.5*(a-1/a)*Math.tan(g))/this.B):(o=Math.pow(gt(this.e,m,Math.sin(m)),this.B),l=Math.pow(gt(this.e,v,Math.sin(v)),this.B),a=this.E/o,h=(l-o)/(l+o),c=this.E*this.E,c=(c-l*o)/(c+l*o),e=C-f,e<-Math.pi?f-=re:e>Math.pi&&(f+=re),this.lam0=k(.5*(C+f)-Math.atan(c*Math.tan(.5*this.B*(C-f))/h)/this.B),g=Math.atan(2*Math.sin(this.B*k(C-this.lam0))/(a-1/a)),u=I=Math.asin(s*Math.sin(g))),this.singam=Math.sin(g),this.cosgam=Math.cos(g),this.sinrot=Math.sin(u),this.cosrot=Math.cos(u),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A*this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),a=.5*g,this.v_pole_n=this.ArB*Math.log(Math.tan(F-a)),this.v_pole_s=this.ArB*Math.log(Math.tan(F+a))}function Ar(e){var t={},i,s,a,o,l,r,h,c;if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-E)>x){if(l=this.E/Math.pow(gt(this.e,e.y,Math.sin(e.y)),this.B),r=1/l,i=.5*(l-r),s=.5*(l+r),o=Math.sin(this.B*e.x),a=(i*this.singam-o*this.cosgam)/s,Math.abs(Math.abs(a)-1)<x)throw new Error;c=.5*this.ArB*Math.log((1-a)/(1+a)),r=Math.cos(this.B*e.x),Math.abs(r)<Vt?h=this.A*e.x:h=this.ArB*Math.atan2(i*this.cosgam+o*this.singam,r)}else c=e.y>0?this.v_pole_n:this.v_pole_s,h=this.ArB*e.y;return this.no_rot?(t.x=h,t.y=c):(h-=this.u_0,t.x=c*this.cosrot+h*this.sinrot,t.y=h*this.cosrot-c*this.sinrot),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t}function Cr(e){var t,i,s,a,o,l,r,h={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(i=e.y,t=e.x):(i=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),s=Math.exp(-this.BrA*i),a=.5*(s-1/s),o=.5*(s+1/s),l=Math.sin(this.BrA*t),r=(l*this.cosgam+a*this.singam)/o,Math.abs(Math.abs(r)-1)<x)h.x=0,h.y=r<0?-E:E;else{if(h.y=this.E/Math.sqrt((1+r)/(1-r)),h.y=he(this.e,Math.pow(h.y,1/this.B)),h.y===1/0)throw new Error;h.x=-this.rB*Math.atan2(a*this.cosgam-l*this.singam,Math.cos(this.BrA*t))}return h.x+=this.lam0,h}var mr=["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Two_Point_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","Oblique_Mercator","omerc"];const fr={init:ur,forward:Ar,inverse:Cr,names:mr};function Ir(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<x)){var e=this.b/this.a;this.e=Math.sqrt(1-e*e);var t=Math.sin(this.lat1),i=Math.cos(this.lat1),s=mt(this.e,t,i),a=gt(this.e,this.lat1,t),o=Math.sin(this.lat2),l=Math.cos(this.lat2),r=mt(this.e,o,l),h=gt(this.e,this.lat2,o),c=gt(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>x?this.ns=Math.log(s/r)/Math.log(a/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(a,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}}function pr(e){var t=e.x,i=e.y;Math.abs(2*Math.abs(i)-Math.PI)<=x&&(i=ge(i)*(E-2*x));var s=Math.abs(Math.abs(i)-E),a,o;if(s>x)a=gt(this.e,i,Math.sin(i)),o=this.a*this.f0*Math.pow(a,this.ns);else{if(s=i*this.ns,s<=0)return null;o=0}var l=this.ns*k(t-this.long0);return e.x=this.k0*(o*Math.sin(l))+this.x0,e.y=this.k0*(this.rh-o*Math.cos(l))+this.y0,e}function vr(e){var t,i,s,a,o,l=(e.x-this.x0)/this.k0,r=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(l*l+r*r),i=1):(t=-Math.sqrt(l*l+r*r),i=-1);var h=0;if(t!==0&&(h=Math.atan2(i*l,i*r)),t!==0||this.ns>0){if(i=1/this.ns,s=Math.pow(t/(this.a*this.f0),i),a=he(this.e,s),a===-9999)return null}else a=-E;return o=k(h/this.ns+this.long0),e.x=o,e.y=a,e}var yr=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"];const br={init:Ir,forward:pr,inverse:vr,names:yr};function Mr(){this.a=6377397155e-3,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.7417649320975901-.308341501185665),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq}function Er(e){var t,i,s,a,o,l,r,h=e.x,c=e.y,u=k(h-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),i=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),s=-u*this.alfa,a=Math.asin(Math.cos(this.ad)*Math.sin(i)+Math.sin(this.ad)*Math.cos(i)*Math.cos(s)),o=Math.asin(Math.cos(i)*Math.sin(s)/Math.cos(a)),l=this.n*o,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(a/2+this.s45),this.n),e.y=r*Math.cos(l)/1,e.x=r*Math.sin(l)/1,this.czech||(e.y*=-1,e.x*=-1),e}function wr(e){var t,i,s,a,o,l,r,h,c=e.x;e.x=e.y,e.y=c,this.czech||(e.y*=-1,e.x*=-1),l=Math.sqrt(e.x*e.x+e.y*e.y),o=Math.atan2(e.y,e.x),a=o/Math.sin(this.s0),s=2*(Math.atan(Math.pow(this.ro0/l,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(a)),i=Math.asin(Math.cos(s)*Math.sin(a)/Math.cos(t)),e.x=this.long0-i/this.alfa,r=t,h=0;var u=0;do e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),Math.abs(r-e.y)<1e-10&&(h=1),r=e.y,u+=1;while(h===0&&u<15);return u>=15?null:e}var Or=["Krovak","krovak"];const xr={init:Mr,forward:Er,inverse:wr,names:Or};function $(e,t,i,s,a){return e*a-t*Math.sin(2*a)+i*Math.sin(4*a)-s*Math.sin(6*a)}function de(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function ue(e){return .375*e*(1+.25*e*(1+.46875*e))}function Ae(e){return .05859375*e*e*(1+.75*e)}function Ce(e){return e*e*e*(35/3072)}function Zt(e,t,i){var s=t*i;return e/Math.sqrt(1-s*s)}function qt(e){return Math.abs(e)<E?e:e-ge(e)*Math.PI}function Ne(e,t,i,s,a){var o,l;o=e/t;for(var r=0;r<15;r++)if(l=(e-(t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-a*Math.sin(6*o)))/(t-2*i*Math.cos(2*o)+4*s*Math.cos(4*o)-6*a*Math.cos(6*o)),o+=l,Math.abs(l)<=1e-10)return o;return NaN}function _r(){this.sphere||(this.e0=de(this.es),this.e1=ue(this.es),this.e2=Ae(this.es),this.e3=Ce(this.es),this.ml0=this.a*$(this.e0,this.e1,this.e2,this.e3,this.lat0))}function kr(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere)t=this.a*Math.asin(Math.cos(a)*Math.sin(s)),i=this.a*(Math.atan2(Math.tan(a),Math.cos(s))-this.lat0);else{var o=Math.sin(a),l=Math.cos(a),r=Zt(this.a,this.e,o),h=Math.tan(a)*Math.tan(a),c=s*Math.cos(a),u=c*c,g=this.es*l*l/(1-this.es),d=this.a*$(this.e0,this.e1,this.e2,this.e3,a);t=r*c*(1-u*h*(1/6-(8-h+8*g)*u/120)),i=d-this.ml0+r*o/l*u*(.5+(5-h+6*g)*u/24)}return e.x=t+this.x0,e.y=i+this.y0,e}function Sr(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a;if(this.sphere){var o=i+this.lat0;s=Math.asin(Math.sin(o)*Math.cos(t)),a=Math.atan2(Math.tan(t),Math.cos(o))}else{var l=this.ml0/this.a+i,r=Ne(l,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(r)-E)<=x)return e.x=this.long0,e.y=E,i<0&&(e.y*=-1),e;var h=Zt(this.a,this.e,Math.sin(r)),c=h*h*h/this.a/this.a*(1-this.es),u=Math.pow(Math.tan(r),2),g=t*this.a/h,d=g*g;s=r-h*Math.tan(r)/c*g*g*(.5-(1+3*u)*g*g/24),a=g*(1-d*(u/3+(1+3*u)*u*d/15))/Math.cos(r)}return e.x=k(a+this.long0),e.y=qt(s),e}var Nr=["Cassini","Cassini_Soldner","cass"];const Pr={init:_r,forward:kr,inverse:Sr,names:Nr};function yt(e,t){var i;return e>1e-7?(i=e*t,(1-e*e)*(t/(1-i*i)-.5/e*Math.log((1-i)/(1+i)))):2*t}var Tr=1,Lr=2,Dr=3,Br=4;function Vr(){var e=Math.abs(this.lat0);if(Math.abs(e-E)<x?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<x?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var t;switch(this.qp=yt(this.e,1),this.mmf=.5/(1-this.es),this.apa=Wr(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=yt(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd;break}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))}function Rr(e){var t,i,s,a,o,l,r,h,c,u,g=e.x,d=e.y;if(g=k(g-this.long0),this.sphere){if(o=Math.sin(d),u=Math.cos(d),s=Math.cos(g),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(i=this.mode===this.EQUIT?1+u*s:1+this.sinph0*o+this.cosph0*u*s,i<=x)return null;i=Math.sqrt(2/i),t=i*u*Math.sin(g),i*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*u*s}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(s=-s),Math.abs(d+this.lat0)<x)return null;i=F-d*.5,i=2*(this.mode===this.S_POLE?Math.cos(i):Math.sin(i)),t=i*Math.sin(g),i*=s}}else{switch(r=0,h=0,c=0,s=Math.cos(g),a=Math.sin(g),o=Math.sin(d),l=yt(this.e,o),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(r=l/this.qp,h=Math.sqrt(1-r*r)),this.mode){case this.OBLIQ:c=1+this.sinb1*r+this.cosb1*h*s;break;case this.EQUIT:c=1+h*s;break;case this.N_POLE:c=E+d,l=this.qp-l;break;case this.S_POLE:c=d-E,l=this.qp+l;break}if(Math.abs(c)<x)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:c=Math.sqrt(2/c),this.mode===this.OBLIQ?i=this.ymf*c*(this.cosb1*r-this.sinb1*h*s):i=(c=Math.sqrt(2/(1+h*s)))*r*this.ymf,t=this.xmf*c*h*a;break;case this.N_POLE:case this.S_POLE:l>=0?(t=(c=Math.sqrt(l))*a,i=s*(this.mode===this.S_POLE?c:-c)):t=i=0;break}}return e.x=this.a*t+this.x0,e.y=this.a*i+this.y0,e}function Ur(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a,o,l,r,h,c;if(this.sphere){var u=0,g,d=0;if(g=Math.sqrt(t*t+i*i),a=g*.5,a>1)return null;switch(a=2*Math.asin(a),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(d=Math.sin(a),u=Math.cos(a)),this.mode){case this.EQUIT:a=Math.abs(g)<=x?0:Math.asin(i*d/g),t*=d,i=u*g;break;case this.OBLIQ:a=Math.abs(g)<=x?this.lat0:Math.asin(u*this.sinph0+i*d*this.cosph0/g),t*=d*this.cosph0,i=(u-Math.sin(a)*this.sinph0)*g;break;case this.N_POLE:i=-i,a=E-a;break;case this.S_POLE:a-=E;break}s=i===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(t,i)}else{if(c=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(t/=this.dd,i*=this.dd,h=Math.sqrt(t*t+i*i),h<x)return e.x=this.long0,e.y=this.lat0,e;l=2*Math.asin(.5*h/this.rq),o=Math.cos(l),t*=l=Math.sin(l),this.mode===this.OBLIQ?(c=o*this.sinb1+i*l*this.cosb1/h,r=this.qp*c,i=h*this.cosb1*o-i*this.sinb1*l):(c=i*l/h,r=this.qp*c,i=h*o)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(i=-i),r=t*t+i*i,!r)return e.x=this.long0,e.y=this.lat0,e;c=1-r/this.qp,this.mode===this.S_POLE&&(c=-c)}s=Math.atan2(t,i),a=qr(Math.asin(c),this.apa)}return e.x=k(this.long0+s),e.y=a,e}var Fr=.3333333333333333,zr=.17222222222222222,jr=.10257936507936508,Gr=.06388888888888888,Hr=.0664021164021164,Zr=.016415012942191543;function Wr(e){var t,i=[];return i[0]=e*Fr,t=e*e,i[0]+=t*zr,i[1]=t*Gr,t*=e,i[0]+=t*jr,i[1]+=t*Hr,i[2]=t*Zr,i}function qr(e,t){var i=e+e;return e+t[0]*Math.sin(i)+t[1]*Math.sin(i+i)+t[2]*Math.sin(i+i+i)}var Yr=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const Jr={init:Vr,forward:Rr,inverse:Ur,names:Yr,S_POLE:Tr,N_POLE:Lr,EQUIT:Dr,OBLIQ:Br};function Et(e){return Math.abs(e)>1&&(e=e>1?1:-1),Math.asin(e)}function Xr(){Math.abs(this.lat1+this.lat2)<x||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=mt(this.e3,this.sin_po,this.cos_po),this.qs1=yt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=mt(this.e3,this.sin_po,this.cos_po),this.qs2=yt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=yt(this.e3,this.sin_po),Math.abs(this.lat1-this.lat2)>x?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)}function Kr(e){var t=e.x,i=e.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var s=yt(this.e3,this.sin_phi),a=this.a*Math.sqrt(this.c-this.ns0*s)/this.ns0,o=this.ns0*k(t-this.long0),l=a*Math.sin(o)+this.x0,r=this.rh-a*Math.cos(o)+this.y0;return e.x=l,e.y=r,e}function Qr(e){var t,i,s,a,o,l;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),s=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),s=-1),a=0,t!==0&&(a=Math.atan2(s*e.x,s*e.y)),s=t*this.ns0/this.a,this.sphere?l=Math.asin((this.c-s*s)/(2*this.ns0)):(i=(this.c-s*s)/this.ns0,l=this.phi1z(this.e3,i)),o=k(a/this.ns0+this.long0),e.x=o,e.y=l,e}function $r(e,t){var i,s,a,o,l,r=Et(.5*t);if(e<x)return r;for(var h=e*e,c=1;c<=25;c++)if(i=Math.sin(r),s=Math.cos(r),a=e*i,o=1-a*a,l=.5*o*o/s*(t/(1-h)-i/o+.5/e*Math.log((1-a)/(1+a))),r=r+l,Math.abs(l)<=1e-7)return r;return null}var tl=["Albers_Conic_Equal_Area","Albers","aea"];const el={init:Xr,forward:Kr,inverse:Qr,names:tl,phi1z:$r};function il(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function sl(e){var t,i,s,a,o,l,r,h,c=e.x,u=e.y;return s=k(c-this.long0),t=Math.sin(u),i=Math.cos(u),a=Math.cos(s),l=this.sin_p14*t+this.cos_p14*i*a,o=1,l>0||Math.abs(l)<=x?(r=this.x0+this.a*o*i*Math.sin(s)/l,h=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*i*a)/l):(r=this.x0+this.infinity_dist*i*Math.sin(s),h=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*i*a)),e.x=r,e.y=h,e}function al(e){var t,i,s,a,o,l;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(a=Math.atan2(t,this.rc),i=Math.sin(a),s=Math.cos(a),l=Et(s*this.sin_p14+e.y*i*this.cos_p14/t),o=Math.atan2(e.x*i,t*this.cos_p14*s-e.y*this.sin_p14*i),o=k(this.long0+o)):(l=this.phic0,o=0),e.x=o,e.y=l,e}var nl=["gnom"];const ol={init:il,forward:sl,inverse:al,names:nl};function rl(e,t){var i=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-i)<1e-6)return t<0?-1*E:E;for(var s=Math.asin(.5*t),a,o,l,r,h=0;h<30;h++)if(o=Math.sin(s),l=Math.cos(s),r=e*o,a=Math.pow(1-r*r,2)/(2*l)*(t/(1-e*e)-o/(1-r*r)+.5/e*Math.log((1-r)/(1+r))),s+=a,Math.abs(a)<=1e-10)return s;return NaN}function ll(){this.sphere||(this.k0=mt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function hl(e){var t=e.x,i=e.y,s,a,o=k(t-this.long0);if(this.sphere)s=this.x0+this.a*o*Math.cos(this.lat_ts),a=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var l=yt(this.e,Math.sin(i));s=this.x0+this.a*this.k0*o,a=this.y0+this.a*l*.5/this.k0}return e.x=s,e.y=a,e}function cl(e){e.x-=this.x0,e.y-=this.y0;var t,i;return this.sphere?(t=k(this.long0+e.x/this.a/Math.cos(this.lat_ts)),i=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(i=rl(this.e,2*e.y*this.k0/this.a),t=k(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=i,e}var gl=["cea"];const dl={init:ll,forward:hl,inverse:cl,names:gl};function ul(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)}function Al(e){var t=e.x,i=e.y,s=k(t-this.long0),a=qt(i-this.lat0);return e.x=this.x0+this.a*s*this.rc,e.y=this.y0+this.a*a,e}function Cl(e){var t=e.x,i=e.y;return e.x=k(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=qt(this.lat0+(i-this.y0)/this.a),e}var ml=["Equirectangular","Equidistant_Cylindrical","eqc"];const fl={init:ul,forward:Al,inverse:Cl,names:ml};var Yi=20;function Il(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=de(this.es),this.e1=ue(this.es),this.e2=Ae(this.es),this.e3=Ce(this.es),this.ml0=this.a*$(this.e0,this.e1,this.e2,this.e3,this.lat0)}function pl(e){var t=e.x,i=e.y,s,a,o,l=k(t-this.long0);if(o=l*Math.sin(i),this.sphere)Math.abs(i)<=x?(s=this.a*l,a=-1*this.a*this.lat0):(s=this.a*Math.sin(o)/Math.tan(i),a=this.a*(qt(i-this.lat0)+(1-Math.cos(o))/Math.tan(i)));else if(Math.abs(i)<=x)s=this.a*l,a=-1*this.ml0;else{var r=Zt(this.a,this.e,Math.sin(i))/Math.tan(i);s=r*Math.sin(o),a=this.a*$(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+r*(1-Math.cos(o))}return e.x=s+this.x0,e.y=a+this.y0,e}function vl(e){var t,i,s,a,o,l,r,h,c;if(s=e.x-this.x0,a=e.y-this.y0,this.sphere)if(Math.abs(a+this.a*this.lat0)<=x)t=k(s/this.a+this.long0),i=0;else{l=this.lat0+a/this.a,r=s*s/this.a/this.a+l*l,h=l;var u;for(o=Yi;o;--o)if(u=Math.tan(h),c=-1*(l*(h*u+1)-h-.5*(h*h+r)*u)/((h-l)/u-1),h+=c,Math.abs(c)<=x){i=h;break}t=k(this.long0+Math.asin(s*Math.tan(h)/this.a)/Math.sin(i))}else if(Math.abs(a+this.ml0)<=x)i=0,t=k(this.long0+s/this.a);else{l=(this.ml0+a)/this.a,r=s*s/this.a/this.a+l*l,h=l;var g,d,C,f,m;for(o=Yi;o;--o)if(m=this.e*Math.sin(h),g=Math.sqrt(1-m*m)*Math.tan(h),d=this.a*$(this.e0,this.e1,this.e2,this.e3,h),C=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),f=d/this.a,c=(l*(g*f+1)-f-.5*g*(f*f+r))/(this.es*Math.sin(2*h)*(f*f+r-2*l*f)/(4*g)+(l-f)*(g*C-2/Math.sin(2*h))-C),h-=c,Math.abs(c)<=x){i=h;break}g=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),t=k(this.long0+Math.asin(s*g/this.a)/Math.sin(i))}return e.x=t,e.y=i,e}var yl=["Polyconic","poly"];const bl={init:Il,forward:pl,inverse:vl,names:yl};function Ml(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013}function El(e){var t,i=e.x,s=e.y,a=s-this.lat0,o=i-this.long0,l=a/oe*1e-5,r=o,h=1,c=0;for(t=1;t<=10;t++)h=h*l,c=c+this.A[t]*h;var u=c,g=r,d=1,C=0,f,m,v=0,I=0;for(t=1;t<=6;t++)f=d*u-C*g,m=C*u+d*g,d=f,C=m,v=v+this.B_re[t]*d-this.B_im[t]*C,I=I+this.B_im[t]*d+this.B_re[t]*C;return e.x=I*this.a+this.x0,e.y=v*this.a+this.y0,e}function wl(e){var t,i=e.x,s=e.y,a=i-this.x0,o=s-this.y0,l=o/this.a,r=a/this.a,h=1,c=0,u,g,d=0,C=0;for(t=1;t<=6;t++)u=h*l-c*r,g=c*l+h*r,h=u,c=g,d=d+this.C_re[t]*h-this.C_im[t]*c,C=C+this.C_im[t]*h+this.C_re[t]*c;for(var f=0;f<this.iterations;f++){var m=d,v=C,I,b,M=l,O=r;for(t=2;t<=6;t++)I=m*d-v*C,b=v*d+m*C,m=I,v=b,M=M+(t-1)*(this.B_re[t]*m-this.B_im[t]*v),O=O+(t-1)*(this.B_im[t]*m+this.B_re[t]*v);m=1,v=0;var _=this.B_re[1],w=this.B_im[1];for(t=2;t<=6;t++)I=m*d-v*C,b=v*d+m*C,m=I,v=b,_=_+t*(this.B_re[t]*m-this.B_im[t]*v),w=w+t*(this.B_im[t]*m+this.B_re[t]*v);var S=_*_+w*w;d=(M*_+O*w)/S,C=(O*_-M*w)/S}var D=d,T=C,R=1,B=0;for(t=1;t<=9;t++)R=R*D,B=B+this.D[t]*R;var K=this.lat0+B*oe*1e5,Jt=this.long0+T;return e.x=Jt,e.y=K,e}var Ol=["New_Zealand_Map_Grid","nzmg"];const xl={init:Ml,forward:El,inverse:wl,names:Ol};function _l(){}function kl(e){var t=e.x,i=e.y,s=k(t-this.long0),a=this.x0+this.a*s,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+i/2.5))*1.25;return e.x=a,e.y=o,e}function Sl(e){e.x-=this.x0,e.y-=this.y0;var t=k(this.long0+e.x/this.a),i=2.5*(Math.atan(Math.exp(.8*e.y/this.a))-Math.PI/4);return e.x=t,e.y=i,e}var Nl=["Miller_Cylindrical","mill"];const Pl={init:_l,forward:kl,inverse:Sl,names:Nl};var Tl=20;function Ll(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Ds(this.es)}function Dl(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere){if(!this.m)a=this.n!==1?Math.asin(this.n*Math.sin(a)):a;else for(var o=this.n*Math.sin(a),l=Tl;l;--l){var r=(this.m*a+Math.sin(a)-o)/(this.m+Math.cos(a));if(a-=r,Math.abs(r)<x)break}t=this.a*this.C_x*s*(this.m+Math.cos(a)),i=this.a*this.C_y*a}else{var h=Math.sin(a),c=Math.cos(a);i=this.a*De(a,h,c,this.en),t=this.a*s*c/Math.sqrt(1-this.es*h*h)}return e.x=t,e.y=i,e}function Bl(e){var t,i,s,a;return e.x-=this.x0,s=e.x/this.a,e.y-=this.y0,t=e.y/this.a,this.sphere?(t/=this.C_y,s=s/(this.C_x*(this.m+Math.cos(t))),this.m?t=Et((this.m*t+Math.sin(t))/this.n):this.n!==1&&(t=Et(Math.sin(t)/this.n)),s=k(s+this.long0),t=qt(t)):(t=Bs(e.y/this.a,this.es,this.en),a=Math.abs(t),a<E?(a=Math.sin(t),i=this.long0+e.x*Math.sqrt(1-this.es*a*a)/(this.a*Math.cos(t)),s=k(i)):a-x<E&&(s=this.long0)),e.x=s,e.y=t,e}var Vl=["Sinusoidal","sinu"];const Rl={init:Ll,forward:Dl,inverse:Bl,names:Vl};function Ul(){}function Fl(e){for(var t=e.x,i=e.y,s=k(t-this.long0),a=i,o=Math.PI*Math.sin(i);;){var l=-(a+Math.sin(a)-o)/(1+Math.cos(a));if(a+=l,Math.abs(l)<x)break}a/=2,Math.PI/2-Math.abs(i)<x&&(s=0);var r=.900316316158*this.a*s*Math.cos(a)+this.x0,h=1.4142135623731*this.a*Math.sin(a)+this.y0;return e.x=r,e.y=h,e}function zl(e){var t,i;e.x-=this.x0,e.y-=this.y0,i=e.y/(1.4142135623731*this.a),Math.abs(i)>.999999999999&&(i=.999999999999),t=Math.asin(i);var s=k(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));s<-Math.PI&&(s=-Math.PI),s>Math.PI&&(s=Math.PI),i=(2*t+Math.sin(2*t))/Math.PI,Math.abs(i)>1&&(i=1);var a=Math.asin(i);return e.x=s,e.y=a,e}var jl=["Mollweide","moll"];const Gl={init:Ul,forward:Fl,inverse:zl,names:jl};function Hl(){Math.abs(this.lat1+this.lat2)<x||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=de(this.es),this.e1=ue(this.es),this.e2=Ae(this.es),this.e3=Ce(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=mt(this.e,this.sinphi,this.cosphi),this.ml1=$(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<x?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=mt(this.e,this.sinphi,this.cosphi),this.ml2=$(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=$(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))}function Zl(e){var t=e.x,i=e.y,s;if(this.sphere)s=this.a*(this.g-i);else{var a=$(this.e0,this.e1,this.e2,this.e3,i);s=this.a*(this.g-a)}var o=this.ns*k(t-this.long0),l=this.x0+s*Math.sin(o),r=this.y0+this.rh-s*Math.cos(o);return e.x=l,e.y=r,e}function Wl(e){e.x-=this.x0,e.y=this.rh-e.y+this.y0;var t,i,s,a;this.ns>=0?(i=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(i=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var o=0;if(i!==0&&(o=Math.atan2(t*e.x,t*e.y)),this.sphere)return a=k(this.long0+o/this.ns),s=qt(this.g-i/this.a),e.x=a,e.y=s,e;var l=this.g-i/this.a;return s=Ne(l,this.e0,this.e1,this.e2,this.e3),a=k(this.long0+o/this.ns),e.x=a,e.y=s,e}var ql=["Equidistant_Conic","eqdc"];const Yl={init:Hl,forward:Zl,inverse:Wl,names:ql};function Jl(){this.R=this.a}function Xl(e){var t=e.x,i=e.y,s=k(t-this.long0),a,o;Math.abs(i)<=x&&(a=this.x0+this.R*s,o=this.y0);var l=Et(2*Math.abs(i/Math.PI));(Math.abs(s)<=x||Math.abs(Math.abs(i)-E)<=x)&&(a=this.x0,i>=0?o=this.y0+Math.PI*this.R*Math.tan(.5*l):o=this.y0+Math.PI*this.R*-Math.tan(.5*l));var r=.5*Math.abs(Math.PI/s-s/Math.PI),h=r*r,c=Math.sin(l),u=Math.cos(l),g=u/(c+u-1),d=g*g,C=g*(2/c-1),f=C*C,m=Math.PI*this.R*(r*(g-f)+Math.sqrt(h*(g-f)*(g-f)-(f+h)*(d-f)))/(f+h);s<0&&(m=-m),a=this.x0+m;var v=h+g;return m=Math.PI*this.R*(C*v-r*Math.sqrt((f+h)*(h+1)-v*v))/(f+h),i>=0?o=this.y0+m:o=this.y0-m,e.x=a,e.y=o,e}function Kl(e){var t,i,s,a,o,l,r,h,c,u,g,d,C;return e.x-=this.x0,e.y-=this.y0,g=Math.PI*this.R,s=e.x/g,a=e.y/g,o=s*s+a*a,l=-Math.abs(a)*(1+o),r=l-2*a*a+s*s,h=-2*l+1+2*a*a+o*o,C=a*a/h+(2*r*r*r/h/h/h-9*l*r/h/h)/27,c=(l-r*r/3/h)/h,u=2*Math.sqrt(-c/3),g=3*C/c/u,Math.abs(g)>1&&(g>=0?g=1:g=-1),d=Math.acos(g)/3,e.y>=0?i=(-u*Math.cos(d+Math.PI/3)-r/3/h)*Math.PI:i=-(-u*Math.cos(d+Math.PI/3)-r/3/h)*Math.PI,Math.abs(s)<x?t=this.long0:t=k(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(s*s-a*a)+o*o))/2/s),e.x=t,e.y=i,e}var Ql=["Van_der_Grinten_I","VanDerGrinten","vandg"];const $l={init:Jl,forward:Xl,inverse:Kl,names:Ql};function th(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function eh(e){var t=e.x,i=e.y,s=Math.sin(e.y),a=Math.cos(e.y),o=k(t-this.long0),l,r,h,c,u,g,d,C,f,m,v,I,b,M,O,_,w,S,D,T,R,B,K;return this.sphere?Math.abs(this.sin_p12-1)<=x?(e.x=this.x0+this.a*(E-i)*Math.sin(o),e.y=this.y0-this.a*(E-i)*Math.cos(o),e):Math.abs(this.sin_p12+1)<=x?(e.x=this.x0+this.a*(E+i)*Math.sin(o),e.y=this.y0+this.a*(E+i)*Math.cos(o),e):(S=this.sin_p12*s+this.cos_p12*a*Math.cos(o),_=Math.acos(S),w=_?_/Math.sin(_):1,e.x=this.x0+this.a*w*a*Math.sin(o),e.y=this.y0+this.a*w*(this.cos_p12*s-this.sin_p12*a*Math.cos(o)),e):(l=de(this.es),r=ue(this.es),h=Ae(this.es),c=Ce(this.es),Math.abs(this.sin_p12-1)<=x?(u=this.a*$(l,r,h,c,E),g=this.a*$(l,r,h,c,i),e.x=this.x0+(u-g)*Math.sin(o),e.y=this.y0-(u-g)*Math.cos(o),e):Math.abs(this.sin_p12+1)<=x?(u=this.a*$(l,r,h,c,E),g=this.a*$(l,r,h,c,i),e.x=this.x0+(u+g)*Math.sin(o),e.y=this.y0+(u+g)*Math.cos(o),e):(d=s/a,C=Zt(this.a,this.e,this.sin_p12),f=Zt(this.a,this.e,s),m=Math.atan((1-this.es)*d+this.es*C*this.sin_p12/(f*a)),v=Math.atan2(Math.sin(o),this.cos_p12*Math.tan(m)-this.sin_p12*Math.cos(o)),v===0?D=Math.asin(this.cos_p12*Math.sin(m)-this.sin_p12*Math.cos(m)):Math.abs(Math.abs(v)-Math.PI)<=x?D=-Math.asin(this.cos_p12*Math.sin(m)-this.sin_p12*Math.cos(m)):D=Math.asin(Math.sin(o)*Math.cos(m)/Math.sin(v)),I=this.e*this.sin_p12/Math.sqrt(1-this.es),b=this.e*this.cos_p12*Math.cos(v)/Math.sqrt(1-this.es),M=I*b,O=b*b,T=D*D,R=T*D,B=R*D,K=B*D,_=C*D*(1-T*O*(1-O)/6+R/8*M*(1-2*O)+B/120*(O*(4-7*O)-3*I*I*(1-7*O))-K/48*M),e.x=this.x0+_*Math.sin(v),e.y=this.y0+_*Math.cos(v),e))}function ih(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,o,l,r,h,c,u,g,d,C,f,m,v,I,b,M,O,_,w,S,D;return this.sphere?(t=Math.sqrt(e.x*e.x+e.y*e.y),t>2*E*this.a?void 0:(i=t/this.a,s=Math.sin(i),a=Math.cos(i),o=this.long0,Math.abs(t)<=x?l=this.lat0:(l=Et(a*this.sin_p12+e.y*s*this.cos_p12/t),r=Math.abs(this.lat0)-E,Math.abs(r)<=x?this.lat0>=0?o=k(this.long0+Math.atan2(e.x,-e.y)):o=k(this.long0-Math.atan2(-e.x,e.y)):o=k(this.long0+Math.atan2(e.x*s,t*this.cos_p12*a-e.y*this.sin_p12*s))),e.x=o,e.y=l,e)):(h=de(this.es),c=ue(this.es),u=Ae(this.es),g=Ce(this.es),Math.abs(this.sin_p12-1)<=x?(d=this.a*$(h,c,u,g,E),t=Math.sqrt(e.x*e.x+e.y*e.y),C=d-t,l=Ne(C/this.a,h,c,u,g),o=k(this.long0+Math.atan2(e.x,-1*e.y)),e.x=o,e.y=l,e):Math.abs(this.sin_p12+1)<=x?(d=this.a*$(h,c,u,g,E),t=Math.sqrt(e.x*e.x+e.y*e.y),C=t-d,l=Ne(C/this.a,h,c,u,g),o=k(this.long0+Math.atan2(e.x,e.y)),e.x=o,e.y=l,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),v=Math.atan2(e.x,e.y),f=Zt(this.a,this.e,this.sin_p12),I=Math.cos(v),b=this.e*this.cos_p12*I,M=-b*b/(1-this.es),O=3*this.es*(1-M)*this.sin_p12*this.cos_p12*I/(1-this.es),_=t/f,w=_-M*(1+M)*Math.pow(_,3)/6-O*(1+3*M)*Math.pow(_,4)/24,S=1-M*w*w/2-_*w*w*w/6,m=Math.asin(this.sin_p12*Math.cos(w)+this.cos_p12*Math.sin(w)*I),o=k(this.long0+Math.asin(Math.sin(v)*Math.sin(w)/Math.cos(m))),D=Math.sin(m),l=Math.atan2((D-this.es*S*this.sin_p12)*Math.tan(m),D*(1-this.es)),e.x=o,e.y=l,e))}var sh=["Azimuthal_Equidistant","aeqd"];const ah={init:th,forward:eh,inverse:ih,names:sh};function nh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function oh(e){var t,i,s,a,o,l,r,h,c=e.x,u=e.y;return s=k(c-this.long0),t=Math.sin(u),i=Math.cos(u),a=Math.cos(s),l=this.sin_p14*t+this.cos_p14*i*a,o=1,(l>0||Math.abs(l)<=x)&&(r=this.a*o*i*Math.sin(s),h=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*i*a)),e.x=r,e.y=h,e}function rh(e){var t,i,s,a,o,l,r;return e.x-=this.x0,e.y-=this.y0,t=Math.sqrt(e.x*e.x+e.y*e.y),i=Et(t/this.a),s=Math.sin(i),a=Math.cos(i),l=this.long0,Math.abs(t)<=x?(r=this.lat0,e.x=l,e.y=r,e):(r=Et(a*this.sin_p14+e.y*s*this.cos_p14/t),o=Math.abs(this.lat0)-E,Math.abs(o)<=x?(this.lat0>=0?l=k(this.long0+Math.atan2(e.x,-e.y)):l=k(this.long0-Math.atan2(-e.x,e.y)),e.x=l,e.y=r,e):(l=k(this.long0+Math.atan2(e.x*s,t*this.cos_p14*a-e.y*this.sin_p14*s)),e.x=l,e.y=r,e))}var lh=["ortho"];const hh={init:nh,forward:oh,inverse:rh,names:lh};var H={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},z={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function ch(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=E-F/2?this.face=H.TOP:this.lat0<=-(E-F/2)?this.face=H.BOTTOM:Math.abs(this.long0)<=F?this.face=H.FRONT:Math.abs(this.long0)<=E+F?this.face=this.long0>0?H.RIGHT:H.LEFT:this.face=H.BACK,this.es!==0&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)}function gh(e){var t={x:0,y:0},i,s,a,o,l,r,h={value:0};if(e.x-=this.long0,this.es!==0?i=Math.atan(this.one_minus_f_squared*Math.tan(e.y)):i=e.y,s=e.x,this.face===H.TOP)o=E-i,s>=F&&s<=E+F?(h.value=z.AREA_0,a=s-E):s>E+F||s<=-(E+F)?(h.value=z.AREA_1,a=s>0?s-Z:s+Z):s>-(E+F)&&s<=-F?(h.value=z.AREA_2,a=s+E):(h.value=z.AREA_3,a=s);else if(this.face===H.BOTTOM)o=E+i,s>=F&&s<=E+F?(h.value=z.AREA_0,a=-s+E):s<F&&s>=-F?(h.value=z.AREA_1,a=-s):s<-F&&s>=-(E+F)?(h.value=z.AREA_2,a=-s-E):(h.value=z.AREA_3,a=s>0?-s+Z:-s-Z);else{var c,u,g,d,C,f,m;this.face===H.RIGHT?s=Gt(s,+E):this.face===H.BACK?s=Gt(s,+Z):this.face===H.LEFT&&(s=Gt(s,-E)),d=Math.sin(i),C=Math.cos(i),f=Math.sin(s),m=Math.cos(s),c=C*m,u=C*f,g=d,this.face===H.FRONT?(o=Math.acos(c),a=fe(o,g,u,h)):this.face===H.RIGHT?(o=Math.acos(u),a=fe(o,g,-c,h)):this.face===H.BACK?(o=Math.acos(-c),a=fe(o,g,-u,h)):this.face===H.LEFT?(o=Math.acos(-u),a=fe(o,g,c,h)):(o=a=0,h.value=z.AREA_0)}return r=Math.atan(12/Z*(a+Math.acos(Math.sin(a)*Math.cos(F))-E)),l=Math.sqrt((1-Math.cos(o))/(Math.cos(r)*Math.cos(r))/(1-Math.cos(Math.atan(1/Math.cos(a))))),h.value===z.AREA_1?r+=E:h.value===z.AREA_2?r+=Z:h.value===z.AREA_3&&(r+=1.5*Z),t.x=l*Math.cos(r),t.y=l*Math.sin(r),t.x=t.x*this.a+this.x0,t.y=t.y*this.a+this.y0,e.x=t.x,e.y=t.y,e}function dh(e){var t={lam:0,phi:0},i,s,a,o,l,r,h,c,u,g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,s=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),i=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=z.AREA_0:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=z.AREA_1,i-=E):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=z.AREA_2,i=i<0?i+Z:i-Z):(g.value=z.AREA_3,i+=E),u=Z/12*Math.tan(i),l=Math.sin(u)/(Math.cos(u)-1/Math.sqrt(2)),r=Math.atan(l),a=Math.cos(i),o=Math.tan(s),h=1-a*a*o*o*(1-Math.cos(Math.atan(1/Math.cos(r)))),h<-1?h=-1:h>1&&(h=1),this.face===H.TOP)c=Math.acos(h),t.phi=E-c,g.value===z.AREA_0?t.lam=r+E:g.value===z.AREA_1?t.lam=r<0?r+Z:r-Z:g.value===z.AREA_2?t.lam=r-E:t.lam=r;else if(this.face===H.BOTTOM)c=Math.acos(h),t.phi=c-E,g.value===z.AREA_0?t.lam=-r+E:g.value===z.AREA_1?t.lam=-r:g.value===z.AREA_2?t.lam=-r-E:t.lam=r<0?-r-Z:-r+Z;else{var d,C,f;d=h,u=d*d,u>=1?f=0:f=Math.sqrt(1-u)*Math.sin(r),u+=f*f,u>=1?C=0:C=Math.sqrt(1-u),g.value===z.AREA_1?(u=C,C=-f,f=u):g.value===z.AREA_2?(C=-C,f=-f):g.value===z.AREA_3&&(u=C,C=f,f=-u),this.face===H.RIGHT?(u=d,d=-C,C=u):this.face===H.BACK?(d=-d,C=-C):this.face===H.LEFT&&(u=d,d=C,C=-u),t.phi=Math.acos(-f)-E,t.lam=Math.atan2(C,d),this.face===H.RIGHT?t.lam=Gt(t.lam,-E):this.face===H.BACK?t.lam=Gt(t.lam,-Z):this.face===H.LEFT&&(t.lam=Gt(t.lam,+E))}if(this.es!==0){var m,v,I;m=t.phi<0?1:0,v=Math.tan(t.phi),I=this.b/Math.sqrt(v*v+this.one_minus_f_squared),t.phi=Math.atan(Math.sqrt(this.a*this.a-I*I)/(this.one_minus_f*I)),m&&(t.phi=-t.phi)}return t.lam+=this.long0,e.x=t.lam,e.y=t.phi,e}function fe(e,t,i,s){var a;return e<x?(s.value=z.AREA_0,a=0):(a=Math.atan2(t,i),Math.abs(a)<=F?s.value=z.AREA_0:a>F&&a<=E+F?(s.value=z.AREA_1,a-=E):a>E+F||a<=-(E+F)?(s.value=z.AREA_2,a=a>=0?a-Z:a+Z):(s.value=z.AREA_3,a+=E)),a}function Gt(e,t){var i=e+t;return i<-Z?i+=re:i>+Z&&(i-=re),i}var uh=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const Ah={init:ch,forward:gh,inverse:dh,names:uh};var hi=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-986701e-12],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,18736e-12],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,934959e-12],[.7986,-.00755338,-500009e-10,935324e-12],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],ne=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-126793e-14,422642e-15],[.124,.0124,507171e-14,-160604e-14],[.186,.0123999,-190189e-13,600152e-14],[.248,.0124002,710039e-13,-224e-10],[.31,.0123992,-264997e-12,835986e-13],[.372,.0124029,988983e-12,-311994e-12],[.434,.0123893,-369093e-11,-435621e-12],[.4958,.0123198,-102252e-10,-345523e-12],[.5571,.0121916,-154081e-10,-582288e-12],[.6176,.0119938,-241424e-10,-525327e-12],[.6769,.011713,-320223e-10,-516405e-12],[.7346,.0113541,-397684e-10,-609052e-12],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-140374e-14],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Us=.8487,Fs=1.3523,zs=At/5,Ch=1/zs,zt=18,Pe=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))},mh=function(e,t){return e[1]+t*(2*e[2]+t*3*e[3])};function fh(e,t,i,s){for(var a=t;s;--s){var o=e(a);if(a-=o,Math.abs(o)<i)break}return a}function Ih(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function ph(e){var t=k(e.x-this.long0),i=Math.abs(e.y),s=Math.floor(i*zs);s<0?s=0:s>=zt&&(s=zt-1),i=At*(i-Ch*s);var a={x:Pe(hi[s],i)*t,y:Pe(ne[s],i)};return e.y<0&&(a.y=-a.y),a.x=a.x*this.a*Us+this.x0,a.y=a.y*this.a*Fs+this.y0,a}function vh(e){var t={x:(e.x-this.x0)/(this.a*Us),y:Math.abs(e.y-this.y0)/(this.a*Fs)};if(t.y>=1)t.x/=hi[zt][0],t.y=e.y<0?-E:E;else{var i=Math.floor(t.y*zt);for(i<0?i=0:i>=zt&&(i=zt-1);;)if(ne[i][0]>t.y)--i;else if(ne[i+1][0]<=t.y)++i;else break;var s=ne[i],a=5*(t.y-s[0])/(ne[i+1][0]-s[0]);a=fh(function(o){return(Pe(s,o)-t.y)/mh(s,o)},a,x,100),t.x/=Pe(hi[i],a),t.y=(5*i+a)*q,e.y<0&&(t.y=-t.y)}return t.x=k(t.x+this.long0),t}var yh=["Robinson","robin"];const bh={init:Ih,forward:ph,inverse:vh,names:yh};function Mh(){this.name="geocent"}function Eh(e){var t=Os(e,this.es,this.a);return t}function wh(e){var t=xs(e,this.es,this.a,this.b);return t}var Oh=["Geocentric","geocentric","geocent","Geocent"];const xh={init:Mh,forward:Eh,inverse:wh,names:Oh};var J={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},Xt={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};function _h(){if(Object.keys(Xt).forEach((function(i){if(typeof this[i]>"u")this[i]=Xt[i].def;else{if(Xt[i].num&&isNaN(this[i]))throw new Error("Invalid parameter value, must be numeric "+i+" = "+this[i]);Xt[i].num&&(this[i]=parseFloat(this[i]))}Xt[i].degrees&&(this[i]=this[i]*q)}).bind(this)),Math.abs(Math.abs(this.lat0)-E)<x?this.mode=this.lat0<0?J.S_POLE:J.N_POLE:Math.abs(this.lat0)<x?this.mode=J.EQUIT:(this.mode=J.OBLIQ,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var e=this.tilt,t=this.azi;this.cg=Math.cos(t),this.sg=Math.sin(t),this.cw=Math.cos(e),this.sw=Math.sin(e)}function kh(e){e.x-=this.long0;var t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a,o;switch(this.mode){case J.OBLIQ:o=this.sinph0*t+this.cosph0*i*s;break;case J.EQUIT:o=i*s;break;case J.S_POLE:o=-t;break;case J.N_POLE:o=t;break}switch(o=this.pn1/(this.p-o),a=o*i*Math.sin(e.x),this.mode){case J.OBLIQ:o*=this.cosph0*t-this.sinph0*i*s;break;case J.EQUIT:o*=t;break;case J.N_POLE:o*=-(i*s);break;case J.S_POLE:o*=i*s;break}var l,r;return l=o*this.cg+a*this.sg,r=1/(l*this.sw*this.h1+this.cw),a=(a*this.cg-o*this.sg)*this.cw*r,o=l*r,e.x=a*this.a,e.y=o*this.a,e}function Sh(e){e.x/=this.a,e.y/=this.a;var t={x:e.x,y:e.y},i,s,a;a=1/(this.pn1-e.y*this.sw),i=this.pn1*e.x*a,s=this.pn1*e.y*this.cw*a,e.x=i*this.cg+s*this.sg,e.y=s*this.cg-i*this.sg;var o=ct(e.x,e.y);if(Math.abs(o)<x)t.x=0,t.y=e.y;else{var l,r;switch(r=1-o*o*this.pfact,r=(this.p-Math.sqrt(r))/(this.pn1/o+o/this.pn1),l=Math.sqrt(1-r*r),this.mode){case J.OBLIQ:t.y=Math.asin(l*this.sinph0+e.y*r*this.cosph0/o),e.y=(l-this.sinph0*Math.sin(t.y))*o,e.x*=r*this.cosph0;break;case J.EQUIT:t.y=Math.asin(e.y*r/o),e.y=l*o,e.x*=r;break;case J.N_POLE:t.y=Math.asin(l),e.y=-e.y;break;case J.S_POLE:t.y=-Math.asin(l);break}t.x=Math.atan2(e.x,e.y)}return e.x=t.x+this.long0,e.y=t.y,e}var Nh=["Tilted_Perspective","tpers"];const Ph={init:_h,forward:kh,inverse:Sh,names:Nh};function Th(){if(this.flip_axis=this.sweep==="x"?1:0,this.h=Number(this.h),this.radius_g_1=this.h/this.a,this.radius_g_1<=0||this.radius_g_1>1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,this.es!==0){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")}function Lh(e){var t=e.x,i=e.y,s,a,o,l;if(t=t-this.long0,this.shape==="ellipse"){i=Math.atan(this.radius_p2*Math.tan(i));var r=this.radius_p/ct(this.radius_p*Math.cos(i),Math.sin(i));if(a=r*Math.cos(t)*Math.cos(i),o=r*Math.sin(t)*Math.cos(i),l=r*Math.sin(i),(this.radius_g-a)*a-o*o-l*l*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(o/ct(l,s)),e.y=this.radius_g_1*Math.atan(l/s)):(e.x=this.radius_g_1*Math.atan(o/s),e.y=this.radius_g_1*Math.atan(l/ct(o,s)))}else this.shape==="sphere"&&(s=Math.cos(i),a=Math.cos(t)*s,o=Math.sin(t)*s,l=Math.sin(i),s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(o/ct(l,s)),e.y=this.radius_g_1*Math.atan(l/s)):(e.x=this.radius_g_1*Math.atan(o/s),e.y=this.radius_g_1*Math.atan(l/ct(o,s))));return e.x=e.x*this.a,e.y=e.y*this.a,e}function Dh(e){var t=-1,i=0,s=0,a,o,l,r;if(e.x=e.x/this.a,e.y=e.y/this.a,this.shape==="ellipse"){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*ct(1,s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*ct(1,i));var h=s/this.radius_p;if(a=i*i+h*h+t*t,o=2*this.radius_g*t,l=o*o-4*a*this.C,l<0)return e.x=Number.NaN,e.y=Number.NaN,e;r=(-o-Math.sqrt(l))/(2*a),t=this.radius_g+r*t,i*=r,s*=r,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if(this.shape==="sphere"){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+i*i)),a=i*i+s*s+t*t,o=2*this.radius_g*t,l=o*o-4*a*this.C,l<0)return e.x=Number.NaN,e.y=Number.NaN,e;r=(-o-Math.sqrt(l))/(2*a),t=this.radius_g+r*t,i*=r,s*=r,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t)}return e.x=e.x+this.long0,e}var Bh=["Geostationary Satellite View","Geostationary_Satellite","geos"];const Vh={init:Th,forward:Lh,inverse:Dh,names:Bh};function Rh(e){e.Proj.projections.add(Ee),e.Proj.projections.add(we),e.Proj.projections.add(Zo),e.Proj.projections.add(tr),e.Proj.projections.add(or),e.Proj.projections.add(gr),e.Proj.projections.add(fr),e.Proj.projections.add(br),e.Proj.projections.add(xr),e.Proj.projections.add(Pr),e.Proj.projections.add(Jr),e.Proj.projections.add(el),e.Proj.projections.add(ol),e.Proj.projections.add(dl),e.Proj.projections.add(fl),e.Proj.projections.add(bl),e.Proj.projections.add(xl),e.Proj.projections.add(Pl),e.Proj.projections.add(Rl),e.Proj.projections.add(Gl),e.Proj.projections.add(Yl),e.Proj.projections.add($l),e.Proj.projections.add(ah),e.Proj.projections.add(hh),e.Proj.projections.add(Ah),e.Proj.projections.add(bh),e.Proj.projections.add(xh),e.Proj.projections.add(Ph),e.Proj.projections.add(Vh)}at.defaultDatum="WGS84";at.Proj=Ct;at.WGS84=new at.Proj("WGS84");at.Point=Ht;at.toPoint=_s;at.defs=Q;at.nadgrid=Wn;at.transform=Se;at.mgrs=lo;at.version="__VERSION__";Rh(at);async function Uh(e){let t=null;const i=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const s of i){const a=e.match(s);if(a!==null){t=a[1];break}}if(t!=null){const s=`EPSG:${t}`;if(at.defs(s)===void 0){const a=await A.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);cs.registerCRS(s,a)}return s}throw new Error(`Could not find projection for ${e}`)}const pi={loadProjCrsIfNeeded:Uh};async function Fh(e,t,i,s,a){const o=new A.Clock;o.start();const l=[],r=new Map;for(const h of e){const c=h.getGeometry(),u=c==null?void 0:c.getType();if(c==null||u==null)continue;const g=[],d=c.getFlatCoordinates(),C=c.getStride();if(!(C>=3&&d[2]!=null&&d[2]!==a)){for(let f=0;f<d.length;f+=C){const m=new ce(t,d[f+0],d[f+1],C>=3?d[f+2]:a);g.push(m),l.push(m)}r.set(h.ol_uid,g)}}console.debug(`Fetching altitudes for ${l.length} coordinates from ${e.length} features...`),await i(l);for(const h of e){const c=r.get(h.ol_uid),u=h.getGeometry();if(!(u==null||c==null))switch(u.getType()){case"LineString":case"MultiPoint":{const g=u,d=g.getCoordinates();for(let C=0;C<d.length;C+=1)d[C][2]=c[C].values[2]+s;g.setCoordinates(d);break}case"MultiLineString":case"Polygon":{const g=u,d=g.getCoordinates();let C=0;for(let f=0;f<d.length;f+=1)for(let m=0;m<d[f].length;m+=1)d[f][m][2]=c[C].values[2]+s,C+=1;g.setCoordinates(d);break}case"MultiPolygon":{const g=u,d=g.getCoordinates();let C=0;for(let f=0;f<d.length;f+=1)for(let m=0;m<d[f].length;m+=1)for(let v=0;v<d[f][m].length;v+=1)d[f][m][v][2]=c[C].values[2]+s,C+=1;g.setCoordinates(d);break}case"Point":{const g=u,d=g.getCoordinates();d[2]=c[0].values[2]+s,g.setCoordinates(d);break}}}console.debug(`Fetched all missing altitudes in ${o.getElapsedTime()}s`),o.stop()}function zh(e,t,i){for(const s of e){const a=s.getGeometry();if(a==null)continue;const o=a.getStride(),l=a.getFlatCoordinates();if(!(o>=3&&l[2]!=null&&l[2]!==i))switch(a.getType()){case"LineString":case"MultiPoint":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)h[c][2]=t;r.setCoordinates(h);break}case"MultiLineString":case"Polygon":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)for(let u=0;u<h[c].length;u+=1)h[c][u][2]=t;r.setCoordinates(h);break}case"MultiPolygon":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)for(let u=0;u<h[c].length;u+=1)for(let g=0;g<h[c][u].length;g+=1)h[c][u][g][2]=t;r.setCoordinates(h);break}case"Point":{const r=a,h=r.getCoordinates();h[2]=t,r.setCoordinates(h);break}}}}async function jh(e,t,i,s){const a=await pi.loadProjCrsIfNeeded(i??"EPSG:4326");return t.readFeatures(e,{dataProjection:a,featureProjection:s})}function Gh(e,t,i,s){return js(t.readFeatures(e,{dataProjection:i,featureProjection:s}))}function Hh(e,t){const i=new A.Group,s=new Oa,a=e.map(o=>{const l=o.getGeometry();if(l!=null){const r=l.getType();let h;switch(r){case"LineString":h=s.build(l);break;case"MultiLineString":h=s.build(l);break;case"MultiPoint":h=s.build(l);break;case"MultiPolygon":h=s.build(l,t);break;case"Point":h=s.build(l);break;case"Polygon":h=s.build(l,t);break;default:console.warn(`Unsupported type ${r}`),h=null}if(h)for(const[c,u]of Object.entries(o.getProperties()))c!=="geometry"&&(h.userData[c]=u);return h}});for(const o of a)o!=null&&i.add(o);return i}function js(e){return e.filter(t=>{var s;if("getType"in t)return!1;const i=(s=t.getGeometry())==null?void 0:s.getType();return!(i==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(i))})}const Wt={fetchZCoordinates:Fh,fillZCoordinates:zh,readFeatures:jh,readSimpleFeatures:Gh,toMeshes:Hh,toSimpleFeatures:js},Zh=new Ma,Wh=new Ea,qh=new wa,rt={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class Yh{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchJson(this.options.url),s=Qh(i);return await yi(t,s,this.options)}}class vi{constructor(t,i){y(this,"elevation");y(this,"format");y(this,"noDataValue");y(this,"options");this.format=t,this.options=i,this.elevation=i.elevation,this.noDataValue=i.noDataValue}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchText(this.options.url);return await $h(t,i,this.format,this.options)}}class Jh extends vi{constructor(t){super(Wh,t)}}class Xh extends vi{constructor(t){super(qh,t)}}async function yi(e,t,i){const s=await pi.loadProjCrsIfNeeded(i.dataProjection??rt.dataProjection),a=t.flatMap(r=>Zh.readFeatures(r,{dataProjection:s,featureProjection:i.featureProjection})),o=Wt.toSimpleFeatures(a);if(i.fetchElevation??rt.fetchElevation){const r=i.fetchElevationFast??rt.fetchElevationFast,h=i.fetchElevationOffset??rt.fetchElevationOffset,c=i.noDataValue??rt.noDataValue;await Wt.fetchZCoordinates(o,i.featureProjection,Cs(e,r,c),h,c)}return o}function Kh(e,t,i=rt.elevation,s=rt.noDataValue){const a=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??i;return Wt.fillZCoordinates(e,a,s),Wt.toMeshes(e,t)}function Qh(e){switch(e.type){case"Feature":return[e];case"FeatureCollection":return e.features;case"GeometryCollection":return e.geometries.map(i=>({geometry:i,properties:{},type:"Feature"}));default:return[{geometry:e,properties:{},type:"Feature"}]}}async function $h(e,t,i,s){const a=Wt.readSimpleFeatures(t,i,s.dataProjection??rt.dataProjection,s.featureProjection);if(s.fetchElevation??rt.fetchElevation){const l=s.fetchElevationFast??rt.fetchElevationFast,r=s.fetchElevationOffset??rt.fetchElevationOffset,h=s.noDataValue??rt.noDataValue;await Wt.fetchZCoordinates(a,s.featureProjection,Cs(e,l,h),r,h)}return a}class tc extends ui{constructor(i){super(new A.Group);y(this,"sources");this.sources=Array.isArray(i)?i:[i]}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=Kh(s,{elevation:i.elevation,fill:{color:Ei.DEFAULT_SURFACE_COLOR},stroke:{color:Ei.DEFAULT_LINE_COLOR}},i.elevation,i.noDataValue);this.object3d.add(a),this.onObjectCreated(a);const o=i.context();A.fillObject3DUserData(a,{filename:o.filename})}this.notifyChange(this.object3d)}}async function ec(e,t){const i=await di.load(e,ba.GeoPackageLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0}}),s=[];for(const[a,o]of Object.entries(i.tables))for(const l of o.table.features)l.properties||(l.properties={}),l.properties.table=a,s.push(l);return s}class ic{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await ec(this.options.url,this.options.featureProjection);return await yi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}async function sc(e,t){return(await di.load(e,xa.ShapefileLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class ac{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await sc(this.options.url,this.options.featureProjection);return await yi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}class Gs extends A.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new A.Vector2(.5,.5),this.addEventListener("removed",function(){this.traverse(function(i){i.element instanceof i.element.ownerDocument.defaultView.Element&&i.element.parentNode!==null&&i.element.remove()})})}copy(t,i){return super.copy(t,i),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new A.Vector3;new A.Matrix4;new A.Matrix4;new A.Vector3;new A.Vector3;const nc=new A.Vector2,Hs=new A.Color(A.DEFAULT_SHAPE_COLOR),oc=new A.Color,We=oc.copyLinearToSRGB(Hs),Ji=`#${new A.Color(_a.getContrastColor(Hs)).getHexString()}`,qe=12,rc="bold",Ye=[];class lc extends ui{constructor(i,s){super(new A.Group);y(this,"sources");y(this,"_labels");y(this,"_styleCallback");y(this,"_textCallback");this.sources=Array.isArray(i)?i:[i],this._labels=[],this._textCallback=(s==null?void 0:s.text)||(()=>"P"),this._styleCallback=s==null?void 0:s.style}getBoundingBox(){const i=this._labels.map(a=>a.position);return new A.Box3().setFromPoints(i)}pick(i,s){const a=this.instance.canvasToNormalizedCoords(i,nc),o=new A.Raycaster;o.setFromCamera(a,this.instance.view.camera);const l=this.pickLabels(o);return l?[{distance:l.position.distanceTo(o.ray.origin),entity:this,isLabelPickResult:!0,object:l,point:l.position}]:[]}updateOpacity(){const i=`${this.opacity*100}%`;this._labels.forEach(s=>s.element.style.opacity=i)}updateVisibility(){this.object3d.traverse(i=>{i.visible=this.visible})}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=new A.Group,o=i.elevation??0,l=h=>new A.Vector3(h[0],h[1],h[2]??o);for(const h of s){const c=h.getGeometry();if(c!=null){const u=c.getType(),g=[];switch(u){case"LineString":case"MultiPoint":g.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":g.push(...c.getCoordinates()[0]);break;case"MultiPolygon":g.push(...c.getCoordinates()[0][0]);break;case"Point":g.push(c.getCoordinates());break}if(g.length>0){const d=g.map(f=>this.createLabel(l(f),h)),C=new A.Group;d.forEach(f=>{C.add(f),this._labels.push(f)});for(const[f,m]of Object.entries(h.getProperties()))f!=="geometry"&&(C.userData[f]=m);a.add(C)}}}this.object3d.add(a),this.onObjectCreated(a);const r=i.context();A.fillObject3DUserData(a,{filename:r.filename})}this.notifyChange(this.object3d)}createLabel(i,s){const a=document.createElement("div"),o=document.createElement("span");this.updateStyle(o,s),o.innerText=this._textCallback(s,i);const l=document.createElement("div");a.appendChild(l),l.appendChild(o);const r=new Gs(a);return r.position.copy(i),r.updateMatrix(),r.updateMatrixWorld(!0),a.addEventListener("mouseover",()=>r.userData.hover=!0),a.addEventListener("mouseleave",()=>r.userData.hover=!1),r}pickLabels(i){let s=null;return this._labels.forEach(a=>{s==null&&(Ye.length=0,this.raycastLabel(a,i,Ye),Ye.length>0&&(s=a))}),s}raycastLabel(i,s,a){i.userData.hover===!0&&a.push({distance:i.position.distanceTo(s.ray.origin),object:i,point:i.position})}updateStyle(i,s){i.style.backgroundColor=`rgb(${We.r*255} ${We.g*255} ${We.b*255})`,i.style.borderWidth="1px",i.style.borderStyle="solid",i.style.borderColor=Ji,i.style.borderRadius=`${A.MathUtils.clamp(qe-4,5,10)}px`,i.style.color=Ji;const a=A.MathUtils.clamp(Math.round(qe/4),2,10);i.style.padding=`${a}px ${a}px ${a}px ${a}px`,i.style.fontSize=`${qe}px`,i.style.fontWeight=rc,i.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(i,s)}}class hc extends ft{constructor(i){super({color:A.DEFAULT_SHAPE_COLOR,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:A.SHAPE_POINT_RADIUS});y(this,"source");this.source=i}async preprocess(){const s=(await this.source.load(this.instance)).at(0),a=s==null?void 0:s.getGeometry();if(s!=null&&a!=null){const o=this.source.elevation??0,l=c=>new A.Vector3(c[0],c[1],c[2]??o);switch(a.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(l));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates()[0].map(l));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(l));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0][0].map(l));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([l(a.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0].map(l));break;default:throw new Error("could not import shape from given geometry: "+a.getType())}const h=this.source.context();A.fillObject3DUserData(this,{filename:h.filename});for(const[c,u]of Object.entries(s.getProperties()))c!=="geometry"&&(this.userData[c]=u)}this.notifyChange(this.object3d)}}const cc=e=>{const{dataset:t,instance:i}=e,s=t.config,a=Array.isArray(s.source)?s.source:[s.source],o=[],l=s.rendering??"mesh";let r;for(const h of a){const c={dataProjection:h.dataProjection??t.get("dataProjection"),elevation:h.elevation??t.get("elevation"),featureProjection:i.referenceCrs,fetchElevation:h.fetchElevation??t.get("fetchElevation"),fetchElevationFast:h.fetchElevationFast??t.get("fetchElevationFast"),fetchElevationOffset:h.fetchElevationOffset??t.get("fetchElevationOffset"),noDataValue:h.noDataValue??t.get("noDataValue"),url:h.url};switch(h.type){case"geojson":o.push(new Yh({...c}));break;case"geopackage":o.push(new ic({...c}));break;case"gpx":o.push(new Jh({...c}));break;case"kml":o.push(new Xh({...c}));break;case"ol":o.push(new vi(h.format,{...c}));break;case"shapefile":o.push(new ac({...c}));break;default:return h}}switch(l){case"label":r=new lc(o,s);break;case"mesh":r=new tc(o);break;case"shape":r=new hc(o[0]);break;default:return l}return Promise.resolve(r)},ci={featureCollection:ja,flatPointcloud:Za,pointcloud:Ya,tiledIfc:Wa,vector:cc};async function gc(e,t){const i={dataset:t,instance:e},s=ci[t.type];if(s==null)throw new Error(`no entity builder found for dataset type '${t.type}'`);const a=await s(i);return"dataset"in a.object3d.userData||(a.object3d.userData.dataset={}),a.object3d.userData.dataset.name=t.name,a}function dc(e,t){ci[e]!=null&&console.warn(`replacing entity builder for dataset type '${e}'`),ci[e]=t}const uc={getEntity:gc},Je=e=>({name:e.filename,source:{type:"csv",url:e.file},type:"flatPointcloud",visible:!0}),Xi=e=>({name:e.filename,source:{type:e.filename.endsWith(".copc.laz")?"copc":"las",url:e.file},type:"flatPointcloud",visible:!0}),Ac=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,source:{style:"default",type:t,url:e.file},type:"colorLayer",visible:!0}},Cc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpkg":t="geopackage";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,rendering:e.configuration.importedVectorDatasetRendering,source:{fetchElevation:e.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:e.configuration.importedMeshDatasetFetchElevationFast??!1,type:t,url:e.file},type:"vector",visible:!0}},Kt=e=>e.configuration.importedVectorDatasetRendering==="overlay"?Ac(e):Cc(e),Te={csv:Je,dsv:Je,"geo.json":Kt,geojson:Kt,gpkg:Kt,gpx:Kt,kml:Kt,las:Xi,laz:Xi,tsv:Je};function mc(e,t){if(typeof e=="string"){const s=A.getPublicFolderUrl(e),a=new URL(s),r=`${a.origin}${a.pathname}`.split("/").pop();if(r==null)throw new Error("Could not determine filename");const h=r.split(".").at(-1);if(h==null)throw new Error(`File has no extension: ${r}`);return{configuration:t,extension:h,file:e,filename:r}}if(e.name==null)throw new Error("Could not determine filename");const i=e.name.split(".").at(-1);if(i==null)throw new Error(`File has no extension: ${e.name}`);return{configuration:t,extension:i,file:e,filename:e.name}}async function fc(e,t){const i=mc(e,t),s=Ic(i.filename);if(s==null)throw new Error(`File format ${i.extension} not supported`);const a=s(i);return Promise.resolve(new A.Dataset(a))}function Ic(e){const t=Object.keys(Te);for(const i of t)if(e.endsWith(i))return Te[i];return null}function pc(e,t){Te[e]!=null&&console.warn(`replacing loader for file extension '.${e}'`),Te[e]=t}const vc={importFile:fc},Zs=[];class yc{constructor(){y(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){ft.isShapePickResult(t)&&this.highlightShape(t);for(const i of Zs){const s=i(t);s&&(this._clearHighlight=s)}}}highlightShape(t){const i=t.entity;if(i.userData.highlightable){const s=new A.Color(i.color);i.color=i.userData.highlightColor,i.instance.notifyChange(),this._clearHighlight=()=>{i.color=s,i.instance.notifyChange()}}}}class bc{constructor(t){this.store=t}registerDatasetAction(t){this.store.registerCustomAction(t)}registerDatasetType(t,i){if(i.icon!=null&&(ds[t]=i.icon),i.name!=null&&(us[t]=i.name),i.highlight&&Zs.push(i.highlight),dc(t,i.entityBuilder),i.fileExtensions)if(i.loader==null)console.warn(`File extensions have been specified for dataset ${t}, but no loader function has been provided.`);else for(const s of i.fileExtensions)pc(s,i.loader);i.propertyView&&be.set(t,i.propertyView),i.attributeExtractor&&A.customAttributeExtractors.push(i.attributeExtractor)}}class Mc{constructor(t){this.store=t}pushNotification(t){this.store.push(t)}}class Ec{constructor(t){this.searchStore=t}registerProvider(t){this.searchStore.registerProvider(t)}}function wc(e){return e.coordinates instanceof ce}class Oc{constructor(t){this.store=t}addWidget(t){this.store.addWidget(t)}}const bt=new A.EventDispatcher,bi=wt.defineStore("annotations",()=>{const e=n.reactive([]),t=n.ref("normal"),i=n.computed(()=>e.length),s=n.ref(!1),a=n.ref(!0);function o(){return s.value}function l(){return a.value}function r(w){a.value=w}function h(w){s.value=w}function c(){return t.value}function u(w){t.value=w}function g(){return e}function d(w){e.splice(e.indexOf(w),1)}function C(){}function f(){}function m(){}function v(w){e.push(w)}function I(w){return e.some(S=>S.title===w)}function b(w){}function M(){}function O(w){}function _(w){}return{add:v,count:i,createLine:f,createPoint:C,createPolygon:m,edit:b,getAnnotationMode:c,getAnnotations:g,hasAnnotation:I,importAnnotationFile:O,importAnnotationsFiles:_,isUserDrawing:o,remove:d,setAnnotationMode:u,setIsUserDrawing:h,setShowLabels:r,showLabels:l,stopEdition:M}}),Pt=wt.defineStore("notifications",()=>{function e(t){}return{push:e}});class Ws extends A.EventDispatcher{constructor(i,s,a={}){super();y(this,"properties");y(this,"title");y(this,"uuid");y(this,"_isEditing");y(this,"_object");y(this,"_visible");this.title=i,this._visible=!0,this._isEditing=!1,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(i){this._isEditing=i,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const i=this.object.toGeoJSON({includeAltitudes:!0});return i.id=`${A.Download.getBaseUrl()}#${this.uuid}`,i.properties={...i.properties,title:this.title,updated:new Date().toISOString()},i}}class X{constructor(t,i,s="info"){y(this,"level");y(this,"text");y(this,"title");this.title=t,this.text=i,this.level=s}static empty(){return new X("","","info")}}function xc(e){let t=1/0,i=-1/0,s;Array.isArray(e)?s=e:s=e.points;for(let a=0;a<s.length;a+=1)t=Math.min(t,s[a].z),i=Math.max(i,s[a].z);return[t,i]}const _c={getMinMaxAltitudes:xc};function kc(e){return window.prompt("Annotation name",e)}const qs=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),Ki=e=>{let t=e.area,i="m²";return t>1e6&&(t=t/1e6,i="km²"),`${qs.format(t)} ${i}`},Sc=new A.Vector3,Nc=new A.Vector3,Qi=e=>t=>{const{camera:i}=e,{end:s,start:a}=t,o=Sc.copy(a).project(i),l=Nc.copy(s).project(i),r=Math.pow(100/e.width,2);if(o.distanceToSquared(l)<r)return null;let c=t.length;if(c==null||c<=0)return null;let u="m";return c>1e3&&(c=c/1e3,u="km"),`${qs.format(c)} ${u}`},Xe=e=>{const t=e.shape;return t.userData.annotation?t.userData.annotation.title:null};class Pc{constructor(t,i,s){y(this,"_boundExitEdition");y(this,"_boundOnEndDrag");y(this,"_boundOnKeyDown");y(this,"_boundOnStartDrag");y(this,"_boundUpdateLabels");y(this,"_drawTool");y(this,"_editedShape",null);y(this,"_editedShapePreviousPoints",null);y(this,"_instance");y(this,"_isEditing",!1);y(this,"_notificationStore",Pt());y(this,"_picker");y(this,"_shapes",new Map);y(this,"_store",bi());this._instance=t,this._picker=s,this._drawTool=new Ot({instance:t}),this._boundOnEndDrag=()=>{i.enabled=!0},this._boundOnStartDrag=()=>{i.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:a,args:o,name:l})=>{a(()=>{switch(l){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(o[0]);break;case"importAnnotationFile":this.importAnnotationFile(o[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(o[0]);break;case"remove":this.deleteAnnotation(o[0]);break;case"setShowLabels":this.udpateLabelVisibility(o[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(t=>this._instance.remove(t)),this._drawTool.dispose()}pushNewAnnotation(t,i,s={}){const a=new Ws(t,()=>i,s);return i.userData.annotation=a,a.addEventListener("visible",()=>this.updateDrawing(a)),this._store.add(a),this._shapes.set(a.uuid,i),a}addShape(t,i,s){if(t&&!this._shapes.has(t.id)){const a=t.userData;a.type=i,a.highlightable=!0;let o=s;if(this._store.hasAnnotation(o)){for(let r=1;r<1e3&&(o=`${s} (${r})`,!!this._store.hasAnnotation(o));r+=1);this._store.hasAnnotation(o)&&(o="Achievement unlocked: 1000 annotations with default name")}const l=kc(o);if(l!=null){this.computeMeasurements(t);const r=this.pushNewAnnotation(l,t);this._shapes.set(r.uuid,t)}else this._instance.remove(t)}}computeMeasurements(t){t.userData.measurements={minmax:_c.getMinMaxAltitudes(t)},(t.userData.type==="Polygon"||t.userData.type==="LineString")&&(t.userData.measurements.perimeter=t.getLength()),t.userData.type==="Polygon"&&(t.userData.measurements.area=t.getArea())}deleteAnnotation(t){if(this._shapes.has(t.uuid)){const i=t.object;this._instance.remove(i),this._shapes.delete(t.uuid)}}draw(t,i,s,a){this._store.setIsUserDrawing(!0),this._drawTool[t]({...this.getCreationOptions(),...a}).then(o=>{this.addShape(o,i,s)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:Qi(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:Xe,vertexRadius:A.SHAPE_POINT_RADIUS})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:Ki})}editAnnotation(t){const i=this._shapes.get(t.uuid);if(!i){console.warn(`no shape found for annotation ${t.uuid}`);return}this._editedShape=i,this._editedShapePreviousPoints=[...i.points],t.isEditing=!0,i.color=A.EDIT_SHAPE_COLOR,i.userData.highlightable=!1,this._instance.notifyChange(i),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[i]})}filterPickResults(t,i){return i?t:t.filter(s=>!ft.isShapePickResult(s))}getCreationOptions(){return{color:A.DEFAULT_SHAPE_COLOR,pick:this.pick.bind(this)}}async importAnnotation(t,i){if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=await this.importShapeFromGeoJSON(t);return this.pushNewAnnotation(t.properties.title,s,t.properties),!0}async importAnnotationFile(t){const i=new Set(this._store.getAnnotations().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new X("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}catch{}}async importAnnotationFiles(t){const i=[];let s=0,a=0;const o=[],l=new Set(this._store.getAnnotations().map(r=>r.title));for(const r of t)i.push(this.importBlob(r,l).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{o.push(h.message)}));await Promise.allSettled(i),o.length>0?this._notificationStore.push(new X("Annotations",`${s} annotations imported (${a} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new X("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),o=a.type==="FeatureCollection"?a.features:[a];let l=0,r=0;for(const h of o)await this.importAnnotation(h,i)?l++:r++;return{nbImported:l,nbSkipped:r}}async importShapeFromGeoJSON(t){if(t.type!=="Feature")throw new Error("not a valid GeoJSON feature");const i="EPSG:4326",s=o=>{const l=new ce(i,o[0],o[1],o[2]??0);return l.as(this._instance.referenceCrs,l).toVector3()};let a;switch(t.geometry.type){case"LineString":a=new ft({beforeRemovePoint:Ot.limitRemovePointHook(2),color:A.DEFAULT_SHAPE_COLOR,segmentLabelFormatter:Qi(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),a.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":a=new ft({beforeRemovePoint:Ot.limitRemovePointHook(1),color:A.DEFAULT_SHAPE_COLOR,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Xe,vertexRadius:A.SHAPE_POINT_RADIUS}),a.setPoints(t.geometry.coordinates.map(s));break;case"Point":a=new ft({beforeRemovePoint:Ot.inhibitHook,color:A.DEFAULT_SHAPE_COLOR,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Xe,vertexRadius:A.SHAPE_POINT_RADIUS}),a.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":a=new ft({afterRemovePoint:Ot.afterRemovePointOfRing,afterUpdatePoint:Ot.afterUpdatePointOfRing,beforeRemovePoint:Ot.limitRemovePointHook(4),color:A.DEFAULT_SHAPE_COLOR,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:Ki}),a.setPoints(t.geometry.coordinates[0].map(s));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+t.geometry.type)}return this.computeMeasurements(a),await this._instance.add(a),a}onKeyDown(t){t.code==="Escape"&&this.stopEdition(!0)}pick(t){let i;switch(this._store.getAnnotationMode()){case"mapOnly":i=this.pickMap(t);break;case"normal":i=this.pickDefault(t);break;case"objectsOnly":i=this.pickFeatures(t);break}return i}pickDefault(t){const i=this._instance.pickObjectsAt(t,{sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}pickFeatures(t){const i=this._picker.getObjectsAt(this._instance,t,0)??[];return this.filterPickResults(i,this._isEditing)}pickMap(t){const i=this._instance.pickObjectsAt(t,{filter:s=>ft.isShapePickResult(s)||ka.isMapPickResult(s),sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}stopEdition(t){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(t&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=A.DEFAULT_SHAPE_COLOR,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(t){this._shapes.forEach(i=>{switch(i.userData.type){case"LineString":i.showSegmentLabels=t;break;case"MultiPoint":case"Point":i.showVertexLabels=t;break;case"Polygon":i.showSurfaceLabel=t;break}})}updateDrawing(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(t=>{t.visible&&t.rebuildLabels()})}}/*!
4
+ northing meters`+e;var d=g/2,C=0,m=0,p,I,f,b,M;return d>0&&(p=1e5/Math.pow(10,d),I=e.substring(o,o+d),C=parseFloat(I)*p,f=e.substring(o+d),m=parseFloat(f)*p),b=C+c,M=m+u,{easting:b,northing:M,zoneLetter:r,zoneNumber:l,accuracy:p}}function mo(e,t){for(var i=Ns.charCodeAt(t-1),s=1e5,a=!1;i!==e.charCodeAt(0);){if(i++,i===it&&i++,i===rt&&i++,i>oe){if(a)throw"Bad character: "+e;i=zt,a=!0}s+=1e5}return s}function fo(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;for(var i=Ps.charCodeAt(t-1),s=0,a=!1;i!==e.charCodeAt(0);){if(i++,i===it&&i++,i===rt&&i++,i>ne){if(a)throw"Bad character: "+e;i=zt,a=!0}s+=1e5}return s}function Io(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function Zt(e,t,i){if(!(this instanceof Zt))return new Zt(e,t,i);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if(typeof e=="object")this.x=e.x,this.y=e.y,this.z=e.z||0;else if(typeof e=="string"&&typeof t>"u"){var s=e.split(",");this.x=parseFloat(s[0],10),this.y=parseFloat(s[1],10),this.z=parseFloat(s[2],10)||0}else this.x=e,this.y=t,this.z=i||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Zt.fromMGRS=function(e){return new Zt(Ls(e))};Zt.prototype.toMGRS=function(e){return Ts([this.x,this.y],e)};var po=1,vo=.25,qi=.046875,Yi=.01953125,Ji=.01068115234375,yo=.75,bo=.46875,Mo=.013020833333333334,Eo=.007120768229166667,wo=.3645833333333333,Oo=.005696614583333333,xo=.3076171875;function Vs(e){var t=[];t[0]=po-e*(vo+e*(qi+e*(Yi+e*Ji))),t[1]=e*(yo-e*(qi+e*(Yi+e*Ji)));var i=e*e;return t[2]=i*(bo-e*(Mo+e*Eo)),i*=e,t[3]=i*(wo-e*Oo),t[4]=i*e*xo,t}function Be(e,t,i,s){return i*=t,t*=t,s[0]*e-i*(s[1]+t*(s[2]+t*(s[3]+t*s[4])))}var ko=20;function Rs(e,t,i){for(var s=1/(1-t),a=e,o=ko;o;--o){var l=Math.sin(a),r=1-t*l*l;if(r=(Be(a,l,Math.cos(a),i)-e)*(r*Math.sqrt(r))*s,a-=r,Math.abs(r)<x)return a}return a}function _o(){this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.es&&(this.en=Vs(this.es),this.ml0=Be(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function So(e){var t=e.x,i=e.y,s=_(t-this.long0),a,o,l,r=Math.sin(i),h=Math.cos(i);if(this.es){var u=h*s,g=Math.pow(u,2),d=this.ep2*Math.pow(h,2),C=Math.pow(d,2),m=Math.abs(h)>x?Math.tan(i):0,p=Math.pow(m,2),I=Math.pow(p,2);a=1-this.es*Math.pow(r,2),u=u/Math.sqrt(a);var f=Be(i,r,h,this.en);o=this.a*(this.k0*u*(1+g/6*(1-p+d+g/20*(5-18*p+I+14*d-58*p*d+g/42*(61+179*I-I*p-479*p)))))+this.x0,l=this.a*(this.k0*(f-this.ml0+r*s*u/2*(1+g/12*(5-p+9*d+4*C+g/30*(61+I-58*p+270*d-330*p*d+g/56*(1385+543*I-I*p-3111*p))))))+this.y0}else{var c=h*Math.sin(s);if(Math.abs(Math.abs(c)-1)<x)return 93;if(o=.5*this.a*this.k0*Math.log((1+c)/(1-c))+this.x0,l=h*Math.cos(s)/Math.sqrt(1-Math.pow(c,2)),c=Math.abs(l),c>=1){if(c-1>x)return 93;l=0}else l=Math.acos(l);i<0&&(l=-l),l=this.a*this.k0*(l-this.lat0)+this.y0}return e.x=o,e.y=l,e}function No(e){var t,i,s,a,o=(e.x-this.x0)*(1/this.a),l=(e.y-this.y0)*(1/this.a);if(this.es)if(t=this.ml0+l/this.k0,i=Rs(t,this.es,this.en),Math.abs(i)<E){var g=Math.sin(i),d=Math.cos(i),C=Math.abs(d)>x?Math.tan(i):0,m=this.ep2*Math.pow(d,2),p=Math.pow(m,2),I=Math.pow(C,2),f=Math.pow(I,2);t=1-this.es*Math.pow(g,2);var b=o*Math.sqrt(t)/this.k0,M=Math.pow(b,2);t=t*C,s=i-t*M/(1-this.es)*.5*(1-M/12*(5+3*I-9*m*I+m-4*p-M/30*(61+90*I-252*m*I+45*f+46*m-M/56*(1385+3633*I+4095*f+1574*f*I)))),a=_(this.long0+b*(1-M/6*(1+2*I+m-M/20*(5+28*I+24*f+8*m*I+6*m-M/42*(61+662*I+1320*f+720*f*I))))/d)}else s=E*de(l),a=0;else{var r=Math.exp(o/this.k0),h=.5*(r-1/r),c=this.lat0+l/this.k0,u=Math.cos(c);t=Math.sqrt((1-Math.pow(u,2))/(1+Math.pow(h,2))),s=Math.asin(t),l<0&&(s=-s),h===0&&u===0?a=0:a=_(Math.atan2(h,u)+this.long0)}return e.x=a,e.y=s,e}var Po=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const we={init:_o,forward:So,inverse:No,names:Po};function Us(e){var t=Math.exp(e);return t=(t-1/t)/2,t}function gt(e,t){e=Math.abs(e),t=Math.abs(t);var i=Math.max(e,t),s=Math.min(e,t)/(i||1);return i*Math.sqrt(1+Math.pow(s,2))}function To(e){var t=1+e,i=t-1;return i===0?e:e*Math.log(t)/i}function Lo(e){var t=Math.abs(e);return t=To(t*(1+t/(gt(1,t)+1))),e<0?-t:t}function fi(e,t){for(var i=2*Math.cos(2*t),s=e.length-1,a=e[s],o=0,l;--s>=0;)l=-o+i*a+e[s],o=a,a=l;return t+l*Math.sin(2*t)}function Do(e,t){for(var i=2*Math.cos(t),s=e.length-1,a=e[s],o=0,l;--s>=0;)l=-o+i*a+e[s],o=a,a=l;return Math.sin(t)*l}function Bo(e){var t=Math.exp(e);return t=(t+1/t)/2,t}function Fs(e,t,i){for(var s=Math.sin(t),a=Math.cos(t),o=Us(i),l=Bo(i),r=2*a*l,h=-2*s*o,c=e.length-1,u=e[c],g=0,d=0,C=0,m,p;--c>=0;)m=d,p=g,d=u,g=C,u=-m+r*d-h*g+e[c],C=-p+h*d+r*g;return r=s*l,h=a*o,[r*u-h*C,r*C+h*u]}function Vo(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(we.init.apply(this),this.forward=we.forward,this.inverse=we.inverse),this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),i=t;this.cgb[0]=t*(2+t*(-2/3+t*(-2+t*(116/45+t*(26/45+t*(-2854/675)))))),this.cbg[0]=t*(-2+t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))),i=i*t,this.cgb[1]=i*(7/3+t*(-8/5+t*(-227/45+t*(2704/315+t*(2323/945))))),this.cbg[1]=i*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),i=i*t,this.cgb[2]=i*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=i*(-26/15+t*(34/21+t*(8/5+t*(-12686/2835)))),i=i*t,this.cgb[3]=i*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=i*(1237/630+t*(-12/5+t*(-24832/14175))),i=i*t,this.cgb[4]=i*(4174/315+t*(-144838/6237)),this.cbg[4]=i*(-734/315+t*(109598/31185)),i=i*t,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+i*(1/4+i*(1/64+i/256))),this.utg[0]=t*(-.5+t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=i*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=i*(13/48+t*(-3/5+t*(557/1440+t*(281/630+t*(-1983433/1935360))))),i=i*t,this.utg[2]=i*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=i*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),i=i*t,this.utg[3]=i*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=i*(49561/161280+t*(-179/168+t*(6601661/7257600))),i=i*t,this.utg[4]=i*(-4583/161280+t*(108847/3991680)),this.gtu[4]=i*(34729/80640+t*(-3418889/1995840)),i=i*t,this.utg[5]=i*(-20648693/638668800),this.gtu[5]=i*(212378941/319334400);var s=fi(this.cbg,this.lat0);this.Zb=-this.Qn*(s+Do(this.gtu,2*s))}function Ro(e){var t=_(e.x-this.long0),i=e.y;i=fi(this.cbg,i);var s=Math.sin(i),a=Math.cos(i),o=Math.sin(t),l=Math.cos(t);i=Math.atan2(s,l*a),t=Math.atan2(o*a,gt(s,a*l)),t=Lo(Math.tan(t));var r=Fs(this.gtu,2*i,2*t);i=i+r[0],t=t+r[1];var h,c;return Math.abs(t)<=2.623395162778?(h=this.a*(this.Qn*t)+this.x0,c=this.a*(this.Qn*i+this.Zb)+this.y0):(h=1/0,c=1/0),e.x=h,e.y=c,e}function Uo(e){var t=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);i=(i-this.Zb)/this.Qn,t=t/this.Qn;var s,a;if(Math.abs(t)<=2.623395162778){var o=Fs(this.utg,2*i,2*t);i=i+o[0],t=t+o[1],t=Math.atan(Us(t));var l=Math.sin(i),r=Math.cos(i),h=Math.sin(t),c=Math.cos(t);i=Math.atan2(l*c,gt(h,c*r)),t=Math.atan2(h,c*r),s=_(t+this.long0),a=fi(this.cgb,i)}else s=1/0,a=1/0;return e.x=s,e.y=a,e}var Fo=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const Oe={init:Vo,forward:Ro,inverse:Uo,names:Fo};function zo(e,t){if(e===void 0){if(e=Math.floor((_(t)+Math.PI)*30/Math.PI)+1,e<0)return 0;if(e>60)return 60}return e}var jo="etmerc";function Go(){var e=zo(this.zone,this.long0);if(e===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*J,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Oe.init.apply(this),this.forward=Oe.forward,this.inverse=Oe.inverse}var Ho=["Universal Transverse Mercator System","utm"];const Zo={init:Go,names:Ho,dependsOn:jo};function Ii(e,t){return Math.pow((1-e)/(1+e),t)}var Wo=20;function qo(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+U)/(Math.pow(Math.tan(.5*this.lat0+U),this.C)*Ii(this.e*e,this.ratexp))}function Yo(e){var t=e.x,i=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+U),this.C)*Ii(this.e*Math.sin(i),this.ratexp))-E,e.x=this.C*t,e}function Jo(e){for(var t=1e-14,i=e.x/this.C,s=e.y,a=Math.pow(Math.tan(.5*s+U)/this.K,1/this.C),o=Wo;o>0&&(s=2*Math.atan(a*Ii(this.e*Math.sin(e.y),-.5*this.e))-E,!(Math.abs(s-e.y)<t));--o)e.y=s;return o?(e.x=i,e.y=s,e):null}const pi={init:qo,forward:Yo,inverse:Jo};function Xo(){pi.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))}function Ko(e){var t,i,s,a;return e.x=_(e.x-this.long0),pi.forward.apply(this,[e]),t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*i*s),e.x=a*i*Math.sin(e.x),e.y=a*(this.cosc0*t-this.sinc0*i*s),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e}function Qo(e){var t,i,s,a,o;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,o=Math.sqrt(e.x*e.x+e.y*e.y)){var l=2*Math.atan2(o,this.R2);t=Math.sin(l),i=Math.cos(l),a=Math.asin(i*this.sinc0+e.y*t*this.cosc0/o),s=Math.atan2(e.x*t,o*this.cosc0*i-e.y*this.sinc0*t)}else a=this.phic0,s=0;return e.x=s,e.y=a,pi.inverse.apply(this,[e]),e.x=_(e.x+this.long0),e}var $o=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const tr={init:Xo,forward:Ko,inverse:Qo,names:$o};function er(e,t,i){return t*=i,Math.tan(.5*(E+e))*Math.pow((1-t)/(1+t),.5*i)}function ir(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=x&&(this.k0=.5*(1+de(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=x&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=x&&(this.k0=.5*this.cons*It(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/ut(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=It(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-E,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function sr(e){var t=e.x,i=e.y,s=Math.sin(i),a=Math.cos(i),o,l,r,h,c,u,g=_(t-this.long0);return Math.abs(Math.abs(t-this.long0)-Math.PI)<=x&&Math.abs(i+this.lat0)<=x?(e.x=NaN,e.y=NaN,e):this.sphere?(o=2*this.k0/(1+this.sinlat0*s+this.coslat0*a*Math.cos(g)),e.x=this.a*o*a*Math.sin(g)+this.x0,e.y=this.a*o*(this.coslat0*s-this.sinlat0*a*Math.cos(g))+this.y0,e):(l=2*Math.atan(this.ssfn_(i,s,this.e))-E,h=Math.cos(l),r=Math.sin(l),Math.abs(this.coslat0)<=x?(c=ut(this.e,i*this.con,this.con*s),u=2*this.a*this.k0*c/this.cons,e.x=this.x0+u*Math.sin(t-this.long0),e.y=this.y0-this.con*u*Math.cos(t-this.long0),e):(Math.abs(this.sinlat0)<x?(o=2*this.a*this.k0/(1+h*Math.cos(g)),e.y=o*r):(o=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*r+this.cosX0*h*Math.cos(g))),e.y=o*(this.cosX0*r-this.sinX0*h*Math.cos(g))+this.y0),e.x=o*h*Math.sin(g)+this.x0,e))}function ar(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,o,l=Math.sqrt(e.x*e.x+e.y*e.y);if(this.sphere){var r=2*Math.atan(l/(2*this.a*this.k0));return t=this.long0,i=this.lat0,l<=x?(e.x=t,e.y=i,e):(i=Math.asin(Math.cos(r)*this.sinlat0+e.y*Math.sin(r)*this.coslat0/l),Math.abs(this.coslat0)<x?this.lat0>0?t=_(this.long0+Math.atan2(e.x,-1*e.y)):t=_(this.long0+Math.atan2(e.x,e.y)):t=_(this.long0+Math.atan2(e.x*Math.sin(r),l*this.coslat0*Math.cos(r)-e.y*this.sinlat0*Math.sin(r))),e.x=t,e.y=i,e)}else if(Math.abs(this.coslat0)<=x){if(l<=x)return i=this.lat0,t=this.long0,e.x=t,e.y=i,e;e.x*=this.con,e.y*=this.con,s=l*this.cons/(2*this.a*this.k0),i=this.con*ge(this.e,s),t=this.con*_(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else a=2*Math.atan(l*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,l<=x?o=this.X0:(o=Math.asin(Math.cos(a)*this.sinX0+e.y*Math.sin(a)*this.cosX0/l),t=_(this.long0+Math.atan2(e.x*Math.sin(a),l*this.cosX0*Math.cos(a)-e.y*this.sinX0*Math.sin(a)))),i=-1*ge(this.e,Math.tan(.5*(E+o)));return e.x=t,e.y=i,e}var nr=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const or={init:ir,forward:sr,inverse:ar,names:nr,ssfn_:er};function rr(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),i=this.a,s=this.rf,a=1/s,o=2*a-Math.pow(a,2),l=this.e=Math.sqrt(o);this.R=this.k0*i*Math.sqrt(1-o)/(1-o*Math.pow(t,2)),this.alpha=Math.sqrt(1+o/(1-o)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var r=Math.log(Math.tan(Math.PI/4+this.b0/2)),h=Math.log(Math.tan(Math.PI/4+e/2)),c=Math.log((1+l*t)/(1-l*t));this.K=r-this.alpha*h+this.alpha*l/2*c}function lr(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),i=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),s=-this.alpha*(t+i)+this.K,a=2*(Math.atan(Math.exp(s))-Math.PI/4),o=this.alpha*(e.x-this.lambda0),l=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(a)+Math.cos(this.b0)*Math.cos(o))),r=Math.asin(Math.cos(this.b0)*Math.sin(a)-Math.sin(this.b0)*Math.cos(a)*Math.cos(o));return e.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,e.x=this.R*l+this.x0,e}function hr(e){for(var t=e.x-this.x0,i=e.y-this.y0,s=t/this.R,a=2*(Math.atan(Math.exp(i/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(a)+Math.sin(this.b0)*Math.cos(a)*Math.cos(s)),l=Math.atan(Math.sin(s)/(Math.cos(this.b0)*Math.cos(s)-Math.sin(this.b0)*Math.tan(a))),r=this.lambda0+l/this.alpha,h=0,c=o,u=-1e3,g=0;Math.abs(c-u)>1e-7;){if(++g>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),u=c,c=2*Math.atan(Math.exp(h))-Math.PI/2}return e.x=r,e.y=c,e}var cr=["somerc"];const gr={init:rr,forward:lr,inverse:hr,names:cr};var Rt=1e-7;function dr(e){var t=["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],i=typeof e.PROJECTION=="object"?Object.keys(e.PROJECTION)[0]:e.PROJECTION;return"no_uoff"in e||"no_off"in e||t.indexOf(i)!==-1}function ur(){var e,t,i,s,a,o,l,r,h,c,u=0,g,d=0,C=0,m=0,p=0,I=0,f=0;this.no_off=dr(this),this.no_rot="no_rot"in this;var b=!1;"alpha"in this&&(b=!0);var M=!1;if("rectified_grid_angle"in this&&(M=!0),b&&(f=this.alpha),M&&(u=this.rectified_grid_angle*J),b||M)d=this.longc;else if(C=this.long1,p=this.lat1,m=this.long2,I=this.lat2,Math.abs(p-I)<=Rt||(e=Math.abs(p))<=Rt||Math.abs(e-E)<=Rt||Math.abs(Math.abs(this.lat0)-E)<=Rt||Math.abs(Math.abs(I)-E)<=Rt)throw new Error;var O=1-this.es;t=Math.sqrt(O),Math.abs(this.lat0)>x?(r=Math.sin(this.lat0),i=Math.cos(this.lat0),e=1-this.es*r*r,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/O),this.A=this.B*this.k0*t/e,s=this.B*t/(i*Math.sqrt(e)),a=s*s-1,a<=0?a=0:(a=Math.sqrt(a),this.lat0<0&&(a=-a)),this.E=a+=s,this.E*=Math.pow(ut(this.e,this.lat0,r),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=a=1),b||M?(b?(g=Math.asin(Math.sin(f)/s),M||(u=f)):(g=u,f=Math.asin(s*Math.sin(g))),this.lam0=d-Math.asin(.5*(a-1/a)*Math.tan(g))/this.B):(o=Math.pow(ut(this.e,p,Math.sin(p)),this.B),l=Math.pow(ut(this.e,I,Math.sin(I)),this.B),a=this.E/o,h=(l-o)/(l+o),c=this.E*this.E,c=(c-l*o)/(c+l*o),e=C-m,e<-Math.pi?m-=he:e>Math.pi&&(m+=he),this.lam0=_(.5*(C+m)-Math.atan(c*Math.tan(.5*this.B*(C-m))/h)/this.B),g=Math.atan(2*Math.sin(this.B*_(C-this.lam0))/(a-1/a)),u=f=Math.asin(s*Math.sin(g))),this.singam=Math.sin(g),this.cosgam=Math.cos(g),this.sinrot=Math.sin(u),this.cosrot=Math.cos(u),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A*this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(f))),this.lat0<0&&(this.u_0=-this.u_0)),a=.5*g,this.v_pole_n=this.ArB*Math.log(Math.tan(U-a)),this.v_pole_s=this.ArB*Math.log(Math.tan(U+a))}function Ar(e){var t={},i,s,a,o,l,r,h,c;if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-E)>x){if(l=this.E/Math.pow(ut(this.e,e.y,Math.sin(e.y)),this.B),r=1/l,i=.5*(l-r),s=.5*(l+r),o=Math.sin(this.B*e.x),a=(i*this.singam-o*this.cosgam)/s,Math.abs(Math.abs(a)-1)<x)throw new Error;c=.5*this.ArB*Math.log((1-a)/(1+a)),r=Math.cos(this.B*e.x),Math.abs(r)<Rt?h=this.A*e.x:h=this.ArB*Math.atan2(i*this.cosgam+o*this.singam,r)}else c=e.y>0?this.v_pole_n:this.v_pole_s,h=this.ArB*e.y;return this.no_rot?(t.x=h,t.y=c):(h-=this.u_0,t.x=c*this.cosrot+h*this.sinrot,t.y=h*this.cosrot-c*this.sinrot),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t}function Cr(e){var t,i,s,a,o,l,r,h={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(i=e.y,t=e.x):(i=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),s=Math.exp(-this.BrA*i),a=.5*(s-1/s),o=.5*(s+1/s),l=Math.sin(this.BrA*t),r=(l*this.cosgam+a*this.singam)/o,Math.abs(Math.abs(r)-1)<x)h.x=0,h.y=r<0?-E:E;else{if(h.y=this.E/Math.sqrt((1+r)/(1-r)),h.y=ge(this.e,Math.pow(h.y,1/this.B)),h.y===1/0)throw new Error;h.x=-this.rB*Math.atan2(a*this.cosgam-l*this.singam,Math.cos(this.BrA*t))}return h.x+=this.lam0,h}var mr=["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Two_Point_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","Oblique_Mercator","omerc"];const fr={init:ur,forward:Ar,inverse:Cr,names:mr};function Ir(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<x)){var e=this.b/this.a;this.e=Math.sqrt(1-e*e);var t=Math.sin(this.lat1),i=Math.cos(this.lat1),s=It(this.e,t,i),a=ut(this.e,this.lat1,t),o=Math.sin(this.lat2),l=Math.cos(this.lat2),r=It(this.e,o,l),h=ut(this.e,this.lat2,o),c=ut(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>x?this.ns=Math.log(s/r)/Math.log(a/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(a,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}}function pr(e){var t=e.x,i=e.y;Math.abs(2*Math.abs(i)-Math.PI)<=x&&(i=de(i)*(E-2*x));var s=Math.abs(Math.abs(i)-E),a,o;if(s>x)a=ut(this.e,i,Math.sin(i)),o=this.a*this.f0*Math.pow(a,this.ns);else{if(s=i*this.ns,s<=0)return null;o=0}var l=this.ns*_(t-this.long0);return e.x=this.k0*(o*Math.sin(l))+this.x0,e.y=this.k0*(this.rh-o*Math.cos(l))+this.y0,e}function vr(e){var t,i,s,a,o,l=(e.x-this.x0)/this.k0,r=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(l*l+r*r),i=1):(t=-Math.sqrt(l*l+r*r),i=-1);var h=0;if(t!==0&&(h=Math.atan2(i*l,i*r)),t!==0||this.ns>0){if(i=1/this.ns,s=Math.pow(t/(this.a*this.f0),i),a=ge(this.e,s),a===-9999)return null}else a=-E;return o=_(h/this.ns+this.long0),e.x=o,e.y=a,e}var yr=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"];const br={init:Ir,forward:pr,inverse:vr,names:yr};function Mr(){this.a=6377397155e-3,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.7417649320975901-.308341501185665),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq}function Er(e){var t,i,s,a,o,l,r,h=e.x,c=e.y,u=_(h-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),i=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),s=-u*this.alfa,a=Math.asin(Math.cos(this.ad)*Math.sin(i)+Math.sin(this.ad)*Math.cos(i)*Math.cos(s)),o=Math.asin(Math.cos(i)*Math.sin(s)/Math.cos(a)),l=this.n*o,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(a/2+this.s45),this.n),e.y=r*Math.cos(l)/1,e.x=r*Math.sin(l)/1,this.czech||(e.y*=-1,e.x*=-1),e}function wr(e){var t,i,s,a,o,l,r,h,c=e.x;e.x=e.y,e.y=c,this.czech||(e.y*=-1,e.x*=-1),l=Math.sqrt(e.x*e.x+e.y*e.y),o=Math.atan2(e.y,e.x),a=o/Math.sin(this.s0),s=2*(Math.atan(Math.pow(this.ro0/l,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(a)),i=Math.asin(Math.cos(s)*Math.sin(a)/Math.cos(t)),e.x=this.long0-i/this.alfa,r=t,h=0;var u=0;do e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),Math.abs(r-e.y)<1e-10&&(h=1),r=e.y,u+=1;while(h===0&&u<15);return u>=15?null:e}var Or=["Krovak","krovak"];const xr={init:Mr,forward:Er,inverse:wr,names:Or};function tt(e,t,i,s,a){return e*a-t*Math.sin(2*a)+i*Math.sin(4*a)-s*Math.sin(6*a)}function ue(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function Ae(e){return .375*e*(1+.25*e*(1+.46875*e))}function Ce(e){return .05859375*e*e*(1+.75*e)}function me(e){return e*e*e*(35/3072)}function Wt(e,t,i){var s=t*i;return e/Math.sqrt(1-s*s)}function Jt(e){return Math.abs(e)<E?e:e-de(e)*Math.PI}function Pe(e,t,i,s,a){var o,l;o=e/t;for(var r=0;r<15;r++)if(l=(e-(t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-a*Math.sin(6*o)))/(t-2*i*Math.cos(2*o)+4*s*Math.cos(4*o)-6*a*Math.cos(6*o)),o+=l,Math.abs(l)<=1e-10)return o;return NaN}function kr(){this.sphere||(this.e0=ue(this.es),this.e1=Ae(this.es),this.e2=Ce(this.es),this.e3=me(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0))}function _r(e){var t,i,s=e.x,a=e.y;if(s=_(s-this.long0),this.sphere)t=this.a*Math.asin(Math.cos(a)*Math.sin(s)),i=this.a*(Math.atan2(Math.tan(a),Math.cos(s))-this.lat0);else{var o=Math.sin(a),l=Math.cos(a),r=Wt(this.a,this.e,o),h=Math.tan(a)*Math.tan(a),c=s*Math.cos(a),u=c*c,g=this.es*l*l/(1-this.es),d=this.a*tt(this.e0,this.e1,this.e2,this.e3,a);t=r*c*(1-u*h*(1/6-(8-h+8*g)*u/120)),i=d-this.ml0+r*o/l*u*(.5+(5-h+6*g)*u/24)}return e.x=t+this.x0,e.y=i+this.y0,e}function Sr(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a;if(this.sphere){var o=i+this.lat0;s=Math.asin(Math.sin(o)*Math.cos(t)),a=Math.atan2(Math.tan(t),Math.cos(o))}else{var l=this.ml0/this.a+i,r=Pe(l,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(r)-E)<=x)return e.x=this.long0,e.y=E,i<0&&(e.y*=-1),e;var h=Wt(this.a,this.e,Math.sin(r)),c=h*h*h/this.a/this.a*(1-this.es),u=Math.pow(Math.tan(r),2),g=t*this.a/h,d=g*g;s=r-h*Math.tan(r)/c*g*g*(.5-(1+3*u)*g*g/24),a=g*(1-d*(u/3+(1+3*u)*u*d/15))/Math.cos(r)}return e.x=_(a+this.long0),e.y=Jt(s),e}var Nr=["Cassini","Cassini_Soldner","cass"];const Pr={init:kr,forward:_r,inverse:Sr,names:Nr};function bt(e,t){var i;return e>1e-7?(i=e*t,(1-e*e)*(t/(1-i*i)-.5/e*Math.log((1-i)/(1+i)))):2*t}var Tr=1,Lr=2,Dr=3,Br=4;function Vr(){var e=Math.abs(this.lat0);if(Math.abs(e-E)<x?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<x?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var t;switch(this.qp=bt(this.e,1),this.mmf=.5/(1-this.es),this.apa=Wr(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=bt(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd;break}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))}function Rr(e){var t,i,s,a,o,l,r,h,c,u,g=e.x,d=e.y;if(g=_(g-this.long0),this.sphere){if(o=Math.sin(d),u=Math.cos(d),s=Math.cos(g),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(i=this.mode===this.EQUIT?1+u*s:1+this.sinph0*o+this.cosph0*u*s,i<=x)return null;i=Math.sqrt(2/i),t=i*u*Math.sin(g),i*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*u*s}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(s=-s),Math.abs(d+this.lat0)<x)return null;i=U-d*.5,i=2*(this.mode===this.S_POLE?Math.cos(i):Math.sin(i)),t=i*Math.sin(g),i*=s}}else{switch(r=0,h=0,c=0,s=Math.cos(g),a=Math.sin(g),o=Math.sin(d),l=bt(this.e,o),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(r=l/this.qp,h=Math.sqrt(1-r*r)),this.mode){case this.OBLIQ:c=1+this.sinb1*r+this.cosb1*h*s;break;case this.EQUIT:c=1+h*s;break;case this.N_POLE:c=E+d,l=this.qp-l;break;case this.S_POLE:c=d-E,l=this.qp+l;break}if(Math.abs(c)<x)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:c=Math.sqrt(2/c),this.mode===this.OBLIQ?i=this.ymf*c*(this.cosb1*r-this.sinb1*h*s):i=(c=Math.sqrt(2/(1+h*s)))*r*this.ymf,t=this.xmf*c*h*a;break;case this.N_POLE:case this.S_POLE:l>=0?(t=(c=Math.sqrt(l))*a,i=s*(this.mode===this.S_POLE?c:-c)):t=i=0;break}}return e.x=this.a*t+this.x0,e.y=this.a*i+this.y0,e}function Ur(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a,o,l,r,h,c;if(this.sphere){var u=0,g,d=0;if(g=Math.sqrt(t*t+i*i),a=g*.5,a>1)return null;switch(a=2*Math.asin(a),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(d=Math.sin(a),u=Math.cos(a)),this.mode){case this.EQUIT:a=Math.abs(g)<=x?0:Math.asin(i*d/g),t*=d,i=u*g;break;case this.OBLIQ:a=Math.abs(g)<=x?this.lat0:Math.asin(u*this.sinph0+i*d*this.cosph0/g),t*=d*this.cosph0,i=(u-Math.sin(a)*this.sinph0)*g;break;case this.N_POLE:i=-i,a=E-a;break;case this.S_POLE:a-=E;break}s=i===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(t,i)}else{if(c=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(t/=this.dd,i*=this.dd,h=Math.sqrt(t*t+i*i),h<x)return e.x=this.long0,e.y=this.lat0,e;l=2*Math.asin(.5*h/this.rq),o=Math.cos(l),t*=l=Math.sin(l),this.mode===this.OBLIQ?(c=o*this.sinb1+i*l*this.cosb1/h,r=this.qp*c,i=h*this.cosb1*o-i*this.sinb1*l):(c=i*l/h,r=this.qp*c,i=h*o)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(i=-i),r=t*t+i*i,!r)return e.x=this.long0,e.y=this.lat0,e;c=1-r/this.qp,this.mode===this.S_POLE&&(c=-c)}s=Math.atan2(t,i),a=qr(Math.asin(c),this.apa)}return e.x=_(this.long0+s),e.y=a,e}var Fr=.3333333333333333,zr=.17222222222222222,jr=.10257936507936508,Gr=.06388888888888888,Hr=.0664021164021164,Zr=.016415012942191543;function Wr(e){var t,i=[];return i[0]=e*Fr,t=e*e,i[0]+=t*zr,i[1]=t*Gr,t*=e,i[0]+=t*jr,i[1]+=t*Hr,i[2]=t*Zr,i}function qr(e,t){var i=e+e;return e+t[0]*Math.sin(i)+t[1]*Math.sin(i+i)+t[2]*Math.sin(i+i+i)}var Yr=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const Jr={init:Vr,forward:Rr,inverse:Ur,names:Yr,S_POLE:Tr,N_POLE:Lr,EQUIT:Dr,OBLIQ:Br};function wt(e){return Math.abs(e)>1&&(e=e>1?1:-1),Math.asin(e)}function Xr(){Math.abs(this.lat1+this.lat2)<x||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=It(this.e3,this.sin_po,this.cos_po),this.qs1=bt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=It(this.e3,this.sin_po,this.cos_po),this.qs2=bt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=bt(this.e3,this.sin_po),Math.abs(this.lat1-this.lat2)>x?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)}function Kr(e){var t=e.x,i=e.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var s=bt(this.e3,this.sin_phi),a=this.a*Math.sqrt(this.c-this.ns0*s)/this.ns0,o=this.ns0*_(t-this.long0),l=a*Math.sin(o)+this.x0,r=this.rh-a*Math.cos(o)+this.y0;return e.x=l,e.y=r,e}function Qr(e){var t,i,s,a,o,l;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),s=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),s=-1),a=0,t!==0&&(a=Math.atan2(s*e.x,s*e.y)),s=t*this.ns0/this.a,this.sphere?l=Math.asin((this.c-s*s)/(2*this.ns0)):(i=(this.c-s*s)/this.ns0,l=this.phi1z(this.e3,i)),o=_(a/this.ns0+this.long0),e.x=o,e.y=l,e}function $r(e,t){var i,s,a,o,l,r=wt(.5*t);if(e<x)return r;for(var h=e*e,c=1;c<=25;c++)if(i=Math.sin(r),s=Math.cos(r),a=e*i,o=1-a*a,l=.5*o*o/s*(t/(1-h)-i/o+.5/e*Math.log((1-a)/(1+a))),r=r+l,Math.abs(l)<=1e-7)return r;return null}var tl=["Albers_Conic_Equal_Area","Albers","aea"];const el={init:Xr,forward:Kr,inverse:Qr,names:tl,phi1z:$r};function il(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function sl(e){var t,i,s,a,o,l,r,h,c=e.x,u=e.y;return s=_(c-this.long0),t=Math.sin(u),i=Math.cos(u),a=Math.cos(s),l=this.sin_p14*t+this.cos_p14*i*a,o=1,l>0||Math.abs(l)<=x?(r=this.x0+this.a*o*i*Math.sin(s)/l,h=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*i*a)/l):(r=this.x0+this.infinity_dist*i*Math.sin(s),h=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*i*a)),e.x=r,e.y=h,e}function al(e){var t,i,s,a,o,l;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(a=Math.atan2(t,this.rc),i=Math.sin(a),s=Math.cos(a),l=wt(s*this.sin_p14+e.y*i*this.cos_p14/t),o=Math.atan2(e.x*i,t*this.cos_p14*s-e.y*this.sin_p14*i),o=_(this.long0+o)):(l=this.phic0,o=0),e.x=o,e.y=l,e}var nl=["gnom"];const ol={init:il,forward:sl,inverse:al,names:nl};function rl(e,t){var i=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-i)<1e-6)return t<0?-1*E:E;for(var s=Math.asin(.5*t),a,o,l,r,h=0;h<30;h++)if(o=Math.sin(s),l=Math.cos(s),r=e*o,a=Math.pow(1-r*r,2)/(2*l)*(t/(1-e*e)-o/(1-r*r)+.5/e*Math.log((1-r)/(1+r))),s+=a,Math.abs(a)<=1e-10)return s;return NaN}function ll(){this.sphere||(this.k0=It(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function hl(e){var t=e.x,i=e.y,s,a,o=_(t-this.long0);if(this.sphere)s=this.x0+this.a*o*Math.cos(this.lat_ts),a=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var l=bt(this.e,Math.sin(i));s=this.x0+this.a*this.k0*o,a=this.y0+this.a*l*.5/this.k0}return e.x=s,e.y=a,e}function cl(e){e.x-=this.x0,e.y-=this.y0;var t,i;return this.sphere?(t=_(this.long0+e.x/this.a/Math.cos(this.lat_ts)),i=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(i=rl(this.e,2*e.y*this.k0/this.a),t=_(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=i,e}var gl=["cea"];const dl={init:ll,forward:hl,inverse:cl,names:gl};function ul(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)}function Al(e){var t=e.x,i=e.y,s=_(t-this.long0),a=Jt(i-this.lat0);return e.x=this.x0+this.a*s*this.rc,e.y=this.y0+this.a*a,e}function Cl(e){var t=e.x,i=e.y;return e.x=_(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=Jt(this.lat0+(i-this.y0)/this.a),e}var ml=["Equirectangular","Equidistant_Cylindrical","eqc"];const fl={init:ul,forward:Al,inverse:Cl,names:ml};var Xi=20;function Il(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=ue(this.es),this.e1=Ae(this.es),this.e2=Ce(this.es),this.e3=me(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0)}function pl(e){var t=e.x,i=e.y,s,a,o,l=_(t-this.long0);if(o=l*Math.sin(i),this.sphere)Math.abs(i)<=x?(s=this.a*l,a=-1*this.a*this.lat0):(s=this.a*Math.sin(o)/Math.tan(i),a=this.a*(Jt(i-this.lat0)+(1-Math.cos(o))/Math.tan(i)));else if(Math.abs(i)<=x)s=this.a*l,a=-1*this.ml0;else{var r=Wt(this.a,this.e,Math.sin(i))/Math.tan(i);s=r*Math.sin(o),a=this.a*tt(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+r*(1-Math.cos(o))}return e.x=s+this.x0,e.y=a+this.y0,e}function vl(e){var t,i,s,a,o,l,r,h,c;if(s=e.x-this.x0,a=e.y-this.y0,this.sphere)if(Math.abs(a+this.a*this.lat0)<=x)t=_(s/this.a+this.long0),i=0;else{l=this.lat0+a/this.a,r=s*s/this.a/this.a+l*l,h=l;var u;for(o=Xi;o;--o)if(u=Math.tan(h),c=-1*(l*(h*u+1)-h-.5*(h*h+r)*u)/((h-l)/u-1),h+=c,Math.abs(c)<=x){i=h;break}t=_(this.long0+Math.asin(s*Math.tan(h)/this.a)/Math.sin(i))}else if(Math.abs(a+this.ml0)<=x)i=0,t=_(this.long0+s/this.a);else{l=(this.ml0+a)/this.a,r=s*s/this.a/this.a+l*l,h=l;var g,d,C,m,p;for(o=Xi;o;--o)if(p=this.e*Math.sin(h),g=Math.sqrt(1-p*p)*Math.tan(h),d=this.a*tt(this.e0,this.e1,this.e2,this.e3,h),C=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),m=d/this.a,c=(l*(g*m+1)-m-.5*g*(m*m+r))/(this.es*Math.sin(2*h)*(m*m+r-2*l*m)/(4*g)+(l-m)*(g*C-2/Math.sin(2*h))-C),h-=c,Math.abs(c)<=x){i=h;break}g=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),t=_(this.long0+Math.asin(s*g/this.a)/Math.sin(i))}return e.x=t,e.y=i,e}var yl=["Polyconic","poly"];const bl={init:Il,forward:pl,inverse:vl,names:yl};function Ml(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013}function El(e){var t,i=e.x,s=e.y,a=s-this.lat0,o=i-this.long0,l=a/le*1e-5,r=o,h=1,c=0;for(t=1;t<=10;t++)h=h*l,c=c+this.A[t]*h;var u=c,g=r,d=1,C=0,m,p,I=0,f=0;for(t=1;t<=6;t++)m=d*u-C*g,p=C*u+d*g,d=m,C=p,I=I+this.B_re[t]*d-this.B_im[t]*C,f=f+this.B_im[t]*d+this.B_re[t]*C;return e.x=f*this.a+this.x0,e.y=I*this.a+this.y0,e}function wl(e){var t,i=e.x,s=e.y,a=i-this.x0,o=s-this.y0,l=o/this.a,r=a/this.a,h=1,c=0,u,g,d=0,C=0;for(t=1;t<=6;t++)u=h*l-c*r,g=c*l+h*r,h=u,c=g,d=d+this.C_re[t]*h-this.C_im[t]*c,C=C+this.C_im[t]*h+this.C_re[t]*c;for(var m=0;m<this.iterations;m++){var p=d,I=C,f,b,M=l,O=r;for(t=2;t<=6;t++)f=p*d-I*C,b=I*d+p*C,p=f,I=b,M=M+(t-1)*(this.B_re[t]*p-this.B_im[t]*I),O=O+(t-1)*(this.B_im[t]*p+this.B_re[t]*I);p=1,I=0;var k=this.B_re[1],w=this.B_im[1];for(t=2;t<=6;t++)f=p*d-I*C,b=I*d+p*C,p=f,I=b,k=k+t*(this.B_re[t]*p-this.B_im[t]*I),w=w+t*(this.B_im[t]*p+this.B_re[t]*I);var S=k*k+w*w;d=(M*k+O*w)/S,C=(O*k-M*w)/S}var L=d,W=C,D=1,z=0;for(t=1;t<=9;t++)D=D*L,z=z+this.D[t]*D;var V=this.lat0+z*le*1e5,q=this.long0+W;return e.x=q,e.y=V,e}var Ol=["New_Zealand_Map_Grid","nzmg"];const xl={init:Ml,forward:El,inverse:wl,names:Ol};function kl(){}function _l(e){var t=e.x,i=e.y,s=_(t-this.long0),a=this.x0+this.a*s,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+i/2.5))*1.25;return e.x=a,e.y=o,e}function Sl(e){e.x-=this.x0,e.y-=this.y0;var t=_(this.long0+e.x/this.a),i=2.5*(Math.atan(Math.exp(.8*e.y/this.a))-Math.PI/4);return e.x=t,e.y=i,e}var Nl=["Miller_Cylindrical","mill"];const Pl={init:kl,forward:_l,inverse:Sl,names:Nl};var Tl=20;function Ll(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Vs(this.es)}function Dl(e){var t,i,s=e.x,a=e.y;if(s=_(s-this.long0),this.sphere){if(!this.m)a=this.n!==1?Math.asin(this.n*Math.sin(a)):a;else for(var o=this.n*Math.sin(a),l=Tl;l;--l){var r=(this.m*a+Math.sin(a)-o)/(this.m+Math.cos(a));if(a-=r,Math.abs(r)<x)break}t=this.a*this.C_x*s*(this.m+Math.cos(a)),i=this.a*this.C_y*a}else{var h=Math.sin(a),c=Math.cos(a);i=this.a*Be(a,h,c,this.en),t=this.a*s*c/Math.sqrt(1-this.es*h*h)}return e.x=t,e.y=i,e}function Bl(e){var t,i,s,a;return e.x-=this.x0,s=e.x/this.a,e.y-=this.y0,t=e.y/this.a,this.sphere?(t/=this.C_y,s=s/(this.C_x*(this.m+Math.cos(t))),this.m?t=wt((this.m*t+Math.sin(t))/this.n):this.n!==1&&(t=wt(Math.sin(t)/this.n)),s=_(s+this.long0),t=Jt(t)):(t=Rs(e.y/this.a,this.es,this.en),a=Math.abs(t),a<E?(a=Math.sin(t),i=this.long0+e.x*Math.sqrt(1-this.es*a*a)/(this.a*Math.cos(t)),s=_(i)):a-x<E&&(s=this.long0)),e.x=s,e.y=t,e}var Vl=["Sinusoidal","sinu"];const Rl={init:Ll,forward:Dl,inverse:Bl,names:Vl};function Ul(){}function Fl(e){for(var t=e.x,i=e.y,s=_(t-this.long0),a=i,o=Math.PI*Math.sin(i);;){var l=-(a+Math.sin(a)-o)/(1+Math.cos(a));if(a+=l,Math.abs(l)<x)break}a/=2,Math.PI/2-Math.abs(i)<x&&(s=0);var r=.900316316158*this.a*s*Math.cos(a)+this.x0,h=1.4142135623731*this.a*Math.sin(a)+this.y0;return e.x=r,e.y=h,e}function zl(e){var t,i;e.x-=this.x0,e.y-=this.y0,i=e.y/(1.4142135623731*this.a),Math.abs(i)>.999999999999&&(i=.999999999999),t=Math.asin(i);var s=_(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));s<-Math.PI&&(s=-Math.PI),s>Math.PI&&(s=Math.PI),i=(2*t+Math.sin(2*t))/Math.PI,Math.abs(i)>1&&(i=1);var a=Math.asin(i);return e.x=s,e.y=a,e}var jl=["Mollweide","moll"];const Gl={init:Ul,forward:Fl,inverse:zl,names:jl};function Hl(){Math.abs(this.lat1+this.lat2)<x||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=ue(this.es),this.e1=Ae(this.es),this.e2=Ce(this.es),this.e3=me(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=It(this.e,this.sinphi,this.cosphi),this.ml1=tt(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<x?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=It(this.e,this.sinphi,this.cosphi),this.ml2=tt(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=tt(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))}function Zl(e){var t=e.x,i=e.y,s;if(this.sphere)s=this.a*(this.g-i);else{var a=tt(this.e0,this.e1,this.e2,this.e3,i);s=this.a*(this.g-a)}var o=this.ns*_(t-this.long0),l=this.x0+s*Math.sin(o),r=this.y0+this.rh-s*Math.cos(o);return e.x=l,e.y=r,e}function Wl(e){e.x-=this.x0,e.y=this.rh-e.y+this.y0;var t,i,s,a;this.ns>=0?(i=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(i=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var o=0;if(i!==0&&(o=Math.atan2(t*e.x,t*e.y)),this.sphere)return a=_(this.long0+o/this.ns),s=Jt(this.g-i/this.a),e.x=a,e.y=s,e;var l=this.g-i/this.a;return s=Pe(l,this.e0,this.e1,this.e2,this.e3),a=_(this.long0+o/this.ns),e.x=a,e.y=s,e}var ql=["Equidistant_Conic","eqdc"];const Yl={init:Hl,forward:Zl,inverse:Wl,names:ql};function Jl(){this.R=this.a}function Xl(e){var t=e.x,i=e.y,s=_(t-this.long0),a,o;Math.abs(i)<=x&&(a=this.x0+this.R*s,o=this.y0);var l=wt(2*Math.abs(i/Math.PI));(Math.abs(s)<=x||Math.abs(Math.abs(i)-E)<=x)&&(a=this.x0,i>=0?o=this.y0+Math.PI*this.R*Math.tan(.5*l):o=this.y0+Math.PI*this.R*-Math.tan(.5*l));var r=.5*Math.abs(Math.PI/s-s/Math.PI),h=r*r,c=Math.sin(l),u=Math.cos(l),g=u/(c+u-1),d=g*g,C=g*(2/c-1),m=C*C,p=Math.PI*this.R*(r*(g-m)+Math.sqrt(h*(g-m)*(g-m)-(m+h)*(d-m)))/(m+h);s<0&&(p=-p),a=this.x0+p;var I=h+g;return p=Math.PI*this.R*(C*I-r*Math.sqrt((m+h)*(h+1)-I*I))/(m+h),i>=0?o=this.y0+p:o=this.y0-p,e.x=a,e.y=o,e}function Kl(e){var t,i,s,a,o,l,r,h,c,u,g,d,C;return e.x-=this.x0,e.y-=this.y0,g=Math.PI*this.R,s=e.x/g,a=e.y/g,o=s*s+a*a,l=-Math.abs(a)*(1+o),r=l-2*a*a+s*s,h=-2*l+1+2*a*a+o*o,C=a*a/h+(2*r*r*r/h/h/h-9*l*r/h/h)/27,c=(l-r*r/3/h)/h,u=2*Math.sqrt(-c/3),g=3*C/c/u,Math.abs(g)>1&&(g>=0?g=1:g=-1),d=Math.acos(g)/3,e.y>=0?i=(-u*Math.cos(d+Math.PI/3)-r/3/h)*Math.PI:i=-(-u*Math.cos(d+Math.PI/3)-r/3/h)*Math.PI,Math.abs(s)<x?t=this.long0:t=_(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(s*s-a*a)+o*o))/2/s),e.x=t,e.y=i,e}var Ql=["Van_der_Grinten_I","VanDerGrinten","vandg"];const $l={init:Jl,forward:Xl,inverse:Kl,names:Ql};function th(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function eh(e){var t=e.x,i=e.y,s=Math.sin(e.y),a=Math.cos(e.y),o=_(t-this.long0),l,r,h,c,u,g,d,C,m,p,I,f,b,M,O,k,w,S,L,W,D,z,V;return this.sphere?Math.abs(this.sin_p12-1)<=x?(e.x=this.x0+this.a*(E-i)*Math.sin(o),e.y=this.y0-this.a*(E-i)*Math.cos(o),e):Math.abs(this.sin_p12+1)<=x?(e.x=this.x0+this.a*(E+i)*Math.sin(o),e.y=this.y0+this.a*(E+i)*Math.cos(o),e):(S=this.sin_p12*s+this.cos_p12*a*Math.cos(o),k=Math.acos(S),w=k?k/Math.sin(k):1,e.x=this.x0+this.a*w*a*Math.sin(o),e.y=this.y0+this.a*w*(this.cos_p12*s-this.sin_p12*a*Math.cos(o)),e):(l=ue(this.es),r=Ae(this.es),h=Ce(this.es),c=me(this.es),Math.abs(this.sin_p12-1)<=x?(u=this.a*tt(l,r,h,c,E),g=this.a*tt(l,r,h,c,i),e.x=this.x0+(u-g)*Math.sin(o),e.y=this.y0-(u-g)*Math.cos(o),e):Math.abs(this.sin_p12+1)<=x?(u=this.a*tt(l,r,h,c,E),g=this.a*tt(l,r,h,c,i),e.x=this.x0+(u+g)*Math.sin(o),e.y=this.y0+(u+g)*Math.cos(o),e):(d=s/a,C=Wt(this.a,this.e,this.sin_p12),m=Wt(this.a,this.e,s),p=Math.atan((1-this.es)*d+this.es*C*this.sin_p12/(m*a)),I=Math.atan2(Math.sin(o),this.cos_p12*Math.tan(p)-this.sin_p12*Math.cos(o)),I===0?L=Math.asin(this.cos_p12*Math.sin(p)-this.sin_p12*Math.cos(p)):Math.abs(Math.abs(I)-Math.PI)<=x?L=-Math.asin(this.cos_p12*Math.sin(p)-this.sin_p12*Math.cos(p)):L=Math.asin(Math.sin(o)*Math.cos(p)/Math.sin(I)),f=this.e*this.sin_p12/Math.sqrt(1-this.es),b=this.e*this.cos_p12*Math.cos(I)/Math.sqrt(1-this.es),M=f*b,O=b*b,W=L*L,D=W*L,z=D*L,V=z*L,k=C*L*(1-W*O*(1-O)/6+D/8*M*(1-2*O)+z/120*(O*(4-7*O)-3*f*f*(1-7*O))-V/48*M),e.x=this.x0+k*Math.sin(I),e.y=this.y0+k*Math.cos(I),e))}function ih(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,o,l,r,h,c,u,g,d,C,m,p,I,f,b,M,O,k,w,S,L;return this.sphere?(t=Math.sqrt(e.x*e.x+e.y*e.y),t>2*E*this.a?void 0:(i=t/this.a,s=Math.sin(i),a=Math.cos(i),o=this.long0,Math.abs(t)<=x?l=this.lat0:(l=wt(a*this.sin_p12+e.y*s*this.cos_p12/t),r=Math.abs(this.lat0)-E,Math.abs(r)<=x?this.lat0>=0?o=_(this.long0+Math.atan2(e.x,-e.y)):o=_(this.long0-Math.atan2(-e.x,e.y)):o=_(this.long0+Math.atan2(e.x*s,t*this.cos_p12*a-e.y*this.sin_p12*s))),e.x=o,e.y=l,e)):(h=ue(this.es),c=Ae(this.es),u=Ce(this.es),g=me(this.es),Math.abs(this.sin_p12-1)<=x?(d=this.a*tt(h,c,u,g,E),t=Math.sqrt(e.x*e.x+e.y*e.y),C=d-t,l=Pe(C/this.a,h,c,u,g),o=_(this.long0+Math.atan2(e.x,-1*e.y)),e.x=o,e.y=l,e):Math.abs(this.sin_p12+1)<=x?(d=this.a*tt(h,c,u,g,E),t=Math.sqrt(e.x*e.x+e.y*e.y),C=t-d,l=Pe(C/this.a,h,c,u,g),o=_(this.long0+Math.atan2(e.x,e.y)),e.x=o,e.y=l,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),I=Math.atan2(e.x,e.y),m=Wt(this.a,this.e,this.sin_p12),f=Math.cos(I),b=this.e*this.cos_p12*f,M=-b*b/(1-this.es),O=3*this.es*(1-M)*this.sin_p12*this.cos_p12*f/(1-this.es),k=t/m,w=k-M*(1+M)*Math.pow(k,3)/6-O*(1+3*M)*Math.pow(k,4)/24,S=1-M*w*w/2-k*w*w*w/6,p=Math.asin(this.sin_p12*Math.cos(w)+this.cos_p12*Math.sin(w)*f),o=_(this.long0+Math.asin(Math.sin(I)*Math.sin(w)/Math.cos(p))),L=Math.sin(p),l=Math.atan2((L-this.es*S*this.sin_p12)*Math.tan(p),L*(1-this.es)),e.x=o,e.y=l,e))}var sh=["Azimuthal_Equidistant","aeqd"];const ah={init:th,forward:eh,inverse:ih,names:sh};function nh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function oh(e){var t,i,s,a,o,l,r,h,c=e.x,u=e.y;return s=_(c-this.long0),t=Math.sin(u),i=Math.cos(u),a=Math.cos(s),l=this.sin_p14*t+this.cos_p14*i*a,o=1,(l>0||Math.abs(l)<=x)&&(r=this.a*o*i*Math.sin(s),h=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*i*a)),e.x=r,e.y=h,e}function rh(e){var t,i,s,a,o,l,r;return e.x-=this.x0,e.y-=this.y0,t=Math.sqrt(e.x*e.x+e.y*e.y),i=wt(t/this.a),s=Math.sin(i),a=Math.cos(i),l=this.long0,Math.abs(t)<=x?(r=this.lat0,e.x=l,e.y=r,e):(r=wt(a*this.sin_p14+e.y*s*this.cos_p14/t),o=Math.abs(this.lat0)-E,Math.abs(o)<=x?(this.lat0>=0?l=_(this.long0+Math.atan2(e.x,-e.y)):l=_(this.long0-Math.atan2(-e.x,e.y)),e.x=l,e.y=r,e):(l=_(this.long0+Math.atan2(e.x*s,t*this.cos_p14*a-e.y*this.sin_p14*s)),e.x=l,e.y=r,e))}var lh=["ortho"];const hh={init:nh,forward:oh,inverse:rh,names:lh};var H={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},F={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function ch(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=E-U/2?this.face=H.TOP:this.lat0<=-(E-U/2)?this.face=H.BOTTOM:Math.abs(this.long0)<=U?this.face=H.FRONT:Math.abs(this.long0)<=E+U?this.face=this.long0>0?H.RIGHT:H.LEFT:this.face=H.BACK,this.es!==0&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)}function gh(e){var t={x:0,y:0},i,s,a,o,l,r,h={value:0};if(e.x-=this.long0,this.es!==0?i=Math.atan(this.one_minus_f_squared*Math.tan(e.y)):i=e.y,s=e.x,this.face===H.TOP)o=E-i,s>=U&&s<=E+U?(h.value=F.AREA_0,a=s-E):s>E+U||s<=-(E+U)?(h.value=F.AREA_1,a=s>0?s-Z:s+Z):s>-(E+U)&&s<=-U?(h.value=F.AREA_2,a=s+E):(h.value=F.AREA_3,a=s);else if(this.face===H.BOTTOM)o=E+i,s>=U&&s<=E+U?(h.value=F.AREA_0,a=-s+E):s<U&&s>=-U?(h.value=F.AREA_1,a=-s):s<-U&&s>=-(E+U)?(h.value=F.AREA_2,a=-s-E):(h.value=F.AREA_3,a=s>0?-s+Z:-s-Z);else{var c,u,g,d,C,m,p;this.face===H.RIGHT?s=Ht(s,+E):this.face===H.BACK?s=Ht(s,+Z):this.face===H.LEFT&&(s=Ht(s,-E)),d=Math.sin(i),C=Math.cos(i),m=Math.sin(s),p=Math.cos(s),c=C*p,u=C*m,g=d,this.face===H.FRONT?(o=Math.acos(c),a=Ie(o,g,u,h)):this.face===H.RIGHT?(o=Math.acos(u),a=Ie(o,g,-c,h)):this.face===H.BACK?(o=Math.acos(-c),a=Ie(o,g,-u,h)):this.face===H.LEFT?(o=Math.acos(-u),a=Ie(o,g,c,h)):(o=a=0,h.value=F.AREA_0)}return r=Math.atan(12/Z*(a+Math.acos(Math.sin(a)*Math.cos(U))-E)),l=Math.sqrt((1-Math.cos(o))/(Math.cos(r)*Math.cos(r))/(1-Math.cos(Math.atan(1/Math.cos(a))))),h.value===F.AREA_1?r+=E:h.value===F.AREA_2?r+=Z:h.value===F.AREA_3&&(r+=1.5*Z),t.x=l*Math.cos(r),t.y=l*Math.sin(r),t.x=t.x*this.a+this.x0,t.y=t.y*this.a+this.y0,e.x=t.x,e.y=t.y,e}function dh(e){var t={lam:0,phi:0},i,s,a,o,l,r,h,c,u,g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,s=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),i=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=F.AREA_0:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=F.AREA_1,i-=E):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=F.AREA_2,i=i<0?i+Z:i-Z):(g.value=F.AREA_3,i+=E),u=Z/12*Math.tan(i),l=Math.sin(u)/(Math.cos(u)-1/Math.sqrt(2)),r=Math.atan(l),a=Math.cos(i),o=Math.tan(s),h=1-a*a*o*o*(1-Math.cos(Math.atan(1/Math.cos(r)))),h<-1?h=-1:h>1&&(h=1),this.face===H.TOP)c=Math.acos(h),t.phi=E-c,g.value===F.AREA_0?t.lam=r+E:g.value===F.AREA_1?t.lam=r<0?r+Z:r-Z:g.value===F.AREA_2?t.lam=r-E:t.lam=r;else if(this.face===H.BOTTOM)c=Math.acos(h),t.phi=c-E,g.value===F.AREA_0?t.lam=-r+E:g.value===F.AREA_1?t.lam=-r:g.value===F.AREA_2?t.lam=-r-E:t.lam=r<0?-r-Z:-r+Z;else{var d,C,m;d=h,u=d*d,u>=1?m=0:m=Math.sqrt(1-u)*Math.sin(r),u+=m*m,u>=1?C=0:C=Math.sqrt(1-u),g.value===F.AREA_1?(u=C,C=-m,m=u):g.value===F.AREA_2?(C=-C,m=-m):g.value===F.AREA_3&&(u=C,C=m,m=-u),this.face===H.RIGHT?(u=d,d=-C,C=u):this.face===H.BACK?(d=-d,C=-C):this.face===H.LEFT&&(u=d,d=C,C=-u),t.phi=Math.acos(-m)-E,t.lam=Math.atan2(C,d),this.face===H.RIGHT?t.lam=Ht(t.lam,-E):this.face===H.BACK?t.lam=Ht(t.lam,-Z):this.face===H.LEFT&&(t.lam=Ht(t.lam,+E))}if(this.es!==0){var p,I,f;p=t.phi<0?1:0,I=Math.tan(t.phi),f=this.b/Math.sqrt(I*I+this.one_minus_f_squared),t.phi=Math.atan(Math.sqrt(this.a*this.a-f*f)/(this.one_minus_f*f)),p&&(t.phi=-t.phi)}return t.lam+=this.long0,e.x=t.lam,e.y=t.phi,e}function Ie(e,t,i,s){var a;return e<x?(s.value=F.AREA_0,a=0):(a=Math.atan2(t,i),Math.abs(a)<=U?s.value=F.AREA_0:a>U&&a<=E+U?(s.value=F.AREA_1,a-=E):a>E+U||a<=-(E+U)?(s.value=F.AREA_2,a=a>=0?a-Z:a+Z):(s.value=F.AREA_3,a+=E)),a}function Ht(e,t){var i=e+t;return i<-Z?i+=he:i>+Z&&(i-=he),i}var uh=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const Ah={init:ch,forward:gh,inverse:dh,names:uh};var ci=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-986701e-12],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,18736e-12],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,934959e-12],[.7986,-.00755338,-500009e-10,935324e-12],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],re=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-126793e-14,422642e-15],[.124,.0124,507171e-14,-160604e-14],[.186,.0123999,-190189e-13,600152e-14],[.248,.0124002,710039e-13,-224e-10],[.31,.0123992,-264997e-12,835986e-13],[.372,.0124029,988983e-12,-311994e-12],[.434,.0123893,-369093e-11,-435621e-12],[.4958,.0123198,-102252e-10,-345523e-12],[.5571,.0121916,-154081e-10,-582288e-12],[.6176,.0119938,-241424e-10,-525327e-12],[.6769,.011713,-320223e-10,-516405e-12],[.7346,.0113541,-397684e-10,-609052e-12],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-140374e-14],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],zs=.8487,js=1.3523,Gs=mt/5,Ch=1/Gs,jt=18,Te=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))},mh=function(e,t){return e[1]+t*(2*e[2]+t*3*e[3])};function fh(e,t,i,s){for(var a=t;s;--s){var o=e(a);if(a-=o,Math.abs(o)<i)break}return a}function Ih(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function ph(e){var t=_(e.x-this.long0),i=Math.abs(e.y),s=Math.floor(i*Gs);s<0?s=0:s>=jt&&(s=jt-1),i=mt*(i-Ch*s);var a={x:Te(ci[s],i)*t,y:Te(re[s],i)};return e.y<0&&(a.y=-a.y),a.x=a.x*this.a*zs+this.x0,a.y=a.y*this.a*js+this.y0,a}function vh(e){var t={x:(e.x-this.x0)/(this.a*zs),y:Math.abs(e.y-this.y0)/(this.a*js)};if(t.y>=1)t.x/=ci[jt][0],t.y=e.y<0?-E:E;else{var i=Math.floor(t.y*jt);for(i<0?i=0:i>=jt&&(i=jt-1);;)if(re[i][0]>t.y)--i;else if(re[i+1][0]<=t.y)++i;else break;var s=re[i],a=5*(t.y-s[0])/(re[i+1][0]-s[0]);a=fh(function(o){return(Te(s,o)-t.y)/mh(s,o)},a,x,100),t.x/=Te(ci[i],a),t.y=(5*i+a)*J,e.y<0&&(t.y=-t.y)}return t.x=_(t.x+this.long0),t}var yh=["Robinson","robin"];const bh={init:Ih,forward:ph,inverse:vh,names:yh};function Mh(){this.name="geocent"}function Eh(e){var t=ks(e,this.es,this.a);return t}function wh(e){var t=_s(e,this.es,this.a,this.b);return t}var Oh=["Geocentric","geocentric","geocent","Geocent"];const xh={init:Mh,forward:Eh,inverse:wh,names:Oh};var K={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},Qt={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};function kh(){if(Object.keys(Qt).forEach((function(i){if(typeof this[i]>"u")this[i]=Qt[i].def;else{if(Qt[i].num&&isNaN(this[i]))throw new Error("Invalid parameter value, must be numeric "+i+" = "+this[i]);Qt[i].num&&(this[i]=parseFloat(this[i]))}Qt[i].degrees&&(this[i]=this[i]*J)}).bind(this)),Math.abs(Math.abs(this.lat0)-E)<x?this.mode=this.lat0<0?K.S_POLE:K.N_POLE:Math.abs(this.lat0)<x?this.mode=K.EQUIT:(this.mode=K.OBLIQ,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var e=this.tilt,t=this.azi;this.cg=Math.cos(t),this.sg=Math.sin(t),this.cw=Math.cos(e),this.sw=Math.sin(e)}function _h(e){e.x-=this.long0;var t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a,o;switch(this.mode){case K.OBLIQ:o=this.sinph0*t+this.cosph0*i*s;break;case K.EQUIT:o=i*s;break;case K.S_POLE:o=-t;break;case K.N_POLE:o=t;break}switch(o=this.pn1/(this.p-o),a=o*i*Math.sin(e.x),this.mode){case K.OBLIQ:o*=this.cosph0*t-this.sinph0*i*s;break;case K.EQUIT:o*=t;break;case K.N_POLE:o*=-(i*s);break;case K.S_POLE:o*=i*s;break}var l,r;return l=o*this.cg+a*this.sg,r=1/(l*this.sw*this.h1+this.cw),a=(a*this.cg-o*this.sg)*this.cw*r,o=l*r,e.x=a*this.a,e.y=o*this.a,e}function Sh(e){e.x/=this.a,e.y/=this.a;var t={x:e.x,y:e.y},i,s,a;a=1/(this.pn1-e.y*this.sw),i=this.pn1*e.x*a,s=this.pn1*e.y*this.cw*a,e.x=i*this.cg+s*this.sg,e.y=s*this.cg-i*this.sg;var o=gt(e.x,e.y);if(Math.abs(o)<x)t.x=0,t.y=e.y;else{var l,r;switch(r=1-o*o*this.pfact,r=(this.p-Math.sqrt(r))/(this.pn1/o+o/this.pn1),l=Math.sqrt(1-r*r),this.mode){case K.OBLIQ:t.y=Math.asin(l*this.sinph0+e.y*r*this.cosph0/o),e.y=(l-this.sinph0*Math.sin(t.y))*o,e.x*=r*this.cosph0;break;case K.EQUIT:t.y=Math.asin(e.y*r/o),e.y=l*o,e.x*=r;break;case K.N_POLE:t.y=Math.asin(l),e.y=-e.y;break;case K.S_POLE:t.y=-Math.asin(l);break}t.x=Math.atan2(e.x,e.y)}return e.x=t.x+this.long0,e.y=t.y,e}var Nh=["Tilted_Perspective","tpers"];const Ph={init:kh,forward:_h,inverse:Sh,names:Nh};function Th(){if(this.flip_axis=this.sweep==="x"?1:0,this.h=Number(this.h),this.radius_g_1=this.h/this.a,this.radius_g_1<=0||this.radius_g_1>1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,this.es!==0){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")}function Lh(e){var t=e.x,i=e.y,s,a,o,l;if(t=t-this.long0,this.shape==="ellipse"){i=Math.atan(this.radius_p2*Math.tan(i));var r=this.radius_p/gt(this.radius_p*Math.cos(i),Math.sin(i));if(a=r*Math.cos(t)*Math.cos(i),o=r*Math.sin(t)*Math.cos(i),l=r*Math.sin(i),(this.radius_g-a)*a-o*o-l*l*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(o/gt(l,s)),e.y=this.radius_g_1*Math.atan(l/s)):(e.x=this.radius_g_1*Math.atan(o/s),e.y=this.radius_g_1*Math.atan(l/gt(o,s)))}else this.shape==="sphere"&&(s=Math.cos(i),a=Math.cos(t)*s,o=Math.sin(t)*s,l=Math.sin(i),s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(o/gt(l,s)),e.y=this.radius_g_1*Math.atan(l/s)):(e.x=this.radius_g_1*Math.atan(o/s),e.y=this.radius_g_1*Math.atan(l/gt(o,s))));return e.x=e.x*this.a,e.y=e.y*this.a,e}function Dh(e){var t=-1,i=0,s=0,a,o,l,r;if(e.x=e.x/this.a,e.y=e.y/this.a,this.shape==="ellipse"){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*gt(1,s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*gt(1,i));var h=s/this.radius_p;if(a=i*i+h*h+t*t,o=2*this.radius_g*t,l=o*o-4*a*this.C,l<0)return e.x=Number.NaN,e.y=Number.NaN,e;r=(-o-Math.sqrt(l))/(2*a),t=this.radius_g+r*t,i*=r,s*=r,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if(this.shape==="sphere"){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+i*i)),a=i*i+s*s+t*t,o=2*this.radius_g*t,l=o*o-4*a*this.C,l<0)return e.x=Number.NaN,e.y=Number.NaN,e;r=(-o-Math.sqrt(l))/(2*a),t=this.radius_g+r*t,i*=r,s*=r,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t)}return e.x=e.x+this.long0,e}var Bh=["Geostationary Satellite View","Geostationary_Satellite","geos"];const Vh={init:Th,forward:Lh,inverse:Dh,names:Bh};function Rh(e){e.Proj.projections.add(we),e.Proj.projections.add(Oe),e.Proj.projections.add(Zo),e.Proj.projections.add(tr),e.Proj.projections.add(or),e.Proj.projections.add(gr),e.Proj.projections.add(fr),e.Proj.projections.add(br),e.Proj.projections.add(xr),e.Proj.projections.add(Pr),e.Proj.projections.add(Jr),e.Proj.projections.add(el),e.Proj.projections.add(ol),e.Proj.projections.add(dl),e.Proj.projections.add(fl),e.Proj.projections.add(bl),e.Proj.projections.add(xl),e.Proj.projections.add(Pl),e.Proj.projections.add(Rl),e.Proj.projections.add(Gl),e.Proj.projections.add(Yl),e.Proj.projections.add($l),e.Proj.projections.add(ah),e.Proj.projections.add(hh),e.Proj.projections.add(Ah),e.Proj.projections.add(bh),e.Proj.projections.add(xh),e.Proj.projections.add(Ph),e.Proj.projections.add(Vh)}nt.defaultDatum="WGS84";nt.Proj=ft;nt.WGS84=new nt.Proj("WGS84");nt.Point=Zt;nt.toPoint=Ss;nt.defs=$;nt.nadgrid=Wn;nt.transform=Ne;nt.mgrs=lo;nt.version="__VERSION__";Rh(nt);async function Uh(e){let t=null;const i=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const s of i){const a=e.match(s);if(a!==null){t=a[1];break}}if(t!=null){const s=`EPSG:${t}`;if(nt.defs(s)===void 0){const a=await A.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);ds.registerCRS(s,a)}return s}throw new Error(`Could not find projection for ${e}`)}const vi={loadProjCrsIfNeeded:Uh};async function Fh(e,t,i,s,a){const o=new A.Clock;o.start();const l=[],r=new Map;for(const h of e){const c=h.getGeometry(),u=c==null?void 0:c.getType();if(c==null||u==null)continue;const g=[],d=c.getFlatCoordinates(),C=c.getStride();if(!(C>=3&&d[2]!=null&&d[2]!==a)){for(let m=0;m<d.length;m+=C){const p=new Yt(t,d[m+0],d[m+1],C>=3?d[m+2]:a);g.push(p),l.push(p)}r.set(h.ol_uid,g)}}console.debug(`Fetching altitudes for ${l.length} coordinates from ${e.length} features...`),await i(l);for(const h of e){const c=r.get(h.ol_uid),u=h.getGeometry();if(!(u==null||c==null))switch(u.getType()){case"LineString":case"MultiPoint":{const g=u,d=g.getCoordinates();for(let C=0;C<d.length;C+=1)d[C][2]=c[C].values[2]+s;g.setCoordinates(d);break}case"MultiLineString":case"Polygon":{const g=u,d=g.getCoordinates();let C=0;for(let m=0;m<d.length;m+=1)for(let p=0;p<d[m].length;p+=1)d[m][p][2]=c[C].values[2]+s,C+=1;g.setCoordinates(d);break}case"MultiPolygon":{const g=u,d=g.getCoordinates();let C=0;for(let m=0;m<d.length;m+=1)for(let p=0;p<d[m].length;p+=1)for(let I=0;I<d[m][p].length;I+=1)d[m][p][I][2]=c[C].values[2]+s,C+=1;g.setCoordinates(d);break}case"Point":{const g=u,d=g.getCoordinates();d[2]=c[0].values[2]+s,g.setCoordinates(d);break}}}console.debug(`Fetched all missing altitudes in ${o.getElapsedTime()}s`),o.stop()}function zh(e,t,i){for(const s of e){const a=s.getGeometry();if(a==null)continue;const o=a.getStride(),l=a.getFlatCoordinates();if(!(o>=3&&l[2]!=null&&l[2]!==i))switch(a.getType()){case"LineString":case"MultiPoint":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)h[c][2]=t;r.setCoordinates(h);break}case"MultiLineString":case"Polygon":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)for(let u=0;u<h[c].length;u+=1)h[c][u][2]=t;r.setCoordinates(h);break}case"MultiPolygon":{const r=a,h=r.getCoordinates();for(let c=0;c<h.length;c+=1)for(let u=0;u<h[c].length;u+=1)for(let g=0;g<h[c][u].length;g+=1)h[c][u][g][2]=t;r.setCoordinates(h);break}case"Point":{const r=a,h=r.getCoordinates();h[2]=t,r.setCoordinates(h);break}}}}async function jh(e,t,i,s){const a=await vi.loadProjCrsIfNeeded(i??"EPSG:4326");return t.readFeatures(e,{dataProjection:a,featureProjection:s})}function Gh(e,t,i,s){return Hs(t.readFeatures(e,{dataProjection:i,featureProjection:s}))}function Hh(e,t){const i=new A.Group,s=new Oa,a=e.map(o=>{const l=o.getGeometry();if(l!=null){const r=l.getType();let h;switch(r){case"LineString":h=s.build(l);break;case"MultiLineString":h=s.build(l);break;case"MultiPoint":h=s.build(l);break;case"MultiPolygon":h=s.build(l,t);break;case"Point":h=s.build(l);break;case"Polygon":h=s.build(l,t);break;default:console.warn(`Unsupported type ${r}`),h=null}if(h)for(const[c,u]of Object.entries(o.getProperties()))c!=="geometry"&&(h.userData[c]=u);return h}});for(const o of a)o!=null&&i.add(o);return i}function Hs(e){return e.filter(t=>{var s;if("getType"in t)return!1;const i=(s=t.getGeometry())==null?void 0:s.getType();return!(i==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(i))})}const qt={fetchZCoordinates:Fh,fillZCoordinates:zh,readFeatures:jh,readSimpleFeatures:Gh,toMeshes:Hh,toSimpleFeatures:Hs},Zh=new Ma,Wh=new Ea,qh=new wa,lt={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class Yh{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchJson(this.options.url),s=Qh(i);return await bi(t,s,this.options)}}class yi{constructor(t,i){y(this,"elevation");y(this,"format");y(this,"noDataValue");y(this,"options");this.format=t,this.options=i,this.elevation=i.elevation,this.noDataValue=i.noDataValue}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchText(this.options.url);return await $h(t,i,this.format,this.options)}}class Jh extends yi{constructor(t){super(Wh,t)}}class Xh extends yi{constructor(t){super(qh,t)}}async function bi(e,t,i){const s=await vi.loadProjCrsIfNeeded(i.dataProjection??lt.dataProjection),a=t.flatMap(r=>Zh.readFeatures(r,{dataProjection:s,featureProjection:i.featureProjection})),o=qt.toSimpleFeatures(a);if(i.fetchElevation??lt.fetchElevation){const r=i.fetchElevationFast??lt.fetchElevationFast,h=i.fetchElevationOffset??lt.fetchElevationOffset,c=i.noDataValue??lt.noDataValue;await qt.fetchZCoordinates(o,i.featureProjection,fs(e,r,c),h,c)}return o}function Kh(e,t,i=lt.elevation,s=lt.noDataValue){const a=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??i;return qt.fillZCoordinates(e,a,s),qt.toMeshes(e,t)}function Qh(e){switch(e.type){case"Feature":return[e];case"FeatureCollection":return e.features;case"GeometryCollection":return e.geometries.map(i=>({geometry:i,properties:{},type:"Feature"}));default:return[{geometry:e,properties:{},type:"Feature"}]}}async function $h(e,t,i,s){const a=qt.readSimpleFeatures(t,i,s.dataProjection??lt.dataProjection,s.featureProjection);if(s.fetchElevation??lt.fetchElevation){const l=s.fetchElevationFast??lt.fetchElevationFast,r=s.fetchElevationOffset??lt.fetchElevationOffset,h=s.noDataValue??lt.noDataValue;await qt.fetchZCoordinates(a,s.featureProjection,fs(e,l,h),r,h)}return a}class tc extends Ai{constructor(i){super(new A.Group);y(this,"sources");this.sources=Array.isArray(i)?i:[i]}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=Kh(s,{elevation:i.elevation,fill:{color:Oi.DEFAULT_SURFACE_COLOR},stroke:{color:Oi.DEFAULT_LINE_COLOR}},i.elevation,i.noDataValue);this.object3d.add(a),this.onObjectCreated(a);const o=i.context();A.fillObject3DUserData(a,{filename:o.filename})}this.notifyChange(this.object3d)}}async function ec(e,t){const i=await ui.load(e,ba.GeoPackageLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0}}),s=[];for(const[a,o]of Object.entries(i.tables))for(const l of o.table.features)l.properties||(l.properties={}),l.properties.table=a,s.push(l);return s}class ic{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await ec(this.options.url,this.options.featureProjection);return await bi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}async function sc(e,t){return(await ui.load(e,xa.ShapefileLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class ac{constructor(t){y(this,"elevation");y(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await sc(this.options.url,this.options.featureProjection);return await bi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}class Zs extends A.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new A.Vector2(.5,.5),this.addEventListener("removed",function(){this.traverse(function(i){i.element instanceof i.element.ownerDocument.defaultView.Element&&i.element.parentNode!==null&&i.element.remove()})})}copy(t,i){return super.copy(t,i),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new A.Vector3;new A.Matrix4;new A.Matrix4;new A.Vector3;new A.Vector3;const nc=new A.Vector2,Ws=new A.Color(A.DEFAULT_SHAPE_COLOR),oc=new A.Color,qe=oc.copyLinearToSRGB(Ws),Ki=`#${new A.Color(ka.getContrastColor(Ws)).getHexString()}`,Ye=12,rc="bold",Je=[];class lc extends Ai{constructor(i,s){super(new A.Group);y(this,"sources");y(this,"_labels");y(this,"_styleCallback");y(this,"_textCallback");this.sources=Array.isArray(i)?i:[i],this._labels=[],this._textCallback=(s==null?void 0:s.text)||(()=>"P"),this._styleCallback=s==null?void 0:s.style}getBoundingBox(){const i=this._labels.map(a=>a.position);return new A.Box3().setFromPoints(i)}pick(i,s){const a=this.instance.canvasToNormalizedCoords(i,nc),o=new A.Raycaster;o.setFromCamera(a,this.instance.view.camera);const l=this.pickLabels(o);return l?[{distance:l.position.distanceTo(o.ray.origin),entity:this,isLabelPickResult:!0,object:l,point:l.position}]:[]}updateOpacity(){const i=`${this.opacity*100}%`;this._labels.forEach(s=>s.element.style.opacity=i)}updateVisibility(){this.object3d.traverse(i=>{i.visible=this.visible})}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=new A.Group,o=i.elevation??0,l=h=>new A.Vector3(h[0],h[1],h[2]??o);for(const h of s){const c=h.getGeometry();if(c!=null){const u=c.getType(),g=[];switch(u){case"LineString":case"MultiPoint":g.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":g.push(...c.getCoordinates()[0]);break;case"MultiPolygon":g.push(...c.getCoordinates()[0][0]);break;case"Point":g.push(c.getCoordinates());break}if(g.length>0){const d=g.map(m=>this.createLabel(l(m),h)),C=new A.Group;d.forEach(m=>{C.add(m),this._labels.push(m)});for(const[m,p]of Object.entries(h.getProperties()))m!=="geometry"&&(C.userData[m]=p);a.add(C)}}}this.object3d.add(a),this.onObjectCreated(a);const r=i.context();A.fillObject3DUserData(a,{filename:r.filename})}this.notifyChange(this.object3d)}createLabel(i,s){const a=document.createElement("div"),o=document.createElement("span");this.updateStyle(o,s),o.innerText=this._textCallback(s,i);const l=document.createElement("div");a.appendChild(l),l.appendChild(o);const r=new Zs(a);return r.position.copy(i),r.updateMatrix(),r.updateMatrixWorld(!0),a.addEventListener("mouseover",()=>r.userData.hover=!0),a.addEventListener("mouseleave",()=>r.userData.hover=!1),r}pickLabels(i){let s=null;return this._labels.forEach(a=>{s==null&&(Je.length=0,this.raycastLabel(a,i,Je),Je.length>0&&(s=a))}),s}raycastLabel(i,s,a){i.userData.hover===!0&&a.push({distance:i.position.distanceTo(s.ray.origin),object:i,point:i.position})}updateStyle(i,s){i.style.backgroundColor=`rgb(${qe.r*255} ${qe.g*255} ${qe.b*255})`,i.style.borderWidth="1px",i.style.borderStyle="solid",i.style.borderColor=Ki,i.style.borderRadius=`${A.MathUtils.clamp(Ye-4,5,10)}px`,i.style.color=Ki;const a=A.MathUtils.clamp(Math.round(Ye/4),2,10);i.style.padding=`${a}px ${a}px ${a}px ${a}px`,i.style.fontSize=`${Ye}px`,i.style.fontWeight=rc,i.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(i,s)}}class hc extends pt{constructor(i){super({color:A.DEFAULT_SHAPE_COLOR,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:A.SHAPE_POINT_RADIUS});y(this,"source");this.source=i}async preprocess(){const s=(await this.source.load(this.instance)).at(0),a=s==null?void 0:s.getGeometry();if(s!=null&&a!=null){const o=this.source.elevation??0,l=c=>new A.Vector3(c[0],c[1],c[2]??o);switch(a.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(l));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates()[0].map(l));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(l));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0][0].map(l));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([l(a.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0].map(l));break;default:throw new Error("could not import shape from given geometry: "+a.getType())}const h=this.source.context();A.fillObject3DUserData(this,{filename:h.filename});for(const[c,u]of Object.entries(s.getProperties()))c!=="geometry"&&(this.userData[c]=u)}this.notifyChange(this.object3d)}}const cc=e=>{const{dataset:t,instance:i}=e,s=t.config,a=Array.isArray(s.source)?s.source:[s.source],o=[],l=s.rendering??"mesh";let r;for(const h of a){const c={dataProjection:h.dataProjection??t.get("dataProjection"),elevation:h.elevation??t.get("elevation"),featureProjection:i.referenceCrs,fetchElevation:h.fetchElevation??t.get("fetchElevation"),fetchElevationFast:h.fetchElevationFast??t.get("fetchElevationFast"),fetchElevationOffset:h.fetchElevationOffset??t.get("fetchElevationOffset"),noDataValue:h.noDataValue??t.get("noDataValue"),url:h.url};switch(h.type){case"geojson":o.push(new Yh({...c}));break;case"geopackage":o.push(new ic({...c}));break;case"gpx":o.push(new Jh({...c}));break;case"kml":o.push(new Xh({...c}));break;case"ol":o.push(new yi(h.format,{...c}));break;case"shapefile":o.push(new ac({...c}));break;default:return h}}switch(l){case"label":r=new lc(o,s);break;case"mesh":r=new tc(o);break;case"shape":r=new hc(o[0]);break;default:return l}return Promise.resolve(r)},gi={featureCollection:ja,flatPointcloud:Za,pointcloud:Ya,tiledIfc:Wa,vector:cc};async function gc(e,t){const i={dataset:t,instance:e},s=gi[t.type];if(s==null)throw new Error(`no entity builder found for dataset type '${t.type}'`);const a=await s(i);return"dataset"in a.object3d.userData||(a.object3d.userData.dataset={}),a.object3d.userData.dataset.name=t.name,a}function dc(e,t){gi[e]!=null&&console.warn(`replacing entity builder for dataset type '${e}'`),gi[e]=t}const uc={getEntity:gc},Xe=e=>({name:e.filename,source:{type:"csv",url:e.file},type:"flatPointcloud",visible:!0}),Qi=e=>({name:e.filename,source:{type:e.filename.endsWith(".copc.laz")?"copc":"las",url:e.file},type:"flatPointcloud",visible:!0}),Ac=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,source:{style:"default",type:t,url:e.file},type:"colorLayer",visible:!0}},Cc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpkg":t="geopackage";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,rendering:e.configuration.importedVectorDatasetRendering,source:{fetchElevation:e.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:e.configuration.importedMeshDatasetFetchElevationFast??!1,type:t,url:e.file},type:"vector",visible:!0}},$t=e=>e.configuration.importedVectorDatasetRendering==="overlay"?Ac(e):Cc(e),Le={csv:Xe,dsv:Xe,"geo.json":$t,geojson:$t,gpkg:$t,gpx:$t,kml:$t,las:Qi,laz:Qi,tsv:Xe};function mc(e,t){if(typeof e=="string"){const s=A.getPublicFolderUrl(e),a=new URL(s),r=`${a.origin}${a.pathname}`.split("/").pop();if(r==null)throw new Error("Could not determine filename");const h=r.split(".").at(-1);if(h==null)throw new Error(`File has no extension: ${r}`);return{configuration:t,extension:h,file:e,filename:r}}if(e.name==null)throw new Error("Could not determine filename");const i=e.name.split(".").at(-1);if(i==null)throw new Error(`File has no extension: ${e.name}`);return{configuration:t,extension:i,file:e,filename:e.name}}async function fc(e,t){const i=mc(e,t),s=Ic(i.filename);if(s==null)throw new Error(`File format ${i.extension} not supported`);const a=s(i);return Promise.resolve(new A.Dataset(a))}function Ic(e){const t=Object.keys(Le);for(const i of t)if(e.endsWith(i))return Le[i];return null}function pc(e,t){Le[e]!=null&&console.warn(`replacing loader for file extension '.${e}'`),Le[e]=t}const vc={importFile:fc},qs=[];class yc{constructor(){y(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){pt.isShapePickResult(t)&&this.highlightShape(t);for(const i of qs){const s=i(t);s&&(this._clearHighlight=s)}}}highlightShape(t){const i=t.entity;if(i.userData.highlightable){const s=new A.Color(i.color);i.color=i.userData.highlightColor,i.instance.notifyChange(),this._clearHighlight=()=>{i.color=s,i.instance.notifyChange()}}}}class bc{constructor(t){this.store=t}registerDatasetAction(t){this.store.registerCustomAction(t)}registerDatasetType(t,i){if(i.icon!=null&&(As[t]=i.icon),i.name!=null&&(Cs[t]=i.name),i.highlight&&qs.push(i.highlight),dc(t,i.entityBuilder),i.fileExtensions)if(i.loader==null)console.warn(`File extensions have been specified for dataset ${t}, but no loader function has been provided.`);else for(const s of i.fileExtensions)pc(s,i.loader);i.propertyView&&Me.set(t,i.propertyView),i.attributeExtractor&&A.customAttributeExtractors.push(i.attributeExtractor)}}class Mc{constructor(t){this.store=t}pushNotification(t){this.store.push(t)}}class Ec{constructor(t){this.searchStore=t}registerProvider(t){this.searchStore.registerProvider(t)}}function wc(e){return e.coordinates instanceof Yt}class Oc{constructor(t){this.store=t}addWidget(t){this.store.addWidget(t)}}const Mt=new A.EventDispatcher,Mi=Ot.defineStore("annotations",()=>{const e=n.reactive([]),t=n.ref("normal"),i=n.computed(()=>e.length),s=n.ref(!1),a=n.ref(!0);function o(){return s.value}function l(){return a.value}function r(w){a.value=w}function h(w){s.value=w}function c(){return t.value}function u(w){t.value=w}function g(){return e}function d(w){e.splice(e.indexOf(w),1)}function C(){}function m(){}function p(){}function I(w){e.push(w)}function f(w){return e.some(S=>S.title===w)}function b(w){}function M(){}function O(w){}function k(w){}return{add:I,count:i,createLine:m,createPoint:C,createPolygon:p,edit:b,getAnnotationMode:c,getAnnotations:g,hasAnnotation:f,importAnnotationFile:O,importAnnotationsFiles:k,isUserDrawing:o,remove:d,setAnnotationMode:u,setIsUserDrawing:h,setShowLabels:r,showLabels:l,stopEdition:M}}),Tt=Ot.defineStore("notifications",()=>{function e(t){}return{push:e}});class Ys extends A.EventDispatcher{constructor(i,s,a={}){super();y(this,"properties");y(this,"title");y(this,"uuid");y(this,"_isEditing");y(this,"_object");y(this,"_visible");this.title=i,this._visible=!0,this._isEditing=!1,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(i){this._isEditing=i,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const i=this.object.toGeoJSON({includeAltitudes:!0});return i.id=`${A.Download.getBaseUrl()}#${this.uuid}`,i.properties={...i.properties,title:this.title,updated:new Date().toISOString()},i}}class Q{constructor(t,i,s="info"){y(this,"level");y(this,"text");y(this,"title");this.title=t,this.text=i,this.level=s}static empty(){return new Q("","","info")}}function xc(e){let t=1/0,i=-1/0,s;Array.isArray(e)?s=e:s=e.points;for(let a=0;a<s.length;a+=1)t=Math.min(t,s[a].z),i=Math.max(i,s[a].z);return[t,i]}const kc={getMinMaxAltitudes:xc};function _c(e){return window.prompt("Annotation name",e)}const Js=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),$i=e=>{let t=e.area,i="m²";return t>1e6&&(t=t/1e6,i="km²"),`${Js.format(t)} ${i}`},Sc=new A.Vector3,Nc=new A.Vector3,ts=e=>t=>{const{camera:i}=e,{end:s,start:a}=t,o=Sc.copy(a).project(i),l=Nc.copy(s).project(i),r=Math.pow(100/e.width,2);if(o.distanceToSquared(l)<r)return null;let c=t.length;if(c==null||c<=0)return null;let u="m";return c>1e3&&(c=c/1e3,u="km"),`${Js.format(c)} ${u}`},Ke=e=>{const t=e.shape;return t.userData.annotation?t.userData.annotation.title:null};class Pc{constructor(t,i,s){y(this,"_boundExitEdition");y(this,"_boundOnEndDrag");y(this,"_boundOnKeyDown");y(this,"_boundOnStartDrag");y(this,"_boundUpdateLabels");y(this,"_drawTool");y(this,"_editedShape",null);y(this,"_editedShapePreviousPoints",null);y(this,"_instance");y(this,"_isEditing",!1);y(this,"_notificationStore",Tt());y(this,"_picker");y(this,"_shapes",new Map);y(this,"_store",Mi());this._instance=t,this._picker=s,this._drawTool=new xt({instance:t}),this._boundOnEndDrag=()=>{i.enabled=!0},this._boundOnStartDrag=()=>{i.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:a,args:o,name:l})=>{a(()=>{switch(l){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(o[0]);break;case"importAnnotationFile":this.importAnnotationFile(o[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(o[0]);break;case"remove":this.deleteAnnotation(o[0]);break;case"setShowLabels":this.udpateLabelVisibility(o[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(t=>this._instance.remove(t)),this._drawTool.dispose()}pushNewAnnotation(t,i,s={}){const a=new Ys(t,()=>i,s);return i.userData.annotation=a,a.addEventListener("visible",()=>this.updateDrawing(a)),this._store.add(a),this._shapes.set(a.uuid,i),a}addShape(t,i,s){if(t&&!this._shapes.has(t.id)){const a=t.userData;a.type=i,a.highlightable=!0;let o=s;if(this._store.hasAnnotation(o)){for(let r=1;r<1e3&&(o=`${s} (${r})`,!!this._store.hasAnnotation(o));r+=1);this._store.hasAnnotation(o)&&(o="Achievement unlocked: 1000 annotations with default name")}const l=_c(o);if(l!=null){this.computeMeasurements(t);const r=this.pushNewAnnotation(l,t);this._shapes.set(r.uuid,t)}else this._instance.remove(t)}}computeMeasurements(t){t.userData.measurements={minmax:kc.getMinMaxAltitudes(t)},(t.userData.type==="Polygon"||t.userData.type==="LineString")&&(t.userData.measurements.perimeter=t.getLength()),t.userData.type==="Polygon"&&(t.userData.measurements.area=t.getArea())}deleteAnnotation(t){if(this._shapes.has(t.uuid)){const i=t.object;this._instance.remove(i),this._shapes.delete(t.uuid)}}draw(t,i,s,a){this._store.setIsUserDrawing(!0),this._drawTool[t]({...this.getCreationOptions(),...a}).then(o=>{this.addShape(o,i,s)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:ts(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:Ke,vertexRadius:A.SHAPE_POINT_RADIUS})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:$i})}editAnnotation(t){const i=this._shapes.get(t.uuid);if(!i){console.warn(`no shape found for annotation ${t.uuid}`);return}this._editedShape=i,this._editedShapePreviousPoints=[...i.points],t.isEditing=!0,i.color=A.EDIT_SHAPE_COLOR,i.userData.highlightable=!1,this._instance.notifyChange(i),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[i]})}filterPickResults(t,i){return i?t:t.filter(s=>!pt.isShapePickResult(s))}getCreationOptions(){return{color:A.DEFAULT_SHAPE_COLOR,pick:this.pick.bind(this)}}async importAnnotation(t,i){if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=await this.importShapeFromGeoJSON(t);return this.pushNewAnnotation(t.properties.title,s,t.properties),!0}async importAnnotationFile(t){const i=new Set(this._store.getAnnotations().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}catch{}}async importAnnotationFiles(t){const i=[];let s=0,a=0;const o=[],l=new Set(this._store.getAnnotations().map(r=>r.title));for(const r of t)i.push(this.importBlob(r,l).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{o.push(h.message)}));await Promise.allSettled(i),o.length>0?this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),o=a.type==="FeatureCollection"?a.features:[a];let l=0,r=0;for(const h of o)await this.importAnnotation(h,i)?l++:r++;return{nbImported:l,nbSkipped:r}}async importShapeFromGeoJSON(t){if(t.type!=="Feature")throw new Error("not a valid GeoJSON feature");const i="EPSG:4326",s=o=>{const l=new Yt(i,o[0],o[1],o[2]??0);return l.as(this._instance.referenceCrs,l).toVector3()};let a;switch(t.geometry.type){case"LineString":a=new pt({beforeRemovePoint:xt.limitRemovePointHook(2),color:A.DEFAULT_SHAPE_COLOR,segmentLabelFormatter:ts(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),a.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":a=new pt({beforeRemovePoint:xt.limitRemovePointHook(1),color:A.DEFAULT_SHAPE_COLOR,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Ke,vertexRadius:A.SHAPE_POINT_RADIUS}),a.setPoints(t.geometry.coordinates.map(s));break;case"Point":a=new pt({beforeRemovePoint:xt.inhibitHook,color:A.DEFAULT_SHAPE_COLOR,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Ke,vertexRadius:A.SHAPE_POINT_RADIUS}),a.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":a=new pt({afterRemovePoint:xt.afterRemovePointOfRing,afterUpdatePoint:xt.afterUpdatePointOfRing,beforeRemovePoint:xt.limitRemovePointHook(4),color:A.DEFAULT_SHAPE_COLOR,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:$i}),a.setPoints(t.geometry.coordinates[0].map(s));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+t.geometry.type)}return this.computeMeasurements(a),await this._instance.add(a),a}onKeyDown(t){t.code==="Escape"&&this.stopEdition(!0)}pick(t){let i;switch(this._store.getAnnotationMode()){case"mapOnly":i=this.pickMap(t);break;case"normal":i=this.pickDefault(t);break;case"objectsOnly":i=this.pickFeatures(t);break}return i}pickDefault(t){const i=this._instance.pickObjectsAt(t,{sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}pickFeatures(t){const i=this._picker.getObjectsAt(this._instance,t,0)??[];return this.filterPickResults(i,this._isEditing)}pickMap(t){const i=this._instance.pickObjectsAt(t,{filter:s=>pt.isShapePickResult(s)||_a.isMapPickResult(s),sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}stopEdition(t){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(t&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=A.DEFAULT_SHAPE_COLOR,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(t){this._shapes.forEach(i=>{switch(i.userData.type){case"LineString":i.showSegmentLabels=t;break;case"MultiPoint":case"Point":i.showVertexLabels=t;break;case"Polygon":i.showSurfaceLabel=t;break}})}updateDrawing(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(t=>{t.visible&&t.rebuildLabels()})}}/*!
5
5
  * camera-controls
6
6
  * https://github.com/yomotsu/camera-controls
7
7
  * (c) 2017 @yomotsu
8
8
  * Released under the MIT License.
9
- */const G={LEFT:1,RIGHT:2,MIDDLE:4},p=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Tt={NONE:0,IN:1,OUT:-1};function xt(e){return e.isPerspectiveCamera}function vt(e){return e.isOrthographicCamera}const Lt=Math.PI*2,$i=Math.PI/2,Ys=1e-5,Qt=Math.PI/180;function lt(e,t,i){return Math.max(t,Math.min(i,e))}function j(e,t=Ys){return Math.abs(e)<t}function U(e,t,i=Ys){return j(e-t,i)}function ts(e,t){return Math.round(e/t)*t}function $t(e){return isFinite(e)?e:e<0?-Number.MAX_VALUE:Number.MAX_VALUE}function te(e){return Math.abs(e)<Number.MAX_VALUE?e:e*(1/0)}function Ie(e,t,i,s,a=1/0,o){s=Math.max(1e-4,s);const l=2/s,r=l*o,h=1/(1+r+.48*r*r+.235*r*r*r);let c=e-t;const u=t,g=a*s;c=lt(c,-g,g),t=e-c;const d=(i.value+l*c)*o;i.value=(i.value-l*d)*h;let C=t+(c+d)*h;return u-e>0==C>u&&(C=u,i.value=(C-u)/o),C}function es(e,t,i,s,a=1/0,o,l){s=Math.max(1e-4,s);const r=2/s,h=r*o,c=1/(1+h+.48*h*h+.235*h*h*h);let u=t.x,g=t.y,d=t.z,C=e.x-u,f=e.y-g,m=e.z-d;const v=u,I=g,b=d,M=a*s,O=M*M,_=C*C+f*f+m*m;if(_>O){const Fe=Math.sqrt(_);C=C/Fe*M,f=f/Fe*M,m=m/Fe*M}u=e.x-C,g=e.y-f,d=e.z-m;const w=(i.x+r*C)*o,S=(i.y+r*f)*o,D=(i.z+r*m)*o;i.x=(i.x-r*w)*c,i.y=(i.y-r*S)*c,i.z=(i.z-r*D)*c,l.x=u+(C+w)*c,l.y=g+(f+S)*c,l.z=d+(m+D)*c;const T=v-e.x,R=I-e.y,B=b-e.z,K=l.x-v,Jt=l.y-I,oa=l.z-b;return T*K+R*Jt+B*oa>0&&(l.x=v,l.y=I,l.z=b,i.x=(l.x-v)/o,i.y=(l.y-I)/o,i.z=(l.z-b)/o),l}function Ke(e,t){t.set(0,0),e.forEach(i=>{t.x+=i.clientX,t.y+=i.clientY}),t.x/=e.length,t.y/=e.length}function Qe(e,t){return vt(e)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Tc{constructor(){this._listeners={}}addEventListener(t,i){const s=this._listeners;s[t]===void 0&&(s[t]=[]),s[t].indexOf(i)===-1&&s[t].push(i)}hasEventListener(t,i){const s=this._listeners;return s[t]!==void 0&&s[t].indexOf(i)!==-1}removeEventListener(t,i){const a=this._listeners[t];if(a!==void 0){const o=a.indexOf(i);o!==-1&&a.splice(o,1)}}removeAllEventListeners(t){if(!t){this._listeners={};return}Array.isArray(this._listeners[t])&&(this._listeners[t].length=0)}dispatchEvent(t){const s=this._listeners[t.type];if(s!==void 0){t.target=this;const a=s.slice(0);for(let o=0,l=a.length;o<l;o++)a[o].call(this,t)}}}var $e;const Lc="2.10.1",pe=1/8,Dc=/Mac/.test(($e=globalThis==null?void 0:globalThis.navigator)===null||$e===void 0?void 0:$e.platform);let N,is,ve,ti,tt,L,V,Dt,ee,dt,ut,_t,ss,as,nt,ie,Bt,ns,ei,os,ii,si,ye;class st extends Tc{static install(t){N=t.THREE,is=Object.freeze(new N.Vector3(0,0,0)),ve=Object.freeze(new N.Vector3(0,1,0)),ti=Object.freeze(new N.Vector3(0,0,1)),tt=new N.Vector2,L=new N.Vector3,V=new N.Vector3,Dt=new N.Vector3,ee=new N.Vector3,dt=new N.Vector3,ut=new N.Vector3,_t=new N.Vector3,ss=new N.Vector3,as=new N.Vector3,nt=new N.Spherical,ie=new N.Spherical,Bt=new N.Box3,ns=new N.Box3,ei=new N.Sphere,os=new N.Quaternion,ii=new N.Quaternion,si=new N.Matrix4,ye=new N.Raycaster}static get ACTION(){return p}set verticalDragToForward(t){console.warn("camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.")}constructor(t,i){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=p.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Tt.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new N.Vector3,this._focalOffsetVelocity=new N.Vector3,this._zoomVelocity={value:0},this._truckInternal=(I,b,M,O)=>{let _,w;if(xt(this._camera)){const S=L.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*Qt,T=S.length()*Math.tan(D*.5);_=this.truckSpeed*I*T/this._elementRect.height,w=this.truckSpeed*b*T/this._elementRect.height}else if(vt(this._camera)){const S=this._camera;_=this.truckSpeed*I*(S.right-S.left)/S.zoom/this._elementRect.width,w=this.truckSpeed*b*(S.top-S.bottom)/S.zoom/this._elementRect.height}else return;O?(M?this.setFocalOffset(this._focalOffsetEnd.x+_,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(_,0,!0),this.forward(-w,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+_,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(_,w,!0)},this._rotateInternal=(I,b)=>{const M=Lt*this.azimuthRotateSpeed*I/this._elementRect.height,O=Lt*this.polarRotateSpeed*b/this._elementRect.height;this.rotate(M,O,!0)},this._dollyInternal=(I,b,M)=>{const O=Math.pow(.95,-I*this.dollySpeed),_=this._sphericalEnd.radius,w=this._sphericalEnd.radius*O,S=lt(w,this.minDistance,this.maxDistance),D=S-w;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(w,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?w:S)-_,this._dollyControlCoord.set(b,M)),this._lastDollyDirection=Math.sign(-I)},this._zoomInternal=(I,b,M)=>{const O=Math.pow(.95,I*this.dollySpeed),_=this._zoom,w=this._zoom*O;this.zoomTo(w,!0),this.dollyToCursor&&(this._changedZoom+=w-_,this._dollyControlCoord.set(b,M))},typeof N>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=t,this._yAxisUpSpace=new N.Quaternion().setFromUnitVectors(this._camera.up,ve),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=p.NONE,this._target=new N.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new N.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new N.Spherical().setFromVector3(L.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new N.Vector3,new N.Vector3,new N.Vector3,new N.Vector3],this._updateNearPlaneCorners(),this._boundary=new N.Box3(new N.Vector3(-1/0,-1/0,-1/0),new N.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new N.Vector2,this.mouseButtons={left:p.ROTATE,middle:p.DOLLY,right:p.TRUCK,wheel:xt(this._camera)?p.DOLLY:vt(this._camera)?p.ZOOM:p.NONE},this.touches={one:p.TOUCH_ROTATE,two:xt(this._camera)?p.TOUCH_DOLLY_TRUCK:vt(this._camera)?p.TOUCH_ZOOM_TRUCK:p.NONE,three:p.TOUCH_TRUCK};const s=new N.Vector2,a=new N.Vector2,o=new N.Vector2,l=I=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),_=I.clientX/O.width,w=I.clientY/O.height;if(_<this._interactiveArea.left||_>this._interactiveArea.right||w<this._interactiveArea.top||w>this._interactiveArea.bottom)return}const b=I.pointerType!=="mouse"?null:(I.buttons&G.LEFT)===G.LEFT?G.LEFT:(I.buttons&G.MIDDLE)===G.MIDDLE?G.MIDDLE:(I.buttons&G.RIGHT)===G.RIGHT?G.RIGHT:null;if(b!==null){const O=this._findPointerByMouseButton(b);O&&this._disposePointer(O)}if((I.buttons&G.LEFT)===G.LEFT&&this._lockedPointer)return;const M={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY,deltaX:0,deltaY:0,mouseButton:b};this._activePointers.push(M),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,d(I)},r=I=>{I.cancelable&&I.preventDefault();const b=I.pointerId,M=this._lockedPointer||this._findPointerById(b);if(M){if(M.clientX=I.clientX,M.clientY=I.clientY,M.deltaX=I.movementX,M.deltaY=I.movementY,this._state=0,I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(I.buttons&G.LEFT)===G.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);C()}},h=I=>{const b=this._findPointerById(I.pointerId);if(!(b&&b===this._lockedPointer)){if(b&&this._disposePointer(b),I.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=p.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=p.NONE;f()}};let c=-1;const u=I=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===p.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const w=this._domElement.getBoundingClientRect(),S=I.clientX/w.width,D=I.clientY/w.height;if(S<this._interactiveArea.left||S>this._interactiveArea.right||D<this._interactiveArea.top||D>this._interactiveArea.bottom)return}if(I.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===p.ROTATE||this.mouseButtons.wheel===p.TRUCK){const w=performance.now();c-w<1e3&&this._getClientRect(this._elementRect),c=w}const b=Dc?-1:-3,M=I.deltaMode===1||I.ctrlKey?I.deltaY/b:I.deltaY/(b*10),O=this.dollyToCursor?(I.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,_=this.dollyToCursor?(I.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case p.ROTATE:{this._rotateInternal(I.deltaX,I.deltaY),this._isUserControllingRotate=!0;break}case p.TRUCK:{this._truckInternal(I.deltaX,I.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case p.SCREEN_PAN:{this._truckInternal(I.deltaX,I.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case p.OFFSET:{this._truckInternal(I.deltaX,I.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case p.DOLLY:{this._dollyInternal(-M,O,_),this._isUserControllingDolly=!0;break}case p.ZOOM:{this._zoomInternal(-M,O,_),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},g=I=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===st.ACTION.NONE){const b=I instanceof PointerEvent?I.pointerId:0,M=this._findPointerById(b);M&&this._disposePointer(M),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h);return}I.preventDefault()}},d=I=>{if(!this._enabled)return;if(Ke(this._activePointers,tt),this._getClientRect(this._elementRect),s.copy(tt),a.copy(tt),this._activePointers.length>=2){const M=tt.x-this._activePointers[1].clientX,O=tt.y-this._activePointers[1].clientY,_=Math.sqrt(M*M+O*O);o.set(0,_);const w=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;a.set(w,S)}if(this._state=0,!I)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in I&&I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(I.buttons&G.LEFT)===G.LEFT&&(this._state=this._state|this.mouseButtons.left),(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&p.ROTATE)===p.ROTATE||(this._state&p.TOUCH_ROTATE)===p.TOUCH_ROTATE||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&p.TRUCK)===p.TRUCK||(this._state&p.SCREEN_PAN)===p.SCREEN_PAN||(this._state&p.TOUCH_TRUCK)===p.TOUCH_TRUCK||(this._state&p.TOUCH_SCREEN_PAN)===p.TOUCH_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&p.DOLLY)===p.DOLLY||(this._state&p.TOUCH_DOLLY)===p.TOUCH_DOLLY||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&p.ZOOM)===p.ZOOM||(this._state&p.TOUCH_ZOOM)===p.TOUCH_ZOOM||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_ZOOM_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&p.OFFSET)===p.OFFSET||(this._state&p.TOUCH_OFFSET)===p.TOUCH_OFFSET||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},C=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Ke(this._activePointers,tt);const b=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=b?-b.deltaX:a.x-tt.x,O=b?-b.deltaY:a.y-tt.y;if(a.copy(tt),((this._state&p.ROTATE)===p.ROTATE||(this._state&p.TOUCH_ROTATE)===p.TOUCH_ROTATE||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,O),this._isUserControllingRotate=!0),(this._state&p.DOLLY)===p.DOLLY||(this._state&p.ZOOM)===p.ZOOM){const _=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&p.DOLLY)===p.DOLLY?(this._dollyInternal(S*O*pe,_,w),this._isUserControllingDolly=!0):(this._zoomInternal(S*O*pe,_,w),this._isUserControllingZoom=!0)}if((this._state&p.TOUCH_DOLLY)===p.TOUCH_DOLLY||(this._state&p.TOUCH_ZOOM)===p.TOUCH_ZOOM||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_ZOOM_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_ZOOM_ROTATE)===p.TOUCH_ZOOM_ROTATE){const _=tt.x-this._activePointers[1].clientX,w=tt.y-this._activePointers[1].clientY,S=Math.sqrt(_*_+w*w),D=o.y-S;o.set(0,S);const T=this.dollyToCursor?(a.x-this._elementRect.x)/this._elementRect.width*2-1:0,R=this.dollyToCursor?(a.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&p.TOUCH_DOLLY)===p.TOUCH_DOLLY||(this._state&p.TOUCH_DOLLY_ROTATE)===p.TOUCH_DOLLY_ROTATE||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*pe,T,R),this._isUserControllingDolly=!0):(this._zoomInternal(D*pe,T,R),this._isUserControllingZoom=!0)}((this._state&p.TRUCK)===p.TRUCK||(this._state&p.TOUCH_TRUCK)===p.TOUCH_TRUCK||(this._state&p.TOUCH_DOLLY_TRUCK)===p.TOUCH_DOLLY_TRUCK||(this._state&p.TOUCH_ZOOM_TRUCK)===p.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,O,!1,!1),this._isUserControllingTruck=!0),((this._state&p.SCREEN_PAN)===p.SCREEN_PAN||(this._state&p.TOUCH_SCREEN_PAN)===p.TOUCH_SCREEN_PAN||(this._state&p.TOUCH_DOLLY_SCREEN_PAN)===p.TOUCH_DOLLY_SCREEN_PAN||(this._state&p.TOUCH_ZOOM_SCREEN_PAN)===p.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,O,!1,!0),this._isUserControllingTruck=!0),((this._state&p.OFFSET)===p.OFFSET||(this._state&p.TOUCH_OFFSET)===p.TOUCH_OFFSET||(this._state&p.TOUCH_DOLLY_OFFSET)===p.TOUCH_DOLLY_OFFSET||(this._state&p.TOUCH_ZOOM_OFFSET)===p.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,O,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},f=()=>{Ke(this._activePointers,tt),a.copy(tt),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",m),this._domElement.ownerDocument.addEventListener("pointerlockerror",v),this._domElement.ownerDocument.addEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),d())},this.unlockPointer=()=>{var I,b,M;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(I=this._domElement)===null||I===void 0||I.ownerDocument.exitPointerLock(),(b=this._domElement)===null||b===void 0||b.ownerDocument.removeEventListener("pointerlockchange",m),(M=this._domElement)===null||M===void 0||M.ownerDocument.removeEventListener("pointerlockerror",v),this.cancel()};const m=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},v=()=>{this.unlockPointer()};this._addAllEventListeners=I=>{this._domElement=I,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",l),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",g)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",l),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",g),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("pointerlockchange",m),this._domElement.ownerDocument.removeEventListener("pointerlockerror",v))},this.cancel=()=>{this._state!==p.NONE&&(this._state=p.NONE,this._activePointers.length=0,f())},i&&this.connect(i),this.update(0)}get camera(){return this._camera}set camera(t){this._camera=t,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._domElement&&(t?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(t){this._spherical.radius===t&&this._sphericalEnd.radius===t||(this._spherical.radius=t,this._sphericalEnd.radius=t,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(t){this._spherical.theta===t&&this._sphericalEnd.theta===t||(this._spherical.theta=t,this._sphericalEnd.theta=t,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(t){this._spherical.phi===t&&this._sphericalEnd.phi===t||(this._spherical.phi=t,this._sphericalEnd.phi=t,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(t){this._boundaryEnclosesCamera=t,this._needsUpdate=!0}set interactiveArea(t){this._interactiveArea.width=lt(t.width,0,1),this._interactiveArea.height=lt(t.height,0,1),this._interactiveArea.x=lt(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=lt(t.y,0,1-this._interactiveArea.height)}addEventListener(t,i){super.addEventListener(t,i)}removeEventListener(t,i){super.removeEventListener(t,i)}rotate(t,i,s=!1){return this.rotateTo(this._sphericalEnd.theta+t,this._sphericalEnd.phi+i,s)}rotateAzimuthTo(t,i=!1){return this.rotateTo(t,this._sphericalEnd.phi,i)}rotatePolarTo(t,i=!1){return this.rotateTo(this._sphericalEnd.theta,t,i)}rotateTo(t,i,s=!1){this._isUserControllingRotate=!1;const a=lt(t,this.minAzimuthAngle,this.maxAzimuthAngle),o=lt(i,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=a,this._sphericalEnd.phi=o,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const l=!s||U(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&U(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(l)}dolly(t,i=!1){return this.dollyTo(this._sphericalEnd.radius-t,i)}dollyTo(t,i=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Tt.NONE,this._changedDolly=0,this._dollyToNoClamp(lt(t,this.minDistance,this.maxDistance),i)}_dollyToNoClamp(t,i=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const l=this._collisionTest(),r=U(l,this._spherical.radius);if(!(s>t)&&r)return Promise.resolve();this._sphericalEnd.radius=Math.min(t,l)}else this._sphericalEnd.radius=t;this._needsUpdate=!0,i||(this._spherical.radius=this._sphericalEnd.radius);const o=!i||U(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(o)}dollyInFixed(t,i=!1){this._targetEnd.add(this._getCameraDirection(ee).multiplyScalar(t)),i||this._target.copy(this._targetEnd);const s=!i||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(t,i=!1){return this.zoomTo(this._zoomEnd+t,i)}zoomTo(t,i=!1){this._isUserControllingZoom=!1,this._zoomEnd=lt(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,i||(this._zoom=this._zoomEnd);const s=!i||U(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(t,i,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(t,i,s)}truck(t,i,s=!1){this._camera.updateMatrix(),dt.setFromMatrixColumn(this._camera.matrix,0),ut.setFromMatrixColumn(this._camera.matrix,1),dt.multiplyScalar(t),ut.multiplyScalar(-i);const a=L.copy(dt).add(ut),o=V.copy(this._targetEnd).add(a);return this.moveTo(o.x,o.y,o.z,s)}forward(t,i=!1){L.setFromMatrixColumn(this._camera.matrix,0),L.crossVectors(this._camera.up,L),L.multiplyScalar(t);const s=V.copy(this._targetEnd).add(L);return this.moveTo(s.x,s.y,s.z,i)}elevate(t,i=!1){return L.copy(this._camera.up).multiplyScalar(t),this.moveTo(this._targetEnd.x+L.x,this._targetEnd.y+L.y,this._targetEnd.z+L.z,i)}moveTo(t,i,s,a=!1){this._isUserControllingTruck=!1;const o=L.set(t,i,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,o,this.boundaryFriction),this._needsUpdate=!0,a||this._target.copy(this._targetEnd);const l=!a||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(l)}lookInDirectionOf(t,i,s,a=!1){const r=L.set(t,i,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(r.x,r.y,r.z,a)}fitToBox(t,i,{cover:s=!1,paddingLeft:a=0,paddingRight:o=0,paddingBottom:l=0,paddingTop:r=0}={}){const h=[],c=t.isBox3?Bt.copy(t):Bt.setFromObject(t);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=ts(this._sphericalEnd.theta,$i),g=ts(this._sphericalEnd.phi,$i);h.push(this.rotateTo(u,g,i));const d=L.setFromSpherical(this._sphericalEnd).normalize(),C=os.setFromUnitVectors(d,ti),f=U(Math.abs(d.y),1);f&&C.multiply(ii.setFromAxisAngle(ve,u)),C.multiply(this._yAxisUpSpaceInverse);const m=ns.makeEmpty();V.copy(c.min).applyQuaternion(C),m.expandByPoint(V),V.copy(c.min).setX(c.max.x).applyQuaternion(C),m.expandByPoint(V),V.copy(c.min).setY(c.max.y).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).setZ(c.min.z).applyQuaternion(C),m.expandByPoint(V),V.copy(c.min).setZ(c.max.z).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).setY(c.min.y).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).setX(c.min.x).applyQuaternion(C),m.expandByPoint(V),V.copy(c.max).applyQuaternion(C),m.expandByPoint(V),m.min.x-=a,m.min.y-=l,m.max.x+=o,m.max.y+=r,C.setFromUnitVectors(ti,d),f&&C.premultiply(ii.invert()),C.premultiply(this._yAxisUpSpace);const v=m.getSize(L),I=m.getCenter(V).applyQuaternion(C);if(xt(this._camera)){const b=this.getDistanceToFitBox(v.x,v.y,v.z,s);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.dollyTo(b,i)),h.push(this.setFocalOffset(0,0,0,i))}else if(vt(this._camera)){const b=this._camera,M=b.right-b.left,O=b.top-b.bottom,_=s?Math.max(M/v.x,O/v.y):Math.min(M/v.x,O/v.y);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.zoomTo(_,i)),h.push(this.setFocalOffset(0,0,0,i))}return Promise.all(h)}fitToSphere(t,i){const s=[],o="isObject3D"in t?st.createBoundingSphere(t,ei):ei.copy(t);if(s.push(this.moveTo(o.center.x,o.center.y,o.center.z,i)),xt(this._camera)){const l=this.getDistanceToFitSphere(o.radius);s.push(this.dollyTo(l,i))}else if(vt(this._camera)){const l=this._camera.right-this._camera.left,r=this._camera.top-this._camera.bottom,h=2*o.radius,c=Math.min(l/h,r/h);s.push(this.zoomTo(c,i))}return s.push(this.setFocalOffset(0,0,0,i)),Promise.all(s)}setLookAt(t,i,s,a,o,l,r=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Tt.NONE,this._changedDolly=0;const h=V.set(a,o,l),c=L.set(t,i,s);this._targetEnd.copy(h),this._sphericalEnd.setFromVector3(c.sub(h).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,r||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!r||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold)&&U(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&U(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&U(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(t,i,s,a,o,l,r,h,c,u,g,d,C,f=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Tt.NONE,this._changedDolly=0;const m=L.set(a,o,l),v=V.set(t,i,s);nt.setFromVector3(v.sub(m).applyQuaternion(this._yAxisUpSpace));const I=Dt.set(u,g,d),b=V.set(r,h,c);ie.setFromVector3(b.sub(I).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(m.lerp(I,C));const M=ie.theta-nt.theta,O=ie.phi-nt.phi,_=ie.radius-nt.radius;this._sphericalEnd.set(nt.radius+_*C,nt.phi+O*C,nt.theta+M*C),this.normalizeRotations(),this._needsUpdate=!0,f||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const w=!f||U(this._target.x,this._targetEnd.x,this.restThreshold)&&U(this._target.y,this._targetEnd.y,this.restThreshold)&&U(this._target.z,this._targetEnd.z,this.restThreshold)&&U(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&U(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&U(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(w)}setPosition(t,i,s,a=!1){return this.setLookAt(t,i,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,a)}setTarget(t,i,s,a=!1){const o=this.getPosition(L),l=this.setLookAt(o.x,o.y,o.z,t,i,s,a);return this._sphericalEnd.phi=lt(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),l}setFocalOffset(t,i,s,a=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(t,i,s),this._needsUpdate=!0,a||this._focalOffset.copy(this._focalOffsetEnd);const o=!a||U(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&U(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&U(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}setOrbitPoint(t,i,s){this._camera.updateMatrixWorld(),dt.setFromMatrixColumn(this._camera.matrixWorldInverse,0),ut.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_t.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const a=L.set(t,i,s),o=a.distanceTo(this._camera.position),l=a.sub(this._camera.position);dt.multiplyScalar(l.x),ut.multiplyScalar(l.y),_t.multiplyScalar(l.z),L.copy(dt).add(ut).add(_t),L.z=L.z+o,this.dollyTo(o,!1),this.setFocalOffset(-L.x,L.y,-L.z,!1),this.moveTo(t,i,s,!1)}setBoundary(t){if(!t){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(t),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(t,i,s,a){if(t===null){this._viewport=null;return}this._viewport=this._viewport||new N.Vector4,typeof t=="number"?this._viewport.set(t,i,s,a):this._viewport.copy(t)}getDistanceToFitBox(t,i,s,a=!1){if(Qe(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const o=t/i,l=this._camera.getEffectiveFOV()*Qt,r=this._camera.aspect;return((a?o>r:o<r)?i:t/r)*.5/Math.tan(l*.5)+s*.5}getDistanceToFitSphere(t){if(Qe(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const i=this._camera.getEffectiveFOV()*Qt,s=Math.atan(Math.tan(i*.5)*this._camera.aspect)*2,a=1<this._camera.aspect?i:s;return t/Math.sin(a*.5)}getTarget(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._targetEnd:this._target)}getPosition(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).setFromSpherical(i?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(i?this._targetEnd:this._target)}getSpherical(t,i=!0){return(t||new N.Spherical).copy(i?this._sphericalEnd:this._spherical)}getFocalOffset(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%Lt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Lt),this._spherical.theta+=Lt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Lt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!U(this._camera.up.x,this._cameraUp0.x)||!U(this._camera.up.y,this._cameraUp0.y)||!U(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(L);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const i=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,t),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,t),this.zoomTo(this._zoom0,t)];return Promise.all(i)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,ve),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=L.subVectors(this._target,this._camera.position).normalize(),i=V.crossVectors(t,this._camera.up);this._camera.up.crossVectors(i,t).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(L);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(t){const i=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,a=this._sphericalEnd.radius-this._spherical.radius,o=ss.subVectors(this._targetEnd,this._target),l=as.subVectors(this._focalOffsetEnd,this._focalOffset),r=this._zoomEnd-this._zoom;if(j(i))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ie(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,g,1/0,t),this._needsUpdate=!0}if(j(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ie(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,g,1/0,t),this._needsUpdate=!0}if(j(a))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const g=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ie(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,g,this.maxSpeed,t),this._needsUpdate=!0}if(j(o.x)&&j(o.y)&&j(o.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const g=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;es(this._target,this._targetEnd,this._targetVelocity,g,this.maxSpeed,t,this._target),this._needsUpdate=!0}if(j(l.x)&&j(l.y)&&j(l.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const g=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;es(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,g,this.maxSpeed,t,this._focalOffset),this._needsUpdate=!0}if(j(r))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const g=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ie(this._zoom,this._zoomEnd,this._zoomVelocity,g,1/0,t)}if(this.dollyToCursor){if(xt(this._camera)&&this._changedDolly!==0){const g=this._spherical.radius-this._lastDistance,d=this._camera,C=this._getCameraDirection(ee),f=L.copy(C).cross(d.up).normalize();f.lengthSq()===0&&(f.x=1);const m=V.crossVectors(f,C),v=this._sphericalEnd.radius*Math.tan(d.getEffectiveFOV()*Qt*.5),b=(this._sphericalEnd.radius-g-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=Dt.copy(this._targetEnd).add(f.multiplyScalar(this._dollyControlCoord.x*v*d.aspect)).add(m.multiplyScalar(this._dollyControlCoord.y*v)),O=L.copy(this._targetEnd).lerp(M,b),_=this._lastDollyDirection===Tt.IN&&this._spherical.radius<=this.minDistance,w=this._lastDollyDirection===Tt.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(_||w)){this._sphericalEnd.radius-=g,this._spherical.radius-=g;const D=V.copy(C).multiplyScalar(-g);O.add(D)}this._boundary.clampPoint(O,O);const S=V.subVectors(O,this._targetEnd);this._targetEnd.copy(O),this._target.add(S),this._changedDolly-=g,j(this._changedDolly)&&(this._changedDolly=0)}else if(vt(this._camera)&&this._changedZoom!==0){const g=this._zoom-this._lastZoom,d=this._camera,C=L.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(d.near+d.far)/(d.near-d.far)).unproject(d),f=V.set(0,0,-1).applyQuaternion(d.quaternion),m=Dt.copy(C).add(f.multiplyScalar(-C.dot(d.up))),I=-(this._zoom-g-this._zoom)/this._zoom,b=this._getCameraDirection(ee),M=this._targetEnd.dot(b),O=L.copy(this._targetEnd).lerp(m,I),_=O.dot(b),w=b.multiplyScalar(_-M);O.sub(w),this._boundary.clampPoint(O,O);const S=V.subVectors(O,this._targetEnd);this._targetEnd.copy(O),this._target.add(S),this._changedZoom-=g,j(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const h=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,h),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!j(this._focalOffset.x)||!j(this._focalOffset.y)||!j(this._focalOffset.z))&&(dt.setFromMatrixColumn(this._camera.matrix,0),ut.setFromMatrixColumn(this._camera.matrix,1),_t.setFromMatrixColumn(this._camera.matrix,2),dt.multiplyScalar(this._focalOffset.x),ut.multiplyScalar(-this._focalOffset.y),_t.multiplyScalar(this._focalOffset.z),L.copy(dt).add(ut).add(_t),this._camera.position.add(L),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),L.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const u=this._needsUpdate;return u&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):u?(this.dispatchEvent({type:"update"}),j(i,this.restThreshold)&&j(s,this.restThreshold)&&j(a,this.restThreshold)&&j(o.x,this.restThreshold)&&j(o.y,this.restThreshold)&&j(o.z,this.restThreshold)&&j(l.x,this.restThreshold)&&j(l.y,this.restThreshold)&&j(l.z,this.restThreshold)&&j(r,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!u&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=u,this._needsUpdate=!1,u}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:$t(this.maxDistance),minZoom:this.minZoom,maxZoom:$t(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:$t(this.maxPolarAngle),minAzimuthAngle:$t(this.minAzimuthAngle),maxAzimuthAngle:$t(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:L.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(t,i=!1){const s=JSON.parse(t);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=te(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=te(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=te(s.maxPolarAngle),this.minAzimuthAngle=te(s.minAzimuthAngle),this.maxAzimuthAngle=te(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],i),nt.setFromVector3(L.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(nt.theta,nt.phi,i),this.dollyTo(nt.radius,i),this.zoomTo(s.zoom,i),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],i),this._needsUpdate=!0}connect(t){if(this._domElement){console.warn("camera-controls is already connected.");return}t.setAttribute("data-camera-controls-version",Lc),this._addAllEventListeners(t),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(t){return t.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(t){return this._getTargetDirection(t).negate()}_findPointerById(t){return this._activePointers.find(i=>i.pointerId===t)}_findPointerByMouseButton(t){return this._activePointers.find(i=>i.mouseButton===t)}_disposePointer(t){this._activePointers.splice(this._activePointers.indexOf(t),1)}_encloseToBoundary(t,i,s){const a=i.lengthSq();if(a===0)return t;const o=V.copy(i).add(t),r=this._boundary.clampPoint(o,Dt).sub(o),h=r.lengthSq();if(h===0)return t.add(i);if(h===a)return t;if(s===0)return t.add(i).add(r);{const c=1+s*h/i.dot(r);return t.add(V.copy(i).multiplyScalar(c)).add(r.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(xt(this._camera)){const t=this._camera,i=t.near,s=t.getEffectiveFOV()*Qt,a=Math.tan(s*.5)*i,o=a*t.aspect;this._nearPlaneCorners[0].set(-o,-a,0),this._nearPlaneCorners[1].set(o,-a,0),this._nearPlaneCorners[2].set(o,a,0),this._nearPlaneCorners[3].set(-o,a,0)}else if(vt(this._camera)){const t=this._camera,i=1/t.zoom,s=t.left*i,a=t.right*i,o=t.top*i,l=t.bottom*i;this._nearPlaneCorners[0].set(s,o,0),this._nearPlaneCorners[1].set(a,o,0),this._nearPlaneCorners[2].set(a,l,0),this._nearPlaneCorners[3].set(s,l,0)}}_collisionTest(){let t=1/0;if(!(this.colliderMeshes.length>=1)||Qe(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(ee);si.lookAt(is,s,this._camera.up);for(let a=0;a<4;a++){const o=V.copy(this._nearPlaneCorners[a]);o.applyMatrix4(si);const l=Dt.addVectors(this._target,o);ye.set(l,s),ye.far=this._spherical.radius+1;const r=ye.intersectObjects(this.colliderMeshes);r.length!==0&&r[0].distance<t&&(t=r[0].distance)}return t}_getClientRect(t){if(!this._domElement)return;const i=this._domElement.getBoundingClientRect();return t.x=i.left,t.y=i.top,this._viewport?(t.x+=this._viewport.x,t.y+=i.height-this._viewport.w-this._viewport.y,t.width=this._viewport.z,t.height=this._viewport.w):(t.width=i.width,t.height=i.height),t}_createOnRestPromise(t){return t?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(i=>{const s=()=>{this.removeEventListener("rest",s),i()};this.addEventListener("rest",s)}))}_addAllEventListeners(t){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(t){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(t){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(t,i=new N.Sphere){const s=i,a=s.center;Bt.makeEmpty(),t.traverseVisible(l=>{l.isMesh&&Bt.expandByObject(l)}),Bt.getCenter(a);let o=0;return t.traverseVisible(l=>{if(!l.isMesh)return;const r=l;if(!r.geometry)return;const h=r.geometry.clone();h.applyMatrix4(r.matrixWorld);const u=h.attributes.position;for(let g=0,d=u.count;g<d;g++)L.fromBufferAttribute(u,g),o=Math.max(o,a.distanceToSquared(L))}),s.radius=Math.sqrt(o),s}}class Be{constructor(t,i,s){y(this,"camera");y(this,"focalOffset");y(this,"target");this.camera=t,this.target=i,this.focalOffset=s}}class Bc extends Sa{constructor(i,s,a){super(i,a,"Camera Controls");y(this,"camera");y(this,"_boundOnAfterCameraUpdate");y(this,"_cameraPosition");this.camera=s,this._cameraPosition=new Be(new A.Vector3,new A.Vector3,new A.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const o=this.gui.addFolder("Position");o.close(),this._controllers.push(o.add(this._cameraPosition.camera,"x")),this._controllers.push(o.add(this._cameraPosition.camera,"y")),this._controllers.push(o.add(this._cameraPosition.camera,"z"));const l=this.gui.addFolder("Target");l.close(),this._controllers.push(l.add(this._cameraPosition.target,"x")),this._controllers.push(l.add(this._cameraPosition.target,"y")),this._controllers.push(l.add(this._cameraPosition.target,"z"));const r=this.gui.addFolder("Focal offset");r.close(),this._controllers.push(r.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(r.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(r.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}st.install({THREE:{Box3:A.Box3,MathUtils:A.MathUtils,Matrix4:A.Matrix4,Quaternion:A.Quaternion,Raycaster:A.Raycaster,Sphere:A.Sphere,Spherical:A.Spherical,Vector2:A.Vector2,Vector3:A.Vector3,Vector4:A.Vector4}});const Vc=new A.Vector3;class Rc extends A.EventDispatcher{constructor(i,s,a){super();y(this,"_boundOnAfterCameraUpdate");y(this,"_boundOnBeforeCameraUpdate");y(this,"_boundOrbitControlsOnContextMenu");y(this,"_boundOrbitControlsOnKey");y(this,"_boundOrbitControlsOnMouseUp");y(this,"_boundOrbitControlsOnWheel");y(this,"_boundPositionOnMapOnClick");y(this,"_boundPositionOnMapOnContextMenu");y(this,"_boundPositionOnMapOnMouseMove");y(this,"_cameraControlsInspector");y(this,"_clock");y(this,"_cursorManager");y(this,"_giro3dStore",A.useGiro3dStore());y(this,"_instance");y(this,"_orbitControls");y(this,"_picker");y(this,"_pickObjectsAt");y(this,"_store",A.useCameraStore());this._instance=i,this._picker=s,this._cursorManager=a,this._orbitControls=new st(this._instance.view.camera,this._instance.domElement),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=l=>{var r;return((r=this._picker.getFirstFeatureAt(this._instance,l,1))==null?void 0:r.at(0))??null},this._clock=new A.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:l,name:r})=>{switch(r){case"lookTopDownAt":this.lookTopDownAt(l[0]);break;case"setCameraPosition":this.setCamera(l[0]);break;case"setNavigationMode":this.setNavigationMode(l[0]);break}});const o=this._giro3dStore.getInspector();o!=null&&this.initializeInspector(o),this._giro3dStore.$onAction(({after:l,args:r,name:h})=>{l(()=>{switch(h){case"setInspector":this.initializeInspector(r[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(i){this._orbitControls.enabled=i}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls()}executeInteraction(i){this._orbitControls.update(this._clock.getDelta());const s=i();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),s}getCameraPosition(i){const s=this._orbitControls,a=i??new Be(new A.Vector3,new A.Vector3,new A.Vector3);return s.getPosition(a.camera),s.getTarget(a.target),s.getFocalOffset(a.focalOffset),a}goToBox(i,s=!0,a={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const o=this.getBox(i);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(o,s,a)))}async lookAt(i,s,a=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(i.x,i.y,i.z,s.x,s.y,s.z,a))),this._orbitControls.setOrbitPoint(s.x,s.y,s.z)}lookTopDownAt(i,s=!0){const a=new A.Vector3,o=new A.Vector3,l=new A.Vector3(0,0,1),r=this.getBox(i);r.min.z=r.max.z,r.getCenter(a),r.getSize(o);const h=this._orbitControls.getDistanceToFitBox(o.x,o.y,0),c=l.multiplyScalar(h).add(a);return c.x+=o.x/10,c.y-=o.y/10,this.lookAt(c,a,s)}setCamera(i){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(i.camera.x,i.camera.y,i.camera.z,i.target.x,i.target.y,i.target.z,!1),this._orbitControls.setFocalOffset(i.focalOffset.z,i.focalOffset.y,i.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(i,s=4e3){const a=new ce(i.crs,i.west,i.south,s).toVector3(),o=i.centerAsVector3();this.lookAt(a,o,!1)}getBox(i){let s=new A.Box3;if(i.isBox3)s=i.clone();else if(i.isEntity3D){const a=i,o=a.getBoundingBox();o&&!o.isEmpty()?s=o.clone():"extent"in a&&(s=a.extent.toBox3(0,200))}else if(i.isObject3D)s.setFromObject(i);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(s.isEmpty())throw new Error("Could not find bounding box of object");return s.min.z=Math.max(s.min.z,0),s.max.z=Math.min(s.max.z,2e3),s}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._cursorManager.setCursor(null),this._instance.notifyChange())}_enablePositionOnMap(){this._cursorManager.setCursor("street"),this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(i){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),i&&(this._cameraControlsInspector=new Bc(i.gui,this,this._instance),i.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const i=this._clock.getDelta();this._orbitControls.update(i)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(i){const s=this._picker.getMapAt(this._instance,i);if(s){this._disablePositionOnMap();const a=new A.Vector3;this._instance.view.camera.getWorldDirection(a),a.normalize().setLength(3);const o=s.point.clone();o.z+=1.7;const l=o.clone();l.add(a),l.z=o.z,this.lookAt(o,l,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(i){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),i.preventDefault()}onPositionOnMapMouseMove(i){const s=this._picker.getMapAt(this._instance,i);this._instance.domElement.style.cursor=s?"none":"auto",this._cursorManager.setCursor(s!=null?"street":null),s&&this._cursorManager.setCursorLocation(s.point),this._instance.notifyChange()}orbitControlsOnContextMenu(i){if(this._store.getNavigationMode()!=="orbit")return;this._cursorManager.setCursor("orbit");const s=this._pickObjectsAt(i);if(s)this._cursorManager.setCursorLocation(s.point),this._orbitControls.setOrbitPoint(s.point.x,s.point.y,s.point.z);else{const a=this._orbitControls.getTarget(Vc);this._cursorManager.setCursorLocation(a)}}orbitControlsOnKey(i){const s=this._store.getNavigationMode();if(s==="position-on-map"){i.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(s!=="orbit"&&s!=="first-person")return;const a={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let o=0,l=0,r=0,h=0,c=i.ctrlKey||i.metaKey||i.shiftKey?200:20;switch(s==="first-person"&&(c/=10),i.code){case a.ARROW_BOTTOM:s==="first-person"?l=-1:o=-1;break;case a.ARROW_LEFT:case a.KEY_LEFT:r=-1;break;case a.ARROW_RIGHT:case a.KEY_RIGHT:r=1;break;case a.ARROW_UP:s==="first-person"?l=1:o=1;break;case a.KEY_DOWN:h=1;break;case a.KEY_UP:h=-1;break}o&&this.executeInteraction(()=>this._orbitControls.forward(o*this._orbitControls.truckSpeed*c,!0)),l&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(l*this._orbitControls.truckSpeed*c,!0)),r&&this.executeInteraction(()=>this._orbitControls.truck(r*this._orbitControls.truckSpeed*c,0,!0)),h&&this.executeInteraction(()=>this._orbitControls.truck(0,h*this._orbitControls.truckSpeed*c,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._cursorManager.setCursor(null),this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(i){switch(this._disablePositionOnMap(),i){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=st.ACTION.ROTATE,this._orbitControls.mouseButtons.right=st.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=st.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=st.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone(),o=new A.Vector3;this._instance.view.camera.getWorldDirection(s),s.normalize().setLength(3),o.copy(a).add(s),this.lookAt(a,o,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=st.ACTION.TRUCK,this._orbitControls.mouseButtons.right=st.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=st.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=st.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(s);const o=new A.Raycaster;o.camera=this._instance.view.camera,o.set(a,s);const l=o.intersectObject(this._instance.scene).at(0);l&&this.lookAt(a,l.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return i}this._instance.domElement.focus()}}const Js=e=>A.isObject(e)&&(e.type==="colorLayer"||e.type==="maskLayer"||e.type==="elevationLayer"),Uc=e=>A.isObject(e)&&!Js(e);class Fc{constructor(t,i){y(this,"_axisGrids",new Map);y(this,"_entities",new Map);y(this,"_instance");y(this,"_layerManager");y(this,"_masks",new Map);y(this,"_notifications",Pt());y(this,"_overlays",new Map);y(this,"_store",A.useDatasetStore());this._instance=t,this._layerManager=i,this._store.$onAction(({after:s,args:a,name:o})=>{s(()=>{switch(o){case"importFromFile":this.importFromFile(a[0]);break;case"remove":this.deleteDataset(a[0]);break;case"setVisible":this.onVisibilityChanged(a[0],a[1]);break;case"toggleGrid":this.onToggleGrid(a[0]);break;case"toggleMask":this.onToggleMask(a[0]);break}})});for(const s of this._store.getDatasets())s.visible&&this.preloadDataset(s)}dispose(){}async createGrid(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;const s=new Na({style:{color:new A.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:i.max.z+10,extent:gi.fromBox3(this._instance.referenceCrs,i).withMargin(20,20),floor:i.min.z-10}});s.name=`AxisGrid-${t.uuid}`,await this._instance.add(s),this._axisGrids.set(t.uuid,s)}async createMask(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;i.expandByVector(new A.Vector3(-5,-5,0));const s=new Ta({geometry:new La([[[i.min.x,i.min.y],[i.min.x,i.max.y],[i.max.x,i.max.y],[i.max.x,i.min.y],[i.min.x,i.min.y]]]),name:"Mask polygon"}),a=new wi({name:`mask-${t.uuid}`,source:new Pa({data:[s],style:new xi.Style({fill:new xi.Fill({color:"white"})})})});a.maskMode=wi.MaskMode.Inverted;const o=this._instance.getObjects(l=>Oi.isMap(l));for(const l of o)await l.addLayer(a),this._instance.notifyChange(l);this._masks.set(t.uuid,a)}deleteDataset(t){this.deleteGrid(t),this.deleteMask(t);const i=this._entities.get(t.uuid);i&&(this._instance.remove(i),this._instance.notifyChange());const s=this._overlays.get(t.uuid);s&&this._layerManager.removeBasemapLayer(s),bt.dispatchEvent({type:"dataset-removed",value:t})}deleteGrid(t){const i=this._axisGrids.get(t.uuid);i&&this._instance.remove(i),this._axisGrids.delete(t.uuid)}deleteMask(t){const i=this._masks.get(t.uuid);i&&this._instance.getObjects(a=>Oi.isMap(a)).forEach(a=>{a.removeLayer(i),this._instance.notifyChange(a)}),this._masks.delete(t.uuid)}async importFromFile(t){let i;const s=t instanceof File?t.name:t;try{this._notifications.push(new X(s,"Importing file..."));const a=await vc.importFile(t,A.getConfig());i=this._store.add(a),this._notifications.push(new X(i.name,"Import done, parsing data...","success"))}catch(a){console.error(a),this._notifications.push(new X(s,a.message,"error"));return}try{i.isPreloading=!0,await this.preloadDataset(i),this._notifications.push(new X(i.name,"Import successful.","success"))}catch{}bt.dispatchEvent({type:"dataset-added",value:i})}onDatasetPreloaded(t,i){t.isPreloaded=!0,t.isPreloading=!1,t.onObjectPreloaded&&t.onObjectPreloaded(t,i),this._store.attachEntity(t,i)}onDatasetPreloadedAsLayer(t,i){t.isPreloaded=!0,t.isPreloading=!1,this._store.attachLayer(t,i)}async onToggleGrid(t){this._axisGrids.has(t.uuid)?this.deleteGrid(t):await this.createGrid(t)}async onToggleMask(t){this._masks.has(t.uuid)?this.deleteMask(t):await this.createMask(t)}async onVisibilityChanged(t,i){try{t.visible=i,!t.isPreloaded&&i&&await this.preloadDataset(t),await this.updateDataset(t),A.Datagroup.isGroup(t)&&t.children.forEach(s=>void this.onVisibilityChanged(s,i))}catch{t.visible=!1}bt.dispatchEvent({type:"dataset-visibility-changed",value:t})}async preloadDataset(t){if(t.isPreloaded)return Promise.resolve(t);if(A.Datagroup.isGroup(t))return t.isPreloaded=!0,Promise.resolve(t);t.isPreloading=!0;try{if(Js(t)){const i=await A.LayerBuilder.getDatasetLayer(this._instance,t);i.visible=t.visible,this._overlays.set(t.uuid,i),await this._layerManager.addDatasetLayer(i),this.onDatasetPreloadedAsLayer(t,i)}else if(Uc(t)){const i=await uc.getEntity(this._instance,t);i.visible=t.visible,this._entities.set(t.uuid,i),await this._instance.add(i),this.onDatasetPreloaded(t,i)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(i){throw console.error("Could not load dataset",t,i),t.isPreloading=!1,this._notifications.push(new X(t.name,`Could not load dataset : ${i.message}`,"error")),i}return t}async updateDataset(t){const i=this._entities.get(t.uuid);i&&(i.visible=t.visible,t.visible&&"isMaskingBasemap"in t.config&&t.config.isMaskingBasemap===!0?await this.createMask(t):!t.visible&&this._masks.has(t.uuid)&&this.deleteMask(t),this._instance.notifyChange(i));const s=this._overlays.get(t.uuid);s&&(s.visible=t.visible,this._layerManager.notify(s))}}class zc{constructor(t){y(this,"_hoverMeasurement");y(this,"_picker");y(this,"_raycaster");this._picker=t,this._raycaster=new A.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var t;return(t=this._hoverMeasurement)==null?void 0:t.clone()}measure(t,i){var a;const s=(a=this._picker.getFirstFeatureAt(t,i,0,o=>!ft.isShape(o)))==null?void 0:a.at(0);if(s&&s.normal){const o=s.normal.clone();o.transformDirection(s.object.matrixWorld),o.normalize(),this._raycaster.camera=t.view.camera,this._raycaster.set(s.point,o);const l=this._raycaster.intersectObject(t.scene,!0).filter(r=>r.distance>1e-5&&r.object.userData.parentEntity!==this._hoverMeasurement).at(0);l&&(this._hoverMeasurement||(this._hoverMeasurement=new A.Measure3D,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,l.point]),t.notifyChange(this._hoverMeasurement))}}}const Mi=wt.defineStore("measurement",()=>{const e=n.reactive([]),t=n.ref("laser"),i=n.computed(()=>e.length),s=n.ref(!1);function a(){return s.value}function o(v){s.value=v}function l(){return t.value}function r(v){t.value=v}function h(){return e}function c(v){e.splice(e.indexOf(v),1)}function u(v){e.push(v)}function g(v){return e.some(I=>I.title===v)}function d(v){}function C(v){}function f(){}function m(){}return{add:u,count:i,end:m,getMeasurementMode:l,getMeasures:h,hasMeasure:g,importMeasureFile:d,importMeasureFiles:C,isUserMeasuring:a,remove:c,setIsUserMeasuring:o,setMeasurementMode:r,start:f}});class Xs extends A.EventDispatcher{constructor(i,s,a={}){super();y(this,"properties");y(this,"title");y(this,"uuid");y(this,"_object");y(this,"_visible");this.title=i,this._visible=!0,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get object(){return this._object}set object(i){this._object=i}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${A.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function jc(e){return window.prompt("Measure name",e)}class Gc{constructor(t,i,s){y(this,"_boundMeasure");y(this,"_boundOnEscape");y(this,"_boundPause");y(this,"_boundRestart");y(this,"_boundSaveMeasure");y(this,"_camera");y(this,"_instance");y(this,"_measureTool");y(this,"_notificationStore",Pt());y(this,"_paused",!1);y(this,"_store",Mi());this._instance=t,this._measureTool=new zc(s),this._camera=i,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:a,args:o,name:l})=>{a(()=>{switch(l){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(o[0]);break;case"importMeasureFiles":this.importMeasureFiles(o[0]);break;case"remove":this.deleteMeasure(o[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}deleteMeasure(t){this._instance.remove(t.object),this._instance.notifyChange()}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),o=a.type==="FeatureCollection"?a.features:[a];let l=0,r=0;for(const h of o)await this.importMeasure(h,i)?l++:r++;return{nbImported:l,nbSkipped:r}}async importMeasure(t,i){var l;if(t.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${t.geometry.type}`);if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=new A.Vector3(...t.geometry.coordinates[0]),a=new A.Vector3(...t.geometry.coordinates[1]),o=new A.Measure3D;return o.setPoints([s,a]),await this.pushNewMeasure((l=t.properties)==null?void 0:l.title,o,t.properties),!0}async importMeasureFile(t){const i=new Set(this._store.getMeasures().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new X("Measures",`${s} measures imported (${a} skipped)`,"success"))}catch{}}async importMeasureFiles(t){const i=[];let s=0,a=0;const o=[],l=new Set(this._store.getMeasures().map(r=>r.title));for(const r of t)i.push(this.importBlob(r,l).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{o.push(h.message)}));await Promise.allSettled(i),o.length>0?this._notificationStore.push(new X("Measures",`${s} measures imported (${a} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new X("Measures",`${s} measures imported (${a} skipped)`,"success"))}measure(t){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,t)}onEscape(t){t.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(t,i,s={}){await this._instance.add(i);const a=new Xs(t,i,s);i.userData.measure=a,a.addEventListener("visible",()=>this.updateMeasure(a)),this._store.add(a),this._instance.notifyChange(i)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const t=this._measureTool.getLastMeasurement();if(t&&!Number.isNaN(t.length)){let i="New measurement";if(this._store.hasMeasure(i)){for(let a=1;a<1e3&&(i=`New measurement (${a})`,!!this._store.hasMeasure(i));a+=1);this._store.hasMeasure(i)&&(i="Achieved unlocked: 1000 measurements with default name")}const s=jc(i);s!=null&&this.pushNewMeasure(s,t)}}}}function ai(e,t){const i=document.createElement("div");i.className="scene-cursor",i.id=t;const s=document.createElement("i");return s.className=`${e} text-dark shadow`,i.append(s),new Gs(i)}class Hc{constructor(t){y(this,"_currentCursor",null);y(this,"_instance");y(this,"_pickingCursors",{location:ai("fg-location","cursor-location"),orbit:ai("bi bi-mouse2-fill","cursor-orbit"),street:ai("fg-position-man","cursor-street")});this._instance=t}setCursor(t){if(t==null)this._instance.domElement.style.cursor="auto",this.detachCurrentCursor(),this._currentCursor=null;else{this._instance.domElement.style.cursor="none";const i=this._pickingCursors[t];i!==this._currentCursor&&(this.detachCurrentCursor(),this._currentCursor=i,this._instance.add(this._currentCursor).catch(console.error))}}setCursorLocation(t){this._currentCursor!=null&&(this._currentCursor.position.copy(t),this._currentCursor.updateMatrixWorld(!0),this._instance.notifyChange())}detachCurrentCursor(){var t,i;(i=(t=this._currentCursor)==null?void 0:t.parent)==null||i.remove(this._currentCursor)}}class Zc extends A.EventDispatcher{constructor(i){super();y(this,"ambientLight");y(this,"annotationManager");y(this,"camera");y(this,"datasetManager");y(this,"dirLight");y(this,"highlighter");y(this,"layerManager");y(this,"mainInstance");y(this,"measurementManager");y(this,"picker");y(this,"sceneCursorManager");y(this,"_boundOnFrameEnd");y(this,"_store",A.useGiro3dStore());this.mainInstance=i,this.picker=new A.Picker,this.sceneCursorManager=new Hc(i),this.camera=new Rc(this.mainInstance,this.picker,this.sceneCursorManager);const s=this._store.getDefaultCameraPosition(),a=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),a.toVector3()),this.layerManager=new A.LayerManager(this.mainInstance),this.datasetManager=new Fc(this.mainInstance,this.layerManager),this.annotationManager=new Pc(this.mainInstance,this.camera,this.picker),this.highlighter=new yc,this.picker=new A.Picker,this.measurementManager=new Gc(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const o=16777215;this.ambientLight=new A.AmbientLight(o,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new A.DirectionalLight(o,2),this.dirLight.position.set(a.x-1e4,a.y-1e4,1e4),this.dirLight.target.position.set(a.x,a.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const i=new A.Box3,s=new A.Box3;return this.mainInstance.scene.traverse(a=>{s.setFromObject(a),i.union(s)}),i}getObjects3d(){const i=[];return this.mainInstance.scene.traverse(s=>{i.push(s)}),i}onFrameEnd(){const i=this.mainInstance.view.camera;i.near=2,this.dispatchEvent({type:"update"}),bt.dispatchEvent({type:"updated"})}}class Wc{constructor(t){y(this,"_cameraController");y(this,"_instance");y(this,"_sceneCursorManager");this._cameraController=t.camera,this._instance=t.instance,this._sceneCursorManager=t.sceneCursorManager}getBoundingBox(){const t=this._instance.getEntities(),i=new A.Box3().makeEmpty();for(const s of t)if(ui.isEntity3D(s)){const a=s.getBoundingBox();a!=null&&i.union(a)}return i}getCameraController(){return this._cameraController}getInstance(){return this._instance}getSceneCursorManager(){return this._sceneCursorManager}}const qc={class:"toast-container"},Yc=["v-if"],Jc={class:"me-auto mx-2"},Xc=["innerHTML"],Kc=n.defineComponent({__name:"AlertToast",setup(e){const t=n.ref(null),i=n.ref(X.empty());function s(r){i.value=r,Ra.Toast.getOrCreateInstance(t.value).show()}Pt().$onAction(({args:r,name:h})=>{switch(h){case"push":s(r[0]);break}});function o(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function l(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(r,h)=>(n.openBlock(),n.createElementBlock("div",qc,[n.createElementVNode("div",{ref_key:"alertToast",ref:t,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[n.createElementVNode("div",{class:n.normalizeClass(["toast-header",l()])},[n.createElementVNode("i",{"v-if":i.value.level==="info",class:n.normalizeClass(["bi",o()])},null,10,Yc),n.createElementVNode("strong",Jc,n.toDisplayString(i.value.title),1),h[0]||(h[0]=n.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),n.createElementVNode("div",{class:"toast-body",innerHTML:i.value.text},null,8,Xc)],512)]))}}),Qc=A._export_sfc(Kc,[["__scopeId","data-v-002327a6"]]),$c=n.defineComponent({__name:"ColorFragment",props:{color:{}},setup(e){n.useCssVars(s=>({"8f755d56":i}));const i=`#${e.color.getHexString()}`;return(s,a)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("span",{class:"color"},[n.createElementVNode("span",{class:"d-none"},n.toDisplayString(i))]),n.createTextVNode(" "+n.toDisplayString(i))],64))}}),tg=A._export_sfc($c,[["__scopeId","data-v-535f5fef"]]),eg={class:"text-secondary"},ig=n.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",eg,[n.createElementVNode("span",null,[n.createElementVNode("b",null,n.toDisplayString(e.prefix),1),n.createTextVNode(" "+n.toDisplayString(e.value)+n.toDisplayString(e.suffix),1)])]))}}),It=A._export_sfc(ig,[["__scopeId","data-v-ce90ec07"]]),sg=["href"],ag=["src","alt"],ng={controls:"",style:{"max-width":"200px"}},og=["src","type"],rg=["href"],lg=["href"],hg=["title","src"],cg=["href"],gg=["href"],dg=n.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(e){const t=e;return(i,s)=>{var a,o;return(a=t.type)!=null&&a.startsWith("image/")?(n.openBlock(),n.createElementBlock("a",{key:0,href:t.href,target:"_blank"},[n.createElementVNode("img",{src:t.href,alt:t.title,style:{"max-width":"200px"}},null,8,ag)],8,sg)):(o=t.type)!=null&&o.startsWith("video/")?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createElementVNode("video",ng,[n.createElementVNode("source",{src:t.href,type:t.type},null,8,og),s[0]||(s[0]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href},"video",8,rg),s[1]||(s[1]=n.createTextVNode(".",-1))]),s[2]||(s[2]=n.createElementVNode("br",null,null,-1)),s[3]||(s[3]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href,target:"_blank"},"video",8,lg),s[4]||(s[4]=n.createTextVNode(". ",-1))],64)):t.type==="application/pdf"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createElementVNode("iframe",{title:t.title,width:"200",height:"300",src:t.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,hg),s[5]||(s[5]=n.createElementVNode("br",null,null,-1)),s[6]||(s[6]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href,target:"_blank"},"file",8,cg),s[7]||(s[7]=n.createTextVNode(". ",-1))],64)):(n.openBlock(),n.createElementBlock("a",{key:3,href:t.href,target:"_blank"},n.toDisplayString(t.title),9,gg))}}}),ug=["title"],Ag={key:0,class:"text-secondary"},Cg={key:1,class:"text-secondary"},mg={key:0},fg={key:3,class:"d-flex align-items-center justify-content-between"},Ig={key:4,class:"text-secondary"},pg=["title"],vg=n.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(e){const t=e;let i;switch(t.attrName){case"IFCType":i=["badge","bg-secondary","text-light","text-truncate"];break;default:i=["text-truncate"]}return(s,a)=>{const o=n.resolveComponent("AttributeItem",!0);return n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("th",{title:s.attrName,class:"align-top text-truncate"},n.toDisplayString(s.attrName),9,ug),n.createElementVNode("td",{class:n.normalizeClass(n.unref(i))},[t.attrValue===void 0?(n.openBlock(),n.createElementBlock("span",Ag,"undefined")):t.attrValue===null?(n.openBlock(),n.createElementBlock("span",Cg,"null")):typeof t.attrValue=="object"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[Array.isArray(t.attrValue)?(n.openBlock(),n.createElementBlock("table",mg,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(t.attrValue,(l,r)=>(n.openBlock(),n.createBlock(o,{key:r,"attr-name":`[${r}]`,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])):n.unref(A.isLink)(t.attrValue)?(n.openBlock(),n.createBlock(dg,{key:1,href:t.attrValue.href,title:t.attrValue.title,type:t.attrValue.type},null,8,["href","title","type"])):n.unref(A.isColor)(t.attrValue)?(n.openBlock(),n.createBlock(tg,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):n.unref(A.isVector3)(t.attrValue)?(n.openBlock(),n.createElementBlock("div",fg,[n.createVNode(It,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(It,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(It,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(n.openBlock(),n.createElementBlock("span",Ig,"Object"))],64)):(n.openBlock(),n.createElementBlock("span",{key:3,title:t.attrValue},n.toDisplayString(t.attrValue),9,pg))],2)])}}}),Ks=A._export_sfc(vg,[["__scopeId","data-v-1c2e92b2"]]),yg={key:0},bg={class:"badge bg-info-subtle text-dark mb-0"},Mg={class:"table table-striped table-sm w-100"},Eg=n.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(e){return(t,i)=>t.children.length>0?(n.openBlock(),n.createElementBlock("div",yg,[n.createElementVNode("h6",bg,n.toDisplayString(t.title),1),n.createElementVNode("table",Mg,[n.createElementVNode("tbody",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(t.children,(s,a)=>(n.openBlock(),n.createBlock(Ks,{key:a,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):n.createCommentVNode("",!0)}}),wg={class:"card"},Og={class:"card-header d-flex align-items-center justify-content-between"},xg={class:"text-truncate mx-2"},_g={class:"card-body content py-2 px-1"},kg={class:"card-footer py-0"},Sg={class:"d-flex align-items-center column-gap-3"},Ng=n.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(e){const t=e,i=n.ref(!1);function s(){const a=`${t.point.x};${t.point.y};${t.point.z}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,setTimeout(()=>i.value=!1,2e3)}).catch(o=>{console.log("failed",o)})}return(a,o)=>(n.openBlock(),n.createElementBlock("div",wg,[n.createElementVNode("div",Og,[o[1]||(o[1]=n.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),n.createElementVNode("span",xg,n.toDisplayString(a.name??a.parent),1),n.createElementVNode("button",{onClick:o[0]||(o[0]=l=>a.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),n.createElementVNode("div",_g,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.attributes.entries(),(l,r)=>(n.openBlock(),n.createBlock(Eg,{key:r,title:l[0],children:l[1]},null,8,["title","children"]))),128))]),n.createElementVNode("div",kg,[n.createElementVNode("div",Sg,[n.createVNode(It,{value:a.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(It,{value:a.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(It,{value:a.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),n.createElementVNode("button",{onClick:s,type:"button",class:"btn btn-link"},[n.createElementVNode("i",{class:n.normalizeClass(["bi",i.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),Pg=A._export_sfc(Ng,[["__scopeId","data-v-b1912966"]]),Tg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJMAAAAoCAYAAAD66MijAAAACXBIWXMAAAewAAAHsAHUgoNiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAEMVJREFUeJztnHt8VNW1x7/rnMk7ISICPlqLfvBxLdpaAzMJ2EqVtuot9mrBKpLMAMrVKu3trZdKZjJMJqBe760f+2mriJAMUKuxTy/aWqlY0WQCUUTRgqLgqwhqeOZ95qz7x2SGSTIJkxf9oPl9Pvnk7HXWXmvNzDp7r7322kec3hIlddjAAaAJpRl4D+TvIrrVVntTXcWq+j7IAsDlc68Gboi1BW6pDVbd3xN/kc/zLRv9U1/1HA0Km+uCVV/p6b7L524D0lIQ1Q4cRjmAQRPKPtDXgddsQ7YahrUp7F9zcLDsPhq+dHtxTlam+TWwL0GNC1R0vMAYIK/D1o+Bt0HfNkRXRJR364KrdvZHl6OP/AYwEhiJADAedKoCIgYun3unItUONe9/oeKhd/pj0KcAaUS/n5HEH1OZDGDYgO1ocflKnlQ1Hhl1MO/xJ3/2s9ahMKLIO6coIvYtWZnGd0BzQEC042frZOsp0T85x46k3y5G+3pXmdtEqbIcbcvr/Q9/nKpOY3A/AmcIutASa3uhz7N4amBqX531s4BMkKtFtHpf/sE3nF73dYMp3OktLnD6PM/aYr8gMAvISaWfCN8PL1m+R9F9KGcDSx1W+jsun3upK3DDiFRkdP+xVVeCWN21kScS5beVPIETgNOAz3dnJUNRf3PkCwVTA57vrvdXtqRiTD+xV5ABT3sCu/rGLyFV7TaqiMFIjQ4AJxAdxc/s+N8NCqeL8LDLV3L5YUfzvK3+6rZ+mA5A0Y9mZtm52XeJGLeCdh0kXhZYryIbbdPYmNHSsu+gZbZtuWdV4+RA8RiNyGk15aHNHZ9rb0K/bOAOLEdJYWnJvNoloV6/527O1NyqC7bcE2pM9UNMWTg3L5JuORW5Hri2w4AolCub2/V+wJOqvH7gjdpgpXsI5SeFw2r7jw13/mpfKrwX3zFrZLsjvRDRaSjX0O0BlNm5VnaeBALXqN9v99UWp6/4DMnJ/gPKBQnkFlQftg3jgY3llZtixCsWLMhoyLdPz0rTEc6yuZZpy8c1FVFHAjAam67XnJwbFP0B8MUO8qlqyBNOn+e/NzrGLerJxgFPQ8/fveIQsA5Y5/J57gRdA0yKMwhup7/4kbrAqqcGqut4RYfTPQk8OSEwc2FuJNuNsgQ4KYHtO05r50Lgzr7InlTq+bIYxl+A0Ueo+ozhsOfX+FfvkEDAcHlLpqgY/2qgV2o+5wEGCkIEWwSXz31IlI02/EWzc3+9MbhyuYg85PS5r0X158AoQARd6IzsHF8wf/519cuWtXe1ZVBjpnCw8s0sR9OlwKuJdLGN0sHUczxjq7+6LVxe9aAJLoQ3utwuKyidfUqqsiaWFk8wDF0nHY6k0Kowr65i1WU1/tU7Cn3u6U5r58uIbBB0ocIEkv/meSpcKsLdhti7Csvc1c47PP8SLq98xHbIBIG1cU7lGsfY1l9LINBNzmAH4Kz3Vx8WZEEX8uSCwPUnJe3wGcULwaq3DEuuUkiMuzJNw7gplf6u0hvHmoasJTpqABwE44q6YNWKiaWez7l87g0KfwTO76NphiozMO2XXWXuwCbG7Q1XhKaL8kCcQ7nGab19V7eOfVSUEmqDlc+i7EjUY7ZnTB0KXcczapZWbhPRexNpgnH50fqJiCDtlSBf6CAdMkQvqQuufMZZ5rnYEHsjMGWA5qWhlDnbd651Lp6VF14SugX4RYIVtxd6Pd9O7DAkzhSFPtepKVw0dLqOXxgYD3emaEFRYN6JvfWZ5C2ZgxBzOgWdU1Me2lzk83xLVJ8BTh40A4XLsRzrJ//XnNy6itBtCE/ELRVdfvEds+Ir1aFzJuGDxKaBDk9zSVBTXvkqsDuBZNrtkbN74i/4yfx8gaVxgnBfOBj6jWvRnPNs9NcMwqIqCb5iZdirWbxYiKTNBWLpg7HtjrR4PDxkzqTC3s5tGXamntHpwVOxe/yuHGmttxDdDgHYbZkZpVMWzs3DsJ8gmtsaGqhe5Wzf6Q0vWb5HkJvjZLh1UsBzMgyhMxlqdEno6XA2vAdodH8sDkOMpM7UsaMQX9yo6NJ6/7ImKyNSjjBuaK0EhDsKAiWnhyuqfg+8EiWRYUT0ZhjKkanrtKZ8MlS6jndIYqIXsCFpJrzZGvcNjsRDHzSazQ8WlM4+BeXfU9V1yqjxmEa/n+tMhyWLVVURvSfB4GIRkSEMwDkrsSEMO1OPkE7JS0Q16eaqoFcnNP+w1V/d5jCMm4HMlPQYmZw1/nxCP1xKcLaPWV+/kQvOmEyGI6sv1hZPCnhOtvZkPgrs6zBs3ESfu2BInElEBLgskaaiLw2FruMdVyxYkIHyhUSa3WXxEoMq8fSKGvb/RS9kVqq6jIwTeXn3q5gGnHPKCK4qOBvvjO+wYkGAH119O5POvQyHI+NoYkzT4tvRDLiujxHF1qlD4kzOUvcNdN1/MiPPDoWu4x0NIw99lc47+59sMs/4e1e+CwOeExDO7Gg2NRot652+4jMSaEeFkZEFxmF+v+X1TvR0h+AaP4YfT/8mv5jv54pJ15KZnt2DFACdDoDw1xhFRJ2DHhQXLfKci5kwn0bxXNi/5v3B1tUBmRrwpDbM94JnF1e1qmpfCgUHBWLb7s5VRrIu2UZqZiRyjnaEuArbt/qr25xeTwGSuslGugnAMzte4rsXfjEpz8icNNyXFHDlRRfwyz89zmu76rrxKMTqs+rtuOly1qCNTCIiTq/7OtvUvwFjE+/Zim+w9CTB5GZLmwf6N6l09jFPqrq8JVcp0qmeScW+LymzmqfFLkXk3eiVfVZS3h5gOiIAtOlewm/3/myPzkunbOZ3+Xbh9clujywKzDvRSnMkxnanDWhkcpXeONYwW8+NqDHN6Sv5N5TzkrBVbqyoei4J/TONwjKPW0UeEI4MSwp/risP1SbtoJoV51Q9BCDSt7ySw3Fko/+3r2zCdebneuUXYPbFF5LhSOM3G0Kd7kWstvx2h9kQi7AUcro5U2amscHlc/dcU6Pki5CuMAqDHFuN6GdMNtoKvz1sNqW8bP20Y8rCuXlWhj1DVW8VuLBLCe1udUiPdV+2gZkwo5l9Vm6mI8aRjEND2y52fXyQcScdvYhyRuEEdu79Oi9ufyZOMxymZh1obLVzorGVQPeEg8CFvUqW5H7TBfsRFtYFQ8uPQRzyIcrjAxXiIP2jgfQv8pacZhlygtGxTDdURkfUHgucJsI4EBfpnIdiSvfue2yRqzb6Kz/sSb5hyz6NeZNGRyRV9ksSYckgRueAWrB5peF9Xm0QIu3p5DgyOWVENmeNySfDNLrwwve/9Q1+8N4rHGqKzmyOlrYDdk72qTEehf2DHIBLnYq9xjTTHq7xP9RAedXgik+OHeGKqvnHQlFvsA2mGsrqeBtFUvqlpc5y2DPr/VXv9spmRPbGq3FFzwQw4K2Un1Sz8xolzcwlPxuiQ0Mr0MonkQN89I/dHGoWrLY0ctKyODk3m3PH5pObYXJV4dWs+euDAA0b7vzVvqKy4gtiNgns7uZMCpsleqSpB4gFegjYDxxSZRumvSVi6Sv1S1bv7rnfpxvh8tCaQp/7EoW5KXUQXhcIhINVj6UyemeaLa81W9k28I5i3gKgaZEXsBwKHNVrxXQAR0r7T8hMXoNnCORnK2S3AW3s1wO88MFuDjSZ2GkOTDONiNX+IoCtRjwtIcL2bs7U0mJfvOWeVSnXgA/jCKSx6TbNyZ5E8oK091B5XcWuNcX4XUe1AKmO3uv91YedXvcd2WlNv1zvrz4MEPaved/lc78ERy/v6brZcVLuqB44u8M04cS8CK/t3E8k0g5CrAR7WoxHlbrhzddBRM1Pq5uLFnlm2qZuAnJjdIXNow6MKBzoGTnDkL0tkeyVLq97H4ZuCJeH1oD8ETSFtEZnZxqVl9sDX3KowubXwgARQ/WRCYGZ6blkfyPOEDH+NJR7c59J1Cyt3Caq8xJpAhfuG3HwfwYqW2z7dVVmINyEys+nBmbmWo7W+4GjnxDuktwcm9+3cWTTtr0cOPg+wGM1FaEP8tqzZxArGVZ2hZeufH3YmYYAtRWhR1V5KJGmwq2FXnfK+2jJUFMR2phQDp3fFMlyR0/cylEdVa0j8VKWYyTZGSkuA4GP9kd4acvTAG1GRAIiIir8MC4bXQ5DWrb72UZ2mtwGvJxIU+GBokWecwciVw3539i1qCwuCsw7McvReG+Sky6d+9lHZtgTssf2wtkZja3w1PPriNhtINxVs7Ry2yRfyWygoIOlCZtlMOxMQ4boKWaZSecpKNc2tbogML+3XdReEdmTvgLl7Y7mqIhlVaz3Vx+OqDmd6EtFkkIjjcQWfaNyei0xj6O1Hdauf44DB/8BwhOnb2sq/+qiOaNFuTvOJPyybmnoExh2piFFOFj5pqh2Pbp0vtnemnz/LQXUL1vWjujCWFvgZleZ53ubgiu2q82sLkenjsBqxrKiuabReUd//cD+wza/W/cMHze8BVDf3GxfC9Bm2g8TL9DTd7LMpkCsz7AzDTFqK0KP0hFTxCDCPKe3pKS/MsPB0G+AVXGC6nKXt2RK3ZKqJxCdCuxJ1s9qTUPFYEx+77sxb7zXyGNP/Y6Gfe8gsNZqz7hsyz2rGt89K/8kjhyhUrG5OZamgGFnOibIchgLFDYn0kTkfmfZ3C/1W6jDui0hTspF5MmisuKv1ZWHasUhLkX+1rWL1XiQPMdJpKclD77f/6id364L8/SGatpaD7UIeMMVoekvZp16qCAwPzu8ZPkehAcBBCnv+iKLYWc6Bljvr2wR5Fo6x09ZQqR6ysK5ef2RGfavOWiZOg14r4OUZ6vxl0Kve0Gtv3JXXbDyEkGngW6J9bGbPiTHGEMs336wUXl7dys1W3ez+vGn+OPTa/hw799tER5T7PNqg1VLLlp83Shn+64nTat1l8vr+Yla+gtVHgpXVAW62jSctDxGCAcr3yz0ltykIo/EicrZVnrkQaBf72iq94feneibO80k8jTRytZ0Fe5zeT1XGDY/rF0aWieBwFcKI29dbKsxA/j6m9vXnf3m9m5VB4dUeFaEtQ7TXPu8f8U/REScYhQ7NP1uRE8WANE7cRij68orb6Siqps9wyPTMURtRehRNDpNJOB7rjJ3Su8XSIZNwRXbsdMmAs/HiaLftE19xeVzr3S1vfPlmvJVfwsHq24NB6vOO+xoylbsMxEKIrZ9vmVHTg0Hq0bUlVdND5dXPZiG3eDyemY7vcWbRQlx5DSMLeCtK6/8z55s+TSMTGcX+jxVgyBnV22wcvEgyOkVWWnygyZLJ3Yq9VHuKyydU1+7ZGW/Dl2ElyzfMyEw89K8SI5fVX8MpBN9xaBHDdtT6HNvVeHPYstzOXbW9saM5l1b/dU7Z86cae76Ys7oSWWeiQIXierXgCsR8jrtHSs71JA54fLKDb3Z8WlwpjGK9ntlFENHgLx44Ob0jvX+ypaiwOyZtmW+CMQq0zJV7EcLfjK/oP6uZT3minpDx1vnSosWeVZHTL1X4JsQr1ucgDJBRX8sppBrZePyueGcbAyr14KFBlHubU/L+Gm9f1nT0WwYnub+Cajxr94hwo2diMJ4R1rrKkmtCKpn2Usrt9UFqy6P2PYFHSmJPr/ZV2Gzwo9wWGfUVlRVpOJI8OkYmY5L1JZXVbu87ksREuOl6a7SktuAnw1U/qYlq7YCN00NTL2lNfL5yRE1pgmcjzAeJVbMlAE0KPquqLwhIjUWxnObgiu290fn/wODZqXRWrfmqQAAAABJRU5ErkJggg==",Lg={id:"loading-screen",class:"container"},Dg={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},Bg={class:"logo"},Vg=["src"],Rg=n.defineComponent({__name:"LoadingScreen",setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",Lg,[i[1]||(i[1]=n.createElementVNode("h1",null,"Loading...",-1)),n.createElementVNode("h2",null,[(n.openBlock(),n.createElementBlock("svg",Dg,[...i[0]||(i[0]=[n.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),n.createElementVNode("div",Bg,[n.createElementVNode("img",{src:n.unref(Tg)},null,8,Vg)])]))}}),Ug=A._export_sfc(Rg,[["__scopeId","data-v-712b955c"]]),Fg={class:"main"},zg=n.defineComponent({__name:"MainView",setup(e){const t=n.ref(null),i=n.ref(null),s=n.shallowRef(null),a=A.useGiro3dStore();return n.onMounted(()=>{s.value=new cs({backgroundColor:null,crs:a.getCRS(),target:t.value}),a.setMainView(s.value)}),n.onUnmounted(()=>{a.setMainView(null),s.value&&(s.value.view.setControls(null),s.value.dispose())}),(o,l)=>(n.openBlock(),n.createElementBlock("div",Fg,[n.createElementVNode("div",{ref_key:"mainView",ref:t,class:"main",id:"main-view"},null,512),n.createElementVNode("div",{ref_key:"inspectorView",ref:i,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),jg=A._export_sfc(zg,[["__scopeId","data-v-0d10144c"]]),Gg={class:"card root"},Hg={class:"d-flex align-items-center"},Zg=["aria-pressed"],Wg=n.defineComponent({__name:"NavigationButtons",setup(e){const t=A.useCameraStore(),i=Pt(),s=n.ref(t.getNavigationModeRef());n.watch(s,o=>{t.setNavigationMode(o);let l,r;switch(o){case"disabled":{l="Disabled",r="Camera is disabled";break}case"first-person":{l="First person",r=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
9
+ */const G={LEFT:1,RIGHT:2,MIDDLE:4},v=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Lt={NONE:0,IN:1,OUT:-1};function kt(e){return e.isPerspectiveCamera}function yt(e){return e.isOrthographicCamera}const Dt=Math.PI*2,es=Math.PI/2,Xs=1e-5,te=Math.PI/180;function ht(e,t,i){return Math.max(t,Math.min(i,e))}function j(e,t=Xs){return Math.abs(e)<t}function R(e,t,i=Xs){return j(e-t,i)}function is(e,t){return Math.round(e/t)*t}function ee(e){return isFinite(e)?e:e<0?-Number.MAX_VALUE:Number.MAX_VALUE}function ie(e){return Math.abs(e)<Number.MAX_VALUE?e:e*(1/0)}function pe(e,t,i,s,a=1/0,o){s=Math.max(1e-4,s);const l=2/s,r=l*o,h=1/(1+r+.48*r*r+.235*r*r*r);let c=e-t;const u=t,g=a*s;c=ht(c,-g,g),t=e-c;const d=(i.value+l*c)*o;i.value=(i.value-l*d)*h;let C=t+(c+d)*h;return u-e>0==C>u&&(C=u,i.value=(C-u)/o),C}function ss(e,t,i,s,a=1/0,o,l){s=Math.max(1e-4,s);const r=2/s,h=r*o,c=1/(1+h+.48*h*h+.235*h*h*h);let u=t.x,g=t.y,d=t.z,C=e.x-u,m=e.y-g,p=e.z-d;const I=u,f=g,b=d,M=a*s,O=M*M,k=C*C+m*m+p*p;if(k>O){const ze=Math.sqrt(k);C=C/ze*M,m=m/ze*M,p=p/ze*M}u=e.x-C,g=e.y-m,d=e.z-p;const w=(i.x+r*C)*o,S=(i.y+r*m)*o,L=(i.z+r*p)*o;i.x=(i.x-r*w)*c,i.y=(i.y-r*S)*c,i.z=(i.z-r*L)*c,l.x=u+(C+w)*c,l.y=g+(m+S)*c,l.z=d+(p+L)*c;const W=I-e.x,D=f-e.y,z=b-e.z,V=l.x-I,q=l.y-f,Kt=l.z-b;return W*V+D*q+z*Kt>0&&(l.x=I,l.y=f,l.z=b,i.x=(l.x-I)/o,i.y=(l.y-f)/o,i.z=(l.z-b)/o),l}function Qe(e,t){t.set(0,0),e.forEach(i=>{t.x+=i.clientX,t.y+=i.clientY}),t.x/=e.length,t.y/=e.length}function $e(e,t){return yt(e)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Tc{constructor(){this._listeners={}}addEventListener(t,i){const s=this._listeners;s[t]===void 0&&(s[t]=[]),s[t].indexOf(i)===-1&&s[t].push(i)}hasEventListener(t,i){const s=this._listeners;return s[t]!==void 0&&s[t].indexOf(i)!==-1}removeEventListener(t,i){const a=this._listeners[t];if(a!==void 0){const o=a.indexOf(i);o!==-1&&a.splice(o,1)}}removeAllEventListeners(t){if(!t){this._listeners={};return}Array.isArray(this._listeners[t])&&(this._listeners[t].length=0)}dispatchEvent(t){const s=this._listeners[t.type];if(s!==void 0){t.target=this;const a=s.slice(0);for(let o=0,l=a.length;o<l;o++)a[o].call(this,t)}}}var ti;const Lc="2.10.1",ve=1/8,Dc=/Mac/.test((ti=globalThis==null?void 0:globalThis.navigator)===null||ti===void 0?void 0:ti.platform);let N,as,ye,ei,et,T,B,Bt,se,At,Ct,_t,ns,os,ot,ae,Vt,rs,ii,ls,si,ai,be;class at extends Tc{static install(t){N=t.THREE,as=Object.freeze(new N.Vector3(0,0,0)),ye=Object.freeze(new N.Vector3(0,1,0)),ei=Object.freeze(new N.Vector3(0,0,1)),et=new N.Vector2,T=new N.Vector3,B=new N.Vector3,Bt=new N.Vector3,se=new N.Vector3,At=new N.Vector3,Ct=new N.Vector3,_t=new N.Vector3,ns=new N.Vector3,os=new N.Vector3,ot=new N.Spherical,ae=new N.Spherical,Vt=new N.Box3,rs=new N.Box3,ii=new N.Sphere,ls=new N.Quaternion,si=new N.Quaternion,ai=new N.Matrix4,be=new N.Raycaster}static get ACTION(){return v}set verticalDragToForward(t){console.warn("camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.")}constructor(t,i){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=v.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Lt.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new N.Vector3,this._focalOffsetVelocity=new N.Vector3,this._zoomVelocity={value:0},this._truckInternal=(f,b,M,O)=>{let k,w;if(kt(this._camera)){const S=T.copy(this._camera.position).sub(this._target),L=this._camera.getEffectiveFOV()*te,W=S.length()*Math.tan(L*.5);k=this.truckSpeed*f*W/this._elementRect.height,w=this.truckSpeed*b*W/this._elementRect.height}else if(yt(this._camera)){const S=this._camera;k=this.truckSpeed*f*(S.right-S.left)/S.zoom/this._elementRect.width,w=this.truckSpeed*b*(S.top-S.bottom)/S.zoom/this._elementRect.height}else return;O?(M?this.setFocalOffset(this._focalOffsetEnd.x+k,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(k,0,!0),this.forward(-w,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+k,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(k,w,!0)},this._rotateInternal=(f,b)=>{const M=Dt*this.azimuthRotateSpeed*f/this._elementRect.height,O=Dt*this.polarRotateSpeed*b/this._elementRect.height;this.rotate(M,O,!0)},this._dollyInternal=(f,b,M)=>{const O=Math.pow(.95,-f*this.dollySpeed),k=this._sphericalEnd.radius,w=this._sphericalEnd.radius*O,S=ht(w,this.minDistance,this.maxDistance),L=S-w;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(w,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(L,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?w:S)-k,this._dollyControlCoord.set(b,M)),this._lastDollyDirection=Math.sign(-f)},this._zoomInternal=(f,b,M)=>{const O=Math.pow(.95,f*this.dollySpeed),k=this._zoom,w=this._zoom*O;this.zoomTo(w,!0),this.dollyToCursor&&(this._changedZoom+=w-k,this._dollyControlCoord.set(b,M))},typeof N>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=t,this._yAxisUpSpace=new N.Quaternion().setFromUnitVectors(this._camera.up,ye),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=v.NONE,this._target=new N.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new N.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new N.Spherical().setFromVector3(T.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new N.Vector3,new N.Vector3,new N.Vector3,new N.Vector3],this._updateNearPlaneCorners(),this._boundary=new N.Box3(new N.Vector3(-1/0,-1/0,-1/0),new N.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new N.Vector2,this.mouseButtons={left:v.ROTATE,middle:v.DOLLY,right:v.TRUCK,wheel:kt(this._camera)?v.DOLLY:yt(this._camera)?v.ZOOM:v.NONE},this.touches={one:v.TOUCH_ROTATE,two:kt(this._camera)?v.TOUCH_DOLLY_TRUCK:yt(this._camera)?v.TOUCH_ZOOM_TRUCK:v.NONE,three:v.TOUCH_TRUCK};const s=new N.Vector2,a=new N.Vector2,o=new N.Vector2,l=f=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),k=f.clientX/O.width,w=f.clientY/O.height;if(k<this._interactiveArea.left||k>this._interactiveArea.right||w<this._interactiveArea.top||w>this._interactiveArea.bottom)return}const b=f.pointerType!=="mouse"?null:(f.buttons&G.LEFT)===G.LEFT?G.LEFT:(f.buttons&G.MIDDLE)===G.MIDDLE?G.MIDDLE:(f.buttons&G.RIGHT)===G.RIGHT?G.RIGHT:null;if(b!==null){const O=this._findPointerByMouseButton(b);O&&this._disposePointer(O)}if((f.buttons&G.LEFT)===G.LEFT&&this._lockedPointer)return;const M={pointerId:f.pointerId,clientX:f.clientX,clientY:f.clientY,deltaX:0,deltaY:0,mouseButton:b};this._activePointers.push(M),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,d(f)},r=f=>{f.cancelable&&f.preventDefault();const b=f.pointerId,M=this._lockedPointer||this._findPointerById(b);if(M){if(M.clientX=f.clientX,M.clientY=f.clientY,M.deltaX=f.movementX,M.deltaY=f.movementY,this._state=0,f.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(f.buttons&G.LEFT)===G.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(f.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(f.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);C()}},h=f=>{const b=this._findPointerById(f.pointerId);if(!(b&&b===this._lockedPointer)){if(b&&this._disposePointer(b),f.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=v.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=v.NONE;m()}};let c=-1;const u=f=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===v.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const w=this._domElement.getBoundingClientRect(),S=f.clientX/w.width,L=f.clientY/w.height;if(S<this._interactiveArea.left||S>this._interactiveArea.right||L<this._interactiveArea.top||L>this._interactiveArea.bottom)return}if(f.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===v.ROTATE||this.mouseButtons.wheel===v.TRUCK){const w=performance.now();c-w<1e3&&this._getClientRect(this._elementRect),c=w}const b=Dc?-1:-3,M=f.deltaMode===1||f.ctrlKey?f.deltaY/b:f.deltaY/(b*10),O=this.dollyToCursor?(f.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,k=this.dollyToCursor?(f.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case v.ROTATE:{this._rotateInternal(f.deltaX,f.deltaY),this._isUserControllingRotate=!0;break}case v.TRUCK:{this._truckInternal(f.deltaX,f.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case v.SCREEN_PAN:{this._truckInternal(f.deltaX,f.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case v.OFFSET:{this._truckInternal(f.deltaX,f.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case v.DOLLY:{this._dollyInternal(-M,O,k),this._isUserControllingDolly=!0;break}case v.ZOOM:{this._zoomInternal(-M,O,k),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},g=f=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===at.ACTION.NONE){const b=f instanceof PointerEvent?f.pointerId:0,M=this._findPointerById(b);M&&this._disposePointer(M),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h);return}f.preventDefault()}},d=f=>{if(!this._enabled)return;if(Qe(this._activePointers,et),this._getClientRect(this._elementRect),s.copy(et),a.copy(et),this._activePointers.length>=2){const M=et.x-this._activePointers[1].clientX,O=et.y-this._activePointers[1].clientY,k=Math.sqrt(M*M+O*O);o.set(0,k);const w=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;a.set(w,S)}if(this._state=0,!f)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in f&&f.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(f.buttons&G.LEFT)===G.LEFT&&(this._state=this._state|this.mouseButtons.left),(f.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(f.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&v.ROTATE)===v.ROTATE||(this._state&v.TOUCH_ROTATE)===v.TOUCH_ROTATE||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&v.TRUCK)===v.TRUCK||(this._state&v.SCREEN_PAN)===v.SCREEN_PAN||(this._state&v.TOUCH_TRUCK)===v.TOUCH_TRUCK||(this._state&v.TOUCH_SCREEN_PAN)===v.TOUCH_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&v.DOLLY)===v.DOLLY||(this._state&v.TOUCH_DOLLY)===v.TOUCH_DOLLY||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&v.ZOOM)===v.ZOOM||(this._state&v.TOUCH_ZOOM)===v.TOUCH_ZOOM||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_ZOOM_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&v.OFFSET)===v.OFFSET||(this._state&v.TOUCH_OFFSET)===v.TOUCH_OFFSET||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},C=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Qe(this._activePointers,et);const b=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=b?-b.deltaX:a.x-et.x,O=b?-b.deltaY:a.y-et.y;if(a.copy(et),((this._state&v.ROTATE)===v.ROTATE||(this._state&v.TOUCH_ROTATE)===v.TOUCH_ROTATE||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,O),this._isUserControllingRotate=!0),(this._state&v.DOLLY)===v.DOLLY||(this._state&v.ZOOM)===v.ZOOM){const k=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&v.DOLLY)===v.DOLLY?(this._dollyInternal(S*O*ve,k,w),this._isUserControllingDolly=!0):(this._zoomInternal(S*O*ve,k,w),this._isUserControllingZoom=!0)}if((this._state&v.TOUCH_DOLLY)===v.TOUCH_DOLLY||(this._state&v.TOUCH_ZOOM)===v.TOUCH_ZOOM||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_ZOOM_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE){const k=et.x-this._activePointers[1].clientX,w=et.y-this._activePointers[1].clientY,S=Math.sqrt(k*k+w*w),L=o.y-S;o.set(0,S);const W=this.dollyToCursor?(a.x-this._elementRect.x)/this._elementRect.width*2-1:0,D=this.dollyToCursor?(a.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&v.TOUCH_DOLLY)===v.TOUCH_DOLLY||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET?(this._dollyInternal(L*ve,W,D),this._isUserControllingDolly=!0):(this._zoomInternal(L*ve,W,D),this._isUserControllingZoom=!0)}((this._state&v.TRUCK)===v.TRUCK||(this._state&v.TOUCH_TRUCK)===v.TOUCH_TRUCK||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,O,!1,!1),this._isUserControllingTruck=!0),((this._state&v.SCREEN_PAN)===v.SCREEN_PAN||(this._state&v.TOUCH_SCREEN_PAN)===v.TOUCH_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,O,!1,!0),this._isUserControllingTruck=!0),((this._state&v.OFFSET)===v.OFFSET||(this._state&v.TOUCH_OFFSET)===v.TOUCH_OFFSET||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,O,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},m=()=>{Qe(this._activePointers,et),a.copy(et),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",p),this._domElement.ownerDocument.addEventListener("pointerlockerror",I),this._domElement.ownerDocument.addEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),d())},this.unlockPointer=()=>{var f,b,M;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(f=this._domElement)===null||f===void 0||f.ownerDocument.exitPointerLock(),(b=this._domElement)===null||b===void 0||b.ownerDocument.removeEventListener("pointerlockchange",p),(M=this._domElement)===null||M===void 0||M.ownerDocument.removeEventListener("pointerlockerror",I),this.cancel()};const p=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},I=()=>{this.unlockPointer()};this._addAllEventListeners=f=>{this._domElement=f,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",l),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",g)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",l),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",g),this._domElement.ownerDocument.removeEventListener("pointermove",r,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("pointerlockchange",p),this._domElement.ownerDocument.removeEventListener("pointerlockerror",I))},this.cancel=()=>{this._state!==v.NONE&&(this._state=v.NONE,this._activePointers.length=0,m())},i&&this.connect(i),this.update(0)}get camera(){return this._camera}set camera(t){this._camera=t,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._domElement&&(t?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(t){this._spherical.radius===t&&this._sphericalEnd.radius===t||(this._spherical.radius=t,this._sphericalEnd.radius=t,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(t){this._spherical.theta===t&&this._sphericalEnd.theta===t||(this._spherical.theta=t,this._sphericalEnd.theta=t,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(t){this._spherical.phi===t&&this._sphericalEnd.phi===t||(this._spherical.phi=t,this._sphericalEnd.phi=t,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(t){this._boundaryEnclosesCamera=t,this._needsUpdate=!0}set interactiveArea(t){this._interactiveArea.width=ht(t.width,0,1),this._interactiveArea.height=ht(t.height,0,1),this._interactiveArea.x=ht(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=ht(t.y,0,1-this._interactiveArea.height)}addEventListener(t,i){super.addEventListener(t,i)}removeEventListener(t,i){super.removeEventListener(t,i)}rotate(t,i,s=!1){return this.rotateTo(this._sphericalEnd.theta+t,this._sphericalEnd.phi+i,s)}rotateAzimuthTo(t,i=!1){return this.rotateTo(t,this._sphericalEnd.phi,i)}rotatePolarTo(t,i=!1){return this.rotateTo(this._sphericalEnd.theta,t,i)}rotateTo(t,i,s=!1){this._isUserControllingRotate=!1;const a=ht(t,this.minAzimuthAngle,this.maxAzimuthAngle),o=ht(i,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=a,this._sphericalEnd.phi=o,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const l=!s||R(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&R(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(l)}dolly(t,i=!1){return this.dollyTo(this._sphericalEnd.radius-t,i)}dollyTo(t,i=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Lt.NONE,this._changedDolly=0,this._dollyToNoClamp(ht(t,this.minDistance,this.maxDistance),i)}_dollyToNoClamp(t,i=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const l=this._collisionTest(),r=R(l,this._spherical.radius);if(!(s>t)&&r)return Promise.resolve();this._sphericalEnd.radius=Math.min(t,l)}else this._sphericalEnd.radius=t;this._needsUpdate=!0,i||(this._spherical.radius=this._sphericalEnd.radius);const o=!i||R(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(o)}dollyInFixed(t,i=!1){this._targetEnd.add(this._getCameraDirection(se).multiplyScalar(t)),i||this._target.copy(this._targetEnd);const s=!i||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(t,i=!1){return this.zoomTo(this._zoomEnd+t,i)}zoomTo(t,i=!1){this._isUserControllingZoom=!1,this._zoomEnd=ht(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,i||(this._zoom=this._zoomEnd);const s=!i||R(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(t,i,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(t,i,s)}truck(t,i,s=!1){this._camera.updateMatrix(),At.setFromMatrixColumn(this._camera.matrix,0),Ct.setFromMatrixColumn(this._camera.matrix,1),At.multiplyScalar(t),Ct.multiplyScalar(-i);const a=T.copy(At).add(Ct),o=B.copy(this._targetEnd).add(a);return this.moveTo(o.x,o.y,o.z,s)}forward(t,i=!1){T.setFromMatrixColumn(this._camera.matrix,0),T.crossVectors(this._camera.up,T),T.multiplyScalar(t);const s=B.copy(this._targetEnd).add(T);return this.moveTo(s.x,s.y,s.z,i)}elevate(t,i=!1){return T.copy(this._camera.up).multiplyScalar(t),this.moveTo(this._targetEnd.x+T.x,this._targetEnd.y+T.y,this._targetEnd.z+T.z,i)}moveTo(t,i,s,a=!1){this._isUserControllingTruck=!1;const o=T.set(t,i,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,o,this.boundaryFriction),this._needsUpdate=!0,a||this._target.copy(this._targetEnd);const l=!a||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(l)}lookInDirectionOf(t,i,s,a=!1){const r=T.set(t,i,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(r.x,r.y,r.z,a)}fitToBox(t,i,{cover:s=!1,paddingLeft:a=0,paddingRight:o=0,paddingBottom:l=0,paddingTop:r=0}={}){const h=[],c=t.isBox3?Vt.copy(t):Vt.setFromObject(t);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=is(this._sphericalEnd.theta,es),g=is(this._sphericalEnd.phi,es);h.push(this.rotateTo(u,g,i));const d=T.setFromSpherical(this._sphericalEnd).normalize(),C=ls.setFromUnitVectors(d,ei),m=R(Math.abs(d.y),1);m&&C.multiply(si.setFromAxisAngle(ye,u)),C.multiply(this._yAxisUpSpaceInverse);const p=rs.makeEmpty();B.copy(c.min).applyQuaternion(C),p.expandByPoint(B),B.copy(c.min).setX(c.max.x).applyQuaternion(C),p.expandByPoint(B),B.copy(c.min).setY(c.max.y).applyQuaternion(C),p.expandByPoint(B),B.copy(c.max).setZ(c.min.z).applyQuaternion(C),p.expandByPoint(B),B.copy(c.min).setZ(c.max.z).applyQuaternion(C),p.expandByPoint(B),B.copy(c.max).setY(c.min.y).applyQuaternion(C),p.expandByPoint(B),B.copy(c.max).setX(c.min.x).applyQuaternion(C),p.expandByPoint(B),B.copy(c.max).applyQuaternion(C),p.expandByPoint(B),p.min.x-=a,p.min.y-=l,p.max.x+=o,p.max.y+=r,C.setFromUnitVectors(ei,d),m&&C.premultiply(si.invert()),C.premultiply(this._yAxisUpSpace);const I=p.getSize(T),f=p.getCenter(B).applyQuaternion(C);if(kt(this._camera)){const b=this.getDistanceToFitBox(I.x,I.y,I.z,s);h.push(this.moveTo(f.x,f.y,f.z,i)),h.push(this.dollyTo(b,i)),h.push(this.setFocalOffset(0,0,0,i))}else if(yt(this._camera)){const b=this._camera,M=b.right-b.left,O=b.top-b.bottom,k=s?Math.max(M/I.x,O/I.y):Math.min(M/I.x,O/I.y);h.push(this.moveTo(f.x,f.y,f.z,i)),h.push(this.zoomTo(k,i)),h.push(this.setFocalOffset(0,0,0,i))}return Promise.all(h)}fitToSphere(t,i){const s=[],o="isObject3D"in t?at.createBoundingSphere(t,ii):ii.copy(t);if(s.push(this.moveTo(o.center.x,o.center.y,o.center.z,i)),kt(this._camera)){const l=this.getDistanceToFitSphere(o.radius);s.push(this.dollyTo(l,i))}else if(yt(this._camera)){const l=this._camera.right-this._camera.left,r=this._camera.top-this._camera.bottom,h=2*o.radius,c=Math.min(l/h,r/h);s.push(this.zoomTo(c,i))}return s.push(this.setFocalOffset(0,0,0,i)),Promise.all(s)}setLookAt(t,i,s,a,o,l,r=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Lt.NONE,this._changedDolly=0;const h=B.set(a,o,l),c=T.set(t,i,s);this._targetEnd.copy(h),this._sphericalEnd.setFromVector3(c.sub(h).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,r||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!r||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold)&&R(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&R(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&R(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(t,i,s,a,o,l,r,h,c,u,g,d,C,m=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Lt.NONE,this._changedDolly=0;const p=T.set(a,o,l),I=B.set(t,i,s);ot.setFromVector3(I.sub(p).applyQuaternion(this._yAxisUpSpace));const f=Bt.set(u,g,d),b=B.set(r,h,c);ae.setFromVector3(b.sub(f).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(p.lerp(f,C));const M=ae.theta-ot.theta,O=ae.phi-ot.phi,k=ae.radius-ot.radius;this._sphericalEnd.set(ot.radius+k*C,ot.phi+O*C,ot.theta+M*C),this.normalizeRotations(),this._needsUpdate=!0,m||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const w=!m||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold)&&R(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&R(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&R(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(w)}setPosition(t,i,s,a=!1){return this.setLookAt(t,i,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,a)}setTarget(t,i,s,a=!1){const o=this.getPosition(T),l=this.setLookAt(o.x,o.y,o.z,t,i,s,a);return this._sphericalEnd.phi=ht(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),l}setFocalOffset(t,i,s,a=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(t,i,s),this._needsUpdate=!0,a||this._focalOffset.copy(this._focalOffsetEnd);const o=!a||R(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&R(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&R(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}setOrbitPoint(t,i,s){this._camera.updateMatrixWorld(),At.setFromMatrixColumn(this._camera.matrixWorldInverse,0),Ct.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_t.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const a=T.set(t,i,s),o=a.distanceTo(this._camera.position),l=a.sub(this._camera.position);At.multiplyScalar(l.x),Ct.multiplyScalar(l.y),_t.multiplyScalar(l.z),T.copy(At).add(Ct).add(_t),T.z=T.z+o,this.dollyTo(o,!1),this.setFocalOffset(-T.x,T.y,-T.z,!1),this.moveTo(t,i,s,!1)}setBoundary(t){if(!t){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(t),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(t,i,s,a){if(t===null){this._viewport=null;return}this._viewport=this._viewport||new N.Vector4,typeof t=="number"?this._viewport.set(t,i,s,a):this._viewport.copy(t)}getDistanceToFitBox(t,i,s,a=!1){if($e(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const o=t/i,l=this._camera.getEffectiveFOV()*te,r=this._camera.aspect;return((a?o>r:o<r)?i:t/r)*.5/Math.tan(l*.5)+s*.5}getDistanceToFitSphere(t){if($e(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const i=this._camera.getEffectiveFOV()*te,s=Math.atan(Math.tan(i*.5)*this._camera.aspect)*2,a=1<this._camera.aspect?i:s;return t/Math.sin(a*.5)}getTarget(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._targetEnd:this._target)}getPosition(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).setFromSpherical(i?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(i?this._targetEnd:this._target)}getSpherical(t,i=!0){return(t||new N.Spherical).copy(i?this._sphericalEnd:this._spherical)}getFocalOffset(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%Dt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Dt),this._spherical.theta+=Dt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Dt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!R(this._camera.up.x,this._cameraUp0.x)||!R(this._camera.up.y,this._cameraUp0.y)||!R(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(T);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const i=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,t),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,t),this.zoomTo(this._zoom0,t)];return Promise.all(i)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,ye),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=T.subVectors(this._target,this._camera.position).normalize(),i=B.crossVectors(t,this._camera.up);this._camera.up.crossVectors(i,t).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(T);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(t){const i=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,a=this._sphericalEnd.radius-this._spherical.radius,o=ns.subVectors(this._targetEnd,this._target),l=os.subVectors(this._focalOffsetEnd,this._focalOffset),r=this._zoomEnd-this._zoom;if(j(i))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=pe(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,g,1/0,t),this._needsUpdate=!0}if(j(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=pe(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,g,1/0,t),this._needsUpdate=!0}if(j(a))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const g=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=pe(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,g,this.maxSpeed,t),this._needsUpdate=!0}if(j(o.x)&&j(o.y)&&j(o.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const g=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;ss(this._target,this._targetEnd,this._targetVelocity,g,this.maxSpeed,t,this._target),this._needsUpdate=!0}if(j(l.x)&&j(l.y)&&j(l.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const g=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;ss(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,g,this.maxSpeed,t,this._focalOffset),this._needsUpdate=!0}if(j(r))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const g=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=pe(this._zoom,this._zoomEnd,this._zoomVelocity,g,1/0,t)}if(this.dollyToCursor){if(kt(this._camera)&&this._changedDolly!==0){const g=this._spherical.radius-this._lastDistance,d=this._camera,C=this._getCameraDirection(se),m=T.copy(C).cross(d.up).normalize();m.lengthSq()===0&&(m.x=1);const p=B.crossVectors(m,C),I=this._sphericalEnd.radius*Math.tan(d.getEffectiveFOV()*te*.5),b=(this._sphericalEnd.radius-g-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=Bt.copy(this._targetEnd).add(m.multiplyScalar(this._dollyControlCoord.x*I*d.aspect)).add(p.multiplyScalar(this._dollyControlCoord.y*I)),O=T.copy(this._targetEnd).lerp(M,b),k=this._lastDollyDirection===Lt.IN&&this._spherical.radius<=this.minDistance,w=this._lastDollyDirection===Lt.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(k||w)){this._sphericalEnd.radius-=g,this._spherical.radius-=g;const L=B.copy(C).multiplyScalar(-g);O.add(L)}this._boundary.clampPoint(O,O);const S=B.subVectors(O,this._targetEnd);this._targetEnd.copy(O),this._target.add(S),this._changedDolly-=g,j(this._changedDolly)&&(this._changedDolly=0)}else if(yt(this._camera)&&this._changedZoom!==0){const g=this._zoom-this._lastZoom,d=this._camera,C=T.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(d.near+d.far)/(d.near-d.far)).unproject(d),m=B.set(0,0,-1).applyQuaternion(d.quaternion),p=Bt.copy(C).add(m.multiplyScalar(-C.dot(d.up))),f=-(this._zoom-g-this._zoom)/this._zoom,b=this._getCameraDirection(se),M=this._targetEnd.dot(b),O=T.copy(this._targetEnd).lerp(p,f),k=O.dot(b),w=b.multiplyScalar(k-M);O.sub(w),this._boundary.clampPoint(O,O);const S=B.subVectors(O,this._targetEnd);this._targetEnd.copy(O),this._target.add(S),this._changedZoom-=g,j(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const h=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,h),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!j(this._focalOffset.x)||!j(this._focalOffset.y)||!j(this._focalOffset.z))&&(At.setFromMatrixColumn(this._camera.matrix,0),Ct.setFromMatrixColumn(this._camera.matrix,1),_t.setFromMatrixColumn(this._camera.matrix,2),At.multiplyScalar(this._focalOffset.x),Ct.multiplyScalar(-this._focalOffset.y),_t.multiplyScalar(this._focalOffset.z),T.copy(At).add(Ct).add(_t),this._camera.position.add(T),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),T.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const u=this._needsUpdate;return u&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):u?(this.dispatchEvent({type:"update"}),j(i,this.restThreshold)&&j(s,this.restThreshold)&&j(a,this.restThreshold)&&j(o.x,this.restThreshold)&&j(o.y,this.restThreshold)&&j(o.z,this.restThreshold)&&j(l.x,this.restThreshold)&&j(l.y,this.restThreshold)&&j(l.z,this.restThreshold)&&j(r,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!u&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=u,this._needsUpdate=!1,u}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:ee(this.maxDistance),minZoom:this.minZoom,maxZoom:ee(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:ee(this.maxPolarAngle),minAzimuthAngle:ee(this.minAzimuthAngle),maxAzimuthAngle:ee(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:T.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(t,i=!1){const s=JSON.parse(t);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=ie(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=ie(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=ie(s.maxPolarAngle),this.minAzimuthAngle=ie(s.minAzimuthAngle),this.maxAzimuthAngle=ie(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],i),ot.setFromVector3(T.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(ot.theta,ot.phi,i),this.dollyTo(ot.radius,i),this.zoomTo(s.zoom,i),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],i),this._needsUpdate=!0}connect(t){if(this._domElement){console.warn("camera-controls is already connected.");return}t.setAttribute("data-camera-controls-version",Lc),this._addAllEventListeners(t),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(t){return t.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(t){return this._getTargetDirection(t).negate()}_findPointerById(t){return this._activePointers.find(i=>i.pointerId===t)}_findPointerByMouseButton(t){return this._activePointers.find(i=>i.mouseButton===t)}_disposePointer(t){this._activePointers.splice(this._activePointers.indexOf(t),1)}_encloseToBoundary(t,i,s){const a=i.lengthSq();if(a===0)return t;const o=B.copy(i).add(t),r=this._boundary.clampPoint(o,Bt).sub(o),h=r.lengthSq();if(h===0)return t.add(i);if(h===a)return t;if(s===0)return t.add(i).add(r);{const c=1+s*h/i.dot(r);return t.add(B.copy(i).multiplyScalar(c)).add(r.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(kt(this._camera)){const t=this._camera,i=t.near,s=t.getEffectiveFOV()*te,a=Math.tan(s*.5)*i,o=a*t.aspect;this._nearPlaneCorners[0].set(-o,-a,0),this._nearPlaneCorners[1].set(o,-a,0),this._nearPlaneCorners[2].set(o,a,0),this._nearPlaneCorners[3].set(-o,a,0)}else if(yt(this._camera)){const t=this._camera,i=1/t.zoom,s=t.left*i,a=t.right*i,o=t.top*i,l=t.bottom*i;this._nearPlaneCorners[0].set(s,o,0),this._nearPlaneCorners[1].set(a,o,0),this._nearPlaneCorners[2].set(a,l,0),this._nearPlaneCorners[3].set(s,l,0)}}_collisionTest(){let t=1/0;if(!(this.colliderMeshes.length>=1)||$e(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(se);ai.lookAt(as,s,this._camera.up);for(let a=0;a<4;a++){const o=B.copy(this._nearPlaneCorners[a]);o.applyMatrix4(ai);const l=Bt.addVectors(this._target,o);be.set(l,s),be.far=this._spherical.radius+1;const r=be.intersectObjects(this.colliderMeshes);r.length!==0&&r[0].distance<t&&(t=r[0].distance)}return t}_getClientRect(t){if(!this._domElement)return;const i=this._domElement.getBoundingClientRect();return t.x=i.left,t.y=i.top,this._viewport?(t.x+=this._viewport.x,t.y+=i.height-this._viewport.w-this._viewport.y,t.width=this._viewport.z,t.height=this._viewport.w):(t.width=i.width,t.height=i.height),t}_createOnRestPromise(t){return t?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(i=>{const s=()=>{this.removeEventListener("rest",s),i()};this.addEventListener("rest",s)}))}_addAllEventListeners(t){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(t){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(t){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(t,i=new N.Sphere){const s=i,a=s.center;Vt.makeEmpty(),t.traverseVisible(l=>{l.isMesh&&Vt.expandByObject(l)}),Vt.getCenter(a);let o=0;return t.traverseVisible(l=>{if(!l.isMesh)return;const r=l;if(!r.geometry)return;const h=r.geometry.clone();h.applyMatrix4(r.matrixWorld);const u=h.attributes.position;for(let g=0,d=u.count;g<d;g++)T.fromBufferAttribute(u,g),o=Math.max(o,a.distanceToSquared(T))}),s.radius=Math.sqrt(o),s}}class Ve{constructor(t,i,s){y(this,"camera");y(this,"focalOffset");y(this,"target");this.camera=t,this.target=i,this.focalOffset=s}}class Bc extends Sa{constructor(i,s,a){super(i,a,"Camera Controls");y(this,"camera");y(this,"_boundOnAfterCameraUpdate");y(this,"_cameraPosition");this.camera=s,this._cameraPosition=new Ve(new A.Vector3,new A.Vector3,new A.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const o=this.gui.addFolder("Position");o.close(),this._controllers.push(o.add(this._cameraPosition.camera,"x")),this._controllers.push(o.add(this._cameraPosition.camera,"y")),this._controllers.push(o.add(this._cameraPosition.camera,"z"));const l=this.gui.addFolder("Target");l.close(),this._controllers.push(l.add(this._cameraPosition.target,"x")),this._controllers.push(l.add(this._cameraPosition.target,"y")),this._controllers.push(l.add(this._cameraPosition.target,"z"));const r=this.gui.addFolder("Focal offset");r.close(),this._controllers.push(r.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(r.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(r.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}at.install({THREE:{Box3:A.Box3,MathUtils:A.MathUtils,Matrix4:A.Matrix4,Quaternion:A.Quaternion,Raycaster:A.Raycaster,Sphere:A.Sphere,Spherical:A.Spherical,Vector2:A.Vector2,Vector3:A.Vector3,Vector4:A.Vector4}});const Vc=new A.Vector3;class Rc extends A.EventDispatcher{constructor(i,s,a){super();y(this,"_boundOnAfterCameraUpdate");y(this,"_boundOnBeforeCameraUpdate");y(this,"_boundOrbitControlsOnContextMenu");y(this,"_boundOrbitControlsOnKey");y(this,"_boundOrbitControlsOnMouseUp");y(this,"_boundOrbitControlsOnWheel");y(this,"_boundPositionOnMapOnClick");y(this,"_boundPositionOnMapOnContextMenu");y(this,"_boundPositionOnMapOnMouseMove");y(this,"_cameraControlsInspector");y(this,"_clock");y(this,"_cursorManager");y(this,"_giro3dStore",A.useGiro3dStore());y(this,"_instance");y(this,"_orbitControls");y(this,"_picker");y(this,"_pickObjectsAt");y(this,"_store",A.useCameraStore());this._instance=i,this._picker=s,this._cursorManager=a,this._orbitControls=new at(this._instance.view.camera,this._instance.domElement),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=l=>{var r;return((r=this._picker.getFirstFeatureAt(this._instance,l,1))==null?void 0:r.at(0))??null},this._clock=new A.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:l,name:r})=>{switch(r){case"lookTopDownAt":this.lookTopDownAt(l[0]);break;case"setCameraPosition":this.setCamera(l[0]);break;case"setNavigationMode":this.setNavigationMode(l[0]);break}});const o=this._giro3dStore.getInspector();o!=null&&this.initializeInspector(o),this._giro3dStore.$onAction(({after:l,args:r,name:h})=>{l(()=>{switch(h){case"setInspector":this.initializeInspector(r[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(i){this._orbitControls.enabled=i}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls()}executeInteraction(i){this._orbitControls.update(this._clock.getDelta());const s=i();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),s}getCameraPosition(i){const s=this._orbitControls,a=i??new Ve(new A.Vector3,new A.Vector3,new A.Vector3);return s.getPosition(a.camera),s.getTarget(a.target),s.getFocalOffset(a.focalOffset),a}goToBox(i,s=!0,a={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const o=this.getBox(i);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(o,s,a)))}async lookAt(i,s,a=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(i.x,i.y,i.z,s.x,s.y,s.z,a))),this._orbitControls.setOrbitPoint(s.x,s.y,s.z)}lookTopDownAt(i,s=!0){const a=new A.Vector3,o=new A.Vector3,l=new A.Vector3(0,0,1),r=this.getBox(i);r.min.z=r.max.z,r.getCenter(a),r.getSize(o);const h=this._orbitControls.getDistanceToFitBox(o.x,o.y,0),c=l.multiplyScalar(h).add(a);return c.x+=o.x/10,c.y-=o.y/10,this.lookAt(c,a,s)}setCamera(i){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(i.camera.x,i.camera.y,i.camera.z,i.target.x,i.target.y,i.target.z,!1),this._orbitControls.setFocalOffset(i.focalOffset.z,i.focalOffset.y,i.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(i,s=4e3){const a=new Yt(i.crs,i.west,i.south,s).toVector3(),o=i.centerAsVector3();this.lookAt(a,o,!1)}getBox(i){let s=new A.Box3;if(i.isBox3)s=i.clone();else if(i.isEntity3D){const a=i,o=a.getBoundingBox();o&&!o.isEmpty()?s=o.clone():"extent"in a&&(s=a.extent.toBox3(0,200))}else if(i.isObject3D)s.setFromObject(i);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(s.isEmpty())throw new Error("Could not find bounding box of object");return s.min.z=Math.max(s.min.z,0),s.max.z=Math.min(s.max.z,2e3),s}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._cursorManager.setCursor(null),this._instance.notifyChange())}_enablePositionOnMap(){this._cursorManager.setCursor("street"),this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),document.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(i){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),i&&(this._cameraControlsInspector=new Bc(i.gui,this,this._instance),i.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),document.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const i=this._clock.getDelta();this._orbitControls.update(i)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(i){const s=this._picker.getMapAt(this._instance,i);if(s){this._disablePositionOnMap();const a=new A.Vector3;this._instance.view.camera.getWorldDirection(a),a.normalize().setLength(3);const o=s.point.clone();o.z+=1.7;const l=o.clone();l.add(a),l.z=o.z,this.lookAt(o,l,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(i){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),i.preventDefault()}onPositionOnMapMouseMove(i){const s=this._picker.getMapAt(this._instance,i);this._instance.domElement.style.cursor=s?"none":"auto",this._cursorManager.setCursor(s!=null?"street":null),s&&this._cursorManager.setCursorLocation(s.point),this._instance.notifyChange()}orbitControlsOnContextMenu(i){if(this._store.getNavigationMode()!=="orbit")return;this._cursorManager.setCursor("orbit");const s=this._pickObjectsAt(i);if(s)this._cursorManager.setCursorLocation(s.point),this._orbitControls.setOrbitPoint(s.point.x,s.point.y,s.point.z);else{const a=this._orbitControls.getTarget(Vc);this._cursorManager.setCursorLocation(a)}}orbitControlsOnKey(i){const s=this._store.getNavigationMode();if(s==="position-on-map"){i.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(s!=="orbit"&&s!=="first-person")return;const a={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let o=0,l=0,r=0,h=0,c=i.ctrlKey||i.metaKey||i.shiftKey?200:20;switch(s==="first-person"&&(c/=10),i.code){case a.ARROW_BOTTOM:s==="first-person"?l=-1:o=-1;break;case a.ARROW_LEFT:case a.KEY_LEFT:r=-1;break;case a.ARROW_RIGHT:case a.KEY_RIGHT:r=1;break;case a.ARROW_UP:s==="first-person"?l=1:o=1;break;case a.KEY_DOWN:h=1;break;case a.KEY_UP:h=-1;break}o&&this.executeInteraction(()=>this._orbitControls.forward(o*this._orbitControls.truckSpeed*c,!0)),l&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(l*this._orbitControls.truckSpeed*c,!0)),r&&this.executeInteraction(()=>this._orbitControls.truck(r*this._orbitControls.truckSpeed*c,0,!0)),h&&this.executeInteraction(()=>this._orbitControls.truck(0,h*this._orbitControls.truckSpeed*c,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._cursorManager.setCursor(null),this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(i){switch(this._disablePositionOnMap(),i){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=at.ACTION.ROTATE,this._orbitControls.mouseButtons.right=at.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=at.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=at.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone(),o=new A.Vector3;this._instance.view.camera.getWorldDirection(s),s.normalize().setLength(3),o.copy(a).add(s),this.lookAt(a,o,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=at.ACTION.TRUCK,this._orbitControls.mouseButtons.right=at.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=at.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=at.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(s);const o=new A.Raycaster;o.camera=this._instance.view.camera,o.set(a,s);const l=o.intersectObject(this._instance.scene).at(0);l&&this.lookAt(a,l.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return i}this._instance.domElement.focus()}}const Ks=e=>A.isObject(e)&&(e.type==="colorLayer"||e.type==="maskLayer"||e.type==="elevationLayer"),Uc=e=>A.isObject(e)&&!Ks(e);class Fc{constructor(t,i){y(this,"_axisGrids",new Map);y(this,"_entities",new Map);y(this,"_instance");y(this,"_layerManager");y(this,"_masks",new Map);y(this,"_notifications",Tt());y(this,"_overlays",new Map);y(this,"_store",A.useDatasetStore());this._instance=t,this._layerManager=i,this._store.$onAction(({after:s,args:a,name:o})=>{s(()=>{switch(o){case"importFromFile":this.importFromFile(a[0]);break;case"remove":this.deleteDataset(a[0]);break;case"setVisible":this.onVisibilityChanged(a[0],a[1]);break;case"toggleGrid":this.onToggleGrid(a[0]);break;case"toggleMask":this.onToggleMask(a[0]);break}})});for(const s of this._store.getDatasets())s.visible&&this.preloadDataset(s)}dispose(){}async createGrid(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;const s=new Na({style:{color:new A.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:i.max.z+10,extent:di.fromBox3(this._instance.referenceCrs,i).withMargin(20,20),floor:i.min.z-10}});s.name=`AxisGrid-${t.uuid}`,await this._instance.add(s),this._axisGrids.set(t.uuid,s)}async createMask(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;i.expandByVector(new A.Vector3(-5,-5,0));const s=new Ta({geometry:new La([[[i.min.x,i.min.y],[i.min.x,i.max.y],[i.max.x,i.max.y],[i.max.x,i.min.y],[i.min.x,i.min.y]]]),name:"Mask polygon"}),a=new xi({name:`mask-${t.uuid}`,source:new Pa({data:[s],style:new _i.Style({fill:new _i.Fill({color:"white"})})})});a.maskMode=xi.MaskMode.Inverted;const o=this._instance.getObjects(l=>ki.isMap(l));for(const l of o)await l.addLayer(a),this._instance.notifyChange(l);this._masks.set(t.uuid,a)}deleteDataset(t){this.deleteGrid(t),this.deleteMask(t);const i=this._entities.get(t.uuid);i&&(this._instance.remove(i),this._instance.notifyChange());const s=this._overlays.get(t.uuid);s&&this._layerManager.removeBasemapLayer(s),Mt.dispatchEvent({type:"dataset-removed",value:t})}deleteGrid(t){const i=this._axisGrids.get(t.uuid);i&&this._instance.remove(i),this._axisGrids.delete(t.uuid)}deleteMask(t){const i=this._masks.get(t.uuid);i&&this._instance.getObjects(a=>ki.isMap(a)).forEach(a=>{a.removeLayer(i),this._instance.notifyChange(a)}),this._masks.delete(t.uuid)}async importFromFile(t){let i;const s=t instanceof File?t.name:t;try{this._notifications.push(new Q(s,"Importing file..."));const a=await vc.importFile(t,A.getConfig());i=this._store.add(a),this._notifications.push(new Q(i.name,"Import done, parsing data...","success"))}catch(a){console.error(a),this._notifications.push(new Q(s,a.message,"error"));return}try{i.isPreloading=!0,await this.preloadDataset(i),this._notifications.push(new Q(i.name,"Import successful.","success"))}catch{}Mt.dispatchEvent({type:"dataset-added",value:i})}onDatasetPreloaded(t,i){t.isPreloaded=!0,t.isPreloading=!1,t.onObjectPreloaded&&t.onObjectPreloaded(t,i),this._store.attachEntity(t,i)}onDatasetPreloadedAsLayer(t,i){t.isPreloaded=!0,t.isPreloading=!1,this._store.attachLayer(t,i)}async onToggleGrid(t){this._axisGrids.has(t.uuid)?this.deleteGrid(t):await this.createGrid(t)}async onToggleMask(t){this._masks.has(t.uuid)?this.deleteMask(t):await this.createMask(t)}async onVisibilityChanged(t,i){try{t.visible=i,!t.isPreloaded&&i&&await this.preloadDataset(t),await this.updateDataset(t),A.Datagroup.isGroup(t)&&t.children.forEach(s=>void this.onVisibilityChanged(s,i))}catch{t.visible=!1}Mt.dispatchEvent({type:"dataset-visibility-changed",value:t})}async preloadDataset(t){if(t.isPreloaded)return Promise.resolve(t);if(A.Datagroup.isGroup(t))return t.isPreloaded=!0,Promise.resolve(t);t.isPreloading=!0;try{if(Ks(t)){const i=await A.LayerBuilder.getDatasetLayer(this._instance,t);i.visible=t.visible,this._overlays.set(t.uuid,i),await this._layerManager.addDatasetLayer(i),this.onDatasetPreloadedAsLayer(t,i)}else if(Uc(t)){const i=await uc.getEntity(this._instance,t);i.visible=t.visible,this._entities.set(t.uuid,i),await this._instance.add(i),this.onDatasetPreloaded(t,i)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(i){throw console.error("Could not load dataset",t,i),t.isPreloading=!1,this._notifications.push(new Q(t.name,`Could not load dataset : ${i.message}`,"error")),i}return t}async updateDataset(t){const i=this._entities.get(t.uuid);i&&(i.visible=t.visible,t.visible&&"isMaskingBasemap"in t.config&&t.config.isMaskingBasemap===!0?await this.createMask(t):!t.visible&&this._masks.has(t.uuid)&&this.deleteMask(t),this._instance.notifyChange(i));const s=this._overlays.get(t.uuid);s&&(s.visible=t.visible,this._layerManager.notify(s))}}class zc{constructor(t){y(this,"_hoverMeasurement");y(this,"_picker");y(this,"_raycaster");this._picker=t,this._raycaster=new A.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var t;return(t=this._hoverMeasurement)==null?void 0:t.clone()}measure(t,i){var a;const s=(a=this._picker.getFirstFeatureAt(t,i,0,o=>!pt.isShape(o)))==null?void 0:a.at(0);if(s&&s.normal){const o=s.normal.clone();o.transformDirection(s.object.matrixWorld),o.normalize(),this._raycaster.camera=t.view.camera,this._raycaster.set(s.point,o);const l=this._raycaster.intersectObject(t.scene,!0).filter(r=>r.distance>1e-5&&r.object.userData.parentEntity!==this._hoverMeasurement).at(0);l&&(this._hoverMeasurement||(this._hoverMeasurement=new A.Measure3D,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,l.point]),t.notifyChange(this._hoverMeasurement))}}}const Ei=Ot.defineStore("measurement",()=>{const e=n.reactive([]),t=n.ref("laser"),i=n.computed(()=>e.length),s=n.ref(!1);function a(){return s.value}function o(I){s.value=I}function l(){return t.value}function r(I){t.value=I}function h(){return e}function c(I){e.splice(e.indexOf(I),1)}function u(I){e.push(I)}function g(I){return e.some(f=>f.title===I)}function d(I){}function C(I){}function m(){}function p(){}return{add:u,count:i,end:p,getMeasurementMode:l,getMeasures:h,hasMeasure:g,importMeasureFile:d,importMeasureFiles:C,isUserMeasuring:a,remove:c,setIsUserMeasuring:o,setMeasurementMode:r,start:m}});class Qs extends A.EventDispatcher{constructor(i,s,a={}){super();y(this,"properties");y(this,"title");y(this,"uuid");y(this,"_object");y(this,"_visible");this.title=i,this._visible=!0,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get object(){return this._object}set object(i){this._object=i}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${A.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function jc(e){return window.prompt("Measure name",e)}class Gc{constructor(t,i,s){y(this,"_boundMeasure");y(this,"_boundOnEscape");y(this,"_boundPause");y(this,"_boundRestart");y(this,"_boundSaveMeasure");y(this,"_camera");y(this,"_instance");y(this,"_measureTool");y(this,"_notificationStore",Tt());y(this,"_paused",!1);y(this,"_store",Ei());this._instance=t,this._measureTool=new zc(s),this._camera=i,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:a,args:o,name:l})=>{a(()=>{switch(l){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(o[0]);break;case"importMeasureFiles":this.importMeasureFiles(o[0]);break;case"remove":this.deleteMeasure(o[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}deleteMeasure(t){this._instance.remove(t.object),this._instance.notifyChange()}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),o=a.type==="FeatureCollection"?a.features:[a];let l=0,r=0;for(const h of o)await this.importMeasure(h,i)?l++:r++;return{nbImported:l,nbSkipped:r}}async importMeasure(t,i){var l;if(t.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${t.geometry.type}`);if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=new A.Vector3(...t.geometry.coordinates[0]),a=new A.Vector3(...t.geometry.coordinates[1]),o=new A.Measure3D;return o.setPoints([s,a]),await this.pushNewMeasure((l=t.properties)==null?void 0:l.title,o,t.properties),!0}async importMeasureFile(t){const i=new Set(this._store.getMeasures().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped)`,"success"))}catch{}}async importMeasureFiles(t){const i=[];let s=0,a=0;const o=[],l=new Set(this._store.getMeasures().map(r=>r.title));for(const r of t)i.push(this.importBlob(r,l).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{o.push(h.message)}));await Promise.allSettled(i),o.length>0?this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped)`,"success"))}measure(t){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,t)}onEscape(t){t.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(t,i,s={}){await this._instance.add(i);const a=new Qs(t,i,s);i.userData.measure=a,a.addEventListener("visible",()=>this.updateMeasure(a)),this._store.add(a),this._instance.notifyChange(i)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const t=this._measureTool.getLastMeasurement();if(t&&!Number.isNaN(t.length)){let i="New measurement";if(this._store.hasMeasure(i)){for(let a=1;a<1e3&&(i=`New measurement (${a})`,!!this._store.hasMeasure(i));a+=1);this._store.hasMeasure(i)&&(i="Achieved unlocked: 1000 measurements with default name")}const s=jc(i);s!=null&&this.pushNewMeasure(s,t)}}}}function ni(e,t){const i=document.createElement("div");i.className="scene-cursor",i.id=t;const s=document.createElement("i");return s.className=`${e} text-dark shadow`,i.append(s),new Zs(i)}class Hc{constructor(t){y(this,"_currentCursor",null);y(this,"_instance");y(this,"_pickingCursors",{location:ni("fg-location","cursor-location"),orbit:ni("bi bi-mouse2-fill","cursor-orbit"),street:ni("fg-position-man","cursor-street")});this._instance=t}setCursor(t){if(t==null)this._instance.domElement.style.cursor="auto",this.detachCurrentCursor(),this._currentCursor=null;else{this._instance.domElement.style.cursor="none";const i=this._pickingCursors[t];i!==this._currentCursor&&(this.detachCurrentCursor(),this._currentCursor=i,this._instance.add(this._currentCursor).catch(console.error))}}setCursorLocation(t){this._currentCursor!=null&&(this._currentCursor.position.copy(t),this._currentCursor.updateMatrixWorld(!0),this._instance.notifyChange())}detachCurrentCursor(){var t,i;(i=(t=this._currentCursor)==null?void 0:t.parent)==null||i.remove(this._currentCursor)}}class Zc extends A.EventDispatcher{constructor(i){super();y(this,"ambientLight");y(this,"annotationManager");y(this,"camera");y(this,"datasetManager");y(this,"dirLight");y(this,"highlighter");y(this,"layerManager");y(this,"mainInstance");y(this,"measurementManager");y(this,"picker");y(this,"sceneCursorManager");y(this,"_boundOnFrameEnd");y(this,"_store",A.useGiro3dStore());this.mainInstance=i,this.picker=new A.Picker,this.sceneCursorManager=new Hc(i),this.camera=new Rc(this.mainInstance,this.picker,this.sceneCursorManager);const s=this._store.getDefaultCameraPosition(),a=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),a.toVector3()),this.layerManager=new A.LayerManager(this.mainInstance),this.datasetManager=new Fc(this.mainInstance,this.layerManager),this.annotationManager=new Pc(this.mainInstance,this.camera,this.picker),this.highlighter=new yc,this.picker=new A.Picker,this.measurementManager=new Gc(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const o=16777215;this.ambientLight=new A.AmbientLight(o,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new A.DirectionalLight(o,2),this.dirLight.position.set(a.x-1e4,a.y-1e4,1e4),this.dirLight.target.position.set(a.x,a.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const i=new A.Box3,s=new A.Box3;return this.mainInstance.scene.traverse(a=>{s.setFromObject(a),i.union(s)}),i}getObjects3d(){const i=[];return this.mainInstance.scene.traverse(s=>{i.push(s)}),i}onFrameEnd(){const i=this.mainInstance.view.camera;i.near=2,this.dispatchEvent({type:"update"}),Mt.dispatchEvent({type:"updated"})}}class Wc{constructor(t){y(this,"_cameraController");y(this,"_instance");y(this,"_sceneCursorManager");this._cameraController=t.camera,this._instance=t.instance,this._sceneCursorManager=t.sceneCursorManager}getBoundingBox(){const t=this._instance.getEntities(),i=new A.Box3().makeEmpty();for(const s of t)if(Ai.isEntity3D(s)){const a=s.getBoundingBox();a!=null&&i.union(a)}return i}getCameraController(){return this._cameraController}getInstance(){return this._instance}getSceneCursorManager(){return this._sceneCursorManager}}const qc={class:"toast-container"},Yc=["v-if"],Jc={class:"me-auto mx-2"},Xc=["innerHTML"],Kc=n.defineComponent({__name:"AlertToast",setup(e){const t=n.ref(null),i=n.ref(Q.empty());function s(r){i.value=r,Ra.Toast.getOrCreateInstance(t.value).show()}Tt().$onAction(({args:r,name:h})=>{switch(h){case"push":s(r[0]);break}});function o(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function l(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(r,h)=>(n.openBlock(),n.createElementBlock("div",qc,[n.createElementVNode("div",{ref_key:"alertToast",ref:t,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[n.createElementVNode("div",{class:n.normalizeClass(["toast-header",l()])},[n.createElementVNode("i",{"v-if":i.value.level==="info",class:n.normalizeClass(["bi",o()])},null,10,Yc),n.createElementVNode("strong",Jc,n.toDisplayString(i.value.title),1),h[0]||(h[0]=n.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),n.createElementVNode("div",{class:"toast-body",innerHTML:i.value.text},null,8,Xc)],512)]))}}),Qc=A._export_sfc(Kc,[["__scopeId","data-v-002327a6"]]),$c=n.defineComponent({__name:"ColorFragment",props:{color:{}},setup(e){n.useCssVars(s=>({"8f755d56":i}));const i=`#${e.color.getHexString()}`;return(s,a)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("span",{class:"color"},[n.createElementVNode("span",{class:"d-none"},n.toDisplayString(i))]),n.createTextVNode(" "+n.toDisplayString(i))],64))}}),tg=A._export_sfc($c,[["__scopeId","data-v-535f5fef"]]),eg={class:"text-secondary"},ig=n.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",eg,[n.createElementVNode("span",null,[n.createElementVNode("b",null,n.toDisplayString(e.prefix),1),n.createTextVNode(" "+n.toDisplayString(e.value)+n.toDisplayString(e.suffix),1)])]))}}),dt=A._export_sfc(ig,[["__scopeId","data-v-fa06c4a8"]]),sg=["href"],ag=["src","alt"],ng={controls:"",style:{"max-width":"200px"}},og=["src","type"],rg=["href"],lg=["href"],hg=["title","src"],cg=["href"],gg=["href"],dg=n.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(e){const t=e;return(i,s)=>{var a,o;return(a=t.type)!=null&&a.startsWith("image/")?(n.openBlock(),n.createElementBlock("a",{key:0,href:t.href,target:"_blank"},[n.createElementVNode("img",{src:t.href,alt:t.title,style:{"max-width":"200px"}},null,8,ag)],8,sg)):(o=t.type)!=null&&o.startsWith("video/")?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createElementVNode("video",ng,[n.createElementVNode("source",{src:t.href,type:t.type},null,8,og),s[0]||(s[0]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href},"video",8,rg),s[1]||(s[1]=n.createTextVNode(".",-1))]),s[2]||(s[2]=n.createElementVNode("br",null,null,-1)),s[3]||(s[3]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href,target:"_blank"},"video",8,lg),s[4]||(s[4]=n.createTextVNode(". ",-1))],64)):t.type==="application/pdf"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createElementVNode("iframe",{title:t.title,width:"200",height:"300",src:t.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,hg),s[5]||(s[5]=n.createElementVNode("br",null,null,-1)),s[6]||(s[6]=n.createTextVNode(" Download the ",-1)),n.createElementVNode("a",{href:t.href,target:"_blank"},"file",8,cg),s[7]||(s[7]=n.createTextVNode(". ",-1))],64)):(n.openBlock(),n.createElementBlock("a",{key:3,href:t.href,target:"_blank"},n.toDisplayString(t.title),9,gg))}}}),ug=["title"],Ag={key:0,class:"text-secondary"},Cg={key:1,class:"text-secondary"},mg={key:0},fg={key:3,class:"d-flex align-items-center justify-content-between"},Ig={key:4,class:"text-secondary"},pg=["title"],vg=n.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(e){const t=e;let i;switch(t.attrName){case"IFCType":i=["badge","bg-secondary","text-light","text-truncate"];break;default:i=["text-truncate"]}return(s,a)=>{const o=n.resolveComponent("AttributeItem",!0);return n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("th",{title:s.attrName,class:"align-top text-truncate"},n.toDisplayString(s.attrName),9,ug),n.createElementVNode("td",{class:n.normalizeClass(n.unref(i))},[t.attrValue===void 0?(n.openBlock(),n.createElementBlock("span",Ag,"undefined")):t.attrValue===null?(n.openBlock(),n.createElementBlock("span",Cg,"null")):typeof t.attrValue=="object"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[Array.isArray(t.attrValue)?(n.openBlock(),n.createElementBlock("table",mg,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(t.attrValue,(l,r)=>(n.openBlock(),n.createBlock(o,{key:r,"attr-name":`[${r}]`,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])):n.unref(A.isLink)(t.attrValue)?(n.openBlock(),n.createBlock(dg,{key:1,href:t.attrValue.href,title:t.attrValue.title,type:t.attrValue.type},null,8,["href","title","type"])):n.unref(A.isColor)(t.attrValue)?(n.openBlock(),n.createBlock(tg,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):n.unref(A.isVector3)(t.attrValue)?(n.openBlock(),n.createElementBlock("div",fg,[n.createVNode(dt,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(dt,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(dt,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(n.openBlock(),n.createElementBlock("span",Ig,"Object"))],64)):(n.openBlock(),n.createElementBlock("span",{key:3,title:t.attrValue},n.toDisplayString(t.attrValue),9,pg))],2)])}}}),$s=A._export_sfc(vg,[["__scopeId","data-v-1c2e92b2"]]),yg={key:0},bg={class:"badge bg-info-subtle text-dark mb-0"},Mg={class:"table table-striped table-sm w-100"},Eg=n.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(e){return(t,i)=>t.children.length>0?(n.openBlock(),n.createElementBlock("div",yg,[n.createElementVNode("h6",bg,n.toDisplayString(t.title),1),n.createElementVNode("table",Mg,[n.createElementVNode("tbody",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(t.children,(s,a)=>(n.openBlock(),n.createBlock($s,{key:a,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):n.createCommentVNode("",!0)}}),wg={class:"card"},Og={class:"card-header d-flex align-items-center justify-content-between"},xg={class:"text-truncate mx-2"},kg={class:"card-body content py-2 px-1"},_g={class:"card-footer py-0"},Sg={class:"d-flex align-items-center column-gap-3"},Ng=n.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(e){const t=e,i=n.ref(!1);function s(){const a=`${t.point.x};${t.point.y};${t.point.z}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,setTimeout(()=>i.value=!1,2e3)}).catch(o=>{console.log("failed",o)})}return(a,o)=>(n.openBlock(),n.createElementBlock("div",wg,[n.createElementVNode("div",Og,[o[1]||(o[1]=n.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),n.createElementVNode("span",xg,n.toDisplayString(a.name??a.parent),1),n.createElementVNode("button",{onClick:o[0]||(o[0]=l=>a.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),n.createElementVNode("div",kg,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.attributes.entries(),(l,r)=>(n.openBlock(),n.createBlock(Eg,{key:r,title:l[0],children:l[1]},null,8,["title","children"]))),128))]),n.createElementVNode("div",_g,[n.createElementVNode("div",Sg,[n.createVNode(dt,{value:a.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(dt,{value:a.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(dt,{value:a.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),n.createElementVNode("button",{onClick:s,type:"button",class:"btn btn-link"},[n.createElementVNode("i",{class:n.normalizeClass(["bi",i.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),Pg=A._export_sfc(Ng,[["__scopeId","data-v-b1912966"]]),Tg="data:image/png;base64,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",Lg={id:"loading-screen",class:"container"},Dg={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},Bg={class:"logo"},Vg=["src"],Rg=n.defineComponent({__name:"LoadingScreen",setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",Lg,[i[1]||(i[1]=n.createElementVNode("h1",null,"Loading...",-1)),n.createElementVNode("h2",null,[(n.openBlock(),n.createElementBlock("svg",Dg,[...i[0]||(i[0]=[n.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),n.createElementVNode("div",Bg,[n.createElementVNode("img",{src:n.unref(Tg)},null,8,Vg)])]))}}),Ug=A._export_sfc(Rg,[["__scopeId","data-v-712b955c"]]),Fg={class:"main"},zg=n.defineComponent({__name:"MainView",setup(e){const t=n.ref(null),i=n.ref(null),s=n.shallowRef(null),a=A.useGiro3dStore();return n.onMounted(()=>{s.value=new ds({backgroundColor:null,crs:a.getCRS(),target:t.value}),a.setMainView(s.value)}),n.onUnmounted(()=>{a.setMainView(null),s.value&&(s.value.view.setControls(null),s.value.dispose())}),(o,l)=>(n.openBlock(),n.createElementBlock("div",Fg,[n.createElementVNode("div",{ref_key:"mainView",ref:t,class:"main",id:"main-view"},null,512),n.createElementVNode("div",{ref_key:"inspectorView",ref:i,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),jg=A._export_sfc(zg,[["__scopeId","data-v-0d10144c"]]),Gg={class:"card root"},Hg={class:"d-flex align-items-center"},Zg=["aria-pressed"],Wg=n.defineComponent({__name:"NavigationButtons",setup(e){const t=A.useCameraStore(),i=Tt(),s=n.ref(t.getNavigationModeRef());n.watch(s,o=>{t.setNavigationMode(o);let l,r;switch(o){case"disabled":{l="Disabled",r="Camera is disabled";break}case"first-person":{l="First person",r=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
10
10
  <i class="bi bi-mouse2"></i> Scroll to zoom<br>
11
11
  <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right<br>
12
12
  <i class="bi bi-keyboard"></i> W/D/A/S: move up/down/left/right`;break}case"orbit":{l="Free navigation",r=`<i class="bi bi-hand-index-thumb"></i> Left-click to pan; Right-click to orbit<br>
13
13
  <i class="bi bi-mouse2"></i> Scroll to zoom to cursor<br>
14
14
  <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right`;break}case"position-on-map":{l="Position on map",r=`<i class="bi bi-hand-index-thumb"></i> Left-click on the map to move to First Person view on the ground.<br>
15
- Cancel with right-click or Escape`;break}default:return o}i.push(new X("Navigation",`Navigation mode set to <strong>${l}</strong>.<br>${r}`,"success"))});function a(){s.value!=="position-on-map"?s.value="position-on-map":s.value="orbit"}return(o,l)=>(n.openBlock(),n.createElementBlock("div",Gg,[n.createElementVNode("div",Hg,[l[2]||(l[2]=n.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),n.createVNode(A._sfc_main,{"model-value":s.value==="first-person","onUpdate:modelValue":l[0]||(l[0]=r=>s.value=r?"first-person":"orbit")},null,8,["model-value"]),l[3]||(l[3]=n.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),l[4]||(l[4]=n.createElementVNode("div",{class:"vr mx-2"},null,-1)),n.createElementVNode("button",{class:n.normalizeClass(["btn btn-sm btn-outline-secondary",s.value==="position-on-map"?"active":null]),"aria-pressed":s.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:a},[...l[1]||(l[1]=[n.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Zg)])]))}}),qg=A._export_sfc(Wg,[["__scopeId","data-v-b890a4be"]]),Yg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",Jg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",Xg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIi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",Kg="data:image/png;base64,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",Qg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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";var $g={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@trevoreyre/autocomplete-vue":{description:"Simple autocomplete component in vanilla JS and Vue",license:"MIT"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const td={class:"list-group my-3"},ed={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},id={class:"d-flex w-100 justify-content-between"},sd=["src"],ad={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},nd={class:"d-flex w-100 justify-content-between"},od=["src"],rd={class:"list-group-item"},ld={class:"d-flex w-100 justify-content-between"},hd=["src"],cd={class:"list-group-item"},gd={class:"d-flex w-100 justify-content-between"},dd={class:"text-end"},ud=["src"],Ad=["src"],Cd=["href"],md={key:0,class:"blockquote fw-light"},fd=n.defineComponent({__name:"AboutPanel",setup(e){const t=$g,i=A.useModuleStore().getLoadedModules();return(s,a)=>(n.openBlock(),n.createElementBlock("div",null,[a[4]||(a[4]=n.createStaticVNode('<p data-v-4397f0a3><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-4397f0a3>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-4397f0a3>Going further</h5><p data-v-4397f0a3> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>our GitLab project</a> for more info. </p><h5 data-v-4397f0a3>Contributors</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-4397f0a3>Brought to you by the Giro3D contributors.</a></p><h5 data-v-4397f0a3>Sponsors</h5>',6)),n.createElementVNode("div",td,[n.createElementVNode("a",ed,[n.createElementVNode("div",id,[a[0]||(a[0]=n.createElementVNode("span",null,"Oslandia",-1)),n.createElementVNode("img",{src:n.unref(Kg),class:"logo",alt:"Oslandia"},null,8,sd)])]),n.createElementVNode("a",ad,[n.createElementVNode("div",nd,[a[1]||(a[1]=n.createElementVNode("span",null,"BPI France",-1)),n.createElementVNode("img",{src:n.unref(Yg),class:"logo",alt:"BPI France"},null,8,od)])]),n.createElementVNode("span",rd,[n.createElementVNode("div",ld,[a[2]||(a[2]=n.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),n.createElementVNode("img",{src:n.unref(Jg),class:"logo",alt:"France 2030"},null,8,hd)])]),n.createElementVNode("span",cd,[n.createElementVNode("div",gd,[a[3]||(a[3]=n.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),n.createElementVNode("div",dd,[n.createElementVNode("img",{src:n.unref(Xg),class:"logo",alt:"France Relance"},null,8,ud),n.createElementVNode("img",{src:n.unref(Qg),class:"logo",alt:"European Union - Next Generation EU"},null,8,Ad)])])])]),a[5]||(a[5]=n.createStaticVNode('<p data-v-4397f0a3> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-4397f0a3>infos+3d@oslandia.com</a>. </p><h5 data-v-4397f0a3>License</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-4397f0a3>MIT License</a></p><h5 data-v-4397f0a3>Credits</h5><p data-v-4397f0a3>Data and services used from:</p><ul data-v-4397f0a3><li data-v-4397f0a3><a target="_blank" href="https://ign.fr/" data-v-4397f0a3>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-4397f0a3><a target="_blank" href="https://www.grandlyon.com/" data-v-4397f0a3>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://www.openstreetmap.org" data-v-4397f0a3>OpenStreetMap</a> (Imagery) </li><li data-v-4397f0a3><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-4397f0a3>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-4397f0a3><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-4397f0a3>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-4397f0a3><a target="_blank" href="https://oslandia.com" data-v-4397f0a3>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://bimdata.io/" data-v-4397f0a3>BIMData</a> (IFC model)</li></ul><p data-v-4397f0a3>Third-parties:</p>',7)),n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(Object.entries(n.unref(t)),([o,l])=>(n.openBlock(),n.createElementBlock("li",{key:o},[n.createElementVNode("a",{target:"_blank",href:l.homepage},n.toDisplayString(o)+" ("+n.toDisplayString(l.license)+")",9,Cd),l.description?(n.openBlock(),n.createElementBlock("blockquote",md,n.toDisplayString(l.description),1)):n.createCommentVNode("",!0)]))),128))]),a[6]||(a[6]=n.createElementVNode("p",null,"Loaded modules:",-1)),n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(i),o=>(n.openBlock(),n.createElementBlock("li",{key:o.name},[n.createElementVNode("code",null,n.toDisplayString(o.id),1)]))),128))]),a[7]||(a[7]=n.createElementVNode("hr",null,null,-1))]))}}),Id=A._export_sfc(fd,[["__scopeId","data-v-4397f0a3"]]),Y=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function pd(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return(Y[e&255]+Y[e>>8&255]+Y[e>>16&255]+Y[e>>24&255]+"-"+Y[t&255]+Y[t>>8&255]+"-"+Y[t>>16&15|64]+Y[t>>24&255]+"-"+Y[i&63|128]+Y[i>>8&255]+"-"+Y[i>>16&255]+Y[i>>24&255]+Y[s&255]+Y[s>>8&255]+Y[s>>16&255]+Y[s>>24&255]).toLowerCase()}const Qs=wt.defineStore("analysis",()=>{const e=n.ref([]);function t(s){const a={collapsible:!0,component:n.shallowRef(s.component),icon:s.icon,id:pd(),name:s.name};e.value.push(a)}function i(){return e.value}return{getTools:i,registerTool:t}}),vd=["id"],yd={class:"accordion-header"},bd=["data-bs-target","aria-controls"],Md=["id"],Ed={class:"accordion-body"},wd=n.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},icon:{},id:{},title:{}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:"accordion-item",id:t.id},[n.createElementVNode("h2",yd,[n.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":`#${t.id}-collapse`,"aria-expanded":"false","aria-controls":`${t.id}-collapse`},[t.icon?(n.openBlock(),n.createElementBlock("i",{key:0,class:n.normalizeClass(["bi icon",t.icon])},null,2)):n.createCommentVNode("",!0),n.createTextVNode(" "+n.toDisplayString(t.title),1)],8,bd)]),n.createElementVNode("div",{id:`${t.id}-collapse`,class:"accordion-collapse collapse","data-bs-parent":"#accordionExample"},[n.createElementVNode("div",Ed,[n.renderSlot(t.$slots,"default",{},void 0,!0)])],8,Md)],8,vd))}}),Od=A._export_sfc(wd,[["__scopeId","data-v-acce0d55"]]),xd={class:"accordion",id:"analysis-accordion"},_d={key:0,class:"warning"},kd=n.defineComponent({__name:"AnalysisPanel",setup(e){const t=Qs();return(i,s)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",xd,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getTools(),a=>(n.openBlock(),n.createBlock(Od,{id:a.id,key:a.id,title:a.name,icon:a.icon,collapsible:a.collapsible},{default:n.withCtx(()=>[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(a.component)))]),_:2},1032,["id","title","icon","collapsible"]))),128))]),n.unref(t).getTools().length===0?(n.openBlock(),n.createElementBlock("div",_d,"No analysis tool registered.")):n.createCommentVNode("",!0)],64))}}),Sd=A._export_sfc(kd,[["__scopeId","data-v-48d1d631"]]),Nd={},Pd={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Td(e,t){return n.openBlock(),n.createElementBlock("fieldset",Pd,[t[0]||(t[0]=n.createElementVNode("hr",null,null,-1)),n.renderSlot(e.$slots,"default")])}const Ve=A._export_sfc(Nd,[["render",Td]]),Re=n.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(e,{emit:t}){const i=t,s=n.ref(!1),a=n.ref(null);function o(g){if(g){const d=[];for(const C of g)d.push(C);i("import",d)}}function l(g){const d=g.target.files;o(d)}function r(g){s.value=!0,g.preventDefault()}function h(g){s.value=!1,g.preventDefault()}function c(g){g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="copy")}function u(g){var C;s.value=!1;const d=(C=g.dataTransfer)==null?void 0:C.files;o(d),g.preventDefault()}return(g,d)=>(n.openBlock(),n.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:r,onDragleave:h,onDrop:u},[n.createVNode(A._sfc_main$1,{title:g.title,text:g.text,icon:g.icon??"bi-box-arrow-left",onClick:d[0]||(d[0]=C=>a.value.click()),class:n.normalizeClass(["w-100",s.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),n.createElementVNode("input",{ref_key:"hiddenInput",ref:a,class:"btn btn-outline-secondary d-none",type:"file",onInput:l,multiple:"true"},null,544)],32))}}),Ld={class:"border p-2"},Dd={class:"float-none w-auto form-text mb-0 px-2"},Bd={key:0,class:"form-text mt-0 mx-2"},Vd=["id","aria-label"],Rd=["value"],Ud={key:1,class:"form-text mt-0 mx-2"},$s=n.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(e,{emit:t}){const i=e,s=t,a=n.ref(i.current);function o(r){const h=i.items[r];a.value=h,s("updated:current",h)}const l=A.MathUtils.generateUUID();return(r,h)=>(n.openBlock(),n.createElementBlock("fieldset",Ld,[n.createElementVNode("legend",Dd,n.toDisplayString(r.label),1),r.descriptionPosition==="top"&&a.value!==null&&a.value.description?(n.openBlock(),n.createElementBlock("div",Bd,n.toDisplayString(a.value.description),1)):n.createCommentVNode("",!0),n.createElementVNode("select",{id:n.unref(l),class:"form-select","aria-label":r.label,onInput:h[0]||(h[0]=c=>o(c.target.selectedIndex))},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(r.items,(c,u)=>(n.openBlock(),n.createElementBlock("option",{key:u,value:u},n.toDisplayString(c.name),9,Rd))),128))],40,Vd),r.descriptionPosition!=="top"&&a.value!==null&&a.value.description?(n.openBlock(),n.createElementBlock("div",Ud,n.toDisplayString(a.value.description),1)):n.createCommentVNode("",!0)]))}}),Fd=n.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(e){return(t,i)=>(n.openBlock(),n.createBlock(A._sfc_main,{"model-value":t.visible,"onUpdate:modelValue":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["model-value"]))}}),Yt=A._export_sfc(Fd,[["__scopeId","data-v-7c3ff3bf"]]),zd=n.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",null,n.toDisplayString(e.text),1))}}),Ue=A._export_sfc(zd,[["__scopeId","data-v-a385fce5"]]),jd={class:"list-group-item item"},Gd={class:"d-flex"},Hd=["title"],Zd={class:"icons"},Wd=["data-bs-target"],qd=["id"],Yd={key:1,class:"table table-striped table-sm table-responsive-sm"},Jd=n.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(e){const t=e,i=n.ref(t.annotation.isEditing),s=()=>{i.value=t.annotation.isEditing};return n.onMounted(()=>{t.annotation.addEventListener("isEditing",s)}),n.onUnmounted(()=>{t.annotation.removeEventListener("isEditing",s)}),(a,o)=>(n.openBlock(),n.createElementBlock("li",jd,[n.createElementVNode("div",Gd,[n.createVNode(Yt,{visible:a.visible,"onUpdate:visible":o[0]||(o[0]=l=>a.$emit("update:visible",l))},null,8,["visible"]),n.createElementVNode("a",{class:"title",title:a.annotation.title,href:"#",onClick:o[1]||(o[1]=l=>a.$emit("zoom"))},n.toDisplayString(a.annotation.title),9,Hd),n.createElementVNode("div",Zd,[n.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${a.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...o[5]||(o[5]=[n.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,Wd),n.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:o[2]||(o[2]=l=>i.value?a.$emit("stop-edit"):a.$emit("edit"))},[n.createElementVNode("i",{class:n.normalizeClass(`bi bi-pencil ${i.value?"text-primary":""}`)},null,2)]),n.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:o[3]||(o[3]=l=>a.$emit("download"))},[...o[6]||(o[6]=[n.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),n.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:o[4]||(o[4]=l=>a.$emit("delete"))},[...o[7]||(o[7]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),n.createElementVNode("div",{class:"collapse m-2",id:`collapse-${a.annotation.uuid}`},[Object.entries(a.annotation.properties).length===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No properties"})):(n.openBlock(),n.createElementBlock("table",Yd,[o[8]||(o[8]=n.createElementVNode("thead",null,[n.createElementVNode("tr",null,[n.createElementVNode("th",null,"Key"),n.createElementVNode("th",null,"Value")])],-1)),n.createElementVNode("tbody",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(Object.entries(a.annotation.properties),([l,r])=>(n.openBlock(),n.createBlock(Ks,{key:l,"attr-name":l,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])]))],8,qd)]))}}),Xd=A._export_sfc(Jd,[["__scopeId","data-v-364a81a5"]]),rs=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],Kd={class:"d-flex flex-column h-100"},Qd={class:"list-group list-group-flush flex-fill overflow-auto"},$d=n.defineComponent({__name:"AnnotationPanel",setup(e){const t=bi(),i=A.useCameraStore(),s=n.ref(t.getAnnotationMode());n.watch(s,c=>{t.setAnnotationMode(c)});function a(c){const u=c.toGeoJSON();A.Download.downloadAsJson(u,`annotation-${c.title}.json`)}function o(){const c=Ws.toCollection(t.getAnnotations());A.Download.downloadAsJson(c,"annotations.json")}function l(c){i.lookTopDownAt(c.object)}function r(c){t.importAnnotationsFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,u)=>(n.openBlock(),n.createElementBlock("div",Kd,[n.unref(t).count===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No annotations"})):n.createCommentVNode("",!0),n.createElementVNode("ul",Qd,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getAnnotations(),g=>(n.openBlock(),n.createBlock(Xd,{key:g.title,annotation:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onEdit:d=>n.unref(t).edit(g),onStopEdit:u[0]||(u[0]=d=>n.unref(t).stopEdition()),onDelete:d=>n.unref(t).remove(g),onDownload:d=>a(g),onZoom:d=>l(g)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),n.createVNode(Ve,{disabled:n.unref(t).isUserDrawing(),id:"annotations-fieldset"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main,{"model-value":n.unref(t).showLabels(),"onUpdate:modelValue":u[1]||(u[1]=g=>n.unref(t).setShowLabels(g)),title:"show labels"},{default:n.withCtx(()=>[...u[6]||(u[6]=[n.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),n.createVNode($s,{label:"Picking mode","description-position":"top",current:n.unref(rs)[0],items:n.unref(rs),"onUpdated:current":u[2]||(u[2]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),n.createVNode(A._sfc_main$1,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:u[3]||(u[3]=g=>n.unref(t).createPoint())}),n.createVNode(A._sfc_main$1,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:u[4]||(u[4]=g=>n.unref(t).createLine())}),n.createVNode(A._sfc_main$1,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:u[5]||(u[5]=g=>n.unref(t).createPolygon())}),n.createVNode(A._sfc_main$1,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:o}),n.createVNode(Re,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:r})]),_:1},8,["disabled"])]))}}),tu={key:0},eu={class:"modal-dialog"},iu={class:"modal-content"},su={class:"modal-header"},au={class:"modal-title fs-5",id:"exampleModalLabel"},nu={class:"modal-body"},ou={class:"modal-footer"},ru=n.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(e){return(t,i)=>e.show?(n.openBlock(),n.createElementBlock("div",tu,[i[2]||(i[2]=n.createElementVNode("div",{class:"background"},null,-1)),n.createElementVNode("div",{class:n.normalizeClass(["modal","fade","d-block",e.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[n.createElementVNode("div",eu,[n.createElementVNode("div",iu,[n.createElementVNode("div",su,[n.createElementVNode("h1",au,n.toDisplayString(e.title),1),n.createElementVNode("button",{type:"button",class:"btn-close",onClick:i[0]||(i[0]=s=>t.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),n.createElementVNode("div",nu,[n.renderSlot(t.$slots,"default",{},void 0,!0)]),n.createElementVNode("div",ou,[n.createElementVNode("button",{type:"button",onClick:i[1]||(i[1]=s=>t.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):n.createCommentVNode("",!0)}}),lu=A._export_sfc(ru,[["__scopeId","data-v-1f7f2e97"]]),hu={class:"list-group-item item d-flex d-flex-end"},cu=n.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",hu,[n.createElementVNode("a",{class:"bookmark",href:"#",onClick:i[0]||(i[0]=s=>t.$emit("goto"))},n.toDisplayString(e.name),1),n.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:i[1]||(i[1]=s=>t.$emit("share"))},[...i[3]||(i[3]=[n.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),n.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[4]||(i[4]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),gu=A._export_sfc(cu,[["__scopeId","data-v-682112f6"]]),du={class:"input-group mb-3"},uu={class:"form-control text-truncate"},Au={class:"input-group-text",id:"basic-addon2"},Cu=n.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(e){function t(i){navigator.clipboard.writeText(i)}return(i,s)=>(n.openBlock(),n.createElementBlock("div",null,[s[2]||(s[2]=n.createElementVNode("p",null,"Use this link to share your bookmark",-1)),n.createElementVNode("div",du,[n.createElementVNode("span",uu,n.toDisplayString(i.url),1),n.createElementVNode("span",Au,[n.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:s[0]||(s[0]=()=>t(i.url))},[...s[1]||(s[1]=[n.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class kt extends A.EventDispatcher{constructor(i,s){super();y(this,"camera");y(this,"name");this.name=i,this.camera=s}static new(i,s){const o=new URL(s).searchParams.get("view");if(o===null)throw new Error("Could not deserialize bookmark");const l=JSON.parse(o),r=new A.Vector3(l.camera[0],l.camera[1],l.camera[2]),h=new A.Vector3(l.target[0],l.target[1],l.target[2]),c=new A.Vector3(l.focalOffset[0],l.focalOffset[1],l.focalOffset[2]),u=new Be(r,h,c);return new kt(i,u)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const i=A.Download.getBaseUrl()+"?",s=this.camera,a={camera:[s.camera.x,s.camera.y,s.camera.z],focalOffset:[s.focalOffset.x,s.focalOffset.y,s.focalOffset.z],target:[s.target.x,s.target.y,s.target.z]},o=new URL(i),l=o.searchParams;return l.set("tour","none"),l.set("view",JSON.stringify(a)),o}goTo(){this.dispatchEvent({type:"goto"})}}function mu(){const e=A.getConfig(),t=[];for(const i of e.bookmarks){const s=i.position,a=i.target,o=i.focalOffset,l=i.title,r=new Be(new A.Vector3(s.x,s.y,s.z),new A.Vector3(a.x,a.y,a.z),new A.Vector3(o.x,o.y,o.z));t.push(new kt(l,r))}return t}const ta=wt.defineStore("bookmarks",()=>{const e=n.ref(new Set(mu())),t=n.computed(()=>e.value.size);function i(l){e.value.add(l),bt.dispatchEvent({type:"bookmark-added",value:l})}function s(l){e.value.delete(l),bt.dispatchEvent({type:"bookmark-removed",value:l})}function a(){e.value.clear()}function o(){return[...e.value]}return{add:i,clear:a,count:t,getBookmarks:o,remove:s}}),fu={class:"d-flex flex-column h-100"},Iu={class:"list-group list-group-flush flex-fill overflow-auto"},pu=n.defineComponent({__name:"BookmarkPanel",setup(e){const t=n.ref(!1),i=n.ref(null),s=n.ref(null),a=Pt(),o=ta(),l=A.useCameraStore();function r(){const f=window.prompt("Bookmark name","New bookmark");if(f!=null){const m=new kt(f,l.getCameraPosition());o.add(m)}}function h(){const f=[];for(const m of o.getBookmarks())f.push({title:m.name,url:m.getUrl().toString()});A.Download.downloadAsJson(f,"bookmarks.json")}function c(f){l.setCameraPosition(f.camera)}function u(f){for(const m of f)g(m)}async function g(f){const m=await f.text(),v=JSON.parse(m),I=new Set(o.getBookmarks().map(O=>O.name));let b=0,M=0;v.forEach(O=>{I.has(O.title)?M++:(o.add(kt.new(O.title,O.url)),b++)}),a.push(new X("Bookmarks",`${b} bookmarks imported (${M} skipped)`,"success"))}function d(f){i.value=f.getUrl().toString(),s.value="Share bookmark",t.value=!0}function C(){const f=new kt("temp",l.getCameraPosition());i.value=f.getUrl().toString(),s.value="Share current view",t.value=!0}return(f,m)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",fu,[n.unref(o).count===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No bookmarks"})):n.createCommentVNode("",!0),n.createElementVNode("ul",Iu,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(o).getBookmarks(),v=>(n.openBlock(),n.createBlock(gu,{key:v.name,name:v.name,onShare:I=>d(v),onDelete:I=>n.unref(o).remove(v),onGoto:I=>c(v)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),n.createVNode(Ve,null,{default:n.withCtx(()=>[n.createVNode(A._sfc_main$1,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:m[0]||(m[0]=()=>{r(),f.$forceUpdate()})}),n.createVNode(A._sfc_main$1,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:C}),n.createVNode(A._sfc_main$1,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:h,icon:"bi-box-arrow-right",text:"Export bookmarks"}),n.createVNode(Re,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:u})]),_:1})]),n.createVNode(lu,{show:t.value,title:s.value,onClose:m[1]||(m[1]=()=>t.value=!1)},{default:n.withCtx(()=>[n.createVNode(Cu,{url:i.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),vu={},yu={class:"list-group list-group-flush border-start"};function bu(e,t){return n.openBlock(),n.createElementBlock("ul",yu,[n.renderSlot(e.$slots,"default")])}const Oe=A._export_sfc(vu,[["render",bu],["__scopeId","data-v-461b97dc"]]),Mu=["aria-expanded","aria-controls"],Eu={key:0,class:"icon me-2"},wu={class:"flex-fill"},Ou={key:1,class:"icon ms-2"},xu=["id"],ni=n.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(e,{emit:t}){const i=e,s=t,a=A.MathUtils.generateUUID(),o=`#${a}`,l=n.ref(null);return n.onMounted(()=>{var r,h,c;i.expanded&&((r=l.value)==null||r.classList.add("show")),(h=l.value)==null||h.addEventListener("hidden.bs.collapse",()=>s("update:expanded",!1)),(c=l.value)==null||c.addEventListener("shown.bs.collapse",()=>s("update:expanded",!0))}),(r,h)=>(n.openBlock(),n.createElementBlock("div",null,[n.createElementVNode("h6",null,[n.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:o,"data-bs-toggle":"collapse",role:"button","aria-expanded":r.expanded,"aria-controls":n.unref(a)},[r.iconPosition==="left"?(n.openBlock(),n.createElementBlock("div",Eu,[...h[0]||(h[0]=[n.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):n.createCommentVNode("",!0),n.createElementVNode("span",wu,n.toDisplayString(r.title),1),r.iconPosition!=="left"?(n.openBlock(),n.createElementBlock("div",Ou,[...h[1]||(h[1]=[n.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):n.createCommentVNode("",!0)],8,Mu)]),n.createElementVNode("div",{ref_key:"collapsible",ref:l,id:n.unref(a),class:"collapse"},[n.renderSlot(r.$slots,"default")],8,xu)]))}}),_u=n.defineComponent({__name:"ListLabel",props:{title:{}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",t.$attrs.class])},n.toDisplayString(t.title),3))}}),ku={class:"slider d-flex"},Su={key:0,title:"Transparent",class:"bi-x-diamond me-1"},Nu={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},Pu=["value"],Tu={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},Lu=n.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",ku,[t.size!=="small"?(n.openBlock(),n.createElementBlock("i",Su)):n.createCommentVNode("",!0),t.size==="small"?(n.openBlock(),n.createElementBlock("i",Nu)):n.createCommentVNode("",!0),n.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:i[0]||(i[0]=s=>t.$emit("update:opacity",Number.parseFloat(s.target.value))),value:t.opacity},null,40,Pu),t.size!=="small"?(n.openBlock(),n.createElementBlock("i",Tu)):n.createCommentVNode("",!0)]))}}),ea=A._export_sfc(Lu,[["__scopeId","data-v-5b0604f2"]]),Du={class:"list-group-item"},Bu={class:"d-flex"},Vu=n.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(e){const t={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},i={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(s,a)=>(n.openBlock(),n.createElementBlock("li",Du,[n.createElementVNode("div",Bu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:t[s.type],title:i[s.type]},null,8,["icon","title"])]),_:1}),n.createVNode(Yt,{visible:s.visible,"onUpdate:visible":a[0]||(a[0]=o=>s.$emit("update:visible",o))},null,8,["visible"]),n.createVNode(_u,{title:s.name,class:n.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(n.openBlock(),n.createBlock(ea,{key:0,class:n.normalizeClass(["opacity-slider",s.visible?null:"disabled"]),opacity:s.opacity,"onUpdate:opacity":a[1]||(a[1]=o=>s.$emit("update:opacity",o))},null,8,["class","opacity"])):n.createCommentVNode("",!0)])]))}}),ls=A._export_sfc(Vu,[["__scopeId","data-v-a7bbfe26"]]),Ru={},Uu={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function Fu(e,t){return n.openBlock(),n.createElementBlock("div",Uu,[...t[0]||(t[0]=[n.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const ia=A._export_sfc(Ru,[["render",Fu]]),zu={class:"d-flex"},ju={key:0,class:"icon spinner d-inline-block"},Gu={key:1,class:"list-group-item"},Hu=n.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=e,i=n.reactive(t.group.leafs()),s=n.ref(!1),a=n.ref(!1),o=n.ref(t.group.visible);n.watch(i,h=>{s.value=h.some(c=>c.isPreloading),a.value=h.some(c=>c.isPreloaded),o.value=h.some(c=>c.visible)});const l=A.MathUtils.generateUUID(),r=`#${l}`;return(h,c)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",zu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[...c[10]||(c[10]=[n.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),n.createVNode(Yt,{visible:o.value,"onUpdate:visible":c[0]||(c[0]=u=>h.$emit("update:visible",h.group,u))},null,8,["visible"]),n.createVNode(A.IconList,{class:"me-1"},{default:n.withCtx(()=>[n.createVNode(A.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":r,"aria-controls":n.unref(l),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),n.createVNode(A._sfc_main$3,{class:"label",disabled:!o.value||!a.value,text:h.group.name,title:`Zoom to ${h.group.name}`,onClick:c[1]||(c[1]=u=>h.$emit("zoom",h.group))},null,8,["disabled","text","title"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[s.value?(n.openBlock(),n.createElementBlock("div",ju,[n.createVNode(ia,{title:"Loading..."})])):n.createCommentVNode("",!0),a.value&&(h.group.config.canMaskBasemap||h.group.config.isMaskingBasemap)?(n.openBlock(),n.createBlock(A.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=u=>h.$emit("update:toggle-mask",h.group))})):n.createCommentVNode("",!0),a.value?(n.openBlock(),n.createBlock(A.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=u=>h.$emit("clipTo",h.group))})):n.createCommentVNode("",!0),a.value?(n.openBlock(),n.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=u=>h.$emit("update:toggle-grid",h.group))})):n.createCommentVNode("",!0)]),_:1})]),n.createVNode(Oe,{id:n.unref(l),class:"collapse pb-3"},{default:n.withCtx(()=>[h.group.children.length>0?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(h.group.children,u=>(n.openBlock(),n.createBlock(sa,{key:u.name,dataset:u,onZoom:c[5]||(c[5]=g=>h.$emit("zoom",g)),onClipTo:c[6]||(c[6]=g=>h.$emit("clipTo",g)),"onUpdate:toggleGrid":c[7]||(c[7]=g=>h.$emit("update:toggle-grid",g)),"onUpdate:toggleMask":c[8]||(c[8]=g=>h.$emit("update:toggle-mask",g)),"onUpdate:visible":c[9]||(c[9]=(g,d)=>h.$emit("update:visible",g,d))},null,8,["dataset"]))),128)):(n.openBlock(),n.createElementBlock("li",Gu,"No dataset in this group"))]),_:1},8,["id"])],64))}}),Zu=A._export_sfc(Hu,[["__scopeId","data-v-7592eab8"]]),Wu={class:"d-flex"},qu={key:0,class:"icon spinner d-inline-block"},Yu=["id"],Ju=n.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=A.useDatasetStore(),i=e,s=A.refAndWatch(i.dataset,"isPreloading"),a=A.refAndWatch(i.dataset,"isPreloaded"),o=A.refAndWatch(i.dataset,"visible");function l(){t.remove(i.dataset)}return(r,h)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",Wu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:n.unref(ds)[r.dataset.type]??"bi-file-earmark-x",title:n.unref(us)[r.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),n.createVNode(Yt,{visible:n.unref(o),"onUpdate:visible":h[0]||(h[0]=c=>r.$emit("update:visible",r.dataset,c))},null,8,["visible"]),n.createVNode(A._sfc_main$3,{class:"label",disabled:!n.unref(o)||!n.unref(a),text:r.dataset.name,title:`Zoom to ${r.dataset.name}`,onClick:h[1]||(h[1]=c=>r.$emit("zoom",r.dataset))},null,8,["disabled","text","title"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[n.unref(s)?(n.openBlock(),n.createElementBlock("div",qu,[n.createVNode(ia,{title:"Loading..."})])):n.createCommentVNode("",!0),n.unref(be).has(r.dataset.type)&&n.unref(a)?(n.openBlock(),n.createBlock(A.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${r.dataset.uuid}`,"aria-controls":`collapse-${r.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):n.createCommentVNode("",!0),n.unref(a)&&("canMaskBasemap"in r.dataset.config&&r.dataset.config.canMaskBasemap||"isMaskingBasemap"in r.dataset.config&&r.dataset.config.isMaskingBasemap)?(n.openBlock(),n.createBlock(A.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:h[2]||(h[2]=c=>r.$emit("update:toggle-mask",r.dataset))})):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getCustomActions(r.dataset,{isVisible:n.unref(o),isPreloaded:n.unref(a)}),c=>(n.openBlock(),n.createBlock(A.IconListButton,{key:c.title,title:c.title,icon:c.icon,onClick:u=>c.action(r.dataset)},null,8,["title","icon","onClick"]))),128)),n.unref(a)?(n.openBlock(),n.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:h[3]||(h[3]=c=>r.$emit("update:toggle-grid",r.dataset))})):n.createCommentVNode("",!0),n.createVNode(A.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:l})]),_:1})]),n.unref(be).has(r.dataset.type)?(n.openBlock(),n.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${r.dataset.uuid}`},[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(n.unref(be).get(r.dataset.type)),{dataset:r.dataset},null,8,["dataset"]))],8,Yu)):n.createCommentVNode("",!0)],64))}}),Xu=A._export_sfc(Ju,[["__scopeId","data-v-1aa9a2d7"]]),Ku={class:"list-group-item"},sa=n.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",Ku,[n.unref(A.Datagroup).isGroup(t.dataset)?(n.openBlock(),n.createBlock(Zu,{key:0,group:t.dataset,onZoom:i[0]||(i[0]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[1]||(i[1]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[2]||(i[2]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[3]||(i[3]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["group"])):(n.openBlock(),n.createBlock(Xu,{key:1,dataset:t.dataset,onZoom:i[4]||(i[4]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[5]||(i[5]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[6]||(i[6]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[7]||(i[7]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["dataset"]))]))}}),Qu={class:"list-group-item d-flex"},$u=n.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",Qu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),n.createVNode(Yt,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),n.createVNode(A._sfc_main$3,{class:"label",disabled:!t.visible,title:`Zoom to ${t.name}`,text:t.name,onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},null,8,["disabled","title","text"]),n.createVNode(ea,{class:n.normalizeClass(["opacity-slider",t.visible?null:"disabled"]),opacity:t.opacity,size:"small","onUpdate:opacity":i[2]||(i[2]=s=>t.$emit("update:opacity",s))},null,8,["class","opacity"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[n.createVNode(A.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:i[3]||(i[3]=s=>t.$emit("update:move-up"))}),n.createVNode(A.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:i[4]||(i[4]=s=>t.$emit("update:move-down"))})]),_:1})]))}}),tA=A._export_sfc($u,[["__scopeId","data-v-8755c19f"]]),eA={class:"d-flex flex-column h-100"},iA={class:"flex-fill overflow-auto"},sA=n.defineComponent({__name:"DatasetPanel",setup(e){const t=A.useDatasetStore(),i=A.useCameraStore(),s=A.useLayerStore();function a(r){for(const h of r)t.importFromFile(h)}function o(){const r=document.getElementById("dataset-import-url");t.importFromFile(r.value)}function l(r){const h=t.getBoundingBox(r);h!=null&&h.isEmpty()||i.lookTopDownAt(h)}return(r,h)=>(n.openBlock(),n.createElementBlock("div",eA,[n.createElementVNode("div",iA,[n.createVNode(ni,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:n.withCtx(()=>[n.createVNode(Oe,{id:"layers-list-group"},{default:n.withCtx(()=>[n.unref(s).getGraticuleLayer()!==void 0?(n.openBlock(),n.createBlock(ls,{key:0,type:"graticule",opacity:1,name:n.unref(s).getGraticuleLayer().name,isLoading:!1,visible:n.unref(s).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":h[0]||(h[0]=c=>n.unref(s).getGraticuleLayer().visible=c)},null,8,["name","visible"])):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(s).getBasemaps(),c=>(n.openBlock(),n.createBlock(ls,{key:c.name,type:c.type,opacity:c.opacity,name:c.name,isLoading:c.isLoading,visible:c.visible,hasOpacitySlider:c.type==="color"||c.type==="elevation","onUpdate:visible":u=>n.unref(s).setBasemapVisibility(c,u),"onUpdate:opacity":u=>n.unref(s).setBasemapOpacity(c,u)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),n.unref(s).overlayCount>0?(n.openBlock(),n.createBlock(ni,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:n.withCtx(()=>[n.createVNode(Oe,null,{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(s).getOverlays(),c=>(n.openBlock(),n.createBlock(tA,{key:c.name,opacity:c.opacity,name:c.name,visible:c.visible,"onUpdate:visible":u=>n.unref(s).setOverlayVisibility(c,u),"onUpdate:opacity":u=>n.unref(s).setOverlayOpacity(c,u),"onUpdate:moveUp":u=>n.unref(s).moveOverlayUp(c),"onUpdate:moveDown":u=>n.unref(s).moveOverlayDown(c)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):n.createCommentVNode("",!0),n.createVNode(ni,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:n.withCtx(()=>[n.createVNode(Oe,null,{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getTree(),c=>(n.openBlock(),n.createBlock(sa,{key:c.name,dataset:c,onUpdated:h[1]||(h[1]=u=>r.$forceUpdate()),onZoom:h[2]||(h[2]=u=>l(u)),"onUpdate:toggleGrid":h[3]||(h[3]=u=>n.unref(t).toggleGrid(u)),"onUpdate:toggleMask":h[4]||(h[4]=u=>n.unref(t).toggleMask(u)),"onUpdate:visible":h[5]||(h[5]=(u,g)=>n.unref(t).setVisible(u,g))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),n.createVNode(Ve,null,{default:n.withCtx(()=>[n.createElementVNode("div",{class:"input-group mb-3"},[h[6]||(h[6]=n.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),n.createElementVNode("button",{onClick:o,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),n.createVNode(Re,{title:"Import file",text:"Import file",onImport:a})]),_:1})]))}}),aA={class:"list-group-item item"},nA={class:"d-flex"},oA=["title"],rA={class:"icons"},lA=n.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",aA,[n.createElementVNode("div",nA,[n.createVNode(Yt,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),n.createElementVNode("a",{class:"title",title:t.measure.title,href:"#",onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},n.toDisplayString(t.measure.title)+" ("+n.toDisplayString(t.measure.object.length.toFixed(2))+"m)",9,oA),n.createElementVNode("div",rA,[n.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[3]||(i[3]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),hA=A._export_sfc(lA,[["__scopeId","data-v-bcecb7b2"]]),hs=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],cA={class:"d-flex flex-column h-100"},gA={class:"list-group list-group-flush flex-fill overflow-auto"},dA=n.defineComponent({__name:"MeasurementPanel",setup(e){const t=Mi(),i=A.useCameraStore(),s=n.ref(t.getMeasurementMode());n.watch(s,c=>{t.setMeasurementMode(c)});function a(c){const u=c.toGeoJSON();A.Download.downloadAsJson(u,`measure-${c.title}.json`)}function o(){const c=Xs.toCollection(t.getMeasures());A.Download.downloadAsJson(c,"measures.json")}function l(c){i.lookTopDownAt(c.object)}function r(c){t.importMeasureFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,u)=>(n.openBlock(),n.createElementBlock("div",cA,[u[3]||(u[3]=n.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[n.createElementVNode("i",{class:"bi bi-cone-striped"}),n.createTextVNode(" This feature is experimental ")],-1)),n.unref(t).count===0?(n.openBlock(),n.createBlock(Ue,{key:0,text:"No measurements"})):n.createCommentVNode("",!0),n.createElementVNode("ul",gA,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getMeasures(),g=>(n.openBlock(),n.createBlock(hA,{key:g.title,measure:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onDelete:d=>n.unref(t).remove(g),onDownload:d=>a(g),onZoom:d=>l(g)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),n.createVNode(Ve,{id:"measures-fieldset"},{default:n.withCtx(()=>[n.createVNode($s,{label:"Mode","description-position":"top",current:n.unref(hs)[0],items:n.unref(hs),"onUpdated:current":u[0]||(u[0]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),n.unref(t).isUserMeasuring()?(n.openBlock(),n.createBlock(A._sfc_main$1,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:u[1]||(u[1]=g=>n.unref(t).end())})):(n.openBlock(),n.createBlock(A._sfc_main$1,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:u[2]||(u[2]=g=>n.unref(t).start())})),n.createVNode(A._sfc_main$1,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:o,icon:"bi-box-arrow-right",text:"Export measures"}),n.createVNode(Re,{title:"Import measures from GeoJSON",text:"Import measures",onImport:r})]),_:1})]))}}),uA={class:"panel",id:"panel-container"},AA={class:"title"},CA={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},mA={class:"content"},fA=n.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(e){const t=gs(),i=`packages-v1.0.0-beta.4
16
- `;return(s,a)=>{var o;return n.openBlock(),n.createElementBlock("div",uA,[n.createElementVNode("h5",AA,[n.createTextVNode(n.toDisplayString((o=n.unref(t).find(l=>l.key===s.selected))==null?void 0:o.title)+" ",1),s.selected==="about"?(n.openBlock(),n.createElementBlock("span",CA,"Version: "+n.toDisplayString(n.unref(i)),1)):n.createCommentVNode("",!0)]),n.createElementVNode("div",mA,[s.selected==="datasets"?(n.openBlock(),n.createBlock(sA,{key:0})):n.createCommentVNode("",!0),s.selected==="about"?(n.openBlock(),n.createBlock(Id,{key:1})):n.createCommentVNode("",!0),s.selected==="bookmarks"?(n.openBlock(),n.createBlock(pu,{key:2})):n.createCommentVNode("",!0),s.selected==="analysis"?(n.openBlock(),n.createBlock(Sd,{key:3})):n.createCommentVNode("",!0),s.selected==="annotations"?(n.openBlock(),n.createBlock($d,{key:4})):n.createCommentVNode("",!0),s.selected==="measures"?(n.openBlock(),n.createBlock(dA,{key:5})):n.createCommentVNode("",!0)])])}}}),IA=A._export_sfc(fA,[["__scopeId","data-v-381fd038"]]),pA=["aria-valuenow"],vA={methods:{tick(){this.$forceUpdate()}}},yA=n.defineComponent({...vA,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":e.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[e.progress!=1?(n.openBlock(),n.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:n.normalizeStyle(`width: ${e.progress*100}%`)},null,4)):n.createCommentVNode("",!0)],8,pA))}}),aa=wt.defineStore("search",()=>{const e=n.shallowRef([]);function t(s){e.value.includes(s)||e.value.push(s)}function i(){return[...e.value]}return{getProviders:i,registerProvider:t}}),bA={class:"main"},MA={class:"result-label"},EA={class:"result-type"},wA={class:"provider"},OA=["v-html"],xA=n.defineComponent({__name:"SearchOverlay",emits:["resultSelected"],setup(e,{emit:t}){const i=t,s=aa();function a(r){return r.label}async function o(r){if(r.length<3)return Promise.resolve([]);const c=s.getProviders().map(g=>g.search(r));return(await Promise.all(c)).flatMap(g=>g)}function l(r){i("resultSelected",r)}return(r,h)=>(n.openBlock(),n.createElementBlock("div",bA,[n.createVNode(n.unref(Ba),{debounceTime:500,search:o,getResultValue:a,onSubmit:l,id:"search-place-autocomplete",placeholder:"Search..."},{result:n.withCtx(({result:c,props:u})=>[n.createElementVNode("li",n.mergeProps(u,{class:"autocomplete-result result"}),[n.createElementVNode("div",MA,[n.createElementVNode("span",EA,[n.createVNode(A._sfc_main$2,{icon:"fg-poi",title:"Location"})]),n.createElementVNode("span",null,n.toDisplayString(c.label),1),n.createElementVNode("p",wA,n.toDisplayString(c.provider.name),1)]),n.createElementVNode("div",{class:"wiki-snippet","v-html":c.snippet},null,8,OA)],16)]),_:1})]))}}),_A=A._export_sfc(xA,[["__scopeId","data-v-de1fa405"]]),kA={class:"d-flex column-gap-3"},SA=n.defineComponent({__name:"StatusBar",props:{x:Number,y:Number,z:Number},setup(e){return(t,i)=>{var s,a,o;return n.openBlock(),n.createElementBlock("div",null,[n.createElementVNode("div",kA,[i[0]||(i[0]=n.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),n.createVNode(It,{value:(s=e.x)==null?void 0:s.toFixed(0),prefix:"X:"},null,8,["value"]),n.createVNode(It,{value:(a=e.y)==null?void 0:a.toFixed(0),prefix:"Y:"},null,8,["value"]),n.createVNode(It,{value:(o=e.z)==null?void 0:o.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),NA=A._export_sfc(SA,[["__scopeId","data-v-3d05468b"]]),PA="data:image/png;base64,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",TA={class:"nav-item"},LA=["id","title"],DA=n.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",TA,[n.createElementVNode("a",{id:`toolbar-${e.tourkey}`,class:n.normalizeClass(["nav-link",e.active?"active":null]),href:"#",title:e.title},[n.createElementVNode("i",{class:n.normalizeClass(["bi",e.icon])},null,2)],10,LA)]))}}),BA={class:"toolbar"},VA={id:"menu",class:"nav nav-pills flex-column"},RA={class:"nav-item mt-2"},UA={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},FA=["src"],zA=n.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(e){const t=gs();return(i,s)=>(n.openBlock(),n.createElementBlock("div",BA,[n.createElementVNode("ul",VA,[n.createElementVNode("li",RA,[n.createElementVNode("a",UA,[n.createElementVNode("img",{src:n.unref(PA),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,FA)])]),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t),a=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[a.enabled?(n.openBlock(),n.createBlock(DA,{active:i.active===a.key,key:a.key,tourkey:a.key,title:a.title,icon:a.icon,onClick:o=>i.$emit("selected",a.key)},null,8,["active","tourkey","title","icon","onClick"])):n.createCommentVNode("",!0)],64))),256))])]))}}),jA=A._export_sfc(zA,[["__scopeId","data-v-f84bccda"]]),na=wt.defineStore("widgets",()=>{const e=n.shallowRef([]);function t(s){e.value.push(s)}function i(){return[...e.value]}return{addWidget:t,getWidgets:i}}),GA=["id"],HA=n.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(e){const t=n.ref("datasets"),i=n.ref(1),s=n.ref(new A.Vector3(0,0,0)),a=new A.Vector2,o=n.ref(null),l=n.ref(null),r=n.ref(!1),h=n.ref(!0);let c=!1;const u=A.useGiro3dStore(),g=A.useCameraStore(),d=bi(),C=Mi(),f=na(),m=n.shallowRef(null),v=n.ref();n.onMounted(()=>{u.getMainView()&&b(),u.$onAction(({after:R,args:B,name:K})=>{R(()=>{switch(K){case"setMainView":B[0]===null?I():b();break}})}),v.value=setInterval(()=>{c&&(S(a),D(a),c=!1)},50),setTimeout(()=>{h.value=!1},1e3),bt.dispatchEvent({type:"ready"})}),n.onUnmounted(()=>{v.value!=null&&(clearInterval(v.value),v.value=void 0),I()});function I(){var T;(T=m.value)==null||T.dispose(),m.value=null}function b(){const T=u.getMainView();if(T===null)throw new Error("mainview is null");m.value=new Zc(T),m.value.addEventListener("update",()=>{m.value&&(i.value=m.value.mainInstance.progress,r.value=m.value.mainInstance.loading)}),e.getContext().view=new Wc({camera:m.value.camera,instance:m.value.mainInstance,sceneCursorManager:m.value.sceneCursorManager})}function M(T){m.value&&(m.value.mainInstance.eventToCanvasCoords(T,a),c=!0)}function O(T){if(m.value&&wc(T)){const R=m.value.mainInstance,B=T.coordinates.as(R.referenceCrs),Jt=gi.fromCenterAndSize(B.crs,B.toVector2(),1e3,1e3).toBox3(B.z,B.z+200);m.value.camera.lookTopDownAt(Jt,!1)}}function _(T,R){if(m.value==null||m.value.mainInstance==null||g.getNavigationMode()==="position-on-map"||g.isUserInteracting()||d.isUserDrawing()||C.isUserMeasuring())return;const B=m.value.picker.pick(m.value.mainInstance,T);if((B==null?void 0:B.point)!=null){const K=B.point;s.value.x=K.x,s.value.y=K.y,s.value.z=K.z}(B==null?void 0:B.feature)!=null?(l.value=B.feature.name,o.value=B.feature):(l.value=null,o.value=null),(B==null?void 0:B.pickResult)!=null?m.value.highlighter.highlightFromPick(B.pickResult):m.value.highlighter.clear()}function w(T){T===t.value?t.value=null:t.value=T}function S(T){if(m.value!=null){const R=m.value.picker.getMouseCoordinate(m.value.mainInstance,T);R&&(s.value.x=R.x,s.value.y=R.y,s.value.z=R.z)}}function D(T){if(m.value){if(g.getNavigationMode()==="position-on-map"||g.getNavigationMode()==="orbit"||d.isUserDrawing()||C.isUserMeasuring())return;const R=m.value.picker.hasFeature(m.value.mainInstance,T);m.value.mainInstance.domElement.style.cursor=R?"pointer":"auto"}}return(T,R)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[h.value?(n.openBlock(),n.createBlock(Ug,{key:0})):n.createCommentVNode("",!0),n.createVNode(jg,{id:"main-view",onClick:R[0]||(R[0]=B=>_(B)),onMousemove:M,class:"mainview"}),o.value!=null?(n.openBlock(),n.createBlock(Pg,{key:1,onClose:R[1]||(R[1]=B=>o.value=null),attributes:o.value.attributes,name:o.value.name,parent:o.value.parent,point:o.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):n.createCommentVNode("",!0),n.createVNode(NA,{class:"component statusbar",x:s.value.x,y:s.value.y,z:s.value.z},null,8,["x","y","z"]),n.createVNode(jA,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:R[2]||(R[2]=B=>w(B))},null,8,["active"]),t.value!=null?(n.openBlock(),n.createBlock(IA,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):n.createCommentVNode("",!0),n.createVNode(yA,{progress:i.value,class:"loading-indicator"},null,8,["progress"]),n.createVNode(_A,{id:"address-search",class:"search",onResultSelected:O}),n.createVNode(qg,{class:"navigation-buttons"}),n.createVNode(Qc),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(f).getWidgets(),(B,K)=>(n.openBlock(),n.createElementBlock("div",{key:K,id:`widget-${B.id}`},[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(B.component),{context:T.getContext()},null,8,["context"]))],8,GA))),128))],64))}}),ZA=A._export_sfc(HA,[["__scopeId","data-v-bded1f25"]]);async function WA(e){let t;if(typeof e.configuration=="string"){console.info(`Loading remote configuration from: ${e.configuration}`);const i=await A.loadRemoteConfiguration(e.configuration);console.info("Remote configuration successfuly loaded."),t=i}else t=e.configuration;return t}async function qA(e){const t=await WA(e);await A.setConfiguration(t),console.info("Configuration loaded."),e.dynamicStyles&&A.setDynamicStyles(e.dynamicStyles),A.Download.setBaseUrl(e.baseUrl);const i=wt.createPinia();A.useModuleStore(i).setLoadedModules(e.modules??[]);const a=Qs(i),o={analysis:new Ua(a),baseURL:new URL(A.Download.getBaseUrl()),bookmarks:new Fa(ta(i)),configuration:t,datasets:new bc(A.useDatasetStore(i)),events:bt,notifications:new Mc(Pt(i)),search:new Ec(aa(i)),widgets:new Oc(na(i))},l=o,r=[];if(e.modules)for(const c of e.modules){const u=Promise.resolve(c.initialize(l));r.push(u),console.info(`Module ${c.name} initialized.`)}await Promise.all(r);const h=n.createApp(ZA,{getContext:()=>o});h.use(i),h.mount(e.container)}exports.Fetcher=A.Fetcher;exports.fillObject3DUserData=A.fillObject3DUserData;exports.Bookmark=kt;exports.Projections=pi;exports.createPieroApp=qA;
15
+ Cancel with right-click or Escape`;break}default:return o}i.push(new Q("Navigation",`Navigation mode set to <strong>${l}</strong>.<br>${r}`,"success"))});function a(){s.value!=="position-on-map"?s.value="position-on-map":s.value="orbit"}return(o,l)=>(n.openBlock(),n.createElementBlock("div",Gg,[n.createElementVNode("div",Hg,[l[2]||(l[2]=n.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),n.createVNode(A._sfc_main,{"model-value":s.value==="first-person","onUpdate:modelValue":l[0]||(l[0]=r=>s.value=r?"first-person":"orbit")},null,8,["model-value"]),l[3]||(l[3]=n.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),l[4]||(l[4]=n.createElementVNode("div",{class:"vr mx-2"},null,-1)),n.createElementVNode("button",{class:n.normalizeClass(["btn btn-sm btn-outline-secondary",s.value==="position-on-map"?"active":null]),"aria-pressed":s.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:a},[...l[1]||(l[1]=[n.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Zg)])]))}}),qg=A._export_sfc(Wg,[["__scopeId","data-v-b890a4be"]]),Yg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",Jg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",Xg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIiw9lMgbSWzyACWaoSVKKWLHUpaepSrqnLkAPmglDrv2sklQHHgMXAmqy4hRl3d8X/OEBc50+xBPoAT1VxCpvGjqUD1Ij4yxV0sHSija0rAXbuBDt4YW1ljZPCHmcrOyQSCVKJFKlEgiBIkEukdY6r1mkRRRGtTotWp0Wn05FTWkiusgBlmZKkggwSC9K4VpTJ2bJcLqtKkCM0ld2VVIlg3wPbsuIWlt4FyP8WMLyrQDEZ8GmsfBJkZk0nW0+iPdsT7OKDj4MHNhYKFGaWSCW3VyLTijpKVeUUl5WQnJ9Ocm4aO6+f4kxRGucrihEa/7GvA38AP1JpUhbvAuS/ExRSoAfwCjAEsGjoQgWZWRPlEsJA366EuPrhbOOAjblVq553SUUpecpCLmddY/u1E+zOOMclVQk6GrzPy4GdwCfAnqy4hZq7APnvAIYMGAVMp9Isa/ScrQQpkbYejA+KprNnCF4OblibWd7R61GqLictP4tT6Zf4+/I+DhWmUqLTNnSYo8CXwPKsuIWquwC5M4EhrxKhplHptzCKLAUJMQ6+TGrbl06ewbRxcEP4L10mURRJK8zmbHoiyy/uYXPOZUrFBoHlLPAZ8HtW3EL1XYDcOaLU2CpRKtyYfyMBwqxdiWs3iAjvdng7evxPKmepBZmcSDnPgrNbOFScgdZ4Mews8CnwW1bcQu1dgLRecPQD3geijXneTJDwXEAfBgd3p4NnELJ6LEr/K6TRaTmfkcSOxKN8fmk7ZcaLYMeBN7PiFm64C5DWBYxg4IMqzlEvtbO0Z2r7ofQJisDVxvEuIuqg7JJ8Dlw5wVen1nOmzOgolTXAzKy4hafvAqRlgaEAXgJeA+rUnkVgkL0v/+kwiF6BYSjMLO7u/gZQuUbFwSsnWXBqIxvzrxrjZ6kAvgI+zIpbWHgXILcfHEOBr6mMoK2VdIgMsffj8S73EhXQFTOp7O5ubwJpdVoOJ59m8clNLMs5j6z+LZQEvJAVt3D1XYDcHmA4Ah8Bj1FHfJQO6G3jwXPho4gO6Ir8DgZGUVkJvxxdSwcXP/wcPXG0tsfByrZFP55Wp+VAUgI/xq9lY0ESkrrfRgT+AqZnxS1MvwuQ5gGGQGWs1I9UJiDVSu0t7Jje5T4Gt+uFuczsjj+1T6Vdot/6D5FVGZzdZOYEK1wY5NmJ4e1708bBrcXeTaVVs/3CYb6IX8nJ+nWUbOBpYMWd4pGX3iHgsK6SZz+nMhPPIFlLZLwZOoTZAx+ni1fIbbFKlakryCzKpUKrRtFMTsSDVxJYl3bqxt9LdFquVRSxI+cy3oI5Ed7tW24DSaQEufgwum0MXqIZR3OvUC7qantcUWVI8VPEhu1Wrokvv8tBmg6OTsCfQIda2T0wya0DL/R6AH9nr2adlEqrJr+0iHPpV9iXepo96ec4XpbLMAc/vo+dgZXc9Mr/axvn8UvqMcPrI7Pg0IOf1/u7IpCvLMTK3BKLZuSqyXnpzDv4DwvSjtcXbXwZmJgVt/DoXYA0DhgS4NEqRdy6tucC5Are6zGJfsGRza5npBVm8/zGb9hdko4oitUWTwTmdBzB4z1HmdTzXq5RMeqvN4ivQ3xZ0X8q0YF1Bwvklhbiu2Q6fRUudHXwJcI9mGBXPzp6BCIIpt0GGp2WvYnxvH3wDy5UFNX1aCnwKvB9a3UwSlspOCyBH4B3qMzeM4jsJ7y78eXgZ+nsFXxbomdT8zJ478x6gyeLAOzLvkx/lxA87JxN9pv5ykI+SFiHRqxdZHdFRu+AsDqBeS4tkWVXDpCuLuV4URrr0k6Tk5vOyNAYJCYGiESQ4OfkSWxQLyxKyzicf602n7wcuBcIUcSGbVKuiW91cV2SVggObyqz3KbUxuG8ZJb83vsJ3hkUd1sdfQXlJXUGX1SIOl7e/TO5StOZ/ZPy0imtx5M9L/kgOSV1/+bl3FS9xYx0CWzWg8VJYcdL/R9iWf9n8ZMr6np0ArDXdf6UoLsAqRsc0cB+oFttz4x2DmHNqLe5p22P2x4aklta/8Y/XZbP3P3L0NWuqDaIruWl1fuRtKKOQ1cT6tA/RC7lpuhdD3H2bn4RRZAQExjG6jHv8KB7p7qEzy7APtf5UwbeBYhhcIwHNgJtDN2XCQKfdB7FVyNexMvetUXeUVmurMExRF4M6ovOwIm+9fwhk/zmtpST+oeEewe9fI4NiYdqBaVWp2NL9oXqegIibRw9btvaudk48fGwqXwdPh557SKdK7Dadf6UKVVm/bsAcZ0/ReI6f8qLwO+1KeN+ZgpWDHyeh7uPaFYLTH2UVVpQ7e/F6JgSMYI4r3A9i9HTBxdxLa9pad2l6nLOFKTqHRTPR44m1KK6tXtR1lmu5Rv+vRxlAQeUOdWuKSRyApy8buv6yaUyHggfwprBL9PeolZrvRUwH3izylDzvwuQqmSm2cAXVQqbHg1x8OPvETPp4depxfMyThVer/Z3H5kF1uZWPB8zkXbmttXulWjVfLRnMeWaxuudeSUFXFFX51reMkvaOLrzcEBM9Q0vSNiXGG9Yj8lOxV6o/qlHOAcjl8pbZB3DvENZMvJ1xji3rWtfvgd8U7VH/vcAUjXxr4GZtT3ztE8P5o6Yjo+je6sQA0/WAEiQuS0SiQQ3G0fe7TWZmjmo/2Rf4K/jmxqvf+RnoqohNnWw88LGzJJo/y56+RrLrxxAY0Chv5hzTe9o6e4abHLrVUPIw86ZT++dxksBfeoyfDwLLHadP8X8fwogVRP+BXjGoMyMyOwOw3nrnsewMVe0CnCUa1SklFevseZrYX/DUBATGMaMgN56/25GwkoSrl9s1G9eNrCxB3t3BSDUPYABdtWV7J3FaZxNv1Jd3BNFzudc1Rvb39GzxdfU2sySl/o9xJdhY9HUDpOJwKKWAomkBcBhASyiMh3WAAn80vNR4nqORtqKEphyS4v0FGMPC7sbAJEKEp7uNZZIK+cas4E3d/9CYVlJg39za2qCnm7jU7WxJYLAhODqgDRDYPvlI9WuqbUaduQm6h1A3k6erWJdpRIJkyKG8md0HOa1f+8HqkBi8V8NkCqxamHVhPW1M4mMf/o/y4iOfUzu3W0qFZYW6Z1x1pbVbQp2ltbM7v0oNZOzDymzmLf/b3Si8fF5heVKThWlVbtmLkgIuOXk7+bbSU/MWpJ8CKXqZohTenEup8qrm6cdpOb4OLi3mrUVEBjUrhcrBj6Pq8yiLpD8ertBIrnN4PimimXqkbvMguX3PE9MYFirjH8pK9evneZq5WBQAf2kwwi9618m7WXHxcPGc6zifDI1FdWuBZvZYGN1s7ZdGwdXHvLoXF0hVxUTn3Luph6Tcx1FDQV9nEcnk3FnragzqPc0HCQQ6duBPwe/iFvdIFlUVZDjtpDsNoFDQmWu+NMGFTaZJb8PfoGOnkG0Vso24CR0V9wESHFFKSn5GZxOu8y21ASDG+CVg7+z2s3fKD9Ocn66Hnfo6uSHldy82sk7IrAXS9JP3XLiCay/uJ/ogK4IgsDJzES9A6ezS0CjD6HCshLOZ1zhYOpZTmVfIb+iBC0iDmYKQhy96eHVjs5eITgp7BpldezoGcSK4a/y+MavOFdh0DE7HshznT/l2ay4hbr/CoBQmRb7iqEbnjJLfjMBONQ6DeWqChBFJFIplnILk1ppCsqK9fSBzLICVifsYOe1k+zNu3Kj7GdtlKou5aPdv/HZvc9hLqv7EEzM0fd8R3u00+dYPu1QSKQobznFl6Yn8FJpIQ5WtlzMvab3b/wcGu4gzFUWsvzEFhYk7iZJpdQXPZSwPj8JMXE3jlIzHvXpzsSwofg2whkZ5OLDgmHTeWzDF7WB5Ckqc0vebnYd6TZwjweB7wyJc57ypoMjqziPfxO28/mBv5hx7G/ePLmGted2k3j9Es6WdrjZOptEnzmUdJJtOZeqcYRNmedYe/0Up0qyKNSqjSomfUqZjQ/mdPYMrvO59w4sIbWiuJpi/UKX4bjbVjcCWMrNqSjI40B+8o1rKlFHpI0n3vbuvH7kL0p1mmrvPT3iPuwsrI2at04U2XX5GE9s/oZ/Ms9QqFXXOUsBKBe1HCy4xrKLe3DWSQl1829wzJejlS0xnu3ZeuUwhTqDJbd6K2LDspVr4ps1XF7SzODoC/xkCIh2EjkLB0xtNDg0Wg3L4jcz+J+3eOnkCrYUXkOt0+IsSElXl/JbegJDNn3GD/v+RqVpWk0zEbhQlGHgdKkbENYSKW5Sc70FfzdhFecykuq0mJ0ryaoOBEFGm1pEswEBkdXeRACWX9hNSkEm19TVdScvMwVedi7G6Rc6HYuPrGHsru+5pGp4G5FCrZrn4v/mzU0/UFze8C5xQS7e/Dr4BTxklrXt3a9c508ZfkcCxHX+FH8qE530iteaCRJ+6fcUYd6hjRo7r7SINzZ9z7PH/iJdU17n5N45v4kf9i9vWvCgKHKmuP5UanNBQqiFHW+0HcQ//aey9/45rBj5Og6S6uJUoU7DazvnU1TLpskuzKFQV93t2E3hgq2l4eLzHTyDaCOvvswb8pNYe24vljUU9DFeXZEK9X92nSiy+OhaZiSsrFXMEAA7iQwvmQW2EsPlGyQI/JoWz2ub5lFSUdbgpe/gEciCAc9gIzGoDZhVKe0d7ygRq6or02Yq+/XpncY/93qEAW17NEpRTM5N4/lN37Aq55JR/14A9uReobeDP96NNG2KwMzDf6GtYaaVCQJt5FY85t+L5zoO5aWIUTwbOYoov874OFZWene0siPQ3IFVKdXDQFJVSqxKy+lpIITmaMpZ/q3x/GC3UAYH9zD4fnKpDHmFhq1Z1QMS9+Ql6Z2AU4L7EOruX++cd10+xuOHfzfIJW0lMl4PHcxb3cYyNXwkT4Tdy+S2fRnjE46P1IpjeVdR1zAwnC3NQVuYT7R/FyRCw85lTzsXulh7sCz5qKFvbgUMUMSG/dEcKbzSZgCHFPgVGGTo/sedYhnXdVCj9ILDyaeZsvlrTpblVt8ggsAjbcJ5yLcHhWUFXFfpO+USs68ytl2fRpk3c8uK+CxhQ7XN0snSkb+Hvsz0nuPoGxCOv7MX9pY2BmVtPydPSrIzOFbDr3EgL5kett56iuz6c/vYk1vdI/58+8EEu/rW+o6WcnP+uLSnWmSxoRWe1mko7vUkdOUoC4jb8g0FWv04skluHflhyDQGhvTA1dYJa3NLzKVyrM2tcLN1oodvR+7ziSAv5zrnSqt/pwOFKXS39iTAuU2Dv4Gvowe+EkvWp58xNC9noIMiNuxv5Zp4k1q2mkPEepZafB3P+UXxcLcRDQaHTtSxOmEn47Z+w9UawXs9rd3ZMnwmHw19lsk9RrJszDu82VYfm8dLskhtZHRtrrJQr/5TmJ0XQa6+mBsR8CeXyJga/QC+ZtXDZnSIvLDvF9KLqkfa/pt6vLqFDpE2Th71yuvh1m71ioBu9YBDBJYd38TlCn2dY7p/bz4Y+ky9nNjf2YuPhzzLRLcONUymAu8f+Yvi8ob34xEEgfFdB/FaUP/aHhlJZQHB1quDuM6f0pPKmlV6FOsUxAt9JjX4BC9XVzB37zLiDv9GeY3K4xPdOvLziJdp5x5w45qF3IzHe46mp031j6hFJKO4cQ1eS8v0zZrOFnYNMiO72TjydcxjCAhoEfE3t+WttoP4pMdkzG4BWYVWzfMdhvGSf2+CLO3RIOIsNa/XNCuTSHm8/aA6nwm0tMfDtm6AFJQW8c3lnXrX73duy9TeE7CUGxcSZWtpzdsDHiPEwq7a9TPlhXUmd9UHkmdixjPJvVaV403X+VP6m3JPy0wIDnsq+9vpmRzaWdjx7oDHG1UW50jyGeZc2GrwNHy6xxhcrB0MihsPBffl4PG/apyOjSvFVFimf5raWFo3eJzu/p34u98zeNq74ufoaVAcM5fKGdVlAAAvizrSi3LJLsrF0ohSqeHe7bA5IqNYZ7i3zQjPLvWOcezaWfK0qhr8UuCl6IkNLtfqqLDj7chxTN77czWx76/zOxnYtkejxGwLmRlv9PsPV9Z8zEFllt7yAb+5zp8SnhW3MKvVcJAqT/m3hpRyEPi8z+N4GmlarElRgV15s+09elu7QtQxe/ciPQfejZOwQqlnkvWwaVwxhQxlvt41Fyv7hit8goTeQeEEOrcxyi8gESR42bnQ1TvUqPRiL3s3BjnVbjbv4Fq/cn4g5bSejP9yYB8CXRqXnhvh0wHXGqbuAwXXyC8tavR+c7a2Z07fx7AwvCZewPwqXbjViFhjgEmGbnwVNpYIn8YXNpMKEh7rOZoH3Tvp3dtSkMznu/+gooafI6s4j/kXt1e71tbCDg+HxqXqlhgwx7o1AiDNTQLwZPhIRjmHYCmVUXGL1U0AfOzr1h3UWg3nC67rXe/nH97od3K0sqWTbfXfzdBUNCq6+Vbq6BnEt90erEsfeaRVWLFc50/xAtZjwN/xsEcXpsU80OTKGXKpjB5t2nPyagLXaliojhWl4ayGrm3aIggC1wuyeG7TN3plMAu1Ko4nnURdVoaAgJlMjoUR8rQIbLlwkIMFN0M21KLIlHb9Gs0Vm5Pc7Zy5NySKZzoNYYxPOAOcAgk0t8VRkDGqY786C8yptGrmnlxP7i2+JbkgMKPbGKzNG1818uC108QXpSNWracA3O8T3uT1C3LxoSwvmyOFqYbOigFVVq28ph46TQGHACzDQF8OX7mC1aPf1guNaApdzU1j/NqPSFbrn+i/Rv0HD1sXnt3+PZfr8frqAG+5JT0dfBnm3532HoG42zoblLF1oo6H/v2ArflXGWTrTU+PdnTzakfnNiFGK6ytgTQ6LVJJ3b5/ZUUZkUtfJk99EyAWgoTzj8zFsgm1AE6lX67mSdeo1QS7+eJhggMmT1nIuH9nc7o839DtrcDQphSlaypA7q8CiKSmvP/3gKlEB3Q1+Yc+du0sY7d8pddLz0oiRUBAqWt481UN0MXCniiXYAb6hdPOIxBHhS1mUjmiKHIw+RTBzt7YWdkgl/z3tk8oU1cw8u+3OHWL/8JMEEiY9CUOljat9r2PXTvLqC1foNLPtxGBx7LiFv5y20WsqjYEawDbmvee949hQviQZkl68rBzxk9mw5rrCdXQrRZF1LeEk4hAF0sHzAUJ+bq6A+wkQLamnONFafx97RjfntnCySsnaOfojZuNE972bliZWRoVonEnk1Qi4WDicc7dIp7qgPF+3XC2tm+17+1h64xZaTm7cxINMYDeitiw35Rr4hul9DTli78B6OVthprb8UTPMQ0OJzCe5QnEdurLrLZD6jTaPucXxb9j32Pr+A/ZPGQGb4UOpqOFfX19LBAAL5k50yJG0cEj8LZ9ZK2oQ6ur+iPqWmSjSQQJnV0D9Y7gU2mXWjWwBUHgocjhhFsZFOcdgTm3VcRynT8lHDhAZbBYtcGW959KTGBYsy9KuUbFW5t+ZHH6Cb173RSuLBv7jp5CWq5RkZKXzqm0S/x5aQ/Hi9P1eoRHWDnx1T3PElJHWEdDSUREq9NRXFFKakEmBcUFpBRnk1NaSGlFKRqNmkxVMRpdJTBkEgluZjZIpTIUFgqcrezwsnbC3toeL3tX7C0qQ1qag0OfSL3AgI0fV8trCTS3Yc397+JkZdeqgRKfco7hmz431J1XBwzIilu4q9kBUqWYbwH0SkTGtYnk3cFP3pZC0gD5pUVMXfcFWwtT9E69d9sN48mo2jmZiEh6YTYXMpPZdOUIa9JP0dvBn9n3xBl0PjYUEOVqFZezr3E+M4lLOSlsyT7PHmUOtgh1VRasR1cSKRZFelo5MdA5mLbOvoS6+dPWzQ8LuZlJ6oaptRoe+mc2O4qqW4am+fbitYH/adWdgHWiyKc7FvHFlT2Gbh8GohqqsDcGIPcDy2ted5NZsGHUOw0qC5qUm0ZKfjrRAV0bnSOdnJvGqLUfklYj70GDyOJe/2F4h95GjVNQVoK5TN5oy5QI5JUWEn/tHEevn+PXlCPkaMpvBDhKEbASJIRYO9PTOZD29m2wslBgZWaBwswShcz8Rv9EtU5LibqMMnUFpapySsqVXCi4zsGcRM6XZKHU6W6ckjpErKVmTGkTSS/vjnT1Dm10uuv/045LRxi/64dq8rcIzAjsy7TeE1q0umV9lF2ST+yKWVxRGVQ5pjRUYRcaCA4z4BjQsebm+LLr/TwYea/xJ5VOw0vrvmFp5hkecu/E45Gx1WKqGkLHU84xfNNnejVyLSVS/h00vdF5J8aQSqvm+LVzbEs8ytzkAzf0BwkQauXIA77dCXb2wdfRA1dbZ2zNrZr0eyWqMjIKs0nNzyIxN4Xfk/ZzvjTv5twFgae8uzEooBuRvh2xkJs14iTW8cbG71l4/bjevVinYJ6OvI+ubdo2m57ZVFqZsIO4w78bUrCvAh2z4hYqmwsgTwPzal7vbuXC0rHvNCjW6kDSSWK3fXNjEhIEVg96kW6+HRq1KKtP7+KJg4v1pE9/M2v+Hvl6o3NBaqNcZSG7Lh1l7pmNnK6y+ojAeLf2DPGLpINHIL5Ons1u+RJFkeT8dM6mJbI+6TDLMs/e+KgB5ja81HE4fYMjGyw25ioLeWrtZ+wuTjN4v4eNB6N9IrC1tEGr05JUkMGIdjEmNWyIiCRcv0RhWTF9giKM10/VKv6z8gO2F6YYuv16VtzCj0wOkKqe5GcA35qizIq+z9A3ONLoCShVZUxcMZtDJZk3rkUqXFl2/zuN7l+uE0V+3LecWec36t2LsvHgl9jXsG9EgKEhFr7h3D7mnF5LgbYyLSjMypnHQgfQw78Lvi1cb+p6YRYHryTw64XtHCzJREJlgtOM0CHc17EvbrZORo+Vkp/B1I3fcFCZadTz8yImcn/YPSaZx5Wc6/wRv4F5yQfwkytYO3Y2TgrjjQSHr55myJYvMNPX97KAEGN7txst+Ctiw54HxtW8PsIxiGd63d8gxXz1qV38ePXgDXRKEPihbxz+Tag2LggCnTyDKci6zoni6nkfKaoSinMz6ePftdFKZnG5kjWnd/Pwtm9ZnX6GIp2Wye6deK/7eGbETKSzV4hJANhUsrVQ0N4jgPHt+9HPMQBZeRn7itPYnX2Jped3Yq+V4OvgYZToZWdpzUC/MApy0zlVklXvaSqqyxkV2rtJ759TUsDio+t4Yu8C9hVUdqbK16lx1UqIbEBMn5utE1kZVzldohfUqwDKlWvid5kMIFXV7H4HqkG4QhSZ22dKg9oQZxbn8dSO76uFZE9y78TDkSOaLNPKJFIivdpxNvkMSTV6450szsCuQku4d7sG5XHoRB0HkxJ4esu3LEw+TKFOy2SPTnwV8ygPRw7Ht5aw9ZYmiSChjYMbg4K7c59nJ2RlpWwvSGF75jk2XtxPkJULXg5u9a65wtySgYHdaCu341ROEoXa2qvVZ5UXMSGkd6OkgJKKUlad3snj2+exNvOcXspufN5VRvpEYG9lY/z8rV1YeGmvIV2kvSI2bL5yTXyFSQCiiA2Lw0C07kS39vynARtbBOYf/JcNOTeLOVtLpHwz4EmcDcjI2cX5ZJXk4WBla/RCW8rN6eYRyubEQxRq1bdMVGC0bwQd3I1vWplZlMsnO3/j1ZMrSVeXco+dN3P7PMajkSPxtHdpdeVRa+OsLjaO9A+MYJhrKPn5GewvyWB58hFyM1Po4BqAjUXdBcKlEgnt3P0ZFxJDOzN7xHIlp8rzEah03ApV1rR8nZZxXl3rTemtdshqVBy4cpInNn/NomtHKaklVKhC1GFRVl7Zi9HIdXe2tqc8N4ujhdcNcZES5Zr4PU3WQaosVyeAalXL1IhsHvxyg9jehcyrDF37QbU4qtdDBvJCn0kGFbRPty/m56v7eSFkIBPChuDYABk0PuU847d8SZFOg4fMkh/6PkEPf+N6jOhEkf1XTjB97y8kq5W4ySx4q8soYjv1q7fgW2snlVbNpnP7mXVsOanqUjxllnzSczIDQrobzQk1Oi1F5SVczUtHWVqCTqfD3MISN9vKsBxjxFitqOP09Ut8cehvNuQnGaUMmwkSNgx7tUGloi5kXqXXmtmGms9cA0Kz4haWNYmDKGLDYoGpNa9PcuvAo5EjjRZXNDots3f+wolbZEJfuRWf3PMkVgZY8pm0RKYeXkKZqGNXTiLrL+6lu3Og0Uqmh50zAXI7svIzWDD0BTp7hRgFjlJVOT/sX85zx/4iX6diglt75g2eRi//zq3aSWYsSSVS2rr6cV9AD9QFeewqvMaKa8fRFeQT5tUWMyMOAIkgwVJugYetM75Onvg5e9HG3g0HS5t6pQkRSMpJ5ZNdi3k5fgWXqziRIQoys0YuCDeqRmoRycvLYHjbKKOlFieFHUVZ14nXL9tkByQp18THNxogVZmCP9S0XInA+z0mNqis5IErCcw6ve6GZKkDPokYT7h3O4Ngenv7gmpVMTzlCp6KiG2QXT/IxZuRwb2MbsucWZzLSxu/4+fUY9hKZHwRPp7nYh5okIh3p5C1uRV9A8PpYO7IvvRzbM9L4lzyGbp5hmLXTMaGaVKvUgAAIABJREFUzOJcfj64kmcPLuJIUe11xpykcl4NHcKcAY/T0caTf1KO3wDRpbI8oux98TFy7wmCgKOlDYsu7zMUh+etiA1bUFcllPpg2BGIrnmxr60X3f2Mr9WlVJXxweG/qjnybCQy2rkHGAw43HPpGKtu0VN0iLwSPrrBH04iSOqVr29lxZNWfci6vES6WjqyctgrjAsbVK2gwn8bySRSRnTsw6rhr9PL2o0thdcYv+ZDEq5fbGT2fi0WwIpS/jiyjiH/vMOHl7ZVqyNcU4R6xqcHm0a9y9PRY3FU2NE3OILB9j7VDucPDy+jVG18CazOXiGMc2ln6FZXoGejOYgiNuxDQC/f8v2IcXXWaKpJa07tYn5y9a6valHH8sv7sSxTE+jc5kZ2X3FFKVO3ziVTc1M0HOEQyHMxDzRbQ50jyacZv/lLrqmVxDoHM+/eF/FrJQ1mbgc5KewYGtCNwpx0dhWmsCrpMOG2Xng7ujcpZOX/9Z3p239kUerxWhXw/6cl/Z7i4cgR1czlMokUP2tXFiXuv8EB0tRKOlk40dbNz8iDUsBGas7fyUcN6eCOyjXxfzUYIK7zpzgA31OjSomb3JK3+zyEuZHxODnKQh7fMc/g4qhEHTuyL7Hl0gFcpVb4OHqwOmE7i26pC6VBZG6/J2qtS9tU2psYzwPbv6NEp+E5vyjevecJ7FtxclBzkaXcnN7+YZgpS9mem8iK5CO0s3Ai2MWnwWPpRJGDVxN4Z/sCPr28kyxNmVEwC1O4EeGtb/Rxs3EiKyOZU7c4lk9kJXJ/cJRB/dUQudk6se7CXvI0FYbErIW15YtI6+AekzDQCerN9vfS06+T0YtlZWZBP/d2qArzOK00XIklV1PBytQTnEs+w28pR6m4JR9iqm8vxjeyEqNR4Ng5D7Wo4+22g5nWZ4JReer/rSSXyuju0wEXtcCWrAusTjlB+waARETkYmYyH+/6jVcTVnGlvLBWYPiYKYix9+FS2c1U2X25V7jft5ueKC0RBAIcPJl/YdcNnaBQp8Ybc8LahBo9N2uNwIb0M3qSHZCuXBN/wGiAVIW0fw+0qa6wCMzqNaFBLv9Ke7QD9wR3J9rel8vZSaSrSw3amxPLC6qBw0wiZe7Ap5tFaTyafIbR279BK4q8HTqEp6LHIpfK+F8niSChq1db3HQyNmWeY1XKCYPlUQ1RfmkxfVa+w7GitFoT06wlMj7ofB/v959CP79wlp7fdaMgoFYUMS8ro4+/vq/D0coWs5IS9ubdrIq/PfsSkwJ7Ga1n2lvasODsdgxo5G0UsWE/GVLWpbVwjyAq+5dXux/rHMKjEcMbvfA+jh6MbhtDqNyeg5kXKBPrDs0fYu/H8LbRRrNRY+ls+hVGbf4ClairBEfU2FbVMLSlSRAEOnsG46DSsT37IsuTjzLYNbReE7ul3BxXrYRNGecMmndfD+7Pp/3j6B0YhoXcHGtzS5y0UjZmnL1poMlPYYRHR9xsHPXeyd/Rk7/O76Zc1DLEwY8vox8lxM3PaOnC1kJBXlYqx/UtaE7Av8o18ZnGAuQJYEjN6++E39+owsM1WV079wDGBUXhpIYduVdqNaVdKi9g/cV9eMls8HZ0N4kfIq0wm6c2fUOqWsnzflFM6z3hLueoBSRdvdoiL1ayNy+JbcnxDPPpWq9+5uPoyY5LB8m6pXSQuUTGlntfY2THftjVOO19HDzYfvkQ2VXPywQBZUEOQ0N66fnYrM2t8JRYMcG/O89FT8DH0b3BorelIOevq4cNWXMLlWvit9YLkCrfx09UVsy+CRpBylvRE012mivMLSsrgXt1QVWUz4mSTINsuUCrYmXqCU4mJeBn7YK7XeM7RpWoynh98/fsKkplglsH3hj4WJNK92g0Og4dSsTS0gwrq9aVRFRUVM6hQ4l4eDgglTYuVkwiCER4tyM/K5U9hSlcTb/CwICIOhOmLGRmeMisq7VvqBC1xHp1xs9Ab3YLuRnuMkW150+XZhNl542vgefbufsT6OLd6Pg3OysblpzZZkh68VXEhs1VronX1gkQRWxYWyoLMlS796RfL4aFRpn8Qzpb23NPcHdi7H25nnONa6oSg9Lr1Yoi/rpykNzs6wQ6eDbYeSeKIt/vW8bPqcfoZuXC50OexcGqadaqb7/dxYQJe3F0LCMqKqBVxWYtXryfsWP3odHkMXBgSKPHkVYFgJ5JPsO2whTEwkJi/LvWGUHh5eDGmaunuVLVflqCQFpuKiPbRhnk1r6OnpxMSiCpqh+hBoFwhRthbUJNvqbmMjN0JSXsrtFeArAB1ijXxKfVB5BHgGE1r78ePsrkSUe3nlQ+jh6MDIkmSGrN8exEg/WtRCC+KJ1lF/dgUa7Gz9HTaI62/eJhXohfjqVEyqJBz5vEz+HsbMXy5edYvz6HsWN9cHZuHebh5ORcHnpoO6IIX33VDze3pkUCWMrN6eoayIrLB9iZn0xHC6c6i1rIJFLaWDmx9MrBG9euqUpoZ+ZAOwPNe6QSCV5WjvyWdJCH3Dvzfb8nGBza06RNWKuJ+YKUJYn7DdmJMpVr4nfUlL1qkl7Oh4NEToiRTpmmkJWZBePDh7D1/tm8GtQfalmgIp2Gt86sY+Q/b3Mgqf5S+plFubx+6A8kwDeRk2jvEdDkdy0tVXH0aDJlZSLl5SKffrobtVrb4uDQanXMm7ePtLTKd7l4MZPycnWTxw1y8eHbng8jQ2DG4T9Jya+710o33w5MvqWHuwB8nrCGvFLDeUo9/DqxfeirfHbvNELd/ZuVGwe7+eJhuBf7+Dp1kKo6u3OgevDj/R6dGN2h7237yApzS3r6dmJ0mzCK87M4rcwxKHYpdWri2t9TZzqpVqflgx2/srPgGhPcO/Js1Lgm5W9oNDoOHkzk2WfX8vHHiZSVVQZlxMcrGTDAAT8/5xYFyPHjycTFHUanA5UKli1L4eTJi3Ts6Iizsw0SSeM3np+TF8U5GewpuEZBbgaDgmqPABYEAR87d5Zc2sP/Hxt52go8dDIiDMTfCYKAu63zbclzN5fJyc3N4lCBXotsW0Vs2DLlmvjc2jhITwz09xgW0L1FrChBrj58NeJFVg6YRk+Fm1580IuB/Qyy7Ftp35UTzL9+HDeZOTOiJzXaYiWKkJiYxYsv/kt09Ho2btSv//vmm3spKiprMXCUlamZM2c3anX1lVq7toguXVby2murSU7OaYI+ImFa9Hj8zRQszTrLtguH6nw+1M2PFwL7Vbv2+fnNpBZk0tLUz89g7TYzIKYuEUuvRZGFICH0NohXdcmz0QFdWXL/W8yLnIhXVUtgN6k5k8KH1W21qijl/UNLkQJzIh5oUObjrZSbq+Tbb7fTrt1ffPfd9drBuK+UlStPtNhabdt2lpUrC2q9/9ln1+jYcSk//bSLwsLGAdnF2oE5PR5EArx3dFm9fT4mhA3GWXrT6pWvVbPwyJpGNzMyFQW5eGMnMRiIOrRWEUsRGzaXGmm1na2ceCIytsVLvJhJ5bR3D2BMYE+sVRpG+XWju2/dEcV/n9jCotTjDLBrw0sxE5E1kHuUl6tZteokTzyxkV9+SUdnREXQw4czGTcuCDs7y9u6Pjk5JUyatJ6cnLr1IJVKZO3aTPbtO4eLiwx/f5cGm4G9HdxJTL3AgeIMHNXQ3af2SjS2FgrstAKbb3Eeni1O5z6fiBZNI1CYW7Hv8lGuVugB3EMRG/bl/3vVJbfoH8GAXjzBaL/urSpRyMXGkZf6TmZU57pb0WWX5PPp6XUIwOu9JjUoxkqnEzl8+AqTJy9l7Ni9HD9eYfS/TUvTMn/+/tu+LkuWHOHcOZXRz+/ZU8bIkbt49NGlHD9+FVE0/kSXS2VM7/kAUkFg7qUdpBVm1/n8yA59aWtuiwQY5RzC2mGvGvRx3FYRHhgdYDDS3Q7opMdBFLFhQ2pq8SLwQud7Gy2aNCfVx9GWHN/I6oyzjHdrz8MR9xrNAa9ezeHTT7fxyCOHOXeucW23Dx7MZ/hwdzw8bk9F9IsXMxg/fifqRhirTp0q46efLiCT5REU5IyNjXGcz1FhhzI3i935ySgqVMT4197qwkJuRoDClUkBvYjrMQo3W6dW4TPSiSKLLu+taQCSAMeVa+KP1dRB9DRxhUTapFI8LUU5Jfl8e24LWuCpiPuMirMqKCjlp59207Hjn3z44dUm/b5KBV98sZeKCk3zf2SdyNy5+1AqmybTv/XWZUJD/+D33w9QXFxu1AH1cPi9yAUJvyYd4HpB3T0z+waF0yugS6uSRrzsXXGVGowK6GlISdfLHGxv4YCDwu6OA8jOy0fJ1FbwoFtHQuuxclVUaNi4MYH+/X/nySdPNHmj/T/98UcuO3acbfa57tt3iW+/vW6SsYqLdTz00BH691/Mvn2X0OnqXgtfR08e8QojT6dm4/n9d9w+cbSypZPCYJ5Rv2oAcZ0/xZrK9MNq1MM15EZB5TuFlKpyvkhYixqRyZ0H1co9RFHk2LFkpkxZxrBhOzlxotzk7/LaawfJzVU221yLiyt47719iCY2CB07Vk5MzAZefXUlFy9m1sFFBCZ3HUq5KDL3/NZaOw63VhIEgRhPg1V52rjOn+J6Kwdpj4Gwk56e7e64U+H09YskqkoYaONFlzZtDT6TkpLH7Nkb6NVrFUuW5DTbu5w8Wc7y5ceabfz16xPYutW0m7JzZzO2bh3Eo4+68tlnKYSHL+O773aSk2O4QVOwqy9jnAK5rikjPuXcHbdfOrkFGjI4y4AutwKkQw1xCw0iXq1QOa+P/jm/G4BxIb31Ci4UFpaxePEBunVbwjvvXG6UUttQeuaZk1y5km3ycTMyCpk27bDJx3333R4MHNiOn34ax4YNA4iIsGTatAR69/6d9esTKC2tvmgyiZSxbfsgAn+c3d7i/o2Gkq+jp14VxyojV+itAAnWs3VJ5HjYOt9Rk80oyuWf9AQEQaDvLdXAVSotO3acY9iw33nkkSNkZt6+Fmc6nciPP+5HqzXdxhFFkcWLD5GdbdrYr9Gj7RkypNK3JJdLGTq0I6tWPciCBeGkpmoYPnwnDz9caRa+VT+JDuiKtVTGltxEUvIy7qg942Bli4/cYEuKkFsBoidLhVrYY2VueUdN9mz6ZUp0Wia5dcTF2gFRFDlz5jpPPLGMgQO3cOBAy4SBfPJJMgcPJppOjDx9nVdfPW/y93z99d5YWlbnuvb2lkyZEsPZs5N47TU//vknn6ioNbz66iqSkytDluwsrHnIM5xyUdfq+xnWJIW5JaEWBmP5Ot4KED2XdIC1S6vuJGSINidVyvsD/cLJzChmzpxN9Oy5gkWLsutUZNsGavHx1GJtJWKjaB4R4bPP9pskqlat1vLdd6a3GM2Y4Ut4eO0h7N7ejsyZM5KjR+8jNtaBzz67RnT0Un76aQ8FBWX08w9HBFZcvrOsWTKJlAB7g/n2nQAkVbV3/WreDXK4s/wfheVK/kk7ibpCysFt+fTrt4S33rpISUn9G95aoWHjsq1sWLofT/fmEb9WrixgzZqTTR5n+/bz/PSTacUYNzcpU6fG1BtyIpEIRET4snjxA6xa1RcPDxlPPhnP8OF/cPFoKYJWxtbcRDKL8+6ovdPB0eDB4OA6f4qLBPDHQF5Ie0efO2qSSZkp5Jx3oHBuKO+/kMzFi/qntYWZyMvPZNI/uoJJoyutMgorHbNmXCbY/wR+3in4+dwM1/hqdhJjRyp56hHTfPB33z1aqzXIGCouLmfOnAPNoJh3wtvb+MY6FhZyYmO7sGnTZL77rjNJSRU89eBJLP/oiCLDg+SctDtq73jbuRkyLQiAn4TKurvVvO1aROys7wwHoSiKXLqUyZfvH6fgU09052r323h7icRNPsGyn3/jUlKl+KgslTDyoQ5s3jmQ598cQUVFpbU72F9Hr8g0lnz/FbbWpuEqZ86o+PXXAw2Ke7qV/vzzCHv2lJp0/aKiLJkwoRuNifxwdFTw7LP92LfvAV580ZuUfSIX3nRh6Y/nSb2agckdNM1E9tZ2aAxbsnwkgGdNgKhFWn1PbICsrGK++mobISHLWPxz/f6MIQPy0OpkFBa5M3Jw9dIvsz7tyop11uzcXwmc0KBSklNtuXY9gvZtSxAE03zsN944z4ULDc+HuHYtj9mzE0y+hm++2bPJkccBAS588sl9HDw4gkFDbPjy4zS6+f/Frz9toyivqNXvIw9rJ8oNg9lTqogNG0SNPJByAd6KGNVqqwxWVGj49994pkzZyO+/Gy+PH463wkZhw4I/2vHzH9VN2GkZ1aXMi1fMuJjoREaWGzM/cAcELMxENFqBpsTZabWg0eQxZEio0WHmWq3IZ59tY90608r2//mPK88/36/RVU9q6ideXg4MDVcQOG81+3Fi8dpcDu08jbuLFr9AdyTS1tkVVytqWXxmGxpRT1I4LlXEht1HjTgsb7kVcZ2HGNUr4naSTidy4EAi06evZ/bsS/X6AWJ6VJCSJsPaSkSlrtzVew8rSLxqXPhMZraEw/EWN/jtb/POEt2tgkBfDUdONL6d87FjJQwY4Gh0em5CwjUmTz5o8vX85ZfBeHmZMOJYFCma+y0Bu+YTSyauOPL3dQW//pVG6tmzBAbZ4urh2OoAotHpWH1+j6G6vaclgN4KucosW12lwcuXs5g5cw3R0evrzJq7lYbfk83eNQf59sOm+wymTCompsdFpj3+Kxpt0w+O997ba1TUbHm5mvfe223y9Zw9O5guXdqYdMzSkydRvfcRIODMeeL4njVs4VEK+fUfJZ0i1vHxOytIv5bVqvaWXCrDU26wvK2jhMp6QNXIWW7VasKS8/KU/Pjjbjp0+IuPP75q9L+L7l5Gn14XiOq2npCAIjxcm6ZoX0mWcjQ+hN0HRuLbRkVT0xl27FDy77/1p+du23aOf//NN+maurhI+c9/epo0J0NUayj4/Evg1mohEoLZy9t8zV8coycqXnsvlYh2f7Js8S5KipStBiAuZgYlAgepIjbsQWp40nvaeDC8fe8WfemyMjWbN5/hgQfWsWjRdbQNjKq4ni7n5Ok2+HnbM21mF4qKpZSWNX5DXE2Ro9FY8+VPXqzepDDJHE+dymTMmCBsbQ0rybm5JTz66DoyMkwbUjJ/fneio4NMOmbRunWUzfwAQ20vJehowwWGc4F2OLBLbc+vK7M4vCGBgBALPDwdkcpa7kAWgJ2JxzhZomc8UUoAPd4ia0EPuihWlq6ZPHkpI0fu5MIFVaPG0eng6Ekzpr3WldPnzcnJa7qC+M86KzKzTadoJiZq+OWXA7VaQ5cuPcqJEyqTru+AAdaMHNnFtEpufj7FH35CfT1hrchiJL+xmr95lQy2ndTQ956dTH/yT86eSKQlSW54z5tLDM3KXNYy1qvk5FzeemsNUVGrWbEi3yRm9ItJps1neenpPLzctUy+v8Qk4334YSKnT6fov/fFTGbNOm3Sd5dI4O23o7GxsTDpiVawdBm6g6eM/ifunOVpfmQzOxgrFvHdogKieq7j89n/kp3RMl54O8MtFBwkgAE03H4Hz6FDScTE/MmcOUlUVDT19wWW/niKt6ZnM2lMoUnf8957kjiz90esFaaJlS8rE5k9ezcq1c30XK1Wx9y5+8jJMW3YyxNPeBATE2zSMVXJyShfmdWIL6SlLTv5iO9ZRDwdK1S8/HYKvaP/4NDOU7d9/8klhg9SgwCxt7j9NWY7dfKiUyfTNMq5f7iSqG4XeG3aH5SVmc5U/XxcDs6OhWg1Vgzqdx0bK9McJMuX57Jjx/lbDosrzJuXatL1VSgEnn8+xiQ+jxvHqFZL/jffQUnjo6SlKOnHv7zDDqSAtAL8QzxoLWQQNi1hwbKyMmPmzGg2bNjQ5LHUai0JZwOwsfamT68C/t1gZZJ3/Hq+M4VFkdjZduHr+U6m22givPLKPrp188fcXM6sWXvQmLjew/vvdyA01LQbr/TYMSq+/In6myXXM38krCcMLfDeJ11x9Ww1eUiWrSrhvFevQF56yYfPP7/WpHFWb7ZBJJT0TDOOnjTtFH/9y3TFzsaPd2LGjGh++OEQCxZk8s8/8Tg4WLBlSzEjRtgRF9eF998/xJEjFU36nbZt5UycGGnSddCVllHw/odNBgfAaQbwFa4Mj5Fz732RrWlLGp6dSqtukZeRSiU8+WQv5PKm2+fXbLYyKThcnSvFKVO4DiIizFm3rj+LFo0nMtKPqVN7ATB1ajzTp1em0b76ahSxsV3ZuHEy33/fBXf3xm/EDz7o2eQWCDWpeNMmtGu2NZ3bY838qk7jM2dHY6loVUl6ZRJAT4AsqihtsTcKDnbjq686mWSsRx/IZ+TgMqZOyW3yWFHdiljzWwK/zT2Dg23jdA93dwnz5nVl8+bJ3HtvJywsKvWjLl18mDOnLSqVSEqKhpdf9iEqqtJP4eio4Kmn+nLgwASmT/dG2kDpd/hwO4YO7WDSb6TJzqFo5tsm4R67uZdVWPPKM870jOlAayMJoG5tLzVhQjdCQprmi5FIIMBXxdKffqJfdNMSjMzkMGZ4OiMG/0OX9ulYNNBKKpfD9One7N8/gaef7oOjY3WToiBAnz4363cNHBio16bAz8+Zzz4bxYEDIxgzxvj4qVmz+pi8PVz+r78inr/W5HEK8OUr2mIth8efjkLSgs7CCsNSkygB9Ny05eryFgWIo6OCL77o1aQxOrZV4e+bh0plg7VCQ0TnxjvczM10LFvlxZH4KHbu70J4Z+M57H332bN37wg+/XQU/v6GlU+NRsfvv9/MNly48ITBqoyCINCtWwC//z6R9ev74uVV94Z68UVvunb1Nem3KT97jrIPvmy6YQKB9QwmATkfzwkguKNfi+65YsNSU54M0Luj0qhoaRowoD1jxiSwYkXj4pASzpnx0LOhfDbLhpdntblxUltaiJSVCwhAXYUDBW56g4qVEtZusUEm7cvKjcaxj6AgMz77rAf33NMBhaLuE3z79vP8+GM6bdua4elpxt9/5zNhwknGjIkwbFqxlDNsWBdOnAjgt98OM3PmGcrLa4pzUp57rjcymQnNuhoNBXPnQUHTY6hS6cYbeNGuDUz8T+8W328qjUFDSLlBHSRHXYpaq2nRF7a0lDNzZm/MzZuiFQs3wAHQNkDH+j8PsGJhAu1C6j4E7htWxJsv5vDOyzfLehoDDrkcvv66E/v3P8h994XVC46ionI++qgyjfaLL3rx7rsxCALMnHmE7Oy6vfXOzja8+OJA4uPH8dJL1SNzp00LMnm3K+X+A6i+/73J42ix4Fei0CHhi+964ODcssl5IiJKlUFfTrYE0PsKWWolap2mxVEdFubLjBn+JhnLRiEy88Ukeobvo0fkeZxuqfTy1MM5eLhqmTD65lL0jFAy+7WviOlhfGj2iy+24dSp8Tz3XH9cXIxztq5YcYwdO5SMH+/EgAHtiYoK4tlnPblwQcXixQeNSs8NDfXgk09Gs3v3UAYPrvzdjz++xIIFeykoMI3BRVtcTMHMt0ySRhtPP37GkYn3WtJvUJcW32dqrYZstcF1ypUAesEvmZoytDpdi7+4RCLw+OO9aNOm6WJCSanAGx8EcOh4DF//2Bsvj5ss9eEHEjm29VcszCrn3CFEg5ODmszs9ihLZfTuUbenePBgG3btGsKnn46mbVvjOwFfv57Pa6+dwNxc4JVXorGwkCOVSpg6NQZbW4GXXz7HpUtZRq9V794hrFz5IP/+G0NgoJzHHz9Ov36/sWXLmSZXmi9auw7dvqZ3zyrHmR8Iw1KAV2b1xcLKolUAJE1lkFvnSxWxYWHA4FuvZmhVvNhhMJZmLf/y9vZW2NurWb06vcljFRULXLnqxJIVjpw+Xxlh83xcNr0ir+LkqEajtmXlBkeycqWs2WyHVOLBtJn+XLtuOFwlIEDGvHndmTVrMEFBbg1qkKnTVabRbtiQx+uvBzBxYrcb+RnOztaYm5eweXMWGk0eQ4e2M3psuVxKaKgH48a1w89Pyx9/pLNo0RWuXEkiKMgeNzfbBueBqNPSyI0dD2VN1U1FNjCa7/Bg5gx3Jjwc0yr6hJSrKvjw5Fq0+txxk1QRGxYMjKp558GAXji1ktYHgYEu7NhxjuvXmy72JadW3+yHjiuwtHBm4/Yg3v3MC6325gfbd7j2EJWPPgrl66+H0atXIHJ5w82TCQmpTJp0AC8vKfPmDcPe3qrGnJ1Zt+4sGzcWMnCgI35+DQttsbQ0IzLSjwcfDEAqLeKnn9JZtOgCWm0OgYHODSrUkPfNt2jW7Wjy2ufSllfog42nlG/nDcPO0bZV7K/8smI+OrURc32wLpMAKdQI35UL1NrPuiXI1taSDz6Iabbxv/3Zjh8XO9zIW6+L4uLcOXNmLDNmDMLDo3EHSEWFho8+2gXA7Nlh+Pjob35XV1vmzOlRBca9lJQ0PNxEEP6/4kgs+/cPZ8gQW2bNSqRPnz9ZuHC/USm/pfEnKHvzExMowrCcgVxAxluvBuEd0HoCEtOLc7A0zMnSDQJEgkB+cT6tiWJiQnjkEZfmkUE19eue99yjYOvWQcydez/t23s2qd/41q1nWbo0j+hoS8aMCav1uSFDOjBypB0bN5awalV8o39PKpXQq1cgf/45iWXLonFwkPLYY0cZPvx3du48j1ptOGNRVKko/PIrk6xxEjF8gzu9u0oZ+1BMq9pbhcoipPppUSKQLAGSMeAsPJuf0qomYWYm5eWX+2BhcXtlVj8/Gb/8EsmKFQ8ycGC7RolT1cSMXCWzZlVWKHnvvZg6RR0rKzPeeqsPMhm891486ekFTfptCws548ZFsGnTg3zxRXtOnCinf//NPPPMcs6dS9OzmBVv2476t3+bvIYarPiJnpQg8O6HvbB1sGlVe+tqfrqhXEgRuCrJiluoAq7UvJuYd53WRu3bezJzZtBt+S0LC4E33wxg796JPPpolMmy8JYsOcLRo+U8/LALMTEMS4WxAAAgAElEQVQh9T4fHu7H88/7cPGimvnzD5gky9LFxYYXXhjIsWPjeOIJDxYsyCQy8h8++mgzmZmVhd60BYUUvTeH+tJojaHj3MNSbHlsgg0xAzq3un11Ns8gM8jNilt4I1FbL7czUZlNmbqiVU2k0uwbRXBw89brGj/eiUOHRvHuu8Px8nIw2bhXrmTzwQensbAQePXVvpiZ1c+NpFKBadN64+Ii4ZNPLnPqlGkSqQRBIDjYjblz72fXrqH06GHFzJkXiI7+gyVLDnH9lyUNSqOtjYrx4mM6ASIvv9YXuVnraumn0WlJKjRoIT1ZqW5Ugajm3fMVhZSpylsd2j087Hj33fBmGTs83JxNmwayePEDdO7s3SQ9oyZptSJz5+4lI0PHm28GNyh5ydfXidmzO6NUinzyyW6Tds+VyST07h3CqlUP8uefPdFqRR588BAPTy/iICPQ0ZT6BCJbGcBRzPnobR/advJvdfuppKKUM+UG8+DP3AoQva4nSp2G1MIsWiPFxoZx332mM0E7OkpYsCCCrVsfYvDgDpibm/6UO3Ysia+/TiEkRM6UKb0aDL4HHogkKsqSP/7IYe/eiyZ/PxsbCyZM6M6+fZN4/402HDGz5AG68y7PcpVeiI0IbU8nnDkE0s4JHnmyD4JEQERk49l9JOelt4p2bbklhaRrDDKCi7cC5BxQzXUuRSA1L73VgOJS9rUbiVwKhRkvvNCzyWNKpfD66/4cPfoAU6ZE4+Bg1SzvrlSqeOed3Wi1MGtWRKPMw/b2Vrz+euWcZ8wwXQhJTfL0tOeN2aM5uH8YUybYsAh7+jKMX3icXBpS8EHkL6LIRsI7X3bBzbPSlJ1RlMtzh34jcsWbzN6ygBOpF9C1YBX4a3lpyA1bsM7eCpAzgJ6b9ED6+RYHxvnMJGZv+Zkeq2Zx6OpNValPnxCee67xpTPHjnVk374RfPDBSPz9XZp1Dps2nWbjxiJGjrQlNrZro8cZPLgdDz3kQnx8Of/8E998LywIdIoI5vuFD7J1U28i28C7tGE8E9nEJMqpPx/lDAP5Fjfuu8ecEbek0a47u4dCrRoJMDf5AA9u/ZrC8pIW21/xmZcNmSE0wKkbAMmKW1gG6K340axLLZZ+ey4jife2zKf/mvf5LvkAcgTmHl9FhUZ9Q2GfOjW6weOGhJixenUfFi9+gB49App9HpmZRbz4YqVZ95VXov+vvfMOi+ra2vjvDDP03jtSlCYq9oYtGhNNTDFG0xMNadf0Xm+6Keamm0QT0mOKMVHsXbErooIiAtKkDXWAgRmmnO8PiDLMgDO0mHyu5/G5uWeGM+fsvd+91nr3KheM7u1MrK2lPP74+NZ7HTnXI7C3xNrOmimXx7M57Q6SPo6kACvuIYoHuY8jXIG+A7NLgy1JDEcLPPr4cBycWxLEFE0NfHV6h8F3n4y5Aje7v4f21Ysi+0pNtq7OkycmVbXVIAApRruAqpaqhto+fehT5Xm8vGkpU9e8wacF+w3svi2KIg4VnNciERE+fPTRQDMZMPj44zj27r2Nq68eYtSssrfk++8PUlio5ZFHAhkzJrzb94uLC+SVVyKorhZZtmxvl5vxWGTeebpw18Lp5GTP4aUnfNiEPbMZy1s8SAGj2lvn7OVqVuDIo/e4kXD5+YPQ7dmHyG0TFOgksWLqgFF/m/aoVio43miyRfe5uJq2ADHqeK8S9Zyp6pvzkKzyfF7a+AXT1rzBZ4UHTHX8wQr4KPXPc1pEEGDevJFER3e+Kz/xeBCnT89j4cLJeHg49NkEZGQU88ILmYDAAw+M67E+HAsWjMXfX8qiRXkcPJjXZ+8THOHPy+/cyMFdU7hltiNf4MFMZvATiSho0cYKQniTKEDkP49OQiJpeWeVRs3SjA0G5szd/cYS6Opj9DtqrYaapvpef5+imjJqTFtIh0wB5DDt8tMFILW49/wQEZHT5QU8v+Ezpq15gy+KDtJ8gR1xR91ZMorPk25eXo4sWtTBLjRQg+OTJVx/fzjh4d59ujtptXo++2wvarXIxx8PJCLCp8fuHRDgyttvx6PXw3vv7aWpqe/MYEEQGJEwkMcXjyX83hJk3jqeJYQ53Mp2bmAV0zmFjCWL+xMeFXTu744UZXK48XwXMGtBwvWxk03+xoG840z55Vm+PZhMcW3vMakny3I78j+MASJPTDoDGJ1CJRcc7vHsQr0oki0v5LkNnzF1zet8efYwatF0/om+nQIXgA8PrzR4punT45g9+/yBXkyMjJ9/HssPSwdiN6CCtw79TFMf59mnpGSxZEkpsbHWzJ07gp6O6r722qFMnerIb79Vs3FjRp++m1qr4d3Dv1I3vII3vgvk43fCqMCKOxnESwQS4wU33nKeZdTotXyWlmywGK/xiiLC27hRrEav5eOjqynRNvHU8T+ZsvJFvktd1yv+x+9nTDZErW4lrYw0CMAaI59AraBUUdEjD6XT68iWF/L8hiVMSX6NpLOpnQJjlKMP349bwKopDxoM7qaaPI6dzTr3/21tpTz11Djs7ATefTeK7dtvZe7c4Vw7bAJjHH3Y31DO6vSdfbaAVCotr7zSMvhvvDEKLy/HHv8NR0cbnnuupbDFs88eRKFo6rP323RqH5trCxhk58ZNE2bwnydmcijzeh6/xx0RkXeXjsLD93wnqayyPLbUFBhscvPjZyAxsWucKM5ht+K8WV+p1zLYJ6KDRa6nWtm1qPOyukqOKU2u603yxKRzsYntT8S2AA+2vdAs6jlZdoZgd79uASOrPJ8vDq/i5/ITnSMbGO3gzcIhs5gYMQxbmTUanZbpbqFsqMlrNc3g8yPJLAuJQWiFzvDhoaSnzyMszPNcEo6DtR3Pj76ZmVve57/H/mBUSBz9PPx7fQFZW1vx6afT+emno1xxRVyv/c6ECZG89lohM2ZE4ejYNxX5SxQVvHD4F3TAiyPn4WLXAv6wqCDe/mQet92TT1R0UBszGr49ugF9G58ywTmAWL8Ikyb3d8c3Gnx3pmsIMX6m2cZTZXncuvF97gofz6zYiQS5+ZoEnSnJqSikwXRa+SYDn6/dhwcxUeVkTe6BLgPjREkOj6/7iAlr37wgODykNvw0PpHfbniZ6dFjsJW1ON8yKykPDLvGwNTaVnOG4toKA+c1PNzLKENteEgMD/cbS41Owzu7f0DVBxVbJBKB2NgAXn99Zq+cyp8jLawkPP/8dIYODenRotQdiUan5cM9P1OmVZEYMJRx4Yah+lYyKYOHRWBjfx6s+ZXF/FZq2J03wS/G5P2z5YX8WpbeZrMUuWvQlcisTI/hqswUirVNvJ61mYQ//ssHu35CJ5qXKr41L9Wk9diezTUYVXliUlmrs24gmyuykDdUWwAMPenF2Tyx7mPGr3uT5WUZmBMkLogwODDSZHfdGL9wIqzP8+VKvY6Cqgs3rJcIEh4YcwPRtq78XpHF70e39FmAQ19kk/Zlxuq6E7v5tuQoIdYOPDJunllFztdkptDUbtG+mrWJW39/leSMXdSpzpcQWpu5G00bkmakgzejQ01H/xZWl/FJ3p42jKuOCPcArIQLbxS1TQ2sPHvUNEYTk/I70yAAvxrdUK8lq9Q8OlHZrOLJdR+RsH4RP5WlY91BuLQADHHwxM3qPEVbqVOzMXOvye9LJVY4WxmeXVQ3mJfU5e7gwlvj7gDg6WN/kFaUySWxTE6U5vLQ4Z/QA4tG3YKP84VTgMvrq/ko2zhV1wqBXfUlLNj/LVeteJFvD6wmrTiL93N2GJhmd0Vdhl0Hrci3ZR80aNscbu3IpP4jzHqX0+X5yHUmI9V/NtpgO7DBjOyQtbnmtSG2k1kjlVhh0wkwJjgH8Pvkhaye8xqPDJhi8PlrGcmUKiqN/i6/sph0lSEg9Hrze/eN6hfH67Ez0Yh6HtqxtFfpw3+byOureXr7MlR6Hc/1n8KUASPN+rsapYJ+th3HnQlAlkrBU+mrmLzubQPCJkhmz9Qo0/F21Y11LDpp2Cbj/sipONuad8a1M++IScPHFEllCiA5QFb7i78UH6Ws/sKhDRJBwi2Dp6NpZ8gIwCSXQFZMXsgPs19kXHg8NlJrrht0mYFmUOg0vL7zGyoaahAR0Yt6jhWfZuG2z4yqTtjamF94QBAEbhtxFbf4xpGtruPFbcuobWq4tPrNsAhe3Z7EocYKrvHoz91jrje7EkmUbyir57zGH5MXMtMjAkknyVftCyZc7hONk43p4NGdpw9Rq2s2sC6mx5gXdlTTVMeyNqZZ2z24Lb17Xtu1H5DkNBxmxdsAVxg4aIiMdw0m3Cvogg/h7eRGZVkhx1u7hk5xCebdMbfy4Ng5hHoEGNiuxTVlfJK1wwCpJ5WV/JS5g4LSPD4/to7XM9ZToTWkMaWCwCPxV+PhYH4hZ6nEiqH+kRzLP85WRRFN1XLGhQ65aFpeX2zSrNOweMf3fFOSxmA7Dz6YvtDiSjcyKylB7n5cFTWOy32icNToSFMUX9APTK0r5UR+Oi4SW3xdvM456k0aNQ/vWGqwHp6MmMzUASPPMZqdycG8dH7IP2jqo0/liUlbLwgQAIdZ8aXAfe1p4IaGGq6LnnDBHUQQBHzs3SitLOKd0bewcOwcwjwDsGq3EDU6LS9t+4rTjcaaSSXqOF5fRpG63uRrX+cVxS3x05EIlrE3DtZ2jPCNZH3uQXbVFiIoFIwIGXgJJCaIls/3rGDxmZ3YS6T8OP1RQj0Dus7sCQK+zp5MCh/GdcHDCBFs2Vedh7aDyAkByFXV8nthKmtOpeAmyvB28uBgQQaf5e4+tybUosjihDvM3ig/2PcLGQ1G5rUWWKhMTqsw9RymtcCy+buAhPb22Larnifa17woWI1e22FzRIBtpw9y467PTVWU6FSCZA6svPrZbp3NZJTkMGvDuyj1Wh4NHc+jE2/FRiq7hAxa6PnP9/7Oq6c2IhEE1kx7jGHBMT3+O5XKWnZkHeSTzI1kNl04KNbFSoa71JY89fk4rQWBw3hj+v1mmX0F1aWMXfmiqTi/VGCkPDFJb5YGadUiTcANba+JQJiVI8PNHKzOKDeFqoGHtyxB3iabSwAcrWQ0d8JlD7X3JGn6I4R6BnZrcryd3Jno2Z9V+YfYWZ0PilqGBkZ3yLn/fxG1VsOSPb/yetZmpIKEXyf9p0Oqtbtib21LjF84N0RNYLijHw311WSrajv0VdSi3sD3EIHXRt1EgKt5cXZrMnayodwkg/mGPDHJpN3VGUAKgbsBA2rgcE0Bt0VO6JB+M1d+ObKR74vTDIbigZDRfDr1ARzVGo4qimkSW1iqRlFkmIMHz8bO4IVJd+Ln0jNVy31dPJng2Z/k/IPsqM6nRl7M6OCB2Eit/1+Co0HdyDs7vuP9MynYSaxYPukBxofHW3SP6sY68iuLySjLIas8n9zKlvA+9058F2srGRFeQcyKGs9kjwhkTU0cbChDegHL4kq3ftw/erZZ2qOhuYn7dnxBnXH0rgK4R5mc1tSRqUcnZtZnrb6IgXw16nauipvY5Ykoqinjij9fobLNbuAgWLHlmpcI8wxEFEXq1Y2cqSpGo9Xg4ehKkKuP2bu7iGiWw/aXnCjN5c7NH1LYrGSycyDvTnuAIDef/1fgKK+r4pktX7CuOhdfqR3fXraQIUFRZprSOk4UZ/NLxlbWlp2gvN0Zw3dj5jM91vzkNr2o50xlMSvTt/F5/l6UHXQaWJ5wL1MizaOct57az827l5n66Cd5YtItHVpBnTq0s+JzWwFiYCuVKEqZEz3RyOk27+VF3tv1Iym1hrWInoqcyhXRY885+TZSa3ydPQhw9cbN3hkricRscPyWtpnSukpCPQPMAoq3kzuXBw3mZFEmKfUlbMrZT7xbMH4uXhdFceXeFBGRY2dPc8+G99nbUMpQe0++nv4osf7mJXflV5Xw2rYknjm2irT6UpSi4dmUHpHE6Cn4u5qfbiAIAu4OLowNHcy88LEECTbk15ZQrWs+N5tRdq48M/4WszZNrV7HK7u+JVdVa/z6sECZnFbSVYBUtzrqBl55cbOS0c6B9POwnNU4ejaLJ9NWGMRVeVnZ8NakBTjZ2nd7sjec2MPCQz+ypjCNgfbehJkJElc7J64IG0lNZQk7FWf5Pe8Ars16onxC/7V+SbNWwy9HNnLv3q8p1jYx2yuSj658mCC3C7dwEEWRHTmHuWPLR+yv77i4R5Mo8tiQGbjZWV6oWkDA0caeoYHRzI2cwCA7T+S1ZRRqGnhr6Bzi/M0rIni48CSvnthgahUcAN5UJqeJXQKIMjlNdJgVXwXc0t4ua6qvYWbkWItoVpW2mcc3LyFPXWdw/ZVBsxgfNqRHwLFg/zdoRREtIuuKjhJs5UC0T6hZmsBWZsOksGH466XskGexUZ5FZuFJBnmF4ubgwr9Jl+RXlfD8lqV8cCYFAfhv9JU8Pen2c9G5FxzrzL0s2PMVigs0WlIgsmjknG5vMjZSayJ9+nFd1AQme4QzLDjGLD9YL+r53+7lpqhdgKfkiUnHO/t7c556Ey1V5gxaAa2uzmF+3nGLnLitpw6ws84wJyvc2pGrYid0e8J3Zady175vDGotqUQ9Dx5ejiiKzB58mVkgsZHKuH3kVcT5RfDMrq/ZWJPHjuTXeDlmBnPiL+/wdPefIspmFX8c28qrGckodBoibZx5L2EBI0JizTYn9505xj37vjHJNvpKbZjsNYAEvxgcre1Qapux7kHSw1ZmzZgw87tSZZTk8k3ZcVOlfbKBlRdkYi84oMlpeodZ8Y3AdW2vSxBoqKvkqshxZmuRr46s4WhdqYEB+M7weQwJjOzWoKXkHOGmXZ8b5BG0/Y2NJSfwE2UM9As3axEICPi5eHF1/9HYN6k5UJ3PRnkWe3MO4yNzJNjdz+IDyr9btHodKTlHeHrbFywrOoQOkYdCx/PO1Pvo7x1sNjhKauXctPF/KPSGbJC9xIpXY6/mzUkLuH7gpJboa+8Qon3DzM7R6GnRiXre372c9Pryjqjd3d0GSKsvcgqYB7i3vZ7ZVM0Et1CC3cxrO+Zn787ynD3n/I+R9l48PeHWbqnfvWeOMmfHkk7zAERgY1kmnhqBwQEDzF4MtjIbxoTEMc0nmqKKAvY2lPJbYSoZeem4yxwIdPO56IGi0+s4mJ/B67u+5eXMDRQ3Kxnl6MPSSfcyZ8g0HCyIZ9OLIu/u/J6dtYY90v2ktvw49WFmxo7H/iLoSvaXHC8+zUNpK0wdRBcB85XJaZoeAYgyOU3nMCteC8xsr0UqqkuZFTXOLEbL09GV4tJ80hvK0QPvj72DASbyks2V1MKT3LZ9CSoTdvBElyDKmhvQtdEqW+VZeGogzr+/2QtbEAR8nD2YOWAMwxz9OCbPIVUp59eCQxzPO44DMnydvbC+yE7hGzUqdmYf5o2U7/nvyfVkN1YTJHPgw5E38+T4mwl297OYoTtVns9jqb8YECwyQcIPUxYyIiT2otOYr2xPIrvRZB7T6/LEJLNysM3maR1mxR8H5gIGiQC5agWD7b3p7xVs1mILdPLix5zdXO7WjwfHzDGbvjUFjpu2foxCZ5wheF/QCN6f8RBDHf1ZVZRmYHptlZ/GpqGRYUHRFv22zEpKuFcQN0YmMNjOixOVeRxRVvBnURq/ZG5H2qjCXmaLu4PL32ZSiKLIaXkBa07s4sGdy/gybx85TTX4Se14O/4GXp14B4MCBnRZY684toVtFTkG156PnMq1gydbdO7UF7I79ygvnVzfkfa40xzt8RchZbZ4L5t/O/Bt++txtq78PvsVsxgQnajnibUfcdvg6QwNiu7Sy58ozWXOxveoMtH8/U7/Ibw49W4crVtMh61ZB7h19zKj+q/P9p/Cf8bP7fJiaWhu4sCZY3x9YjOba/LPmXKjnXy5KXw8A/0j6O8dgm0vn8qrtRpyKgo5WZrL72f2sa228NykJjgHkDhwOmPD47tNLqh1Gsb88BjFbdol20ms2Dv7DfxdvC4qcCibm7h55WvsbzDpezwkT0z62Nx7WQoQq1bueFj7z94ceDULRl9r1n2Ka+X4Ont06aDxZNkZ7tr4AfkapdFnd/nH88LUBefAcd5POcZtO5YYJek/1G8sj028tVthMzpRz8nSXPbkHeWj7B1UalUIrQPramXNvIB4hvlFEuLmh5eLBz6O7l3WMCItWXqVdVUU1pZxvCyXH4sOUaFVIbZ+7mQl45HwSSSEDSHOv3+XxtiU5FWVkPDnSwYpsVe7h7P0umd61A/T6nXdjqxenrqBh9N+M7W4s4BBrU2jeh4grSC5Aljf/rqrlYxN1/yXEPfea854Wl7AresXU2Ci6ftwRx+WX/t8h1ll+/PSuWX7JwYgucazP+9OX2iW5jNHmjRqjp89TWpxJr8XHuawshLbVjAIgI0gwV1qw1C3YOLdQgh08sTG2gZrKxkO1nbnTD69KNKgbqRZp0HdrKZcWUNadT6Hawqp1DShEs8bjWpRZJC9G3ODRxAfEMWggAE49gIVfbwoi2kbDZt5PhSWwPNT7uzyPZt1GrZmHaChScmxqnyO1BTSrNexce4bXQZ2iaKCK/94mTLTLQ1ukicm/WzJ/Sy2L+SJSRu8l83/k3ato2t1Ghbv+Yn/zXi4V06e86tKuHfThybBAXBcKedw4UmmDDCdlzw6NI5frB7m/u2fUahp5BrP/rx9+QM9Bg4AO5kNo0LjGBUax736GyisLSO7LJ+sygIOVeayvbaI7GYlZ+VZrJFnWaw9VKIeW4mU6W6hDPcMI9IzmAifEELdA7rsy1ni9Bv5Zd3c6SWChHsOfE9zmyKAvjZdnw+dXs9n+3/vCBzbgF8svWdXV/JzwJVg2H7o1/KTXJuTymWRo3ocHHeuW0ymuuMiYc2iyF0pS1miUTEjNsGkahweHEPStIf44MAK3px6H272xuEP1co6HG3tsLbqHitlJZEQ6u5PqLs/lzMWnV6PVq+lpK6KivoqahpqkTcqqFHV06zToFIbBpPaWNtibSXD1c4RX3s3XB1c8HRyI8DZG5mVtNcBYYqkaC8KdfdTlmWCpF0BhK7XnDmQn86XRYdNWm7As/LEJLFPACJPTMr0Xjb/XeAFI+Ts/5Fk//54O7n3yMSU1VVy38YPTYIj2NqBvOaGc0yFStSTuP9blui0XDNokklmJc6/P19c85RJO1er1/Hi1qVUqRt4ePj1DAuO7jZQ2gLGSmJNqLsfoe4XT4/wthrCVmrToX/kbOuIBMGAETxalY9K29xlIqJOpaRIo8K9jQ8TZuvaFcuf2qZ6Xtj7ncnDYlrSaQ92Sct1Y0zfxkR33HyNkiX7VqC1oOJIh+BQVHL32vdIazSucjLJOZDka//Le4OuM+hhrRNFHjj0I38c246+g8PDjpzAzNIzrJBnsl1RxDVbP+SmFa+w/fQhdHo9/0Zp1mnJqSjk8z0ruOqX5ynppNKLp7M7ju201oHGCk6Vdb26fHrxadzaOfjjPftbrB31op6kA6s4oTKZlVgCvNrlja3LVFpyWrPDrPhsWk7YDd7oiKKYoQ6+hHUj66+ioYa71y7mkNJ40obZe7Lkykfwc/FkkP8AwiT2rC3NOLfviMCaknT89FLi/CPMOhDTi3re2fUD6a1BbQJQ2NxAVW05s2Mm/ONCSy4kW08f5MUdX/L8sWR2VuZQoVURZe3CoIABHfpXOcU5nGgT9CdBoK6mnCsGjLbYqdbp9Xy47xcy2tXHvT9mqlmFQQxYyrxjPJr6qyndoQfulicmpXbZT+rOIMsTk9YDP5h6qkf2f0dRTVmX7lulVPDoho852AE4ls14/Bz3LhEEZg+ZypJh85C2AYIAfJm1jZpG8/pMZJXn82u70qgC8PCw63qMKr2YRKPVsF1x1mAB/Jyzu9PSrDdEGgeVrqrK4be0zRY35NyRfYjvyw2r0jtbyRjRb6BF9ymrq+KxlCSDiIk2kgys6BaR0ANj/WSrGjPUAFo1b+78DpXGslq4ClUDj2z4iM21BUafRdo488WVjxnlIEsEgeuHTCVpzF1Yt+70QTIHvpj6oFllavSiyFepa9C0M8kmuAQyLCSGf6MMCYzCqV1BjX1KOTnywg7/ZlhIDNG2rkabyDPHVvLHsW1md7s6Xnyax/d9Z5RS+2z0Fbha0I5No9PyXsqPJs/EaGlj8J+uOOY9YmK1MbUaHWbFZ9IShmIAuMzGKry0AvFBUWaHIsgkUjRqNZtKTxrtCXeFjuHyqNEmHUlBEIjwCibW1pO08my+v+IxonzN68udLS/kqSMrjHah98feTqhHwL8SII429pTLz3KkrsRgt/QRZYztZ7pIg7WVjAh7L1bkHzYYKR2wtiQdSV0dkd4hHQYsanRa1p7Yxb0pX1LRLi13oJ07L0++y2Rd5o7k17RNvJ29zeSeB9wlT0za391x6hHboTU11wswShDeUnGaBNcQs7LU/tIGsX4RhEkc2FCSYTARKdX5+GolrcGGpgEX4RXENWGjLDqw/HjvrxxQGOapjHT04eExc5D+A7IJRVGkQlnLtqwDWEtlJulrkyCxsmF5nmHl/pJ6OTdGTeiQmQpw9UZbW8v+WmNNs6cmn19P7cKqUYWo16MXQK1tpqCmjH1njvLmnh/5X+4uVO3ScmWCwNeT/2NR3a3UwpPctuerjj7+kQtkCporPRZh5r1svgOwHzAyIv1ldvxx1XMW9eYQgVXHt7Pw0I8G4Q0i8HbcLG4bcVWPFHs7LS9gWvLrqNqYVyLw68T7mdR/eM/a/XotdapGXG0dzwNc6HqYX4O6icMFGWzPO8InRQeRAoEyez4cdxfjIoZe8L516kYu+/lpCtscvorAn1MeZGwnGZ4N6kae3vApKypOdTp/6tbMTltB6LBCiVQQWDr6TmbGjjf7vUsUFdycvIhMlclzsWxaalz1SPfZHvM+lclpGodZ8SnAbbQ7QKzXaykozWVK2DCzVagARPmEMtDei3VFRwdsqF8AABOCSURBVM+ZPwKwWZ6FrbKRoYHR3T4w+2z/SvbWGO6GI+y9eHzc3B7XHgfzjjNy1Su8dXQ1f2TuZEfuYdIKT5Bbmt+SpOVqXtCfWtvM53t+475dX/Jt3n4O1xWfs23r9BqW5x/CVysh2ies003ERiqjuaGBXZW5BuMuNDVy5YAxHf6dtVTGuJDBNFSVc7S+rMP5kwoC1oLQYZ0rW0HCl2MXcGWM+RVPlM1NPLNpCXtM58E3AdfKE5NyemrOepSeUSanyVvLll7TXjudUStQVpeTEBpv0c4f7hlErL03a9uBJKUqD7vGJoYGRnWZZcqrKuah/T8YVNrTA4tGzCPaTP/FXFFrNTyzbRlF6jpkCCi0avKaajlSV8L2qhwUdZVcE2XeLioRBL46spYjSnmHzMvm8lPUyIsZ6j+g0yQmJ2s7vju928CULWqsZnbYaJw6qZZuK7NmYmg8wdiytfxURwd0HcoYJ1++nvogYywoSqfV61i8/Xu+Lz3W0VcekycmrezJeetx/tJhVvwxwBcwsk+O1pfh2NTM8OAYi5J1wj0DGekazOaCNANTKKUqD1FRy/CgmC7Ff311cBW7qg0Puobbe/J0ws09Hk+WfvY0b5zc0OHnhU213DxgvFEkssndWRBAo2V1caf1BjhaX8bO3EOM8I7Ay9HN5Hdc7BzZnX2Q4jZMkFrUM8o5kAHeIZ0vHokVcf79mR0yHDetyIGawk7pXj0ig+09eSP+Bp6ccAv+LuaXAtKLIt8eTObN7C0dfWU58FxP+B29CpDW6vCbgSmAURbVrqpcggU7Yn3DLQJJsJsvw92C2VRwxKBj0f7aQpprq0gIi7cojDy/qoR79n1jkB3Xoj3mEmNm7WFLdr6Xtn/F6aaOu3RpEZnqOcDsesNuDi58nLHpgjy9XKtiZc4+Bti4E+oZaDRGVhIrrDR61pcangFV11UwO3qiWWPqau/EmH6DuCtqIgmu/Rjk4E2krRtR9p4McvRhimc4N4QM54n4WTw6eg7RfmEWbUAisO5ECg8e+bUjvyqt1bTq8f56vXIC1pqiux64HjDaujaVnmSwgzdhnkEWOaiBrj6Mcu/H7qLj54oGCAg8OmgG4Z6Wnb7+dGQD2yoNTdU4WzeeGX9Lj6fPZpTk8HL6GoO9VW+i+mOkjRsjQ8w7KLO3tkVVJeeQ4uwFv9ss6lldlIZM2chA3wij93Ozc+K7zB0GpmZpcwOzAofg4Whe1XQBAXuZLaGeAQwPjmFS+DCmDRjF5QNGkRA+lMEBA/B19uySz7g75wjz93zVkRlXAlwhT0yq6I213GvxE/LEpFJgDi21T41U7d17ktibe9Ti+44IGcjX0x4mWGaPFQI/JtzDFAujh4tr5byZtclol3og7kocLShiYN7uJ/J12jqj5j8vRF6Ov8wwb2PZmRSadRqzF+SU0GEmd9vL3ELQG405LDq9lUfWfUBJu7befi5eTPcwrKSoEUX2FxzvOj0qCEha/3WHKj1UcIIFu5Z2VNC8CZgnT0zK66113KsBRq0xMLcBRrOuEvXM3/U5h/IzLL7vQP8Ivp72MF+Mvp0pkSMtnoBVGTuMTs3j7NyYHjW2x8fgVFkev7YLqfCX2nJz/HSmexnGPZVpmsju5CS7vcQHR+MltTUC5B2x03h74NUmzaPkqhxmr3qdw4UnDZz+udGTjUD16aktNGnU/F2SUZLDgu2fGpUYOmeVwgJ5YlJKbz5Dr0fgyROTkmnpvW60BdTqNNy6/ZMug+TqgRMsBoe8vpq3Ths7endHTe1x7QHwS/pWoyYxd4Un4OXoxphAY3PqZGmu2fd2tLZjYf9J7SZUYNuZVO4YNYvfJi0kUGb8TmeaG7h+8/ssT92ApjVZaWhQNP7twFbQ3MCJkpy/DRy3bfqAcq26I7fkaXli0vLefo4+CVGVJyZ9QUvuiGgKJLds6xpIuiLJGTtRtwvF72ftyAwLDqrMlZyKQpYWGp5U2whWXB83GYBBAZEo22myTUVpFgX+jes3xGiT+K0snWqlgvHhQ1h59fNMcTH2z9SingfTfuXVLV9S29SAq70TswOGGK3CHWdS+xwc6SU53LrpA0q0TR195S3g/b54lr6M4X4bWGQKJAq9hnnbPiYl50iv9jCX11fz9qmNRtcfjb0SF1vHHv+9NSdTjHyPxOCR54ItA129SXA0bLPwe0UWFQ3mHwJH+4UxyMGwX0qDXsveMy3+XYi7H19c/SQP9RtrNLZWCCwtOsSC1W9zpvIsMyPHG3VfWpK3h0qlos8WyaH8DGZvXExpx+D4DHixu0GIFx1AWttbvQR8burzBr2WG3cuYcPJPWZHhVoqG07uQdHOCXaX2pjdIdUSKawu5a0cwx7hGkTmDp52jr2SWUmZ5mdoZskQOGmBWSOVWHFv1LR2DjyszN6NplVTOts68PSUO/l8+M3YC8bE5e76Eq5fs4hCRTmD7QwzQZV6LUf7oK+8iMjO7MPM2fax0Ry1A8dD8sQkXV+t2z7NAmp9sYdaX9RI9KLI7XuT+DF1vVEdq+5KdWMdH5zaZHT9qajpuFkQYm2urM3cbQT0+X5DiGiXDDQsIMpoZz9Wmm3Rbw0LicGmXULXhpoCiqpLDYB0/ZDL+HP64/S3MQ5mLNWquP/AD2SbiG9alb3X4nwPi8Ahiqw8upU5Oz+jqeNq8T8Bj8gTk7R9uWb7PBOotRj2RloqNI6gXUiKQEsdXau6OoYFRfdY99nf0jbxe2m60fWqhipcsCbQzRfrHjo9L62r5I6UZQbmlRaRt8beSmC7XBZnO0feTt+AdZthyGuQM3/gNLPPDFztnMgszCSrXbfgMKkTQwMNu0T5OnsyI3Q4tRUlRtl8gMnEo3RlBXP7jbQoV8Nc0ei0LN23kseP/9nZbr0EuFeemKTp6/X6t6TKtYJkfevvTzAFkj01+ZSV5jM8MLrbBZGV6iYe2PmFSdVdpmlkdfExtp7eh7MoJcDVu9s9Cv84upX17ZpFxtq5MzdmIggCNlLZuSgCa6mMoqIsTrVZ3DW6ZmYFDLKo8IWTxIYVBYYVParqK7kheqLRqbWjjT0Tw4biptazs/LC5pwAxNt7E+MX3qProLapnre2fcN7Z3Z1xEaKreDoc83xtwKkFSQ4zIrfCdQDUzERep+hrCA1/xjDvCLMPtE1JTKpjIm+0dipm9mvKDIZXSrXqlhTks4fmTvxwgY/Fy+LknfOLUqlgvk7P6epHVNWqVWRdGoHn6RvYHFaMr+f3Mn23MMcKzpFdl2ZQSyUBIF4Bx/i/Pub/buOtg78fHK7QRhOqbaJmX6x+DobNz2VWUkZHhzDEHtvthWnG8S4mXyvhkpujJnUY7n5ZyqLeWzTJ52FzIvAa8AzfelzXDQAaQWJ6DArfj9QAEwHjGI8ipuVrMzdS4y9F/08ArrUM1CgpbL8xPChXBcwBHcd7K4pMKnS6/Qa1paks/zkNlx1EvydvSzSYKuPb+ePkvROn0UAarVqzjTVkKooNgDHX2Kj1TIjcqzZ8WX21rbUVJVzsE3vRwFw08GEsPgOnkUg3DOI6QFxZBaf4myzssP7FzTXM9NvID5OHt32N/adOcatWz4ko+PYtGbgYWBxX7FVFyVA/tIkyuS0ow6z4lNpKUZnVDdTLer5ozAVqVJJnG94l2OlBAQ8HF0ZGzqYuSEjcNXo2dUBUJpEHRvLMom0dmGgn3m98OrVjdy/4/POWBiz5UhjJfdGTsTB2vzDS0epLT/l7jO4VtRQwY39x2PXCcg9HFy5ImwETTWVpNaVGuhXnSBwX+Bwno2/joH+Ed2Kcm7SqEk6sIoHDv1oVCe5jSiAW+WJSd8rk9P+7uXJRVOuQ5mcltPql0wBPE3p291VeRzNP85Q74hO+26bAxRXeyfG9hvE7RFj8dQJ7K8pMDqz8JXa8uqEO83WIGszdvFD0RGDBWYrscJBakORTo2mdVeXCFwwR1+GQIJrP4tKJznbObLu1G6q2+R71+u1JLiHXjC33k5mw4SweEJEW1aXneRajwiejJvJooTbuCp6PP08/LsFjoLqUp7atISlhQc748MKgZnyxKTtF8u6vOj6Unovm+9JS07x5R2yNhIZi4bN4arYCT0SeSsiUl5Xxcrj21iSs4OK1vCGtwddy50jrzbrHo3NKmb99iLp7cyGD4bcwOz4qej1eqqb6lGoGmhQKVGrVFQ2KahqqqNW1UBOzVlWVhnSu4+Gjufpy+6yaJKS9q/i2YzVBteu847is1lPmFU4Q6SlJpmHvUuPlDfV6LRsPrWPpw8uR67rNK5rDzBbnphUfjGtx4uycav3svky4A3gsc603LVeA3gu4TZC3P177LcrG2pZeXwb3+emsOLaF8y2udeeSOHOfd8YmGtOEhn7blzUYbJSW8mtPMuoP18yaPjSz8aJnfPewVZmPquWU1HIhNWvGmhDe8GKnde9SrC7b5/OY4migg/3/MK3JWmdaQ19K1P1pDwxSXWxrcWLsiJaKw28BUhvZbhM1vM/1VjFn6f34Ik1EV5BPXJmYm9ty7CgaOZGTTS7OohK28xLO7+mqNmwSN2rsVcxzsz21i52jmzM2kuF5nyIRblWzXWBgy2je+0cOJx7hAL1+WfRIDLM0a/H04g79LB1GtacSOGB7Z+zU1HU2VfrgLuBd/4uGvcfCZA2zvsph1nxK2hJ3zXZ461R1LGu9AQZ+RlEuwXi4ejWJaarvVhiuqXkHOHd7G0G9LFMkPBGwm1mt1eQCALNdXVsrzxvZkkFgVg7D4YEmN8F2EqQYKMXWF183MA8KKsrZ17MlF5tDyeKIjkVRTy35Qvezd5Bnb5TsiINmCFPTNp2MTjjHc4LF7nIE5POAJfRUoC4uSM7cUttAZetW8Ti7d9RVlfVZ8/XrNWw7Ng6o154j0VMNLv7718SZ+IgLqU4w+JC4KNC4nCSSBGBaBsXXo2ZwYeXPUBvtk6sVNby0a7lTE5+jeSqnM4WlgZ4FxgvT0zKvNjXn8A/SLyXzR9NS4/EAZ19z09qyxOxM7h20ORe6bZkYPNXFvG//b9RpqymRq2kXq+hUdTx58xnLlj0oL1UKGsZvPwJg3APURA4OXcxnhYclIqiyE+p64n2DiXSNxSHXmzN3NisYk3GLt7LWEN+J+corZJHSzHpbf+UNfePAkgrSByB54HHMXGw2JaNibV15bHBV3NZ5Og+6d+t1eto1KhQaZrxcnTr0uDes+odVlVkGbzHzwn3MiVy5EU1D2qthh3Zh/hf2p+kNVZd6F21wBfACz1V0O0SQC4MlFHAx7QEPNIZUAbbu/Nw3FVMjhxp0cHb3yEFVaXkVRejVDeh0agpbazByd6JW+OvuCieT6VtJiU7lU+Pr2FvfZk5CygdWChPTNr1T1xn/1iAtIJEBiS2+icX5GNj7dx4KHYGEwcMN5uhuiQtolA1sDs7lU8y1pOqrDBn4ShoiaX6RJ6YpP6nvrfwb5g872Xz/WlJ6b0HM5g5N6kNT0RO47IBI/+11dt7Ss7WlLMt+xCLMzdQrmky5090tPSMeUmemFT4T39/4d80md7L5g9u3bXMOv6WAHcExHNNZAKDAgdc9OZXX0mTVs2xoizWnt7Ll0WHsKAB3eZWYOz/t4yF8G+bXO9l8wVgEvAyLbkmZg1CoLUD/4m8jDEhgwj3DkImkf6/AoVO1JNbUcTBggw+zdxMXnO9JTmEe2gppLD2746+vQQQ84EioSU6+Ckgwdx3lSIwyMGTBVGXMci/P/08A3ss0/Bik2adlqLqUtLOnuLbrO2kKeUGrSbMBMYiYH1rzYF/nfxrAdIOKOOBp2kJgDR7tVsJApE2LtwcNo5hgdGEePrjYe/yjx6PmsY6CqpLOXI2k+W5ezilqu2oamFnPsZ24D1g89+ZzHQJID1vekUDjwI3ABalKIqAr9SG4S5BzOw3gv7ewQS6+eBi54TVRdoBVy+KKJrqKVVUkFmWx/r8Q6QqzlKsVXVl4uuA1cBiIP3fqjH+3wKkHVjcgVtoCZSL68o46BDxtrIlzt6DId4RDPcdgL+bD/5OHtha22LXhXTd7jnWzaibVZTWV1FSU84xeS6Hyk6T3lhBmVZlFApjwb5wGvgK+Ka3CkRfAsjFCxQpEA8soKUSvVdX7yXSUrnETrBioK0bEQ6e+Dt7Ee0WhIeDK872TrjbO+Nm54REIkEikSAgILU6z0r/RQxo9bpzZXZ0eh16EfR6HXq9nlpVAzVN9dQqFdQoFWTVFlNYW0ZeYxXHVTU06rVIEbo7sdW0tFD+HDjSG20FLgHknwcWJ2Bsq2aZCbj31L3FVo2jFkU0QKDUFl+ZHbYSK3xl56N9fa1b/rtCozyXz1GhUaLS6yjRNlKiVSMRRaxbe/718OQpaKFpfwB2yBOTFJdWxSWAdAaW0cAs4FpaOmb926gsHVAOrAX+APbLE5NqLs3+JYBYChYrIIaWM5UpwGTAmYs4l6YTQCiBXa2aIgU4/m9noS4BpO8BY01Lq+uhwBBaKOQoWiKLLxY6S09LBG02LWcVqa3/Mv7JcVGXAPLPBY0jLRRyDBBKS75KFBABOHC+HFZPitj6rxHIB060AiKHFubphDwxqe7S7FwCyMUOHm8gqNWP8abl/MWp9X8dgb8qMkhMaAFoyaJsoOUcop4WhqkSKAVK5IlJJZdGuffk/wBF3Vjak3DLJgAAAABJRU5ErkJggg==",Kg="data:image/png;base64,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",Qg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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";var $g={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@trevoreyre/autocomplete-vue":{description:"Simple autocomplete component in vanilla JS and Vue",license:"MIT"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const td={class:"list-group my-3"},ed={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},id={class:"d-flex w-100 justify-content-between"},sd=["src"],ad={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},nd={class:"d-flex w-100 justify-content-between"},od=["src"],rd={class:"list-group-item"},ld={class:"d-flex w-100 justify-content-between"},hd=["src"],cd={class:"list-group-item"},gd={class:"d-flex w-100 justify-content-between"},dd={class:"text-end"},ud=["src"],Ad=["src"],Cd=["href"],md={key:0,class:"blockquote fw-light"},fd={class:"badge text-bg-light"},Id=n.defineComponent({__name:"AboutPanel",setup(e){const t=$g,i=A.useModuleStore().getLoadedModules();return(s,a)=>(n.openBlock(),n.createElementBlock("div",null,[a[4]||(a[4]=n.createStaticVNode('<p data-v-2c7b769c><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-2c7b769c>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-2c7b769c>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-2c7b769c>Going further</h5><p data-v-2c7b769c> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-2c7b769c>our GitLab project</a> for more info. </p><h5 data-v-2c7b769c>Contributors</h5><p data-v-2c7b769c><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-2c7b769c>Brought to you by the Giro3D contributors.</a></p><h5 data-v-2c7b769c>Sponsors</h5>',6)),n.createElementVNode("div",td,[n.createElementVNode("a",ed,[n.createElementVNode("div",id,[a[0]||(a[0]=n.createElementVNode("span",null,"Oslandia",-1)),n.createElementVNode("img",{src:n.unref(Kg),class:"logo",alt:"Oslandia"},null,8,sd)])]),n.createElementVNode("a",ad,[n.createElementVNode("div",nd,[a[1]||(a[1]=n.createElementVNode("span",null,"BPI France",-1)),n.createElementVNode("img",{src:n.unref(Yg),class:"logo",alt:"BPI France"},null,8,od)])]),n.createElementVNode("span",rd,[n.createElementVNode("div",ld,[a[2]||(a[2]=n.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),n.createElementVNode("img",{src:n.unref(Jg),class:"logo",alt:"France 2030"},null,8,hd)])]),n.createElementVNode("span",cd,[n.createElementVNode("div",gd,[a[3]||(a[3]=n.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),n.createElementVNode("div",dd,[n.createElementVNode("img",{src:n.unref(Xg),class:"logo",alt:"France Relance"},null,8,ud),n.createElementVNode("img",{src:n.unref(Qg),class:"logo",alt:"European Union - Next Generation EU"},null,8,Ad)])])])]),a[5]||(a[5]=n.createStaticVNode('<p data-v-2c7b769c> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-2c7b769c>infos+3d@oslandia.com</a>. </p><h5 data-v-2c7b769c>License</h5><p data-v-2c7b769c><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-2c7b769c>MIT License</a></p><h5 data-v-2c7b769c>Credits</h5><p data-v-2c7b769c>Data and services used from:</p><ul data-v-2c7b769c><li data-v-2c7b769c><a target="_blank" href="https://ign.fr/" data-v-2c7b769c>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-2c7b769c><a target="_blank" href="https://www.grandlyon.com/" data-v-2c7b769c>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-2c7b769c><a target="_blank" href="https://www.openstreetmap.org" data-v-2c7b769c>OpenStreetMap</a> (Imagery) </li><li data-v-2c7b769c><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-2c7b769c>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-2c7b769c><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-2c7b769c>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-2c7b769c><a target="_blank" href="https://oslandia.com" data-v-2c7b769c>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-2c7b769c><a target="_blank" href="https://bimdata.io/" data-v-2c7b769c>BIMData</a> (IFC model)</li></ul><p data-v-2c7b769c>Third-parties:</p>',7)),n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(Object.entries(n.unref(t)),([o,l])=>(n.openBlock(),n.createElementBlock("li",{key:o},[n.createElementVNode("a",{target:"_blank",href:l.homepage},n.toDisplayString(o)+" ("+n.toDisplayString(l.license)+")",9,Cd),l.description?(n.openBlock(),n.createElementBlock("blockquote",md,n.toDisplayString(l.description),1)):n.createCommentVNode("",!0)]))),128))]),a[6]||(a[6]=n.createElementVNode("h5",null,"Loaded modules",-1)),n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(i),o=>(n.openBlock(),n.createElementBlock("li",{key:o.name},[n.createTextVNode(n.toDisplayString(o.name)+" ",1),n.createElementVNode("h6",fd,n.toDisplayString(o.id),1)]))),128))]),a[7]||(a[7]=n.createElementVNode("hr",null,null,-1))]))}}),pd=A._export_sfc(Id,[["__scopeId","data-v-2c7b769c"]]),X=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function vd(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return(X[e&255]+X[e>>8&255]+X[e>>16&255]+X[e>>24&255]+"-"+X[t&255]+X[t>>8&255]+"-"+X[t>>16&15|64]+X[t>>24&255]+"-"+X[i&63|128]+X[i>>8&255]+"-"+X[i>>16&255]+X[i>>24&255]+X[s&255]+X[s>>8&255]+X[s>>16&255]+X[s>>24&255]).toLowerCase()}const ta=Ot.defineStore("analysis",()=>{const e=n.ref([]);function t(s){const a={collapsible:!0,component:n.shallowRef(s.component),icon:s.icon,id:vd(),name:s.name};e.value.push(a)}function i(){return e.value}return{getTools:i,registerTool:t}}),yd=["id"],bd={class:"accordion-header"},Md=["data-bs-target","aria-controls"],Ed=["id"],wd={class:"accordion-body"},Od=n.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},icon:{},id:{},title:{}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:"accordion-item",id:t.id},[n.createElementVNode("h2",bd,[n.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":`#${t.id}-collapse`,"aria-expanded":"false","aria-controls":`${t.id}-collapse`},[t.icon?(n.openBlock(),n.createElementBlock("i",{key:0,class:n.normalizeClass(["bi icon",t.icon])},null,2)):n.createCommentVNode("",!0),n.createTextVNode(" "+n.toDisplayString(t.title),1)],8,Md)]),n.createElementVNode("div",{id:`${t.id}-collapse`,class:"accordion-collapse collapse","data-bs-parent":"#accordionExample"},[n.createElementVNode("div",wd,[n.renderSlot(t.$slots,"default",{},void 0,!0)])],8,Ed)],8,yd))}}),xd=A._export_sfc(Od,[["__scopeId","data-v-acce0d55"]]),kd={class:"accordion",id:"analysis-accordion"},_d={key:0,class:"warning"},Sd=n.defineComponent({__name:"AnalysisPanel",setup(e){const t=ta();return(i,s)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",kd,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getTools(),a=>(n.openBlock(),n.createBlock(xd,{id:a.id,key:a.id,title:a.name,icon:a.icon,collapsible:a.collapsible},{default:n.withCtx(()=>[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(a.component)))]),_:2},1032,["id","title","icon","collapsible"]))),128))]),n.unref(t).getTools().length===0?(n.openBlock(),n.createElementBlock("div",_d,"No analysis tool registered.")):n.createCommentVNode("",!0)],64))}}),Nd=A._export_sfc(Sd,[["__scopeId","data-v-48d1d631"]]),Pd={},Td={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Ld(e,t){return n.openBlock(),n.createElementBlock("fieldset",Td,[t[0]||(t[0]=n.createElementVNode("hr",null,null,-1)),n.renderSlot(e.$slots,"default")])}const Re=A._export_sfc(Pd,[["render",Ld]]),Ue=n.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(e,{emit:t}){const i=t,s=n.ref(!1),a=n.ref(null);function o(g){if(g){const d=[];for(const C of g)d.push(C);i("import",d)}}function l(g){const d=g.target.files;o(d)}function r(g){s.value=!0,g.preventDefault()}function h(g){s.value=!1,g.preventDefault()}function c(g){g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="copy")}function u(g){var C;s.value=!1;const d=(C=g.dataTransfer)==null?void 0:C.files;o(d),g.preventDefault()}return(g,d)=>(n.openBlock(),n.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:r,onDragleave:h,onDrop:u},[n.createVNode(A._sfc_main$1,{title:g.title,text:g.text,icon:g.icon??"bi-box-arrow-left",onClick:d[0]||(d[0]=C=>a.value.click()),class:n.normalizeClass(["w-100",s.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),n.createElementVNode("input",{ref_key:"hiddenInput",ref:a,class:"btn btn-outline-secondary d-none",type:"file",onInput:l,multiple:"true"},null,544)],32))}}),Dd={class:"border p-2"},Bd={class:"float-none w-auto form-text mb-0 px-2"},Vd={key:0,class:"form-text mt-0 mx-2"},Rd=["id","aria-label"],Ud=["value"],Fd={key:1,class:"form-text mt-0 mx-2"},ea=n.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(e,{emit:t}){const i=e,s=t,a=n.ref(i.current);function o(r){const h=i.items[r];a.value=h,s("updated:current",h)}const l=A.MathUtils.generateUUID();return(r,h)=>(n.openBlock(),n.createElementBlock("fieldset",Dd,[n.createElementVNode("legend",Bd,n.toDisplayString(r.label),1),r.descriptionPosition==="top"&&a.value!==null&&a.value.description?(n.openBlock(),n.createElementBlock("div",Vd,n.toDisplayString(a.value.description),1)):n.createCommentVNode("",!0),n.createElementVNode("select",{id:n.unref(l),class:"form-select","aria-label":r.label,onInput:h[0]||(h[0]=c=>o(c.target.selectedIndex))},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(r.items,(c,u)=>(n.openBlock(),n.createElementBlock("option",{key:u,value:u},n.toDisplayString(c.name),9,Ud))),128))],40,Rd),r.descriptionPosition!=="top"&&a.value!==null&&a.value.description?(n.openBlock(),n.createElementBlock("div",Fd,n.toDisplayString(a.value.description),1)):n.createCommentVNode("",!0)]))}}),zd=n.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(e){return(t,i)=>(n.openBlock(),n.createBlock(A._sfc_main,{"model-value":t.visible,"onUpdate:modelValue":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["model-value"]))}}),Xt=A._export_sfc(zd,[["__scopeId","data-v-7c3ff3bf"]]),jd=n.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",null,n.toDisplayString(e.text),1))}}),Fe=A._export_sfc(jd,[["__scopeId","data-v-a385fce5"]]),Gd={class:"list-group-item item"},Hd={class:"d-flex"},Zd=["title"],Wd={class:"icons"},qd=["data-bs-target"],Yd=["id"],Jd={key:1,class:"table table-striped table-sm table-responsive-sm"},Xd=n.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(e){const t=e,i=n.ref(t.annotation.isEditing),s=()=>{i.value=t.annotation.isEditing};return n.onMounted(()=>{t.annotation.addEventListener("isEditing",s)}),n.onUnmounted(()=>{t.annotation.removeEventListener("isEditing",s)}),(a,o)=>(n.openBlock(),n.createElementBlock("li",Gd,[n.createElementVNode("div",Hd,[n.createVNode(Xt,{visible:a.visible,"onUpdate:visible":o[0]||(o[0]=l=>a.$emit("update:visible",l))},null,8,["visible"]),n.createElementVNode("a",{class:"title",title:a.annotation.title,href:"#",onClick:o[1]||(o[1]=l=>a.$emit("zoom"))},n.toDisplayString(a.annotation.title),9,Zd),n.createElementVNode("div",Wd,[n.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${a.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...o[5]||(o[5]=[n.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,qd),n.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:o[2]||(o[2]=l=>i.value?a.$emit("stop-edit"):a.$emit("edit"))},[n.createElementVNode("i",{class:n.normalizeClass(`bi bi-pencil ${i.value?"text-primary":""}`)},null,2)]),n.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:o[3]||(o[3]=l=>a.$emit("download"))},[...o[6]||(o[6]=[n.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),n.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:o[4]||(o[4]=l=>a.$emit("delete"))},[...o[7]||(o[7]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),n.createElementVNode("div",{class:"collapse m-2",id:`collapse-${a.annotation.uuid}`},[Object.entries(a.annotation.properties).length===0?(n.openBlock(),n.createBlock(Fe,{key:0,text:"No properties"})):(n.openBlock(),n.createElementBlock("table",Jd,[o[8]||(o[8]=n.createElementVNode("thead",null,[n.createElementVNode("tr",null,[n.createElementVNode("th",null,"Key"),n.createElementVNode("th",null,"Value")])],-1)),n.createElementVNode("tbody",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(Object.entries(a.annotation.properties),([l,r])=>(n.openBlock(),n.createBlock($s,{key:l,"attr-name":l,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])]))],8,Yd)]))}}),Kd=A._export_sfc(Xd,[["__scopeId","data-v-364a81a5"]]),hs=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],Qd={class:"d-flex flex-column h-100"},$d={class:"list-group list-group-flush flex-fill overflow-auto"},tu=n.defineComponent({__name:"AnnotationPanel",setup(e){const t=Mi(),i=A.useCameraStore(),s=n.ref(t.getAnnotationMode());n.watch(s,c=>{t.setAnnotationMode(c)});function a(c){const u=c.toGeoJSON();A.Download.downloadAsJson(u,`annotation-${c.title}.json`)}function o(){const c=Ys.toCollection(t.getAnnotations());A.Download.downloadAsJson(c,"annotations.json")}function l(c){i.lookTopDownAt(c.object)}function r(c){t.importAnnotationsFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,u)=>(n.openBlock(),n.createElementBlock("div",Qd,[n.unref(t).count===0?(n.openBlock(),n.createBlock(Fe,{key:0,text:"No annotations"})):n.createCommentVNode("",!0),n.createElementVNode("ul",$d,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getAnnotations(),g=>(n.openBlock(),n.createBlock(Kd,{key:g.title,annotation:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onEdit:d=>n.unref(t).edit(g),onStopEdit:u[0]||(u[0]=d=>n.unref(t).stopEdition()),onDelete:d=>n.unref(t).remove(g),onDownload:d=>a(g),onZoom:d=>l(g)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),n.createVNode(Re,{disabled:n.unref(t).isUserDrawing(),id:"annotations-fieldset"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main,{"model-value":n.unref(t).showLabels(),"onUpdate:modelValue":u[1]||(u[1]=g=>n.unref(t).setShowLabels(g)),title:"show labels"},{default:n.withCtx(()=>[...u[6]||(u[6]=[n.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),n.createVNode(ea,{label:"Picking mode","description-position":"top",current:n.unref(hs)[0],items:n.unref(hs),"onUpdated:current":u[2]||(u[2]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),n.createVNode(A._sfc_main$1,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:u[3]||(u[3]=g=>n.unref(t).createPoint())}),n.createVNode(A._sfc_main$1,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:u[4]||(u[4]=g=>n.unref(t).createLine())}),n.createVNode(A._sfc_main$1,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:u[5]||(u[5]=g=>n.unref(t).createPolygon())}),n.createVNode(A._sfc_main$1,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:o}),n.createVNode(Ue,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:r})]),_:1},8,["disabled"])]))}}),eu={key:0},iu={class:"modal-dialog"},su={class:"modal-content"},au={class:"modal-header"},nu={class:"modal-title fs-5",id:"exampleModalLabel"},ou={class:"modal-body"},ru={class:"modal-footer"},lu=n.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(e){return(t,i)=>e.show?(n.openBlock(),n.createElementBlock("div",eu,[i[2]||(i[2]=n.createElementVNode("div",{class:"background"},null,-1)),n.createElementVNode("div",{class:n.normalizeClass(["modal","fade","d-block",e.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[n.createElementVNode("div",iu,[n.createElementVNode("div",su,[n.createElementVNode("div",au,[n.createElementVNode("h1",nu,n.toDisplayString(e.title),1),n.createElementVNode("button",{type:"button",class:"btn-close",onClick:i[0]||(i[0]=s=>t.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),n.createElementVNode("div",ou,[n.renderSlot(t.$slots,"default",{},void 0,!0)]),n.createElementVNode("div",ru,[n.createElementVNode("button",{type:"button",onClick:i[1]||(i[1]=s=>t.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):n.createCommentVNode("",!0)}}),hu=A._export_sfc(lu,[["__scopeId","data-v-1f7f2e97"]]),cu={class:"list-group-item item d-flex d-flex-end"},gu=n.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",cu,[n.createElementVNode("a",{class:"bookmark",href:"#",onClick:i[0]||(i[0]=s=>t.$emit("goto"))},n.toDisplayString(e.name),1),n.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:i[1]||(i[1]=s=>t.$emit("share"))},[...i[3]||(i[3]=[n.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),n.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[4]||(i[4]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),du=A._export_sfc(gu,[["__scopeId","data-v-682112f6"]]),uu={class:"input-group mb-3"},Au={class:"form-control text-truncate"},Cu={class:"input-group-text",id:"basic-addon2"},mu=n.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(e){function t(i){navigator.clipboard.writeText(i)}return(i,s)=>(n.openBlock(),n.createElementBlock("div",null,[s[2]||(s[2]=n.createElementVNode("p",null,"Use this link to share your bookmark",-1)),n.createElementVNode("div",uu,[n.createElementVNode("span",Au,n.toDisplayString(i.url),1),n.createElementVNode("span",Cu,[n.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:s[0]||(s[0]=()=>t(i.url))},[...s[1]||(s[1]=[n.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class St extends A.EventDispatcher{constructor(i,s){super();y(this,"camera");y(this,"name");this.name=i,this.camera=s}static new(i,s){const o=new URL(s).searchParams.get("view");if(o===null)throw new Error("Could not deserialize bookmark");const l=JSON.parse(o),r=new A.Vector3(l.camera[0],l.camera[1],l.camera[2]),h=new A.Vector3(l.target[0],l.target[1],l.target[2]),c=new A.Vector3(l.focalOffset[0],l.focalOffset[1],l.focalOffset[2]),u=new Ve(r,h,c);return new St(i,u)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const i=A.Download.getBaseUrl()+"?",s=this.camera,a={camera:[s.camera.x,s.camera.y,s.camera.z],focalOffset:[s.focalOffset.x,s.focalOffset.y,s.focalOffset.z],target:[s.target.x,s.target.y,s.target.z]},o=new URL(i),l=o.searchParams;return l.set("tour","none"),l.set("view",JSON.stringify(a)),o}goTo(){this.dispatchEvent({type:"goto"})}}function fu(){const e=A.getConfig(),t=[];for(const i of e.bookmarks){const s=i.position,a=i.target,o=i.focalOffset,l=i.title,r=new Ve(new A.Vector3(s.x,s.y,s.z),new A.Vector3(a.x,a.y,a.z),new A.Vector3(o.x,o.y,o.z));t.push(new St(l,r))}return t}const ia=Ot.defineStore("bookmarks",()=>{const e=n.ref(new Set(fu())),t=n.computed(()=>e.value.size);function i(l){e.value.add(l),Mt.dispatchEvent({type:"bookmark-added",value:l})}function s(l){e.value.delete(l),Mt.dispatchEvent({type:"bookmark-removed",value:l})}function a(){e.value.clear()}function o(){return[...e.value]}return{add:i,clear:a,count:t,getBookmarks:o,remove:s}}),Iu={class:"d-flex flex-column h-100"},pu={class:"list-group list-group-flush flex-fill overflow-auto"},vu=n.defineComponent({__name:"BookmarkPanel",setup(e){const t=n.ref(!1),i=n.ref(null),s=n.ref(null),a=Tt(),o=ia(),l=A.useCameraStore();function r(){const m=window.prompt("Bookmark name","New bookmark");if(m!=null){const p=new St(m,l.getCameraPosition());o.add(p)}}function h(){const m=[];for(const p of o.getBookmarks())m.push({title:p.name,url:p.getUrl().toString()});A.Download.downloadAsJson(m,"bookmarks.json")}function c(m){l.setCameraPosition(m.camera)}function u(m){for(const p of m)g(p)}async function g(m){const p=await m.text(),I=JSON.parse(p),f=new Set(o.getBookmarks().map(O=>O.name));let b=0,M=0;I.forEach(O=>{f.has(O.title)?M++:(o.add(St.new(O.title,O.url)),b++)}),a.push(new Q("Bookmarks",`${b} bookmarks imported (${M} skipped)`,"success"))}function d(m){i.value=m.getUrl().toString(),s.value="Share bookmark",t.value=!0}function C(){const m=new St("temp",l.getCameraPosition());i.value=m.getUrl().toString(),s.value="Share current view",t.value=!0}return(m,p)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",Iu,[n.unref(o).count===0?(n.openBlock(),n.createBlock(Fe,{key:0,text:"No bookmarks"})):n.createCommentVNode("",!0),n.createElementVNode("ul",pu,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(o).getBookmarks(),I=>(n.openBlock(),n.createBlock(du,{key:I.name,name:I.name,onShare:f=>d(I),onDelete:f=>n.unref(o).remove(I),onGoto:f=>c(I)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),n.createVNode(Re,null,{default:n.withCtx(()=>[n.createVNode(A._sfc_main$1,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:p[0]||(p[0]=()=>{r(),m.$forceUpdate()})}),n.createVNode(A._sfc_main$1,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:C}),n.createVNode(A._sfc_main$1,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:h,icon:"bi-box-arrow-right",text:"Export bookmarks"}),n.createVNode(Ue,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:u})]),_:1})]),n.createVNode(hu,{show:t.value,title:s.value,onClose:p[1]||(p[1]=()=>t.value=!1)},{default:n.withCtx(()=>[n.createVNode(mu,{url:i.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),yu={},bu={class:"list-group list-group-flush border-start"};function Mu(e,t){return n.openBlock(),n.createElementBlock("ul",bu,[n.renderSlot(e.$slots,"default")])}const xe=A._export_sfc(yu,[["render",Mu],["__scopeId","data-v-461b97dc"]]),Eu=["aria-expanded","aria-controls"],wu={key:0,class:"icon me-2"},Ou={class:"flex-fill"},xu={key:1,class:"icon ms-2"},ku=["id"],oi=n.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(e,{emit:t}){const i=e,s=t,a=A.MathUtils.generateUUID(),o=`#${a}`,l=n.ref(null);return n.onMounted(()=>{var r,h,c;i.expanded&&((r=l.value)==null||r.classList.add("show")),(h=l.value)==null||h.addEventListener("hidden.bs.collapse",()=>s("update:expanded",!1)),(c=l.value)==null||c.addEventListener("shown.bs.collapse",()=>s("update:expanded",!0))}),(r,h)=>(n.openBlock(),n.createElementBlock("div",null,[n.createElementVNode("h6",null,[n.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:o,"data-bs-toggle":"collapse",role:"button","aria-expanded":r.expanded,"aria-controls":n.unref(a)},[r.iconPosition==="left"?(n.openBlock(),n.createElementBlock("div",wu,[...h[0]||(h[0]=[n.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):n.createCommentVNode("",!0),n.createElementVNode("span",Ou,n.toDisplayString(r.title),1),r.iconPosition!=="left"?(n.openBlock(),n.createElementBlock("div",xu,[...h[1]||(h[1]=[n.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):n.createCommentVNode("",!0)],8,Eu)]),n.createElementVNode("div",{ref_key:"collapsible",ref:l,id:n.unref(a),class:"collapse"},[n.renderSlot(r.$slots,"default")],8,ku)]))}}),_u=n.defineComponent({__name:"ListLabel",props:{title:{}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",t.$attrs.class])},n.toDisplayString(t.title),3))}}),Su={class:"slider d-flex"},Nu={key:0,title:"Transparent",class:"bi-x-diamond me-1"},Pu={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},Tu=["value"],Lu={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},Du=n.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",Su,[t.size!=="small"?(n.openBlock(),n.createElementBlock("i",Nu)):n.createCommentVNode("",!0),t.size==="small"?(n.openBlock(),n.createElementBlock("i",Pu)):n.createCommentVNode("",!0),n.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:i[0]||(i[0]=s=>t.$emit("update:opacity",Number.parseFloat(s.target.value))),value:t.opacity},null,40,Tu),t.size!=="small"?(n.openBlock(),n.createElementBlock("i",Lu)):n.createCommentVNode("",!0)]))}}),sa=A._export_sfc(Du,[["__scopeId","data-v-5b0604f2"]]),Bu={class:"list-group-item"},Vu={class:"d-flex"},Ru=n.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(e){const t={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},i={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(s,a)=>(n.openBlock(),n.createElementBlock("li",Bu,[n.createElementVNode("div",Vu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:t[s.type],title:i[s.type]},null,8,["icon","title"])]),_:1}),n.createVNode(Xt,{visible:s.visible,"onUpdate:visible":a[0]||(a[0]=o=>s.$emit("update:visible",o))},null,8,["visible"]),n.createVNode(_u,{title:s.name,class:n.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(n.openBlock(),n.createBlock(sa,{key:0,class:n.normalizeClass(["opacity-slider",s.visible?null:"disabled"]),opacity:s.opacity,"onUpdate:opacity":a[1]||(a[1]=o=>s.$emit("update:opacity",o))},null,8,["class","opacity"])):n.createCommentVNode("",!0)])]))}}),cs=A._export_sfc(Ru,[["__scopeId","data-v-a7bbfe26"]]),Uu={},Fu={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function zu(e,t){return n.openBlock(),n.createElementBlock("div",Fu,[...t[0]||(t[0]=[n.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const aa=A._export_sfc(Uu,[["render",zu]]),ju={class:"d-flex"},Gu={key:0,class:"icon spinner d-inline-block"},Hu={key:1,class:"list-group-item"},Zu=n.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=e,i=n.reactive(t.group.leafs()),s=n.ref(!1),a=n.ref(!1),o=n.ref(t.group.visible);n.watch(i,h=>{s.value=h.some(c=>c.isPreloading),a.value=h.some(c=>c.isPreloaded),o.value=h.some(c=>c.visible)});const l=A.MathUtils.generateUUID(),r=`#${l}`;return(h,c)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",ju,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[...c[10]||(c[10]=[n.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),n.createVNode(Xt,{visible:o.value,"onUpdate:visible":c[0]||(c[0]=u=>h.$emit("update:visible",h.group,u))},null,8,["visible"]),n.createVNode(A.IconList,{class:"me-1"},{default:n.withCtx(()=>[n.createVNode(A.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":r,"aria-controls":n.unref(l),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),n.createVNode(A._sfc_main$3,{class:"label",disabled:!o.value||!a.value,text:h.group.name,title:`Zoom to ${h.group.name}`,onClick:c[1]||(c[1]=u=>h.$emit("zoom",h.group))},null,8,["disabled","text","title"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[s.value?(n.openBlock(),n.createElementBlock("div",Gu,[n.createVNode(aa,{title:"Loading..."})])):n.createCommentVNode("",!0),a.value&&(h.group.config.canMaskBasemap||h.group.config.isMaskingBasemap)?(n.openBlock(),n.createBlock(A.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=u=>h.$emit("update:toggle-mask",h.group))})):n.createCommentVNode("",!0),a.value?(n.openBlock(),n.createBlock(A.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=u=>h.$emit("clipTo",h.group))})):n.createCommentVNode("",!0),a.value?(n.openBlock(),n.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=u=>h.$emit("update:toggle-grid",h.group))})):n.createCommentVNode("",!0)]),_:1})]),n.createVNode(xe,{id:n.unref(l),class:"collapse pb-3"},{default:n.withCtx(()=>[h.group.children.length>0?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(h.group.children,u=>(n.openBlock(),n.createBlock(na,{key:u.name,dataset:u,onZoom:c[5]||(c[5]=g=>h.$emit("zoom",g)),onClipTo:c[6]||(c[6]=g=>h.$emit("clipTo",g)),"onUpdate:toggleGrid":c[7]||(c[7]=g=>h.$emit("update:toggle-grid",g)),"onUpdate:toggleMask":c[8]||(c[8]=g=>h.$emit("update:toggle-mask",g)),"onUpdate:visible":c[9]||(c[9]=(g,d)=>h.$emit("update:visible",g,d))},null,8,["dataset"]))),128)):(n.openBlock(),n.createElementBlock("li",Hu,"No dataset in this group"))]),_:1},8,["id"])],64))}}),Wu=A._export_sfc(Zu,[["__scopeId","data-v-7592eab8"]]),qu={class:"d-flex"},Yu={key:0,class:"icon spinner d-inline-block"},Ju=["id"],Xu=n.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=A.useDatasetStore(),i=e,s=A.refAndWatch(i.dataset,"isPreloading"),a=A.refAndWatch(i.dataset,"isPreloaded"),o=A.refAndWatch(i.dataset,"visible");function l(){t.remove(i.dataset)}return(r,h)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[n.createElementVNode("div",qu,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:n.unref(As)[r.dataset.type]??"bi-file-earmark-x",title:n.unref(Cs)[r.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),n.createVNode(Xt,{visible:n.unref(o),"onUpdate:visible":h[0]||(h[0]=c=>r.$emit("update:visible",r.dataset,c))},null,8,["visible"]),n.createVNode(A._sfc_main$3,{class:"label",disabled:!n.unref(o)||!n.unref(a),text:r.dataset.name,title:`Zoom to ${r.dataset.name}`,onClick:h[1]||(h[1]=c=>r.$emit("zoom",r.dataset))},null,8,["disabled","text","title"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[n.unref(s)?(n.openBlock(),n.createElementBlock("div",Yu,[n.createVNode(aa,{title:"Loading..."})])):n.createCommentVNode("",!0),n.unref(Me).has(r.dataset.type)&&n.unref(a)?(n.openBlock(),n.createBlock(A.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${r.dataset.uuid}`,"aria-controls":`collapse-${r.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):n.createCommentVNode("",!0),n.unref(a)&&("canMaskBasemap"in r.dataset.config&&r.dataset.config.canMaskBasemap||"isMaskingBasemap"in r.dataset.config&&r.dataset.config.isMaskingBasemap)?(n.openBlock(),n.createBlock(A.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:h[2]||(h[2]=c=>r.$emit("update:toggle-mask",r.dataset))})):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getCustomActions(r.dataset,{isVisible:n.unref(o),isPreloaded:n.unref(a)}),c=>(n.openBlock(),n.createBlock(A.IconListButton,{key:c.title,title:c.title,icon:c.icon,onClick:u=>c.action(r.dataset)},null,8,["title","icon","onClick"]))),128)),n.unref(a)?(n.openBlock(),n.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:h[3]||(h[3]=c=>r.$emit("update:toggle-grid",r.dataset))})):n.createCommentVNode("",!0),n.createVNode(A.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:l})]),_:1})]),n.unref(Me).has(r.dataset.type)?(n.openBlock(),n.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${r.dataset.uuid}`},[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(n.unref(Me).get(r.dataset.type)),{dataset:r.dataset},null,8,["dataset"]))],8,Ju)):n.createCommentVNode("",!0)],64))}}),Ku=A._export_sfc(Xu,[["__scopeId","data-v-1aa9a2d7"]]),Qu={class:"list-group-item"},na=n.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",Qu,[n.unref(A.Datagroup).isGroup(t.dataset)?(n.openBlock(),n.createBlock(Wu,{key:0,group:t.dataset,onZoom:i[0]||(i[0]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[1]||(i[1]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[2]||(i[2]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[3]||(i[3]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["group"])):(n.openBlock(),n.createBlock(Ku,{key:1,dataset:t.dataset,onZoom:i[4]||(i[4]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[5]||(i[5]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[6]||(i[6]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[7]||(i[7]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["dataset"]))]))}}),$u={class:"list-group-item d-flex"},tA=n.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",$u,[n.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:n.withCtx(()=>[n.createVNode(A._sfc_main$2,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),n.createVNode(Xt,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),n.createVNode(A._sfc_main$3,{class:"label",disabled:!t.visible,title:`Zoom to ${t.name}`,text:t.name,onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},null,8,["disabled","title","text"]),n.createVNode(sa,{class:n.normalizeClass(["opacity-slider",t.visible?null:"disabled"]),opacity:t.opacity,size:"small","onUpdate:opacity":i[2]||(i[2]=s=>t.$emit("update:opacity",s))},null,8,["class","opacity"]),n.createVNode(A.IconList,{class:"ms-1"},{default:n.withCtx(()=>[n.createVNode(A.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:i[3]||(i[3]=s=>t.$emit("update:move-up"))}),n.createVNode(A.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:i[4]||(i[4]=s=>t.$emit("update:move-down"))})]),_:1})]))}}),eA=A._export_sfc(tA,[["__scopeId","data-v-8755c19f"]]),iA={class:"d-flex flex-column h-100"},sA={class:"flex-fill overflow-auto"},aA=n.defineComponent({__name:"DatasetPanel",setup(e){const t=A.useDatasetStore(),i=A.useCameraStore(),s=A.useLayerStore();function a(r){for(const h of r)t.importFromFile(h)}function o(){const r=document.getElementById("dataset-import-url");t.importFromFile(r.value)}function l(r){const h=t.getBoundingBox(r);h!=null&&h.isEmpty()||i.lookTopDownAt(h)}return(r,h)=>(n.openBlock(),n.createElementBlock("div",iA,[n.createElementVNode("div",sA,[n.createVNode(oi,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:n.withCtx(()=>[n.createVNode(xe,{id:"layers-list-group"},{default:n.withCtx(()=>[n.unref(s).getGraticuleLayer()!==void 0?(n.openBlock(),n.createBlock(cs,{key:0,type:"graticule",opacity:1,name:n.unref(s).getGraticuleLayer().name,isLoading:!1,visible:n.unref(s).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":h[0]||(h[0]=c=>n.unref(s).getGraticuleLayer().visible=c)},null,8,["name","visible"])):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(s).getBasemaps(),c=>(n.openBlock(),n.createBlock(cs,{key:c.name,type:c.type,opacity:c.opacity,name:c.name,isLoading:c.isLoading,visible:c.visible,hasOpacitySlider:c.type==="color"||c.type==="elevation","onUpdate:visible":u=>n.unref(s).setBasemapVisibility(c,u),"onUpdate:opacity":u=>n.unref(s).setBasemapOpacity(c,u)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),n.unref(s).overlayCount>0?(n.openBlock(),n.createBlock(oi,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:n.withCtx(()=>[n.createVNode(xe,null,{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(s).getOverlays(),c=>(n.openBlock(),n.createBlock(eA,{key:c.name,opacity:c.opacity,name:c.name,visible:c.visible,"onUpdate:visible":u=>n.unref(s).setOverlayVisibility(c,u),"onUpdate:opacity":u=>n.unref(s).setOverlayOpacity(c,u),"onUpdate:moveUp":u=>n.unref(s).moveOverlayUp(c),"onUpdate:moveDown":u=>n.unref(s).moveOverlayDown(c)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):n.createCommentVNode("",!0),n.createVNode(oi,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:n.withCtx(()=>[n.createVNode(xe,null,{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getTree(),c=>(n.openBlock(),n.createBlock(na,{key:c.name,dataset:c,onUpdated:h[1]||(h[1]=u=>r.$forceUpdate()),onZoom:h[2]||(h[2]=u=>l(u)),"onUpdate:toggleGrid":h[3]||(h[3]=u=>n.unref(t).toggleGrid(u)),"onUpdate:toggleMask":h[4]||(h[4]=u=>n.unref(t).toggleMask(u)),"onUpdate:visible":h[5]||(h[5]=(u,g)=>n.unref(t).setVisible(u,g))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),n.createVNode(Re,null,{default:n.withCtx(()=>[n.createElementVNode("div",{class:"input-group mb-3"},[h[6]||(h[6]=n.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),n.createElementVNode("button",{onClick:o,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),n.createVNode(Ue,{title:"Import file",text:"Import file",onImport:a})]),_:1})]))}}),nA={class:"list-group-item item"},oA={class:"d-flex"},rA=["title"],lA={class:"icons"},hA=n.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",nA,[n.createElementVNode("div",oA,[n.createVNode(Xt,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),n.createElementVNode("a",{class:"title",title:t.measure.title,href:"#",onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},n.toDisplayString(t.measure.title)+" ("+n.toDisplayString(t.measure.object.length.toFixed(2))+"m)",9,rA),n.createElementVNode("div",lA,[n.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[3]||(i[3]=[n.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),cA=A._export_sfc(hA,[["__scopeId","data-v-bcecb7b2"]]),gs=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],gA={class:"d-flex flex-column h-100"},dA={class:"list-group list-group-flush flex-fill overflow-auto"},uA=n.defineComponent({__name:"MeasurementPanel",setup(e){const t=Ei(),i=A.useCameraStore(),s=n.ref(t.getMeasurementMode());n.watch(s,c=>{t.setMeasurementMode(c)});function a(c){const u=c.toGeoJSON();A.Download.downloadAsJson(u,`measure-${c.title}.json`)}function o(){const c=Qs.toCollection(t.getMeasures());A.Download.downloadAsJson(c,"measures.json")}function l(c){i.lookTopDownAt(c.object)}function r(c){t.importMeasureFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,u)=>(n.openBlock(),n.createElementBlock("div",gA,[u[3]||(u[3]=n.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[n.createElementVNode("i",{class:"bi bi-cone-striped"}),n.createTextVNode(" This feature is experimental ")],-1)),n.unref(t).count===0?(n.openBlock(),n.createBlock(Fe,{key:0,text:"No measurements"})):n.createCommentVNode("",!0),n.createElementVNode("ul",dA,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t).getMeasures(),g=>(n.openBlock(),n.createBlock(cA,{key:g.title,measure:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onDelete:d=>n.unref(t).remove(g),onDownload:d=>a(g),onZoom:d=>l(g)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),n.createVNode(Re,{id:"measures-fieldset"},{default:n.withCtx(()=>[n.createVNode(ea,{label:"Mode","description-position":"top",current:n.unref(gs)[0],items:n.unref(gs),"onUpdated:current":u[0]||(u[0]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),n.unref(t).isUserMeasuring()?(n.openBlock(),n.createBlock(A._sfc_main$1,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:u[1]||(u[1]=g=>n.unref(t).end())})):(n.openBlock(),n.createBlock(A._sfc_main$1,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:u[2]||(u[2]=g=>n.unref(t).start())})),n.createVNode(A._sfc_main$1,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:o,icon:"bi-box-arrow-right",text:"Export measures"}),n.createVNode(Ue,{title:"Import measures from GeoJSON",text:"Import measures",onImport:r})]),_:1})]))}}),AA={class:"panel",id:"panel-container"},CA={class:"title"},mA={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},fA={class:"content"},IA=n.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(e){const t=us(),i=`packages-v1.0.0-beta.5
16
+ `;return(s,a)=>{var o;return n.openBlock(),n.createElementBlock("div",AA,[n.createElementVNode("h5",CA,[n.createTextVNode(n.toDisplayString((o=n.unref(t).find(l=>l.key===s.selected))==null?void 0:o.title)+" ",1),s.selected==="about"?(n.openBlock(),n.createElementBlock("span",mA,"Version: "+n.toDisplayString(n.unref(i)),1)):n.createCommentVNode("",!0)]),n.createElementVNode("div",fA,[s.selected==="datasets"?(n.openBlock(),n.createBlock(aA,{key:0})):n.createCommentVNode("",!0),s.selected==="about"?(n.openBlock(),n.createBlock(pd,{key:1})):n.createCommentVNode("",!0),s.selected==="bookmarks"?(n.openBlock(),n.createBlock(vu,{key:2})):n.createCommentVNode("",!0),s.selected==="analysis"?(n.openBlock(),n.createBlock(Nd,{key:3})):n.createCommentVNode("",!0),s.selected==="annotations"?(n.openBlock(),n.createBlock(tu,{key:4})):n.createCommentVNode("",!0),s.selected==="measures"?(n.openBlock(),n.createBlock(uA,{key:5})):n.createCommentVNode("",!0)])])}}}),pA=A._export_sfc(IA,[["__scopeId","data-v-381fd038"]]),vA=["aria-valuenow"],yA={methods:{tick(){this.$forceUpdate()}}},bA=n.defineComponent({...yA,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":e.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[e.progress!=1?(n.openBlock(),n.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:n.normalizeStyle(`width: ${e.progress*100}%`)},null,4)):n.createCommentVNode("",!0)],8,vA))}}),wi=Ot.defineStore("search",()=>{const e=n.shallowRef([]),t=n.computed(()=>e.value.length);function i(a){e.value.includes(a)||e.value.push(a)}function s(){return[...e.value]}return{getProviders:s,registerProvider:i,searchProviderCount:t}}),MA={class:"main"},EA={class:"result-label"},wA={class:"result-type"},OA={class:"provider"},xA=["v-html"],kA=n.defineComponent({__name:"SearchOverlay",emits:["resultSelected"],setup(e,{emit:t}){const i=t,s=wi();function a(r){return r.label}async function o(r){if(r.length<3)return Promise.resolve([]);const c=s.getProviders().map(g=>g.search(r));return(await Promise.all(c)).flatMap(g=>g)}function l(r){i("resultSelected",r)}return(r,h)=>(n.openBlock(),n.createElementBlock("div",MA,[n.createVNode(n.unref(Ba),{debounceTime:500,search:o,getResultValue:a,onSubmit:l,id:"search-place-autocomplete",placeholder:"Search..."},{result:n.withCtx(({result:c,props:u})=>[n.createElementVNode("li",n.mergeProps(u,{class:"autocomplete-result result"}),[n.createElementVNode("div",EA,[n.createElementVNode("span",wA,[n.createVNode(A._sfc_main$2,{icon:"fg-poi",title:"Location"})]),n.createElementVNode("span",null,n.toDisplayString(c.label),1),n.createElementVNode("p",OA,n.toDisplayString(c.provider.name),1)]),n.createElementVNode("div",{class:"wiki-snippet","v-html":c.snippet},null,8,xA)],16)]),_:1})]))}}),_A=A._export_sfc(kA,[["__scopeId","data-v-de1fa405"]]),SA={class:"d-flex"},NA={class:"text-muted crs"},PA=n.defineComponent({__name:"StatusBar",props:{crs:{},x:{},y:{},z:{}},setup(e){const t=e,i=n.computed(()=>new Yt(t.crs??"EPSG:3857",t.x??0,t.y??0,t.z??0).as("EPSG:4326")),s=n.ref(!0),a=o=>(Math.round((o+0)*10)/10).toFixed(1);return(o,l)=>(n.openBlock(),n.createElementBlock("div",SA,[n.createElementVNode("a",{class:"coordinates",href:"#",onClick:l[0]||(l[0]=()=>s.value=!s.value),title:"Toggle coordinate systems"},[n.createElementVNode("i",{class:n.normalizeClass([s.value?"fg-globe":"fg-grid","text-secondary me-2"])},null,2),n.createElementVNode("span",NA,n.toDisplayString(s.value?"lat/lon":o.crs),1)]),s.value?n.createCommentVNode("",!0):(n.openBlock(),n.createBlock(dt,{key:0,value:o.x.toFixed(0),prefix:"X"},null,8,["value"])),s.value?n.createCommentVNode("",!0):(n.openBlock(),n.createBlock(dt,{key:1,value:o.y.toFixed(0),prefix:"Y"},null,8,["value"])),s.value?(n.openBlock(),n.createBlock(dt,{key:2,value:i.value.latitude.toFixed(4),prefix:"Lat",suffix:"°"},null,8,["value"])):n.createCommentVNode("",!0),s.value?(n.openBlock(),n.createBlock(dt,{key:3,value:i.value.longitude.toFixed(4),prefix:"Lon",suffix:"°"},null,8,["value"])):n.createCommentVNode("",!0),o.z!=null?(n.openBlock(),n.createBlock(dt,{key:4,value:a(o.z),prefix:"Alt",suffix:"m"},null,8,["value"])):n.createCommentVNode("",!0)]))}}),TA=A._export_sfc(PA,[["__scopeId","data-v-efa28d49"]]),LA="data:image/png;base64,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",DA={class:"nav-item"},BA=["id","title"],VA=n.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(e){return(t,i)=>(n.openBlock(),n.createElementBlock("li",DA,[n.createElementVNode("a",{id:`toolbar-${e.tourkey}`,class:n.normalizeClass(["nav-link",e.active?"active":null]),href:"#",title:e.title},[n.createElementVNode("i",{class:n.normalizeClass(["bi",e.icon])},null,2)],10,BA)]))}}),RA={class:"toolbar"},UA={id:"menu",class:"nav nav-pills flex-column"},FA={class:"nav-item mt-2"},zA={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},jA=["src"],GA=n.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(e){const t=us();return(i,s)=>(n.openBlock(),n.createElementBlock("div",RA,[n.createElementVNode("ul",UA,[n.createElementVNode("li",FA,[n.createElementVNode("a",zA,[n.createElementVNode("img",{src:n.unref(LA),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,jA)])]),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(t),a=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[a.enabled?(n.openBlock(),n.createBlock(VA,{active:i.active===a.key,key:a.key,tourkey:a.key,title:a.title,icon:a.icon,onClick:o=>i.$emit("selected",a.key)},null,8,["active","tourkey","title","icon","onClick"])):n.createCommentVNode("",!0)],64))),256))])]))}}),HA=A._export_sfc(GA,[["__scopeId","data-v-f84bccda"]]),oa=Ot.defineStore("widgets",()=>{const e=n.shallowRef([]);function t(s){e.value.push(s)}function i(){return[...e.value]}return{addWidget:t,getWidgets:i}}),ZA=["id"],WA=n.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(e){const t=n.ref("datasets"),i=n.ref(1),s=n.ref(new A.Vector3(0,0,0)),a=new A.Vector2,o=n.ref(null),l=n.ref(null),r=n.ref(!1),h=n.ref(!0);let c=!1;const u=A.useGiro3dStore(),g=A.useCameraStore(),d=Mi(),C=Ei(),m=oa(),p=wi(),I=n.shallowRef(null),f=n.ref();n.onMounted(()=>{u.getMainView()&&M(),u.$onAction(({after:z,args:V,name:q})=>{z(()=>{switch(q){case"setMainView":V[0]===null?b():M();break}})}),f.value=setInterval(()=>{c&&(L(a),W(a),c=!1)},50),setTimeout(()=>{h.value=!1},1e3),Mt.dispatchEvent({type:"ready"})}),n.onUnmounted(()=>{f.value!=null&&(clearInterval(f.value),f.value=void 0),b()});function b(){var D;(D=I.value)==null||D.dispose(),I.value=null}function M(){const D=u.getMainView();if(D===null)throw new Error("mainview is null");I.value=new Zc(D),I.value.addEventListener("update",()=>{I.value&&(i.value=I.value.mainInstance.progress,r.value=I.value.mainInstance.loading)}),e.getContext().view=new Wc({camera:I.value.camera,instance:I.value.mainInstance,sceneCursorManager:I.value.sceneCursorManager})}function O(D){I.value&&(I.value.mainInstance.eventToCanvasCoords(D,a),c=!0)}function k(D){if(I.value&&wc(D)){const z=I.value.mainInstance,V=D.coordinates.as(z.referenceCrs),Kt=di.fromCenterAndSize(V.crs,V.toVector2(),1e3,1e3).toBox3(V.z,V.z+200);I.value.camera.lookTopDownAt(Kt,!1)}}function w(D,z){if(I.value==null||I.value.mainInstance==null||g.getNavigationMode()==="position-on-map"||g.isUserInteracting()||d.isUserDrawing()||C.isUserMeasuring())return;const V=I.value.picker.pick(I.value.mainInstance,D);if((V==null?void 0:V.point)!=null){const q=V.point;s.value.x=q.x,s.value.y=q.y,s.value.z=q.z}(V==null?void 0:V.feature)!=null?(l.value=V.feature.name,o.value=V.feature):(l.value=null,o.value=null),(V==null?void 0:V.pickResult)!=null?I.value.highlighter.highlightFromPick(V.pickResult):I.value.highlighter.clear()}function S(D){D===t.value?t.value=null:t.value=D}function L(D){if(I.value!=null){const z=I.value.picker.getMouseCoordinate(I.value.mainInstance,D);z&&(s.value.x=z.x,s.value.y=z.y,s.value.z=z.z)}}function W(D){if(I.value){if(g.getNavigationMode()==="position-on-map"||g.getNavigationMode()==="orbit"||d.isUserDrawing()||C.isUserMeasuring())return;const z=I.value.picker.hasFeature(I.value.mainInstance,D);I.value.mainInstance.domElement.style.cursor=z?"pointer":"auto"}}return(D,z)=>{var V;return n.openBlock(),n.createElementBlock(n.Fragment,null,[h.value?(n.openBlock(),n.createBlock(Ug,{key:0})):n.createCommentVNode("",!0),n.createVNode(jg,{id:"main-view",onClick:z[0]||(z[0]=q=>w(q)),onMousemove:O,class:"mainview"}),o.value!=null?(n.openBlock(),n.createBlock(Pg,{key:1,onClose:z[1]||(z[1]=q=>o.value=null),attributes:o.value.attributes,name:o.value.name,parent:o.value.parent,point:o.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):n.createCommentVNode("",!0),n.createVNode(TA,{class:"component statusbar",crs:(V=n.unref(u).getMainView())==null?void 0:V.referenceCrs,x:s.value.x,y:s.value.y,z:s.value.z},null,8,["crs","x","y","z"]),n.createVNode(HA,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:z[2]||(z[2]=q=>S(q))},null,8,["active"]),t.value!=null?(n.openBlock(),n.createBlock(pA,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):n.createCommentVNode("",!0),n.createVNode(bA,{progress:i.value,class:"loading-indicator"},null,8,["progress"]),n.unref(p).searchProviderCount>0?(n.openBlock(),n.createBlock(_A,{key:3,id:"address-search",class:"search",onResultSelected:k})):n.createCommentVNode("",!0),n.createVNode(qg,{class:"navigation-buttons"}),n.createVNode(Qc),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(m).getWidgets(),(q,Kt)=>(n.openBlock(),n.createElementBlock("div",{key:Kt,id:`widget-${q.id}`},[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(q.component),{context:D.getContext()},null,8,["context"]))],8,ZA))),128))],64)}}}),qA=A._export_sfc(WA,[["__scopeId","data-v-2df1ef7f"]]);async function YA(e){let t;if(typeof e.configuration=="string"){console.info(`Loading remote configuration from: ${e.configuration}`);const i=await A.loadRemoteConfiguration(e.configuration);console.info("Remote configuration successfuly loaded."),t=i}else t=e.configuration;return t}async function JA(e){const t=await YA(e);await A.setConfiguration(t),console.info("Configuration loaded."),e.dynamicStyles&&A.setDynamicStyles(e.dynamicStyles),A.Download.setBaseUrl(e.baseUrl);const i=Ot.createPinia();A.useModuleStore(i).setLoadedModules(e.modules??[]);const a=ta(i),o={analysis:new Ua(a),baseURL:new URL(A.Download.getBaseUrl()),bookmarks:new Fa(ia(i)),configuration:t,datasets:new bc(A.useDatasetStore(i)),events:Mt,notifications:new Mc(Tt(i)),search:new Ec(wi(i)),widgets:new Oc(oa(i))},l=o,r=[];if(e.modules)for(const c of e.modules){const u=Promise.resolve(c.initialize(l));r.push(u),console.info(`Module ${c.name} initialized.`)}await Promise.all(r);const h=n.createApp(qA,{getContext:()=>o});h.use(i),h.mount(e.container)}exports.Fetcher=A.Fetcher;exports.fillObject3DUserData=A.fillObject3DUserData;exports.Bookmark=St;exports.Projections=vi;exports.createPieroApp=JA;
17
17
  //# sourceMappingURL=index.cjs.js.map